You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

108 lines
3.6 KiB

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;