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