'' AND ACCOUNTCODE 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_optim.THP90 -- JOIN ( -- SELECT -- MERE AS ROOT_CODE, -- 1 AS cladimed -- FROM prod_optim.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_optim.THP90 -- JOIN ( -- SELECT -- MERE AS ROOT_CODE, -- 1 AS cladimed -- FROM prod_optim.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 CASE WHEN t_divers.valeur = '1' THEN CATALOGID ELSE CATALOGCODE END, CATALOGNAME, SUBSTR(CATALOGNAME,1,50), CATALOGID FROM prod_optim.CATALOG LEFT JOIN eco.t_articles ON (CATALOGID = code_original) LEFT JOIN eco.t_divers ON t_divers.code = 'OP_CODE' WHERE code_original IS NULL; UPDATE eco.t_articles SET code = CASE WHEN t_divers.valeur = '1' THEN CATALOGID ELSE CATALOGCODE END, texte = CATALOGNAME, texte_court = substr(CATALOGNAME,1,50), taux_tva_en_cours = base.cti_to_number(LISTPRICEVAT) FROM prod_optim.CATALOG LEFT JOIN eco.t_divers ON t_divers.code = 'OP_CODE' WHERE code_original = CATALOGID AND ( t_articles.code IS DISTINCT FROM CASE WHEN t_divers.valeur = '1' THEN CATALOGID ELSE CATALOGCODE END OR t_articles.texte IS DISTINCT FROM CATALOGNAME OR t_articles.texte_court IS DISTINCT FROM substr(CATALOGNAME,1,50) OR t_articles.taux_tva_en_cours IS DISTINCT FROM base.cti_to_number(LISTPRICEVAT) ); 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), compte_id = COALESCE(t_compte.oid,0), fournisseur_principal_id = COALESCE(t_fournisseurs.oid,0) --,gere_en_stock = CASE WHEN NONSTOCKE = 1 THEN 0 ELSE 1 END FROM prod_optim.CATALOG LEFT JOIN eco.t_familles_articles ON 0 = t_familles_articles.code_original LEFT JOIN eco.t_sous_familles_articles ON 0 = upper(t_sous_familles_articles.code_original) LEFT JOIN eco.t_types_articles ON CATALOG.EQUIPMENTCATEGORYID = t_types_articles.code_original LEFT JOIN eco.t_classification_atc ON CODECLADIMED = upper(t_classification_atc.code_original) LEFT JOIN prod_optim.PRODUCTCATEGORY ON CATALOG.PRODUCTCATEGORYID = PRODUCTCATEGORY.PRODUCTCATEGORYID LEFT JOIN eco.t_categories_articles ON ( PRODUCTCATEGORY.PARENTPRODUCTCATEGORYID <> '' AND PRODUCTCATEGORY.PARENTPRODUCTCATEGORYID = t_categories_articles.code_original OR PRODUCTCATEGORY.PARENTPRODUCTCATEGORYID = '' AND PRODUCTCATEGORY.PRODUCTCATEGORYID = t_categories_articles.code_original ) LEFT JOIN eco.t_sous_categories_articles ON CATALOG.PRODUCTCATEGORYID = t_sous_categories_articles.code_original LEFT JOIN eco.t_unites t_unites_stockage ON 0 = t_unites_stockage.code_original LEFT JOIN eco.t_unites t_unites_distribution ON 0 = t_unites_distribution.code_original LEFT JOIN base.t_lpp ON TIPS = t_lpp.code LEFT JOIN base.t_ucd ON 0 = t_ucd.code LEFT JOIN eco.t_fournisseurs ON MANUFID = t_fournisseurs.code_original LEFT JOIN eco.t_compte ON ACCOUNTCODE = t_compte.code_original WHERE t_articles.code_original = CATALOGID 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 lpp_id IS DISTINCT FROM COALESCE(t_lpp.oid,0) OR ucd_id IS DISTINCT FROM COALESCE(t_ucd.oid,0) OR compte_id IS DISTINCT FROM COALESCE(t_compte.oid,0) OR fournisseur_principal_id IS DISTINCT FROM COALESCE(t_fournisseurs.oid,0) ); -- Articles fournisseurs DROP TABLE IF EXISTS w_article_fournisseur; CREATE TEMP TABLE w_article_fournisseur AS SELECT CATALOGSUPPLIER.CATALOGID || CATALOGSUPPLIER.SUPPLIERID AS code_original, MAX(t_articles.oid) AS article_id, MAX(t_fournisseurs.oid) AS fournisseur_id, (MAX(ARRAY[CATALOGSUPPLIER.WHENUPDATED::text,CASE WHEN CATALOGSUPPLIER.SUPPLIERREF <> '' THEN CATALOGSUPPLIER.SUPPLIERREF ELSE MANUFREFERENCE END]))[2]::text AS code_reference_fournisseur, MAX(CATALOGNAME) AS texte_reference_fournisseur, ''::text AS code_cip, ''::text AS code_cahpp, MAX(COALESCE(t_unites.oid,0)) AS unite_approvisionnement_id, MAX(COALESCE(PRODUCTPACKAGING.QUANTITY,1)) AS nombre_conditionnement_approvisionnement, (MAX(ARRAY[CATALOGSUPPLIER.WHENUPDATED::text,CATALOGSUPPLIER.LISTPRICE::text]))[2]::numeric AS prix_unitaire_en_cours, MAX(ISDEFAULTSUPPLIER) AS est_fournisseur_principal, MAX(t_fournisseurs.oid) AS fournisseur_distributeur_id, 0::bigint AS ucd_id, MAX(COALESCE(t_lpp.oid,0)) AS lpp_id, ''::text AS code_ucd13 FROM prod_optim.CATALOGSUPPLIER JOIN prod_optim.CATALOG ON CATALOGSUPPLIER.CATALOGID = CATALOG.CATALOGID LEFT JOIN prod_optim.PRODUCTPACKAGING ON CATALOG.UNITPACKAGINGID = PRODUCTPACKAGING.PRODUCTPACKAGINGID AND CATALOG.UNITPACKAGINGID <> '' JOIN eco.t_fournisseurs ON t_fournisseurs.code_original = CATALOGSUPPLIER.SUPPLIERID JOIN eco.t_articles ON t_articles.code_original = CATALOGSUPPLIER.CATALOGID LEFT JOIN eco.t_unites ON t_unites.code_original = PRODUCTPACKAGING.PRODUCTPACKAGINGID LEFT JOIN base.t_lpp ON TIPS = t_lpp.code GROUP BY 1 ; 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 code_original NOT IN (SELECT t_article_fournisseur.code_original FROM eco.t_article_fournisseur WHERE t_article_fournisseur.code_original IS NOT NULL) ; UPDATE eco.t_article_fournisseur SET article_id = w_article_fournisseur.article_id, fournisseur_id = w_article_fournisseur.fournisseur_id, fournisseur_distributeur_id = w_article_fournisseur.fournisseur_distributeur_id, est_fournisseur_principal = w_article_fournisseur.est_fournisseur_principal, 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, ucd_id = w_article_fournisseur.ucd_id, code_ucd13 = w_article_fournisseur.code_ucd13 FROM w_article_fournisseur WHERE t_article_fournisseur.code_original = w_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.fournisseur_distributeur_id IS DISTINCT FROM w_article_fournisseur.fournisseur_distributeur_id OR t_article_fournisseur.est_fournisseur_principal IS DISTINCT FROM w_article_fournisseur.est_fournisseur_principal 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.ucd_id IS DISTINCT FROM w_article_fournisseur.ucd_id OR t_article_fournisseur.code_ucd13 IS DISTINCT FROM w_article_fournisseur.code_ucd13 ) ; ]]> = '[ENV_ECO_ANNEEDEBUT]-01-01' ORDER BY 1; UPDATE eco.p_commandes SET date_reception = DELIVERYDATE FROM ( SELECT ORDERID, MAX(date(DELIVERYDATE)) AS DELIVERYDATE FROM prod_optim.BLOCDELIVERY GROUP BY 1) sub WHERE ORDERID = code_original ; ANALYSE eco.p_commandes ; 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'); 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, taux_tva) SELECT p_commandes.code_original || '-' || ORDERLINEID AS code_original, p_commandes.oid AS commande_id, rank() OVER (PARTITION BY ORDERID ORDER BY ORDERLINEID) AS ligne_commande, COALESCE(t_articles.texte) 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, PACKAGEQUANTITY AS quantite_approvisionnement, UNITPRICE AS prix_unitaire_approvisionnement, DELIVERYPACKAGINGQUANTITY AS multiplicateur_stockage, 0 AS quantite_stockage, UNITPRICE AS prix_unitaire_stockage, PACKAGEQUANTITY*UNITPRICE AS montant_commande_ht, 0 AS montant_commande_remise, UNITPRICEVAT::numeric*PACKAGEQUANTITY*UNITPRICE/100 AS montant_commande_tva, 0::numeric AS montant_commande_port, (1+UNITPRICEVAT::numeric/100)*PACKAGEQUANTITY*UNITPRICE AS montant_commande_ttc, 0 AS quantite_livraison_approvisionnement, 0 AS quantite_livraison_stockage, 0 AS montant_livraison_ht, 0 AS montant_livraison_tva, 0 AS montant_livraison_ttc, 'N' AS etat_livraison, 0 as montant_liquidation_ht, 0 as montant_liquidation_remise, 0 as montant_liquidation_tva, 0::numeric AS montant_liquidation_port, 0 AS montant_liquidation_ttc, 'N' AS etat_liquidation, base.cti_to_number(UNITPRICEVAT) AS taux_tva FROM prod_optim.BLOCORDERLINE JOIN eco.p_commandes ON ORDERID = p_commandes.code_original LEFT JOIN eco.t_articles ON CATALOGID = 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'); UPDATE eco.p_lignes_commandes SET date_reception = DELIVERYDATE, quantite_livraison_approvisionnement = PACKAGEQUANTITY, quantite_livraison_stockage = PACKAGEQUANTITY * DELIVERYPACKAGINGQUANTITY, montant_livraison_ht = PACKAGEQUANTITY * UNITCOST, montant_livraison_tva = PACKAGEQUANTITY * UNITCOST * UNITCOSTVAT::numeric/100, montant_livraison_ttc = PACKAGEQUANTITY * UNITCOST * (1 + UNITCOSTVAT::numeric/100), etat_livraison = CASE WHEN PACKAGEQUANTITY = quantite_approvisionnement THEN 'T' ELSE 'P' END FROM (SELECT ORDERID, ORDERLINEID, DELIVERYPACKAGINGQUANTITY, MAX(DELIVERYDATE) AS DELIVERYDATE, SUM(QUANTITY) AS PACKAGEQUANTITY, MAX(UNITCOST) AS UNITCOST, MAX(UNITCOSTVAT::numeric) AS UNITCOSTVAT FROM prod_optim.BLOCDELIVERY JOIN prod_optim.BLOCDELIVERYLINE ON BLOCDELIVERY.DELIVERYID = BLOCDELIVERYLINE.DELIVERYID GROUP BY 1,2,3 ) sub WHERE ORDERID || '-' || ORDERLINEID = code_original ; UPDATE eco.p_lignes_commandes SET montant_liquidation_ht = montant_livraison_ht , montant_liquidation_tva = montant_livraison_tva, montant_liquidation_ttc = montant_livraison_ttc, etat_liquidation = 'T' FROM eco.p_commandes WHERE 1=1 AND p_commandes.oid = commande_id AND p_commandes.etat_liquidation = 'T' ; 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_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_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_ht, 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 ;*/ ]]> '' AND w_CATALOGMOVEMENT.MOVEMENTQUANTITY > 0 GROUP BY 1 HAVING count(DISTINCT BLOCORDERLINE.ORDERLINEID) = 1 ; ANALYSE w_CATALOGMOVEMENT_ORDER ; UPDATE w_CATALOGMOVEMENT SET DELIVERYID = w_CATALOGMOVEMENT_ORDER.DELIVERYID, DELIVERYCODE = w_CATALOGMOVEMENT_ORDER.DELIVERYCODE, DELIVERYLINEID = w_CATALOGMOVEMENT_ORDER.DELIVERYLINEID, ORDERID = w_CATALOGMOVEMENT_ORDER.ORDERID, ORDERCODE = w_CATALOGMOVEMENT_ORDER.ORDERCODE, ORDERLINEID = w_CATALOGMOVEMENT_ORDER.ORDERLINEID FROM w_CATALOGMOVEMENT_ORDER WHERE w_CATALOGMOVEMENT_ORDER.CATALOGMOVEMENTID = w_CATALOGMOVEMENT.CATALOGMOVEMENTID ; DROP TABLE IF EXISTS w_CATALOGMOVEMENT_ORDER; CREATE TEMP TABLE w_CATALOGMOVEMENT_ORDER AS SELECT CATALOGMOVEMENTID, MAX(BLOCDELIVERYLINE.DELIVERYID) AS DELIVERYID, MAX(BLOCDELIVERY.DELIVERYCODE) AS DELIVERYCODE, MAX(BLOCDELIVERYLINE.DELIVERYLINEID) AS DELIVERYLINEID, MAX(BLOCORDERING.ORDERCODE) AS ORDERCODE, MAX(BLOCORDERLINE.ORDERID) AS ORDERID, MAX(BLOCORDERLINE.ORDERLINEID) AS ORDERLINEID FROM w_CATALOGMOVEMENT JOIN prod_optim.BLOCDELIVERYLINE ON w_CATALOGMOVEMENT.CATALOGSTOCKID = BLOCDELIVERYLINE.CATALOGSTOCKID AND w_CATALOGMOVEMENT.CATALOGID = BLOCDELIVERYLINE.CATALOGID JOIN prod_optim.BLOCDELIVERY ON BLOCDELIVERYLINE.DELIVERYID = BLOCDELIVERY.DELIVERYID AND date(w_CATALOGMOVEMENT.MOVEMENTDATETIME) = date(DELIVERYDATE) JOIN prod_optim.BLOCORDERLINE ON BLOCDELIVERYLINE.ORDERLINEID = BLOCORDERLINE.ORDERLINEID JOIN prod_optim.BLOCORDERING ON BLOCORDERLINE.ORDERID = BLOCORDERING.ORDERID WHERE w_CATALOGMOVEMENT.ORDERID = '' AND w_CATALOGMOVEMENT.CATALOGSTOCKID <> '' AND w_CATALOGMOVEMENT.MOVEMENTQUANTITY > 0 AND w_CATALOGMOVEMENT.FURTHERINFORMATION LIKE '% ' || BLOCORDERING.ORDERCODE GROUP BY 1 HAVING count(DISTINCT BLOCORDERLINE.ORDERLINEID) = 1 ; ANALYSE w_CATALOGMOVEMENT_ORDER ; UPDATE w_CATALOGMOVEMENT SET DELIVERYID = w_CATALOGMOVEMENT_ORDER.DELIVERYID, DELIVERYCODE = w_CATALOGMOVEMENT_ORDER.DELIVERYCODE, DELIVERYLINEID = w_CATALOGMOVEMENT_ORDER.DELIVERYLINEID, ORDERID = w_CATALOGMOVEMENT_ORDER.ORDERID, ORDERCODE = w_CATALOGMOVEMENT_ORDER.ORDERCODE, ORDERLINEID = w_CATALOGMOVEMENT_ORDER.ORDERLINEID FROM w_CATALOGMOVEMENT_ORDER WHERE w_CATALOGMOVEMENT_ORDER.CATALOGMOVEMENTID = w_CATALOGMOVEMENT.CATALOGMOVEMENTID ; DROP TABLE IF EXISTS w_CATALOGMOVEMENT_ORDER; CREATE TEMP TABLE w_CATALOGMOVEMENT_ORDER AS SELECT w_CATALOGMOVEMENT.CATALOGMOVEMENTID, MAX(BLOCORDERING.ORDERCODE) AS ORDERCODE, MAX(BLOCORDERLINE.ORDERID) AS ORDERID, MAX(BLOCORDERLINE.ORDERLINEID) AS ORDERLINEID FROM w_CATALOGMOVEMENT JOIN prod_optim.opeproduct ON 1=1 AND opeproduct.catalogstockid = w_CATALOGMOVEMENT.catalogstockid AND opeproduct.catalogid = w_CATALOGMOVEMENT.catalogid JOIN prod_optim.BLOCORDERLINE ON BLOCORDERLINE.opeproductid = opeproduct.opeproductid JOIN prod_optim.BLOCORDERING ON BLOCORDERLINE.ORDERID = BLOCORDERING.ORDERID GROUP BY 1 HAVING count(DISTINCT BLOCORDERLINE.ORDERLINEID) = 1 ; ANALYSE w_CATALOGMOVEMENT_ORDER ; UPDATE w_CATALOGMOVEMENT SET ORDERID = w_CATALOGMOVEMENT_ORDER.ORDERID, ORDERCODE = w_CATALOGMOVEMENT_ORDER.ORDERCODE, ORDERLINEID = w_CATALOGMOVEMENT_ORDER.ORDERLINEID FROM w_CATALOGMOVEMENT_ORDER WHERE w_CATALOGMOVEMENT_ORDER.CATALOGMOVEMENTID = w_CATALOGMOVEMENT.CATALOGMOVEMENTID ; WITH sejours as ( SELECT CATALOGMOVEMENT.CATALOGMOVEMENTID, max(patientstaycode) as PATIENTSTAYCODE, max(PATIENT.PERMANENTCODE) as PATIENTCODE FROM prod_optim.opeproduct JOIN prod_optim.catalogmovement ON 1=1 AND opeproduct.catalogstockid = CATALOGMOVEMENT.catalogstockid AND opeproduct.catalogid = CATALOGMOVEMENT.catalogid JOIN prod_optim.patientstay ON patientstay.patientstayid = opeproduct.patientstayid JOIN prod_optim.PATIENT ON PATIENTSTAY.PATIENTID = PATIENT.PATIENTID WHERE opeproduct.catalogstockid <> '' GROUP BY 1 ) UPDATE w_CATALOGMOVEMENT SET no_sejour = sejours.PATIENTSTAYCODE, no_patient = sejours.PATIENTCODE FROM sejours WHERE sejours.CATALOGMOVEMENTID = w_CATALOGMOVEMENT.CATALOGMOVEMENTID ; DROP TABLE IF EXISTS w_CATALOGMOVEMENT_ORDER; CREATE TEMP TABLE w_CATALOGMOVEMENT_ORDER AS SELECT CATALOGMOVEMENTID, MAX(BLOCDELIVERYLINE.DELIVERYID) AS DELIVERYID, MAX(BLOCDELIVERY.DELIVERYCODE) AS DELIVERYCODE, MAX(BLOCDELIVERYLINE.DELIVERYLINEID) AS DELIVERYLINEID, MAX(BLOCORDERING.ORDERCODE) AS ORDERCODE, MAX(BLOCORDERLINE.ORDERID) AS ORDERID, MAX(BLOCORDERLINE.ORDERLINEID) AS ORDERLINEID FROM w_CATALOGMOVEMENT JOIN prod_optim.BLOCDELIVERYLINE ON w_CATALOGMOVEMENT.CATALOGID = BLOCDELIVERYLINE.CATALOGID JOIN prod_optim.BLOCDELIVERY ON BLOCDELIVERYLINE.DELIVERYID = BLOCDELIVERY.DELIVERYID AND date(w_CATALOGMOVEMENT.MOVEMENTDATETIME) = date(DELIVERYDATE) JOIN prod_optim.BLOCORDERLINE ON BLOCDELIVERYLINE.ORDERLINEID = BLOCORDERLINE.ORDERLINEID JOIN prod_optim.BLOCORDERING ON BLOCORDERLINE.ORDERID = BLOCORDERING.ORDERID WHERE w_CATALOGMOVEMENT.ORDERID = '' AND w_CATALOGMOVEMENT.CATALOGSTOCKID <> '' AND w_CATALOGMOVEMENT.MOVEMENTQUANTITY > 0 AND w_CATALOGMOVEMENT.FURTHERINFORMATION LIKE '% ' || BLOCORDERING.ORDERCODE GROUP BY 1 HAVING count(DISTINCT BLOCORDERLINE.ORDERLINEID) = 1 ; ANALYSE w_CATALOGMOVEMENT_ORDER ; UPDATE w_CATALOGMOVEMENT SET DELIVERYID = w_CATALOGMOVEMENT_ORDER.DELIVERYID, DELIVERYCODE = w_CATALOGMOVEMENT_ORDER.DELIVERYCODE, DELIVERYLINEID = w_CATALOGMOVEMENT_ORDER.DELIVERYLINEID, ORDERID = w_CATALOGMOVEMENT_ORDER.ORDERID, ORDERCODE = w_CATALOGMOVEMENT_ORDER.ORDERCODE, ORDERLINEID = w_CATALOGMOVEMENT_ORDER.ORDERLINEID FROM w_CATALOGMOVEMENT_ORDER WHERE w_CATALOGMOVEMENT_ORDER.CATALOGMOVEMENTID = w_CATALOGMOVEMENT.CATALOGMOVEMENTID ; DROP TABLE IF EXISTS w_CATALOGMOVEMENT_ORDER; CREATE TEMP TABLE w_CATALOGMOVEMENT_ORDER AS SELECT MOVEMENTID, CATALOGSTOCKID, CATALOGID, LOCATIONID, SERIALNO, date(MOVEMENTDATETIME) AS MOVEMENTDATETIME, MAX(ORDERID) AS ORDERID, MAX(ORDERCODE) AS ORDERCODE, MAX(ORDERLINEID) AS ORDERLINEID, MAX(DELIVERYID) AS DELIVERYID, MAX(DELIVERYCODE) AS DELIVERYCODE, MAX(DELIVERYLINEID) AS DELIVERYLINEID FROM w_CATALOGMOVEMENT GROUP BY 1,2,3,4,5,6 HAVING count(DISTINCT CASE WHEN ORDERLINEID <> '' THEN ORDERLINEID ELSE NULL END) = 1 AND MAX(ORDERLINEID) <> '' AND MIN(ORDERLINEID) = '' ; ANALYSE w_CATALOGMOVEMENT_ORDER ; UPDATE w_CATALOGMOVEMENT SET DELIVERYID = w_CATALOGMOVEMENT_ORDER.DELIVERYID, DELIVERYCODE = w_CATALOGMOVEMENT_ORDER.DELIVERYCODE, DELIVERYLINEID = w_CATALOGMOVEMENT_ORDER.DELIVERYLINEID, ORDERID = w_CATALOGMOVEMENT_ORDER.ORDERID, ORDERCODE = w_CATALOGMOVEMENT_ORDER.ORDERCODE, ORDERLINEID = w_CATALOGMOVEMENT_ORDER.ORDERLINEID FROM w_CATALOGMOVEMENT_ORDER WHERE w_CATALOGMOVEMENT_ORDER.MOVEMENTID = w_CATALOGMOVEMENT.MOVEMENTID AND w_CATALOGMOVEMENT_ORDER.CATALOGSTOCKID = w_CATALOGMOVEMENT.CATALOGSTOCKID AND w_CATALOGMOVEMENT_ORDER.CATALOGID = w_CATALOGMOVEMENT.CATALOGID AND w_CATALOGMOVEMENT_ORDER.LOCATIONID = w_CATALOGMOVEMENT.LOCATIONID AND w_CATALOGMOVEMENT_ORDER.SERIALNO = w_CATALOGMOVEMENT.SERIALNO AND date(w_CATALOGMOVEMENT_ORDER.MOVEMENTDATETIME) = date(w_CATALOGMOVEMENT.MOVEMENTDATETIME) ; UPDATE w_CATALOGMOVEMENT SET commande_id = p_commandes.oid FROM eco.p_commandes WHERE ORDERID <> '' AND p_commandes.code_original = ORDERID ; UPDATE w_CATALOGMOVEMENT SET ligne_commande = p_lignes_commandes.ligne_commande FROM eco.p_lignes_commandes WHERE ORDERLINEID <> '' AND p_lignes_commandes.code_original = ORDERID || '-' || ORDERLINEID ; CREATE INDEX i_w_CATALOGMOVEMENT_ORDERID ON w_CATALOGMOVEMENT USING BTREE(ORDERID) ; UPDATE w_CATALOGMOVEMENT SET no_sejour = PATIENTSTAY.PATIENTSTAYCODE, no_patient = PATIENT.PERMANENTCODE FROM prod_optim.ORDERPATIENTSTAY JOIN prod_optim.PATIENTSTAY ON ORDERPATIENTSTAY.PATIENTSTAYID = PATIENTSTAY.PATIENTSTAYID JOIN prod_optim.PATIENT ON PATIENTSTAY.PATIENTID = PATIENT.PATIENTID WHERE w_CATALOGMOVEMENT.ORDERID != '' AND w_CATALOGMOVEMENT.ORDERID = ORDERPATIENTSTAY.ORDERID ; ANALYSE w_CATALOGMOVEMENT ; CREATE INDEX i_w_CATALOGMOVEMENT_CATALOGSTOCKID ON w_CATALOGMOVEMENT USING BTREE(CATALOGSTOCKID); CREATE INDEX i_w_CATALOGMOVEMENT_LOCATIONID ON w_CATALOGMOVEMENT USING BTREE(LOCATIONID); CREATE INDEX i_w_CATALOGMOVEMENT_CATALOGID ON w_CATALOGMOVEMENT USING BTREE(CATALOGID); CREATE INDEX i_w_CATALOGMOVEMENT_WHOUPDATED ON w_CATALOGMOVEMENT USING BTREE(WHOUPDATED); DROP TABLE IF EXISTS temp.w_CATALOGMOVEMENT; CREATE TABLE temp.w_CATALOGMOVEMENT AS SELECT * FROM w_CATALOGMOVEMENT; -- mouvements 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'); DROP TABLE IF EXISTS w_STOCK_FIN; CREATE TEMP TABLE w_STOCK_FIN AS SELECT LOCATIONID, CATALOGID, MAX(mvt_id) AS mvt_id, SUM(res) AS qte_fin FROM ( SELECT CATALOGSTOCK.LOCATIONID, CATALOGSTOCK.CATALOGID, CATALOGSTOCK.CATALOGSTOCKID, MAX(CATALOGMOVEMENTID) AS mvt_id, (MAX(ARRAY[CATALOGMOVEMENTID::text,RESULTSTOCK::text]))[2]::numeric AS res FROM prod_optim.CATALOGMOVEMENT JOIN prod_optim.CATALOGSTOCK ON CATALOGSTOCK.CATALOGSTOCKID = CATALOGMOVEMENT.CATALOGSTOCKID GROUP BY 1,2,3 ORDER BY 5 desc ) sub GROUP BY 1,2 ; CREATE INDEX w_stock_loc_i ON w_STOCK_FIN using btree(LOCATIONID); CREATE INDEX w_stock_catalog_i ON w_STOCK_FIN using btree(CATALOGID); INSERT INTO eco.p_mouvements_articles( 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, stock_quantite_debut, stock_quantite_fin, date_fin, est_premier_jour, est_dernier_jour, no_sejour ) SELECT CATALOGMOVEMENTID AS code_original, MOVEMENTDATETIME AS date, CASE WHEN MOVEMENTQUANTITY > 0 THEN 'E' ELSE 'S' END AS sens_mouvement, COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id, COALESCE(NULLIF(FURTHERINFORMATION,''), t_types_mouvements.code) || ' (' || 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, t_articles.oid, compte_id, fournisseur_principal_id AS fournisseur_id, CATALOGMOVEMENT.commande_id, 0 AS ligne_commande, 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, CASE WHEN UNITPRICE != 0 THEN UNITPRICE ELSE LAG(UNITPRICE) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID,CASE WHEN UNITPRICE!= 0 THEN 1 ELSE 0 END ORDER BY MOVEMENTDATETIME) END AS prix_unitaire, CASE WHEN MOVEMENTQUANTITY > 0 THEN MOVEMENTQUANTITY ELSE 0 END AS entree_quantite, CASE WHEN MOVEMENTQUANTITY < 0 THEN -MOVEMENTQUANTITY ELSE 0 END AS sortie_quantite, 0 AS entree_montant_ht, 0 AS entree_montant, 0 AS sortie_montant_ht, 0 AS sortie_montant, qte_fin-SUM(MOVEMENTQUANTITY) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID,CATALOGMOVEMENT.LOCATIONID ORDER BY CATALOGMOVEMENTID DESC rows unbounded preceding) AS stock_quantite_debut, qte_fin-SUM(MOVEMENTQUANTITY) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID,CATALOGMOVEMENT.LOCATIONID ORDER BY CATALOGMOVEMENTID DESC rows unbounded preceding) + MOVEMENTQUANTITY AS stock_quantite_fin, COALESCE(LEAD(MOVEMENTDATETIME) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID ORDER BY MOVEMENTDATETIME),'2099-12-31') AS date_fin, CASE WHEN date_trunc('day',(LAG(MOVEMENTDATETIME) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID,CATALOGMOVEMENT.LOCATIONID ORDER BY MOVEMENTDATETIME))) != date_trunc('day',MOVEMENTDATETIME) THEN 1 ELSE 0 END AS est_premier_jour, CASE WHEN date_trunc('day',(LEAD(MOVEMENTDATETIME) OVER (PARTITION BY CATALOGMOVEMENT.CATALOGID,CATALOGMOVEMENT.LOCATIONID ORDER BY MOVEMENTDATETIME))) != date_trunc('day',MOVEMENTDATETIME) THEN 1 ELSE 0 END AS est_dernier_jour, no_sejour FROM w_CATALOGMOVEMENT CATALOGMOVEMENT LEFT JOIN prod_optim.CATALOGSTOCK ON CATALOGSTOCK.CATALOGSTOCKID = CATALOGMOVEMENT.CATALOGSTOCKID LEFT JOIN w_STOCK_FIN ON CATALOGMOVEMENT.LOCATIONID = w_STOCK_FIN.LOCATIONID AND CATALOGMOVEMENT.CATALOGID = w_STOCK_FIN.CATALOGID LEFT JOIN prod_optim.USERS ON CATALOGMOVEMENT.WHOUPDATED = USERID LEFT JOIN eco.t_types_mouvements ON MOVEMENTID = t_types_mouvements.code_original LEFT JOIN eco.t_gestionnaires ON PERSONNELID = t_gestionnaires.code_original LEFT JOIN eco.t_lieux ON CATALOGMOVEMENT.LOCATIONID = t_lieux.code_original LEFT JOIN eco.t_unites_fonctionnelles ON 0 = t_unites_fonctionnelles.code_original LEFT JOIN eco.t_articles ON CATALOGMOVEMENT.CATALOGID = t_articles.code_original LEFT JOIN eco.t_sites ON SITEID = t_sites.code_original WHERE MOVEMENTDATETIME >= date('[ENV_ECO_ANNEEDEBUT]-01-01') ORDER BY CATALOGMOVEMENTID; -- tva DROP TABLE IF EXISTS w_tva; CREATE TEMP TABLE w_tva AS SELECT CATALOGID, UNITCOSTVAT::numeric/100 AS tx_tva, date(DELIVERYDATE) AS DELIVERYDATE, date(CASE WHEN lead(DELIVERYDATE) OVER (PARTITION BY CATALOGID ORDER BY DELIVERYDATE) IS NOT NULL THEN lead(DELIVERYDATE) OVER (PARTITION BY CATALOGID ORDER BY DELIVERYDATE) ELSE '2099-12-31' END) AS next_DELIVERYDATE, date(CASE WHEN lag(DELIVERYDATE) OVER (PARTITION BY CATALOGID ORDER BY DELIVERYDATE) IS NOT NULL THEN lag(DELIVERYDATE) OVER (PARTITION BY CATALOGID ORDER BY DELIVERYDATE) ELSE '1900-01-01' END) AS prev_DELIVERYDATE FROM prod_optim.BLOCDELIVERYLINE JOIN prod_optim.BLOCDELIVERY ON BLOCDELIVERYLINE.DELIVERYID = BLOCDELIVERY.DELIVERYID ; UPDATE eco.p_mouvements_articles SET entree_montant_ht = prix_unitaire*entree_quantite, entree_montant = prix_unitaire*entree_quantite*(1+tx_tva), sortie_montant_ht = prix_unitaire*sortie_quantite, sortie_montant = prix_unitaire*sortie_quantite*(1+tx_tva) FROM w_tva, eco.t_articles WHERE t_articles.oid = article_id AND CATALOGID = t_articles.code_original AND date BETWEEN DELIVERYDATE AND next_DELIVERYDATE ; UPDATE eco.p_mouvements_articles SET entree_montant_ht = prix_unitaire*entree_quantite, entree_montant = prix_unitaire*entree_quantite*(1+tx_tva), sortie_montant_ht = prix_unitaire*sortie_quantite, sortie_montant = prix_unitaire*entree_quantite*(1+tx_tva) FROM w_tva, eco.t_articles WHERE t_articles.oid = article_id AND CATALOGID = t_articles.code_original AND date BETWEEN prev_DELIVERYDATE AND DELIVERYDATE AND entree_montant = 0 AND sortie_montant = 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'; -- Déterminer la ligne de commande ANALYSE eco.p_mouvements_articles ; -- Règle 1 = Si une ligne pour un article, tous les mouvements de cet article sont associés à cette ligne UPDATE eco.p_mouvements_articles SET ligne_commande = subview.ligne_commande FROM ( SELECT commande_id, article_id, MIN(ligne_commande) AS ligne_commande FROM eco.p_lignes_commandes GROUP BY 1,2 HAVING count(*) = 1 ) subview WHERE p_mouvements_articles.commande_id = subview.commande_id AND p_mouvements_articles.article_id = subview.article_id AND p_mouvements_articles.ligne_commande = 0 ; -- Règle 2 = Il y a plusieurs lignes pour le même article dans la commande, On analyse les quantités progressives pour attribuer DROP TABLE IF EXISTS w_lignes_commande_reste; CREATE TEMP TABLE w_lignes_commande_reste AS SELECT *, COALESCE(LAG(quantite_fin) OVER (PARTITION BY commande_id, article_id ORDER BY ligne_commande),0) AS quantite_debut FROM ( SELECT p_lignes_commandes.commande_id, p_lignes_commandes.article_id, p_lignes_commandes.ligne_commande, SUM(quantite_approvisionnement) OVER (PARTITION BY p_lignes_commandes.commande_id, p_lignes_commandes.article_id ORDER BY p_lignes_commandes.ligne_commande) AS quantite_fin FROM eco.p_lignes_commandes LEFT JOIN eco.p_mouvements_articles ON p_lignes_commandes.commande_id = p_mouvements_articles.commande_id AND p_lignes_commandes.ligne_commande = p_mouvements_articles.ligne_commande WHERE p_mouvements_articles.oid IS NULL ) subview ; DROP TABLE IF EXISTS w_mouvements_articles_reste; CREATE TEMP TABLE w_mouvements_articles_reste AS SELECT *, COALESCE(LAG(quantite_fin) OVER (PARTITION BY commande_id, article_id ORDER BY oid),0) AS quantite_debut FROM ( SELECT commande_id, article_id, oid, entree_quantite-sortie_quantite AS quantite, SUM(entree_quantite-sortie_quantite) OVER (PARTITION BY commande_id, article_id ORDER BY sens_mouvement,oid) AS quantite_fin FROM eco.p_mouvements_articles where commande_id <> 0 AND ligne_commande = 0 ) subview ; UPDATE eco.p_mouvements_articles SET ligne_commande = subview.ligne_commande FROM ( SELECT w_mouvements_articles_reste.oid, w_lignes_commande_reste.ligne_commande FROM w_mouvements_articles_reste JOIN w_lignes_commande_reste ON w_mouvements_articles_reste.commande_id = w_lignes_commande_reste.commande_id AND w_mouvements_articles_reste.article_id = w_lignes_commande_reste.article_id WHERE ( w_mouvements_articles_reste.quantite_fin > w_lignes_commande_reste.quantite_debut AND w_mouvements_articles_reste.quantite_fin <= w_lignes_commande_reste.quantite_fin ) ) subview WHERE p_mouvements_articles.oid = subview.oid ; ]]> '[ENV_ECO_ANNEEDEBUT]-01-01' GROUP BY 1,2,3,4,5,6,7,8 ; VACUUM ANALYSE eco.p_stock; -- 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_fin ) 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 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 >= ''[ENV_ECO_ANNEEDEBUT]-01-01'' AND p_stock.stock_quantite_debut != 0 AND p_stock_prev.article_id IS NULL ',200) ; VACUUM ANALYSE eco.p_stock; 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_fin ) 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 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 >= ''[ENV_ECO_ANNEEDEBUT]-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'); ]]>