return: text
lang: plpgsql
parameters:
  p0:
    type: bigint
    name: i_rapport_id
src: |
  DECLARE	
  	
  BEGIN
  	
  	DROP TABLE IF EXISTS w_VP_rapports_rubriques;
  	CREATE TEMP TABLE w_VP_rapports_rubriques AS
  	SELECT t_rapports_rubriques.*,
  		array_cat(CASE WHEN erase_rapport_indicateur_condition IS DISTINCT FROM '1' THEN t_rapports.rapport_indicateur_condition_id ELSE NULL END,indicateur_condition_id) AS vp_indicateur_condition_id
  	FROM rh.t_rapports_rubriques
  	JOIN rh.t_rapports ON rapport_id = t_rapports.oid
  	WHERE rapport_id = i_rapport_id
  	;
  
  
  	DROP TABLE IF EXISTS w_VP_indicateurs;
  	CREATE TEMP TABLE w_VP_indicateurs AS			
  	SELECT  t_indicateurs_target.*,
  		numero_rubrique AS vp_numero_rubrique,
  		vp_indicateur_condition_id AS indicateur_condition_id,
  		''::text AS indicateur_condition_where,
  		row_number() OVER(ORDER BY numero_rubrique, indicateur_id) AS vp_oid
  	FROM rh.t_indicateurs
  	JOIN rh.t_indicateurs t_indicateurs_target ON
  		(
  		t_indicateurs.total_function = '*CALC' AND 
  			t_indicateurs_target.oid = ANY(
  				ARRAY[
  					t_indicateurs.indicateur_associe_1_id,
  					t_indicateurs.indicateur_associe_2_id,
  					t_indicateurs.indicateur_associe_3_id,
  					t_indicateurs.indicateur_associe_4_id,
  					t_indicateurs.indicateur_associe_5_id,
  					t_indicateurs.indicateur_associe_6_id,
  					t_indicateurs.indicateur_associe_7_id,
  					t_indicateurs.indicateur_associe_8_id,
  					t_indicateurs.indicateur_associe_9_id,
  					t_indicateurs.indicateur_associe_10_id
  				]) OR
  		t_indicateurs.oid = t_indicateurs_target.oid
  		)
  	JOIN w_VP_rapports_rubriques t_rapports_rubriques ON
  		t_indicateurs.oid = t_rapports_rubriques.indicateur_id
  	ORDER BY numero_rubrique, indicateur_id	
  	;
  
  
  	UPDATE w_VP_rapports_rubriques
  	SET indicateur_id = w_VP_indicateurs.vp_oid
  	FROM w_VP_indicateurs
  	WHERE w_VP_rapports_rubriques.numero_rubrique = w_VP_indicateurs.vp_numero_rubrique AND
  		w_VP_rapports_rubriques.indicateur_id = w_VP_indicateurs.oid
  	;
  
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_1_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_1_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_2_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_2_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_3_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_3_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_4_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_4_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_5_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_5_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_6_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_6_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_7_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_7_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_8_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_8_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_9_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_9_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  	UPDATE w_VP_indicateurs
  	SET indicateur_associe_10_id = w_VP_indicateurs_f.vp_oid
  	FROM w_VP_indicateurs w_VP_indicateurs_f 
  	WHERE w_VP_indicateurs.indicateur_associe_10_id = w_VP_indicateurs_f.oid AND
  		 w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique
  	;
  
  	UPDATE w_VP_indicateurs SET
  		oid = vp_oid
  	;
  
  	UPDATE w_VP_indicateurs SET
  		indicateur_condition_where = condition_where
  	FROM
  	(
  	SELECT w_VP_indicateurs.oid, array_to_string(array_agg('('||COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where)||')'),' AND ') AS condition_where
  	FROM w_VP_indicateurs
  	JOIN rh.t_indicateur_condition ON t_indicateur_condition.oid = ANY(indicateur_condition_id)
  	JOIN rh.t_indicateur_condition_table ON 
  		t_indicateur_condition_table.indicateur_condition_id = t_indicateur_condition.oid AND
  		t_indicateur_condition_table.table_name = ''
  	LEFT JOIN rh.t_indicateur_condition_table t_indicateur_condition_table_spec ON 
  		t_indicateur_condition_table_spec.indicateur_condition_id = t_indicateur_condition.oid AND
  		t_indicateur_condition_table_spec.table_name = w_VP_indicateurs.table_name
  	WHERE COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where) <> '' 
  	GROUP BY 1
  	) subview
  	WHERE w_VP_indicateurs.oid = subview.oid
  	;
  
  	UPDATE w_VP_indicateurs
  	SET column_name =
  		CASE WHEN column_name ILIKE 'DISTINCT%' THEN 'DISTINCT ' ELSE '' END ||
  		    'CASE WHEN ' || indicateur_condition_where || 
  		    ' THEN ' || CASE WHEN column_name ILIKE 'DISTINCT%' THEN substr(column_name,9) ELSE column_name END ||
  		    ' ELSE ' ||
  		    CASE WHEN total_function = 'SUM' THEN '0' ELSE 'NULL' END || ' END'
  	WHERE indicateur_condition_where <> '' AND
  		total_function In('SUM','COUNT')
  	;
  
  	RETURN 'OK';	
  	
  END;