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;