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;