You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1199 lines
48 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="INIT" label="INITIALISATIONS">
<NODE label="Tables Articles">
<sqlcmd><![CDATA[
-- comptes
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT CCODECOMPTABLE,CDESIGN, LEFT(CDESIGN,50), CNOID
FROM prod_hestia.TCODECOMPTABLE
WHERE
CCODECOMPTABLE IN (SELECT CCOMPTEGEF FROM prod_hestia.TSTOCKPRODUITGEF) AND
CNOID NOT IN (SELECT code_original FROM eco.t_compte)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE eco.t_compte
SET
code = CCODECOMPTABLE,
texte = CDESIGN,
texte_court = LEFT(CDESIGN,50)
FROM prod_hestia.TCODECOMPTABLE
WHERE CNOID = code_original
AND (
code != CCODECOMPTABLE OR
texte != CDESIGN OR
texte_court != LEFT(CDESIGN,50)
)
;
-- unités
--avec grammage
--SELECT CNOID, CASE WHEN UPPER(CABREGE) != 'UN' THEN UPPER(CABREGE) ELSE UPPER(CABREGE) || base.cti_division() || ' (Kg)' END, CDESIGN, LEFT(CDESIGN,50)
--FROM prod_hestia.TUNITESGESTION JOIN prod_hesti.TDENREEFOURNISS ON UNICNOIDUNITEGESTION = TUNITEGESTION.OID
--LEFT JOIN eco.t_unites ON (code_original = CNOID)
----WHERE code_original IS NULL
--;
INSERT INTO eco.t_unites(code_original, code, texte, texte_court )
SELECT
TUNITESGESTION.CNOID || '-' || CGRAMME,
CASE WHEN UPPER(CABREGE) != 'UN' THEN UPPER(CABREGE) ELSE UPPER(CABREGE) || '-' || CGRAMME END,
CDESIGN || ' (' || CGRAMME || 'g)',
LEFT(CDESIGN || ' (' || CGRAMME || 'g)',50)
FROM prod_hestia.TUNITESGESTION
JOIN prod_hestia.TDENREEFOURNIS ON CNOIDUNITEGESTION = TUNITESGESTION.CNOID
LEFT JOIN eco.t_unites ON code = CASE WHEN UPPER(CABREGE) != 'UN' THEN UPPER(CABREGE) ELSE UPPER(CABREGE) || '-' || CGRAMME END
WHERE code IS NULL
GROUP BY 1,2,3,4
;
UPDATE eco.t_unites
SET
code = CASE WHEN UPPER(CABREGE) != 'UN' THEN UPPER(CABREGE) ELSE UPPER(CABREGE) || '-' || CGRAMME END,
texte = CDESIGN || ' (' || CGRAMME || 'g)',
texte_court = LEFT(CDESIGN || ' (' || CGRAMME || 'g)',50)
FROM prod_hestia.TUNITESGESTION
JOIN prod_hestia.TDENREEFOURNIS ON CNOIDUNITEGESTION = TUNITESGESTION.CNOID
WHERE
code_original = TUNITESGESTION.CNOID || '-' || CGRAMME AND
(code IS DISTINCT FROM CASE WHEN UPPER(CABREGE) != 'UN' THEN UPPER(CABREGE) ELSE UPPER(CABREGE) || '-' || CGRAMME END OR
texte IS DISTINCT FROM CDESIGN || ' (' || CGRAMME || 'g)' OR
texte_court IS DISTINCT FROM LEFT(CDESIGN || ' (' || CGRAMME || 'g)',50))
;
-- Familles
INSERT INTO eco.t_familles_articles(code_original, code, texte, texte_court )
SELECT CNOID, CNOID, CDESIGN, LEFT(CDESIGN,50)
FROM prod_hestia.TFAMILDENR
LEFT JOIN eco.t_familles_articles ON (code_original = CNOID)
WHERE code_original IS NULL
;
UPDATE eco.t_familles_articles
SET texte = CDESIGN,
texte_court = LEFT(CDESIGN,50)
FROM prod_hestia.TFAMILDENR
WHERE code_original = CNOID AND
(texte IS DISTINCT FROM CDESIGN OR
texte_court IS DISTINCT FROM LEFT(CDESIGN,50));
-- Types articles
INSERT INTO eco.t_types_articles(code_original, code, texte, texte_court )
SELECT 'C', 'C','Cuisine','Cuisine'
WHERE 'C' NOT IN (SELECT code_original FROM eco.t_types_articles)
GROUP BY 1;
-- Catégories
INSERT INTO eco.t_categories_articles(code_original, code, texte, texte_court )
SELECT CNOID, CDESIGN, LEFT(CDESIGN,50), CNOID
FROM prod_hestia.tcategoriefournisseur
LEFT JOIN eco.t_categories_articles ON (CNOID = t_categories_articles.code_original)
WHERE code_original IS NULL
;
UPDATE eco.t_categories_articles
SET texte = CDESIGN,
texte_court = LEFT(CDESIGN,50)
FROM prod_hestia.tcategoriefournisseur
WHERE
CNOID = t_categories_articles.code_original
AND (
t_categories_articles.texte IS DISTINCT FROM CDESIGN OR
t_categories_articles.texte_court IS DISTINCT FROM LEFT(CDESIGN,50))
;
-- Lieux
INSERT INTO eco.t_lieux(code_original, code, texte, texte_court )
SELECT CNOID, CNOID, CDESIGN, LEFT(CDESIGN,50)
FROM prod_hestia.TLIEUSTOCKAGE
LEFT JOIN eco.t_lieux ON (code_original = CNOID)
WHERE code_original IS NULL
;
UPDATE eco.t_lieux
SET
texte = CDESIGN,
texte_court = LEFT(CDESIGN,50)
FROM prod_hestia.TLIEUSTOCKAGE
WHERE
code_original = CNOID AND
(
texte IS DISTINCT FROM CDESIGN OR
texte_court IS DISTINCT FROM LEFT(CDESIGN,50))
;
-- Sites
-- sites = magasin
-- Articles
DROP TABLE IF EXISTS w_PRODUIT;
CREATE TEMP TABLE w_PRODUIT AS
SELECT
CNOID AS code_original,
COALESCE(NULLIF(CCODEGP,0),to_char(CNOID,'FM000000')) AS code,
CDESIGN AS texte,
LEFT(CDESIGN,50) AS texte_court,*
FROM prod_hestia.TDENREE
;
INSERT INTO eco.t_articles(code_original, code, texte, texte_court )
SELECT w_PRODUIT.code_original, w_PRODUIT.code, w_PRODUIT.texte, substr(w_PRODUIT.texte_court,1,50)
FROM w_PRODUIT
LEFT JOIN eco.t_articles ON (w_PRODUIT.code_original = t_articles.code_original)
WHERE t_articles.code_original IS NULL;
UPDATE eco.t_articles
SET
code = w_PRODUIT.code,
texte = w_PRODUIT.texte,
texte_court = w_PRODUIT.texte_court
FROM w_PRODUIT
WHERE w_PRODUIT.code_original = t_articles.code_original
AND (t_articles.code IS DISTINCT FROM w_PRODUIT.code OR
t_articles.texte IS DISTINCT FROM w_PRODUIT.texte OR
t_articles.texte_court IS DISTINCT FROM w_PRODUIT.texte_court)
;
UPDATE eco.t_articles
SET gere_en_stock = ''
WHERE gere_en_stock IS NULL;
UPDATE eco.t_articles
SET compte_id = t_compte.oid
FROM prod_hestia.tstockproduitgef
JOIN eco.t_compte ON CCOMPTEGEF = code
WHERE CDENREEGEF = t_articles.code
;
UPDATE eco.t_articles SET
type_id = COALESCE(t_types_articles.oid,0),
famille_id = COALESCE(t_types_articles.oid,0),
sous_famille_id = COALESCE(t_types_articles.oid,0),
categorie_id = COALESCE(t_categories_articles.oid,0),
sous_categorie_id = 0,
unite_stockage_id = COALESCE(t_unites_stockage.oid,0),
unite_distribution_id = COALESCE(t_unites_distribution.oid,0)
FROM w_PRODUIT
LEFT JOIN eco.t_types_articles ON 'C' = t_types_articles.code_original
LEFT JOIN eco.t_familles_articles ON CNOFAMILDENR = t_familles_articles.code_original
LEFT JOIN eco.t_sous_familles_articles ON 'XXX' = t_familles_articles.code_original
LEFT JOIN eco.t_categories_articles ON 'XXX' = t_categories_articles.code_original
LEFT JOIN eco.t_unites t_unites_stockage ON 'g' = t_unites_stockage.code
LEFT JOIN eco.t_unites t_unites_distribution ON 'g' = t_unites_distribution.code_original
WHERE
t_articles.code_original = w_PRODUIT.CNOID AND
(
t_articles.type_id IS DISTINCT FROM COALESCE(t_types_articles.oid,0) OR
t_articles.categorie_id IS DISTINCT FROM COALESCE(t_categories_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.unite_stockage_id IS DISTINCT FROM COALESCE(t_unites_stockage.oid,0) OR
t_articles.unite_distribution_id IS DISTINCT FROM COALESCE(t_unites_distribution.oid,0)
);
UPDATE eco.t_articles SET
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
);
INSERT INTO eco.t_article_fournisseur (
code_original,
article_id,
fournisseur_id,
code_reference_fournisseur,
texte_reference_fournisseur,
unite_approvisionnement_id,
nombre_conditionnement_approvisionnement,
prix_unitaire_en_cours
)
SELECT
CNOID,
t_articles.oid,
t_fournisseurs.oid,
'',
CNOMDENRFOURNISSEUR,
CNOIDUNITEGESTION,
CQTEGRSTOCK,
CPRIXDEFAUT
FROM prod_hestia.TDENREEFOURNIS
LEFT JOIN eco.t_fournisseurs ON CNOIDFOURNISSEUR = t_fournisseurs.code_original
LEFT JOIN eco.t_articles ON CNODENREE = t_articles.code_original
WHERE CNOID NOT IN (SELECT t_article_fournisseur.code_original FROM eco.t_article_fournisseur WHERE code_original IS NOT NULL)
;
]]></sqlcmd>
</NODE>
<NODE label="Tables Fournisseurs">
<sqlcmd><![CDATA[
-- Fournisseurs
INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original)
SELECT CCODEGEF, CDESIGN, LEFT(CDESIGN,50), CNOID
FROM prod_hestia.tfournisseur
LEFT JOIN eco.t_fournisseurs ON (CNOID = t_fournisseurs.code_original)
WHERE t_fournisseurs.code_original IS NULL;
UPDATE eco.t_fournisseurs
SET
code = CCODEGEF,
texte = CDESIGN,
texte_court = LEFT(CDESIGN,50)
FROM prod_hestia.tfournisseur
WHERE CNOID = t_fournisseurs.code_original
AND (
t_fournisseurs.code IS DISTINCT FROM CCODEGEF OR
t_fournisseurs.texte IS DISTINCT FROM CDESIGN OR
t_fournisseurs.texte_court IS DISTINCT FROM LEFT(CDESIGN,50));
UPDATE eco.t_fournisseurs SET
type_id = 0
WHERE type_id IS NULL;
UPDATE eco.t_fournisseurs SET
type_code = t_types_fournisseurs.code,
type_texte = t_types_fournisseurs.texte_court,
type_section_id = t_types_fournisseurs.section_id,
type_section_code = t_types_fournisseurs.section_code,
type_section_texte = t_types_fournisseurs.section_texte
FROM eco.t_types_fournisseurs
WHERE type_id = t_types_fournisseurs.oid
AND (
type_code IS DISTINCT FROM t_types_fournisseurs.code OR
type_texte IS DISTINCT FROM t_types_fournisseurs.texte_court OR
type_section_id IS DISTINCT FROM t_types_fournisseurs.section_id OR
type_section_code IS DISTINCT FROM t_types_fournisseurs.section_code OR
type_section_texte IS DISTINCT FROM t_types_fournisseurs.section_texte
);
]]></sqlcmd>
</NODE>
<NODE label="Autres tables">
<sqlcmd><![CDATA[
-- Unités fonctionnelles
INSERT INTO eco.t_unites_fonctionnelles(code, texte, texte_court, code_original)
SELECT CNOID, CDESIGN, LEFT(CDESIGN,50), CNOID
FROM prod_hestia.TSERVICE
LEFT JOIN eco.t_unites_fonctionnelles ON (code_original = CNOID)
WHERE code_original IS NULL;
UPDATE eco.t_unites_fonctionnelles
SET texte = CDESIGN,
texte_court = substr(CDESIGN,1,50)
FROM prod_hestia.TSERVICE
WHERE code_original = CNOID
AND (texte IS DISTINCT FROM CDESIGN OR
texte_court IS DISTINCT FROM substr(CDESIGN,1,50));
-- Types mouvements
INSERT INTO eco.t_types_mouvements(code_original, code, texte, texte_court )
SELECT
CTYPE,
CTYPE,
CTYPE,
CTYPE
FROM
prod_hestia.tstockmouvement
LEFT JOIN eco.t_types_mouvements ON code_original = CTYPE
WHERE code_original IS NULL
GROUP BY 1,2,3,4
ORDER BY 1;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PROD" label="RECUPERATION DES DONNEES DE PRODUCTION">
<NODE label="Commandes">
<sqlcmd><![CDATA[
TRUNCATE eco.p_commandes;
INSERT INTO eco.p_commandes(
code_original,
numero,
date_commande,
objet,
reference,
date_livraison_prevue,
etat_reception,
date_reception,
etat_liquidation,
fournisseur_id,
gestionnaire_id,
lieu_commande_id,
lieu_facturation_id,
lieu_livraison_id,
site_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
CNOID,
CNOID AS numero,
date(coalesce(NULLIF(CDATECOMMANDE,''),'1900-01-01')) AS date_commande,
trim('') AS objet,
trim('') AS reference,
date(coalesce(NULLIF(CDATELIVRAISON,''),'2099-12-31')) AS date_livraison_prevue,
CASE WHEN CDATELIVRAISON IS NOT NULL THEN 'T' ELSE 'N' END AS etat_reception,
date(coalesce(NULLIF(CDATEFACTUREFOURNISSEUR,''),'2099-12-31')) AS date_reception,
CASE WHEN CDATEFACTUREFOURNISSEUR IS NOT NULL THEN 'T' ELSE 'N' END AS etat_liquidation,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_lieux_commande.oid,0) AS lieu_commande_id,
COALESCE(t_lieux_facturation.oid,0) AS lieu_facturation_id,
COALESCE(t_lieux_livraison.oid,0) AS lieu_livraison_id,
COALESCE(t_sites.oid,0) AS site_id,
COALESCE(t_unites_fonctionnelles.oid,0) AS unite_fonctionnelle_id,
CTOTALHT::numeric AS montant_commande_ht,
0 AS montant_commande_remise,
CTOTALTVA::numeric AS montant_commande_tva,
0 AS montant_commande_port,
CTOTALTTC AS montant_commande_total,
CASE WHEN CDATEFACTUREFOURNISSEUR IS NOT NULL THEN CTOTALHT::numeric ELSE 0 END AS montant_liquidation_ht,
0 AS montant_liquidation_remise,
CASE WHEN CDATEFACTUREFOURNISSEUR IS NOT NULL THEN CTOTALTVA::numeric ELSE 0 END AS montant_liquidation_tva,
CASE WHEN CDATEFACTUREFOURNISSEUR IS NOT NULL THEN 0 ELSE 0 END AS montant_liquidation_port,
CASE WHEN CDATEFACTUREFOURNISSEUR IS NOT NULL THEN CTOTALFACTUREFOURNISSEUR::numeric ELSE 0 END AS montant_liquidation_total
FROM prod_hestia.TSTOCKCOMMANDE
LEFT JOIN eco.t_fournisseurs ON CNOIDFOURNISSEUR = t_fournisseurs.code_original
LEFT JOIN eco.t_gestionnaires ON '0' = t_gestionnaires.code_original
LEFT JOIN eco.t_sites ON 'XXX' = t_sites.code_original
LEFT JOIN eco.t_lieux t_lieux_commande ON 'XXX' = t_lieux_commande.code_original
LEFT JOIN eco.t_lieux t_lieux_facturation ON 'XXX' = t_lieux_facturation.code_original
LEFT JOIN eco.t_lieux t_lieux_livraison ON 'XXX' = t_lieux_livraison.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON '0' = t_unites_fonctionnelles.code_original
WHERE (CDATECOMMANDE BETWEEN '[ENV_ECO_ANNEEDEBUT]0101' AND now() OR
CDATELIVRAISON BETWEEN '[ENV_ECO_ANNEEDEBUT]0101' AND now()
)
AND TSTOCKCOMMANDE.CTYPE = 14
;
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,
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_prorata_tva)
SELECT
TSTOCKDETAILCOMMANDE.CNOID AS code_original,
p_commandes.oid AS commande_id,
CNOLIGNE AS ligne_commande,
t_articles.texte AS texte,
t_articles.oid AS article_id,
COALESCE(t_unites.oid,t_articles.unite_stockage_id) AS unite_approvisionnement_id,
t_articles.compte_id AS compte_id,
CQTECOMMANDER::numeric AS quantite_approvisionnement,
CPRIXHT::numeric AS prix_unitaire_approvisionnement,
1 AS multiplicateur_stockage,
CQTECOMMANDER::numeric AS quantite_stockage,
CPRIXHT::numeric AS prix_unitaire_stockage,
CQTECOMMANDER::numeric * CPRIXHT::numeric AS montant_commande_ht,
0 AS montant_commande_remise,
CPRIXTTC::numeric - ( CQTECOMMANDER::numeric * CPRIXHT::numeric ) AS montant_commande_tva,
0 AS montant_commande_port,
CPRIXTTC AS montant_commande_ttc,
CASE WHEN CNOLOTINTERNE != 0 THEN CQTECOMMANDER ELSE 0 END AS quantite_livraison_approvisionnement,
CASE WHEN CNOLOTINTERNE != 0 THEN CQTECOMMANDER * CEQGRAMMEUNITEGESTION ELSE 0 END AS quantite_livraison_stockage,
CASE WHEN CNOLOTINTERNE != 0 THEN CQTECOMMANDER * CPRIXHT ELSE 0 END AS montant_livraison_ht,
CASE WHEN CNOLOTINTERNE != 0 THEN CPRIXTTC ELSE 0 END AS montant_livraison_ttc,
CASE WHEN CNOLOTINTERNE != 0 THEN 'N' ELSE 'T' END AS etat_livraison,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN CQTECOMMANDER * CPRIXHT ELSE 0 END AS montant_liquidation_ht,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN 0 ELSE 0 END AS montant_liquidation_remise,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN CPRIXTTC - CPRIXHT*CQTECOMMANDER ELSE 0 END AS montant_liquidation_tva,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN 0 ELSE 0 END AS montant_liquidation_port,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN CPRIXTTC ELSE 0 END AS montant_liquidation_ttc,
CASE WHEN TSTOCKDETAILCOMMANDE.CETAT = 60 THEN 'T' ELSE 'N' END AS etat_liquidation,
CASE WHEN t_articles.type_prorata_tva IS DISTINCT FROM '1' THEN COALESCE(t_prorata_tva.taux,0) ELSE 0 END
FROM prod_hestia.TSTOCKDETAILCOMMANDE
JOIN prod_hestia.TSTOCKCOMMANDE ON CNOIDSTOCKCOMMANDE = TSTOCKCOMMANDE.CNOID
JOIN eco.p_commandes ON CNOIDSTOCKCOMMANDE = p_commandes.code_original
JOIN prod_hestia.TDENREEFOURNIS ON CNOIDDENREEFOURNISSEUR = TDENREEFOURNIS.CNOID
JOIN eco.t_articles ON CNODENREE = t_articles.code_original
LEFT JOIN eco.t_unites ON CABREGEUNITEGESTION || '-' || CGRAMME = t_unites.code
LEFT JOIN eco.t_prorata_tva ON t_prorata_tva.oid = 0
--WHERE ETATCMDE > 1
;
]]></sqlcmd>
</NODE>
<NODE label="Mouvements">
<sqlcmd><![CDATA[
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');
INSERT INTO eco.p_mouvements_articles(
code_original,
date,
sens_mouvement,
type_mouvement_id,
texte,
gestionnaire_id,
site_id,
lieu_id,
article_id,
compte_id,
unite_fonctionnelle_id,
fournisseur_id,
commande_id,
ligne_commande,
prix_unitaire,
entree_quantite,
sortie_quantite,
entree_montant,
sortie_montant,
entree_montant_ht,
sortie_montant_ht,
sortie_montant_original_ttc,
sortie_montant_original_ht,
stock_quantite_debut,
stock_quantite_fin)
SELECT
TSTOCKMOUVEMENT.CNOID,
date(LEFT(CDATEHEUREMOUVEMENT,8)) AS date,
CASE WHEN CQTEGRAMME > 0 THEN 'E' ELSE 'S' END AS sens_mouvement,
COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id,
COALESCE(t_types_mouvements.texte,'') || t_articles.texte AS texte,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_sites.oid,0) AS site_id,
COALESCE(t_lieux.oid,0) AS lieu_id,
COALESCE(t_articles.oid,0) AS article_id,
COALESCE(t_articles.compte_id,0) AS compte_id,
COALESCE(t_unites_fonctionnelles.oid,0) AS unite_fonctionnelle_id,
COALESCE(t_fournisseurs.oid,t_fournisseurs_articles.oid,0) AS fournisseur_id,
COALESCE(p_lignes_commandes.commande_id,0) AS commande_id,
COALESCE(p_lignes_commandes.ligne_commande,0) AS commande_id,
CQTEGRAMME/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION) AS prix_unitaire,
CASE WHEN CQTEGRAMME >= 0 THEN CQTEGRAMME ELSE 0 END AS entree_quantite,
CASE WHEN CQTEGRAMME < 0 THEN -CQTEGRAMME ELSE 0 END AS sortie_quantite,
CASE WHEN CQTEGRAMME >= 0 THEN (CPRIXHT*CQTEGRAMME*(1+CTVADEF)/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS entree_montant,
CASE WHEN CQTEGRAMME < 0 THEN -(CPRIXHT*CQTEGRAMME*(1+CTVADEF)/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS sortie_montant,
CASE WHEN CQTEGRAMME >= 0 THEN (CPRIXHT*CQTEGRAMME/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS entree_montant_ht,
CASE WHEN CQTEGRAMME < 0 THEN -(CPRIXHT*CQTEGRAMME/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS sortie_montant,
CASE WHEN CQTEGRAMME >= 0 THEN (CPRIXHT*CQTEGRAMME*(1+CTVADEF)/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS sortie_montant_original_ttc,
CASE WHEN CQTEGRAMME < 0 THEN -(CPRIXHT*CQTEGRAMME/(TSTOCKDETAILCOMMANDE.CQTEUNITEGESTION*CEQGRAMMEUNITEGESTION)) ELSE 0 END AS sortie_montant_original_ht,
0 AS stock_quantite_debut,
0 AS stock_quantite_fin
FROM prod_hestia.TSTOCKMOUVEMENT
LEFT JOIN prod_hestia.TDENREEFOURNIS ON CNOIDDENREEFOURNISSEUR = TDENREEFOURNIS.CNOID
LEFT JOIN prod_hestia.TSTOCKDETAILCOMMANDE ON CNOIDSTOCKDETAILCOMMANDE = TSTOCKDETAILCOMMANDE.CNOID
LEFT JOIN eco.t_types_mouvements ON CTYPE = t_types_mouvements.code_original
LEFT JOIN eco.t_gestionnaires ON '0' = t_gestionnaires.code_original
LEFT JOIN eco.t_sites ON CNOIDMAGASIN = t_sites.code_original
LEFT JOIN eco.t_lieux ON CNOLIEUSTOCKAGEDFT = t_lieux.code_original
JOIN eco.t_articles ON CNODENREE = t_articles.code_original
LEFT JOIN eco.t_fournisseurs ON CNOIDFOURNISSEUR = t_fournisseurs.code_original
LEFT JOIN eco.t_fournisseurs t_fournisseurs_articles ON TDENREEFOURNIS.CNOIDFOURNISSEUR = t_fournisseurs_articles.code_original
LEFT JOIN eco.p_lignes_commandes ON CNOIDSTOCKDETAILCOMMANDE = p_lignes_commandes.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON 'XXX' = t_unites_fonctionnelles.code_original
LEFT JOIN prod_hestia.TCLASSETVA ON CNOIDTVA = TCLASSETVA.CNOID
WHERE date(LEFT(CDATEHEUREMOUVEMENT,8)) BETWEEN '[ENV_ECO_ANNEEDEBUT]0101' AND now()
;
UPDATE eco.p_mouvements_articles SET
entree_quantite = 0 - entree_quantite,
sortie_quantite = 0 - sortie_quantite,
entree_montant = 0 - entree_montant,
sortie_montant = 0 - sortie_montant,
entree_montant_ht = 0 - entree_montant_ht,
sortie_montant_ht = 0 - sortie_montant_ht,
sortie_montant_original_ttc = 0 - sortie_montant_original_ttc,
sortie_montant_original_ht = 0 - sortie_montant_original_ht
FROM eco.t_types_mouvements
WHERE type_mouvement_id = t_types_mouvements.oid AND
t_types_mouvements.particularite_inverser_signe = '1';
UPDATE eco.p_mouvements_articles SET
entree_quantite = sortie_quantite,
sortie_quantite = entree_quantite,
entree_montant = sortie_montant,
sortie_montant = entree_montant,
entree_montant_ht = sortie_montant_ht,
sortie_montant_ht = entree_montant_ht,
sortie_montant_original_ttc = sortie_montant_original_ht,
sortie_montant_original_ht = sortie_montant_original_ttc,
sens_mouvement = sens_force
FROM eco.t_types_mouvements
WHERE type_mouvement_id = t_types_mouvements.oid AND
t_types_mouvements.sens_force IN ('E','S') AND t_types_mouvements.sens_force != p_mouvements_articles.sens_mouvement
;
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');
]]></sqlcmd>
</NODE>
<NODE label="Stocks">
<sqlcmd><![CDATA[
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');
-- cumul ES d'après mouvements
DROP TABLE IF EXISTS w_stock;
CREATE TEMP TABLE w_stock AS
SELECT
COALESCE(t_sites.code_original,'') AS site_code_original,
COALESCE(t_lieux.code_original,'') AS lieu_code_original,
t_articles.code_original AS article_code_original,
p_mouvements_articles.article_id,
t_articles.compte_id,
site_id,
lieu_id,
date(date_trunc('month',date)) AS date_debut,
date(date_trunc('month',date) + interval '1 month' - interval '1 day') AS date_fin,
date_part('year',date)*12 + date_part('month',date) AS mois_sequence,
SUM(entree_quantite) AS entree_quantite,
SUM(entree_montant) AS entree_montant,
SUM(sortie_quantite) AS sortie_quantite,
SUM(sortie_montant) AS sortie_montant,
0::numeric as pump,
'0'::text AS ok_pump,
0::numeric AS stock_quantite_debut,
0::numeric AS stock_quantite_fin,
0::numeric AS stock_valeur_debut,
0::numeric AS stock_valeur_fin
FROM eco.p_mouvements_articles
JOIN eco.t_articles ON p_mouvements_articles.article_id = t_articles.oid
LEFt JOIN eco.t_sites ON p_mouvements_articles.site_id = t_sites.oid
LEFt JOIN eco.t_lieux ON p_mouvements_articles.lieu_id = t_lieux.oid
GROUP BY 1,2,3,4,5,6,7,8,9,10
ORDER BY article_id,date_fin
;
-- inventaires
DROP TABLE IF EXISTS w_STOCK_FIN;
CREATE TEMP TABLE w_STOCK_FIN AS
SELECT
TDENREEFOURNIS.CNOID,
CNODENREE,
CNOLIEUSTOCKAGEDFT,
TDENREEFOURNIS.CQTEGRSTOCK,
CPRIXGEF,
CPRIXDEFAUT,
CGRAMME,
CQTEUNITEGESTION
FROM prod_hestia.TSTOCKPRODUITMAGASIN
JOIN prod_hestia.TDENREEFOURNIS on CNOIDPRODUIT = TDENREEFOURNIS.CNOID
LEFT JOIN prod_hestia.TSTOCKPRODUITGEF ON TSTOCKPRODUITGEF.CCODEGEF = TDENREEFOURNIS.CCODEGEF
;
UPDATE w_stock_fin set cprixgef = null;
INSERT INTO w_stock
SELECT
coalesce(t_sites.code_original,''),
coalesce(t_lieux.code_original,''),
t_articles.code_original,
t_articles.oid,
t_articles.compte_id,
COALESCE(t_sites.oid,0),
coalesce(t_lieux.oid,0),
date_trunc('month',now()) AS date_debut,
date_trunc('month',now()) + interval '1 month' - interval '1 day' AS date_fin,
date_part('year',now())*12 + date_part('month',now()) AS mois_sequence,
0 AS entree_quantite,
0 AS entree_montant,
0 AS sortie_quantite,
0 AS sortie_montant,
base.cti_division(SUM(CQTEGRSTOCK*COALESCE(CPRIXGEF,CPRIXDEFAUT)/CGRAMME),SUM(CQTEGRSTOCK)),
1 AS ok_pump,
0 AS stock_quantite_debut,
SUM(CQTEGRSTOCK) AS stock_quantite_fin,
0 AS stock_valeur_debut,
SUM(CQTEGRSTOCK *COALESCE(CPRIXGEF,CPRIXDEFAUT)/CGRAMME) AS stock_valeur_fin
FROM w_STOCK_FIN
JOIN eco.t_articles ON CNODENREE = t_articles.code_original
LEFT JOIN eco.t_sites ON 'XXX' = t_sites.code_original
LEFT JOIN eco.t_lieux ON CNOLIEUSTOCKAGEDFT = t_lieux.code_original
LEFT JOIN w_stock ON 1=1 AND
t_articles.code_original = article_code_original AND
date_trunc('month',now()) = date_debut AND
COALESCE(t_lieux.oid,0) = lieu_id
WHERE date_debut IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11
;
UPDATE w_stock
SET
ok_pump = sub.ok_pump,
--stock_quantite_debut = stock - entree_quantite + sortie_quantite,
stock_quantite_fin = stock,
stock_valeur_debut = (stock - entree_quantite + sortie_quantite) * sub.pump,
stock_valeur_fin = stock * sub.pump,
pump = sub.pump
FROM (
SELECT CNODENREE,
CNOLIEUSTOCKAGEDFT ,
base.cti_division(SUM(CQTEGRSTOCK * COALESCE(CPRIXGEF,CPRIXDEFAUT)/CGRAMME),SUM(CQTEGRSTOCK)) as pump,
1 as ok_pump,
SUM(CQTEGRSTOCK) as stock
FROM w_STOCK_FIN
GROUP BY 1,2) sub
LEFT JOIN eco.t_lieux ON CNOLIEUSTOCKAGEDFT = t_lieux.code_original
WHERE 1=1
AND CNODENREE = article_code_original
AND COALESCE(t_lieux.oid,0) = lieu_id
AND date_trunc('month',now()) = date_debut
AND w_stock.ok_pump = '0'
;
-- calcul quantités
-- maj décroissante
UPDATE w_stock
SET ok_pump = '0.5',
stock_quantite_fin = subview.stock_quantite_fin
--,stock_quantite_debut = subview.stock_quantite_debut
FROM
(
SELECT w_stock.site_id, w_stock.lieu_id, w_stock.article_id, w_stock.mois_sequence, w_stock.date_fin,
--stock_ref.stock_quantite_fin - SUM(w_stock.entree_quantite - w_stock.sortie_quantite) OVER (PARTITION BY w_stock.site_id, w_stock.lieu_id, w_stock.article_id ORDER BY w_stock.date_fin desc) AS stock_quantite_debut,
w_stock_ref.stock_quantite_fin - w_stock_ref.entree_quantite + w_stock_ref.sortie_quantite + w_stock.entree_quantite - w_stock.sortie_quantite - SUM(w_stock.entree_quantite
- w_stock.sortie_quantite) OVER (PARTITION BY w_stock.site_id, w_stock.lieu_id, w_stock.article_id, next_ref ORDER BY w_stock.date_fin desc) AS stock_quantite_fin
FROM w_stock
JOIN (SELECT
site_id,
lieu_id,
article_id,
mois_sequence,
stock_quantite_fin,
entree_quantite,
sortie_quantite,
COALESCE(lead(mois_sequence,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY mois_sequence),100000000) AS next_ref,
COALESCE(lag(mois_sequence,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY mois_sequence),-100000000) AS last_ref
FROM w_stock WHERE ok_pump != '0'
) w_stock_ref ON 1=1
AND w_stock.lieu_id = w_stock_ref.lieu_id
AND w_stock.site_id = w_stock_ref.site_id
AND w_stock.article_id = w_stock_ref.article_id
AND w_stock.mois_sequence BETWEEN last_ref ANd w_stock_ref.mois_sequence
ORDER BY w_stock.date_fin
) subview
WHERE ok_pump = '0' AND
w_stock.article_id = subview.article_id AND
w_stock.site_id = subview.site_id AND
w_stock.lieu_id = subview.lieu_id AND
w_stock.mois_sequence = subview.mois_sequence
;
-- maj croissante des quantités
UPDATE w_stock
SET ok_pump = '0.5',
stock_quantite_fin = subview.stock_quantite_fin--,
--stock_quantite_debut = subview.stock_quantite_debut
FROM
(
SELECT w_stock.site_id, w_stock.lieu_id, w_stock.article_id, w_stock.mois_sequence, w_stock.date_fin,
w_stock_ref.stock_quantite_fin + SUM(w_stock.entree_quantite - w_stock.sortie_quantite) OVER (PARTITION BY w_stock.site_id, w_stock.lieu_id, w_stock.article_id, last_ref ORDER BY w_stock.date_fin asc) AS stock_quantite_fin--,
--stock_ref.stock_quantite_fin - w_stock.entree_quantite + w_stock.sortie_quantite + SUM(w_stock.entree_quantite - w_stock.sortie_quantite) OVER (PARTITION BY w_stock.site_id, w_stock.lieu_id, w_stock.article_id ORDER BY w_stock.date_fin asc) AS stock_quantite_debut
FROM w_stock JOIN
(SELECT
site_id,
lieu_id,
article_id,
mois_sequence,
stock_quantite_fin,
COALESCE(lead(mois_sequence,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY mois_sequence),100000000) AS next_ref,
COALESCE(lag(mois_sequence,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY mois_sequence),-100000000) AS last_ref
FROM w_stock WHERE ok_pump != '0'
) w_stock_ref ON 1=1
AND w_stock.lieu_id = w_stock_ref.lieu_id
AND w_stock.site_id = w_stock_ref.site_id
AND w_stock.article_id = w_stock_ref.article_id
AND w_stock.mois_sequence BETWEEN w_stock_ref.mois_sequence AND next_ref
AND w_stock_ref.mois_sequence < w_stock.mois_sequence
ORDER BY w_stock.date_fin
) subview
WHERE ok_pump = '0' AND
w_stock.article_id = subview.article_id AND
w_stock.site_id = subview.site_id AND
w_stock.lieu_id = subview.lieu_id AND
w_stock.mois_sequence = subview.mois_sequence
;
/* -- forcage pump avec dernières réceptions
DROP TABLE IF EXISTS w_rec;
CREATE TEMP TABLE w_rec AS
SELECT
'1' as ok_pump,
ITMMVT.ITMREF_0,ITMMVT.STOFCY_0,X_PMPPER_0,
date_trunc('month',X_DATPMP_0) AS date_ref
FROM prod_sagex3.ITMMVT
;
-- Prix distri historisé si pas de pump
DROP SEQUENCE IF EXISTS w_prix_distri_seq;
CREATE TEMP SEQUENCE w_prix_distri_seq;
DROP TABLE IF EXISTS w_prix_distri;
CREATE TEMP TABLE w_prix_distri AS
SELECT subview.*, '20991231'::date AS date_fin, nextval('w_prix_distri_seq'::regclass) AS prix_sequence
FROM
(
SELECT STOFCY_0,ITMREF_0, date(date_trunc('month',IPTDAT_0)) AS date_debut,
(MAX(ARRAY[IPTDAT_0::text,PRIORD_0::text]))[2]::numeric AS prix_distri_ht,
0 AS prix_distri_ttc
FROM prod_sagex3.STOJOU
WHERE QTYSTU_0 < 0
AND PRINAT_0 = 5 AND TRSTYP_0 = 4
GROUP BY 1,2,3
ORDER BY 1,2,3
) subview;
UPDATE w_prix_distri
SET date_fin = w_prix_distri_next.date_debut - interval '1 day'
FROM w_prix_distri w_prix_distri_next
WHERE w_prix_distri.ITMREF_0 = w_prix_distri_next.ITMREF_0 AND
w_prix_distri.STOFCY_0 = w_prix_distri_next.STOFCY_0 AND
w_prix_distri.prix_sequence = w_prix_distri_next.prix_sequence - 1
;
CREATE INDEX w_prix_distri_i1 ON w_prix_distri USING btree (ITMREF_0)
;
CREATE INDEX w_prix_distri_i2 ON w_prix_distri USING btree (STOFCY_0)
;
UPDATE w_stock
SET
ok_pump = '1',
pump = X_PMPPER_0,
stock_valeur_fin = stock_quantite_fin * X_PMPPER_0,
stock_valeur_debut = stock_quantite_debut * X_PMPPER_0
FROM w_rec
WHERE 1=1 AND
ITMREF_0 = article_code_original AND
STOFCY_0 = site_code_original AND
date_ref <= date_debut AND
w_stock.ok_pump = '0.5' AND
X_PMPPER_0 != 0
;
UPDATE w_STOCK SET
pump = prix_distri_ht,
stock_valeur_fin = w_STOCK.stock_quantite_fin * prix_distri_ht,
ok_pump = 1
FROM w_prix_distri
WHERE w_prix_distri.ITMREF_0 = w_STOCK.article_code_original AND
w_prix_distri.STOFCY_0 = w_STOCK.site_code_original AND
w_STOCK.date_fin BETWEEN w_prix_distri.date_debut AND w_prix_distri.date_fin
AND ok_pump != '1'
AND prix_distri_ht != 0
;
-- Prix reception historisé si toujours pas de pump
DROP SEQUENCE IF EXISTS w_prix_rec_seq;
CREATE TEMP SEQUENCE w_prix_rec_seq;
DROP TABLE IF EXISTS w_prix_rec;
CREATE TEMP TABLE w_prix_rec AS
SELECT subview.*, '20991231'::date AS date_fin, nextval('w_prix_rec_seq'::regclass) AS prix_sequence
FROM
(
SELECT STOFCY_0,ITMREF_0, date(date_trunc('month',IPTDAT_0)) AS date_debut,
(MAX(ARRAY[IPTDAT_0::text,PRIORD_0::text]))[2]::numeric AS prix_distri_ht,
0 AS prix_distri_ttc
FROM prod_sagex3.STOJOU
WHERE QTYSTU_0 > 0
AND PRINAT_0 = 8
GROUP BY 1,2,3
ORDER BY 1,2,3
) subview;
UPDATE w_prix_rec
SET date_fin = w_prix_rec_next.date_debut - interval '1 day'
FROM w_prix_rec w_prix_rec_next
WHERE w_prix_rec.ITMREF_0 = w_prix_rec_next.ITMREF_0 AND
w_prix_rec.STOFCY_0 = w_prix_rec_next.STOFCY_0 AND
w_prix_rec.prix_sequence = w_prix_rec_next.prix_sequence - 1
;
CREATE INDEX w_prix_rec_i1 ON w_prix_rec USING btree (ITMREF_0)
;
CREATE INDEX w_prix_rec_i2 ON w_prix_rec USING btree (STOFCY_0)
;
UPDATE w_STOCK SET
pump = prix_distri_ht,
stock_valeur_fin = w_STOCK.stock_quantite_fin * prix_distri_ht
FROM w_prix_rec
WHERE w_prix_rec.ITMREF_0 = w_STOCK.article_code_original AND
w_prix_rec.STOFCY_0 = w_STOCK.site_code_original AND
w_STOCK.date_fin BETWEEN w_prix_rec.date_debut AND w_prix_rec.date_fin
AND ok_pump != '1'
;
UPDATE w_STOCK SET
pump = prix_distri_ht,
stock_valeur_fin = w_STOCK.stock_quantite_fin * prix_distri_ht
FROM w_prix_rec
WHERE w_prix_rec.ITMREF_0 = w_STOCK.article_code_original AND
w_prix_rec.STOFCY_0 = w_STOCK.site_code_original AND
w_STOCK.date_fin BETWEEN w_prix_rec.date_debut AND w_prix_rec.date_fin
AND ok_pump != '1'
;
*/
-- ajout des stocks mensuels manquants
SELECT base.cti_execute('
INSERT INTO w_stock
SELECT
w_stock.site_code_original,
w_stock.lieu_code_original,
w_stock.article_code_original,
w_stock.article_id,
w_stock.compte_id,
w_stock.site_id,
w_stock.lieu_id,
date(date_trunc(''month'',w_stock.date_debut) + interval ''1 month'') AS date_debut,
date(date_trunc(''month'',w_stock.date_debut) + interval ''2 month'' - interval ''1 day'') AS date_fin,
w_stock.mois_sequence + 1,
0 AS entree_quantite,
0 AS entree_montant,
0 AS sortie_quantite,
0 AS sortie_montant,
w_stock.pump,
w_stock.ok_pump,
w_stock.stock_quantite_debut,
w_stock.stock_quantite_fin,
w_stock.stock_valeur_debut,
w_stock.stock_valeur_fin
FROM w_stock
LEFT JOIN w_stock w_stock_next ON
w_stock.site_id = w_stock_next.site_id AND
w_stock.lieu_id = w_stock_next.lieu_id AND
w_stock.article_code_original = w_stock_next.article_code_original AND
w_stock.mois_sequence = w_stock_next.mois_sequence - 1
WHERE
w_stock_next.mois_sequence IS NULL AND
w_stock.date_debut <= date(now()) AND
w_stock.date_fin >= ''[ENV_ECO_ANNEEDEBUT]-01-01'' AND
w_stock.stock_quantite_fin != 0
',200)
;
-- mise à jour des débuts
UPDATE w_STOCK SET
stock_quantite_debut = stock_quantite_fin - entree_quantite + sortie_quantite,
stock_valeur_debut = stock_valeur_fin - entree_montant + sortie_montant
;
-- insertion
TRUNCATE eco.p_stock
;
INSERT INTO eco.p_stock
(
article_id,
compte_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
article_id,
compte_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
FROM w_stock
WHERE stock_quantite_debut != 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');
]]></sqlcmd>
</NODE>
<NODE label="Factures">
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="POST" label="POST-TRAITEMENTS">
</NODE>
</ROOT>