'' AND code_original IS NULL AND EIDCONDITIONNEMENT IN (SELECT EIDCONDITIONNEMENT FROM prod_winpharm.GE_ARTICLE_LABORATOIRE) ORDER BY 1; UPDATE eco.t_unites SET code = SUBSTR(UPPER(translate(SLIBELLECONDITIONNEMENT,' .-+&()''','')),1,5), texte = SLIBELLECONDITIONNEMENT, texte_court = SLIBELLECONDITIONNEMENT FROM prod_winpharm.TH_CONDITIONNEMENT WHERE code_original = EIDCONDITIONNEMENT AND (code IS DISTINCT FROM (SUBSTR(UPPER(translate(SLIBELLECONDITIONNEMENT,' .-+&()''','')),1,5)) OR texte IS DISTINCT FROM SLIBELLECONDITIONNEMENT OR texte_court IS DISTINCT FROM SLIBELLECONDITIONNEMENT); -- Familles INSERT INTO eco.t_familles_articles(code, texte, texte_court, code_original) SELECT SCODEFAMILLE, SLIBELLEFAMILLE, SLIBELLEFAMILLE, EIDFAMILLE FROM prod_winpharm.TH_FAMILLE WHERE EIDFAMILLE NOT IN (SELECT code_original FROM eco.t_familles_articles WHERE code_original IS NOT NULL) ORDER BY 1; UPDATE eco.t_familles_articles SET texte = SLIBELLEFAMILLE, texte_court = SLIBELLEFAMILLE FROM prod_winpharm.TH_FAMILLE WHERE EIDFAMILLE = code_original AND (texte IS DISTINCT FROM SLIBELLEFAMILLE OR texte_court IS DISTINCT FROM SLIBELLEFAMILLE); -- Sous familles INSERT INTO eco.t_sous_familles_articles(code, texte, texte_court, code_original) SELECT SCODECLASSE, SLIBELLECLASSE, SLIBELLECLASSE, EIDCLASSE FROM prod_winpharm.TH_CLASSE WHERE EIDCLASSE NOT IN (SELECT code_original FROM eco.t_sous_familles_articles WHERE code_original IS NOT NULL) ORDER BY 1; UPDATE eco.t_sous_familles_articles SET texte = SLIBELLECLASSE, texte_court = SLIBELLECLASSE FROM prod_winpharm.TH_CLASSE WHERE EIDCLASSE = code_original AND (texte IS DISTINCT FROM SLIBELLECLASSE OR texte_court IS DISTINCT FROM SLIBELLECLASSE); -- ATC INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court ) SELECT UPPER(SCODEATC), UPPER(SCODEATC), SLIBELLEATC, SLIBELLEATC FROM prod_winpharm.TH_CLASSEATC LEFT JOIN eco.t_classification_atc ON code_original = UPPER(SCODEATC) WHERE code_original IS NULL ORDER BY 1; SELECT eco.cti_reorganize_classification_atc(); -- Types articles INSERT INTO eco.t_types_articles(code, texte, texte_court, code_original) SELECT SCODETYPEPRODUIT, SNOMTYPE, SNOMTYPE, EIDTYPEPRODUIT FROM prod_winpharm.GE_TYPEPRODUIT WHERE EIDTYPEPRODUIT NOT IN (SELECT code_original FROM eco.t_types_articles WHERE code_original IS NOT NULL) ORDER BY 1; -- Articles DROP TABLE IF EXISTS w_ARTICLE; CREATE TEMP TABLE w_ARTICLE AS SELECT EIDARTICLE::text AS CODE_CTI, GE_ARTICLE.* FROM prod_winpharm.GE_ARTICLE JOIN w_ETABLISSEMENT ON EIDETABLISSEMENT = EIDETABLISSEMENT_ok; UPDATE w_ARTICLE SET SLIBELLECOURT = SLIBELLELONG WHERE SLIBELLECOURT = '' AND SLIBELLELONG <> ''; UPDATE w_ARTICLE SET SLIBELLELONG = SLIBELLECOURT WHERE SLIBELLECOURT <> '' AND SLIBELLELONG = ''; UPDATE w_ARTICLE SET SLIBELLECOURT = SLIBELLECOMMERCIAL, SLIBELLELONG = SLIBELLECOMMERCIAL WHERE SLIBELLECOURT = '' AND SLIBELLELONG = ''; UPDATE w_ARTICLE SET SLIBELLECOURT = EIDARTICLE::text, SLIBELLELONG = EIDARTICLE::text WHERE SLIBELLECOURT = ''; UPDATE w_ARTICLE SET CODE_CTI = SUBSTR(UPPER(translate(SLIBELLELONG,' .-+&()''','')),1,5) || '-' || EIDARTICLE WHERE (SELECT MAX(valeur) FROM eco.t_divers WHERE code = 'WINPHARM_CODE') IS DISTINCT FROM '1' ; INSERT INTO eco.t_articles(code, texte, texte_court, code_original) SELECT CODE_CTI, SLIBELLELONG, substr(SLIBELLECOURT,1,50), EIDARTICLE FROM w_ARTICLE LEFT JOIN eco.t_articles ON (code_original = EIDARTICLE) WHERE code_original IS NULL; UPDATE eco.t_articles SET code = CODE_CTI, texte = SLIBELLELONG, texte_court = substr(SLIBELLECOURT,1,50) FROM w_ARTICLE WHERE code_original = EIDARTICLE AND ( code IS DISTINCT FROM CODE_CTI OR texte IS DISTINCT FROM SLIBELLELONG OR texte_court IS DISTINCT FROM substr(SLIBELLECOURT,1,50) ); -- Attributs articles UPDATE eco.t_articles SET unite_stockage_id = COALESCE(t_unites.oid,0) FROM ( SELECT EIDARTICLE, MIN(GE_ARTICLE_LABORATOIRE.EIDCONDITIONNEMENT) AS EIDCONDITIONNEMENT FROM prod_winpharm.GE_ARTICLE_LABORATOIRE GROUP BY 1 ) subview JOIN eco.t_unites ON EIDCONDITIONNEMENT = t_unites.code_original WHERE t_articles.code_original = EIDARTICLE AND unite_stockage_id IS DISTINCT FROM COALESCE(t_unites.oid,0); UPDATE eco.t_articles SET type_id = COALESCE(t_types_articles.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN eco.t_types_articles ON TH_PRODUIT.EIDTYPEPRODUIT = t_types_articles.code_original WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.type_id IS DISTINCT FROM COALESCE(t_types_articles.oid,0) ); UPDATE eco.t_articles SET famille_id = COALESCE(t_familles_articles.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT JOIN prod_winpharm.TH_PRODUIT_FAMILLE ON TH_PRODUIT_FAMILLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN eco.t_familles_articles ON TH_PRODUIT_FAMILLE.EIDFAMILLE = t_familles_articles.code_original WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.famille_id IS DISTINCT FROM COALESCE(t_familles_articles.oid,0) ); UPDATE eco.t_articles SET sous_famille_id = COALESCE(t_sous_familles_articles.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT JOIN prod_winpharm.TH_PRODUIT_CLASSE ON TH_PRODUIT_CLASSE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN eco.t_sous_familles_articles ON TH_PRODUIT_CLASSE.EIDCLASSE = t_sous_familles_articles.code_original WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.sous_famille_id IS DISTINCT FROM COALESCE(t_sous_familles_articles.oid,0) ); UPDATE eco.t_articles SET classification_atc_id = COALESCE(t_classification_atc.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT JOIN prod_winpharm.TH_PRODUIT_CLASSEATC ON TH_PRODUIT_CLASSEATC.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT JOIN prod_winpharm.TH_CLASSEATC ON TH_CLASSEATC.EIDCLASSEATC = TH_PRODUIT_CLASSEATC.EIDCLASSEATC LEFT JOIN eco.t_classification_atc ON TH_CLASSEATC.SCODEATC = t_classification_atc.code_original WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.classification_atc_id IS DISTINCT FROM COALESCE(t_classification_atc.oid,0) ); UPDATE eco.t_articles SET lpp_id = COALESCE(t_lpp.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN base.t_lpp ON TH_PRODUIT.SCODELPP = t_lpp.code WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.lpp_id IS DISTINCT FROM COALESCE(t_lpp.oid,0) ); UPDATE eco.t_articles SET ucd_id = COALESCE(t_ucd.oid,0) FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN base.t_ucd ON TH_PRODUIT.SUCD = t_ucd.code WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND (t_articles.ucd_id IS DISTINCT FROM COALESCE(t_ucd.oid,0) ); UPDATE eco.t_articles SET compte_id = COALESCE(t_compte.oid,0), taux_tva_en_cours = COALESCE(TH_TAUXTVA.ETAUXTVA) FROM prod_winpharm.GE_ARTICLE LEFT JOIN prod_winpharm.GE_COMPTE ON GE_ARTICLE.EIDCOMPTE = GE_COMPTE.EIDCOMPTE LEFT JOIN prod_winpharm.TH_TAUXTVA ON GE_COMPTE.EIDTAUXTVA = TH_TAUXTVA.EIDTAUXTVA LEFT JOIN eco.t_compte ON GE_COMPTE.SNUMCOMPTE = t_compte.code AND t_compte.oid <> 0 WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND ( t_articles.compte_id IS DISTINCT FROM COALESCE(t_compte.oid,0) OR taux_tva_en_cours IS DISTINCT FROM COALESCE(TH_TAUXTVA.ETAUXTVA) ) ; UPDATE eco.t_articles SET taux_tva_en_cours = ETAUXTVA FROM ( SELECT EIDARTICLE, (MAX(ARRAY[EIDLIGNE,TH_TAUXTVA.ETAUXTVA]))[2] AS ETAUXTVA FROM prod_winpharm.GE_LIGNE JOIN prod_winpharm.TH_TAUXTVA ON GE_LIGNE.EIDTAUXTVA = TH_TAUXTVA.EIDTAUXTVA WHERE GE_LIGNE.EIDTAUXTVA <> 0 GROUP BY 1 ) subview WHERE t_articles.code_original = subview.EIDARTICLE AND taux_tva_en_cours IS DISTINCT FROM ETAUXTVA ; UPDATE eco.t_articles SET gere_en_stock = CASE WHEN BNONSTOCKE = 1 THEN '0' ELSE '1' END, stock_en_depot = CASE WHEN BENDEPOT = 1 THEN '1' ELSE '0' END FROM prod_winpharm.GE_ARTICLE WHERE t_articles.code_original = GE_ARTICLE.EIDARTICLE AND ( gere_en_stock IS DISTINCT FROM CASE WHEN BNONSTOCKE = 1 THEN '0' ELSE '1' END OR stock_en_depot IS DISTINCT FROM CASE WHEN BENDEPOT = 1 THEN '1' ELSE '0' END ) ; 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 ); ]]> '' THEN SREFERENCE WHEN SUCD <> '' THEN SUCD ELSE '' END AS code_reference_fournisseur, GE_ARTICLE.SLIBELLECOURT AS texte_reference_fournisseur, SCIP13 AS code_cip, ''::text AS code_cahpp, COALESCE(t_unites.oid,0) AS unite_approvisionnement_id, GE_ARTICLE_LABORATOIRE.ENBUCD AS nombre_conditionnement_approvisionnement, EDPXACHATHT AS prix_unitaire_en_cours, 0::bigint AS ucd_id, CASE WHEN SUCD13 LIKE '34008%' AND length(SUCD13) = 13 THEN substr(SUCD13,6,7) WHEN SREFERENCE LIKE '34008%' AND length(SREFERENCE) = 13 THEN substr(SREFERENCE,6,7) WHEN TH_PRODUIT.SUCD LIKE '34008%' AND length(TH_PRODUIT.SUCD) = 13 THEN substr(TH_PRODUIT.SUCD,6,7) WHEN length(TH_PRODUIT.SUCD) = 7 AND TH_PRODUIT.SUCD LIKE '9%' THEN TH_PRODUIT.SUCD ELSE '' END AS code_ucd, CASE WHEN SUCD13 LIKE '34008%' AND length(SUCD13) = 13 THEN SUCD13 WHEN SREFERENCE LIKE '34008%' AND length(SREFERENCE) = 13 THEN SREFERENCE WHEN TH_PRODUIT.SUCD LIKE '34008%' AND length(TH_PRODUIT.SUCD) = 13 THEN TH_PRODUIT.SUCD ELSE '' END AS code_ucd13, COALESCE(t_lpp.oid,0) AS lpp_id FROM prod_winpharm.GE_ARTICLE_LABORATOIRE JOIN prod_winpharm.GE_ARTICLE ON GE_ARTICLE_LABORATOIRE.EIDARTICLE = GE_ARTICLE.EIDARTICLE LEFT JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN prod_winpharm.TH_LABORATOIRE ON GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE = TH_LABORATOIRE.EIDLABORATOIRE AND GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE > 0 LEFT JOIN eco.t_articles ON GE_ARTICLE_LABORATOIRE.EIDARTICLE = t_articles.code_original LEFT JOIN eco.t_fournisseurs ON GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE = t_fournisseurs.code_original LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON TH_LABORATOIRE.EIDLABORATOIREDIST = t_fournisseurs_distributeur.code_original LEFT JOIN eco.t_unites ON GE_ARTICLE_LABORATOIRE.EIDCONDITIONNEMENT = t_unites.code_original LEFT JOIN base.t_lpp ON TH_PRODUIT.SCODELPP = t_lpp.code ; -- References article laboratoire manquantes DROP TABLE IF EXISTS w_ARTICLE_LABORATOIRE_notexists; CREATE TEMP TABLE w_ARTICLE_LABORATOIRE_notexists AS SELECT GE_ENTETE.EIDLABORATOIRE, GE_LIGNE.EIDARTICLE, MAX(EIDLIGNE) AS EIDLIGNE FROM prod_winpharm.GE_ENTETE JOIN prod_winpharm.GE_LIGNE ON GE_ENTETE.EIDENTETE = GE_LIGNE.EIDENTETE LEFT JOIN prod_winpharm.GE_ARTICLE_LABORATOIRE ON GE_ARTICLE_LABORATOIRE.EIDARTICLE = GE_LIGNE.EIDARTICLE AND GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE = GE_ENTETE.EIDLABORATOIRE WHERE GE_ARTICLE_LABORATOIRE.EIDARTICLE IS NULL AND GE_ENTETE.EDATECOMMANDE <> '' GROUP BY 1,2 ; ANALYSE w_ARTICLE_LABORATOIRE_notexists ; INSERT INTO w_GE_ARTICLE_LABORATOIRE SELECT GE_ARTICLE_LABORATOIRE.*, GE_LIGNE.EIDARTICLE::text || '-'::text || GE_ENTETE.EIDLABORATOIRE::text AS code_original, COALESCE(t_articles.oid,0) AS article_id, COALESCE(t_fournisseurs.oid,0) AS fournisseur_id, COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid,0) AS fournisseur_distributeur_id, CASE WHEN BFABRICANTP = 1 THEN '1' ELSE '0' END AS est_fournisseur_principal, CASE WHEN SREFERENCE <> '' THEN SREFERENCE WHEN SUCD <> '' THEN SUCD ELSE '' END AS code_reference_fournisseur, GE_ARTICLE.SLIBELLECOURT AS texte_reference_fournisseur, SCIP13 AS code_cip, ''::text AS code_cahpp, COALESCE(t_unites.oid,0) AS unite_approvisionnement_id, GE_ARTICLE_LABORATOIRE.ENBUCD AS nombre_conditionnement_approvisionnement, GREATEST(EPXUNITHTCIP,EPXUNITHTUCD) AS prix_unitaire_en_cours, 0::bigint AS ucd_id, CASE WHEN SUCD13 LIKE '34008%' AND length(SUCD13) = 13 THEN substr(SUCD13,6,7) WHEN SREFERENCE LIKE '34008%' AND length(SREFERENCE) = 13 THEN substr(SREFERENCE,6,7) WHEN TH_PRODUIT.SUCD LIKE '34008%' AND length(TH_PRODUIT.SUCD) = 13 THEN substr(TH_PRODUIT.SUCD,6,7) WHEN length(TH_PRODUIT.SUCD) = 7 AND TH_PRODUIT.SUCD LIKE '9%' THEN TH_PRODUIT.SUCD ELSE '' END AS code_ucd, CASE WHEN SUCD13 LIKE '34008%' AND length(SUCD13) = 13 THEN SUCD13 WHEN SREFERENCE LIKE '34008%' AND length(SREFERENCE) = 13 THEN SREFERENCE WHEN TH_PRODUIT.SUCD LIKE '34008%' AND length(TH_PRODUIT.SUCD) = 13 THEN TH_PRODUIT.SUCD ELSE '' END AS code_ucd13, COALESCE(t_lpp.oid,0) AS lpp_id FROM prod_winpharm.GE_ENTETE JOIN prod_winpharm.GE_LIGNE ON GE_ENTETE.EIDENTETE = GE_LIGNE.EIDENTETE JOIN w_ARTICLE_LABORATOIRE_notexists ON GE_LIGNE.EIDLIGNE = w_ARTICLE_LABORATOIRE_notexists.EIDLIGNE JOIN prod_winpharm.GE_ARTICLE ON GE_ARTICLE.EIDARTICLE = GE_LIGNE.EIDARTICLE LEFT JOIN prod_winpharm.GE_ARTICLE_LABORATOIRE ON GE_ARTICLE_LABORATOIRE.EIDARTICLE = GE_LIGNE.EIDARTICLE AND GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE = GE_ENTETE.EIDLABORATOIRE LEFT JOIN prod_winpharm.TH_PRODUIT ON GE_ARTICLE.EIDPRODUIT = TH_PRODUIT.EIDPRODUIT LEFT JOIN prod_winpharm.TH_LABORATOIRE ON GE_ENTETE.EIDLABORATOIRE = TH_LABORATOIRE.EIDLABORATOIRE AND GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE > 0 LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON TH_LABORATOIRE.EIDLABORATOIREDIST = t_fournisseurs_distributeur.code_original JOIN eco.t_articles ON GE_LIGNE.EIDARTICLE = t_articles.code_original JOIN eco.t_fournisseurs ON GE_ENTETE.EIDLABORATOIRE = t_fournisseurs.code_original LEFT JOIN eco.t_unites ON '*' = t_unites.code_original LEFT JOIN base.t_lpp ON TH_PRODUIT.SCODELPP = t_lpp.code WHERE GE_ARTICLE_LABORATOIRE.EIDARTICLE IS NULL ; -- Doublons DELETE FROM w_GE_ARTICLE_LABORATOIRE USING ( SELECT EIDARTICLE, EIDLABORATOIRE, count(*), MAX(BFABRICANTP), MIN(BFABRICANTP), (MAX(ARRAY[BFABRICANTP,EIDARTICLELABORATOIRE]))[2]::bigint AS EIDARTICLELABORATOIRE_keep FROM w_GE_ARTICLE_LABORATOIRE WHERE EIDARTICLE IS NOT NULL GROUP BY 1,2 HAVING count(*) > 1 ) subview WHERE w_GE_ARTICLE_LABORATOIRE.EIDARTICLE = subview.EIDARTICLE AND w_GE_ARTICLE_LABORATOIRE.EIDLABORATOIRE = subview.EIDLABORATOIRE AND w_GE_ARTICLE_LABORATOIRE.EIDARTICLELABORATOIRE <> subview. EIDARTICLELABORATOIRE_keep ; INSERT INTO base.t_ucd (code, texte, texte_court) SELECT code_ucd, MIN(code_ucd) AS texte, MIN(code_ucd) AS texte_court FROM w_GE_ARTICLE_LABORATOIRE WHERE code_ucd <> '' AND code_ucd NOT IN (SELECT code FROM base.t_ucd) GROUP BY 1 ; UPDATE w_GE_ARTICLE_LABORATOIRE SET ucd_id = t_ucd.oid FROm base.t_ucd WHERE t_ucd.code = code_ucd ; INSERT INTO eco.t_article_fournisseur( code_original, article_id, fournisseur_id, fournisseur_distributeur_id, est_fournisseur_principal, code_reference_fournisseur, texte_reference_fournisseur, code_cip, code_cahpp, unite_approvisionnement_id, nombre_conditionnement_approvisionnement, prix_unitaire_en_cours, ucd_id, code_ucd13, lpp_id ) SELECT code_original, article_id, fournisseur_id, fournisseur_distributeur_id, est_fournisseur_principal, code_reference_fournisseur, texte_reference_fournisseur, code_cip, code_cahpp, unite_approvisionnement_id, nombre_conditionnement_approvisionnement, prix_unitaire_en_cours, ucd_id, code_ucd13, lpp_id FROM w_GE_ARTICLE_LABORATOIRE WHERE code_original NOT IN (SELECt code_original FROM eco.t_article_fournisseur) ; UPDATE eco.t_article_fournisseur SET article_id = w_GE_ARTICLE_LABORATOIRE.article_id, fournisseur_id = w_GE_ARTICLE_LABORATOIRE.fournisseur_id, fournisseur_distributeur_id = w_GE_ARTICLE_LABORATOIRE.fournisseur_distributeur_id, est_fournisseur_principal = w_GE_ARTICLE_LABORATOIRE.est_fournisseur_principal, code_reference_fournisseur = w_GE_ARTICLE_LABORATOIRE.code_reference_fournisseur, texte_reference_fournisseur = w_GE_ARTICLE_LABORATOIRE.texte_reference_fournisseur, code_cip = w_GE_ARTICLE_LABORATOIRE.code_cip, code_cahpp = w_GE_ARTICLE_LABORATOIRE.code_cahpp, unite_approvisionnement_id = w_GE_ARTICLE_LABORATOIRE.unite_approvisionnement_id, nombre_conditionnement_approvisionnement = w_GE_ARTICLE_LABORATOIRE.nombre_conditionnement_approvisionnement, prix_unitaire_en_cours = w_GE_ARTICLE_LABORATOIRE.prix_unitaire_en_cours, ucd_id = w_GE_ARTICLE_LABORATOIRE.ucd_id, code_ucd13 = w_GE_ARTICLE_LABORATOIRE.code_ucd13, lpp_id = w_GE_ARTICLE_LABORATOIRE.lpp_id FROM w_GE_ARTICLE_LABORATOIRE WHERE t_article_fournisseur.code_original = w_GE_ARTICLE_LABORATOIRE.code_original AND ( t_article_fournisseur.article_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.article_id OR t_article_fournisseur.fournisseur_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.fournisseur_id OR t_article_fournisseur.fournisseur_distributeur_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.fournisseur_distributeur_id OR t_article_fournisseur.est_fournisseur_principal IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.est_fournisseur_principal OR t_article_fournisseur.code_reference_fournisseur IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.code_reference_fournisseur OR t_article_fournisseur.texte_reference_fournisseur IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.texte_reference_fournisseur OR t_article_fournisseur.code_cip IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.code_cip OR t_article_fournisseur.code_cahpp IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.code_cahpp OR t_article_fournisseur.unite_approvisionnement_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.unite_approvisionnement_id OR t_article_fournisseur.nombre_conditionnement_approvisionnement IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.nombre_conditionnement_approvisionnement OR t_article_fournisseur.prix_unitaire_en_cours IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.prix_unitaire_en_cours OR t_article_fournisseur.ucd_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.ucd_id OR t_article_fournisseur.code_ucd13 IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.code_ucd13 OR t_article_fournisseur.lpp_id IS DISTINCT FROM w_GE_ARTICLE_LABORATOIRE.lpp_id ) ; DELETE FROM eco.t_article_fournisseur WHERE code_original NOT IN (SELECT code_original FROM w_GE_ARTICLE_LABORATOIRE) ; -- Suppression doublons DELETE FROM eco.t_article_fournisseur USING ( SELECT fournisseur_id, article_id, count(*), (MAX(ARRAY[BFABRICANTP,EIDARTICLELABORATOIRE]))[2]::text AS keep_code_original FROM eco.t_article_fournisseur JOIN prod_winpharm.GE_ARTICLE_LABORATOIRE ON code_original = EIDARTICLELABORATOIRE GROUP BY 1,2 HAVING count(*) > 1 ) subview WHERE t_article_fournisseur.fournisseur_id = subview.fournisseur_id AND t_article_fournisseur.article_id = subview.article_id AND t_article_fournisseur.code_original <> subview.keep_code_original ; ]]> ''; UPDATE w_LIGNE SET ETAUXTVA = TH_TAUXTVA.ETAUXTVA FROM prod_winpharm.GE_COMPTE JOIN prod_winpharm.TH_TAUXTVA ON GE_COMPTE.EIDTAUXTVA = TH_TAUXTVA.EIDTAUXTVA WHERE w_LIGNE.lf_EIDCOMPTE = GE_COMPTE.EIDCOMPTE AND w_LIGNE.ETAUXTVA = 0 ; UPDATE w_LIGNE SET ETAUXTVA = TH_TAUXTVA.ETAUXTVA FROM prod_winpharm.GE_COMPTE JOIN prod_winpharm.TH_TAUXTVA ON GE_COMPTE.EIDTAUXTVA = TH_TAUXTVA.EIDTAUXTVA WHERE w_LIGNE.lc_EIDCOMPTE = GE_COMPTE.EIDCOMPTE AND w_LIGNE.ETAUXTVA = 0 ; UPDATE w_LIGNE SET ETAUXTVA = TH_TAUXTVA.ETAUXTVA FROM prod_winpharm.GE_ARTICLE JOIN prod_winpharm.GE_COMPTE ON GE_ARTICLE.EIDCOMPTE = GE_COMPTE.EIDCOMPTE JOIN prod_winpharm.TH_TAUXTVA ON GE_COMPTE.EIDTAUXTVA = TH_TAUXTVA.EIDTAUXTVA WHERE w_LIGNE.lc_EIDARTICLE = GE_ARTICLE.EIDARTICLE AND w_LIGNE.ETAUXTVA = 0 ; UPDATE w_LIGNE SET ETAUXTVA = 19.6 WHERE ETAUXTVA = 20 AND ec_EDATECOMMANDE <= '20131231' ; UPDATE w_LIGNE SET ETAUXTVA_calc = ETAUXTVA WHERE ETAUXTVA_calc BETWEEN ETAUXTVA - 0.3 AND ETAUXTVA+0.3 AND ETAUXTVA_calc <> ETAUXTVA ; UPDATE w_LIGNE SET ETAUXTVA_calc = CASE WHEN ETAUXTVA_calc BETWEEN 1 AND 3.9 THEN 2.1 WHEN ETAUXTVA_calc BETWEEN 4 AND 7 THEN 5.5 WHEN ETAUXTVA_calc BETWEEN 9 AND 11 THEN 10 WHEN ETAUXTVA_calc BETWEEN 18 AND 21 AND ec_EDATECOMMANDE <= '20131231' THEN 19.6 WHEN ETAUXTVA_calc BETWEEN 18 AND 21 THEN 20 ELSE w_LIGNE.ETAUXTVA_calc END WHERE ETAUXTVA_calc <> 0 AND ETAUXTVA_calc NOT IN (SELECT ETAUXTVA FROM prod_winpharm.TH_TAUXTVA) ; UPDATE w_LIGNE SET ETAUXTVA_calc = ETAUXTVA WHERE ETAUXTVA_calc <> 0 AND ETAUXTVA<> 0 AND ETAUXTVA_calc NOT IN (SELECT ETAUXTVA FROM prod_winpharm.TH_TAUXTVA) ; UPDATE w_ligne SET lc_bsolde = 1 WHERE lc_bsolde = 0 AND ec_bcloture = 1; UPDATE w_ligne SET ll_EQTE = ll_EQTEDEP WHERE ll_EQTEDEP <> ll_EQTE AND ll_EQTEDEP <> 0 AND ll_ETOTALHT <> 0 AND ll_EPXUNITHTUCD <> 0 AND round(ll_EQTEDEP*ll_EPXUNITHTUCD,0) = round(ll_ETOTALHT,0); UPDATE w_ligne SET ll_EQTE = ll_EQTEDEP WHERE ll_EQTEDEP <> ll_EQTE AND ll_EQTEDEP <> 0 AND ll_ETOTALHT <> 0 AND ll_EPXUNITHTCIP <> 0 AND round(ll_EQTEDEP*ll_EPXUNITHTCIP,0) = round(ll_ETOTALHT,0); UPDATE w_ligne SET lf_EQTE = lf_EQTEDEP WHERE lf_EQTEDEP <> lf_EQTE AND lf_EQTEDEP <> 0 AND lf_ETOTALHT <> 0 AND lf_EPXUNITHTUCD <> 0 AND round(lf_EQTEDEP*lf_EPXUNITHTUCD,0) = round(lf_ETOTALHT,0); UPDATE w_ligne SET lf_EQTE = lf_EQTEDEP WHERE lf_EQTEDEP <> lf_EQTE AND lf_EQTEDEP <> 0 AND lf_ETOTALHT <> 0 AND lf_EPXUNITHTCIP <> 0 AND round(lf_EQTEDEP*lf_EPXUNITHTCIP,0) = round(lf_ETOTALHT,0); UPDATE w_ligne SET lc_EQTE = ll_EQTE, lc_ETOTALHT = ll_ETOTALHT, lc_ETOTALTVA = ll_ETOTALTVA, lc_ETOTALTTC = ll_ETOTALTTC, lc_EPXUNITHTCIP = ll_EPXUNITHTCIP, lc_EPXUNITHTUCD = ll_EPXUNITHTUCD, lc_EPXUNITHT = ll_EPXUNITHT, lc_EPXUNITTTC = ll_EPXUNITTTC WHERE LC_BSOLDE = 1 AND ( lc_EQTE <> ll_EQTE OR lc_ETOTALHT <> ll_ETOTALHT OR lc_ETOTALTVA <> ll_ETOTALTVA OR lc_ETOTALTTC <> ll_ETOTALTTC OR lc_EPXUNITHTCIP <> ll_EPXUNITHTCIP OR lc_EPXUNITHTUCD <> ll_EPXUNITHTUCD OR lc_EPXUNITHT <> ll_EPXUNITHT OR lc_EPXUNITTTC <> ll_EPXUNITTTC ) ; UPDATE w_LIGNE SET lc_EIDCOMPTE = lf_EIDCOMPTE WHERE lc_EIDCOMPTE <> lf_EIDCOMPTE AND lf_EIDCOMPTE <> 0; -- Validation commandes SELECT base.cti_disable_index('eco', 'i_commandes_1'); SELECT base.cti_disable_index('eco', 'i_commandes_2'); SELECT base.cti_disable_index('eco', 'i_commandes_3'); SELECT base.cti_disable_index('eco', 'i_commandes_4'); SELECT base.cti_disable_index('eco', 'i_commandes_5'); SELECT base.cti_disable_index('eco', 'i_commandes_6'); SELECT base.cti_disable_index('eco', 'i_commandes_7'); SELECT base.cti_disable_index('eco', 'i_commandes_8'); TRUNCATE eco.p_commandes; INSERT INTO eco.p_commandes( code_original, numero, date_commande, date_engagement, objet, reference, date_livraison_prevue, etat_reception, date_reception, etat_liquidation, fournisseur_id, gestionnaire_id, lieu_commande_id, lieu_facturation_id, lieu_livraison_id, unite_fonctionnelle_id, montant_commande_ht, montant_commande_remise, montant_commande_tva, montant_commande_port, montant_commande_total, montant_liquidation_ht, montant_liquidation_remise, montant_liquidation_tva, montant_liquidation_port, montant_liquidation_total) SELECT ec_EIDENTETE AS code_original, ec_ENOBON AS numero, date(MAX(ec_EDATECOMMANDE)) AS date_commande, date(MAX(CASE WHEN lf_EETAT <> 0 THEN ef_EDATEFACTURATION ELSE ec_EDATECOMMANDE END)) AS date_engagement, substr(MAX(ec_ENOBON) || ' ' || base.cti_group_concat(DISTINCT el_ENOBON) || ' ' || base.cti_group_concat(DISTINCT ef_ENOBON),1,255) AS objet, ''::text AS reference, '20991231'::date AS date_livraison_prevue, CASE WHEN MIN(ll_EETAT) > 0 THEN 'T' WHEN MAX(ll_EETAT) = 0 THEN 'N' ELSE 'P' END AS etat_reception, MAX(el_EDATELIVRAISON) AS date_reception, CASE WHEN MIN(lc_BSOLDE) > 0 AND MIN(lf_EETAT) <> 0 THEN 'T' WHEN MAX(lc_BSOLDE) = 0 THEN 'N' WHEN MAX(lf_EETAT) = 0 THEN 'N' ELSE 'P' END AS etat_liquidation, MAX(COALESCE(t_fournisseurs.oid, 0)) AS fournisseur_id, 0::bigint AS gestionnaire_id, 0::bigint AS lieu_commande_id, 0::bigint AS lieu_facturation_id, MAX(COALESCE(t_lieux_livraison.oid, 0)) AS lieu_livraison_id, 0::bigint AS unite_fonctionnelle_id, SUM(lc_ETOTALHT) AS montant_commande_ht, 0::numeric AS montant_commande_remise, SUM(lc_ETOTALTVA) AS montant_commande_tva, 0::numeric AS montant_commande_port, SUM(lc_ETOTALTTC) AS montant_commande_total, SUM(lf_ETOTALHT) AS montant_liquidation_ht, 0::numeric AS montant_liquidation_remise, SUM(lf_ETOTALTVA) AS montant_liquidation_tva, 0::numeric AS montant_liquidation_port, SUM(lc_ETOTALTTC) AS montant_liquidation_total FROM w_LIGNE LEFT JOIN eco.t_fournisseurs ON t_fournisseurs.code_original = ec_EIDLABORATOIRE LEFT JOIN eco.t_lieux t_lieux_livraison ON ec_EIDETABLISSEMENT = t_lieux_livraison.code_original GROUP BY 1,2 ORDER BY 1; 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'); -- Validation lignes de commandes 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, article_id, unite_approvisionnement_id, compte_id, ucd_id, lpp_id, quantite_approvisionnement, prix_unitaire_approvisionnement, multiplicateur_stockage, quantite_stockage, prix_unitaire_stockage, 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, taux_tva) SELECT lc_EIDLIGNE AS code_original, MAX(p_commandes.oid) AS commande_id, MAX(w_LIGNE_NUMERO.ligne_commande) AS ligne_commande, substr(MAX(ec_ENOBON) || ' ' || base.cti_group_concat(el_ENOBON) || ' ' || base.cti_group_concat(ef_ENOBON),1,255) AS texte, MAX(COALESCE(t_articles.oid, 0)) AS article_id, MAX(COALESCE(t_articles.unite_stockage_id,0)) AS unite_approvisionnement_id, MAX(COALESCE(t_compte.oid, t_articles.compte_id, 0)) AS compte_id, MAX(COALESCE(t_ucd.oid, t_articles.ucd_id, 0)) AS ucd_id, MAX(COALESCE(t_lpp.oid, t_articles.lpp_id, 0)) AS lpp_id, MAX(lc_EQTE) AS quantite_approvisionnement, MAX(lc_EPXUNITHT) AS prix_unitaire_approvisionnement, 0::numeric AS multiplicateur_stockage, 0::numeric AS quantite_stockage, 0::numeric AS prix_unitaire_stockage, MAX(lc_ETOTALHT) AS montant_commande_ht, 0::numeric AS montant_commande_remise, MAX(lc_ETOTALTVA) AS montant_commande_tva, 0::numeric AS montant_commande_port, MAX(lc_ETOTALTTC) AS montant_commande_ttc, SUM(ll_EQTE) AS quantite_livraison_approvisionnement, SUM(ll_EQTE) AS quantite_livraison_stockage, SUM(ll_ETOTALHT) AS montant_livraison_ht, SUM(ll_ETOTALTTC) AS montant_livraison_ttc, MIN(CASE WHEN ll_EETAT = 0 THEN 'N' ELSE 'T' END) AS etat_livraison, SUM(lf_ETOTALHT) AS montant_liquidation_ht, 0::numeric AS montant_liquidation_remise, SUM(lf_ETOTALTVA) AS montant_liquidation_tva, 0::numeric AS montant_liquidation_port, SUM(lf_ETOTALTTC) AS montant_liquidation_ttc, MIN(CASE WHEN lf_EETAT = 0 THEN 'N' ELSE 'T' END) AS etat_liquidation, MAX(ETAUXTVA_calc) AS taux_tva FROM w_LIGNE JOIN eco.p_commandes ON ec_EIDENTETE = p_commandes.code_original JOIN w_LIGNE_NUMERO ON w_LIGNE.lc_EIDLIGNE = w_LIGNE_NUMERO.EIDLIGNE LEFT JOIN eco.t_articles ON w_LIGNE.lc_EIDARTICLE = t_articles.code_original AND t_articles.oid <> 0 LEFT JOIN prod_winpharm.GE_COMPTE ON w_LIGNE.lc_EIDCOMPTE = GE_COMPTE.EIDCOMPTE LEFT JOIN eco.t_compte ON GE_COMPTE.SNUMCOMPTE = t_compte.code_original AND t_compte.oid <> 0 LEFT JOIN base.t_ucd ON 'x' = t_ucd.code AND t_ucd.oid <> 0 LEFT JOIN base.t_lpp ON 'x' = t_lpp.code AND t_lpp.oid <> 0 GROUP BY 1 ; 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'); ]]> EQTEMOUVEMENT AND EANCIENSTOCK - ENOUVEAUSTOCK = EQTEMOUVEMENT; DROP TABLE IF EXISTS w_STOCK; CREATE TEMP TABLE w_STOCK AS SELECT EIDARTICLE, EIDETABLISSEMENT, date_part('year',EDATEMOUVEMENT) * 12 + date_part('month',EDATEMOUVEMENT) AS mois_sequence, MIN(date(date_trunc('month',EDATEMOUVEMENT))) AS date_debut, date(MAX(date(date_trunc('month',EDATEMOUVEMENT))) + interval '1 month' - interval '1 day') AS date_fin, (MIN(ARRAY[EIDMOUVEMENT,EANCIENSTOCK]))[2] AS stock_quantite_debut, 0::numeric AS stock_valeur_debut_ht, 0::numeric AS stock_valeur_debut_ttc, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) THEN EQTEMOUVEMENT ELSE 0 END) AS entree_quantite, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) THEN EMONTANTHT ELSE 0 END) AS entree_montant_ht, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) THEN EMONTANTTTC ELSE 0 END) AS entree_montant_ttc, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) AND EQTEMOUVEMENT > 0 THEN EQTEMOUVEMENT ELSE 0 END) AS entree_quantite_pump, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) AND EQTEMOUVEMENT > 0 THEN EMONTANTHT ELSE 0 END) AS entree_montant_pump_ht, SUM(CASE WHEN ETYPEMOUVEMENT IN (1,3,5,11,12,14) AND EQTEMOUVEMENT > 0 THEN EMONTANTTTC ELSE 0 END) AS entree_montant_pump_ttc, SUM(CASE WHEN ETYPEMOUVEMENT IN (2,4) THEN EQTEMOUVEMENT ELSE 0 END) AS sortie_quantite, SUM(CASE WHEN ETYPEMOUVEMENT IN (2,4) THEN EMONTANTHT ELSE 0 END) AS sortie_montant_ht, SUM(CASE WHEN ETYPEMOUVEMENT IN (2,4) THEN EMONTANTTTC ELSE 0 END) AS sortie_montant_ttc, 0::numeric AS sortie_quantite_valorise, 0::numeric AS sortie_montant_valorise, 0::numeric AS sortie_quantite_non_valorise, 0::numeric AS sortie_montant_non_valorise, 0::numeric AS stock_quantite_fin, 0::numeric AS stock_valeur_fin_ht, 0::numeric AS stock_valeur_fin_ttc, 0::numeric AS pump_ht, 0::numeric AS pump_ttc, '1'::text AS ok_stock_debut, '0'::text AS ok_stock_fin FROM prod_winpharm.GE_MOUVEMENT JOIN w_ETABLISSEMENT ON EIDETABLISSEMENT = EIDETABLISSEMENT_ok WHERE EIDARTICLE <> 0 AND ETYPEMOUVEMENT NOT IN (6) AND date(EDATEMOUVEMENT) <= now() AND ( EANCIENSTOCK <> 0 OR ENOUVEAUSTOCK <> 0 OR EQTEMOUVEMENT <> 0 ) GROUP BY 1,2,3 ; UPDATE w_STOCK SET stock_quantite_fin = stock_quantite_debut + entree_quantite - sortie_quantite, ok_stock_fin = '1' ; CREATE INDEX w_STOCK_i1 ON w_STOCK USING btree (EIDARTICLE); DROP TABLE IF EXISTS w_STOCK_CURRENT; CREATE TEMP TABLE w_STOCK_CURRENT AS SELECT MAX(mois_sequence) AS CURRENT_mois_sequence, MAX(date_debut) AS CURRENT_date_debut, MAX(date_fin) AS CURRENT_date_fin FROM w_STOCK; DROP TABLE IF EXISTS w_calendrier_mois; CREATE TEMP TABLE w_calendrier_mois AS SELECT date_part('year',date_debut) * 12 + date_part('month',date_debut) AS mois_sequence, date_debut, date_fin FROM w_STOCK_CURRENT, base.p_calendrier_mois WHERE date_debut BETWEEN '[ENV_ECO_ANNEEDEBUT]0101' AND CURRENT_date_fin; CREATE INDEX w_calendrier_mois_i1 ON w_calendrier_mois USING btree (mois_sequence); DROP TABLE IF EXISTS w_STOCK_ARTICLE; CREATE TEMP TABLE w_STOCK_ARTICLE AS SELECT EIDARTICLE, EIDETABLISSEMENT, MIN(mois_sequence) AS mois_sequence_debut, MAX(mois_sequence) AS mois_sequence_fin, (MAX(Array[mois_sequence,(stock_quantite_fin)]))[2] AS stock_quantite_fin FROM w_STOCK GROUP BY 1,2 ORDER BY 1 ; UPDATE w_STOCK_ARTICLE SET mois_sequence_fin = CURRENT_mois_sequence FROM w_STOCK_CURRENT WHERE stock_quantite_fin <> 0 AND mois_sequence_fin <> CURRENT_mois_sequence ; CREATE INDEX w_STOCK_ARTICLE_i1 ON w_STOCK_ARTICLE USING btree (EIDARTICLE); INSERT INTO w_STOCK ( EIDARTICLE, EIDETABLISSEMENT, mois_sequence, date_debut, date_fin, stock_quantite_debut, stock_valeur_debut_ht, stock_valeur_debut_ttc, entree_quantite, entree_montant_ht, entree_montant_ttc, entree_quantite_pump, entree_montant_pump_ht, entree_montant_pump_ttc, sortie_quantite, sortie_montant_ht, sortie_montant_ttc, sortie_quantite_valorise, sortie_montant_valorise, sortie_quantite_non_valorise, sortie_montant_non_valorise, stock_quantite_fin, stock_valeur_fin_ht, stock_valeur_fin_ttc, pump_ht, pump_ttc, ok_stock_debut, ok_stock_fin ) SELECT w_STOCK_ARTICLE.EIDARTICLE, w_STOCK_ARTICLE.EIDETABLISSEMENT, w_calendrier_mois.mois_sequence, w_calendrier_mois.date_debut, w_calendrier_mois.date_fin, 0::numeric AS stock_quantite_debut, 0::numeric AS stock_valeur_debut_ht, 0::numeric AS stock_valeur_debut_ttc, 0::numeric AS entree_quantite, 0::numeric AS entree_montant_ht, 0::numeric AS entree_montant_ttc, 0::numeric AS entree_quantite_pump, 0::numeric AS entree_montant_pump_ht, 0::numeric AS entree_montant_pump_ttc, 0::numeric AS sortie_quantite, 0::numeric AS sortie_montant_ht, 0::numeric AS sortie_montant_ttc, 0::numeric AS sortie_quantite_valorise, 0::numeric AS sortie_montant_valorise, 0::numeric AS sortie_quantite_non_valorise, 0::numeric AS sortie_montant_non_valorise, 0::numeric AS stock_quantite_fin, 0::numeric AS stock_valeur_fin_ht, 0::numeric AS stock_valeur_fin_ttc, 0::numeric AS pump_ht, 0::numeric AS pump_ttc, '0'::text AS ok_stock_debut, '0'::text AS ok_stock_fin FROM w_STOCK_ARTICLE JOIN w_calendrier_mois ON w_calendrier_mois.mois_sequence BETWEEN mois_sequence_debut AND mois_sequence_fin LEFT JOIN w_STOCK ON w_STOCK_ARTICLE.EIDARTICLE = w_STOCK.EIDARTICLE AND w_STOCK.mois_sequence = w_calendrier_mois.mois_sequence WHERE w_STOCK.EIDARTICLE IS NULL; --VACUUM ANALYSE w_STOCK; SELECT base.cti_execute( 'UPDATE w_STOCK SET stock_quantite_debut = w_STOCK_BEFORE.stock_quantite_fin, stock_quantite_fin = w_STOCK_BEFORE.stock_quantite_fin - w_STOCK.entree_quantite + w_STOCK.sortie_quantite, ok_stock_fin = ''1'', ok_stock_debut = ''1'' FROM w_STOCK w_STOCK_BEFORE WHERE w_STOCK_BEFORE.EIDARTICLE = w_STOCK.EIDARTICLE AND w_STOCK_BEFORE.mois_sequence = w_STOCK.mois_sequence-1 AND w_STOCK_BEFORE.ok_stock_fin = ''1'' AND w_STOCK.ok_stock_fin = ''0''',100); DROP TABLE IF EXISTS w_STOCK_PUMP; CREATE TEMP TABLE w_STOCK_PUMP AS SELECT w_STOCK.EIDARTICLE, w_STOCK.mois_sequence, w_STOCK.date_fin, base.cti_division( SUM(CASE WHEN w_STOCK.mois_sequence - w_STOCK_before.mois_sequence < 6 THEN w_STOCK_before.entree_montant_pump_ht ELSE 0 END)::numeric , SUM(CASE WHEN w_STOCK.mois_sequence - w_STOCK_before.mois_sequence < 6 THEN w_STOCK_before.entree_quantite_pump ELSE 0 END)::numeric ) AS pump_ht, base.cti_division( SUM(CASE WHEN w_STOCK.mois_sequence - w_STOCK_before.mois_sequence < 6 THEN w_STOCK_before.entree_montant_pump_ttc ELSE 0 END)::numeric , SUM(CASE WHEN w_STOCK.mois_sequence - w_STOCK_before.mois_sequence < 6 THEN w_STOCK_before.entree_quantite_pump ELSE 0 END)::numeric ) AS pump_ttc FROM w_STOCK JOIN w_STOCK w_STOCK_before ON w_STOCK.EIDARTICLE = w_STOCK_before.EIDARTICLE AND w_STOCK.date_fin >= w_STOCK_before.date_fin GROUP BY 1,2,3; CREATE INDEX w_STOCK_PUMP_i1 ON w_STOCK_PUMP USING btree (EIDARTICLE); SELECT base.cti_execute( 'UPDATE w_STOCK_pump SET pump_ht = w_STOCK_pump_BEFORE.pump_ht, pump_ttc = w_STOCK_pump_BEFORE.pump_ttc FROM w_STOCK_pump w_STOCK_pump_BEFORE WHERE w_STOCK_pump_BEFORE.EIDARTICLE = w_STOCK_pump.EIDARTICLE AND w_STOCK_pump_BEFORE.mois_sequence = w_STOCK_pump.mois_sequence-1 AND w_STOCK_pump_BEFORE.pump_ht <> 0 AND w_STOCK_pump_BEFORE.pump_ttc <> 0 AND w_STOCK_pump.pump_ht = 0 AND w_STOCK_pump.pump_ttc = 0 ',100); SELECT base.cti_execute( 'UPDATE w_STOCK_pump SET pump_ht = w_STOCK_pump_AFTER.pump_ht, pump_ttc = w_STOCK_pump_AFTER.pump_ttc FROM w_STOCK_pump w_STOCK_pump_AFTER WHERE w_STOCK_pump_AFTER.EIDARTICLE = w_STOCK_pump.EIDARTICLE AND w_STOCK_pump_AFTER.mois_sequence = w_STOCK_pump.mois_sequence+1 AND w_STOCK_pump_AFTER.pump_ht <> 0 AND w_STOCK_pump_AFTER.pump_ttc <> 0 AND w_STOCK_pump.pump_ht = 0 AND w_STOCK_pump.pump_ttc = 0 ',100); -- utilise le montant_sortie si cela ne suffit pas (pas de commande sur la période remontée) UPDATE w_STOCK_PUMP set pump_ht = base.cti_division(sortie_montant_ht,sortie_quantite), pump_ttc = base.cti_division(sortie_montant_ttc,sortie_quantite) FROM w_stock WHERE w_STOCK_PUMP.pump_ht = 0 AND w_STOCK_PUMP.pump_ttc = 0 AND w_STOCK.EIDARTICLE = w_STOCK_PUMP.EIDARTICLE AND w_STOCK.date_fin = w_STOCK_PUMP.date_fin; UPDATE w_STOCK SET pump_ht = w_STOCK_PUMP.pump_ht, pump_ttc = w_STOCK_PUMP.pump_ttc, stock_valeur_fin_ht = stock_quantite_fin * w_STOCK_PUMP.pump_ht, stock_valeur_fin_ttc = stock_quantite_fin * w_STOCK_PUMP.pump_ttc FROM w_STOCK_PUMP WHERE w_STOCK_PUMP.EIDARTICLE = w_STOCK.EIDARTICLE AND w_STOCK_PUMP.mois_sequence = w_STOCK.mois_sequence; UPDATE w_STOCK SET stock_valeur_debut_ht = stock_quantite_debut * w_STOCK_PUMP.pump_ht, stock_valeur_debut_ttc = stock_quantite_debut * w_STOCK_PUMP.pump_ttc FROM w_STOCK_PUMP WHERE w_STOCK_PUMP.EIDARTICLE = w_STOCK.EIDARTICLE AND w_STOCK_PUMP.mois_sequence = w_STOCK.mois_sequence-1; 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, pump, sortie_quantite, sortie_montant, stock_quantite_fin, stock_valeur_fin) SELECT t_articles.oid AS article_id, date_fin, date_debut, t_articles.ucd_id AS ucd_id, t_articles.lpp_id AS lpp_id, t_articles.compte_id, COALESCE(t_lieux.oid,0) AS lieu_id, 0::bigint AS provider_id, t_articles.fournisseur_principal_id AS fournisseur_id, stock_quantite_debut, stock_valeur_debut_ttc, entree_quantite, entree_montant_ttc, pump_ttc, sortie_quantite, sortie_montant_ttc, stock_quantite_fin, stock_valeur_fin_ttc FROM w_STOCK JOIN eco.t_articles ON EIDARTICLE = t_articles.code_original LEFT JOIN eco.t_lieux ON EIDETABLISSEMENT = t_lieux.code_original WHERE date_debut >= '[ENV_ECO_ANNEEDEBUT]0101' AND ( stock_quantite_debut <> 0 OR entree_quantite <> 0 OR sortie_quantite <> 0 OR stock_quantite_fin <> 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'); ]]> 0 LEFT JOIN eco.t_lieux ON GE_MOUVEMENT.EIDETABLISSEMENT = t_lieux.code_original LEFT JOIN eco.t_fournisseurs ON EIDLABORATOIRE = t_fournisseurs.code_original LEFT JOIN eco.t_compte ON 'x' = t_compte.code_original AND t_compte.oid <> 0 LEFT JOIN base.t_ucd ON 'x' = t_ucd.code AND t_ucd.oid <> 0 LEFT JOIN base.t_lpp ON 'x' = t_lpp.code AND t_lpp.oid <> 0 LEFT JOIN w_STOCK ON GE_MOUVEMENT.EIDARTICLE = w_STOCK.EIDARTICLE AND date(EDATEMOUVEMENT) BETWEEN w_STOCK.date_debut AND w_STOCK.date_fin LEFT JOIN w_MOUVEMENT_commande ON w_MOUVEMENT_commande.EIDMOUVEMENT = GE_MOUVEMENT.EIDMOUVEMENT WHERE EDATEMOUVEMENT >= '[ENV_ECO_ANNEEDEBUT]0101' AND date(EDATEMOUVEMENT) <= now() AND ETYPEMOUVEMENT NOT IN (6) AND EQTEMOUVEMENT <> 0 ; 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'); ]]>