You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

177 lines
5.4 KiB

return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
-- Recopie listes de FINESS de activité vers base
IF NOT EXISTS (
SELECT t_listes.code
FROM base.t_listes
) AND
EXISTS
(SELECT t_listes.code
FROM activite.t_listes
JOIN activite.t_listes_tables ON t_listes.table_id = t_listes_tables.oid
WHERE t_listes_tables.code = 'FINESS'
)
THEN
DROP TABLE IF EXISTS w_listes_finess;
CREATE TEMP TABLE w_listes_finess AS
SELECT t_listes.*
FROM activite.t_listes
JOIN activite.t_listes_tables ON t_listes.table_id = t_listes_tables.oid
WHERE t_listes_tables.code = 'FINESS' AND
(SELECT count(*) FROM base.t_listes) = 0
;
INSERT INTO base.t_listes(
chapitre,
code,
contenu_by_code,
contenu_non_replicable_ailleurs,
est_partagee_modification,
exclude_code,
include_code,
is_cti,
oid,
show_omit,
table_id,
texte,
utilisateur_createur)
SELECT
w_listes_finess.chapitre,
w_listes_finess.code,
w_listes_finess.contenu_by_code,
w_listes_finess.contenu_non_replicable_ailleurs,
w_listes_finess.est_partagee_modification,
w_listes_finess.exclude_code,
w_listes_finess.include_code,
w_listes_finess.is_cti,
w_listes_finess.oid,
w_listes_finess.show_omit,
t_listes_tables.oid AS table_id,
w_listes_finess.texte,
w_listes_finess.utilisateur_createur
FROM w_listes_finess
JOIN base.t_listes_tables ON t_listes_tables.code = 'FINESS'
;
INSERT INTO base.t_listes_contenu(
liste_id,
to_id)
SELECT liste_id,
to_id
FROM activite.t_listes_contenu
WHERE liste_id IN (SELECT oid FROM w_listes_finess)
;
END IF;
-- Recopie classes de FINESS de activité vers base
IF NOT EXISTS (
SELECT t_classes.code
FROM base.t_classes
) AND
EXISTS
(SELECT t_classes.code
FROM activite.t_classes
JOIN activite.t_listes_tables ON t_classes.table_id = t_listes_tables.oid
WHERE t_listes_tables.code = 'FINESS'
)
THEN
DROP TABLE IF EXISTS w_classes_finess;
CREATE TEMP TABLE w_classes_finess AS
SELECT t_classes.*
FROM activite.t_classes
JOIN activite.t_listes_tables ON t_classes.table_id = t_listes_tables.oid
WHERE t_listes_tables.code = 'FINESS' AND
(SELECT count(*) FROM base.t_classes) = 0
;
INSERT INTO base.t_classes(
oid,
sequence,
code,
contenu_by_code,
contenu_non_replicable_ailleurs,
is_cti,
table_id,
texte)
SELECT
w_classes_finess.oid,
w_classes_finess.sequence,
w_classes_finess.code,
w_classes_finess.contenu_by_code,
w_classes_finess.contenu_non_replicable_ailleurs,
w_classes_finess.is_cti,
t_listes_tables.oid AS table_id,
w_classes_finess.texte
FROM w_classes_finess
JOIN base.t_listes_tables ON t_listes_tables.code = 'FINESS'
;
INSERT INTO base.t_classes_sections(
oid,
classe_id,
code,
condition,
exclude_code,
include_code,
texte)
SELECT oid,
classe_id,
code,
condition,
exclude_code,
include_code,
texte
FROM activite.t_classes_sections
WHERE classe_id IN (SELECT oid FROM w_classes_finess)
;
INSERT INTO base.t_classes_sections_elements(section_id, to_id)
SELECT t_classes_sections_elements.section_id, t_classes_sections_elements.to_id
FROM activite.t_classes_sections_elements
JOIN activite.t_classes_sections ON section_id = t_classes_sections.oid
WHERE t_classes_sections.classe_id IN (SELECT oid FROM w_classes_finess)
;
PERFORM base.cti_update_classes('base', 't_finess', 'FINESS','');
END IF;
EXECUTE 'UPDATE activite.t_finess_c SET
code = t_finess.code,
texte = t_finess.texte,
texte_court = t_finess.texte_court,
type_etablissement = t_finess.type_etablissement,
secondaire = t_finess.secondaire,
section_id = t_finess.section_id,
section_code = t_finess.section_code,
section_texte = t_finess.section_texte
FROM base.t_finess
WHERE t_finess.oid = t_finess_c.oid AND
(
t_finess_c.code IS DISTINCT FROM t_finess.code OR
t_finess_c.texte IS DISTINCT FROM t_finess.texte OR
t_finess_c.texte_court IS DISTINCT FROM t_finess.texte_court OR
t_finess_c.type_etablissement IS DISTINCT FROM t_finess.type_etablissement OR
t_finess_c.secondaire IS DISTINCT FROM t_finess.secondaire OR
t_finess_c.section_id IS DISTINCT FROM t_finess.section_id OR
t_finess_c.section_code IS DISTINCT FROM t_finess.section_code OR
t_finess_c.section_texte IS DISTINCT FROM t_finess.section_texte
)';
EXECUTE 'INSERT INTO activite.t_finess_c(oid, code, texte, texte_court, type_etablissement, section_id, section_code, section_texte)
SELECT 0, ''000000000'', ''Non renseigné'', ''Non renseigné'', ''0'', NULL, NULL, NULL
WHERE 0 != ALL(ARRAY(SELECT oid FROM activite.t_finess_c)::bigint[])';
EXECUTE 'INSERT INTO activite.t_finess_c(oid, code, texte, texte_court, type_etablissement, secondaire, section_id, section_code, section_texte)
SELECT oid, code, texte, texte_court, type_etablissement, secondaire, section_id, section_code, section_texte
FROM base.t_finess
WHERE t_finess.oid NOT IN (SELECT oid FROM activite.t_finess_c)
ORDER BY t_finess.oid;';
RETURN 'OK';
END;