= 200801 AND ajustement = '0' AND is_budget IS DISTINCT FROM '1' GROUP BY 1,2 ORDER BY 1,2; -- Ecritures prestataire DROP TABLE IF EXISTS w_ECRITUREC; CREATE TEMP TABLE w_ECRITUREC AS SELECT date_part('year',JM_DATE) * 100 + date_part('month',JM_DATE) AS mois_comptable, COALESCE(w_COMPTET.CGCT_NUM,F_ECRITUREC.CG_NUM) AS CG_NUM, date_part('year',JM_DATE) AS exercice_comptable, date(JM_DATE) AS JM_DATE, Count(*) AS COUNT, round(SUM(CASE WHEN EC_SENS <> 1 THEN EC_MONTANT ELSE 0 END),2) AS EC_MONTANT_debit, round(SUM(CASE WHEN EC_SENS = 1 THEN EC_MONTANT ELSE 0 END),2) AS EC_MONTANT_credit FROM prod_sagei7compta.F_ECRITUREC LEFT JOIN w_COMPTET ON F_ECRITUREC.CG_NUM = w_COMPTET.CG_NUM AND F_ECRITUREC.CT_NUM = w_COMPTET.CT_NUM AND F_ECRITUREC.CT_NUM <> '' GROUP BY 1,2,3,4 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_mois_modifies; CREATE TEMP TABLE w_mois_modifies AS SELECT w_ECRITUREC.exercice_comptable, w_ECRITUREC.mois_comptable, JM_DATE FROM w_ECRITUREC LEFT JOIN w_historique_ecritures_total ON w_historique_ecritures_total.mois_comptable = w_ECRITUREC.mois_comptable AND w_historique_ecritures_total.numero = w_ECRITUREC.CG_NUM GROUP BY 1,2,3 HAVING MAX(CASE WHEN w_historique_ecritures_total.count IS DISTINCT FROM w_ECRITUREC.count OR w_historique_ecritures_total.debit IS DISTINCT FROM w_ECRITUREC.EC_MONTANT_debit OR w_historique_ecritures_total.credit IS DISTINCT FROM w_ECRITUREC.EC_MONTANT_credit THEN 1 ELSE 0 END) = 1; ALTER TABLE w_mois_modifies ADD CONSTRAINT w_mois_modifies_pk PRIMARY KEY(mois_comptable); CTISELECT_PROPERTY_READ 'MOISMODIFIES', COALESCE(base.cti_group_concat(mois_comptable),'0') FROM w_mois_modifies; echo Mois modifiés : [MOISMODIFIES]; ]]> = '20000101' THEN F_ECRITUREC.EC_ECHEANCE ELSE '20991231' END AS date_echeance, 0::bigint AS journal_paiement_id, 0::bigint AS mode_paiement_id, ''::text AS numero_cheque, round(CASE WHEN EC_SENS = 1 THEN CASE WHEN CA_Num IS NULL THEN EC_MONTANT ELSE EA_Montant END ELSE 0 END,2) AS montant_credit, round(CASE WHEN EC_SENS <> 1 THEN CASE WHEN CA_Num IS NULL THEN EC_MONTANT ELSE EA_Montant END ELSE 0 END,2) AS montant_debit FROM prod_sagei7compta.F_ECRITUREC JOIN compta.t_divers ON t_divers.code = 'SAGEI7_ANA1' LEFT JOIN prod_sagei7compta.F_ECRITUREA ON F_ECRITUREC.EC_No = F_ECRITUREA.EC_No AND F_ECRITUREA.N_ANALYTIQUE::text = t_divers.valeur -- todo gérer plusieurs nivo JOIN w_mois_modifies ON date(F_ECRITUREC.JM_DATE) = w_mois_modifies.JM_DATE JOIN compta.t_sites ON t_sites.oid::text = ANY(string_to_array('[SITES]'::text, ',')) OR '[SITES]' = '1' JOIN compta.t_journaux ON JO_NUM = t_journaux.code_original JOIN compta.t_comptes ON CG_NUM = t_comptes.numero LEFT JOIN w_COMPTET ON F_ECRITUREC.CG_NUM = w_COMPTET.CG_NUM AND F_ECRITUREC.CT_NUM = w_COMPTET.CT_NUM AND F_ECRITUREC.CT_NUM <> '' LEFT JOIN compta.t_comptes t_comptes_contre ON CG_NUMCONT = t_comptes_contre.numero LEFT JOIN compta.t_sections_analytiques ON CA_NUM = t_sections_analytiques.code_original ORDER BY F_ECRITUREC.EC_NO ; SELECT base.cti_enable_index('compta', 'i_historique_ecritures_1'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_2'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_3'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_4'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_5'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_6'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_7'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_8'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_9'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_10'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_11'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_12'); SELECT base.cti_enable_index('compta', 'i_historique_ecritures_13'); ]]> 'C' AND site_id IN (SELECT oid FROM compta.t_sites WHERE clinique_honoraire <> 'H'); UPDATE compta.p_historique_ecritures SET clinique_honoraire = 'H' FROM compta.t_sites WHERE p_historique_ecritures.site_id = t_sites.oid AND p_historique_ecritures.clinique_honoraire <> 'H' AND site_id IN (SELECT oid FROM compta.t_sites WHERE clinique_honoraire = 'H'); UPDATE compta.p_historique_ecritures SET compte_id = t_comptes.compte_general_id FROM compta.t_comptes WHERE comptabilisee <> '1' AND compte_id = t_comptes.oid AND t_comptes.oid <> t_comptes.compte_general_id AND compte_id = compte_extra_id; -- Précision cli/hon (cli prioritaire) UPDATE compta.t_comptes SET clinique_honoraire = subview.clinique_honoraire FROM ( SELECT compte_id AS compte_id, MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire FROM compta.p_historique_ecritures JOIN compta.t_comptes ON compte_id = t_comptes.oid GROUP BY 1 ) subview WHERE t_comptes.oid = subview.compte_id AND t_comptes.clinique_honoraire <> subview.clinique_honoraire; UPDATE compta.t_comptes SET clinique_honoraire = subview.clinique_honoraire FROM ( SELECT t_comptes.oid AS compte_id, t_comptes.numero, MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire FROM compta.p_historique_ecritures JOIN compta.t_comptes ON compte_extra_id = t_comptes.oid GROUP BY 1,2 ) subview WHERE t_comptes.oid = subview.compte_id AND t_comptes.clinique_honoraire <> subview.clinique_honoraire; UPDATE compta.t_journaux SET clinique_honoraire = subview.clinique_honoraire FROM ( SELECT journal_id, MIN(CASE WHEN p_historique_ecritures.clinique_honoraire = 'H' THEN 'H' ELSE 'C' END) AS clinique_honoraire FROM compta.p_historique_ecritures GROUP BY 1 ) subview WHERE t_journaux.oid = subview.journal_id AND t_journaux.clinique_honoraire <> subview.clinique_honoraire; ]]> = 2015 AND t_comptes_c_extra.type_compta_code='401' ; TRUNCATE compta.p_ecriture_fournisseur; INSERT INTO compta.p_ecriture_fournisseur ( compte_id, date_ecriture, mois_comptable, montant_credit, montant_debit, journal_id, section_analytique_id, clinique_honoraire, exercice_comptable, type_compta_id, compte_extra_id, comptabilisee, fin_exercice, ajustement, cle_originale, compte_contrepartie_id, texte, date_facture_fournisseur, piece, dossier, date_echeance, journal_paiement_id, mode_paiement_id, numero_cheque, site_id, partenaire_id, inter_site, identifiant_operation, ecriture_consolidee, facture_soldee, ecriture_exclue ) SELECT compte_id, date_ecriture, mois_comptable, montant_credit, montant_debit, journal_id, section_analytique_id, p_historique_ecritures.clinique_honoraire, exercice_comptable, p_historique_ecritures.type_compta_id, compte_extra_id, comptabilisee, fin_exercice, ajustement, cle_originale, compte_contrepartie_id, p_historique_ecritures.texte, date_facture_fournisseur, piece, dossier, date_echeance, journal_paiement_id, mode_paiement_id, numero_cheque, site_id, partenaire_id, inter_site, identifiant_operation, ecriture_consolidee, '0'::text AS facture_soldee, '0'::text AS ecriture_exclue FROM compta.p_historique_ecritures JOIN w_exercice_fournisseur ON exercice_comptable >= exercice_comptable_fournisseur JOIN compta.t_comptes_c t_comptes_c_extra ON p_historique_ecritures.compte_extra_id = t_comptes_c_extra.oid AND t_comptes_c_extra.type_compta_code='401' ; UPDATE compta.p_ecriture_fournisseur SET facture_soldee = '1' FROM ( SELECT compte_extra_id FROM compta.p_ecriture_fournisseur GROUP BY 1 HAVING SUM(montant_credit) = SUM(montant_debit) ) subview WHERE compta.p_ecriture_fournisseur.compte_extra_id = subview.compte_extra_id ; UPDATE compta.p_ecriture_fournisseur SET facture_soldee = '1' FROM ( SELECT compte_extra_id, dossier FROM compta.p_ecriture_fournisseur WHERE facture_soldee = '0' GROUP BY 1,2 HAVING SUM(montant_credit) = SUM(montant_debit) ) subview WHERE compta.p_ecriture_fournisseur.compte_extra_id = subview.compte_extra_id AND compta.p_ecriture_fournisseur.dossier = subview.dossier AND facture_soldee = '0' ; UPDATE compta.p_ecriture_fournisseur SET facture_soldee = '1' FROM ( SELECT compte_extra_id, dossier, journal_id FROM compta.p_ecriture_fournisseur WHERE facture_soldee = '0' GROUP BY 1,2,3 HAVING SUM(montant_credit) = SUM(montant_debit) ) subview WHERE compta.p_ecriture_fournisseur.compte_extra_id = subview.compte_extra_id AND compta.p_ecriture_fournisseur.dossier = subview.dossier AND compta.p_ecriture_fournisseur.journal_id = subview.journal_id AND compta.p_ecriture_fournisseur.facture_soldee = '0' ; UPDATE compta.p_ecriture_fournisseur SET facture_soldee = '1' FROM ( SELECT compte_extra_id, journal_id FROM compta.p_ecriture_fournisseur WHERE facture_soldee = '0' GROUP BY 1,2 HAVING SUM(montant_credit) = SUM(montant_debit) ) subview WHERE compta.p_ecriture_fournisseur.compte_extra_id = subview.compte_extra_id AND compta.p_ecriture_fournisseur.journal_id = subview.journal_id AND compta.p_ecriture_fournisseur.facture_soldee = '0' ; UPDATE compta.p_ecriture_fournisseur SET facture_soldee = '1' FROM ( SELECT compte_extra_id, dossier, journal_id FROM compta.p_ecriture_fournisseur WHERE facture_soldee = '0' GROUP BY 1,2,3 HAVING SUM(montant_credit) = SUM(montant_debit) ) subview WHERE compta.p_ecriture_fournisseur.compte_extra_id = subview.compte_extra_id AND compta.p_ecriture_fournisseur.journal_id = subview.journal_id AND compta.p_ecriture_fournisseur.facture_soldee = '0' ; UPDATE compta.p_ecriture_fournisseur SET ecriture_exclue = '1' WHERE facture_soldee = '0' AND date_echeance = '20991231' ; UPDATE compta.p_ecriture_fournisseur SET ecriture_exclue = '1' WHERE facture_soldee = '0' AND date_echeance < date(date_trunc('month',now())) ; ]]> 1 THEN EC_MONTANT ELSE 0 END),2) AS EC_MONTANT_debit, round(SUM(CASE WHEN EC_SENS = 1 THEN EC_MONTANT ELSE 0 END),2) AS EC_MONTANT_credit FROM prod_sagei7compta.F_ECRITUREC JOIN w_mois_modifies ON date(F_ECRITUREC.JM_DATE) = w_mois_modifies.JM_DATE JOIN compta.t_sites ON t_sites.oid::text = ANY(string_to_array('[SITES]'::text, ',')) OR '[SITES]' = '1' GROUP BY 1,2,3; ]]> '' AND T_VAL01T_COMPTE IN (SELECT CG_NUM FROM prod_sagei7compta.F_ECRITUREC) AND rtrim(T_VAL01T_COMPTE, '0') NOT IN (SELECT code_original FROM compta.t_types_compta WHERE code_original IS NOT NULL); INSERT INTO compta.t_sections_analytiques(oid, code, code_original, texte) SELECT 0, '0000', '', 'Non renseignée' WHERE 0 NOT IN (SELECT oid FROM compta.t_sections_analytiques); INSERT INTO compta.t_sections_analytiques(code_original, code, texte) SELECT CA_NUM, CA_NUM, MAX(CA_INTITULE) FROM prod_sagei7compta.F_COMPTEA JOIN compta.t_divers ON t_divers.code = 'SAGEI7_ANA1' WHERE 1=1 AND N_ANALYTIQUE::text = t_divers.valeur AND CA_NUM NOT IN (SELECT code_original FROM compta.t_sections_analytiques WHERE code_original IS NOT NULL) GROUP BY 1,2 ; UPDATE compta.t_sections_analytiques SET texte = subview.CA_INTITULE FROM ( SELECT CA_NUM, MAX(CA_INTITULE) AS CA_INTITULE FROM prod_sagei7compta.F_COMPTEA JOIN compta.t_divers ON t_divers.code = 'SAGEI7_ANA1' WHERE N_ANALYTIQUE::text = t_divers.valeur GROUP BY 1 ) subview WHERE code_original = CA_NUM AND texte IS DISTINCT FROM CA_INTITULE ; INSERT INTO compta.t_sections_analytiques(code_original, code, texte) SELECT CA_NUM, CA_NUM, CA_NUM FROM prod_sagei7compta.F_ECRITUREA WHERE 1=1 AND CA_NUM NOT IN (SELECT code_original FROM compta.t_sections_analytiques WHERE code_original IS NOT NULL) GROUP BY 1,2,3 ; INSERT INTO compta.t_partenaires(oid, code, code_original, texte, texte_court) SELECT 0, chr(127) || '***', '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECT oid FROM compta.t_partenaires); -- Journaux INSERT INTO compta.t_journaux(code_original, code, texte, a_nouveaux, clinique_honoraire) SELECT JO_NUM, JO_NUM, JO_INTITULE, '0', 'C' FROM prod_sagei7compta.F_JOURNAUX WHERE JO_NUM NOT IN (SELECT code_original FROM compta.t_journaux WHERE code_original IS NOT NULL) AND JO_NUM IN (SELECT JO_NUM FROM prod_sagei7compta.F_ECRITUREC) ORDER BY 1; -- Classes de comptes -- Comptes UPDATE compta.t_comptes SET type_compta_id = subview.type_compta_id, texte = subview.texte FROM ( SELECT COALESCE(t_types_compta.oid,0) AS type_compta_id, F_COMPTEG.CG_NUM AS numero, MAX(CG_INTITULE) AS texte FROM prod_sagei7compta.F_COMPTEG LEFT JOIN compta.t_types_compta ON CASE WHEN F_COMPTEG.CG_NUM LIKE '6%' OR F_COMPTEG.CG_NUM LIKE '7%' THEN 'GES' WHEN F_COMPTEG.CG_NUM LIKE '8%' THEN 'SPE' ELSE 'BIL' END = t_types_compta.code_original GROUP BY 1,2 ) subview WHERE t_comptes.numero = subview.numero AND ( t_comptes.type_compta_id IS DISTINCT FROM subview.type_compta_id OR t_comptes.texte IS DISTINCT FROM subview.texte ); INSERT INTO compta.t_comptes( type_compta_id, numero, texte, compte_general_id, clinique_honoraire, banque, collectif, type_compta_extra_id, numero_extra, partenaire_id) SELECT COALESCE(t_types_compta.oid,0) AS type_compta_id, F_COMPTEG.CG_NUM AS numero, MAX(CG_INTITULE) AS texte, 0 AS compte_general_id, 'C' AS clinique_honoraire, MAX(CASE WHEN F_COMPTEG.CG_NUM LIKE '512%' THEN '1' ELSE '0' END) AS banque, '0' AS collectif, 0 AS type_compta_extra_id, '' AS numero_extra, 0::bigint AS partenaire_id FROM prod_sagei7compta.F_COMPTEG LEFT JOIN compta.t_types_compta ON CASE WHEN F_COMPTEG.CG_NUM LIKE '6%' OR F_COMPTEG.CG_NUM LIKE '7%' THEN 'GES' WHEN F_COMPTEG.CG_NUM LIKE '8%' THEN 'SPE' ELSE 'BIL' END = t_types_compta.code_original WHERE F_COMPTEG.CG_NUM NOT IN (SELECT numero FROM compta.t_comptes WHERE numero IS NOT NULL) AND ( F_COMPTEG.CG_NUM IN (SELECT CG_NUM FROM prod_sagei7compta.F_ECRITUREC) OR F_COMPTEG.CG_NUM IN (SELECT CG_NUMCONT FROM prod_sagei7compta.F_ECRITUREC) ) GROUP BY 1,2 ORDER BY 2; -- Partenaires INSERT INTO compta.t_partenaires(code_original, code, texte, texte_court) SELECT CT_NUM, CT_NUM, CT_INTITULE, substr(CT_INTITULE, 1, 50) FROM prod_sagei7compta.F_COMPTET WHERE CT_NUM IN (SELECT CT_NUM FROM prod_sagei7compta.F_ECRITUREC) AND CT_NUM NOT IN (SELECT code_original FROM compta.t_partenaires WHERE code_original IS NOT NULL) GROUP BY 1,2,3,4; UPDATE compta.t_partenaires SET texte = CT_INTITULE, texte_court = substr(CT_INTITULE, 1, 50) FROM prod_sagei7compta.F_COMPTET WHERE CT_NUM = code_original AND ( t_partenaires.texte IS DISTINCT FROM CT_INTITULE OR t_partenaires.texte_court IS DISTINCT FROM CT_INTITULE ); -- Comptes auxiliaires DROP TABLE IF EXISTS w_COMPTET; CREATE TEMP TABLE w_COMPTET AS SELECT F_ECRITUREC.CT_NUM, F_ECRITUREC.CG_NUM, F_ECRITUREC.CG_NUM || '.' || F_ECRITUREC.CT_NUM AS CGCT_NUM, CT_INTITULE, max(t_types_compta.oid) AS type_auxiliaire_id, 0::bigint AS compte_auxiliaire_id, 0::bigint AS partenaire_id FROM prod_sagei7compta.F_ECRITUREC JOIN prod_sagei7compta.F_COMPTEG ON F_COMPTEG.CG_NUM = F_ECRITUREC.CG_NUM JOIN prod_sagei7compta.F_COMPTET ON F_COMPTET.CT_NUM = F_ECRITUREC.CT_NUM JOIN compta.t_types_compta ON F_COMPTEG.CG_NUM LIKE (t_types_compta.code_original || '%') WHERE F_ECRITUREC.CT_NUM <> '' GROUP BY 1,2,3,4 ORDER BY 3; UPDATE w_COMPTET SET partenaire_id = t_partenaires.oid FROM compta.t_partenaires WHERE CT_NUM = t_partenaires.code_original; UPDATE compta.t_comptes SET texte = subview.texte, compte_general_id = subview.compte_general_id, partenaire_id = subview.partenaire_id FROM ( SELECT type_auxiliaire_id AS type_compta_id, CGCT_NUM AS numero, MAX(CT_INTITULE) AS texte, MAX(COALESCE(t_comptes.oid,0)) AS compte_general_id, MAX(w_COMPTET.partenaire_id) AS partenaire_id FROM w_COMPTET LEFT JOIN compta.t_comptes ON CG_NUM = t_comptes.numero GROUP BY 1,2 ) subview WHERE t_comptes.numero = subview.numero AND ( t_comptes.texte IS DISTINCT FROM subview.texte OR t_comptes.compte_general_id IS DISTINCT FROM subview.compte_general_id OR t_comptes.partenaire_id IS DISTINCT FROM subview.partenaire_id ); INSERT INTO compta.t_comptes( type_compta_id, numero, texte, compte_general_id, clinique_honoraire, banque, collectif, type_compta_extra_id, numero_extra, partenaire_id) SELECT type_auxiliaire_id AS type_compta_id, CGCT_NUM AS numero, MAX(CT_INTITULE) AS texte, MAX(COALESCE(t_comptes.oid,0)) AS compte_general_id, 'C' AS clinique_honoraire, '0' AS banque, '0' AS collectif, 0 AS type_compta_extra_id, '' AS numero_extra, MAX(w_COMPTET.partenaire_id) AS partenaire_id FROM w_COMPTET LEFT JOIN compta.t_comptes ON CG_NUM = t_comptes.numero WHERE CGCT_NUM NOT IN (SELECT numero FROM compta.t_comptes WHERE numero IS NOT NULL) GROUP BY 1,2 ORDER BY 2; UPDATE w_COMPTET SET compte_auxiliaire_id = t_comptes.oid FROM compta.t_comptes WHERE w_COMPTET.CGCT_NUM = t_comptes.numero; UPDATE compta.t_comptes SET compte_general_id = oid WHERE compte_general_id = 0 OR compte_general_id IS NULL; ]]>