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.
 
 
 

818 lines
38 KiB

return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
UPDATE compta.t_comptes
SET classe_1_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 1) = t_classes_comptes.code AND
t_comptes.classe_1_id IS DISTINCT FROM t_classes_comptes.oid;
UPDATE compta.t_comptes
SET classe_2_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 2) = t_classes_comptes.code AND
t_comptes.classe_2_id IS DISTINCT FROM t_classes_comptes.oid;
UPDATE compta.t_comptes
SET classe_3_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 3) = t_classes_comptes.code AND
t_comptes.classe_3_id IS DISTINCT FROM t_classes_comptes.oid;
UPDATE compta.t_comptes
SET classe_4_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 4) = t_classes_comptes.code AND
t_comptes.classe_4_id IS DISTINCT FROM t_classes_comptes.oid;
UPDATE compta.t_comptes
SET classe_5_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 5) = t_classes_comptes.code AND
t_comptes.classe_5_id IS DISTINCT FROM t_classes_comptes.oid;
UPDATE compta.t_comptes
SET classe_6_id = t_classes_comptes.oid
FROM compta.t_classes_comptes, compta.t_comptes t_comptes_generaux
WHERE t_comptes.compte_general_id = t_comptes_generaux.oid AND
substr(t_comptes_generaux.numero, 1 , 6) = t_classes_comptes.code AND
t_comptes.classe_6_id IS DISTINCT FROM t_classes_comptes.oid;
-- Comptes signes (classes 4 et 5 pour bilan)
-- Nouveaux champs
UPDATE compta.t_comptes
SET sens = ''
WHERE sens IS NULL;
UPDATE compta.t_comptes
SET sens = 'C'
WHERE t_comptes.numero like '%(C)' AND sens = ''
;
UPDATE compta.t_comptes
SET sens = 'D'
WHERE t_comptes.numero like '%(D)' AND sens = ''
;
UPDATE compta.t_comptes
SET compte_nonsigne_id = t_comptes_nonsigne.oid,
compte_nonsigne_numero = t_comptes_nonsigne.numero
FROM compta.t_comptes t_comptes_nonsigne
WHERE t_comptes_nonsigne.type_compta_id = t_comptes.type_compta_id AND
split_part(t_comptes.numero,'(C)',1) = t_comptes_nonsigne.numero AND
t_comptes.numero like '%(C)' AND
t_comptes.oid = t_comptes.compte_nonsigne_id
;
UPDATE compta.t_comptes
SET compte_nonsigne_id = t_comptes_nonsigne.oid,
compte_nonsigne_numero = t_comptes_nonsigne.numero
FROM compta.t_comptes t_comptes_nonsigne
WHERE t_comptes_nonsigne.type_compta_id = t_comptes.type_compta_id AND
split_part(t_comptes.numero,'(D)',1) = t_comptes_nonsigne.numero AND
t_comptes.numero like '%(D)' AND
t_comptes.oid = t_comptes.compte_nonsigne_id
;
UPDATE compta.t_comptes
SET compte_nonsigne_id = oid
WHERE sens = '' AND
compte_nonsigne_id IS DISTINCT FROM oid;
UPDATE compta.t_comptes
SET compte_nonsigne_numero = numero
WHERE sens = '' AND
compte_nonsigne_numero IS DISTINCT FROm numero
;
-- Sens des comptes selon exercice
DROP TABLE IF EXISTS cti_reorganize_comptes_compte_sens;
CREATE TEMP TABLE cti_reorganize_comptes_compte_sens AS
SELECT p_historique_ecritures_total.site_id,
t_comptes.compte_nonsigne_id AS oid,
t_comptes.compte_nonsigne_numero AS numero,
exercice_comptable,
CASE
WHEN SUM(montant_debit)-SUM(montant_credit) > 0 THEN 'D'
WHEN SUM(montant_debit)-SUM(montant_credit) < 0 THEN 'C'
ELSE '' END AS sens
FROM compta.p_historique_ecritures_total
JOIN compta.t_comptes ON t_comptes.oid = p_historique_ecritures_total.compte_id
WHERE t_comptes.numero LIKE '4%' OR t_comptes.numero LIKE '5%' OR t_comptes.numero LIKE '603%' OR t_comptes.numero LIKE '1813%' OR t_comptes.numero LIKE '1814%'
GROUP BY 1,2,3,4
ORDER BY 1,2;
UPDATE cti_reorganize_comptes_compte_sens
SET sens =
CASE
WHEN nb_c > nb_d THEN 'C'
WHEN nb_d > nb_c THEN 'D'
ELSE '' END
FROM (
SELECT oid,
SUM(CASE WHEN sens = 'C' THEN 1 ELSE 0 END) AS nb_c,
SUM(CASE WHEN sens = 'D' THEN 1 ELSE 0 END) AS nb_d
FROM cti_reorganize_comptes_compte_sens
GROUP BY 1
) subview
WHERE cti_reorganize_comptes_compte_sens.oid = subview.oid AND cti_reorganize_comptes_compte_sens.sens = ''
;
UPDATE cti_reorganize_comptes_compte_sens
SET sens =
CASE
WHEN nb_c > nb_d THEN 'C'
WHEN nb_d > nb_c THEN 'D'
ELSE '' END
FROM (
SELECT substr(numero,1,3) AS sous_classe,
SUM(CASE WHEN sens = 'C' THEN 1 ELSE 0 END) AS nb_c,
SUM(CASE WHEN sens = 'D' THEN 1 ELSE 0 END) AS nb_d
FROM cti_reorganize_comptes_compte_sens
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(cti_reorganize_comptes_compte_sens.numero,1,3) = subview.sous_classe AND cti_reorganize_comptes_compte_sens.sens = ''
;
UPDATE cti_reorganize_comptes_compte_sens
SET sens =
CASE
WHEN nb_c > nb_d THEN 'C'
WHEN nb_d > nb_c THEN 'D'
ELSE '' END
FROM (
SELECT substr(numero,1,2) AS sous_classe,
SUM(CASE WHEN sens = 'C' THEN 1 ELSE 0 END) AS nb_c,
SUM(CASE WHEN sens = 'D' THEN 1 ELSE 0 END) AS nb_d
FROM cti_reorganize_comptes_compte_sens
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(cti_reorganize_comptes_compte_sens.numero,1,2) = subview.sous_classe AND cti_reorganize_comptes_compte_sens.sens = ''
;
UPDATE cti_reorganize_comptes_compte_sens
SET sens = 'C'
WHERE sens = '' AND
substr(numero,1,1) = '4';
UPDATE cti_reorganize_comptes_compte_sens
SET sens = 'D'
WHERE sens = '' AND
substr(numero,1,1) = '5';
UPDATE cti_reorganize_comptes_compte_sens
SET sens = 'D'
WHERE sens = '' AND
substr(numero,1,3) = '603';
-- Ajout des comptes signes (debit et credit)
INSERT INTO compta.t_comptes(
type_compta_id,
numero,
texte,
compte_general_id,
clinique_honoraire,
banque,
etat,
classe_1_id,
classe_2_id,
classe_3_id,
classe_4_id,
classe_5_id,
classe_6_id,
solde_initial,
collectif,
type_compta_extra_id,
numero_extra,
texte_extra,
partenaire_id,
inter_site,
sens,
compte_nonsigne_id,
compte_nonsigne_numero)
SELECT
t_comptes.type_compta_id,
t_comptes.numero|| '(C)',
t_comptes.texte,
t_comptes.compte_general_id,
t_comptes.clinique_honoraire,
t_comptes.banque,
t_comptes.etat,
t_comptes.classe_1_id,
t_comptes.classe_2_id,
t_comptes.classe_3_id,
t_comptes.classe_4_id,
t_comptes.classe_5_id,
t_comptes.classe_6_id,
t_comptes.solde_initial,
t_comptes.collectif,
t_comptes.type_compta_extra_id,
t_comptes.numero_extra,
t_comptes.texte_extra,
t_comptes.partenaire_id,
t_comptes.inter_site,
'C' AS sens,
t_comptes.oid AS compte_nonsigne_id,
t_comptes.numero AS compte_nonsigne_numero
FROM compta.t_comptes
JOIN
( SELECT oid
FROM cti_reorganize_comptes_compte_sens
WHERE sens <> ''
GROUP BY 1
) subview
ON t_comptes.oid = subview.oid
WHERE (t_comptes.numero|| '(C)') NOT IN (SELECT numero FROM compta.t_comptes)
;
INSERT INTO compta.t_comptes(
type_compta_id,
numero,
texte,
compte_general_id,
clinique_honoraire,
banque,
etat,
classe_1_id,
classe_2_id,
classe_3_id,
classe_4_id,
classe_5_id,
classe_6_id,
solde_initial,
collectif,
type_compta_extra_id,
numero_extra,
texte_extra,
partenaire_id,
inter_site,
sens,
compte_nonsigne_id,
compte_nonsigne_numero)
SELECT
t_comptes.type_compta_id,
t_comptes.numero|| '(D)',
t_comptes.texte,
t_comptes.compte_general_id,
t_comptes.clinique_honoraire,
t_comptes.banque,
t_comptes.etat,
t_comptes.classe_1_id,
t_comptes.classe_2_id,
t_comptes.classe_3_id,
t_comptes.classe_4_id,
t_comptes.classe_5_id,
t_comptes.classe_6_id,
t_comptes.solde_initial,
t_comptes.collectif,
t_comptes.type_compta_extra_id,
t_comptes.numero_extra,
t_comptes.texte_extra,
t_comptes.partenaire_id,
t_comptes.inter_site,
'D' AS sens,
t_comptes.oid AS compte_nonsigne_id,
t_comptes.numero AS compte_nonsigne_numero
FROM compta.t_comptes
JOIN
( SELECT oid
FROM cti_reorganize_comptes_compte_sens
WHERE sens <> ''
GROUP BY 1
) subview
ON t_comptes.oid = subview.oid
WHERE (t_comptes.numero|| '(D)') NOT IN (SELECT numero FROM compta.t_comptes)
;
UPDATE compta.t_comptes_c
SET banque = t_comptes.banque
FROM compta.t_comptes
WHERE t_comptes.oid = t_comptes_c.compte_nonsigne_id AND
t_comptes_c.banque <> t_comptes.banque
;
-- Mise a jour des ecritures
UPDATE compta.p_historique_ecritures
SET compte_id = t_comptes_signe.oid
FROM compta.t_comptes
JOIN cti_reorganize_comptes_compte_sens ON t_comptes.compte_nonsigne_id = cti_reorganize_comptes_compte_sens.oid
JOIN compta.t_comptes t_comptes_signe ON cti_reorganize_comptes_compte_sens.oid = t_comptes_signe.compte_nonsigne_id AND
cti_reorganize_comptes_compte_sens.sens = t_comptes_signe.sens
WHERE p_historique_ecritures.compte_id = t_comptes.oid AND
p_historique_ecritures.site_id = cti_reorganize_comptes_compte_sens.site_id AND
p_historique_ecritures.exercice_comptable = cti_reorganize_comptes_compte_sens.exercice_comptable AND
p_historique_ecritures.compte_id IS DISTINCT FROM t_comptes_signe.oid
;
UPDATE compta.p_historique_ecritures_total p_historique_ecritures
SET compte_id = t_comptes_signe.oid
FROM compta.t_comptes
JOIN cti_reorganize_comptes_compte_sens ON t_comptes.compte_nonsigne_id = cti_reorganize_comptes_compte_sens.oid
JOIN compta.t_comptes t_comptes_signe ON cti_reorganize_comptes_compte_sens.oid = t_comptes_signe.compte_nonsigne_id AND
cti_reorganize_comptes_compte_sens.sens = t_comptes_signe.sens
WHERE p_historique_ecritures.compte_id = t_comptes.oid AND
p_historique_ecritures.site_id = cti_reorganize_comptes_compte_sens.site_id AND
p_historique_ecritures.exercice_comptable = cti_reorganize_comptes_compte_sens.exercice_comptable AND
p_historique_ecritures.compte_id IS DISTINCT FROM t_comptes_signe.oid
;
-- Code banque
UPDATE compta.t_comptes
SET banque = t_comptes_nonsignes.banque
FROM compta.t_comptes t_comptes_nonsignes
WHERE t_comptes.compte_nonsigne_id = t_comptes_nonsignes.oid AND
t_comptes.compte_nonsigne_id <> t_comptes.oid AND
t_comptes.banque <> t_comptes_nonsignes.banque
;
-- Mise a jour table repliquee
UPDATE compta.t_comptes_c SET
compte_general_id = t_comptes.compte_general_id,
compte_general_numero = t_comptes_generaux.numero,
compte_general_texte = t_comptes_generaux.texte,
numero = t_comptes.numero,
texte = t_comptes.texte,
clinique_honoraire = t_comptes.clinique_honoraire,
type_compta_id = t_comptes.type_compta_id,
type_compta_code = t_types_compta.code,
type_compta_texte = t_types_compta.texte,
banque = t_comptes.banque,
classe_1_id = t_comptes.classe_1_id,
classe_1_code = t_classe_1.code,
classe_1_texte = t_classe_1.texte,
classe_2_id = t_comptes.classe_2_id,
classe_2_code = t_classe_2.code,
classe_2_texte = t_classe_2.texte,
classe_3_id = t_comptes.classe_3_id,
classe_3_code = t_classe_3.code,
classe_3_texte = t_classe_3.texte,
classe_4_id = t_comptes.classe_4_id,
classe_4_code = t_classe_4.code,
classe_4_texte = t_classe_4.texte,
classe_5_id = t_comptes.classe_5_id,
classe_5_code = t_classe_5.code,
classe_5_texte = t_classe_5.texte,
classe_6_id = t_comptes.classe_6_id,
classe_6_code = t_classe_6.code,
classe_6_texte = t_classe_6.texte,
compte_nonsigne_id = t_comptes.compte_nonsigne_id,
compte_nonsigne_numero = t_comptes.compte_nonsigne_numero
FROM compta.t_comptes
JOIN compta.t_types_compta ON (t_comptes.type_compta_id = t_types_compta.oid )
JOIN compta.t_comptes t_comptes_generaux ON (t_comptes_generaux.oid = t_comptes.compte_general_id)
JOIN compta.t_classes_comptes t_classe_1 ON (t_comptes.classe_1_id = t_classe_1.oid)
JOIN compta.t_classes_comptes t_classe_2 ON (t_comptes.classe_2_id = t_classe_2.oid)
JOIN compta.t_classes_comptes t_classe_3 ON (t_comptes.classe_3_id = t_classe_3.oid)
JOIN compta.t_classes_comptes t_classe_4 ON (t_comptes.classe_4_id = t_classe_4.oid)
JOIN compta.t_classes_comptes t_classe_5 ON (t_comptes.classe_5_id = t_classe_5.oid)
JOIN compta.t_classes_comptes t_classe_6 ON (t_comptes.classe_6_id = t_classe_6.oid)
WHERE t_comptes.oid = t_comptes_c.oid
AND (
t_comptes_c.compte_general_id IS DISTINCT FROM t_comptes.compte_general_id OR
t_comptes_c.compte_general_numero IS DISTINCT FROM t_comptes_generaux.numero OR
t_comptes_c.compte_general_texte IS DISTINCT FROM t_comptes_generaux.texte OR
t_comptes_c.numero IS DISTINCT FROM t_comptes.numero OR
t_comptes_c.texte IS DISTINCT FROM t_comptes.texte OR
t_comptes_c.clinique_honoraire IS DISTINCT FROM t_comptes.clinique_honoraire OR
t_comptes_c.type_compta_id IS DISTINCT FROM t_comptes.type_compta_id OR
t_comptes_c.type_compta_code IS DISTINCT FROM t_types_compta.code OR
t_comptes_c.type_compta_texte IS DISTINCT FROM t_types_compta.texte OR
t_comptes_c.banque IS DISTINCT FROM t_comptes.banque OR
t_comptes_c.classe_1_id IS DISTINCT FROM t_comptes.classe_1_id OR
t_comptes_c.classe_1_code IS DISTINCT FROM t_classe_1.code OR
t_comptes_c.classe_1_texte IS DISTINCT FROM t_classe_1.texte OR
t_comptes_c.classe_2_id IS DISTINCT FROM t_comptes.classe_2_id OR
t_comptes_c.classe_2_code IS DISTINCT FROM t_classe_2.code OR
t_comptes_c.classe_2_texte IS DISTINCT FROM t_classe_2.texte OR
t_comptes_c.classe_3_id IS DISTINCT FROM t_comptes.classe_3_id OR
t_comptes_c.classe_3_code IS DISTINCT FROM t_classe_3.code OR
t_comptes_c.classe_3_texte IS DISTINCT FROM t_classe_3.texte OR
t_comptes_c.classe_4_id IS DISTINCT FROM t_comptes.classe_4_id OR
t_comptes_c.classe_4_code IS DISTINCT FROM t_classe_4.code OR
t_comptes_c.classe_4_texte IS DISTINCT FROM t_classe_4.texte OR
t_comptes_c.classe_5_id IS DISTINCT FROM t_comptes.classe_5_id OR
t_comptes_c.classe_5_code IS DISTINCT FROM t_classe_5.code OR
t_comptes_c.classe_5_texte IS DISTINCT FROM t_classe_5.texte OR
t_comptes_c.classe_6_id IS DISTINCT FROM t_comptes.classe_6_id OR
t_comptes_c.classe_6_code IS DISTINCT FROM t_classe_6.code OR
t_comptes_c.classe_6_texte IS DISTINCT FROM t_classe_6.texte OR
t_comptes_c.compte_nonsigne_id IS DISTINCT FROM t_comptes.compte_nonsigne_id OR
t_comptes_c.compte_nonsigne_numero IS DISTINCT FROM t_comptes.compte_nonsigne_numero
);
INSERT INTO compta.t_comptes_c(
compte_general_id,
compte_general_numero,
compte_general_texte,
oid,
numero,
texte,
clinique_honoraire,
type_compta_id,
type_compta_code,
type_compta_texte,
banque,
classe_1_id, classe_1_code, classe_1_texte,
classe_2_id, classe_2_code, classe_2_texte,
classe_3_id, classe_3_code, classe_3_texte,
classe_4_id, classe_4_code, classe_4_texte,
classe_5_id, classe_5_code, classe_5_texte,
classe_6_id, classe_6_code, classe_6_texte,
compte_nonsigne_id, compte_nonsigne_numero
)
SELECT
t_comptes.compte_general_id,
t_comptes_generaux.numero,
t_comptes_generaux.texte,
t_comptes.oid,
t_comptes.numero,
t_comptes.texte,
t_comptes.clinique_honoraire,
t_comptes.type_compta_id,
t_types_compta.code,
t_types_compta.texte,
t_comptes.banque,
t_comptes.classe_1_id, t_classe_1.code, t_classe_1.texte,
t_comptes.classe_2_id, t_classe_2.code, t_classe_2.texte,
t_comptes.classe_3_id, t_classe_3.code, t_classe_3.texte,
t_comptes.classe_4_id, t_classe_4.code, t_classe_4.texte,
t_comptes.classe_5_id, t_classe_5.code, t_classe_5.texte,
t_comptes.classe_6_id, t_classe_6.code, t_classe_6.texte,
t_comptes.compte_nonsigne_id, t_comptes.compte_nonsigne_numero
FROM compta.t_comptes
JOIN compta.t_types_compta ON (t_comptes.type_compta_id = t_types_compta.oid )
JOIN compta.t_comptes t_comptes_generaux ON (t_comptes_generaux.oid = t_comptes.compte_general_id)
JOIN compta.t_classes_comptes t_classe_1 ON (t_comptes.classe_1_id = t_classe_1.oid)
JOIN compta.t_classes_comptes t_classe_2 ON (t_comptes.classe_2_id = t_classe_2.oid)
JOIN compta.t_classes_comptes t_classe_3 ON (t_comptes.classe_3_id = t_classe_3.oid)
JOIN compta.t_classes_comptes t_classe_4 ON (t_comptes.classe_4_id = t_classe_4.oid)
JOIN compta.t_classes_comptes t_classe_5 ON (t_comptes.classe_5_id = t_classe_5.oid)
JOIN compta.t_classes_comptes t_classe_6 ON (t_comptes.classe_6_id = t_classe_6.oid)
WHERE t_comptes.oid NOT IN (SELECt oid FROM compta.t_comptes_c)
ORDER BY t_comptes.numero;
-- Texte des comptes signes
UPDATE compta.t_comptes_c SET
compte_nonsigne_numero = t_comptes_nonsigne.numero,
texte = t_comptes_nonsigne.texte
FROM compta.t_comptes t_comptes_nonsigne
WHERE t_comptes_nonsigne.oid = t_comptes_c.compte_nonsigne_id AND
t_comptes_c.compte_nonsigne_id <> t_comptes_c.oid AND
(
t_comptes_c.compte_nonsigne_numero IS DISTINCT FROM t_comptes_nonsigne.numero OR
t_comptes_c.texte IS DISTINCT FROM t_comptes_nonsigne.texte
)
;
-- Classes
UPDATE compta.t_comptes_c SET
arbre_classe_1_id = 0,
arbre_classe_1_code = '',
arbre_classe_1_texte = '',
arbre_classe_2_id = 0,
arbre_classe_2_code = '',
arbre_classe_2_texte = '',
arbre_classe_3_id = 0,
arbre_classe_3_code = '',
arbre_classe_3_texte = '',
arbre_classe_4_id = 0,
arbre_classe_4_code = '',
arbre_classe_4_texte = '',
arbre_classe_5_id = 0,
arbre_classe_5_code = '',
arbre_classe_5_texte = '',
arbre_classe_6_id = 0,
arbre_classe_6_code = '',
arbre_classe_6_texte = '',
arbre_classe_7_id = 0,
arbre_classe_7_code = '',
arbre_classe_7_texte = '';
UPDATE compta.t_comptes_c
SET
arbre_classe_1_id =
CASE
WHEN classe_1_texte <> '' THEN classe_1_id
WHEN classe_2_texte <> '' THEN classe_2_id
WHEN classe_3_texte <> '' THEN classe_3_id
WHEN classe_4_texte <> '' THEN classe_4_id
WHEN classe_5_texte <> '' THEN classe_5_id
WHEN classe_6_texte <> '' THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_1_code =
CASE
WHEN classe_1_texte <> '' THEN classe_1_code
WHEN classe_2_texte <> '' THEN classe_2_code
WHEN classe_3_texte <> '' THEN classe_3_code
WHEN classe_4_texte <> '' THEN classe_4_code
WHEN classe_5_texte <> '' THEN classe_5_code
WHEN classe_6_texte <> '' THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_1_texte =
CASE
WHEN classe_1_texte <> '' THEN classe_1_texte
WHEN classe_2_texte <> '' THEN classe_2_texte
WHEN classe_3_texte <> '' THEN classe_3_texte
WHEN classe_4_texte <> '' THEN classe_4_texte
WHEN classe_5_texte <> '' THEN classe_5_texte
WHEN classe_6_texte <> '' THEN classe_6_texte
ELSE compte_general_texte
END
WHERE
arbre_classe_1_id IS DISTINCT FROM
CASE
WHEN classe_1_texte <> '' THEN classe_1_id
WHEN classe_2_texte <> '' THEN classe_2_id
WHEN classe_3_texte <> '' THEN classe_3_id
WHEN classe_4_texte <> '' THEN classe_4_id
WHEN classe_5_texte <> '' THEN classe_5_id
WHEN classe_6_texte <> '' THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_1_code IS DISTINCT FROM
CASE
WHEN classe_1_texte <> '' THEN classe_1_code
WHEN classe_2_texte <> '' THEN classe_2_code
WHEN classe_3_texte <> '' THEN classe_3_code
WHEN classe_4_texte <> '' THEN classe_4_code
WHEN classe_5_texte <> '' THEN classe_5_code
WHEN classe_6_texte <> '' THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_1_texte IS DISTINCT FROM
CASE
WHEN classe_1_texte <> '' THEN classe_1_texte
WHEN classe_2_texte <> '' THEN classe_2_texte
WHEN classe_3_texte <> '' THEN classe_3_texte
WHEN classe_4_texte <> '' THEN classe_4_texte
WHEN classe_5_texte <> '' THEN classe_5_texte
WHEN classe_6_texte <> '' THEN classe_6_texte
ELSE compte_general_texte
END;
UPDATE compta.t_comptes_c
SET
arbre_classe_2_id =
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_id
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_id
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_2_code =
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_code
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_code
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_2_texte =
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_texte
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_texte
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
WHERE arbre_classe_1_code <> compte_general_numero
AND (
arbre_classe_2_id IS DISTINCT FROM
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_id
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_id
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_2_code IS DISTINCT FROM
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_code
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_code
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_2_texte IS DISTINCT FROM
CASE
WHEN classe_2_texte <> '' AND arbre_classe_1_code <> classe_2_code THEN classe_2_texte
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code THEN classe_3_texte
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
);
UPDATE compta.t_comptes_c
SET
arbre_classe_3_id =
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_id
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_3_code =
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_code
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_3_texte =
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_texte
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
WHERE arbre_classe_1_code <> compte_general_numero AND arbre_classe_2_code <> compte_general_numero
AND (
arbre_classe_3_id IS DISTINCT FROM
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_id
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_3_code IS DISTINCT FROM
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_code
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_3_texte IS DISTINCT FROM
CASE
WHEN classe_3_texte <> '' AND arbre_classe_1_code <> classe_3_code AND arbre_classe_2_code <> classe_3_code THEN classe_3_texte
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
);
UPDATE compta.t_comptes_c
SET
arbre_classe_4_id =
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_4_code =
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_4_texte =
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
WHERE arbre_classe_1_code <> compte_general_numero AND arbre_classe_2_code <> compte_general_numero AND arbre_classe_3_code <> compte_general_numero
AND (
arbre_classe_4_id IS DISTINCT FROM
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_id
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_4_code IS DISTINCT FROM
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_code
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_4_texte IS DISTINCT FROM
CASE
WHEN classe_4_texte <> '' AND arbre_classe_1_code <> classe_4_code AND arbre_classe_2_code <> classe_4_code AND arbre_classe_3_code <> classe_4_code THEN classe_4_texte
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
);
UPDATE compta.t_comptes_c
SET
arbre_classe_5_id =
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_5_code =
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_5_texte =
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
WHERE arbre_classe_1_code <> compte_general_numero AND arbre_classe_2_code <> compte_general_numero AND
arbre_classe_3_code <> compte_general_numero AND arbre_classe_4_code <> compte_general_numero AND
(
arbre_classe_5_id IS DISTINCT FROM
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_id
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_5_code IS DISTINCT FROM
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_code
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_5_texte IS DISTINCT FROM
CASE
WHEN classe_5_texte <> '' AND arbre_classe_1_code <> classe_5_code AND arbre_classe_2_code <> classe_5_code AND arbre_classe_3_code <> classe_5_code AND arbre_classe_4_code <> classe_5_code THEN classe_5_texte
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
);
UPDATE compta.t_comptes_c
SET
arbre_classe_6_id =
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END,
arbre_classe_6_code =
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END,
arbre_classe_6_texte =
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
WHERE arbre_classe_1_code <> compte_general_numero AND arbre_classe_2_code <> compte_general_numero AND arbre_classe_3_code <> compte_general_numero AND
arbre_classe_4_code <> compte_general_numero AND arbre_classe_5_code <> compte_general_numero AND
(
arbre_classe_6_id IS DISTINCT FROM
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_id
ELSE compte_general_id
END OR
arbre_classe_6_code IS DISTINCT FROM
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_code
ELSE compte_general_numero
END OR
arbre_classe_6_texte IS DISTINCT FROM
CASE
WHEN classe_6_texte <> '' AND arbre_classe_1_code <> classe_6_code AND arbre_classe_2_code <> classe_6_code AND arbre_classe_3_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code AND arbre_classe_4_code <> classe_6_code THEN classe_6_texte
ELSE compte_general_texte
END
);
UPDATE compta.t_comptes_c
SET
arbre_classe_7_id = compte_general_id,
arbre_classe_7_code = compte_general_numero,
arbre_classe_7_texte = compte_general_texte
WHERE arbre_classe_1_code <> numero
AND arbre_classe_2_code <> compte_general_numero
AND arbre_classe_3_code <> compte_general_numero
AND arbre_classe_4_code <> compte_general_numero
AND arbre_classe_5_code <> compte_general_numero
AND arbre_classe_6_code <> compte_general_numero
AND (
arbre_classe_7_id IS DISTINCT FROM compte_general_id OR
arbre_classe_7_code IS DISTINCT FROM compte_general_numero OR
arbre_classe_7_texte IS DISTINCT FROM compte_general_texte
);
-- Synchronisation entre les tables t_comptes_c et t_comptes cf. intégrité des tables
DELETE
FROM compta.t_comptes_c
WHERE oid NOT IN (
SELECT oid
FROM compta.t_comptes
);
RETURN 'OK';
END;