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.
 
 
 

120 lines
4.6 KiB

-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_classes_sections.oid,
t_classes_sections.code,
t_classes_sections.texte,
t_classes_sections.condition,
t_classes_sections.include_code,
t_classes_sections.exclude_code,
CASE WHEN NOT (t_classes.sequence != 30 AND t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN t_listes_tables.code ELSE 'TYA' END as table_code,
t_classes.sequence as classe_sequence
FROM
eco.t_classes_sections,
eco.t_classes,
eco.t_listes_tables
WHERE 1=1
AND t_classes_sections.classe_id = t_classes.oid
AND table_id = t_listes_tables.oid
AND (t_classes.is_cti = '1' OR (t_classes.code ilike 'CTI_%' AND t_classes.code NOT IN ('CTI_CPTLETBUD','CTI_CPTVOTE','CTI_CPTRCV','CTI_UFCR','CTI_UFUM','CTI_UFSERS','CTI_UFSITE')))
ORDER BY
t_listes_tables.code,
t_classes.sequence,
t_classes_sections.code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
condition,
include_code,
exclude_code,
table_code,
classe_sequence
)
VALUES
(1, 'ATE', 'Atelier', '', '0', '0', 'TYA', 30),
(1, 'CUI', 'Cuisine', '', '0', '0', 'TYA', 30),
(1, 'DM', 'Dispositifs Médicaux', '', '0', '0', 'TYA', 30),
(1, 'DMI', 'Dispositifs Médicaux Implantables', '', '0', '0', 'TYA', 30),
(1, 'ECO', 'Economat', '', '0', '0', 'TYA', 30),
(1, 'LIN', 'Lingerie', '', '0', '0', 'TYA', 30),
(1, 'MED', 'Médicaments', '', '0', '0', 'TYA', 30),
(1, 'PAR', 'Parapharmacie', '', '0', '0', 'TYA', 30),
(1, '00', 'Livraison', '', '', '', 'TYM', 1),
(1, '01', 'Consommations', '', '', '', 'TYM', 1),
(1, '02', 'Pertes', '', '', '', 'TYM', 1),
(1, '99', 'Autres', '', '', '', 'TYM', 1),
(1, '11', 'Régularisation livraison', '', '', '', 'TYM', 1),
(1, '12', 'Retour', '', '', '', 'TYM', 1),
(1, '13', 'Avoir', '', '', '', 'TYM', 1),
(1, '30', 'Régularisation inventaire', '', '', '', 'TYM', 1)
;
-- 3/3 : Màj de la table iCTI
-- Sections à supprimer -> Sections CTI non-livrées
DROP TABLE IF EXISTS w_del_sections
;
CREATE TEMP TABLE w_del_sections as (
SELECT oid FROM eco.t_classes_sections
WHERE classe_id IN (
SELECT
t_classes.oid
FROM eco.t_classes
LEFT JOIN w_dbsetup ON w_dbsetup.code = t_classes_sections.code
WHERE 1=1
AND is_cti = '1'
AND w_dbsetup.code IS NULL
)
);
DELETE FROM eco.t_classes_sections_elements
WHERE section_id IN (SELECT oid FROM w_del_sections);
DELETE FROM eco.t_classes_sections
WHERE oid IN (SELECT oid FROM w_del_sections);
UPDATE eco.t_classes_sections SET
texte = w_dbsetup.texte,
condition = w_dbsetup.condition,
exclude_code = w_dbsetup.exclude_code,
include_code = w_dbsetup.include_code
FROM w_dbsetup, eco.t_classes, eco.t_listes_tables
WHERE t_classes.oid = t_classes_sections.classe_id
AND t_listes_tables.oid = t_classes.table_id
AND w_dbsetup.code||'@'||w_dbsetup.classe_sequence||'@'||w_dbsetup.table_code = t_classes_sections.code||'@'||t_classes.sequence||'@'||t_listes_tables.code
AND (
t_classes_sections.texte IS DISTINCT FROM w_dbsetup.texte
OR t_classes_sections.condition IS DISTINCT FROM w_dbsetup.condition
OR t_classes_sections.exclude_code IS DISTINCT FROM w_dbsetup.exclude_code
OR t_classes_sections.include_code IS DISTINCT FROM w_dbsetup.include_code
);
INSERT INTO eco.t_classes_sections(code, texte, classe_id, include_code, exclude_code)
SELECT
w_dbsetup.code,
w_dbsetup.texte,
t_classes.oid,
w_dbsetup.include_code,
w_dbsetup.exclude_code
FROM
w_dbsetup
JOIN eco.t_listes_tables ON (w_dbsetup.table_code = t_listes_tables.code
-- ou s'il s'agit de la classe des cles
OR (classe_sequence = 30 AND t_listes_tables.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)))
JOIN eco.t_classes ON 1=1
AND t_classes.table_id = t_listes_tables.oid
AND t_classes.sequence = w_dbsetup.classe_sequence
WHERE w_dbsetup.code||'@'||w_dbsetup.classe_sequence||'@'|| CASE WHEN w_dbsetup.classe_sequence != 30 THEN w_dbsetup.table_code ELSE (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') END
NOT IN (
SELECT t_classes_sections.code||'@'||t_classes.sequence||'@'||CASE WHEN w_dbsetup.classe_sequence != 30 THEN t_listes_tables.code ELSE (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') END
FROM eco.t_classes_sections
JOIN eco.t_classes ON t_classes.oid = t_classes_sections.classe_id
JOIN eco.t_listes_tables ON t_listes_tables.oid = t_classes.table_id)
;