return: SETOF record
lang: plpgsql
parameters:
  p0:
    type: bigint
    name: i_rapport_id
  p1:
    type: text
    name: i_table_name
  p2:
    type: text
    name: i_option
src: |
  DECLARE	
  	sqlcmd text;
  	
  	
  	temp_cursor refcursor;
  	_oid integer;
  	_count integer;
  	_table_count integer;
  	_maxind integer;
  	_indicateur_name text;
  	
  	row  RECORD;
  BEGIN
  	
  	_maxind = 100;
  _table_count = 0;
  	
  	OPEN temp_cursor FOR 
  	SELECT MAX(oid), SUM(CASE WHEN i_table_name = table_name THEN 1 ELSE 0 END)
  		FROM w_VP_indicateurs t_indicateurs
  		WHERE oid IN (
  		SELECT base.cti_unnest(
  			ARRAY[
  				indicateur_id, 
  				indicateur_associe_1_id, 
  				indicateur_associe_2_id, 
  				indicateur_associe_3_id, 
  				indicateur_associe_4_id, 
  				indicateur_associe_5_id, 
  				indicateur_associe_6_id,
  				indicateur_associe_7_id,
  				indicateur_associe_8_id,
  				indicateur_associe_9_id,
  				indicateur_associe_10_id
  			])
  		FROM rh.t_rapports 
  			JOIN w_VP_rapports_rubriques t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
  			JOIN w_VP_indicateurs t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid);
  	
  	FETCH temp_cursor INTO _oid,_count;
  	WHILE FOUND LOOP
  		_maxind = _oid;
  		_table_count = _count;
  	FETCH temp_cursor INTO _oid, _count;
  	END LOOP;
  	CLOSE temp_cursor;
  	_indicateur_name = CASE i_table_name WHEN 'v_contrats_mois_1' THEN 'INDICATEURS_CONTRAT'
  				WHEN 'v_historique_paie_1' THEN 'INDICATEURS_PAIE'
  				WHEN 'v_arrets_travail_mois_1' THEN 'INDICATEURS_ARRET'
  				WHEN 'PLANNING_MOUVEMENT' THEN 'INDICATEURS_PLANNING'
  				WHEN 'CALENDRIER' THEN 'INDICATEURS_CALENDRIER'
  				ELSE 'INDICATEURS_OTHERS' END;
  	IF (_table_count = 0) THEN
  		FOR row IN SELECT _indicateur_name::text, ''::text
  		LOOP
  			RETURN NEXT row;
  		END LOOP;
  	END IF;
  	
  	IF (i_option <> 'MONTH' AND i_option <> 'COMP' AND _table_count > 0) THEN
  		FOR row IN 
  			SELECT 
  			_indicateur_name::text, base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN total_function || '(' || rh.cti_prepare_rapport_get_column(column_name) || ')' ELSE 'NULL::numeric' END)
  			FROM generate_series(1, _maxind) 
  			LEFT JOIN 
  			(
  			SELECT *
  			FROM w_VP_indicateurs t_indicateurs
  			WHERE oid IN (
  			SELECT base.cti_unnest(
  				ARRAY[
  					indicateur_id, 
  					indicateur_associe_1_id, 
  					indicateur_associe_2_id, 
  					indicateur_associe_3_id, 
  					indicateur_associe_4_id, 
  					indicateur_associe_5_id, 
  					indicateur_associe_6_id,
  					indicateur_associe_7_id,
  					indicateur_associe_8_id,
  					indicateur_associe_9_id,
  					indicateur_associe_10_id
  				])
  			FROM rh.t_rapports 
  				JOIN w_VP_rapports_rubriques t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
  				JOIN w_VP_indicateurs t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
  			) subview ON generate_series = subview.oid AND subview.table_name  = i_table_name
  			
  			
  			
  		LOOP
  			RETURN NEXT row;
  		END LOOP;
  	
  	END IF;
  	IF (i_option = 'MONTH' AND _table_count > 0) THEN
  		FOR row IN 
  			SELECT 
  			_indicateur_name::text,  
  			base.cti_group_concat(
  				CASE WHEN subview.oid IS NOT NULL THEN 
  					'ARRAY[' 
  					|| '(' || total_function || '(' || rh.cti_prepare_rapport_get_column(column_name) || ')::numeric),' 
  					|| replace(month_formula, '#SEQ#', '< 1') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 1') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 2') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 3') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 4') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 5') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 6') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 7') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 8') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 9') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 10') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 11') || ',' 
  					|| replace(month_formula, '#SEQ#', '= 12') || '' 
  					|| ']'
  				ELSE 'ARRAY[NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric]' END)
  				FROM generate_series(1, _maxind) 
  				LEFT JOIN 
  				(
  				SELECT *, 
  					CASE WHEN column_name ILIKE '%DISTINCT%' 
  						THEN total_function || '(DISTINCT CASE WHEN columnby_sequence #SEQ# THEN ' || replace(rh.cti_prepare_rapport_get_column(column_name),'DISTINCT','') || ' ELSE NULL END)'
  						ELSE total_function || '(CASE WHEN columnby_sequence #SEQ# THEN ' || rh.cti_prepare_rapport_get_column(column_name) || ' ELSE NULL END)' END AS month_formula
  				FROM w_VP_indicateurs t_indicateurs
  				WHERE oid IN (
  				SELECT base.cti_unnest(
  					ARRAY[
  						indicateur_id, 
  						indicateur_associe_1_id, 
  						indicateur_associe_2_id, 
  						indicateur_associe_3_id, 
  						indicateur_associe_4_id, 
  						indicateur_associe_5_id, 
  						indicateur_associe_6_id,
  						indicateur_associe_7_id,
  						indicateur_associe_8_id,
  						indicateur_associe_9_id,
  						indicateur_associe_10_id
  					])
  				FROM rh.t_rapports 
  					JOIN w_VP_rapports_rubriques t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
  					JOIN w_VP_indicateurs t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
  				) subview ON generate_series = subview.oid  AND subview.table_name  = i_table_name
  				
  					
  			
  		LOOP
  			RETURN NEXT row;
  		END LOOP;
  	
  	END IF;
  IF (i_option = 'COMP' AND _table_count > 0) THEN
  		FOR row IN 
  			SELECT 
  			_indicateur_name::text,  
  			base.cti_group_concat(
  				CASE WHEN subview.oid IS NOT NULL THEN 
  					'ARRAY[' 
  					|| replace(month_formula, '#SEQ#', '= 1') || '::numeric,' 
  					|| replace(month_formula, '#SEQ#', '= 2') || '::numeric,' 
  					|| replace(month_formula, '#SEQ#', '= 3') || '::numeric' 
  					|| ']'
  				ELSE 'ARRAY[NULL::numeric,NULL::numeric,NULL::numeric]' END)
  				FROM generate_series(1, _maxind) 
  				LEFT JOIN 
  				(
  				SELECT *, 
  					CASE WHEN column_name ILIKE '%DISTINCT%' 
  						THEN total_function || '(DISTINCT CASE WHEN columnby_sequence #SEQ# THEN ' || replace(rh.cti_prepare_rapport_get_column(column_name),'DISTINCT','') || ' ELSE NULL END)'
  						ELSE total_function || '(CASE WHEN columnby_sequence #SEQ# THEN ' || rh.cti_prepare_rapport_get_column(column_name) || ' ELSE NULL END)' END AS month_formula
  				FROM w_VP_indicateurs t_indicateurs
  				WHERE oid IN (
  				SELECT base.cti_unnest(
  					ARRAY[
  						indicateur_id, 
  						indicateur_associe_1_id, 
  						indicateur_associe_2_id, 
  						indicateur_associe_3_id, 
  						indicateur_associe_4_id, 
  						indicateur_associe_5_id, 
  						indicateur_associe_6_id,
  						indicateur_associe_7_id,
  						indicateur_associe_8_id,
  						indicateur_associe_9_id,
  						indicateur_associe_10_id
  					])
  				FROM rh.t_rapports 
  					JOIN w_VP_rapports_rubriques t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
  					JOIN w_VP_indicateurs t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
  				) subview ON generate_series = subview.oid  AND subview.table_name  = i_table_name
  				
  					
  			
  		LOOP
  			RETURN NEXT row;
  		END LOOP;
  	
  	END IF;
  	RETURN ;
  END;