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.
 
 
 

105 lines
3.2 KiB

-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
CASE WHEN t_classes_sections.oid = 0 THEN t_classes_sections.oid ELSE 1 END AS oid,
t_listes_tables.code as table_code,
t_classes.code AS classe_code,
t_classes.sequence as classe_sequence,
t_classes_sections.code,
t_classes_sections.texte,
t_classes_sections.condition,
t_classes_sections.exclude_code,
t_classes_sections.include_code,
0::bigint AS classe_id,
0::bigint AS table_id
FROM compta.t_classes_sections
JOIN compta.t_classes ON t_classes_sections.classe_id = t_classes.oid
JOIN compta.t_listes_tables ON table_id = t_listes_tables.oid
WHERE t_classes.code <> '' AND
(t_classes.is_cti = '1' OR t_classes.code LIKE 'CTI_%') AND
1=1
ORDER BY 2,3,5 LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
table_code,
classe_code,
classe_sequence,
code,
texte,
condition,
exclude_code,
include_code,
classe_id,
table_id
)
VALUES
(1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S1', 'Consommable', '', '', '', 0, 0),
(1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S2', 'Structure', '', '', '', 0, 0),
(1, 'CPT', 'CTI_CONTRIBUTION_BLOC_OPERATOIRE', 42, 'S3', 'Energie', '', '', '', 0, 0)
;
-- 3/3 : Màj de la table iCTI
UPDATE w_dbsetup
SET table_id = t_listes_tables.oid
FROM compta.t_listes_tables
WHERE table_code = t_listes_tables.code
;
UPDATE w_dbsetup
SET classe_id = t_classes.oid
FROM compta.t_classes
WHERE w_dbsetup.classe_code = t_classes.code AND
w_dbsetup.table_id = t_classes.table_id
;
DELETE FROM compta.t_classes_sections
USING
(
SELECT t_classes_sections.classe_id, t_classes_sections.oid
FROM compta.t_classes_sections
LEFT JOIN w_dbsetup ON
w_dbsetup.classe_id = t_classes_sections.classe_id AND
w_dbsetup.code = t_classes_sections.code
WHERE w_dbsetup.oid IS NULL AND
t_classes_sections.classe_id IN (SELECT classe_id FROM w_dbsetup) AND
t_classes_sections.oid NOT IN (SELECT section_id FROM compta.t_classes_sections_elements)
) subview
WHERE subview.classe_id = t_classes_sections.classe_id AND
subview.oid = t_classes_sections.oid
;
UPDATE compta.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
WHERE w_dbsetup.classe_id = t_classes_sections.classe_id AND
w_dbsetup.code = t_classes_sections.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 compta.t_classes_sections(code, texte, classe_id, condition, exclude_code, include_code)
SELECT
w_dbsetup.code,
w_dbsetup.texte,
w_dbsetup.classe_id,
w_dbsetup.condition,
w_dbsetup.exclude_code,
w_dbsetup.include_code
FROM w_dbsetup
WHERE w_dbsetup.classe_id > 0 AND
(w_dbsetup.code||'@'||w_dbsetup.classe_id::text)
NOT IN (SELECT t_classes_sections.code||'@'||t_classes_sections.classe_id FROM compta.t_classes_sections)
;