'' AND TPMVT NOT IN (SELECT code_original FROM eco.t_types_mouvements) GROUP BY 1,2,3,4 ; -- Familles INSERT INTO eco.t_familles_articles(code, code_original,texte, texte_court) SELECT CDFAM, CDFAM, LBFAM, LBFAM FROM prod_medicagest.FAM01 WHERE CDFAM NOT IN (SELECT code_original FROM eco.t_familles_articles WHERE code_original IS NOT NULL) ORDER BY CDFAM; -- fournisseurs INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original) SELECT CODEFRS, RSSCL, RSSCL, CODEFRS FROM prod_medicagest.FRS02 LEFT JOIN eco.t_fournisseurs ON (code_original = CODEFRS) WHERE code_original IS NULL AND CODEFRS <> 0 ; UPDATE eco.t_fournisseurs SET texte = FRS02.RSSCL, texte_court = FRS02.RSSCL, siret = FRS02.SIRET, code_comptable = FRS02.COMPTE FROM prod_medicagest.FRS02 WHERE t_fournisseurs.code_original = CODEFRS AND ( t_fournisseurs.texte IS DISTINCT FROM FRS02.RSSCL OR t_fournisseurs.texte_court IS DISTINCT FROM FRS02.RSSCL OR t_fournisseurs.siret IS DISTINCT FROM FRS02.SIRET OR t_fournisseurs.code_comptable IS DISTINCT FROM FRS02.COMPTE ) ; UPDATE eco.t_fournisseurs SET texte = FRS02.RSSCL, texte_court = FRS02.RSSCL, cedex = '', siret = FRS02.SIRET, code_comptable = FRS02.COMPTE FROM prod_medicagest.FRS02 WHERE code_original = CODEFRS AND ( t_fournisseurs.texte IS DISTINCT FROM FRS02.RSSCL OR t_fournisseurs.texte_court IS DISTINCT FROM FRS02.RSSCL OR t_fournisseurs.siret IS DISTINCT FROM FRS02.SIRET OR t_fournisseurs.code_comptable IS DISTINCT FROM FRS02.COMPTE ) ; -- L'adresse n'est pas toujours fournie SELECT base.cti_execute(' INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id) SELECT CODPOS, UPPER(MAX(VILLE)), UPPER(MAX(LEFT(VILLE,50))), MAX(t_departements.oid) FROM prod_medicagest.FRS02 LEFT JOIN base.t_codes_postaux ON CODPOS = t_codes_postaux.code JOIN base.t_departements ON CODPOS NOT LIKE ''97%'' AND substr(CODPOS,1,2) = t_departements.code OR CODPOS LIKE ''97%'' AND substr(CODPOS,1,3) = t_departements.code WHERE t_codes_postaux.oid IS NULL AND length(CODPOS) = 5 GROUP BY 1 ., UPDATE eco.t_fournisseurs SET adresse = trim(ADRS1 || '' '' || ADRS2), code_postal_id = COALESCE(t_codes_postaux.oid,0), ville = COALESCE(FRS02.VILLE,'''') FROM prod_medicagest.FRS02 LEFT JOIN base.t_codes_postaux ON CODPOS = t_codes_postaux.code WHERE code_original = CODEFRS AND ( t_fournisseurs.adresse IS DISTINCT FROM trim(ADRS1 || '' '' || ADRS2) OR t_fournisseurs.code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR t_fournisseurs.ville IS DISTINCT FROM COALESCE(FRS02.VILLE,'''') ) ',1) WHERE ('codpos' IN (SELECT column_name FROM information_schema.columns WHERE table_schema = 'prod_medicagest' AND table_name = 'frs02')) ; -- Types fournisseurs INSERT INTO eco.t_types_fournisseurs(code, texte, texte_court, code_original) SELECT NUMGRAC, NOMGRAC, NOMGRAC, NUMGRAC FROM prod_medicagest.GRACFR WHERE NUMGRAC <> 0 AND NUMGRAC NOT IN (SELECT code_original FROM eco.t_types_fournisseurs) GROUP BY 1,2,3,4 ; UPDATE eco.t_types_fournisseurs SET texte = NOMGRAC, texte_court = NOMGRAC FROM prod_medicagest.GRACFR WHERE code_original = NUMGRAC AND (texte IS DISTINCT FROM NOMGRAC); -- Unités fonctionnelles INSERT INTO eco.t_unites_fonctionnelles(code, texte, texte_court, code_original) SELECT CDSEC, LBSEC, LBSEC, CDSEC FROM prod_medicagest.SEC83 LEFT JOIN eco.t_unites_fonctionnelles ON (code_original = CDSEC) WHERE code_original IS NULL; UPDATE eco.t_unites_fonctionnelles SET texte = LBSEC, texte_court = LBSEC FROM prod_medicagest.SEC83 WHERE code_original = CDSEC AND (texte IS DISTINCT FROM LBSEC); -- Lieux INSERT INTO eco.t_lieux(code, texte, texte_court, code_original) SELECT CDSRV, LBSRV, LBSRV, CDSRV FROM prod_medicagest.SER82 LEFT JOIN eco.t_lieux ON (code_original = CDSRV) WHERE code_original IS NULL; UPDATE eco.t_lieux SET texte = LBSRV, texte_court = LBSRV FROM prod_medicagest.SER82 WHERE code_original = CDSRV AND (texte IS DISTINCT FROM LBSRV); -- UCD --DROP TABLE IF EXISTS w_lpp_ucd; --CREATE TEMP TABLE w_lpp_ucd AS --SELECT -- CDART, -- CASE WHEN LENGTH(CODEUCD) = 7 THEN CODEUCD -- WHEN LENGTH(CODEUCD) = 13 THEN substr(codeucd,6,7) -- ELSE '' END -- AS code, -- LIBEL --FROM prod_medicagest.ART01 -- LEFT JOIN base.t_lpp on CODEUCD = t_lpp.code -- OR substr(CODEUCD,6,7) = t_lpp.code -- LEFT JOIN base.t_ucd on CODEUCD = t_ucd.code -- OR substr(CODEUCD,6,7) = t_ucd.code -- WHERE -- t_ucd.oid IS NULL AND t_lpp.oid is null -- AND LENGTH(CODEUCD) IN (7,13) --; -- ---- LPP --INSERT INTO base.t_lpp (code,texte) --SELECT code, LIBEL FROM w_lpp_ucd WHERE code LIKE '3%' -- AND code NOT IN (SELECT code FROM base.t_lpp) --; -- ---- UCD --INSERT INTO base.t_ucd (code,texte) --SELECT code, LIBEL FROM w_lpp_ucd WHERE code LIKE '9%' -- AND code NOT IN (SELECT code FROM base.t_ucd) --; -- Site INSERT INTO eco.t_sites(code, texte, texte_court, code_original) SELECT CDSEC, LBSEC, LBSEC, CDSEC FROM prod_medicagest.SEC83 LEFT JOIN eco.t_sites ON (code_original = CDSEC) WHERE code_original IS NULL; UPDATE eco.t_sites SET texte = LBSEC, texte_court = LBSEC FROM prod_medicagest.SEC83 WHERE code_original = CDSEC AND (texte IS DISTINCT FROM LBSEC); ]]> '' ; UPDATE eco.t_categories_articles SET texte = LBTHP, texte_court = LEFT(LBTHP,50) FROM prod_medicagest.THP84 WHERE CDTHP <> '' AND code_original = CDTHP AND (texte IS DISTINCT FROM LBTHP) OR (texte_court IS DISTINCT FROM LEFT(LBTHP,50)); -- Gestionnaires -- Achats INSERT INTO eco.t_gestionnaires(code_original, code, texte, texte_court) SELECT replace(UTILISATEUR,' ','_'), replace(UTILISATEUR,' ','_'), UTILISATEUR, UTILISATEUR FROM prod_medicagest.MVT05 WHERE replace(UTILISATEUR,' ','_') NOT IN (SELECT code_original FROM eco.t_gestionnaires) GROUP BY 1,2,3,4 ; -- Unites de stockage INSERT INTO eco.t_unites(code, code_original, texte, texte_court) SELECT CDFRM, CDFRM, LBFRM, LBFRM FROM prod_medicagest.FRM81 WHERE CDFRM NOT IN (SELECT code_original from eco.t_unites) GROUP BY 1,2,3,4; -- comptes INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT CDCPT::text, COALESCE(LBCPT), LEFT(COALESCE(LBCPT),40), CDCPT FROM prod_medicagest.CPT03 WHERE CDCPT <> 0 AND CDCPT::text NOT IN (SELECT code_original FROM eco.t_compte) GROUP BY 1,2,3,4 ; INSERT INTO eco.t_compte(code, texte, texte_court, code_original) SELECT MVT05.CDCPT, COALESCE(LBCPT,MVT05.CDCPT), LEFT(COALESCE(LBCPT,MVT05.CDCPT),40), MVT05.CDCPT FROM prod_medicagest.MVT05 LEFT JOIN prod_medicagest.CPT03 ON CPT03.CDCPT = MVT05.CDCPT WHERE MVT05.CDCPT <> '' AND MVT05.CDCPT NOT IN (SELECT code_original FROM eco.t_compte) GROUP BY 1,2,3,4 ; -- ATC / Cladimed INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court, est_cladimed ) SELECT CDTHDM, CDTHDM, LBTHDM, LBTHDM, 1 FROM prod_medicagest.THP90 JOIN ( SELECT MERE AS ROOT_CODE, 1 AS cladimed FROM prod_medicagest.THP90 ) sub ON MERE = ROOT_CODE LEFT JOIN eco.t_classification_atc ON (code_original = CDTHDM) WHERE MERE IS NOT NULL AND code_original IS NULL GROUP BY 1,2,3,4 ; UPDATE eco.t_classification_atc SET texte = LBTHDM, texte_court = LBTHDM, est_cladimed = cladimed FROM prod_medicagest.THP90 JOIN ( SELECT MERE AS ROOT_CODE, 1 AS cladimed FROM prod_medicagest.THP90 ) sub ON MERE = ROOT_CODE WHERE code_original = CDTHDM AND (texte IS DISTINCT FROM LBTHDM); -- Standard ATC SELECT eco.cti_reorganize_classification_atc(); -- articles INSERT INTO eco.t_articles(code, texte, texte_court, code_original) SELECT CDART, LIBEL, substr(LIBEL,1,50), CDART FROM prod_medicagest.ART01 LEFT JOIN eco.t_articles ON (code_original = CDART) WHERE code_original IS NULL; UPDATE eco.t_articles SET texte = LIBEL, texte_court = substr(LIBEL,1,50), taux_tva_en_cours = CASE CDTVA WHEN 1 THEN 0 WHEN 2 THEN 2.1 WHEN 3 THEN 5.5 WHEN 4 THEN 20 WHEN 5 THEN 10 ELSE 0 END FROM prod_medicagest.ART01 WHERE code_original = CDART AND ( texte IS DISTINCT FROM LIBEL OR texte_court IS DISTINCT FROM substr(LIBEL,1,50) OR taux_tva_en_cours IS DISTINCT FROM CASE CDTVA WHEN 1 THEN 0 WHEN 2 THEN 2.1 WHEN 3 THEN 5.5 WHEN 4 THEN 20 WHEN 5 THEN 10 ELSE 0 END ) ; 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), classification_atc_id = COALESCE(t_classification_atc.oid,0), unite_stockage_id = COALESCE(t_unites_stockage.oid,0), unite_distribution_id = COALESCE(t_unites_distribution.oid,0), lpp_id = COALESCE(t_lpp.oid,0), ucd_id = COALESCE(t_ucd.oid,0), gere_en_stock = CASE WHEN NONSTOCKE = 1 THEN 0 ELSE 1 END FROM prod_medicagest.ART01 LEFT JOIN eco.t_familles_articles ON CDFAM = t_familles_articles.code_original --LEFT JOIN eco.t_sous_familles_articles ON NUM_TYP_PROD2 = upper(t_sous_familles_articles.code_original) --LEFT JOIN eco.t_types_articles ON TYPEART = t_types_articles.code_original LEFT JOIN eco.t_classification_atc ON CDTHP = upper(t_classification_atc.code_original) LEFT JOIN eco.t_categories_articles ON CDTHP = t_categories_articles.code_original --LEFT JOIN eco.t_sous_categories_articles ON REFCAT = t_sous_categories_articles.code_original LEFT JOIN eco.t_unites t_unites_stockage ON CDFRM = t_unites_stockage.code_original LEFT JOIN eco.t_unites t_unites_distribution ON CDFRM = t_unites_distribution.code_original LEFT JOIN base.t_lpp ON CASE WHEN LENGTH(CODEUCD) = 7 THEN CODEUCD WHEN LENGTH(CODEUCD) = 13 THEN substr(CODEUCD,6,7) ELSE '' END = t_lpp.code LEFT JOIN base.t_ucd ON CASE WHEN LENGTH(CODEUCD) = 7 THEN CODEUCD WHEN LENGTH(CODEUCD) = 13 THEN substr(CODEUCD,6,7) ELSE '' END = t_ucd.code WHERE t_articles.code_original = CDART 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.classification_atc_id IS DISTINCT FROM COALESCE(t_classification_atc.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) OR t_articles.gere_en_stock IS DISTINCT FROM CASE WHEN NONSTOCKE = 1 THEN '0' ELSE '1' END OR lpp_id IS DISTINCT FROM COALESCE(t_lpp.oid,0) OR ucd_id IS DISTINCT FROM COALESCE(t_ucd.oid,0) ); UPDATE eco.t_articles SET compte_id = compte_oid FROM ( SELECT CDART, MAX(t_compte.oid) as compte_oid FROM prod_medicagest.ART01 JOIN eco.t_compte ON CDCPT = code_original GROUP BY 1 ) sub WHERE CDART = code_original AND compte_id IS DISTINCT FROM compte_oid ; UPDATE eco.t_articles SET compte_id = compte_oid FROM ( SELECT CDART, (MAX(ARRAY[DATEM,oid::text]))[2]::bigint as compte_oid FROM prod_medicagest.MVT05 JOIN eco.t_compte ON CDCPT = code_original GROUP BY 1 ) sub WHERE CDART = code_original AND compte_id = 0 AND compte_id IS DISTINCT FROM compte_oid ; UPDATE eco.t_articles SET ref_fournisseur_id[1] = t_fournisseurs.oid, ref_fournisseur_texte[1] = LIBEL || ' (' || COALESCE(REFCAT,CDART) || ')' FROM prod_medicagest.ART01 JOIN eco.t_fournisseurs ON CDFRS = t_fournisseurs.code WHERE t_articles.code = CDART ; -- réplication ref fournisseur sur autres fournisseurs du produit et fournisseur principal (dernier) UPDATE eco.t_articles SET fournisseur_principal_id = last_fou, ref_fournisseur_id = ref_ids, ref_fournisseur_texte = ref_textes FROM ( SELECT article_id, article_code, ref_fournisseur_id, ref_fournisseur_texte, array_agg(fournisseur_id) AS ref_ids, array_agg(ref_fournisseur_texte[1]) as ref_textes, (MAX(ARRAY[date_commande::text, fournisseur_id::text]))[2]::bigint AS last_fou FROM ( SELECT article_id, t_articles.code AS article_code, t_articles.texte AS article_texte, ref_fournisseur_id, ref_fournisseur_texte, fournisseur_id, max(date_commande) AS date_commande FROM eco.p_commandes JOIN eco.p_lignes_commandes ON commande_id = p_commandes.oid JOIN eco.t_articles on article_id = t_articles.oid GROUP BY 1,2,3,4,5,6 ) sub GROUP BY 1,2,3,4 ORDER BY 1 ) sub WHERE article_id = t_articles.oid ; DROP TABLE IF EXISTS w_article_fournisseur; CREATE TEMP TABLE w_article_fournisseur AS SELECT CDART||'|'||CODEFRS AS code_original, MAX(t_articles.oid) AS article_id, MAX(t_fournisseurs.oid) AS fournisseur_id, (MAX(Array[DATEC::text,FLG10.REFCAT]))[2]::text AS code_reference_fournisseur, (MAX(Array[DATEC::text,FLG10.LIBEL]))[2]::text AS texte_reference_fournisseur, ''::text AS code_cip, ''::text AS code_cahpp, 0::bigint AS unite_approvisionnement_id, (MAX(Array[DATEC::text,base.cti_to_number(CONDT)::text]))[2]::numeric AS nombre_conditionnement_approvisionnement, (MAX(Array[DATEC::text,base.cti_division(base.cti_to_number(PRIXC), base.cti_to_number(CONDT))::text]))[2]::numeric AS prix_unitaire_en_cours, '0'::text AS est_fournisseur_principal, 0::bigint AS fournisseur_distributeur_id, 0::bigint AS ucd_id, 0::bigint AS lpp_id, ''::text AS code_ucd13, MAX(CDART) AS CDART, MAX(CODEFRS) AS CODEFRS, ''::text AS code_ucd FROM prod_medicagest.FCT10 JOIN prod_medicagest.FLG10 ON FCT10.CODEFRS || FCT10.NOCOM || NUMBL = FRSCOMBL JOIN eco.t_articles ON t_articles.code_original = CDART JOIN eco.t_fournisseurs ON t_fournisseurs.code_original = CODEFRS GROUP BY 1 ; INSERT INTO w_article_fournisseur SELECT CDART||'|'||CDFRS AS code_original, MAX(t_articles.oid) AS article_id, MAX(t_fournisseurs.oid) AS fournisseur_id, (MAX(Array[DATEC::text,REFCAT]))[2]::text AS code_reference_fournisseur, (MAX(Array[DATEC::text,LIBEL]))[2]::text AS texte_reference_fournisseur, ''::text AS code_cip, ''::text AS code_cahpp, 0::bigint AS unite_approvisionnement_id, (MAX(Array[DATEC::text,base.cti_to_number(CONDT)::text]))[2]::numeric AS nombre_conditionnement_approvisionnement, (MAX(Array[DATEC::text,base.cti_division(base.cti_to_number(PRIXB), base.cti_to_number(CONDT))::text]))[2]::numeric AS prix_unitaire_en_cours, '0'::text AS est_fournisseur_principal, 0::bigint AS fournisseur_distributeur_id, 0::bigint AS ucd_id, 0::bigint AS lpp_id, ''::text AS code_ucd13, MAX(CDART) AS CDART, MAX(CDFRS) AS CODEFRS, ''::text AS code_ucd FROM prod_medicagest.ART01 JOIN eco.t_articles ON t_articles.code_original = CDART JOIN eco.t_fournisseurs ON t_fournisseurs.code_original = CDFRS WHERE (CDART||'|'||CDFRS) NOT IN (SELECT code_original FROM w_article_fournisseur) GROUP BY 1 ; UPDATE w_article_fournisseur SET code_reference_fournisseur = CASE WHEN w_article_fournisseur.CODEFRS = ART01.CDFRS THEN ART01.REFCAT ELSE w_article_fournisseur.code_reference_fournisseur END, texte_reference_fournisseur = CASE WHEN w_article_fournisseur.CODEFRS = ART01.CDFRS THEN ART01.LIBEL ELSE w_article_fournisseur.texte_reference_fournisseur END, nombre_conditionnement_approvisionnement = CASE WHEN w_article_fournisseur.CODEFRS = ART01.CDFRS THEN base.cti_to_number(ART01.CONDT) ELSE w_article_fournisseur.nombre_conditionnement_approvisionnement END, prix_unitaire_en_cours = CASE WHEN w_article_fournisseur.CODEFRS = ART01.CDFRS THEN base.cti_division(base.cti_to_number(ART01.PRIXB), base.cti_to_number(ART01.CONDT)) ELSE w_article_fournisseur.prix_unitaire_en_cours END, code_ucd = CASE WHEN length(ART01.CODEUCD) = 7 THEN ART01.CODEUCD WHEN length(ART01.CODEUCD) = 13 AND ART01.CODEUCD LIKE '34008%' THEN substr(ART01.CODEUCD,6) ELSE '' END, code_ucd13 = CASE WHEN length(ART01.CODEUCD) = 13 AND ART01.CODEUCD LIKE '34008%' THEN ART01.CODEUCD ELSE '' END, code_cip = CASE WHEN length(ART01.CDART) = 13 AND ART01.CDART LIKE '34009%' THEN ART01.CDART WHEN length(ART01.CODEUCD) = 13 AND ART01.CODEUCD LIKE '34009%' THEN ART01.CODEUCD WHEN length(ART01.REFCAT) = 13 AND ART01.REFCAT LIKE '34009%' THEN ART01.REFCAT WHEN length(ART01.CDART) = 7 AND CODEUCD <> '' AND base.cti_to_number(ART01.CDART)::text = ART01.CDART THEN ART01.CDART ELSE '' END, est_fournisseur_principal = CASE WHEN w_article_fournisseur.CODEFRS = ART01.CDFRS THEN '1' ELSE '0' END FROM prod_medicagest.ART01 WHERE ART01.CDART = w_article_fournisseur.CDART ; UPDATE w_article_fournisseur SET ucd_id = t_ucd.oid FROM base.t_ucd WHERE code_ucd = t_ucd.code ; INSERT INTO eco.t_article_fournisseur( code_original, article_id, fournisseur_id, code_reference_fournisseur, texte_reference_fournisseur, code_cip, code_cahpp, unite_approvisionnement_id, nombre_conditionnement_approvisionnement, prix_unitaire_en_cours, est_fournisseur_principal, fournisseur_distributeur_id, ucd_id, lpp_id, code_ucd13 ) SELECT code_original, article_id, fournisseur_id, code_reference_fournisseur, texte_reference_fournisseur, code_cip, code_cahpp, unite_approvisionnement_id, nombre_conditionnement_approvisionnement, prix_unitaire_en_cours, est_fournisseur_principal, fournisseur_distributeur_id, ucd_id, lpp_id, code_ucd13 FROM w_article_fournisseur WHERE w_article_fournisseur.code_original NOT IN (SELECT code_original FROM eco.t_article_fournisseur) ; UPDATE eco.t_article_fournisseur SET article_id = w_article_fournisseur.article_id, fournisseur_id = w_article_fournisseur.fournisseur_id, code_reference_fournisseur = w_article_fournisseur.code_reference_fournisseur, texte_reference_fournisseur = w_article_fournisseur.texte_reference_fournisseur, code_cip = w_article_fournisseur.code_cip, code_cahpp = w_article_fournisseur.code_cahpp, unite_approvisionnement_id = w_article_fournisseur.unite_approvisionnement_id, nombre_conditionnement_approvisionnement = w_article_fournisseur.nombre_conditionnement_approvisionnement, prix_unitaire_en_cours = w_article_fournisseur.prix_unitaire_en_cours, est_fournisseur_principal = w_article_fournisseur.est_fournisseur_principal, fournisseur_distributeur_id = w_article_fournisseur.fournisseur_distributeur_id, ucd_id = w_article_fournisseur.ucd_id, lpp_id = w_article_fournisseur.lpp_id, code_ucd13 = w_article_fournisseur.code_ucd13 FROM w_article_fournisseur WHERE w_article_fournisseur.code_original = t_article_fournisseur.code_original AND ( t_article_fournisseur.article_id IS DISTINCT FROM w_article_fournisseur.article_id OR t_article_fournisseur.fournisseur_id IS DISTINCT FROM w_article_fournisseur.fournisseur_id OR t_article_fournisseur.code_reference_fournisseur IS DISTINCT FROM w_article_fournisseur.code_reference_fournisseur OR t_article_fournisseur.texte_reference_fournisseur IS DISTINCT FROM w_article_fournisseur.texte_reference_fournisseur OR t_article_fournisseur.code_cip IS DISTINCT FROM w_article_fournisseur.code_cip OR t_article_fournisseur.code_cahpp IS DISTINCT FROM w_article_fournisseur.code_cahpp OR t_article_fournisseur.unite_approvisionnement_id IS DISTINCT FROM w_article_fournisseur.unite_approvisionnement_id OR t_article_fournisseur.nombre_conditionnement_approvisionnement IS DISTINCT FROM w_article_fournisseur.nombre_conditionnement_approvisionnement OR t_article_fournisseur.prix_unitaire_en_cours IS DISTINCT FROM w_article_fournisseur.prix_unitaire_en_cours OR t_article_fournisseur.est_fournisseur_principal IS DISTINCT FROM w_article_fournisseur.est_fournisseur_principal OR t_article_fournisseur.fournisseur_distributeur_id IS DISTINCT FROM w_article_fournisseur.fournisseur_distributeur_id OR t_article_fournisseur.ucd_id IS DISTINCT FROM w_article_fournisseur.ucd_id OR t_article_fournisseur.lpp_id IS DISTINCT FROM w_article_fournisseur.lpp_id OR t_article_fournisseur.code_ucd13 IS DISTINCT FROM w_article_fournisseur.code_ucd13 ) ; ]]> '2099-12-31' THEN 'T' ELSE 'N' END AS etat_reception, MAX(date(COALESCE(NULLIF(DATEL,''),'2099-12-31'))) AS date_reception, CASE WHEN MAX(COALESCE(NOFCT,'')) = '' THEN 'N' ELSE 'T' END AS etat_liquidation, MAX(COALESCE(t_fournisseurs.oid, 0)) AS fournisseur_id, MAX(COALESCE(t_gestionnaires.oid,0)) AS gestionnaire_id, 0::bigint AS lieu_commande_id, MAX(COALESCE(t_lieux_facturation.oid,0)) AS lieu_facturation_id, MAX(COALESCE(t_lieux_facturation.oid,0)) AS lieu_livraison_id, 0::bigint AS unite_fonctionnelle_id, MAX(COALESCE(t_sites.oid,0)) AS site_id, 0::numeric AS montant_commande_ht, (MAX(ARRAY[COALESCE(NULLIF(DATEREC,''),'2099-12-31'),MTREMISE]))[2]::numeric AS montant_commande_remise, 0::numeric AS montant_commande_tva, (MAX(ARRAY[COALESCE(NULLIF(DATEREC,''),'2099-12-31'),FRAISHT]))[2]::numeric AS montant_commande_port, 0::numeric AS montant_commande_total, 0::numeric AS montant_liquidation_ht, 0::numeric AS montant_liquidation_remise, 0::numeric AS montant_liquidation_tva, 0::numeric AS montant_liquidation_port, 0::numeric AS montant_liquidation_total FROM prod_medicagest.FCT10 LEFT JOIN eco.t_fournisseurs ON t_fournisseurs.code_original = CODEFRS LEFT JOIN eco.t_lieux t_lieux_commande ON t_lieux_commande.code_original = 0 LEFT JOIN eco.t_lieux t_lieux_livraison ON t_lieux_livraison.code_original = 0 LEFT JOIN eco.t_lieux t_lieux_facturation ON t_lieux_facturation.code_original = 0 LEFT JOIN eco.t_gestionnaires ON t_gestionnaires.code = 0 LEFT JOIN eco.t_sites ON t_sites.code_original = 0 WHERE DATEC >= '2015-01-01' GROUP BY 1,2,3,4,5,6 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'); 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'); DROP TABLE IF EXISTS w_FLG10; CREATE TEMP TABLE w_FLG10 AS SELECT NOCOM, rank() OVER (PARTITION BY NOCOM ORDER BY FLCLEUNIK) AS NOLIG, FLCLEUNIK, flg10.CDART, flg10.LIBEL, flg10.QTCOM::numeric, PRIXC::numeric, flg10.CONDT::numeric, QTLIV::numeric, flg10.PRIXB::numeric, FLG10.SAISIE, MNTTTC::numeric, MVCLEUNIK, flg10.REFCAT, FRSCOMBL, REMISEL, MTREMISEL, COALESCE(DATEF,'20991231') AS DATEF, CASE WHEN MNTTTC::numeric != 0 THEN base.cti_division(MNTTTC::numeric,QTLIV::numeric*flg10.PRIXB::numeric)*flg10.QTCOM::numeric*flg10.PRIXB::numeric - flg10.QTCOM::numeric*flg10.PRIXB::numeric + MNTREMISE::numeric ELSE 0 END AS MNTTVA, CASE WHEN MNTTTC::numeric != 0 THEN MNTTTC::numeric - (flg10.QTCOM::numeric*flg10.PRIXB::numeric) ELSE 0 END AS MNTTVAL, CASE WHEN MNTTTC::numeric != 0 THEN MNTREMISE::numeric ELSE flg10.QTCOM::numeric*flg10.PRIXB::numeric END AS MNTREMISE, RIGHT(FRSCOMBL,-8) AS NUMLIV, cdtva FROM prod_medicagest.FLG10 JOIN ( SELECT CODEFRS, NOCOM, NUMBL, MAX(DATEF) AS DATEF FROM prod_medicagest.FCT10 GROUP BY 1,2,3 ) FCT10 ON FCT10.CODEFRS || FCT10.NOCOM || NUMBL = FRSCOMBL LEFT JOIN prod_medicagest.art01 ON flg10.cdart = art01.cdart ; VACUUM ANALYSE w_FLG10; -- Quand la quantité livrée est supérieure à la quantité commandée, il faut prendre la quantité livrée UPDATE w_FLG10 SET QTCOM = QTLIV, MNTTVA = CASE WHEN MNTTTC::numeric != 0 THEN base.cti_division(MNTTTC::numeric,QTLIV::numeric*PRIXB::numeric)*QTLIV::numeric*PRIXB::numeric - QTLIV::numeric*PRIXB::numeric + MNTREMISE::numeric ELSE 0 END, MNTTVAL = CASE WHEN MNTTTC::numeric != 0 THEN MNTTTC::numeric - (QTLIV::numeric*PRIXB::numeric) ELSE 0 END, MNTREMISE = CASE WHEN MNTTTC::numeric != 0 THEN MNTREMISE::numeric ELSE QTLIV::numeric*PRIXB::numeric END WHERE QTCOM < QTLIV ; CREATE INDEX mvtcleunik_i ON w_FLG10 using btree(MVCLEUNIK); 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_tva, montant_livraison_ttc, etat_livraison, montant_liquidation_ht, montant_liquidation_remise, montant_liquidation_tva, montant_liquidation_port, montant_liquidation_ttc, etat_liquidation) SELECT FLCLEUNIK AS code_original, COALESCE(p_commandes.oid,0) AS commande_id, NOLIG AS ligne_commande, LIBEL AS texte, COALESCE(t_articles.oid, 0) AS article_id, 0::bigint AS unite_approvisionnement_id, compte_id, --possibilite de remonter le compte present dans le reglement COALESCE(t_ucd.oid, t_articles.ucd_id, 0) AS ucd_id, COALESCE(t_lpp.oid, t_articles.lpp_id, 0) AS lpp_id, QTCOM * CONDT AS quantite_approvisionnement, PRIXB AS prix_unitaire_approvisionnement, CONDT AS multiplicateur_stockage, QTLIV AS quantite_stockage, PRIXC AS prix_unitaire_stockage, CASE WHEN PRIXB::numeric <> 0 THEN QTCOM::numeric*PRIXB::numeric ELSE QTCOM::numeric*PRIXC::numeric END AS montant_commande_ht, MNTREMISE AS montant_commande_remise, MNTTVA AS montant_commande_tva, 0::numeric AS montant_commande_port, CASE WHEN mntttc::numeric = 0 THEN prixc::numeric * (1 + (CASE CDTVA WHEN 1 THEN 0 WHEN 2 THEN 2.1 WHEN 3 THEN 5.5 WHEN 4 THEN 20 WHEN 5 THEN 10 ELSE 0 END) * 0.01) * QTCOM ELSE base.cti_division(MNTTTC,QTLIV*PRIXB)*QTCOM*PRIXB END AS montant_commande_ttc, QTLIV AS quantite_livraison_approvisionnement, QTLIV AS quantite_livraison_stockage, QTLIV*PRIXB AS montant_livraison_ht, CASE WHEN QTLIV != 0 THEN MNTTVAL ELSE 0 END AS montant_livraison_tva, CASE WHEN QTLIV != 0 THEN MNTTTC ELSE 0 END AS montant_livraison_ttc, CASE WHEN QTLIV = 0 THEN 'N' WHEN QTLIV = QTCOM THEN 'T' WHEN QTLIV <> QTCOM THEN 'P' END AS etat_livraison, CASE WHEN NULLIF(DATEF,'') IS NOT NULL THEN QTLIV*PRIXB ELSE 0 END as montant_liquidation_ht, CASE WHEN NULLIF(DATEF,'') IS NOT NULL THEN MNTREMISE ELSE 0 END as montant_liquidation_remise, CASE WHEN NULLIF(DATEF,'') IS NOT NULL THEN MNTTVAL ELSE 0 END as montant_liquidation_tva, 0::numeric AS montant_liquidation_port, CASE WHEN NULLIF(DATEF,'') IS NOT NULL THEN MNTTTC END AS montant_liquidation_ttc, CASE WHEN NULLIF(DATEF,'') IS NOT NULL THEN 'T' ELSE 'N' END AS etat_liquidation FROM w_FLG10 JOIN eco.p_commandes ON NOCOM = p_commandes.code_original LEFT JOIN eco.t_articles ON CDART = t_articles.code_original AND t_articles.oid != 0 LEFT JOIN base.t_ucd ON ucd_id = t_ucd.oid AND t_ucd.oid != 0 LEFT JOIN base.t_lpp ON lpp_id = t_lpp.oid AND t_lpp.oid != 0 ; 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'); -- Taux tva selon article UPDATE eco.p_lignes_commandes SET taux_tva = t_articles.taux_tva_en_cours FROM eco.t_articles WHERE article_id = t_articles.oid AND p_lignes_commandes.taux_tva = 0 ; DROP TABLE IF EXISTS W_COM_TOT; CREATE TEMP TABLE w_COM_TOT AS SELECT commande_id, SUM(p_lignes_commandes.montant_commande_ht) AS montant_commande_ht, SUM(p_lignes_commandes.montant_commande_remise) AS montant_commande_remise, SUM(p_lignes_commandes.montant_commande_tva) AS montant_commande_tva, SUM(p_lignes_commandes.montant_commande_ttc) AS montant_commande_total, SUM(p_lignes_commandes.montant_liquidation_ht) AS montant_liquidation_ht, SUM(p_lignes_commandes.montant_liquidation_remise) AS montant_liquidation_remise, SUM(p_lignes_commandes.montant_liquidation_tva) AS montant_liquidation_tva, SUM(p_lignes_commandes.montant_liquidation_ttc) AS montant_liquidation_total FROM eco.p_lignes_commandes GROUP BY 1 ; VACUUM ANALYSE w_COM_TOT; CREATE INDEX commande_id_i ON w_COM_TOT using btree(commande_id); -- maj des commandes UPDATE eco.p_commandes SET montant_commande_ht = w_COM_TOT.montant_commande_ht, montant_commande_remise = w_COM_TOT.montant_commande_remise, montant_commande_tva = w_COM_TOT.montant_commande_tva, montant_commande_total = w_COM_TOT.montant_commande_total, montant_liquidation_ht = w_COM_TOT.montant_liquidation_ht, montant_liquidation_remise = w_COM_TOT.montant_liquidation_remise, montant_liquidation_tva = w_COM_TOT.montant_liquidation_tva, montant_liquidation_total = w_COM_TOT.montant_liquidation_total FROM w_COM_TOT WHERE commande_id = p_commandes.oid ; ]]> '''' ',1) WHERE ('sejour' IN (SELECT column_name FROM information_schema.columns WHERE table_schema = 'prod_medicagest' AND table_name = 'mvt05')) ; UPDATE w_MVT05 SET NOCOM = w_FLG10.NOCOM, ligne = w_FLG10.NOLIG FROM w_FLG10 WHERE w_FLG10.MVCLEUNIK = w_MVT05.MVCLEUNIK ; 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, site_id, lpp_id, ucd_id, prix_unitaire, entree_quantite, sortie_quantite, entree_montant_ht, entree_montant, sortie_montant_ht, sortie_montant, prix_unitaire_calcule, stock_quantite_debut, stock_quantite_fin, date_fin, est_premier_jour, est_dernier_jour, no_sejour ) SELECT nextval(' w_MVT_sequence'::regclass) AS sequence, MVCLEUNIK AS code_original, DATEM AS date, --autre possible IPTDAT_0 mais imputation CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN 'E' ELSE 'S' END AS sens_mouvement, COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id, PATIENT || ' (' || t_articles.code || ')' 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,t_articles.fournisseur_principal_id,0) AS fournisseur_id, COALESCE(p_commandes.oid,0) AS commande_id, ligne, COALESCE(t_sites.oid,0) AS site_id, COALESCE(t_articles.lpp_id,0) AS lppid, COALESCE(t_articles.ucd_id,0) AS ucd_id, PUMP AS prix_unitaire, CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END AS entree_quantite, CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END AS sortie_quantite, CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV *(CASE WHEN (TPMVT = 'E' OR TPMVT='e') AND PUMP = 0 THEN PRIXU ELSE PUMP END) - MNTREMISE ELSE 0 END AS entree_montant_ht, CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN (QTUMV *(CASE WHEN (TPMVT = 'E' OR TPMVT='e') AND PUMP = 0 THEN PRIXU ELSE PUMP END) - MNTREMISE)*((100+TVA)/100) ELSE 0 END AS entree_montant, CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN PUMP*(CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END) ELSE 0 END AS sortie_montant_ht, CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN PUMPTTC*(CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END) ELSE 0 END AS sortie_montant, PUMP AS prix_unitaire_calcule, QTEUC AS stock_quantite_debut, QTEUC + CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE -QTUMV END AS stock_quantite_fin, LEAD(DATEM) OVER (PARTITION BY CDART ORDER BY DATEM,MVCLEUNIK) AS date_fin, CASE WHEN (LAG(DATEM) OVER (PARTITION BY CDART ORDER BY DATEM,MVCLEUNIK)) != DATEM THEN 1 ELSE 0 END AS est_premier_jour, CASE WHEN (LEAD(DATEM) OVER (PARTITION BY CDART ORDER BY DATEM,MVCLEUNIK)) != DATEM THEN 1 ELSE 0 END AS est_dernier_jour, SEJOUR FROM w_MVT05 LEFT JOIN eco.t_types_mouvements ON TPMVT = t_types_mouvements.code_original LEFT JOIN eco.t_gestionnaires ON replace(UTILISATEUR,' ','_') = t_gestionnaires.code_original LEFT JOIN eco.t_lieux ON w_MVT05.CDSRV = t_lieux.code_original LEFT JOIN prod_medicagest.SER82 ON w_MVT05.CDSRV = SER82.CDSRV LEFT JOIN eco.t_unites_fonctionnelles ON CDSEC = t_unites_fonctionnelles.code_original LEFT JOIN eco.t_articles ON CDART = t_articles.code_original AND t_articles.oid != 0 LEFT JOIN eco.t_compte ON CDCPT = t_compte.code_original LEFT JOIN eco.t_sites ON w_MVT05.CDSRV = t_sites.code_original LEFT JOIN eco.t_fournisseurs ON CODEFRS = t_fournisseurs.code_original LEFT JOIN eco.p_commandes ON NOCOM = p_commandes.code_original WHERE DATEM >= date('2015-01-01') ORDER BY DATEM,w_MVT05.MVCLEUNIK; -- commandes d'apres texte UPDATE eco.p_mouvements_articles SET commande_id = p_commandes.oid, ligne_commande = p_lignes_commandes.ligne_commande FROM eco.p_lignes_commandes JOIN eco.p_commandes ON commande_id = p_commandes.oid JOIN eco.t_articles ON article_id = t_articles.oid WHERE p_mouvements_articles.texte like 'BL%' AND p_mouvements_articles.commande_id = 0 AND t_articles.code = LEFT(split_part(p_mouvements_articles.texte,'(',2),-1) AND p_commandes.numero = split_part(split_part(p_mouvements_articles.texte,'CDE ',2),' ',1) ; UPDATE eco.p_lignes_commandes SET montant_commande_ttc = montant_commande_ht * base.cti_division(entree_montant,entree_montant_ht) FROM eco.p_mouvements_articles WHERE p_lignes_commandes.commande_id = p_mouvements_articles.commande_id AND p_lignes_commandes.article_id = p_mouvements_articles.article_id AND montant_commande_ht != 0 and montant_commande_ttc = 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'); 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'; ]]> 0) THEN QTUMV ELSE 0 END),0) as entree_quantite, COALESCE(SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV *(CASE WHEN TPMVT = 'E' THEN PRIXU ELSE w_MVT05.PUMP END) ELSE 0 END),0) AS entree_montant_ht, COALESCE(SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END),0) AS sortie_quantite, COALESCE(SUM(w_MVT05.PUMP*CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END),0) AS sortie_montant, MAX(w_ART01.PUMP) AS pump, MAX(w_ART01.QTEUC) - COALESCE(SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END),0) AS stock_quantite_debut, MAX(w_ART01.QTEUC) AS stock_quantite_fin, MAX(w_ART01.QTEUC * w_ART01.PUMP) - COALESCE(SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END),0) * COALESCE((MIN(ARRAY[MVCLEUNIK,w_MVT05.PUMP]))[2],MAX(w_ART01.PUMP)) AS stock_valeur_debut, MAX(w_ART01.QTEUC * w_ART01.PUMPTTC) - COALESCE(SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END),0) * COALESCE((MIN(ARRAY[MVCLEUNIK,w_MVT05.PUMPTTC]))[2],MAX(w_ART01.PUMPTTC)) AS stock_valeur_debut_ttc, MAX(w_ART01.QTEUC * w_ART01.PUMP) AS stock_valeur_fin, MAX(w_ART01.QTEUC * w_ART01.PUMPTTC) AS stock_valeur_fin_ttc FROM w_ART01 LEFT JOIN w_MVT05 ON w_MVT05.CDART = w_ART01.CDART AND date_trunc('month',now() - interval '1 day') = date_trunc('month',DATEM) JOIN eco.t_articles ON w_ART01.CDART = t_articles.code_original LEFT JOIN eco.t_compte ON w_ART01.CDCPT = t_compte.code_original LEFT JOIN eco.t_lieux ON 0 = t_lieux.code_original LEFT JOIN eco.t_sites ON 0 = t_sites.code_original GROUP BY 1,2,3,4,5,6,7,8 ; -- etat des mouvements INSERT INTO eco.p_stock ( article_id, compte_id, ucd_id, lpp_id, site_id, lieu_id, date_debut, date_fin, entree_quantite, entree_montant, sortie_quantite, sortie_montant, pump, stock_quantite_debut, stock_quantite_fin, stock_valeur_debut, stock_valeur_debut_ttc, stock_valeur_fin, stock_valeur_fin_ttc ) SELECT t_articles.oid, COALESCE(t_compte.oid,compte_id, 0) AS compte_id, ucd_id, lpp_id, 0 as site_id, COALESCE(t_lieux.oid,0), date_trunc('month',DATEM), date_trunc('month',DATEM) + interval '1 month' - interval '1 day', SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) as entree_quantite, SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV *(CASE WHEN TPMVT = 'E' THEN PRIXU ELSE PUMP END) ELSE 0 END) AS entree_montant_ht, SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END) AS sortie_quantite, SUM(PUMP*CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV::numeric ELSE QTUMV::numeric END ELSE 0 END) AS sortie_montant, (MAX(ARRAY[MVCLEUNIK,PUMP]))[2] AS pump, (MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] AS stock_quantite_debut, (MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] + SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END) AS stock_quantite_fin, (MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] *(MIN(ARRAY[MVCLEUNIK,PUMP]))[2] AS stock_valeur_debut, (MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] *(MIN(ARRAY[MVCLEUNIK,PUMPTTC]))[2] AS stock_valeur_debut_ttc, ((MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] + SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END))*(MAX(ARRAY[MVCLEUNIK,PUMP]))[2] AS stock_valeur_fin, ((MIN(ARRAY[MVCLEUNIK,QTEUC]))[2] + SUM(CASE WHEN TPMVT IN ('R','E','e') OR (TPMVT = 'C' AND QTUMV > 0) THEN QTUMV ELSE 0 END) - SUM(CASE WHEN TPMVT NOT IN ('R','E','e','C') OR (TPMVT = 'C' AND QTUMV < 0) THEN CASE WHEN TPMVT = 'C' THEN -QTUMV ELSE QTUMV END ELSE 0 END))*(MAX(ARRAY[MVCLEUNIK,PUMPTTC]))[2] AS stock_valeur_fin_ttc FROM w_MVT05 JOIN eco.t_articles ON CDART = t_articles.code_original LEFT JOIN eco.t_compte ON CDCPT = t_compte.code_original LEFT JOIN eco.t_lieux ON 0 = t_lieux.code_original LEFT JOIN eco.t_sites ON 0 = t_sites.code_original WHERE date_trunc('month',DATEM) != date_trunc('month',now()::date) GROUP BY 1,2,3,4,5,6,7,8 ; -- ajout des stocks mensuels manquants SELECT base.cti_execute(' INSERT INTO eco.p_stock ( article_id, compte_id, ucd_id, lpp_id, site_id, lieu_id, date_debut, date_fin, entree_quantite, entree_montant, sortie_quantite, sortie_montant, pump, stock_quantite_debut, stock_quantite_fin, stock_valeur_debut, stock_valeur_debut_ttc, stock_valeur_fin, stock_valeur_fin_ttc ) SELECT p_stock.article_id, p_stock.compte_id, p_stock.ucd_id, p_stock.lpp_id, p_stock.site_id, p_stock.lieu_id, date(date_trunc(''month'',p_stock.date_debut) - interval ''1 month'') AS date_debut, date(date_trunc(''month'',p_stock.date_debut) - interval ''1 day'') AS date_fin, 0 AS entree_quantite, 0 AS entree_montant, 0 AS sortie_quantite, 0 AS sortie_montant, p_stock.pump, p_stock.stock_quantite_debut, p_stock.stock_quantite_debut, p_stock.stock_valeur_debut, p_stock.stock_valeur_debut_ttc, p_stock.stock_valeur_debut, p_stock.stock_valeur_debut_ttc FROM eco.p_stock LEFT JOIN eco.p_stock p_stock_prev ON p_stock.site_id = p_stock_prev.site_id AND p_stock.lieu_id = p_stock_prev.lieu_id AND p_stock.article_id = p_stock_prev.article_id AND date(date_trunc(''month'',p_stock.date_debut) - interval ''1 day'') = p_stock_prev.date_fin WHERE p_stock.date_debut <= now() AND p_stock.date_fin >= ''2015-01-01'' AND p_stock.stock_quantite_debut != 0 AND p_stock_prev.article_id IS NULL ',200) ; SELECT base.cti_execute(' INSERT INTO eco.p_stock ( article_id, compte_id, ucd_id, lpp_id, site_id, lieu_id, date_debut, date_fin, entree_quantite, entree_montant, sortie_quantite, sortie_montant, pump, stock_quantite_debut, stock_quantite_fin, stock_valeur_debut, stock_valeur_debut_ttc, stock_valeur_fin, stock_valeur_fin_ttc ) SELECT p_stock.article_id, p_stock.compte_id, p_stock.ucd_id, p_stock.lpp_id, p_stock.site_id, p_stock.lieu_id, date(date_trunc(''month'',p_stock.date_debut) + interval ''1 month'') AS date_debut, date(date_trunc(''month'',p_stock.date_debut) + interval ''2 month'' - interval ''1 day'') AS date_fin, 0 AS entree_quantite, 0 AS entree_montant, 0 AS sortie_quantite, 0 AS sortie_montant, p_stock.pump, p_stock.stock_quantite_fin, p_stock.stock_quantite_fin, p_stock.stock_valeur_fin, p_stock.stock_valeur_fin_ttc, p_stock.stock_valeur_fin, p_stock.stock_valeur_fin_ttc FROM eco.p_stock LEFT JOIN eco.p_stock p_stock_next ON p_stock.site_id = p_stock_next.site_id AND p_stock.lieu_id = p_stock_next.lieu_id AND p_stock.article_id = p_stock_next.article_id AND p_stock.date_fin + interval ''1 day'' = p_stock_next.date_debut WHERE p_stock.date_debut <= now() AND p_stock.date_fin >= ''2015-01-01'' AND p_stock.stock_quantite_fin != 0 AND p_stock_next.article_id IS NULL ',200) ; 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'); ]]>