'' GROUP BY 1 ; -- UCD INSERT INTO base.t_ucd( code, texte, texte_court, laboratoire_texte, conditionnement_texte, atc_code, atc_texte, ephmra_code, ephmra_texte, prestation_defaut_id) SELECT UCD, MAX(LIBUCD), '', '', '', '', '', '', '', 0 FROM w_ARP08 WHERE UCD <> '' AND UCD NOT IN (SELECT code FROM base.t_ucd) GROUP BY 1; -- LPP INSERT INTO base.t_lpp( code, texte, texte_court) SELECT ARCIA1, MAX(ARLI80), MAX(ARLI80) FROM prod_shs.[ECOLIB]_ARP03 WHERE ARCIA1 <> '' AND ARCIA1 NOT IN (SELECT code FROM base.t_lpp) GROUP BY 1; -- Lettres budgetaires INSERT INTO eco.t_lettre_budgetaire(code, texte, texte_court, code_original) SELECT BCLBUD, BCLBUD, BCLBUD, BCLBUD FROM prod_shs.[ECOLIB]_BCP01 WHERE BCLBUD NOT IN (SELECT code_original FROM eco.t_lettre_budgetaire) GROUP BY 1 ORDER BY 1; -- comptes INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8, BCLI50, BCLI50, BCIUBC FROM prod_shs.[ECOLIB]_BCP01 WHERE BCIUBC IN (SELECT ARIUBC FROM prod_shs.[ECOLIB]_ARP01) AND BCIUBC NOT IN (SELECT code_original FROM eco.t_compte) ORDER BY 1; INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8, BCLI50, BCLI50, BCIUBC FROM prod_shs.[ECOLIB]_BCP01 WHERE BCIUBC IN (SELECT FVIUBC FROM prod_shs.[ECOLIB]_FVP01) AND BCIUBC NOT IN (SELECT code_original FROM eco.t_compte) ORDER BY 1; INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8, BCLI50, BCLI50, BCIUBC FROM prod_shs.[ECOLIB]_BCP01 WHERE BCIUBC IN ( SELECT BCIDV1 FROM prod_shs.[ECOLIB]_BCP01 JOIN eco.t_compte ON BCIUBC = t_compte.code_original ) AND BCIUBC NOT IN (SELECT code_original FROM eco.t_compte) ORDER BY 1; INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8, BCLI50, BCLI50, BCIUBC FROM prod_shs.[ECOLIB]_BCP01 WHERE BCIUBC IN ( SELECT BCIDR1 FROM prod_shs.[ECOLIB]_BCP01 JOIN eco.t_compte ON BCIUBC = t_compte.code_original ) AND BCIUBC NOT IN (SELECT code_original FROM eco.t_compte) ORDER BY 1; UPDATE eco.t_compte SET texte = BCLI50, texte_court = BCLI50 FROM prod_shs.[ECOLIB]_BCP01 WHERE BCIUBC = t_compte.code_original AND ( t_compte.texte IS DISTINCT FROM BCLI50 OR t_compte.texte_court IS DISTINCT FROM BCLI50 ); -- Lettres budgétaires (classes) DROP TABLE IF EXISTS w_BCP01_classes; CREATE TEMP TABLE w_BCP01_classes AS SELECT count(DISTINCT CASE WHEN BCLBUD <> '' THEN BCLBUD ELSE NULL END) AS CTI_CPTLETBUD, count(DISTINCT CASE WHEN BCIDV1 <> '' THEN BCIDV1 ELSE NULL END) AS CTI_CPTVOTE, count(DISTINCT CASE WHEN BCIDR1 <> '' THEN BCIDR1 ELSE NULL END) AS CTI_CPTRCV FROM prod_shs.[ECOLIB]_BCP01; INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_CPTLETBUD', 'Lettres budgétaires', t_listes_tables.oid, '0', 6 FROM w_BCP01_classes, eco.t_listes_tables WHERE CTI_CPTLETBUD > 1 AND t_listes_tables.code = 'CPT' AND 6 NOT IN (SELECT sequence FROM eco.t_classes JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT' WHERE t_classes.sequence = 6; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT BCLBUD, BCLBUD, current_classe_id FROM w_classes , prod_shs.[ECOLIB]_BCP01 JOIN eco.t_compte ON BCIUBC = t_compte.code_original WHERE BCLBUD NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,2,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_BCP01 ON BCLBUD = t_classes_sections.code JOIN eco.t_compte ON code_original = BCIUBC JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Comptes de vote (classes) INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_CPTVOTE', 'Compte de vote', t_listes_tables.oid, '0', 7 FROM w_BCP01_classes, eco.t_listes_tables WHERE CTI_CPTVOTE > 1 AND t_listes_tables.code = 'CPT' AND 7 NOT IN (SELECT sequence FROM eco.t_classes JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT' WHERE t_classes.sequence = 7; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT trim(BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) , MAX(BCP01_2.BCLI50), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_BCP01 BCP01 JOIN eco.t_compte ON BCIUBC = t_compte.code_original JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON BCP01.BCIDV1 = BCP01_2.BCIUBC WHERE (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) = t_classes_sections.code JOIN prod_shs.[ECOLIB]_BCP01 BCP01 ON BCP01.BCIDV1 = BCP01_2.BCIUBC JOIN eco.t_compte ON code_original = BCP01.BCIUBC JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Comptes receveur (classes) INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_CPTRCV', 'Compte receveur', t_listes_tables.oid, '0', 8 FROM w_BCP01_classes, eco.t_listes_tables WHERE CTI_CPTRCV > 1 AND t_listes_tables.code = 'CPT' AND 8 NOT IN (SELECT sequence FROM eco.t_classes JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT' WHERE t_classes.sequence = 8; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT trim(BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) , MAX(BCP01_2.BCLI50), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_BCP01 BCP01 JOIN eco.t_compte ON BCIUBC = t_compte.code_original JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON BCP01.BCIDR1 = BCP01_2.BCIUBC WHERE (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) = t_classes_sections.code JOIN prod_shs.[ECOLIB]_BCP01 BCP01 ON BCP01.BCIDR1 = BCP01_2.BCIUBC JOIN eco.t_compte ON code_original = BCP01.BCIUBC JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Familles d'articles INSERT INTO eco.t_familles_articles(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_familles_articles ON (code_original = THCODE) WHERE THCENR = 'FS1' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_familles_articles SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR = 'FS1' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Sous familles INSERT INTO eco.t_sous_familles_articles(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_sous_familles_articles ON (code_original = THCODE) WHERE THCENR = 'FS2' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_sous_familles_articles SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR = 'FS2' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court ) SELECT UWCATC, UWCATC, MAX(UWLIBE), MAX(UWLIBE) FROM prod_shs.[ECOLIB]_UWA01 LEFT JOIN eco.t_classification_atc ON (code_original = UWCATC) WHERE code_original IS NULL GROUP BY 1 ORDER BY 1; UPDATE eco.t_classification_atc SET texte = UWLIBE, texte_court = UWLIBE FROM prod_shs.[ECOLIB]_UWA01 WHERE code_original = UWCATC AND (texte IS DISTINCT FROM UWLIBE OR texte_court IS DISTINCT FROM UWLIBE); INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court ) SELECT UWCATC, UWCATC, MAX(UWLIBE), MAX(UWLIBE) FROM prod_shs.[ECOLIB]_UWA03 LEFT JOIN eco.t_classification_atc ON (code_original = UWCATC) WHERE code_original IS NULL GROUP BY 1 ORDER BY 1; -- Standard ATC SELECT eco.cti_reorganize_classification_atc(); -- unités INSERT INTO eco.t_unites(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_unites ON (code_original = THCODE) WHERE THCENR IN ( 'UDI', 'UST') AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_unites SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR IN ( 'UDI', 'UST') AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Types articles INSERT INTO eco.t_types_articles(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_types_articles ON (code_original = THCODE) WHERE THCENR = 'TAG' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_types_articles SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR = 'TAG' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Catégories INSERT INTO eco.t_categories_articles(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_categories_articles ON (code_original = THCODE) WHERE THCENR = 'CAT' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_categories_articles SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR = 'CAT' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Sous catégories INSERT INTO eco.t_sous_categories_articles(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_sous_categories_articles ON (code_original = THCODE) WHERE THCENR = 'SCA' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_sous_categories_articles SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR = 'SCA' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Lieux INSERT INTO eco.t_lieux(code, texte, texte_court, code_original) SELECT ZLLIEU, ZLNLIE, ZLNLIE, ZLLIEU FROM prod_shs.[ECOLIB]_ZLP01 LEFT JOIN eco.t_lieux ON (code_original = ZLLIEU) WHERE code_original IS NULL; UPDATE eco.t_lieux SET texte = ZLNLIE, texte_court = ZLNLIE FROM prod_shs.[ECOLIB]_ZLP01 WHERE code_original = ZLLIEU AND (texte IS DISTINCT FROM ZLNLIE OR texte_court IS DISTINCT FROM ZLNLIE); INSERT INTO eco.t_lieux(code, texte, texte_court, code_original) SELECT ZYLIEU, ZYNLIE, ZYNLIE, ZYLIEU FROM prod_shs.[ECOLIB]_ZYP01 LEFT JOIN eco.t_lieux ON (code_original = ZYLIEU) WHERE code_original IS NULL; -- Articles INSERT INTO eco.t_articles(code, texte, texte_court, code_original) SELECT DISTINCT ARARTI, ARLI40, ARLI15, ARIUAR FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN eco.t_articles ON (code_original = ARIUAR) WHERE code_original IS NULL; UPDATE eco.t_articles SET code = ARARTI, texte = ARLI40, texte_court = ARLI15 FROM prod_shs.[ECOLIB]_ARP01 WHERE code_original = ARIUAR AND (code IS DISTINCT FROM ARARTI OR texte IS DISTINCT FROM ARLI40 OR texte_court IS DISTINCT FROM ARLI15); UPDATE eco.t_articles SET type_id = COALESCE(t_types_articles.oid,0), famille_id = COALESCE(t_familles_articles.oid,0), sous_famille_id = COALESCE(t_sous_familles_articles.oid,0), categorie_id = COALESCE(t_categories_articles.oid,0), sous_categorie_id = COALESCE(t_sous_categories_articles.oid,0), unite_stockage_id = COALESCE(t_unites_stockage.oid,0), unite_distribution_id = COALESCE(t_unites_distribution.oid,0) FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN eco.t_types_articles ON ARTYAG = t_types_articles.code_original LEFT JOIN eco.t_familles_articles ON ARKFS1 = t_familles_articles.code_original LEFT JOIN eco.t_sous_familles_articles ON ARKFS2 = t_sous_familles_articles.code_original LEFT JOIN eco.t_categories_articles ON ARKCAT = t_categories_articles.code_original LEFT JOIN eco.t_sous_categories_articles ON ARKSCA = t_sous_categories_articles.code_original LEFT JOIN eco.t_unites t_unites_stockage ON ARKUST = t_unites_stockage.code_original LEFT JOIN eco.t_unites t_unites_distribution ON ARKUST = t_unites_distribution.code_original WHERE t_articles.code_original = ARIUAR AND (t_articles.type_id IS DISTINCT FROM COALESCE(t_types_articles.oid,0) OR t_articles.famille_id IS DISTINCT FROM COALESCE(t_familles_articles.oid,0) OR t_articles.sous_famille_id IS DISTINCT FROM COALESCE(t_sous_familles_articles.oid,0) OR t_articles.categorie_id IS DISTINCT FROM COALESCE(t_categories_articles.oid,0) OR t_articles.sous_categorie_id IS DISTINCT FROM COALESCE(t_sous_categories_articles.oid,0) OR t_articles.unite_stockage_id IS DISTINCT FROM COALESCE(t_unites_stockage.oid,0) OR t_articles.unite_distribution_id IS DISTINCT FROM COALESCE(t_unites_distribution.oid,0) ); UPDATE eco.t_articles SET classification_atc_id = COALESCE(t_classification_atc.oid,0) FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN eco.t_classification_atc ON ARCATC = t_classification_atc.code WHERE t_articles.code_original = ARIUAR AND classification_atc_id IS DISTINCT FROM COALESCE(t_classification_atc.oid,0); UPDATE eco.t_articles SET classification_atc_id = 0 WHERE classification_atc_id IS NULL; UPDATE eco.t_articles SET compte_id = COALESCE(t_compte.oid,0) FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN eco.t_compte ON ARIUBC = t_compte.code_original WHERE t_articles.code_original = ARIUAR AND compte_id IS DISTINCT FROM COALESCE(t_compte.oid,0); UPDATE eco.t_articles SET compte_id = 0 WHERE compte_id IS NULL; UPDATE eco.t_articles SET taux_tva_en_cours = TZTXTV FROM prod_shs.[ECOLIB]_ARP01 JOIN prod_shs.[ECOLIB]_TZP01 ON ARCTVA = TZCTVA WHERE t_articles.code_original = ARIUAR AND taux_tva_en_cours IS DISTINCT FROM TZTXTV ; UPDATE eco.t_articles SET type_code = t_types_articles.code, type_texte = t_types_articles.texte_court, type_section_id = t_types_articles.section_id, type_section_code = t_types_articles.section_code, type_section_texte = t_types_articles.section_texte, famille_code = t_familles_articles.code, famille_texte = t_familles_articles.texte_court, famille_section_id = t_familles_articles.section_id, famille_section_code = t_familles_articles.section_code, famille_section_texte = t_familles_articles.section_texte, sous_famille_code = t_sous_familles_articles.code, sous_famille_texte = t_sous_familles_articles.texte_court, sous_famille_section_id = t_sous_familles_articles.section_id, sous_famille_section_code = t_sous_familles_articles.section_code, sous_famille_section_texte = t_sous_familles_articles.section_texte, categorie_code = t_categories_articles.code, categorie_texte = t_categories_articles.texte_court, categorie_section_id = t_categories_articles.section_id, categorie_section_code = t_categories_articles.section_code, categorie_section_texte = t_categories_articles.section_texte, sous_categorie_code = t_sous_categories_articles.code, sous_categorie_texte = t_sous_categories_articles.texte_court, sous_categorie_section_id = t_sous_categories_articles.section_id, sous_categorie_section_code = t_sous_categories_articles.section_code, sous_categorie_section_texte = t_sous_categories_articles.section_texte, classification_atc_code = t_classification_atc.code, classification_atc_texte = t_classification_atc.texte_court, classification_atc_section_id = t_classification_atc.section_id, classification_atc_section_code = t_classification_atc.section_code, classification_atc_section_texte = t_classification_atc.section_texte, classification_atc_1_id = t_classification_atc.classification_atc_1_id, classification_atc_1_code = t_classification_atc.classification_atc_1_code, classification_atc_1_texte = t_classification_atc.classification_atc_1_texte, classification_atc_2_id = t_classification_atc.classification_atc_2_id, classification_atc_2_code = t_classification_atc.classification_atc_2_code, classification_atc_2_texte = t_classification_atc.classification_atc_2_texte, classification_atc_3_id = t_classification_atc.classification_atc_3_id, classification_atc_3_code = t_classification_atc.classification_atc_3_code, classification_atc_3_texte = t_classification_atc.classification_atc_3_texte, classification_atc_4_id = t_classification_atc.classification_atc_4_id, classification_atc_4_code = t_classification_atc.classification_atc_4_code, classification_atc_4_texte = t_classification_atc.classification_atc_4_texte, unite_stockage_code = t_unites_stockage.code, unite_stockage_texte = t_unites_stockage.texte_court, unite_stockage_section_id = t_unites_stockage.section_id, unite_stockage_section_code = t_unites_stockage.section_code, unite_stockage_section_texte = t_unites_stockage.section_texte, unite_distribution_code = t_unites_distribution.code, unite_distribution_texte = t_unites_distribution.texte_court, unite_distribution_section_id = t_unites_distribution.section_id, unite_distribution_section_code = t_unites_distribution.section_code, unite_distribution_section_texte = t_unites_distribution.section_texte, compte_code = t_compte.code, compte_texte = t_compte.texte_court, compte_section_id = t_compte.section_id, compte_section_code = t_compte.section_code, compte_section_texte = t_compte.section_texte FROM eco.t_types_articles , eco.t_familles_articles, eco.t_sous_familles_articles, eco.t_categories_articles, eco.t_sous_categories_articles, eco.t_classification_atc, eco.t_unites t_unites_stockage, eco.t_unites t_unites_distribution, eco.t_compte WHERE type_id = t_types_articles.oid AND famille_id = t_familles_articles.oid AND sous_famille_id = t_sous_familles_articles.oid AND categorie_id = t_categories_articles.oid AND sous_categorie_id = t_sous_categories_articles.oid AND classification_atc_id = t_classification_atc.oid AND unite_stockage_id = t_unites_stockage.oid AND unite_distribution_id = t_unites_distribution.oid AND compte_id = t_compte.oid AND ( type_code IS DISTINCT FROM t_types_articles.code OR type_texte IS DISTINCT FROM t_types_articles.texte_court OR type_section_id IS DISTINCT FROM t_types_articles.section_id OR type_section_code IS DISTINCT FROM t_types_articles.section_code OR type_section_texte IS DISTINCT FROM t_types_articles.section_texte OR famille_code IS DISTINCT FROM t_familles_articles.code OR famille_texte IS DISTINCT FROM t_familles_articles.texte_court OR famille_section_id IS DISTINCT FROM t_familles_articles.section_id OR famille_section_code IS DISTINCT FROM t_familles_articles.section_code OR famille_section_texte IS DISTINCT FROM t_familles_articles.section_texte OR sous_famille_code IS DISTINCT FROM t_sous_familles_articles.code OR sous_famille_texte IS DISTINCT FROM t_sous_familles_articles.texte_court OR sous_famille_section_id IS DISTINCT FROM t_sous_familles_articles.section_id OR sous_famille_section_code IS DISTINCT FROM t_sous_familles_articles.section_code OR sous_famille_section_texte IS DISTINCT FROM t_sous_familles_articles.section_texte OR categorie_code IS DISTINCT FROM t_categories_articles.code OR categorie_texte IS DISTINCT FROM t_categories_articles.texte_court OR categorie_section_id IS DISTINCT FROM t_categories_articles.section_id OR categorie_section_code IS DISTINCT FROM t_categories_articles.section_code OR categorie_section_texte IS DISTINCT FROM t_categories_articles.section_texte OR sous_categorie_code IS DISTINCT FROM t_sous_categories_articles.code OR sous_categorie_texte IS DISTINCT FROM t_sous_categories_articles.texte_court OR sous_categorie_section_id IS DISTINCT FROM t_sous_categories_articles.section_id OR sous_categorie_section_code IS DISTINCT FROM t_sous_categories_articles.section_code OR sous_categorie_section_texte IS DISTINCT FROM t_sous_categories_articles.section_texte OR t_articles.classification_atc_code IS DISTINCT FROM t_classification_atc.code OR t_articles.classification_atc_texte IS DISTINCT FROM t_classification_atc.texte_court OR t_articles.classification_atc_section_id IS DISTINCT FROM t_classification_atc.section_id OR t_articles.classification_atc_section_code IS DISTINCT FROM t_classification_atc.section_code OR t_articles.classification_atc_section_texte IS DISTINCT FROM t_classification_atc.section_texte OR t_articles.classification_atc_1_id IS DISTINCT FROM t_classification_atc.classification_atc_1_id OR t_articles.classification_atc_1_code IS DISTINCT FROM t_classification_atc.classification_atc_1_code OR t_articles.classification_atc_1_texte IS DISTINCT FROM t_classification_atc.classification_atc_1_texte OR t_articles.classification_atc_2_id IS DISTINCT FROM t_classification_atc.classification_atc_2_id OR t_articles.classification_atc_2_code IS DISTINCT FROM t_classification_atc.classification_atc_2_code OR t_articles.classification_atc_2_texte IS DISTINCT FROM t_classification_atc.classification_atc_2_texte OR t_articles.classification_atc_3_id IS DISTINCT FROM t_classification_atc.classification_atc_3_id OR t_articles.classification_atc_3_code IS DISTINCT FROM t_classification_atc.classification_atc_3_code OR t_articles.classification_atc_3_texte IS DISTINCT FROM t_classification_atc.classification_atc_3_texte OR t_articles.classification_atc_4_id IS DISTINCT FROM t_classification_atc.classification_atc_4_id OR t_articles.classification_atc_4_code IS DISTINCT FROM t_classification_atc.classification_atc_4_code OR t_articles.classification_atc_4_texte IS DISTINCT FROM t_classification_atc.classification_atc_4_texte OR t_articles.unite_stockage_code IS DISTINCT FROM t_unites_stockage.code OR t_articles.unite_stockage_texte IS DISTINCT FROM t_unites_stockage.texte_court OR t_articles.unite_stockage_section_id IS DISTINCT FROM t_unites_stockage.section_id OR t_articles.unite_stockage_section_code IS DISTINCT FROM t_unites_stockage.section_code OR t_articles.unite_stockage_section_texte IS DISTINCT FROM t_unites_stockage.section_texte OR t_articles.unite_distribution_code IS DISTINCT FROM t_unites_distribution.code OR t_articles.unite_distribution_texte IS DISTINCT FROM t_unites_distribution.texte_court OR t_articles.unite_distribution_section_id IS DISTINCT FROM t_unites_distribution.section_id OR t_articles.unite_distribution_section_code IS DISTINCT FROM t_unites_distribution.section_code OR t_articles.unite_distribution_section_texte IS DISTINCT FROM t_unites_distribution.section_texte OR t_articles.compte_code IS DISTINCT FROM t_compte.code OR t_articles.compte_texte IS DISTINCT FROM t_compte.texte_court OR t_articles.compte_section_id IS DISTINCT FROM t_compte.section_id OR t_articles.compte_section_code IS DISTINCT FROM t_compte.section_code OR t_articles.compte_section_texte IS DISTINCT FROM t_compte.section_texte ); -- LPP UPDATE eco.t_articles SET lpp_id = subview.lpp_id FROM ( SELECT ARIUAR,(MAX(Array[ARDMEA,t_lpp.oid]))[2] AS lpp_id FROM prod_shs.[ECOLIB]_ARP06 ARP06 JOIN prod_shs.[ECOLIB]_ARP03 ARP03 ON ARIUA1 = ARIULP JOIN base.t_lpp ON t_lpp.code = substr(ARP03.ARCIA1,1,7) GROUP BY 1 ) subview WHERE t_articles.code_original = ARIUAR AND t_articles.lpp_id IS DISTINCT FROM subview.lpp_id; -- Référence article fournisseur DROP TABLE IF EXISTS w_articles; CREATE TEMP TABLE w_articles AS SELECT t_articles.oid AS article_id, t_articles.code AS article_code, base.cti_group_array3(COALESCE(fournisseur_id,0))::bigint[] AS ref_fournisseur_id, CASE WHEN count(*) < 50 THEN base.cti_group_array3(COALESCE(AFLIFA,''))::text[] ELSE base.cti_group_array3(COALESCE(substr(AFLIFA,20),''))::text[] END AS ref_fournisseur_texte, base.cti_group_array3(COALESCE(AFREFA,''))::text[] AS ref_fournisseur_code FROM eco.t_articles LEFT JOIN ( SELECT t_articles.oid AS article_id, t_fournisseurs.oid AS fournisseur_id, CASE WHEN AFLIFA <> '' THEN AFLIFA ELSE ARLI40 END || CASE WHEN AFREFA <> '' THEN ' (' || AFREFA || ')' ELSE '' END AS AFLIFA, AFREFA FROM prod_shs.[ECOLIB]_AFP01 JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR JOIN eco.t_articles ON AFIUAR = t_articles.code_original JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original WHERE AFIUAR <> '' ) subview ON subview.article_id = t_articles.oid GROUP BY 1,2 ORDER BY 1; UPDATE eco.t_articles SET ref_fournisseur_id = w_articles.ref_fournisseur_id, ref_fournisseur_code = w_articles.ref_fournisseur_code, ref_fournisseur_texte = w_articles.ref_fournisseur_texte FROM w_articles WHERE w_articles.article_id = t_articles.oid AND ( t_articles.ref_fournisseur_id IS DISTINCT FROM w_articles.ref_fournisseur_id OR t_articles.ref_fournisseur_code IS DISTINCT FROM w_articles.ref_fournisseur_code OR t_articles.ref_fournisseur_texte IS DISTINCT FROM w_articles.ref_fournisseur_texte ); INSERT INTO eco.t_article_fournisseur ( code_original, article_id, fournisseur_id, fournisseur_distributeur_id, code_reference_fournisseur, texte_reference_fournisseur, code_cip, code_cahpp, unite_approvisionnement_id, nombre_conditionnement_approvisionnement, prix_unitaire_en_cours ) SELECT AFIUAF, t_articles.oid AS article_id, t_fournisseurs.oid AS fournisseur_id, COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid) AS fournisseur_distributeur_id, AFREFA AS code_reference_fournisseur, AFLIFA AS texte_reference_fournisseur, AFCBAR, AFCAEX, COALESCE(t_unites.oid,0) AS unite_approvisionnement_id, AFUSUA AS nombre_conditionnement_approvisionnement, base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric) AS prix_unitaire_en_cours FROM prod_shs.[ECOLIB]_AFP01 JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR JOIN eco.t_articles ON AFIUAR = t_articles.code_original JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON AFIUF1 = t_fournisseurs_distributeur.code_original LEFT JOIN eco.t_unites ON AFKUAP = t_unites.code_original WHERE AFIUAR <> '' AND AFIUFN <> '' AND AFIUAF NOT IN (SELECT code_original FROM eco.t_article_fournisseur WHERE code_original <> '') ; UPDATE eco.t_article_fournisseur SET article_id = t_articles.oid, fournisseur_id = t_fournisseurs.oid, fournisseur_distributeur_id = COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid), code_reference_fournisseur = AFREFA, texte_reference_fournisseur = AFLIFA, code_cip = AFCBAR, code_cahpp = AFCAEX, unite_approvisionnement_id = COALESCE(t_unites.oid,0), nombre_conditionnement_approvisionnement = AFUSUA, prix_unitaire_en_cours = base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric) FROM prod_shs.[ECOLIB]_AFP01 JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR JOIN eco.t_articles ON AFIUAR = t_articles.code_original JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON AFIUF1 = t_fournisseurs_distributeur.code_original LEFT JOIN eco.t_unites ON AFKUAP = t_unites.code_original WHERE t_article_fournisseur.code_original = AFIUAF AND AFIUAR <> '' AND AFIUFN <> '' AND ( t_article_fournisseur.article_id IS DISTINCT FROM t_articles.oid OR t_article_fournisseur.fournisseur_id IS DISTINCT FROM t_fournisseurs.oid OR t_article_fournisseur.fournisseur_distributeur_id IS DISTINCT FROM COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid) OR t_article_fournisseur.code_reference_fournisseur IS DISTINCT FROM AFREFA OR t_article_fournisseur.texte_reference_fournisseur IS DISTINCT FROM AFLIFA OR t_article_fournisseur.code_cip IS DISTINCT FROM AFCBAR OR t_article_fournisseur.code_cahpp IS DISTINCT FROM AFCAEX OR t_article_fournisseur.unite_approvisionnement_id IS DISTINCT FROM COALESCE(t_unites.oid,0) OR t_article_fournisseur.nombre_conditionnement_approvisionnement IS DISTINCT FROM AFUSUA OR t_article_fournisseur.prix_unitaire_en_cours IS DISTINCT FROM base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric) ) ; -- géré en stock (a améliorer avec D dépot et P pret) UPDATE eco.t_articles SET gere_en_stock = CASE WHEN ARTARB IN('D','P') THEN 0 ELSE 1 END FROM prod_shs.[ECOLIB]_ARP01 WHERE code_original = ARIUAR; ]]> '' GROUP BY 1; UPDATE eco.t_types_fournisseurs SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP02GE WHERE THCENR IN ( 'TYF') AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); INSERT INTO eco.t_types_fournisseurs(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP01GE LEFT JOIN eco.t_types_fournisseurs ON (code_original = THCODE) WHERE THCENR = 'TYF' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_types_fournisseurs SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP01GE WHERE THCENR IN ( 'TYF') AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); -- Fournisseurs INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original, code_cahpp, siret) SELECT DISTINCT FNFOUR, FNNOMF, FNNOMF, FNIUFN, FNCBAR, FNNFIN FROM prod_shs.[ECOLIB]_FNP01 LEFT JOIN eco.t_fournisseurs ON (code_original = FNIUFN) WHERE code_original IS NULL; INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id) SELECT VLCPOS, MAX(VLNOMV), MAX(VLNOMV), MAX(t_departements.oid) FROM prod_shs.[ECOLIB]_FNP01 JOIN prod_shs.[ECOLIB]_VLP01GE ON FNIUVI = VLIUVI LEFT JOIN base.t_codes_postaux ON VLCPOS = t_codes_postaux.code JOIN base.t_departements ON CASE WHEN VLIPAY = '001' THEN substr(VLCPOS,1,2) else '99' END = t_departements.code WHERE t_codes_postaux.oid IS NULL GROUP BY 1 ; UPDATE eco.t_fournisseurs SET texte = FNNOMF, texte_court = FNNOMF, adresse = trim(FNADRA || ' ' || FNADRB), code_postal_id = COALESCE(t_codes_postaux.oid,0), ville = VLNOMV, cedex = FNCDEX, telephone = FNNTEL, fax = FNNFAX, code_cahpp = FNCBAR, siret = FNNFIN FROM prod_shs.[ECOLIB]_FNP01 JOIN prod_shs.[ECOLIB]_VLP01GE ON FNIUVI = VLIUVI LEFT JOIN base.t_codes_postaux ON VLCPOS = t_codes_postaux.code WHERE code_original = FNIUFN AND ( t_fournisseurs.texte IS DISTINCT FROM FNNOMF OR t_fournisseurs.texte_court IS DISTINCT FROM FNNOMF OR t_fournisseurs.adresse IS DISTINCT FROM trim(FNADRA || ' ' || FNADRB) OR t_fournisseurs.code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR t_fournisseurs.ville IS DISTINCT FROM VLNOMV OR t_fournisseurs.cedex IS DISTINCT FROM FNCDEX OR t_fournisseurs.telephone IS DISTINCT FROM FNNTEL OR t_fournisseurs.fax IS DISTINCT FROM FNNFAX OR t_fournisseurs.code_cahpp IS DISTINCT FROM FNCBAR OR t_fournisseurs.siret IS DISTINCT FROM FNNFIN ); UPDATE eco.t_fournisseurs SET code_comptable = substr(code,2,5) WHERE oid <> 0 AND length(t_fournisseurs.code) = 6 AND code_comptable IS DISTINCT FROM substr(code,2,5) ; UPDATE eco.t_fournisseurs SET iban = CASE WHEN FOIBAX <> '' THEN FOIBAX ELSE iban END, bic = CASE WHEN FOBICX <> '' THEN FOBICX ELSE bic END FROM ( SELECT to_char(FOCFOU,'FM00000') AS FOCFOU, CASE WHEN FOBICC <> '' THEN FOBICC ELSE FOBICP END AS FOBICX, CASE WHEN FOIBAC <> '' THEN FOIBAC ELSE FOIBAP END AS FOIBAX FROM prod_shs.[COMPTALIB]_FOP02 WHERE FOBICC <> '' OR FOBICP <> '' OR FOIBAC <> '' OR FOIBAP <> '' ) subview WHERE code_comptable = FOCFOU AND ( iban IS DISTINCT FROM CASE WHEN FOIBAX <> '' THEN FOIBAX ELSE iban END OR bic IS DISTINCT FROM CASE WHEN FOBICX <> '' THEN FOBICX ELSE bic END ) ; UPDATE eco.t_fournisseurs SET iban = 'FR76'||' '||substr(FOCBQE,1,4)||' '||substr(FOCBQE,5,4)||' '||substr(FOCBQE,9,4)||' '||substr(FOCBQE,13,4)||' '||substr(FOCBQE,17,4)||' '||substr(FOCBQE,21,3) FROM ( SELECT to_char(FOCFOU,'FM00000') AS FOCFOU, FORSOF, CASE WHEN FOBQEF <> '' THEN FOBQEF || FOGUIF || FONCPF || FOCRIF WHEN FOBQEP <> '' THEN FOBQEP || FOGUIP || FONCPP || FOCRIP ELSE '' END AS FOCBQE FROM prod_shs.[COMPTALIB]_FOP01 WHERE FOBQEF <> '' OR FOBQEP <> '' ) subview WHERE code_comptable = FOCFOU AND length(FOCBQE) = 23 AND iban = '' ; UPDATE eco.t_fournisseurs SET type_id = COALESCE(t_types_fournisseurs.oid,0) FROM prod_shs.[ECOLIB]_FNP01 LEFT JOIN eco.t_types_fournisseurs ON FNKTYF = t_types_fournisseurs.code_original WHERE t_fournisseurs.code_original = FNIUFN AND (t_fournisseurs.type_id IS DISTINCT FROM COALESCE(t_types_fournisseurs.oid,0)); UPDATE eco.t_fournisseurs SET type_id = 0 WHERE type_id IS NULL; UPDATE eco.t_fournisseurs SET type_code = t_types_fournisseurs.code, type_texte = t_types_fournisseurs.texte_court, type_section_id = t_types_fournisseurs.section_id, type_section_code = t_types_fournisseurs.section_code, type_section_texte = t_types_fournisseurs.section_texte FROM eco.t_types_fournisseurs WHERE type_id = t_types_fournisseurs.oid AND ( type_code IS DISTINCT FROM t_types_fournisseurs.code OR type_texte IS DISTINCT FROM t_types_fournisseurs.texte_court OR type_section_id IS DISTINCT FROM t_types_fournisseurs.section_id OR type_section_code IS DISTINCT FROM t_types_fournisseurs.section_code OR type_section_texte IS DISTINCT FROM t_types_fournisseurs.section_texte ); ]]> '' THEN UFIUCR ELSE NULL END) AS CTI_UFCR, count(DISTINCT CASE WHEN UFIUSE <> '' THEN UFIUSE ELSE NULL END) AS CTI_UFUM, count(DISTINCT CASE WHEN UFSERS <> '' THEN UFSERS ELSE NULL END) AS CTI_UFSERS, count(DISTINCT CASE WHEN UFETBF <> '' THEN UFETBF ELSE NULL END) AS CTI_UFSITE FROM prod_shs.[ECOLIB]_UFP01GE; INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_UFSITE', 'Site', t_listes_tables.oid, '0', 6 FROM w_UFP01_classes, eco.t_listes_tables WHERE CTI_UFSITE > 1 AND t_listes_tables.code = 'UFO' AND 6 NOT IN (SELECT sequence FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO' WHERE t_classes.sequence = 6 AND t_classes.code = 'CTI_UFSITE'; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT LHIUSI , MAX(LHNSIT), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_UFP01GE JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original JOIN prod_shs.[ECOLIB]_LHP01GE ON UFETBF = LHIUSI WHERE LHIUSI NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_LHP01GE ON LHIUSI = t_classes_sections.code JOIN prod_shs.[ECOLIB]_UFP01GE ON UFETBF = LHIUSI JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Centre responsabilité INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_UFCR', 'Centre de responsabilité', t_listes_tables.oid, '0', 7 FROM w_UFP01_classes, eco.t_listes_tables WHERE CTI_UFCR > 1 AND t_listes_tables.code = 'UFO' AND 7 NOT IN (SELECT sequence FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO' WHERE t_classes.sequence = 7 AND t_classes.code = 'CTI_UFCR'; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT RCCICR , MAX(RCLI25), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_UFP01GE UFP01GE JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original JOIN prod_shs.[ECOLIB]_RCP01 ON UFIUCR = RCIURC WHERE RCCICR NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_RCP01 ON RCCICR = t_classes_sections.code JOIN prod_shs.[ECOLIB]_UFP01GE ON UFIUCR = RCIURC JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Unité médicale INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_UFUM', 'Unité médicale', t_listes_tables.oid, '0', 8 FROM w_UFP01_classes, eco.t_listes_tables WHERE CTI_UFUM > 1 AND t_listes_tables.code = 'UFO' AND 8 NOT IN (SELECT sequence FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO' WHERE t_classes.sequence = 8 AND t_classes.code = 'CTI_UFUM'; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT UMCSER , MAX(UMNSER), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_UFP01GE JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original JOIN prod_shs.[ECOLIB]_UMP01GE ON UFIUSE = UMIUSE WHERE UMCSER NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_UMP01GE ON UMCSER = t_classes_sections.code JOIN prod_shs.[ECOLIB]_UFP01GE ON UFIUSE = UMIUSE JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Service de soins INSERT INTO eco.t_classes( code, texte, table_id, is_cti, sequence) SELECT 'CTI_UFSERS', 'Service de soins', t_listes_tables.oid, '0', 9 FROM w_UFP01_classes, eco.t_listes_tables WHERE CTI_UFSERS > 1 AND t_listes_tables.code = 'UFO' AND 9 NOT IN (SELECT sequence FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'); DROP TABLE IF EXISTS w_classes; CREATE TEMP TABLE w_classes AS SELECT t_classes.oid AS current_classe_id FROM eco.t_classes JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO' WHERE t_classes.sequence = 9 AND t_classes.code = 'CTI_UFSERS'; INSERT INTO eco.t_classes_sections (code, texte, classe_id) SELECT SVKSER , MAX(SVLIBE), current_classe_id FROM w_classes , prod_shs.[ECOLIB]_UFP01GE JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original JOIN prod_shs.[ECOLIB]_SVP01GE ON UFSERS = SVKSER WHERE SVKSER NOT IN (SELECT t_classes_sections.code FROM eco.t_classes_sections JOIN w_classes ON t_classes_sections.classe_id = current_classe_id ) GROUP BY 1,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_classes_sections_elements; CREATE TEMP TABLE w_classes_sections_elements AS SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id FROM eco.t_classes_sections JOIN prod_shs.[ECOLIB]_SVP01GE ON SVKSER = t_classes_sections.code JOIN prod_shs.[ECOLIB]_UFP01GE ON UFSERS = SVKSER JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF JOIN w_classes ON t_classes_sections.classe_id = current_classe_id GROUP BY 1,2; DELETE FROM eco.t_classes_sections_elements USING w_classes, eco.t_classes_sections WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND t_classes_sections.classe_id = current_classe_id; INSERT INTO eco.t_classes_sections_elements(section_id, to_id) SELECT section_id, to_id FROM w_classes_sections_elements; -- Types mouvements INSERT INTO eco.t_types_mouvements(code, texte, texte_court, code_original) SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE FROM prod_shs.[ECOLIB]_THP01GE LEFT JOIN eco.t_types_mouvements ON (code_original = THCODE) WHERE THCENR = 'CMV' AND code_original IS NULL AND THCODE <> '' GROUP BY 1; UPDATE eco.t_types_mouvements SET texte = THLI40, texte_court = THLI40 FROM prod_shs.[ECOLIB]_THP01GE WHERE THCENR = 'CMV' AND THCODE <> '' AND code_original = THCODE AND (texte IS DISTINCT FROM THLI40 OR texte_court IS DISTINCT FROM THLI40); INSERT INTO eco.t_types_mouvements(code_original, code, texte, texte_court) SELECT 'CTI_STOCK', 'CTI_STOCK', 'Stock début de mois', 'Stock début de mois' WHERE 'CTI_STOCK' NOT IN (SELECT code_original FROM eco.t_types_mouvements); ]]> 0 THEN eco.cti_to_date(FUSENG, FUAENG, FUMENG, 01::numeric) ELSE eco.cti_to_date(FUSCRE, FUACRE, FUMCRE, 01::numeric) END) + interval '1 month' - interval '1 day') AS date_engagement, trim(FUOBFU) AS objet, trim(FUREFC) AS reference, eco.cti_to_date(FUSLIP, FUALIP, FUMLIP, FUJLIP) AS date_livraison_prevue, CASE WHEN FUTOP4 = '1' THEN 'T' ELSE 'N' END AS etat_reception, eco.cti_to_date(FUSLIV, FUALIV, FUMLIV, FUJLIV) AS date_reception, CASE WHEN FUTOP5 = '1' THEN 'T' ELSE 'N' END AS etat_liquidation, COALESCE(t_fournisseurs.oid,0) AS fournisseur_id, COALESCE(t_fournisseurs.oid,0) AS fournisseur_distributeur_id, COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id, COALESCE(t_lieux_commande.oid,0) AS lieu_commande_id, COALESCE(t_lieux_facturation.oid,0) AS lieu_facturation_id, COALESCE(t_lieux_livraison.oid,0) AS lieu_livraison_id, COALESCE(t_unites_fonctionnelles.oid,0)AS unite_fonctionnelle_id, FUMHTC AS montant_commande_ht, FUMREC AS montant_commande_remise, FUMTVC AS montant_commande_tva, FUMPOC AS montant_commande_port, FUMTCC AS montant_commande_total, FUMHTL AS montant_liquidation_ht, FUMREL AS montant_liquidation_remise, FUMTVL AS montant_liquidation_tva, FUMPOL AS montant_liquidation_port, FUMTCL AS montant_liquidation_total FROM prod_shs.[ECOLIB]_FUP01 LEFT JOIN eco.t_fournisseurs ON FUIUFN = t_fournisseurs.code_original LEFT JOIN eco.t_gestionnaires ON FUKGEC = t_gestionnaires.code_original LEFT JOIN eco.t_lieux t_lieux_commande ON FULFAC = t_lieux_commande.code_original LEFT JOIN eco.t_lieux t_lieux_facturation ON FULFAC = t_lieux_facturation.code_original LEFT JOIN eco.t_lieux t_lieux_livraison ON FULLIV = t_lieux_livraison.code_original LEFT JOIN eco.t_unites_fonctionnelles ON CASE WHEN FUIUU2 <> '' THEN FUIUU2 ELSE FUIUU1 END = t_unites_fonctionnelles.code_original WHERE FUSCRE = 20 AND 100*FUSCRE + FUACRE >= [ENV_ECO_ANNEEDEBUT] AND FUCANN = '' AND FUTOP3 <> '0'; SELECT base.cti_enable_index('eco', 'i_commandes_1'); SELECT base.cti_enable_index('eco', 'i_commandes_2'); SELECT base.cti_enable_index('eco', 'i_commandes_3'); SELECT base.cti_enable_index('eco', 'i_commandes_4'); SELECT base.cti_enable_index('eco', 'i_commandes_5'); SELECT base.cti_enable_index('eco', 'i_commandes_6'); SELECT base.cti_enable_index('eco', 'i_commandes_7'); SELECT base.cti_enable_index('eco', 'i_commandes_8'); -- Si ligne commande soldée en réception et si quantité réceptionnée <> 0 (etat_livraison<>'N'), modification des quantités commandées UPDATE prod_shs.[ECOLIB]_FVP01 SET FVQCD1 = FVQRE1, FVQCD2 = FVQRE2 WHERE 1=1 AND FVQCD1 != FVQRE1 AND FVTOP1 = '1' AND FVQRE1 != 0 ; -- UCD par fournisseur DROP TABLE IF EXISTS w_ARAF_ucd; CREATE TEMP TABLE w_ARAF_ucd AS SELECT AFIUAR, AFIUFN, AFREFA, COALESCE(t_ucd_fournisseur.oid, t_ucd.oid, 0) AS ucd_id FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN base.t_ucd ON (t_ucd.code = substr(ARMOT2,1,7) AND length(ARMOT2) = 7) OR (t_ucd.code = substr(ARMOT2,6,7) AND length(ARMOT2) = 13) JOIN prod_shs.[ECOLIB]_AFP01 ON AFIUAR = ARIUAR LEFT JOIN base.t_ucd t_ucd_fournisseur ON (t_ucd_fournisseur.code = substr(AFREFA,1,7) AND length(AFREFA) = 7) OR (t_ucd_fournisseur.code = substr(AFREFA,6,7) AND length(AFREFA) = 13) WHERE AFIUAR NOT IN (SELECT ARIUAR FROM prod_shs.[ECOLIB]_ARP06) AND (ARMOT2 <> '' OR AFREFA <> '') AND (t_ucd.oid IS NOT NULL OR t_ucd_fournisseur.oid IS NOT NULL); CREATE INDEX w_ARAF_ucd_i1 ON w_ARAF_ucd USING btree (AFIUAR); SELECT base.cti_disable_index('eco', 'i_ligne_commandes_1'); SELECT base.cti_disable_index('eco', 'i_ligne_commandes_2'); SELECT base.cti_disable_index('eco', 'i_ligne_commandes_3'); TRUNCATE eco.p_lignes_commandes; INSERT INTO eco.p_lignes_commandes( code_original, commande_id, ligne_commande, texte, fournisseur_distributeur_id, article_id, lpp_id, ucd_id, unite_approvisionnement_id, compte_id, quantite_approvisionnement, prix_unitaire_approvisionnement, multiplicateur_stockage, quantite_stockage, prix_unitaire_stockage, taux_tva, unite_fonctionnelle_id, montant_commande_ht, montant_commande_remise, montant_commande_tva, montant_commande_port, montant_commande_ttc, quantite_livraison_approvisionnement, quantite_livraison_stockage, montant_livraison_ht, montant_livraison_ttc, etat_livraison, montant_liquidation_ht, montant_liquidation_remise, montant_liquidation_tva, montant_liquidation_port, montant_liquidation_ttc, etat_liquidation) SELECT FVNCDE || '|' || FVLICD AS code_original, p_commandes.oid AS commande_id, FVLICD AS ligne_commande, trim(FVLIA1 || ' ' || FVLIA2) AS texte, CASE WHEN t_fournisseurs.fournisseur_distributeur_id <> 0 THEN t_fournisseurs.fournisseur_distributeur_id ELSE t_fournisseurs.oid END AS fournisseur_distributeur_id, COALESCE(t_articles.oid, 0) AS article_id, COALESCE(t_articles.lpp_id, 0) AS lpp_id, COALESCE(w_ARAF_ucd.ucd_id, 0) AS ucd_id, COALESCE(t_unites.oid,t_articles.unite_stockage_id,0) AS unite_approvisionnement_id, COALESCE(t_compte.oid, t_articles.compte_id, 0) AS compte_id, FVQCD1 AS quantite_approvisionnement, FVPUN1 AS prix_unitaire_approvisionnement, FVUSUA AS multiplicateur_stockage, FVQCD2 AS quantite_stockage, FVPUN2 AS prix_unitaire_stockage, FVTXTV AS taux_tva, p_commandes.unite_fonctionnelle_id, FVMHT1 AS montant_commande_ht, FVMRE1 AS montant_commande_remise, FVMTV1 AS montant_commande_tva, FVMPO1 AS montant_commande_port, FVMTC1 AS montant_commande_ttc, FVQRE1 AS quantite_livraison_approvisionnement, FVQRE1 AS quantite_livraison_stockage, CASE WHEN FVQRE1 = FVQCD1 THEN FVMHT1 WHEN FVQCD1 = 0 THEN 0 ELSE FVMHT1 / FVQCD1 * FVQRE1 END AS montant_livraison_ht, CASE WHEN FVQRE1 = FVQCD1 THEN FVMTC1 WHEN FVQCD1 = 0 THEN 0 ELSE FVMTC1 / FVQCD1 * FVQRE1 END AS montant_livraison_ht, CASE WHEN FVQRE1 = FVQCD1 THEN 'T' WHEN FVQRE1 > FVQCD1 THEN 'S' WHEN FVQRE1 = 0 THEN 'N' ELSE 'P' END AS etat_livraison, COALESCE(YXMHT5,0) AS montant_liquidation_ht, COALESCE(YXMRE5,0) AS montant_liquidation_remise, COALESCE(YXMTV5,0) AS montant_liquidation_tva, COALESCE(YXMPO5,0) AS montant_liquidation_port, COALESCE(YXMTC5,0) AS montant_liquidation_ttc, CASE WHEN FVTOP3 = '1' THEN 'T' ELSE 'N' END AS etat_liquidation FROM prod_shs.[ECOLIB]_FVP01 JOIN prod_shs.[ECOLIB]_FUP01 ON FVNCDE = FUNCDE LEFT JOIN prod_shs.[ECOLIB]_YXP01 ON FVNLIQ = YXNLIQ and FVLILI = YXLILI JOIN eco.p_commandes ON FVNCDE = p_commandes.code_original JOIN eco.t_fournisseurs ON p_commandes.fournisseur_id = t_fournisseurs.oid LEFT JOIN eco.t_articles ON FVIUAR = t_articles.code_original AND t_articles.oid <> 0 LEFT JOIN w_ARAF_ucd ON FVIUAR = AFIUAR AND FUIUFN = AFIUFN LEFT JOIN eco.t_unites ON FVKUAP = t_unites.code_original LEFT JOIN eco.t_compte ON FVIUBC = t_compte.code_original AND t_compte.oid <> 0 WHERE FUSCRE = 20 AND 100*FUSCRE + FUACRE >= [ENV_ECO_ANNEEDEBUT] AND FUCANN = '' AND FUTOP3 <> '0' AND FVCANN = '' ; -- forcage des commandes et livraisons en fonction de la liquidation => dans share SELECT base.cti_enable_index('eco', 'i_ligne_commandes_1'); SELECT base.cti_enable_index('eco', 'i_ligne_commandes_2'); SELECT base.cti_enable_index('eco', 'i_ligne_commandes_3'); -- UCD par défaut article UPDATE eco.t_articles SET ucd_id = 0 WHERE ucd_id <> 0 AND code_original NOT IN (SELECT AFIUAR FROM w_ARAF_ucd); UPDATE eco.t_articles SET ucd_id = subview.ucd_id FROM ( SELECT article_id, count(distinct ucd_id), (MAX(Array[date_commande::text, ucd_id::text]))[2]::bigint AS ucd_id FROM eco.p_lignes_commandes JOIN eco.p_commandes ON commande_id = p_commandes.oid WHERE ucd_id <> 0 GROUP BY 1 ) subview WHERE t_articles.oid = subview.article_id AND subview.ucd_id IS DISTINCT FROM t_articles.ucd_id; UPDATE eco.t_articles SET ucd_id = subview.ucd_id FROM ( SELECT t_articles.oid AS article_id, max(COALESCE(t_ucd_fournisseur.oid, t_ucd.oid, 0)) AS ucd_id FROM prod_shs.[ECOLIB]_ARP01 JOIN eco.t_articles ON ARIUAR = t_articles.code_original LEFT JOIN base.t_ucd ON (t_ucd.code = substr(ARMOT2,1,7) AND length(ARMOT2) = 7) OR (t_ucd.code = substr(ARMOT2,6,7) AND length(ARMOT2) = 7) JOIN prod_shs.[ECOLIB]_AFP01 ON AFIUAR = ARIUAR LEFT JOIN base.t_ucd t_ucd_fournisseur ON (t_ucd_fournisseur.code = substr(AFREFA,1,7) AND length(AFREFA) = 7) OR (t_ucd_fournisseur.code = substr(AFREFA,6,7) AND length(AFREFA) = 13) WHERE AFIUAR NOT IN (SELECT ARIUAR FROM prod_shs.[ECOLIB]_ARP06) AND (ARMOT2 <> '' OR AFREFA <> '') AND (t_ucd.oid IS NOT NULL OR t_ucd_fournisseur.oid IS NOT NULL) GROUP BY 1 ) subview WHERE t_articles.oid = subview.article_id ; UPDATE eco.p_lignes_commandes SET ucd_id = t_articles.ucd_id FROM eco.t_articles WHERE article_id = t_articles.oid AND p_lignes_commandes.ucd_id = 0 AND t_articles.ucd_id <> 0; ]]> 0 AND (base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0) ; INSERT INTO w_UBA01_DOSS SELECT UBNMVL, UBNCDE, UBLICD, eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date_mouvement, UBDOSS::text AS no_sejour, UBIUHN::text AS no_patient FROM prod_shs.[ECOLIB]_UBA01 JOIN prod_shs.[ECOLIB]_SYP01 ON SYNMVT = UBNMVL WHERE UBNMVL <> 0 AND UBNMVL NOT IN (SELECT UBNMVT FROM w_UBA01_DOSS ) AND (base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0) ; INSERT INTO w_UBA01_DOSS SELECT SYNMVT, UBNCDE, UBLICD, eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date_mouvement, UBDOSS::text AS no_sejour, UBIUHN::text AS no_patient FROM prod_shs.[ECOLIB]_UBA01 JOIN prod_shs.[ECOLIB]_SYP01 ON SYNCDE = UBNCDE AND SYLICD = UBLICD WHERE UBNCDE <> 0 AND SYNMVT NOT IN (SELECT UBNMVT FROM w_UBA01_DOSS) AND (base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0) ; UPDATE w_UBA01_DOSS SET no_sejour = NULL WHERE no_sejour = '' ; UPDATE w_UBA01_DOSS SET no_patient = NULL WHERE no_patient = '' ; -- Uniquement les mouvements qui n'ont qu'un seul séjour DROP TABLE IF EXISTS w_UBA01_DOSS_U; CREATE TEMP TABLE w_UBA01_DOSS_U AS SELECT UBNMVT, COALESCE(MAX(no_sejour),'') AS no_sejour, COALESCE(MAX(no_patient),'') AS no_patient FROM w_UBA01_DOSS WHERE no_sejour IS NOT NULL OR no_patient IS NOT NULL GROUP BY 1 HAVING count(DISTINCT no_sejour) <= 1 AND count(DISTINCT no_patient) <= 1 ; CREATE INDEX iw_UBA01_DOSS_U_UBNMVT ON w_UBA01_DOSS_U USING btree (UBNMVT) ; TRUNCATE eco.p_mouvements_articles; SELECT base.cti_disable_index('eco', 'i_mouvements_articles_1'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_2'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_3'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_4'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_5'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_6'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_7'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_8'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_9'); SELECT base.cti_disable_index('eco', 'i_mouvements_articles_10'); -- TVA articles DROP SEQUENCE IF EXISTS w_MVT_sequence; CREATE TEMP SEQUENCE w_mvt_sequence; DROP TABLE IF EXISTS w_MVT_ARTICLES; CREATE TEMP TABLE w_MVT_ARTICLES AS SELECT subview.*, nextval(' w_MVT_sequence'::regclass) AS sequence FROM ( SELECT SYNMVT AS code_original, eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date, CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN 'E' ELSE 'S' END AS sens_mouvement, COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id, TRIM(SYLI25) AS texte, COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id, COALESCE(t_lieux.oid,0) AS lieu_id, COALESCE(t_unites_fonctionnelles.oid,0) AS unite_fonctionnelle_id, COALESCE(t_articles.oid,0) AS article_id, COALESCE(t_compte.oid,t_articles.compte_id,0) AS compte_id, COALESCE(t_fournisseurs.oid,0) AS fournisseur_id, COALESCE(p_commandes.oid,0) AS commande_id, SYLICD AS ligne_commande, COALESCE(t_articles.lpp_id,0) AS lpp_id, COALESCE(t_ucd.oid,0) AS ucd_id, SYPRMV AS prix_unitaire, CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN SYQMVT ELSE 0 END AS entree_quantite, CASE WHEN SYKNMV = 'S' OR (SYKNMV = 'T' AND SYKCMV = 'TS') THEN CASE WHEN SYKCMV <> 'NS' AND SYKCMV <> 'IN' THEN SYQMVT ELSE 0 - SYQMVT END ELSE 0 END AS sortie_quantite, CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN CASE WHEN SYKNMV = 'E' AND SYKCMV IN ('EE','IE') AND SYMTC5 <> 0 THEN SYMTC5 WHEN SYKNMV = 'E' AND SYKCMV IN ('EE','IE') AND SYMTC5 = 0 THEN SYMTC1 WHEN SYKNMV = 'E' AND SYKCMV = 'EL' AND SYMTC1 = 0 THEN SYMTC5 WHEN SYKNMV = 'E' AND SYKCMV = 'EL' AND SYMTC5 = 0 THEN SYMTC1 WHEN SYKNMV = 'E' AND SYKCMV = 'EL' THEN SYMTC5 - SYMTC1 WHEN SYKNMV = 'E' AND SYKCMV = 'AE' THEN SYMTC1 WHEN SYKNMV = 'E' AND SYKCMV IN('EN', 'EP') THEN SYMTC5 WHEN SYMTC5 <> 0 THEN SYMTC5 WHEN SYMTC5 = 0 THEN SYMTC1 ELSE SYQMVT * SYPRMV END ELSE 0 END AS entree_montant, CASE WHEN SYKNMV = 'S' OR (SYKNMV = 'T' AND SYKCMV = 'TS') THEN CASE WHEN SYKNMV = 'S' AND SYKCMV IN ('IS') AND SYMTC5 <> 0 THEN SYMTC5 WHEN SYKNMV = 'S' AND SYKCMV IN ('IS') AND SYMTC5 = 0 THEN SYMTC1 WHEN SYKNMV = 'S' AND SYKCMV = 'SL' AND SYMTC1 = 0 THEN SYMTC5 WHEN SYKNMV = 'S' AND SYKCMV = 'SL' AND SYMTC5 = 0 THEN SYMTC1 WHEN SYKNMV = 'S' AND SYKCMV = 'SL' THEN SYMTC5 - SYMTC1 WHEN SYKNMV = 'S' AND SYKCMV IN ('AS','IP','PS') AND SYMTC1 <> 0 THEN SYMTC1 WHEN SYKNMV = 'S' AND SYKCMV IN ('AS','IP','PS') THEN SYMTC5 WHEN SYKNMV = 'S' AND SYKCMV IN ('IN','NS') THEN 0-SYMTC1 WHEN SYMTC5 <> 0 THEN SYMTC5 WHEN SYMTC5 = 0 THEN SYMTC1 ELSE SYQMVT * SYPRMV END ELSE 0 END AS sortie_montant, 0 AS stock_quantite_debut, 0 AS stock_quantite_fin, COALESCE(w_UBA01_DOSS_U.no_patient,'') AS no_patient, COALESCE(w_UBA01_DOSS_U.no_sejour,'') AS no_sejour FROM prod_shs.[ECOLIB]_SYP01 LEFT JOIN prod_shs.[ECOLIB]_AFP01 ON SYIUAF = AFIUAF LEFT JOIN w_ARP08 ON AFREFA = UCD LEFT JOIN prod_shs.[ECOLIB]_FUP01 ON SYNCDE = FUNCDE LEFT JOIN eco.t_types_mouvements ON SYKCMV = t_types_mouvements.code_original LEFT JOIN eco.t_gestionnaires ON SYKGEC = t_gestionnaires.code_original LEFT JOIN eco.t_lieux ON SYLIEU = t_lieux.code_original LEFT JOIN eco.t_unites_fonctionnelles ON SYIUUF = t_unites_fonctionnelles.code_original LEFT JOIN eco.t_articles ON SYIUAR = t_articles.code_original AND t_articles.oid <> 0 LEFT JOIN eco.t_compte ON SYIUBC = t_compte.code_original AND t_compte.oid <> 0 LEFT JOIN eco.t_fournisseurs ON CASE WHEN FUIUFN <> '' THEN FUIUFN WHEN AFIUFN <> '' THEN AFIUFN ELSE SYIUFN END = t_fournisseurs.code_original LEFT JOIN eco.p_commandes ON SYNCDE = p_commandes.code_original LEFT JOIN base.t_ucd ON ((substr(UCD,1,7) = t_ucd.code AND length(UCD) = 7) OR (substr(UCD,1,7) = t_ucd.code AND length(UCD) = 7)) AND t_ucd.oid <> 0 LEFT JOIN w_UBA01_DOSS_U ON UBNMVT = SYNMVT WHERE SYSIEC = 20 AND 100*SYSIEC + SYANNE >= [ENV_ECO_ANNEEDEBUT] AND SYCANN = '' ORDER BY eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR),SYNMVT ) subview ; INSERT INTO eco.p_mouvements_articles( oid, code_original, date, sens_mouvement, type_mouvement_id, texte, gestionnaire_id, lieu_id, unite_fonctionnelle_id, article_id, compte_id, fournisseur_id, commande_id, ligne_commande, lpp_id, ucd_id, prix_unitaire, entree_quantite, sortie_quantite, entree_montant, sortie_montant, stock_quantite_debut, stock_quantite_fin, no_patient, no_sejour) SELECT sequence, code_original, date, sens_mouvement, type_mouvement_id, texte, gestionnaire_id, lieu_id, unite_fonctionnelle_id, article_id, compte_id, fournisseur_id, commande_id, ligne_commande, lpp_id, ucd_id, prix_unitaire, entree_quantite, sortie_quantite, entree_montant, sortie_montant, stock_quantite_debut, stock_quantite_fin, no_patient, no_sejour FROM w_MVT_ARTICLES ; SELECT base.cti_enable_index('eco', 'i_mouvements_articles_1'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_2'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_3'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_4'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_5'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_6'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_7'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_8'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_9'); SELECT base.cti_enable_index('eco', 'i_mouvements_articles_10'); UPDATE eco.p_mouvements_articles SET entree_quantite = 0 - entree_quantite, sortie_quantite = 0 - sortie_quantite, entree_montant = 0 - entree_montant, sortie_montant = 0 - sortie_montant, entree_montant_ht = 0 - entree_montant_ht, sortie_montant_ht = 0 - sortie_montant_ht, sortie_montant_original_ttc = 0 - sortie_montant_original_ttc, sortie_montant_original_ht = 0 - sortie_montant_original_ht FROM eco.t_types_mouvements WHERE type_mouvement_id = t_types_mouvements.oid AND t_types_mouvements.particularite_inverser_signe = '1'; UPDATE eco.p_mouvements_articles SET entree_quantite = sortie_quantite, sortie_quantite = entree_quantite, entree_montant = sortie_montant, sortie_montant = entree_montant, entree_montant_ht = sortie_montant_ht, sortie_montant_ht = entree_montant_ht, sortie_montant_original_ttc = sortie_montant_original_ht, sortie_montant_original_ht = sortie_montant_original_ttc, sens_mouvement = sens_force FROM eco.t_types_mouvements WHERE type_mouvement_id = t_types_mouvements.oid AND t_types_mouvements.sens_force IN ('E','S') AND t_types_mouvements.sens_force != p_mouvements_articles.sens_mouvement ; UPDATE eco.p_mouvements_articles SET entree_montant_ht = base.cti_division(entree_montant, (1 + tx_tva )), sortie_montant_ht = base.cti_division(sortie_montant, (1 + tx_tva )) FROM ( SELECT article_id, date_commande, round(base.cti_division(p_lignes_commandes.montant_commande_ttc - p_lignes_commandes.montant_commande_ht + p_lignes_commandes.montant_commande_remise, p_lignes_commandes.montant_commande_ht),3) AS tx_tva, COALESCE(lead(date_commande,1) OVER (PARTITION BY article_id ORDER BY date_commande) - interval '1 day', '2099-12-31') AS date_next FROM eco.p_lignes_commandes JOIN eco.p_commandes ON commande_id = p_commandes.oid WHERE p_lignes_commandes.montant_commande_ttc != 0 ORDER BY 1,2 ) sub WHERE 1=1 AND sub.article_id = p_mouvements_articles.article_id AND p_mouvements_articles.date between date_commande and date_next ; UPDATE eco.p_mouvements_articles SET ucd_id = t_articles.ucd_id FROM eco.t_articles WHERE article_id = t_articles.oid AND p_mouvements_articles.ucd_id = 0 AND t_articles.ucd_id <> 0; ]]> STQSPH AND w_STP01.STDATE >= date(now() - interval '1 year') ; -- Traitement des mois non clos DROP TABLE IF EXISTS w_STP01_cloture; CREATE TEMP TABLE w_STP01_cloture AS SELECT STLIEU, MIN(STSYMD) AS STSYMD_cloture FROM ( SELECT w_STP01.STSYMD, w_STP01.STLIEU, SUM(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END), SUM(case when w_STP01.STQSPH IS NOT DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END), MAX(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN w_STP01.STIUAR ELSE '' END) FROM w_STP01 LEFT JOIN w_STP01 w_STP01_apres ON w_STP01.STLIEU = w_STP01_apres.STLIEU AND w_STP01.STIUAR = w_STP01_apres.STIUAR AND w_STP01.STSYMD = w_STP01_apres.STSYMD -1 WHERE w_STP01.STDATE >= date(now() - interval '1 year') AND (w_STP01.STQSPH <> 0) GROUP BY 1,2 HAVING SUM(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END) > 0 ORDER BY 1 DESC, 2 ) subview GROUP BY 1 ; DROP TABLE IF EXISTS w_STP01_nonclos; CREATE TEMP TABLE w_STP01_nonclos AS SELECT STLIEU, mois, (ANNEE*12+numero_mois) AS STSYMD_nonclos, (ANNEE*12+numero_mois)-1 AS STSYMD_nonclos_prec FROM base.p_calendrier_mois JOIN w_STP01_cloture ON (ANNEE*12+numero_mois) >= STSYMD_cloture AND date_debut <= date(now()) ORDER BY 1,2 ; SELECT base.cti_execute(' DROP TABLE IF EXISTS w_STP01_manquant ., CREATE TEMP TABLE w_STP01_manquant AS SELECT w_STP01.* FROM w_STP01 JOIN w_STP01_nonclos ON w_STP01.STLIEU = w_STP01_nonclos.STLIEU AND w_STP01.STSYMD = w_STP01_nonclos.STSYMD_nonclos -1 LEFT JOIN w_STP01 w_STP01_apres ON w_STP01.STLIEU = w_STP01_apres.STLIEU AND w_STP01.STIUAR = w_STP01_apres.STIUAR AND w_STP01_nonclos.STSYMD_nonclos = w_STP01_apres.STSYMD WHERE w_STP01.STQSPH <> 0 AND w_STP01_apres IS NULL ., UPDATE w_STP01_manquant SET STSYMD = STSYMD+1, STDATE = date(STDATE+interval ''1 month''), STQSDP = STQSPH, STPUMD = STPUMF, STQENT = 0, STQSOR = 0 ., INSERT INTO w_STP01 SELECT * FROM w_STP01_manquant ',20) ; SELECT base.cti_execute(' ALTER TABLE w_STP01 ALTER COLUMN STQSDP TYPE numeric., UPDATE w_STP01 SET STQSDP = w_STP01_avant.STQSPH, STPUMD = CASE WHEN w_STP01.STPUMD = 0 THEN w_STP01_avant.STPUMF ELSE w_STP01.STPUMD END, STQSPH = w_STP01_avant.STQSPH + w_STP01.STQENT - w_STP01.STQSOR, STPUMF = CASE WHEN w_STP01.STPUMF = 0 THEN w_STP01_avant.STPUMF ELSE w_STP01.STPUMF END FROM w_STP01 w_STP01_avant WHERE w_STP01.STLIEU = w_STP01_avant.STLIEU AND w_STP01.STIUAR = w_STP01_avant.STIUAR AND w_STP01.STSYMD = '||STSYMD_nonclos||' AND w_STP01_avant.STSYMD = '||STSYMD_nonclos-1||' AND ( w_STP01.STQSDP <> w_STP01_avant.STQSPH OR w_STP01.STPUMD <> w_STP01_avant.STPUMF OR w_STP01.STQSPH <> w_STP01_avant.STQSPH + w_STP01.STQENT - w_STP01.STQSOR OR w_STP01.STPUMF <> w_STP01_avant.STPUMF ) ',1) FROM ( SELECT STSYMD_nonclos FROM w_STP01_nonclos GROUP BY 1 ORDER BY 1 ) subview ; ANALYSE w_STP01 ; -- Ajout à la base SELECT base.cti_disable_index('eco', 'i_stock_1'); SELECT base.cti_disable_index('eco', 'i_stock_2'); SELECT base.cti_disable_index('eco', 'i_stock_3'); SELECT base.cti_disable_index('eco', 'i_stock_4'); SELECT base.cti_disable_index('eco', 'i_stock_5'); TRUNCATE eco.p_stock; INSERT INTO eco.p_stock( article_id, date_fin, date_debut, ucd_id, lpp_id, compte_id, lieu_id, provider_id, fournisseur_id, stock_quantite_debut, stock_valeur_debut, entree_quantite, entree_montant, sortie_quantite, sortie_montant, stock_quantite_fin, stock_valeur_fin, pump) SELECT COALESCE(t_articles.oid,0) AS article_id, STDATE AS date_fin, date(date_trunc('month',STDATE)) AS date_debut, COALESCE(t_articles.ucd_id,0) AS ucd_id, COALESCE(t_articles.lpp_id,0) AS lpp_id, t_articles.compte_id AS compte_id, COALESCE(t_lieux.oid,0) AS lieu_id, 0::bigint AS provider_id, t_articles.fournisseur_principal_id AS fournisseur_id, STQSDP AS stock_quantite_debut, STQSDP * STPUMD AS stock_valeur_debut, STQENT AS entree_quantite, STVSEP+STVTEP AS entree_montant, STQSOR AS sortie_quantite, STVSSP+STVTSP AS sortie_montant, STQSDP + STQENT - STQSOR AS stock_quantite_fin, (STQSDP + STQENT - STQSOR) * STPUMF AS stock_valeur_fin, STPUMF FROM w_STP01 LEFT JOIN eco.t_lieux ON STLIEU = t_lieux.code_original LEFT JOIN eco.t_articles ON STIUAR = t_articles.code_original AND t_articles.oid <> 0 WHERE STSIEC = 20 AND 100*STSIEC + STANNE >= [ENV_ECO_ANNEEDEBUT] AND STCANN = '' AND ( STQSDP IS DISTINCT FROM 0 OR STQENT IS DISTINCT FROM 0 OR STVSEP IS DISTINCT FROM 0 OR STVTEP IS DISTINCT FROM 0 OR STQSOR IS DISTINCT FROM 0 OR STVSSP IS DISTINCT FROM 0 OR STVTSP IS DISTINCT FROM 0 OR STQTSP IS DISTINCT FROM 0 ); SELECT base.cti_enable_index('eco', 'i_stock_1'); SELECT base.cti_enable_index('eco', 'i_stock_2'); SELECT base.cti_enable_index('eco', 'i_stock_3'); SELECT base.cti_enable_index('eco', 'i_stock_4'); SELECT base.cti_enable_index('eco', 'i_stock_5'); ]]>