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.
 
 

311 lines
12 KiB

return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_table_code
src: |
DECLARE
result TEXT;
BEGIN
-- Si public, réplication des classes de prestations PMSI
IF (i_table_code = 'PRESTA_C' OR i_table_code = '*ALL') THEN
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 't_classes') THEN
IF EXISTS (SELECT * FROM activite.p_sejours WHERE est_budget_global = '1' LIMIT 1) THEN
UPDATE activite.t_classes
SET code = 'CTI_RAFA_P'
WHERE code LIKE 'CTI\_RAFA\_P%' AND
code <> 'CTI_RAFA_P'
;
DROP TABLE IF EXISTS w_classes_pmsi
;
CREATE TEMP TABLE w_classes_pmsi AS
SELECT
t_listes_tables.oid AS table_id,
0::bigint AS classe_id,
t_classes.code AS classe_code,
t_classes.texte AS classe_texte,
0::bigint AS section_id,
t_classes_sections.code AS section_code,
t_classes_sections.texte AS section_texte,
t_prestations.code::text AS prestation_code,
t_prestations_activite.oid AS prestation_id
FROM pmsi.t_classes
JOIN pmsi.t_classes_sections ON classe_id = t_classes.oid
JOIN pmsi.t_classes_sections_elements ON section_id = t_classes_sections.oid
JOIN pmsi.t_prestations ON to_id = t_prestations.oid
JOIN activite.t_prestations t_prestations_activite ON t_prestations_activite.code = t_prestations.code
JOIN activite.t_listes_tables ON t_listes_tables.code = 'PRESTA_C'
WHERE t_classes.code IN ('CTI_RAFA_P','CTI_ARRETEVERS')
;
INSERT INTO activite.t_classes(
code,
texte,
table_id,
is_cti,
sequence,
contenu_by_code,
contenu_non_replicable_ailleurs
)
SELECT w_classes_pmsi.classe_code,
w_classes_pmsi.classe_texte,
w_classes_pmsi.table_id,
'1'::text AS is_cti,
(SELECT MAX(t_classes.sequence) FROM activite.t_classes WHERE t_classes.table_id = w_classes_pmsi.table_id AND t_classes.sequence < 30) + row_number() OVER (ORDER BY w_classes_pmsi.classe_code) ,
'0'::text AS contenu_by_code,
'0'::text AS contenu_non_replicable_ailleurs
FROM w_classes_pmsi
LEFT JOIN activite.t_classes ON
w_classes_pmsi.classe_code = t_classes.code AND
w_classes_pmsi.table_id = t_classes.table_id
WHERE t_classes.oid IS NULL
GROUP BY 1,2,3
;
UPDATE w_classes_pmsi
SET classe_id = t_classes.oid
FROM activite.t_classes
WHERE t_classes.code = classe_code AND
t_classes.table_id = w_classes_pmsi.table_id
;
INSERT INTO w_classes_pmsi
SELECT
t_classes.table_id,
t_classes.oid AS classe_id,
t_classes.code AS classe_code,
t_classes.texte AS classe_texte,
0::bigint AS section_id,
'99'::text AS section_code,
'Autres prestations'::text AS section_texte,
t_prestations.code AS prestation_code,
t_prestations.oid AS prestation_id
FROM activite.t_prestations
JOIN activite.t_classes ON t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi)
LEFT JOIn w_classes_pmsi ON
w_classes_pmsi.classe_id = t_classes.oid AND
w_classes_pmsi.prestation_id = t_prestations.oid
WHERE w_classes_pmsi.prestation_id IS NULL
;
INSERT INTO activite.t_classes_sections(
code,
texte,
classe_id,
condition,
include_code,
exclude_code
)
SELECT
w_classes_pmsi.section_code,
w_classes_pmsi.section_texte,
w_classes_pmsi.classe_id,
''::text AS condition,
''::text AS include_code,
''::text AS exclude_code
FROM w_classes_pmsi
LEFT JOIN activite.t_classes_sections ON
t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
t_classes_sections.code = w_classes_pmsi.section_code
WHERE w_classes_pmsi.classe_id <> 0 AND
t_classes_sections IS NULL
GROUP BY 1,2,3
ORDER BY 1
;
UPDATE w_classes_pmsi
SET section_id = t_classes_sections.oid
FROM activite.t_classes_sections
WHERE t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
t_classes_sections.code = w_classes_pmsi.section_code
;
DELETE
FROM activite.t_classes_sections
USING activite.t_classes
WHERE classe_id = t_classes.oid AND
t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi) AND
t_classes.oid::text||'-'||t_classes_sections.oid::text NOT IN (SELECT classe_id::text||'-'||section_id::text FROm w_classes_pmsi)
;
UPDATE activite.t_classes_sections
SET texte = section_texte
FROM w_classes_pmsi
WHERE t_classes_sections.oid = section_id AND
t_classes_sections.texte IS DISTINCT FROM section_texte
;
DELETE FROM activite.t_classes_sections_elements
USING
(
SELECT t_classes_sections_elements.section_id, to_id
FROM activite.t_classes_sections_elements
JOIN activite.t_classes_sections ON section_id = t_classes_sections.oid
JOIN w_classes_pmsi ON
t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
t_classes_sections_elements.to_id = w_classes_pmsi.prestation_id AND
t_classes_sections.oid <> w_classes_pmsi.section_id
GROUP BY 1,2
) subview
WHERE t_classes_sections_elements.section_id = subview.section_id AND
t_classes_sections_elements.to_id = subview.to_id
;
INSERT INTO activite.t_classes_sections_elements (
section_id,
to_id
)
SELECT section_id, prestation_id AS to_id
FROM w_classes_pmsi
LEFT JOIN
(
SELECT classe_id, to_id
FROM activite.t_classes_sections_elements
JOIN activite.t_classes_sections ON section_id = t_classes_sections.oid
GROUP BY 1,2
) subview ON w_classes_pmsi.classe_id = subview.classe_id AND
w_classes_pmsi.prestation_id = subview.to_id
WHERE w_classes_pmsi.classe_id <> 0
AND w_classes_pmsi.section_id <> 0 AND
subview.to_id IS NULL
GROUP BY 1,2
;
DELETE
FROM activite.t_classes_sections
USING activite.t_classes
WHERE classe_id = t_classes.oid AND
t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi) AND
t_classes.oid::text||'-'||t_classes_sections.oid::text NOT IN (SELECT classe_id::text||'-'||section_id::text FROm w_classes_pmsi)
;
END IF;
END IF;
END IF;
-- Si Toutes les tables, mettre à jour oid par codes
IF (i_table_code = '*ALL') THEN
PERFORM base.cti_initialize_classes_by_code('activite');
PERFORM base.cti_initialize_listes_by_code('activite');
END IF;
IF (i_table_code = 'SERVICE_F' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'SERVICE_F','service_facturation_section');
END IF;
IF (i_table_code = 'SERVICE_F' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_services_facturation', 'SERVICE_F','');
END IF;
IF (i_table_code = 'ETAGE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'ETAGE','etage_section');
END IF;
IF (i_table_code = 'ETAGE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_etages', 'ETAGE','');
END IF;
IF (i_table_code = 'LIT' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lits', 'LIT','');
END IF;
IF (i_table_code = 'LIT' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'LIT','lit_section');
END IF;
IF (i_table_code = 'UM' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_unites_medicales', 'UM','');
END IF;
IF (i_table_code = 'UM' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'UM','unite_medicale_section');
END IF;
IF (i_table_code = 'UF' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'UF','unite_fonctionnelle_section');
END IF;
IF (i_table_code = 'UF' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_unites_fonctionnelles', 'UF','');
END IF;
IF (i_table_code = 'MEDECIN' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_medecins_administratifs_c', 'MEDECIN','');
END IF;
IF (i_table_code = 'PRESTA_C' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_prestations', 'PRESTA_C','');
END IF;
IF (i_table_code = 'RUBRIQUE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_rubriques_facturation', 'RUBRIQUE','');
END IF;
IF (i_table_code = 'TIERSP' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_tiers_payant', 'TIERSP','');
END IF;
IF (i_table_code = 'FINESS' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('base', 't_finess', 'FINESS','');
UPDATE activite.t_finess_c SET
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.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
)
;
END IF;
IF (i_table_code = 'ACTE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_actes_c', 'ACTE','');
END IF;
IF (i_table_code = 'GHM' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_ghm_c', 'GHM','ghm_section');
END IF;
IF (i_table_code = 'GME' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_gme_c', 'GME','gme_section');
END IF;
IF (i_table_code = 'GHMGME' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_ghmgme_c', 'GHMGME','ghmgme_section');
END IF;
IF (i_table_code = 'COMPTE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_compte', 'COMPTE', '');
END IF;
IF (i_table_code = 'DURSEJ' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_durees_sejour_c', 'DURSEJ','');
END IF;
IF (i_table_code = 'AGE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_ages_c', 'AGE','');
END IF;
IF (i_table_code = 'CODEPOST' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_codes_postaux_c', 'CODEPOST','');
END IF;
IF (i_table_code = 'REJETNOEMI' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_rejets_noemie', 'REJETNOEMI','');
END IF;
IF (i_table_code = 'BUDGETCLE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_budget_cle', 'BUDGETCLE','');
END IF;
IF (i_table_code = 'FORMEACTIVITE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_forme_activite', 'FORMEACTIVITE','');
END IF;
IF (i_table_code = 'ETATSEJOUR' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_etat_sejour', 'ETATSEJOUR','');
END IF;
IF (i_table_code = 'ACTIVITE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_activites', 'ACTIVITE','');
END IF;
IF (i_table_code = 'ACTIVITE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'ACTIVITE','activite_section');
END IF;
IF (i_table_code = 'POLE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('base', 't_pole', 'POLE','');
UPDATE activite.t_pole SET
section_id = t_pole.section_id,
section_code = t_pole.section_code,
section_texte = t_pole.section_texte
FROM base.t_pole as t_pole_base
WHERE t_pole.oid = t_pole_base.oid AND
(
t_pole.section_id IS DISTINCT FROM t_pole_base.section_id OR
t_pole.section_code IS DISTINCT FROM t_pole_base.section_code OR
t_pole.section_texte IS DISTINCT FROM t_pole_base.section_texte
)
;
END IF;
RETURN 'OK';
END;