|
|
return: text
|
|
|
lang: plpgsql
|
|
|
parameters:
|
|
|
p0:
|
|
|
type: bigint
|
|
|
name: i_expert_controle_id
|
|
|
src: |
|
|
|
DECLARE
|
|
|
result TEXT;
|
|
|
|
|
|
|
|
|
BEGIN
|
|
|
RAISE NOTICE '%' , 'Recuperation OPTIMISER';
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer_line;
|
|
|
CREATE TEMP TABLE w_dboptimizer_line(in_data text)
|
|
|
;
|
|
|
|
|
|
BEGIN
|
|
|
PERFORM base.cti_execute(
|
|
|
'COPY w_dboptimizer_line FROM ''' || t_settings.value || 'modules/rh/settings/RH_dboptimizer.xml'' WITH DELIMITER AS E''\02'' CSV HEADER QUOTE AS E''\01'''
|
|
|
,1)
|
|
|
FROM base.t_settings
|
|
|
WHERE code = 'ENVIRONMENT/DIR'
|
|
|
;
|
|
|
EXCEPTION
|
|
|
WHEN others THEN RETURN 'Dossier application non trouvé';
|
|
|
END;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer;
|
|
|
CREATE TEMP TABLE w_dboptimizer AS
|
|
|
SELECT array_to_string(base.cti_array_accum(translate(in_data,'éêè','e')),'') AS in_data_txt
|
|
|
FROM w_dboptimizer_line
|
|
|
WHERE in_data IS NOT NULL
|
|
|
ORDER BY row_number() OVER()
|
|
|
;
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer_xml;
|
|
|
CREATE TEMP TABLE w_dboptimizer_xml AS
|
|
|
SELECT xmlroot(xmlparse(document in_data_txt), version '1.0', standalone yes) AS in_data_xml
|
|
|
FROM w_dboptimizer
|
|
|
;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer_VIEWNAMEOPTIMIZER;
|
|
|
CREATE TEMP TABLE w_dboptimizer_VIEWNAMEOPTIMIZER AS
|
|
|
SELECT *
|
|
|
FROM
|
|
|
(
|
|
|
SELECT i AS VIEWNAMEOPTIMIZER_index,
|
|
|
(xpath('/DBOPTIMIZER/VIEWNAMEOPTIMIZER['||i||']', in_data_xml))[1] AS VIEWNAMEOPTIMIZER_path,
|
|
|
(xpath('/DBOPTIMIZER/VIEWNAMEOPTIMIZER['||i||']/@viewName', in_data_xml))[1]::text AS viewName,
|
|
|
(xpath('/DBOPTIMIZER/VIEWNAMEOPTIMIZER['||i||']/@defaultViewName', in_data_xml))[1]::text AS defaultViewName
|
|
|
FROM w_dboptimizer_xml
|
|
|
JOIN generate_series(1,100) AS i ON 1=1
|
|
|
) subview
|
|
|
WHERE VIEWNAMEOPTIMIZER_path IS NOT NULL
|
|
|
;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer_LEFTJOININDICATOR;
|
|
|
CREATE TEMP TABLE w_dboptimizer_LEFTJOININDICATOR AS
|
|
|
SELECT *
|
|
|
FROM
|
|
|
(
|
|
|
SELECT VIEWNAMEOPTIMIZER_index,
|
|
|
i AS LEFTJOININDICATOR_index,
|
|
|
(xpath('/VIEWNAMEOPTIMIZER/LEFTJOININDICATOR['||i||']', VIEWNAMEOPTIMIZER_path))[1] AS LEFTJOININDICATOR_path,
|
|
|
(xpath('/VIEWNAMEOPTIMIZER/LEFTJOININDICATOR['||i||']/@leftjoin', VIEWNAMEOPTIMIZER_path))[1]::text AS leftjoin
|
|
|
FROM w_dboptimizer_VIEWNAMEOPTIMIZER
|
|
|
JOIN generate_series(1,100) AS i ON 1=1
|
|
|
) subview
|
|
|
WHERE LEFTJOININDICATOR_path IS NOT NULL
|
|
|
;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_dboptimizer_FIELD;
|
|
|
CREATE TEMP TABLE w_dboptimizer_FIELD AS
|
|
|
SELECT *
|
|
|
FROM
|
|
|
(
|
|
|
SELECT VIEWNAMEOPTIMIZER_index,
|
|
|
LEFTJOININDICATOR_index,
|
|
|
i AS FIELD_index,
|
|
|
(xpath('/LEFTJOININDICATOR/FIELD['||i||']', LEFTJOININDICATOR_path))[1] AS FIELD_path,
|
|
|
(xpath('/LEFTJOININDICATOR/FIELD['||i||']/@name', LEFTJOININDICATOR_path))[1]::text AS FIELD_name
|
|
|
FROM w_dboptimizer_LEFTJOININDICATOR
|
|
|
JOIN generate_series(1,100) AS i ON 1=1
|
|
|
) subview
|
|
|
WHERE FIELD_path IS NOT NULL
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Identification indicateurs';
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_expert_controle_data;
|
|
|
CREATE TEMP TABLE w_expert_controle_data (
|
|
|
expert_controle_id bigint,
|
|
|
expert_controle_rule_id bigint,
|
|
|
expert_controle_rule_index bigint,
|
|
|
data_type text,
|
|
|
data_id bigint,
|
|
|
expert_controle_code text,
|
|
|
contrat_mois_data text[],
|
|
|
indicateur_value numeric,
|
|
|
date_signalement date,
|
|
|
etat text,
|
|
|
date_correction date,
|
|
|
date_evenement date,
|
|
|
data_code_original text,
|
|
|
texte text)
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET date_validite_debut =
|
|
|
date(
|
|
|
CASE start_periode
|
|
|
WHEN 'A0' THEN date_trunc('year',now())
|
|
|
WHEN 'A1' THEN date_trunc('year',now())-interval '1 year'
|
|
|
WHEN 'A2' THEN date_trunc('year',now())-interval '2 year'
|
|
|
WHEN 'M12' THEN date_trunc('month',now())-interval '12 month'
|
|
|
WHEN 'M24' THEN date_trunc('month',now())-interval '24 month'
|
|
|
ELSE date_trunc('year',now())-interval '1 year' END
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Période par défaut
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET start_periode = 'A1'
|
|
|
WHERE oid = 0 AND
|
|
|
start_periode = ''
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET date_validite_debut = t_expert_controle0.date_validite_debut
|
|
|
FROM rh.t_expert_controle t_expert_controle0
|
|
|
WHERE t_expert_controle0.oid = 0 AND
|
|
|
t_expert_controle.oid <> 0 AND
|
|
|
t_expert_controle.start_periode = ''
|
|
|
;
|
|
|
|
|
|
DROP TABLE IF EXISTS w_indicateurs;
|
|
|
CREATE TEMP TABLE w_indicateurs AS
|
|
|
SELECT t_expert_controle.oid AS expert_controle_id,
|
|
|
t_expert_controle.code AS expert_controle_code,
|
|
|
-- GREATEST(COALESCE(t_expert_controle.date_validite_debut,'00010101'),COALESCE(t_expert_controle0.date_validite_debut,'00010101')) AS date_validite_debut,
|
|
|
COALESCE(t_expert_controle.date_validite_debut,'00010101') AS date_validite_debut,
|
|
|
t_expert_controle_rule.oid AS expert_controle_rule_id,
|
|
|
CASE WHEN indicateur_2_id <> 0 OR indicateur_3_id <> 0 THEN 1::bigint ELSE 0::bigint END AS expert_controle_rule_index,
|
|
|
t_expert_controle_rule.data_type,
|
|
|
CASE WHEN t_expert_controle_rule.formula <> '' THEN t_expert_controle_rule.formula ELSE '<> 0' END AS formula,
|
|
|
NULL::integer[] AS VIEWNAMEOPTIMIZER_index_array,
|
|
|
t_indicateurs.total_function,
|
|
|
t_indicateurs.table_name,
|
|
|
column_name,
|
|
|
t_expert_controle_rule.indicateur_condition_id,
|
|
|
t_expert_controle_rule.conditions_operateur AS conditions_operateur,
|
|
|
''::text AS sqlcmd,
|
|
|
''::text AS sqlresult
|
|
|
FROM rh.t_expert_controle
|
|
|
JOIN rh.t_expert_controle t_expert_controle0 ON
|
|
|
t_expert_controle0.oid = 0 AND
|
|
|
t_expert_controle0.is_active = '1'
|
|
|
JOIN rh.t_expert_controle_rule ON expert_controle_id = t_expert_controle.oid
|
|
|
JOIN rh.t_indicateurs On indicateur_id = t_indicateurs.oid
|
|
|
WHERE t_expert_controle.is_active = '1' AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
t_expert_controle.oid = i_expert_controle_id
|
|
|
)
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INSERT INTO w_indicateurs
|
|
|
SELECT t_expert_controle.oid AS expert_controle_id,
|
|
|
t_expert_controle.code AS expert_controle_code,
|
|
|
-- GREATEST(COALESCE(t_expert_controle.date_validite_debut,'00010101'),COALESCE(t_expert_controle0.date_validite_debut,'00010101')) AS date_validite_debut,
|
|
|
COALESCE(t_expert_controle.date_validite_debut,'00010101') AS date_validite_debut,
|
|
|
t_expert_controle_rule.oid AS expert_controle_rule_id,
|
|
|
2::bigint AS expert_controle_rule_index,
|
|
|
t_expert_controle_rule.data_type,
|
|
|
CASE WHEN t_expert_controle_rule.formula_2 <> '' THEN t_expert_controle_rule.formula_2 ELSE '<> 0' END AS formula,
|
|
|
NULL::integer[] AS VIEWNAMEOPTIMIZER_index_array,
|
|
|
t_indicateurs.total_function,
|
|
|
t_indicateurs.table_name,
|
|
|
column_name,
|
|
|
t_expert_controle_rule.indicateur_condition_2_id,
|
|
|
t_expert_controle_rule.conditions_operateur_2 AS conditions_operateur,
|
|
|
''::text AS sqlcmd,
|
|
|
''::text AS sqlresult
|
|
|
FROM rh.t_expert_controle
|
|
|
JOIN rh.t_expert_controle t_expert_controle0 ON
|
|
|
t_expert_controle0.oid = 0 AND
|
|
|
t_expert_controle0.is_active = '1'
|
|
|
JOIN rh.t_expert_controle_rule ON expert_controle_id = t_expert_controle.oid
|
|
|
JOIN rh.t_indicateurs On indicateur_2_id = t_indicateurs.oid
|
|
|
WHERE t_expert_controle.is_active = '1' AND
|
|
|
indicateur_2_id <> 0 AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
t_expert_controle.oid = i_expert_controle_id
|
|
|
)
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_indicateurs
|
|
|
SELECT t_expert_controle.oid AS expert_controle_id,
|
|
|
t_expert_controle.code AS expert_controle_code,
|
|
|
GREATEST(COALESCE(t_expert_controle.date_validite_debut,'00010101'),COALESCE(t_expert_controle0.date_validite_debut,'00010101')) AS date_validite_debut,
|
|
|
t_expert_controle_rule.oid AS expert_controle_rule_id,
|
|
|
3::bigint AS expert_controle_rule_index,
|
|
|
t_expert_controle_rule.data_type,
|
|
|
CASE WHEN t_expert_controle_rule.formula_3 <> '' THEN t_expert_controle_rule.formula_3 ELSE '<> 0' END AS formula,
|
|
|
NULL::integer[] AS VIEWNAMEOPTIMIZER_index_array,
|
|
|
t_indicateurs.total_function,
|
|
|
t_indicateurs.table_name,
|
|
|
column_name,
|
|
|
t_expert_controle_rule.indicateur_condition_3_id,
|
|
|
t_expert_controle_rule.conditions_operateur_3 AS conditions_operateur,
|
|
|
''::text AS sqlcmd,
|
|
|
''::text AS sqlresult
|
|
|
FROM rh.t_expert_controle
|
|
|
JOIN rh.t_expert_controle t_expert_controle0 ON
|
|
|
t_expert_controle0.oid = 0 AND
|
|
|
t_expert_controle0.is_active = '1'
|
|
|
JOIN rh.t_expert_controle_rule ON expert_controle_id = t_expert_controle.oid
|
|
|
JOIN rh.t_indicateurs On indicateur_3_id = t_indicateurs.oid
|
|
|
WHERE t_expert_controle.is_active = '1' AND
|
|
|
indicateur_3_id <> 0 AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
t_expert_controle.oid = i_expert_controle_id
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Constitution requete SQL
|
|
|
UPDATE w_indicateurs
|
|
|
SET column_name = 'CASE WHEN ' || condition_where || ' THEN ' || column_name || ' ELSE ' || CASE WHEN total_function <> 'COUNT' THEN '0' ELSE 'NULL' END || ' END'
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
expert_controle_rule_id,
|
|
|
expert_controle_rule_index,
|
|
|
array_to_string(
|
|
|
base.cti_array_accum('('||check_where||')'),
|
|
|
' '||MAX(conditions_operateur)||' '
|
|
|
) AS condition_where
|
|
|
FROM w_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
|
|
|
WHERE check_where <> '' AND t_indicateur_condition_table.table_name NOT IN ('CALENDRIER', 'BUDGET_RH')
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE w_indicateurs.expert_controle_rule_id = subview.expert_controle_rule_id AND
|
|
|
w_indicateurs.expert_controle_rule_index = subview.expert_controle_rule_index
|
|
|
;
|
|
|
|
|
|
UPDATE w_indicateurs
|
|
|
SET column_name = trim(replace('CASE WHEN (' || column_name ||') IS NOT NULL THEN 1 ELSE 0 END','DISTINCT',''))
|
|
|
WHERE total_function = 'COUNT'
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle SET
|
|
|
last_execution_ok = '0',
|
|
|
last_execution_timestamp = now(),
|
|
|
last_execution_count = 0
|
|
|
WHERE is_active = '1' AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
t_expert_controle.oid = i_expert_controle_id
|
|
|
)
|
|
|
;
|
|
|
|
|
|
|
|
|
UPDATE w_indicateurs
|
|
|
SET sqlcmd =
|
|
|
'@INSERT INTO w_expert_controle_data
|
|
|
SELECT ' || expert_controle_id::text || '::bigint AS expert_controle_id, ' ||
|
|
|
expert_controle_rule_id::text || '::bigint AS expert_controle_rule_id, ' ||
|
|
|
expert_controle_rule_index::text || '::bigint AS expert_controle_rule_index,
|
|
|
''' ||
|
|
|
CASE
|
|
|
WHEN data_type = '' THEN table_name || 'ITM'
|
|
|
|
|
|
WHEN data_type = 'ITM' THEN table_name
|
|
|
WHEN data_type = 'ITMTAB' THEN table_name
|
|
|
ELSE data_type
|
|
|
END || '''::text AS data_type,'
|
|
|
||
|
|
|
CASE
|
|
|
WHEN data_type = '' THEN 'source_id'
|
|
|
WHEN data_type = 'contrat' THEN 'contrat_id'
|
|
|
WHEN data_type = 'paie' THEN 'contrat_mois_id'
|
|
|
WHEN data_type = 'ITM' AND table_name = 'v_contrats_mois_1' THEN 'contrat_mois_id'
|
|
|
WHEN data_type = 'ITMTAB' THEN table_name
|
|
|
WHEN data_type = 'salarie' THEN 'salarie_id'
|
|
|
ELSE '0' END ||
|
|
|
'::bigint AS data_id, ' ||
|
|
|
'''' || expert_controle_code || '''::text AS expert_controle_code,
|
|
|
MIN(ARRAY[date_debut_activite::text, date_fin_activite::text, contrat_code::text]) AS contrat_mois_data,
|
|
|
SUM(' || column_name || ')::numeric AS indicateur_value,
|
|
|
MAX(date(now())) AS date_signalement,
|
|
|
''''::text AS etat,
|
|
|
''20991231'' AS date_correction,
|
|
|
MIN(' || v_schema_settings_1.property_array[2] || ' ) AS date_evenement,
|
|
|
''''::text AS data_code_original,
|
|
|
''''::text AS texte
|
|
|
FROM ' || v_schema_settings_1.property_array[1] || '
|
|
|
#LEFTJOIN#
|
|
|
WHERE ' || v_schema_settings_1.property_array[2] || ' >= ''' || date_validite_debut || ''' AND ' ||
|
|
|
CASE WHEN formula <> '=0' THEN '( ' || column_name || ' ) ' || replace(formula,'''','''''') ELSE '1=1' END || '
|
|
|
GROUP BY 1,2,3,4,5 ' ||
|
|
|
CASE WHEN formula <> '=0' THEN 'HAVING SUM( ' || column_name || ' ) ' || replace(formula,'''','''''') ELSE '' END || '
|
|
|
;
|
|
|
'
|
|
|
FROM rh.v_schema_settings_1
|
|
|
WHERE table_name||'#1' = v_schema_settings_1.code AND
|
|
|
v_schema_settings_1.setting_type = 'FROM'
|
|
|
;
|
|
|
|
|
|
PERFORM base.cti_execute('
|
|
|
UPDATE w_indicateurs SET
|
|
|
sqlcmd = replace(sqlcmd , ''#''||viewName||''#'', defaultViewName),
|
|
|
VIEWNAMEOPTIMIZER_index_array = array_append(VIEWNAMEOPTIMIZER_index_array,VIEWNAMEOPTIMIZER_index)
|
|
|
FROM w_dboptimizer_VIEWNAMEOPTIMIZER
|
|
|
WHERE w_indicateurs.sqlcmd LIKE ''%#''||viewName||''#%''
|
|
|
',50)
|
|
|
;
|
|
|
|
|
|
UPDATE w_indicateurs
|
|
|
SET sqlcmd = replace(sqlcmd,'#LEFTJOIN#',leftjoin)
|
|
|
FROM
|
|
|
(
|
|
|
SELECT expert_controle_rule_id, array_to_string(base.cti_array_accum(leftjoin),chr(10)) AS leftjoin
|
|
|
FROM
|
|
|
(
|
|
|
SELECT expert_controle_rule_id, w_dboptimizer_LEFTJOININDICATOR.VIEWNAMEOPTIMIZER_index, w_dboptimizer_LEFTJOININDICATOR.LEFTJOININDICATOR_index,
|
|
|
MAX(leftjoin) AS leftjoin
|
|
|
FROM w_indicateurs
|
|
|
JOIN w_dboptimizer_LEFTJOININDICATOR ON w_dboptimizer_LEFTJOININDICATOR.VIEWNAMEOPTIMIZER_index = ANY(VIEWNAMEOPTIMIZER_index_array)
|
|
|
JOIN w_dboptimizer_FIELD ON
|
|
|
w_dboptimizer_FIELD.VIEWNAMEOPTIMIZER_index = w_dboptimizer_LEFTJOININDICATOR.VIEWNAMEOPTIMIZER_index AND
|
|
|
w_dboptimizer_FIELD.LEFTJOININDICATOR_index = w_dboptimizer_LEFTJOININDICATOR.LEFTJOININDICATOR_index AND
|
|
|
w_indicateurs.sqlcmd LIKE '% ' || field_name|| '%'
|
|
|
GROUP BY 1,2,3
|
|
|
ORDER BY 1,2,3
|
|
|
) subview
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE w_indicateurs.expert_controle_rule_id = subview.expert_controle_rule_id
|
|
|
;
|
|
|
|
|
|
UPDATE w_indicateurs
|
|
|
SET sqlcmd = replace(sqlcmd,'#LEFTJOIN#','')
|
|
|
WHERE sqlcmd LIKE '%#LEFTJOIN#%'
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%' , (SELECT array_to_string(base.cti_array_accum(sqlcmd),'; ') FROM w_indicateurs);
|
|
|
|
|
|
RAISE NOTICE '%' , 'Extraction donnees';
|
|
|
|
|
|
|
|
|
UPDATE w_indicateurs
|
|
|
SET sqlresult = base.cti_execute(sqlcmd,1)
|
|
|
;
|
|
|
|
|
|
ANALYSE w_expert_controle_data
|
|
|
;
|
|
|
|
|
|
RAISE NOTICE '%' , (SELECT array_to_string(base.cti_array_accum('INSERT INTO w_expert_controle_data
|
|
|
SELECT ' || t_expert_controle_rule.expert_controle_id || ', ' ||
|
|
|
t_expert_controle_rule.oid || ',
|
|
|
0::numeric,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
contrat_mois_data,
|
|
|
expert_controle_code,
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 1 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula <> '' THEN formula ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 2 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_2 <> '' THEN formula_2 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 3 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_3 <> '' THEN formula_3 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END
|
|
|
,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_correction,
|
|
|
date_evenement,
|
|
|
data_code_original,
|
|
|
texte
|
|
|
FROM w_expert_controle_data
|
|
|
GROUP BY 1,2,3,4,5,6,7,9,10,11,12,13,14
|
|
|
HAVING
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 1 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula <> '' THEN formula ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 2 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_2 <> '' THEN formula_2 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 3 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_3 <> '' THEN formula_3 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END
|
|
|
= ' || (1 + CASE WHEN indicateur_2_id <> 0 THEN 1 ELSE 0 END + CASE WHEN indicateur_3_id <> 0 THEN 1 ELSE 0 END)::text ||'
|
|
|
'),'; ')
|
|
|
FROM rh.t_expert_controle_rule
|
|
|
WHERE oid IN (SELECT expert_controle_rule_id FROM w_expert_controle_data) AND
|
|
|
(
|
|
|
t_expert_controle_rule.indicateur_2_id <> 0 OR
|
|
|
t_expert_controle_rule.indicateur_3_id <> 0
|
|
|
)) ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Plusieurs indicateurs dans condition ?
|
|
|
PERFORM base.cti_execute(
|
|
|
'INSERT INTO w_expert_controle_data
|
|
|
SELECT ' || t_expert_controle_rule.expert_controle_id || ', ' ||
|
|
|
t_expert_controle_rule.oid || ',
|
|
|
0::numeric,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
contrat_mois_data,
|
|
|
expert_controle_code,
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 1 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula <> '' THEN formula ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 2 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_2 <> '' THEN formula_2 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 3 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_3 <> '' THEN formula_3 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END
|
|
|
,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_correction,
|
|
|
date_evenement,
|
|
|
data_code_original,
|
|
|
texte
|
|
|
FROM w_expert_controle_data
|
|
|
GROUP BY 1,2,3,4,5,6,7,9,10,11,12,13,14
|
|
|
HAVING
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 1 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula <> '' THEN formula ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 2 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_2 <> '' THEN formula_2 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END +
|
|
|
CASE WHEN MAX(CASE WHEN expert_controle_rule_index = 3 THEN COALESCE(indicateur_value,0) ELSE 0 END) ' || replace(CASE WHEN formula_3 <> '' THEN formula_3 ELSE '<>0' END,'''','''''') || ' THEN 1 ELSE 0 END
|
|
|
= ' || (1 + CASE WHEN indicateur_2_id <> 0 THEN 1 ELSE 0 END + CASE WHEN indicateur_3_id <> 0 THEN 1 ELSE 0 END)::text ||'
|
|
|
',1)
|
|
|
FROM rh.t_expert_controle_rule
|
|
|
WHERE oid IN (SELECT expert_controle_rule_id FROM w_expert_controle_data) AND
|
|
|
(
|
|
|
t_expert_controle_rule.indicateur_2_id <> 0 OR
|
|
|
t_expert_controle_rule.indicateur_3_id <> 0
|
|
|
)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_expert_controle_data
|
|
|
WHERE expert_controle_rule_index > 0
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle_rule
|
|
|
SET last_execution_result = CASE WHEN sqlresult NOT LIKE 'OK%' THEN sqlresult ELSE 'OK' END
|
|
|
FROM w_indicateurs
|
|
|
WHERE w_indicateurs.expert_controle_rule_id = t_expert_controle_rule.oid
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET last_execution_ok = subview.execution_ok
|
|
|
FROM
|
|
|
(
|
|
|
SELECT expert_controle_id,
|
|
|
MIN(CASE WHEN last_execution_result LIKE 'KO%' THEN '0' ELSE '1' END) AS execution_ok
|
|
|
FROM rh.t_expert_controle_rule
|
|
|
WHERE indicateur_id <> 0
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE expert_controle_id = t_expert_controle.oid
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET last_execution_count = subview.nb
|
|
|
FROM
|
|
|
(
|
|
|
SELECT expert_controle_id,
|
|
|
count(*) AS nb
|
|
|
FROM w_expert_controle_data
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE expert_controle_id = t_expert_controle.oid
|
|
|
;
|
|
|
|
|
|
ANALYSE w_expert_controle_data
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
-- Identifiants des tables
|
|
|
if 1<>1 then
|
|
|
PERFORM base.cti_execute('@UPDATE w_expert_controle_data SET
|
|
|
data_code_original = t_source.code_original, texte = ''' || t_listes_tables.texte || ' '' || t_source.texte || '' ('' || t_source.code || '')''
|
|
|
FROM rh.' || t_listes_tables.name || ' t_source
|
|
|
WHERE data_type = ''' || t_listes_tables.code || ''' AND t_source.oid = data_id
|
|
|
',1)
|
|
|
FROM rh.t_listes_tables
|
|
|
WHERE t_listes_tables.code <> 'salarie' AND
|
|
|
t_listes_tables.code IN (SELECT data_type FROM w_expert_controle_data)
|
|
|
;
|
|
|
PERFORM base.cti_execute('@UPDATE w_expert_controle_data SET
|
|
|
data_code_original = t_source.code_original, texte = ''Séjour '' || t_source.no_salarie
|
|
|
FROM rh.' || t_listes_tables.name || ' t_source
|
|
|
WHERE data_type = ''' || t_listes_tables.code || ''' AND t_source.oid = data_id
|
|
|
',1)
|
|
|
FROM rh.t_listes_tables
|
|
|
WHERE t_listes_tables.code = 'salarie' AND
|
|
|
t_listes_tables.code IN (SELECT data_type FROM w_expert_controle_data)
|
|
|
;
|
|
|
end if;
|
|
|
|
|
|
|
|
|
-- Identifiants des items
|
|
|
UPDATE w_expert_controle_data SET
|
|
|
data_code_original = p_contrats.code_original,
|
|
|
texte = 'Contrat ' ||
|
|
|
numero_contrat ||
|
|
|
' du ' || to_char(p_contrats.date_debut,'DD/MM/YYYY') ||
|
|
|
' au ' || to_char(p_contrats.date_fin,'DD/MM/YYYY')
|
|
|
FROM rh.p_contrats_mois
|
|
|
JOIN rh.p_contrats ON p_contrats_mois.contrat_id = p_contrats.oid
|
|
|
WHERE data_type IN ('contrat', 'salarie') AND
|
|
|
p_contrats_mois.date_debut = w_expert_controle_data.contrat_mois_data[1] AND
|
|
|
p_contrats_mois.date_fin = w_expert_controle_data.contrat_mois_data[2] AND
|
|
|
p_contrats.numero_contrat = w_expert_controle_data.contrat_mois_data[3]
|
|
|
;
|
|
|
UPDATE w_expert_controle_data SET
|
|
|
data_code_original = p_contrats.code_original || to_char(p_contrats_mois.date_fin,'YYYYMMDD'),
|
|
|
texte = 'Contrat ' ||
|
|
|
p_contrats.numero_contrat ||
|
|
|
'Paie du ' || to_char(p_contrats_mois.date_debut,'DD/MM/YYYY') ||
|
|
|
' au ' || to_char(p_contrats_mois.date_fin,'DD/MM/YYYY')
|
|
|
FROM rh.p_contrats_mois
|
|
|
JOIN rh.p_contrats ON p_contrats_mois.contrat_id = p_contrats.oid
|
|
|
WHERE data_type = 'paie' AND
|
|
|
p_contrats_mois.date_debut = w_expert_controle_data.contrat_mois_data[1] AND
|
|
|
p_contrats_mois.date_fin = w_expert_controle_data.contrat_mois_data[2] AND
|
|
|
p_contrats.numero_contrat = w_expert_controle_data.contrat_mois_data[3]
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Actualisation des oid des tables
|
|
|
if 1<>1 then
|
|
|
PERFORM base.cti_execute('@UPDATE rh.p_expert_controle_data SET
|
|
|
data_id = t_source.oid
|
|
|
FROM rh.' || t_listes_tables.name || ' t_source
|
|
|
WHERE data_type = ''' || t_listes_tables.code || ''' AND
|
|
|
data_code_original = t_source.code_original AND
|
|
|
data_id <> t_source.oid
|
|
|
',1)
|
|
|
FROM rh.t_listes_tables
|
|
|
WHERE t_listes_tables.code IN (SELECT data_type FROM rh.p_expert_controle_data)
|
|
|
;
|
|
|
end if;
|
|
|
|
|
|
|
|
|
-- Corrigé si erreur a disparu
|
|
|
UPDATE rh.p_expert_controle_data SET
|
|
|
etat = 'T',
|
|
|
date_correction = date(now())
|
|
|
WHERE etat = '' AND
|
|
|
expert_controle_id NOT IN (SELECT t_expert_controle.oid FROM rh.t_expert_controle WHERE t_expert_controle.oid > 0 AND last_execution_ok <> '1') AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
p_expert_controle_data.expert_controle_id = i_expert_controle_id
|
|
|
) AND
|
|
|
p_expert_controle_data.expert_controle_id::text||'#'||p_expert_controle_data.data_type||'#'||p_expert_controle_data.data_id::text
|
|
|
NOT IN (SELECT w_expert_controle_data.expert_controle_id::text||'#'||w_expert_controle_data.data_type||'#'||w_expert_controle_data.data_id FROM w_expert_controle_data)
|
|
|
;
|
|
|
|
|
|
-- L'erreur réapparait aprés avoir disparu, réactivation
|
|
|
UPDATE rh.p_expert_controle_data SET
|
|
|
etat = '',
|
|
|
date_correction = '20991231'
|
|
|
WHERE etat = 'T' AND
|
|
|
(
|
|
|
i_expert_controle_id = 0 OR
|
|
|
p_expert_controle_data.expert_controle_id = i_expert_controle_id
|
|
|
) AND
|
|
|
p_expert_controle_data.expert_controle_id::text||'#'||p_expert_controle_data.data_type||'#'||p_expert_controle_data.data_id::text
|
|
|
IN (SELECT w_expert_controle_data.expert_controle_id::text||'#'||w_expert_controle_data.data_type||'#'||w_expert_controle_data.data_id FROM w_expert_controle_data)
|
|
|
;
|
|
|
|
|
|
INSERT INTO rh.p_expert_controle_data(
|
|
|
expert_controle_id,
|
|
|
date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
nb_cree,
|
|
|
nb_portee,
|
|
|
nb_cloture
|
|
|
)
|
|
|
SELECT
|
|
|
expert_controle_id,
|
|
|
date_signalement AS date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
1::numeric AS nb_cree,
|
|
|
0::numeric AS nb_portee,
|
|
|
0::numeric AS nb_cloture
|
|
|
FROM w_expert_controle_data
|
|
|
WHERE (w_expert_controle_data.expert_controle_id::text||'#'||w_expert_controle_data.data_type||'#'||w_expert_controle_data.data_id)
|
|
|
NOT IN (SELECT p_expert_controle_data.expert_controle_id::text||'#'||p_expert_controle_data.data_type||'#'||p_expert_controle_data.data_id FROM rh.p_expert_controle_data)
|
|
|
;
|
|
|
|
|
|
ANALYSE rh.p_expert_controle_data
|
|
|
;
|
|
|
|
|
|
DELETE FROM rh.p_expert_controle_data
|
|
|
WHERE expert_controle_id IN (SELECT oid FROM rh.t_expert_controle WHERE is_active <> '1')
|
|
|
;
|
|
|
|
|
|
DELETE FROM rh.p_expert_controle_data
|
|
|
WHERE nb_cree = 0
|
|
|
;
|
|
|
|
|
|
|
|
|
UPDATE rh.p_expert_controle_data
|
|
|
SET expert_controle_data_id = oid
|
|
|
WHERE expert_controle_data_id <> oid
|
|
|
;
|
|
|
|
|
|
|
|
|
INSERT INTO rh.p_expert_controle_data
|
|
|
(
|
|
|
oid,
|
|
|
expert_controle_data_id,
|
|
|
expert_controle_id,
|
|
|
date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
nb_cree,
|
|
|
nb_portee,
|
|
|
nb_cloture
|
|
|
)
|
|
|
SELECT
|
|
|
0::bigint AS oid,
|
|
|
expert_controle_data_id,
|
|
|
expert_controle_id,
|
|
|
date_evenement AS date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
0::bigint AS nb_cree,
|
|
|
1::bigint AS nb_portee,
|
|
|
0::bigint AS nb_cloture
|
|
|
FROM rh.p_expert_controle_data
|
|
|
WHERE nb_cree = 1 AND
|
|
|
date_evenement <> '20991231'
|
|
|
;
|
|
|
|
|
|
INSERT INTO rh.p_expert_controle_data
|
|
|
(
|
|
|
oid,
|
|
|
expert_controle_data_id,
|
|
|
expert_controle_id,
|
|
|
date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
nb_cree,
|
|
|
nb_portee,
|
|
|
nb_cloture
|
|
|
)
|
|
|
SELECT
|
|
|
0::bigint AS oid,
|
|
|
expert_controle_data_id,
|
|
|
expert_controle_id,
|
|
|
date_correction AS date_item,
|
|
|
date_signalement,
|
|
|
etat,
|
|
|
date_evenement,
|
|
|
date_correction,
|
|
|
contrat_mois_data,
|
|
|
data_type,
|
|
|
data_id,
|
|
|
data_code_original,
|
|
|
texte,
|
|
|
0::bigint AS nb_cree,
|
|
|
0::bigint AS nb_portee,
|
|
|
1::bigint AS nb_cloture
|
|
|
FROM rh.p_expert_controle_data
|
|
|
WHERE nb_cree = 1 AND
|
|
|
date_correction <> '20991231'
|
|
|
;
|
|
|
|
|
|
ANALYSE rh.p_expert_controle_data
|
|
|
;
|
|
|
|
|
|
UPDATE rh.t_expert_controle
|
|
|
SET last_execution_count = subview.nb
|
|
|
FROM
|
|
|
(
|
|
|
SELECT t_expert_controle.oid,
|
|
|
count(p_expert_controle_data.expert_controle_id) AS nb
|
|
|
FROM rh.t_expert_controle
|
|
|
LEFT JOIN rh.p_expert_controle_data ON
|
|
|
expert_controle_id = t_expert_controle.oid AND
|
|
|
nb_cree = 1 AND
|
|
|
date_correction = '20991231'
|
|
|
GROUP BY 1
|
|
|
) subview
|
|
|
WHERE t_expert_controle.oid = subview.oid AND
|
|
|
last_execution_count <> subview.nb
|
|
|
;
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|