return: text lang: plpgsql parameters: p0: type: bigint name: i_indicateur_id p1: type: integer name: i_level strict: STRICT src: | DECLARE formule_indicateur TEXT; rapports_cursor refcursor; column_name TEXT; table_name TEXT; total_function TEXT; liste_code_start integer; to_column_name TEXT; o_level INTEGER; column_name_a1 TEXT; column_name_a2 TEXT; column_name_a3 TEXT; column_name_a4 TEXT; column_name_a5 TEXT; column_name_a6 TEXT; column_name_a7 TEXT; column_name_a8 TEXT; column_name_a9 TEXT; column_name_a10 TEXT; column_name_a11 TEXT; column_name_a12 TEXT; column_name_a13 TEXT; column_name_a14 TEXT; column_name_a15 TEXT; column_name_a16 TEXT; column_name_a17 TEXT; column_name_a18 TEXT; column_name_a19 TEXT; column_name_a20 TEXT; table_name_a1 TEXT; table_name_a2 TEXT; table_name_a3 TEXT; table_name_a4 TEXT; table_name_a5 TEXT; table_name_a6 TEXT; table_name_a7 TEXT; table_name_a8 TEXT; table_name_a9 TEXT; table_name_a10 TEXT; table_name_a11 TEXT; table_name_a12 TEXT; table_name_a13 TEXT; table_name_a14 TEXT; table_name_a15 TEXT; table_name_a16 TEXT; table_name_a17 TEXT; table_name_a18 TEXT; table_name_a19 TEXT; table_name_a20 TEXT; total_function_a1 TEXT; total_function_a2 TEXT; total_function_a3 TEXT; total_function_a4 TEXT; total_function_a5 TEXT; total_function_a6 TEXT; total_function_a7 TEXT; total_function_a8 TEXT; total_function_a9 TEXT; total_function_a10 TEXT; total_function_a11 TEXT; total_function_a12 TEXT; total_function_a13 TEXT; total_function_a14 TEXT; total_function_a15 TEXT; total_function_a16 TEXT; total_function_a17 TEXT; total_function_a18 TEXT; total_function_a19 TEXT; total_function_a20 TEXT; champ_associe_1 TEXT; champ_associe_2 TEXT; champ_associe_3 TEXT; champ_associe_4 TEXT; champ_associe_5 TEXT; champ_associe_6 TEXT; champ_associe_7 TEXT; champ_associe_8 TEXT; champ_associe_9 TEXT; champ_associe_10 TEXT; champ_associe_11 TEXT; champ_associe_12 TEXT; champ_associe_13 TEXT; champ_associe_14 TEXT; champ_associe_15 TEXT; champ_associe_16 TEXT; champ_associe_17 TEXT; champ_associe_18 TEXT; champ_associe_19 TEXT; champ_associe_20 TEXT; champ_calcule TEXT; i int2; ch TEXT; BEGIN formule_indicateur = '0'; IF (i_indicateur_id = 0) THEN return formule_indicateur; END IF; IF (i_indicateur_id IS NULL) THEN return formule_indicateur; END IF; IF (i_level > 10) THEN return formule_indicateur; END IF; o_level = i_level + 1; OPEN rapports_cursor FOR SELECT t_indicateurs.column_name, t_indicateurs.table_name, t_indicateurs.total_function, compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_1_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_2_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_3_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_4_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_5_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_6_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_7_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_8_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_9_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_10_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_11_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_12_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_13_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_14_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_15_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_16_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_17_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_18_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_19_id,0), o_level), compta.get_formule_indicateur(COALESCE(t_indicateurs.indicateur_associe_20_id,0), o_level) FROM compta.t_indicateurs WHERE t_indicateurs.oid = i_indicateur_id ; FETCH rapports_cursor INTO column_name , table_name, total_function, column_name_a1, column_name_a2, column_name_a3, column_name_a4, column_name_a5, column_name_a6, column_name_a7, column_name_a8, column_name_a9, column_name_a10, column_name_a11, column_name_a12, column_name_a13, column_name_a14, column_name_a15, column_name_a16, column_name_a17, column_name_a18, column_name_a19, column_name_a20 ; IF (table_name != 'SEP') THEN IF (table_name != '*CALC' AND table_name != '*CALC_SUM') THEN to_column_name = ''; liste_code_start = 0; FOR i IN 1..length(column_name) LOOP IF (liste_code_start = 0) THEN IF(substring(column_name,i,7)='[LISTE:') THEN liste_code_start = i + 7; ELSE to_column_name = to_column_name || substring(column_name,i,1); END IF; ELSE IF(substring(column_name,i,1)=']') THEN to_column_name = to_column_name || '(SELECT to_id FROM compta.t_listes, compta.t_listes_contenu WHERE t_listes.oid = t_listes_contenu.liste_id AND t_listes.code = ''' || substring(column_name,liste_code_start,i - liste_code_start) || ''')'; liste_code_start = 0; END IF; END IF; END LOOP; liste_code_start = 0; column_name = to_column_name; to_column_name = ''; FOR i IN 1..length(column_name) LOOP IF (liste_code_start = 0) THEN IF(substring(column_name,i,8)='[CLASSE:') THEN liste_code_start = i + 8; ELSE to_column_name = to_column_name || substring(column_name,i,1); END IF; ELSE IF(substring(column_name,i,1)=']') THEN to_column_name = to_column_name || '(SELECT to_id FROM compta.t_classes JOIN compta.t_classes_sections ON classe_id = t_classes.oid JOIN compta.t_classes_sections_elements ON section_id = t_classes_sections.oid WHERE t_classes.code || '':'' || t_classes_sections.code = ''' || substring(column_name,liste_code_start,i - liste_code_start) || ''')'; liste_code_start = 0; END IF; END IF; END LOOP; IF (to_column_name = '') THEN to_column_name = '0'; END IF; formule_indicateur = total_function || '(' || to_column_name || ') ' ; ELSE IF (table_name != '*CALC_SUM') THEN champ_calcule = column_name; champ_calcule = replace(champ_calcule,'[1]','(' || column_name_a1 || ')'); champ_calcule = replace(champ_calcule,'[2]','(' || column_name_a2 || ')'); champ_calcule = replace(champ_calcule,'[3]','(' || column_name_a3 || ')'); champ_calcule = replace(champ_calcule,'[4]','(' || column_name_a4 || ')'); champ_calcule = replace(champ_calcule,'[5]','(' || column_name_a5 || ')'); champ_calcule = replace(champ_calcule,'[6]','(' || column_name_a6 || ')'); champ_calcule = replace(champ_calcule,'[7]','(' || column_name_a7 || ')'); champ_calcule = replace(champ_calcule,'[8]','(' || column_name_a8 || ')'); champ_calcule = replace(champ_calcule,'[9]','(' || column_name_a9 || ')'); champ_calcule = replace(champ_calcule,'[10]','(' || column_name_a10 || ')'); champ_calcule = replace(champ_calcule,'[11]','(' || column_name_a11 || ')'); champ_calcule = replace(champ_calcule,'[12]','(' || column_name_a12 || ')'); champ_calcule = replace(champ_calcule,'[13]','(' || column_name_a13 || ')'); champ_calcule = replace(champ_calcule,'[14]','(' || column_name_a14 || ')'); champ_calcule = replace(champ_calcule,'[15]','(' || column_name_a15 || ')'); champ_calcule = replace(champ_calcule,'[16]','(' || column_name_a16 || ')'); champ_calcule = replace(champ_calcule,'[17]','(' || column_name_a17 || ')'); champ_calcule = replace(champ_calcule,'[18]','(' || column_name_a18 || ')'); champ_calcule = replace(champ_calcule,'[19]','(' || column_name_a19 || ')'); champ_calcule = replace(champ_calcule,'[20]','(' || column_name_a20 || ')'); ELSE champ_calcule = '(' || column_name_a1 || ') + ' || '(' || column_name_a2 || ') + ' || '(' || column_name_a3 || ') + ' || '(' || column_name_a4 || ') + ' || '(' || column_name_a5 || ') + ' || '(' || column_name_a6 || ') + ' || '(' || column_name_a7 || ') + ' || '(' || column_name_a8 || ') + ' || '(' || column_name_a9 || ') + ' || '(' || column_name_a10 || ') + ' || '(' || column_name_a11 || ') + ' || '(' || column_name_a12 || ') + ' || '(' || column_name_a13 || ') + ' || '(' || column_name_a14 || ') + ' || '(' || column_name_a15 || ') + ' || '(' || column_name_a16 || ') + ' || '(' || column_name_a17 || ') + ' || '(' || column_name_a18 || ') + ' || '(' || column_name_a19 || ') + ' || '(' || column_name_a20 || ')'; END IF; formule_indicateur = champ_calcule; END IF; ELSE formule_indicateur = '0'; END IF; IF formule_indicateur = '' THEN formule_indicateur = '0'; END IF; RETURN formule_indicateur ; END;