return: text
|
|
lang: plpgsql
|
|
src: |
|
|
DECLARE
|
|
result TEXT;
|
|
_module_pmsimco TEXT;
|
|
BEGIN
|
|
|
|
RAISE NOTICE '%' , 'Initialisation poles';
|
|
-- Contenu table
|
|
INSERT INTO base.t_pole (oid, code, texte, texte_court)
|
|
SELECT 0, '**', 'Non renseigné', 'Non renseigné'
|
|
WHERE 0 NOT IN (SELECT oid FROM base.t_pole);
|
|
|
|
-- replication dans eco
|
|
TRUNCATE eco.t_pole;
|
|
INSERT INTO eco.t_pole (oid, code, texte, texte_court, section_id, section_code, section_texte)
|
|
SELECT oid, code, texte, texte_court, section_id, section_code, section_texte
|
|
FROM base.t_pole
|
|
;
|
|
|
|
|
|
|
|
-- Traduction des règles en oid
|
|
RAISE NOTICE '%' , 'Application des regles. Traduction en oid';
|
|
DROP TABLE IF EXISTS w_pole_rule;
|
|
CREATE TEMP TABLE w_pole_rule AS
|
|
SELECT
|
|
t_pole_rule.oid,
|
|
pole_id,
|
|
|
|
priorite,
|
|
CASE WHEN liste_finess <> '' THEN '1' ELSE '0' END AS a_liste_finess,
|
|
string_to_array(translate(liste_finess,'*,','% '),' ') AS liste_finess,
|
|
NULL::bigint[] AS liste_finess_id ,
|
|
|
|
CASE WHEN liste_site <> '' THEN '1' ELSE '0' END AS a_liste_site,
|
|
string_to_array(translate(liste_site,'*,','% '),' ') AS liste_site,
|
|
NULL::bigint[] AS liste_site_id ,
|
|
|
|
CASE WHEN liste_unite_fonctionnelle <> '' THEN '1' ELSE '0' END AS a_liste_unite_fonctionnelle,
|
|
string_to_array(translate(liste_unite_fonctionnelle,'*,','% '),' ') AS liste_unite_fonctionnelle,
|
|
NULL::bigint[] AS liste_unite_fonctionnelle_id
|
|
|
|
|
|
FROM eco.t_pole_rule
|
|
JOIN eco.t_pole ON pole_id = t_pole.oid
|
|
ORDER BY priorite, pole_id;
|
|
|
|
|
|
|
|
UPDATE w_pole_rule
|
|
SET liste_finess_id = (SELECT base.cti_group_array3(oid) FROM base.t_finess WHERE oid <> 0 AND code LIKE ANY (liste_finess))
|
|
WHERE a_liste_finess = '1';
|
|
|
|
UPDATE w_pole_rule
|
|
SET liste_site_id = (SELECT base.cti_group_array3(oid) FROM eco.t_sites WHERE oid <> 0 AND code LIKE ANY (liste_site))
|
|
WHERE a_liste_site = '1';
|
|
|
|
UPDATE w_pole_rule
|
|
SET liste_unite_fonctionnelle_id = (SELECT base.cti_group_array3(oid) FROM eco.t_unites_fonctionnelles WHERE oid <> 0 AND code LIKE ANY (liste_unite_fonctionnelle))
|
|
WHERE a_liste_unite_fonctionnelle = '1';
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles.';
|
|
DROP TABLE IF EXISTS w_mouvements_articles;
|
|
CREATE TEMP TABLE w_mouvements_articles AS
|
|
SELECT p_mouvements_articles.CTID AS from_CTID,
|
|
COALESCE(MIN(priorite),999999999) AS pole_priorite,
|
|
COALESCE((MIN(ARRAY[priorite,w_pole_rule.pole_id]))[2],0) AS pole_id
|
|
FROM eco.p_mouvements_articles
|
|
JOIN eco.t_sites ON t_sites.oid = site_id
|
|
JOIN w_pole_rule ON
|
|
(a_liste_finess = '0' OR finess_id = ANY (liste_finess_id)) AND
|
|
(a_liste_site = '0' OR site_id = ANY (liste_site_id)) AND
|
|
(a_liste_unite_fonctionnelle = '0' OR unite_fonctionnelle_id = ANY (liste_unite_fonctionnelle_id))
|
|
GROUP BY 1
|
|
ORDER BY 2,1
|
|
;
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles. Validation des poles';
|
|
|
|
UPDATE eco.p_mouvements_articles
|
|
SET pole_id = w_mouvements_articles.pole_id
|
|
FROM w_mouvements_articles
|
|
WHERE p_mouvements_articles.CTID = w_mouvements_articles.from_CTID AND
|
|
p_mouvements_articles.pole_id IS DISTINCT FROM w_mouvements_articles.pole_id
|
|
;
|
|
|
|
|
|
|
|
|
|
ANALYSE eco.p_mouvements_articles
|
|
;
|
|
|
|
INSERT INTO eco.p_oids (code_table, oid)
|
|
SELECT 'pole', pole_id
|
|
FROM eco.p_mouvements_articles
|
|
WHERE pole_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'pole')
|
|
GROUP BY 2;
|
|
|
|
|
|
RETURN 'OK';
|
|
END;
|