'' AND
CODE_TIPS NOT IN (SELECT code FROM base.t_lpp)
GROUP BY 1,2,3;
-- UCD
INSERT INTO base.t_ucd (code, texte, texte_court, laboratoire_texte, conditionnement_texte)
SELECT CODE, MAX(LIB_LONG), MAX(LIB_LONG), MAX(LABO), MAX(LIB_COND)
FROM prod_sigems.UCD_FICHE_GENE
WHERE CODE NOT IN (SELECT code FROM base.t_ucd)
GROUP BY 1;
INSERT INTO base.t_ucd (code, texte, texte_court)
SELECT UCD, UCD, UCD
FROM w_ARTICLES
WHERE UCD <> '' AND
UCD NOT IN (SELECT code FROM base.t_ucd) AND
length(UCD) = 7
GROUP BY 1,2,3;
-- ATC
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(CODE_5), UPPER(MAX(CODE_5)), MAX(LIBELLE_5), MAX(LIBELLE_5)
FROM prod_sigems.ATC
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(CODE_5)
WHERE CODE_5 <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(CODE_4), UPPER(MAX(CODE_4)), MAX(LIBELLE_4), MAX(LIBELLE_4)
FROM prod_sigems.ATC
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(CODE_4)
WHERE CODE_4 <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(CODE_3), UPPER(MAX(CODE_3)), MAX(LIBELLE_3), MAX(LIBELLE_3)
FROM prod_sigems.ATC
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(CODE_3)
WHERE CODE_3 <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(CODE_2), UPPER(MAX(CODE_2)), MAX(LIBELLE_2), MAX(LIBELLE_2)
FROM prod_sigems.ATC
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(CODE_2)
WHERE CODE_2 <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(CODE_1), UPPER(MAX(CODE_1)), MAX(LIBELLE_1), MAX(LIBELLE_1)
FROM prod_sigems.ATC
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(CODE_1)
WHERE CODE_1 <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
-- Standard ATC
SELECT eco.cti_reorganize_classification_atc();
-- Comptes
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT
NUM,
MAX(trim(INT1 || ' ' || INT2)),
MAX(trim(INT1 || ' ' || INT2)),
NUM
FROM prod_sigems.COMPTE
JOIN prod_sigems.ARTICLES ON ARTICLES.compte_general = compte.num
JOIN prod_sigems.LA_SOCIETE ON LA_SOCIETE.code_societe = compte.ste AND LA_SOCIETE.groupe = ARTICLES.groupe
WHERE 1=1
AND NUM <> ''
AND NUM NOT IN (SELECT code_original FROM eco.t_compte WHERE code_original IS NOT NULL)
GROUP BY 1
ORDER BY 1
;
WITH new_label AS (
SELECT
num as code_original,
MAX(trim(INT1 || ' ' || INT2)) as texte
FROM prod_sigems.COMPTE
JOIN prod_sigems.ARTICLES ON ARTICLES.compte_general = compte.num
JOIN prod_sigems.LA_SOCIETE ON LA_SOCIETE.code_societe = compte.ste AND LA_SOCIETE.groupe = ARTICLES.groupe
WHERE NUM <> ''
GROUP BY 1
)
UPDATE eco.t_compte
SET
texte = new_label.texte,
texte_court = new_label.texte
FROM new_label
WHERE 1=1
AND t_compte.code_original = new_label.code_original
AND (t_compte.texte IS DISTINCT FROM new_label.texte OR t_compte.texte_court IS DISTINCT FROM new_label.texte)
;
-- Types d'articles
INSERT INTO eco.t_types_articles(code, texte, texte_court, code_original)
SELECT CODE, NOM, NOM, CODE
FROM prod_sigems.GROUPE
WHERE CODE <> '' AND
CODE IN (SELECT GROUPE FROM prod_sigems.ARTICLES) AND
CODE NOT IN (SELECT code_original FROM eco.t_types_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
-- Familles d'articles
DROP TABLE IF EXISTS w_FAMILLE;
CREATE TEMP TABLE w_FAMILLE AS
SELECT FAMILLE.CODE::text,
UPPER(FAMILLE.CODE)::text AS CODE_CTI,
FAMILLE.GROUPE::text,
FAMILLE.CODE::text AS GROUPE_CODE,
MAX(FAMILLE.LIBELLE)::text AS LIBELLE
FROM prod_sigems.FAMILLE
JOIN w_ARTICLES ARTICLES ON
FAMILLE.GROUPE = ARTICLES.GROUPE AND
FAMILLE.CODE = ARTICLES.FAMILLE
WHERE CODE <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_FAMILLE SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_FAMILLE GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
INSERT INTO eco.t_familles_articles(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, LIBELLE, GROUPE_CODE
FROM w_FAMILLE
WHERE CODE <> '' AND
GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_familles_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE eco.t_familles_articles
SET texte = LIBELLE, texte_court = LIBELLE
FROM w_FAMILLE
WHERE w_FAMILLE.GROUPE_CODE = code_original AND
(texte IS DISTINCT FROM LIBELLE OR
texte_court IS DISTINCT FROM LIBELLE);
UPDATE w_ARTICLES SET
FAMILLE_CODE_CTI = w_FAMILLE.CODE_CTI
FROM w_FAMILLE
WHERE w_FAMILLE.GROUPE = w_ARTICLES.GROUPE AND
w_FAMILLE.CODE = w_ARTICLES.FAMILLE AND
FAMILLE_CODE_CTI IS DISTINCT FROM w_FAMILLE.CODE_CTI;
-- Sous familles
DROP TABLE IF EXISTS w_RUBRIQUE_TARIF;
CREATE TEMP TABLE w_RUBRIQUE_TARIF AS
SELECT RUBRIQUE_TARIF.CODE::text,
UPPER(RUBRIQUE_TARIF.CODE)::text AS CODE_CTI,
RUBRIQUE_TARIF.GROUPE::text,
RUBRIQUE_TARIF.CODE::text AS GROUPE_CODE,
MAX(RUBRIQUE_TARIF.LIBELLE)::text AS LIBELLE
FROM prod_sigems.RUBRIQUE_TARIF
JOIN w_ARTICLES ARTICLES ON
RUBRIQUE_TARIF.GROUPE = ARTICLES.GROUPE AND
RUBRIQUE_TARIF.CODE = ARTICLES.RUBRIQUE_TARIF
WHERE CODE <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_RUBRIQUE_TARIF SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_RUBRIQUE_TARIF GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
INSERT INTO eco.t_sous_familles_articles(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, LIBELLE, GROUPE_CODE
FROM w_RUBRIQUE_TARIF
WHERE CODE <> '' AND
GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_sous_familles_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE eco.t_sous_familles_articles
SET texte = LIBELLE, texte_court = LIBELLE
FROM w_RUBRIQUE_TARIF
WHERE w_RUBRIQUE_TARIF.GROUPE_CODE = code_original AND
(texte IS DISTINCT FROM LIBELLE OR
texte_court IS DISTINCT FROM LIBELLE);
UPDATE w_ARTICLES SET
RUBRIQUE_TARIF_CODE_CTI = w_RUBRIQUE_TARIF.CODE_CTI
FROM w_RUBRIQUE_TARIF
WHERE w_RUBRIQUE_TARIF.GROUPE = w_ARTICLES.GROUPE AND
w_RUBRIQUE_TARIF.CODE = w_ARTICLES.RUBRIQUE_TARIF AND
RUBRIQUE_TARIF_CODE_CTI IS DISTINCT FROM w_RUBRIQUE_TARIF.CODE_CTI;
-- Catégories
DROP TABLE IF EXISTS w_CATEG_1;
CREATE TEMP TABLE w_CATEG_1 AS
SELECT CATEG_1.CODE::text,
UPPER(CATEG_1.CODE)::text AS CODE_CTI,
CATEG_1.GROUPE::text,
CATEG_1.CODE::text AS GROUPE_CODE,
MAX(CATEG_1.LIBELLE)::text AS LIBELLE
FROM prod_sigems.CATEG_1
JOIN w_ARTICLES ARTICLES ON
CATEG_1.GROUPE = ARTICLES.GROUPE AND
CATEG_1.CODE = ARTICLES.CATEG_1
WHERE CODE <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_CATEG_1 SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_CATEG_1 GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
INSERT INTO eco.t_categories_articles(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, substr(LIBELLE,1,50), GROUPE_CODE
FROM w_CATEG_1
WHERE CODE <> '' AND
GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_categories_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE eco.t_categories_articles
SET texte = LIBELLE, texte_court = substr(LIBELLE,1,50)
FROM w_CATEG_1
WHERE w_CATEG_1.GROUPE_CODE = code_original AND
(texte IS DISTINCT FROM LIBELLE OR
texte_court IS DISTINCT FROM substr(LIBELLE,1,50));
UPDATE w_ARTICLES SET
CATEG_1_CODE_CTI = w_CATEG_1.CODE_CTI
FROM w_CATEG_1
WHERE w_CATEG_1.GROUPE = w_ARTICLES.GROUPE AND
w_CATEG_1.CODE = w_ARTICLES.CATEG_1 AND
CATEG_1_CODE_CTI IS DISTINCT FROM w_CATEG_1.CODE_CTI;
-- Sous catégories (2 ou 3 selon paramètre)
DROP TABLE IF EXISTS w_CATEG_2;
CREATE TEMP TABLE w_CATEG_2 AS
SELECT ARTICLES.CATEG_2::text AS CODE,
UPPER(ARTICLES.CATEG_2)::text AS CODE_CTI,
COALESCE(CATEG_2.GROUPE,'')::text AS GROUPE,
ARTICLES.CATEG_2::text AS GROUPE_CODE,
MAX(COALESCE(CATEG_2.LIBELLE,ARTICLES.CATEG_2))::text AS LIBELLE
FROM w_ARTICLES ARTICLES
LEFT JOIN prod_sigems.CATEG_2 ON
CATEG_2.GROUPE = ARTICLES.GROUPE AND
CATEG_2.CODE = ARTICLES.CATEG_2
WHERE ARTICLES.CATEG_2 <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_CATEG_2 SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_CATEG_2 GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
DROP TABLE IF EXISTS w_CATEG_3;
CREATE TEMP TABLE w_CATEG_3 AS
SELECT ARTICLES.CATEG_3::text AS CODE,
UPPER(ARTICLES.CATEG_3)::text AS CODE_CTI,
COALESCE(CATEG_3.GROUPE,'')::text AS GROUPE,
ARTICLES.CATEG_3::text AS GROUPE_CODE,
MAX(COALESCE(CATEG_3.LIBELLE,ARTICLES.CATEG_3))::text AS LIBELLE
FROM w_ARTICLES ARTICLES
LEFT JOIN prod_sigems.CATEG_3 ON
CATEG_3.GROUPE = ARTICLES.GROUPE AND
CATEG_3.CODE = ARTICLES.CATEG_3
WHERE ARTICLES.CATEG_3 <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_CATEG_3 SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_CATEG_3 GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
-- Origine de la sous-catégorie
INSERT INTO eco.t_divers (code, texte, valeur, description)
SELECT
'SIGEMS_SCA_SRC'::text,
'Origine de la sous-catégorie'::text,
'CATEG_3'::text,
'CATEG_2, CATEG_3'::text
WHERE 'SIGEMS_SCA_SRC'::text NOT IN (SELECT code FROM eco.t_divers)
;
INSERT INTO eco.t_sous_categories_articles(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, substr(LIBELLE,1,50), GROUPE_CODE
FROM w_CATEG_2
JOIN eco.t_divers ON t_divers.code = 'SIGEMS_SCA_SRC' AND t_divers.valeur <> 'CATEG_3'
WHERE w_CATEG_2.CODE <> '' AND
w_CATEG_2.GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_sous_categories_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
INSERT INTO eco.t_sous_categories_articles(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, substr(LIBELLE,1,50), GROUPE_CODE
FROM w_CATEG_3
JOIN eco.t_divers ON t_divers.code = 'SIGEMS_SCA_SRC' AND t_divers.valeur = 'CATEG_3'
WHERE w_CATEG_3.CODE <> '' AND
w_CATEG_3.GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_sous_categories_articles WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE eco.t_sous_categories_articles
SET texte = LIBELLE, texte_court = substr(LIBELLE,1,50)
FROM w_CATEG_2
JOIN eco.t_divers ON t_divers.code = 'SIGEMS_SCA_SRC' AND t_divers.valeur <> 'CATEG_3'
WHERE w_CATEG_2.GROUPE_CODE = code_original AND
(
t_sous_categories_articles.texte IS DISTINCT FROM LIBELLE OR
t_sous_categories_articles.texte_court IS DISTINCT FROM substr(LIBELLE,1,50)
)
;
UPDATE eco.t_sous_categories_articles
SET texte = LIBELLE, texte_court = substr(LIBELLE,1,50)
FROM w_CATEG_3
JOIN eco.t_divers ON t_divers.code = 'SIGEMS_SCA_SRC' AND t_divers.valeur = 'CATEG_3'
WHERE w_CATEG_3.GROUPE_CODE = code_original AND
(
t_sous_categories_articles.texte IS DISTINCT FROM LIBELLE OR
t_sous_categories_articles.texte_court IS DISTINCT FROM substr(LIBELLE,1,50)
)
;
UPDATE w_ARTICLES SET
CATEG_2_CODE_CTI = w_CATEG_2.CODE_CTI
FROM w_CATEG_2
WHERE w_CATEG_2.GROUPE = w_ARTICLES.GROUPE AND
w_CATEG_2.CODE = w_ARTICLES.CATEG_2 AND
CATEG_2_CODE_CTI IS DISTINCT FROM w_CATEG_2.CODE_CTI
;
UPDATE w_ARTICLES SET
CATEG_3_CODE_CTI = w_CATEG_3.CODE_CTI
FROM w_CATEG_3
WHERE w_CATEG_3.GROUPE = w_ARTICLES.GROUPE AND
w_CATEG_3.CODE = w_ARTICLES.CATEG_3 AND
CATEG_3_CODE_CTI IS DISTINCT FROM w_CATEG_3.CODE_CTI
;
-- Articles
INSERT INTO eco.t_articles(code, texte, texte_court, code_original)
SELECT CODE_ARTICLE, LIBELLE_CONCAT, substr(LIBELLE_CONCAT,1,50), CODE_ARTICLE
FROM w_ARTICLES ARTICLES
LEFT JOIN eco.t_articles ON (code_original = CODE_ARTICLE)
WHERE code_original IS NULL;
UPDATE eco.t_articles
SET
texte = LIBELLE_CONCAT,
texte_court = substr(LIBELLE_CONCAT,1,50)
FROM w_ARTICLES ARTICLES
WHERE code_original = CODE_ARTICLE
AND (
texte IS DISTINCT FROM LIBELLE_CONCAT OR
texte_court IS DISTINCT FROM substr(LIBELLE_CONCAT,1,50));
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),
code_ucd13 = ARTICLES.UCD13
FROM w_ARTICLES ARTICLES
JOIN eco.t_divers ON t_divers.code = 'SIGEMS_SCA_SRC'
LEFT JOIN eco.t_familles_articles ON FAMILLE_CODE_CTI = upper(t_familles_articles.code_original)
LEFT JOIN eco.t_sous_familles_articles ON RUBRIQUE_TARIF_CODE_CTI = upper(t_sous_familles_articles.code_original)
LEFT JOIN eco.t_types_articles ON GROUPE = upper(t_types_articles.code_original)
LEFT JOIN eco.t_classification_atc ON ATC = upper(t_classification_atc.code_original)
LEFT JOIN eco.t_categories_articles ON ARTICLES.CATEG_1_CODE_CTI = upper(t_categories_articles.code_original)
LEFT JOIN eco.t_sous_categories_articles ON
(
t_divers.valeur <> 'CATEG_3' AND ARTICLES.CATEG_2_CODE_CTI = upper(t_sous_categories_articles.code_original) OR
t_divers.valeur = 'CATEG_3' AND ARTICLES.CATEG_3_CODE_CTI = upper(t_sous_categories_articles.code_original)
)
LEFT JOIN eco.t_unites t_unites_stockage ON UNITE_DISTRI = upper(t_unites_stockage.code_original)
LEFT JOIN eco.t_unites t_unites_distribution ON UNITE_CONSO = upper(t_unites_distribution.code_original)
LEFT JOIN base.t_lpp ON CODE_TIPS = t_lpp.code
LEFT JOIN base.t_ucd ON UCD = t_ucd.code
WHERE
t_articles.code_original = ARTICLES.CODE_ARTICLE 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
code_ucd13 IS DISTINCT FROM ARTICLES.UCD13
)
;
UPDATE eco.t_articles SET
compte_id = COALESCE(t_compte.oid,0)
FROM w_ARTICLES ARTICLES
LEFT JOIN eco.t_compte ON COMPTE_GENERAL = t_compte.code_original
WHERE
t_articles.code_original = CODE_ARTICLE AND
(
t_articles.compte_id IS DISTINCT FROM COALESCE(t_compte.oid,0)
);
UPDATE eco.t_articles SET compte_id = 0 WHERE compte_id IS NULL;
UPDATE eco.t_articles SET
gere_en_stock = CASE WHEN ARTICLES.STOCKABLE = 'O' AND ARTICLES.STOCK_EN_DEPOT <> 'O' THEN '1' ELSE '0' END,
stock_en_depot = CASE WHEN ARTICLES.STOCKABLE = 'O' AND ARTICLES.STOCK_EN_DEPOT = 'O' THEN '1' ELSE '0' END
FROM prod_sigems.ARTICLES
WHERE CODE_ARTICLE = code_original AND
(
t_articles.gere_en_stock IS DISTINCT FROM CASE WHEN ARTICLES.STOCKABLE = 'O' AND ARTICLES.STOCK_EN_DEPOT <> 'O' THEN '1' ELSE '0' END OR
t_articles.stock_en_depot IS DISTINCT FROM CASE WHEN ARTICLES.STOCKABLE = 'O' AND ARTICLES.STOCK_EN_DEPOT = 'O' THEN '1' ELSE '0' END
)
;
UPDATE eco.t_articles SET
taux_tva_en_cours = TAUX
FROM
(
SELECT ARTICLES.CODE_ARTICLE,
MAX(COALESCE(date(ART_TVA.JUSQUAU),'20991231'::date)) AS date_fin_tva,
(MAX(ARRAY[COALESCE(date(ART_TVA.JUSQUAU),'20991231'::date)::text,COALESCE(TXTVA2.TAUX,TXTVA1.TAUX,20)::text]))[2]::numeric AS TAUX
FROM prod_sigems.ARTICLES
LEFT JOIN prod_sigems.TXTVA TXTVA1 ON TXTVA1.TVA = ARTICLES.CODE_TVA
LEFT JOIN prod_sigems.ART_TVA ON ARTICLES.CODE_ARTICLE = ART_TVA.CODE_ARTICLE AND COALESCE(ART_TVA.JUSQUAU,'20991231') >= date(now())
LEFT JOIN prod_sigems.TXTVA TXTVA2 ON TXTVA2.TVA = ART_TVA.CODE_TVA
GROUP BY 1
) subview
WHERE CODE_ARTICLE = code_original AND
taux_tva_en_cours IS DISTINCT FROM TAUX
;
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
);
]]>
''
GROUP BY 1
) AFFACTURAGE ON
AFFACTURAGE.COMPTE = FOURNISSEUR.CODE_COMPTABLE
;
UPDATE w_FOURNISSEUR
SET IBAN = substr(IBAN,1,4) || ' ' || substr(IBAN,5,4) || ' ' || substr(IBAN,9,4) || ' ' || substr(IBAN,13,4) || ' ' || substr(IBAN,17,4) || ' ' || substr(IBAN,21,4) || ' ' || substr(IBAN,25,3)
WHERE IBAN <> ''
;
UPDATE w_FOURNISSEUR
SET SIRET = AFFACTURAGE_SIRET
WHERE AFFACTURAGE_SIRET <> ''
;
-- Types de fournisseurs
DROP TABLE IF EXISTS w_TYPE_FOURNISSEUR;
CREATE TEMP TABLE w_TYPE_FOURNISSEUR AS
SELECT TYPE_FOURNISSEUR.CODE::text,
UPPER(TYPE_FOURNISSEUR.CODE)::text AS CODE_CTI,
TYPE_FOURNISSEUR.GROUPE::text,
TYPE_FOURNISSEUR.CODE::text AS GROUPE_CODE,
UPPER(MAX(TYPE_FOURNISSEUR.LIBELLE))::text AS LIBELLE
FROM prod_sigems.TYPE_FOURNISSEUR
JOIN w_FOURNISSEUR FOURNISSEUR ON
TYPE_FOURNISSEUR.GROUPE = FOURNISSEUR.GROUPE AND
TYPE_FOURNISSEUR.CODE = FOURNISSEUR.TYPE_FOURNISSEUR
WHERE CODE <> ''
GROUP BY 1,2,3
ORDER BY 1,2;
UPDATE w_TYPE_FOURNISSEUR SET
CODE_CTI = CODE_CTI || ' (' || GROUPE || ')',
GROUPE_CODE = CODE || '-' || GROUPE
WHERE CODE IN (SELECT CODE FROM w_TYPE_FOURNISSEUR GROUP BY 1 HAVING COUNT(DISTINCT LIBELLE) > 1);
INSERT INTO eco.t_types_fournisseurs(code, texte, texte_court, code_original)
SELECT CODE_CTI, LIBELLE, LIBELLE, GROUPE_CODE
FROM w_TYPE_FOURNISSEUR
WHERE GROUPE_CODE NOT IN (SELECT code_original FROM eco.t_types_fournisseurs WHERE code_original IS NOT NULL)
GROUP BY 1,2,3,4
ORDER BY 1;
UPDATE w_FOURNISSEUR SET
TYPE_FOURNISSEUR_CODE_CTI = w_TYPE_FOURNISSEUR.CODE_CTI
FROM w_TYPE_FOURNISSEUR
WHERE w_TYPE_FOURNISSEUR.GROUPE = w_FOURNISSEUR.GROUPE AND
w_TYPE_FOURNISSEUR.CODE = w_FOURNISSEUR.TYPE_FOURNISSEUR AND
TYPE_FOURNISSEUR_CODE_CTI IS DISTINCT FROM w_TYPE_FOURNISSEUR.CODE_CTI;
-- Fournisseurs
INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original)
SELECT CODE_FOURNISSEUR,
UPPER(NOM_FOURNISSEUR),
UPPER(NOM_FOURNISSEUR),
CODE_FOURNISSEUR
FROM w_FOURNISSEUR FOURNISSEUR
LEFT JOIN eco.t_fournisseurs ON (code_original = CODE_FOURNISSEUR)
WHERE code_original IS NULL
GROUP BY 1,2,3,4;
INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id)
SELECT FOURNISSEUR.CODE_POSTAL, UPPER(MAX(FOURNISSEUR.BUREAU_DISTRIB)), UPPER(MAX(FOURNISSEUR.BUREAU_DISTRIB)), MAX(t_departements.oid)
FROM w_FOURNISSEUR FOURNISSEUR
LEFT JOIN base.t_codes_postaux ON FOURNISSEUR.CODE_POSTAL = t_codes_postaux.code
JOIN base.t_departements ON
FOURNISSEUR.CODE_POSTAL NOT LIKE '97%' AND substr(FOURNISSEUR.CODE_POSTAL,1,2) = t_departements.code OR
FOURNISSEUR.CODE_POSTAL LIKE '97%' AND substr(FOURNISSEUR.CODE_POSTAL,1,3) = t_departements.code
WHERE t_codes_postaux.oid IS NULL AND
length(FOURNISSEUR.CODE_POSTAL) = 5
GROUP BY 1
;
UPDATE eco.t_fournisseurs SET
texte = UPPER(NOM_FOURNISSEUR),
texte_court = UPPER(NOM_FOURNISSEUR),
adresse = FOURNISSEUR.RUE || ' ' || FOURNISSEUR.COMPLEMENT_RUE,
code_postal_id = COALESCE(t_codes_postaux.oid,0),
ville = FOURNISSEUR.VILLE_FOURNISSEUR,
cedex = '',
telephone = FOURNISSEUR.TELEPHONE,
fax = FOURNISSEUR.TELECOPIE,
email = FOURNISSEUR.E_MAIL,
siret = FOURNISSEUR.SIRET,
code_cahpp = FORMAT_CODE_BARRE,
iban = FOURNISSEUR.IBAN,
bic = FOURNISSEUR.BIC,
code_comptable = FOURNISSEUR.CODE_COMPTABLE
FROM w_FOURNISSEUR FOURNISSEUR
LEFT JOIN base.t_codes_postaux ON FOURNISSEUR.CODE_POSTAL = t_codes_postaux.code
WHERE code_original = CODE_FOURNISSEUR
AND (
t_fournisseurs.texte IS DISTINCT FROM UPPER(NOM_FOURNISSEUR) OR
t_fournisseurs.texte_court IS DISTINCT FROM UPPER(NOM_FOURNISSEUR) OR
t_fournisseurs.adresse IS DISTINCT FROM (FOURNISSEUR.RUE || ' ' || FOURNISSEUR.COMPLEMENT_RUE) OR
t_fournisseurs.code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR
t_fournisseurs.ville IS DISTINCT FROM FOURNISSEUR.VILLE_FOURNISSEUR OR
t_fournisseurs.cedex IS DISTINCT FROM '' OR
t_fournisseurs.telephone IS DISTINCT FROM FOURNISSEUR.TELEPHONE OR
t_fournisseurs.fax IS DISTINCT FROM FOURNISSEUR.TELECOPIE OR
t_fournisseurs.email IS DISTINCT FROM FOURNISSEUR.E_MAIL OR
t_fournisseurs.siret IS DISTINCT FROM FOURNISSEUR.SIRET OR
t_fournisseurs.code_cahpp IS DISTINCT FROM FORMAT_CODE_BARRE OR
t_fournisseurs.iban IS DISTINCT FROM FOURNISSEUR.IBAN OR
t_fournisseurs.bic IS DISTINCT FROM FOURNISSEUR.BIC OR
t_fournisseurs.code_comptable IS DISTINCT FROM FOURNISSEUR.CODE_COMPTABLE
)
;
UPDATE eco.t_fournisseurs
SET fournisseur_distributeur_id = COALESCE(t_fournisseurs_distributeur.oid, t_fournisseurs.oid)
FROM w_FOURNISSEUR FOURNISSEUR
LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON
FOURNISSEUR.DISTRIBUTEUR = t_fournisseurs_distributeur.code_original AND
FOURNISSEUR.DISTRIBUTEUR <> '' AND
FOURNISSEUR.DISTRIBUTEUR <> 'LUI'
WHERE t_fournisseurs.code_original = FOURNISSEUR.CODE_FOURNISSEUR AND
t_fournisseurs.fournisseur_distributeur_id IS DISTINCT FROM COALESCE(t_fournisseurs_distributeur.oid, t_fournisseurs.oid)
;
UPDATE eco.t_fournisseurs SET
type_id = COALESCE(t_types_fournisseurs.oid,0)
FROM w_FOURNISSEUR FOURNISSEUR
LEFT JOIN eco.t_types_fournisseurs ON TYPE_FOURNISSEUR_CODE_CTI = t_types_fournisseurs.code_original
WHERE t_fournisseurs.code_original = CODE_FOURNISSEUR AND
type_id IS DISTINCT FROM COALESCE(t_types_fournisseurs.oid,0);
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
);
DROP TABLE IF EXISTS w_ARTICLES_FOURNISSEUR;
CREATE TEMP TABLE w_ARTICLES_FOURNISSEUR AS
SELECT
ARTICLE_PRIXACHA.CODE_ARTICLE,
ARTICLE_PRIXACHA.CODE_FOURNISSEUR,
MAX(ARTICLE_PRIXACHA.PRINCIPAL) AS PRINCIPAL,
MAX(ARTICLES.UCD) AS UCD,
''::text AS UCD13,
MAX(ARTICLES.CODE_TIPS) AS CODE_TIPS,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,CODE_CHEZ_FOURNIS::text]))[2]::text AS CODE_CHEZ_FOURNIS,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,LIB_CHEZ_FOURNIS::text]))[2]::text AS LIB_CHEZ_FOURNIS,
MAX(CASE WHEN length(ARTICLE_PRIXACHA.LIB_CHEZ_FOURNIS) <= 2 THEN ARTICLE_PRIXACHA.CODE_CHEZ_FOURNIS ELSE ARTICLE_PRIXACHA.LIB_CHEZ_FOURNIS || CASE WHEN ARTICLE_PRIXACHA.CODE_CHEZ_FOURNIS <> '' THEN ' (' || ARTICLE_PRIXACHA.CODE_CHEZ_FOURNIS || ')' ELSE '' END END) AS LIB_CODE_CHEZ_FOURNIS,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,E_PRIX::text]))[2]::numeric AS E_PX_UNIT_NET,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,CASE WHEN ARTICLE_PRIXACHA.COEFF_ACHAT <> 0 THEN ARTICLE_PRIXACHA.COEFF_ACHAT ELSE ARTICLE_PRIXACHA.COEFF_CONSO END::text]))[2]::numeric AS COEFF_UNITE,
MAX(ARTICLE_PRIXACHA.A_COMPTER_DU) AS A_COMPTER_DU,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,UNITE_ACHAT::text]))[2]::text AS UNITE_ACHAT,
(MAX(ARRAY[ARTICLE_PRIXACHA.A_COMPTER_DU::text,CIP::text]))[2]::text AS CIP,
count(*) AS nb,
0::bigint AS article_id,
0::bigint AS fournisseur_id,
0::bigint AS fournisseur_distributeur_id
FROM prod_sigems.ARTICLE_PRIXACHA
JOIN prod_sigems.ARTICLES ON ARTICLES.CODE_ARTICLE = ARTICLE_PRIXACHA.CODE_ARTICLE
GROUP BY 1,2
ORDER BY 1;
DROP TABLE IF EXISTS w_ARTICLES_FOURNISSEURA;
CREATE TEMP TABLE w_ARTICLES_FOURNISSEURA AS
SELECT
ACHA_LIGNE.CODE_ARTICLE,
ACHA_ENTETE.CODE_FOURNISSEUR,
'N'::text AS PRINCIPAL,
MAX(ARTICLES.UCD) AS UCD,
''::text AS UCD13,
MAX(ARTICLES.CODE_TIPS) AS CODE_TIPS,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,ACHA_LIGNE.CODE_CHEZ_FOURNIS::text]))[2]::text AS CODE_CHEZ_FOURNIS,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,ACHA_LIGNE.LIB_CHEZ_FOURNIS::text]))[2]::text AS LIB_CHEZ_FOURNIS,
MAX(CASE WHEN length(ACHA_LIGNE.LIB_CHEZ_FOURNIS) <= 2 THEN ACHA_LIGNE.CODE_CHEZ_FOURNIS ELSE ACHA_LIGNE.LIB_CHEZ_FOURNIS || CASE WHEN ACHA_LIGNE.CODE_CHEZ_FOURNIS <> '' THEN ' (' || ACHA_LIGNE.CODE_CHEZ_FOURNIS || ')' ELSE '' END END) AS LIB_CODE_CHEZ_FOURNIS,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,ACHA_LIGNE.E_PX_UNIT_NET::text]))[2]::numeric AS E_PX_UNIT_NET,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,ACHA_LIGNE.COEFF_UNITE::text]))[2]::numeric AS COEFF_UNITE,
MAX(ACHA_ENTETE.DATE_COMMANDE) AS A_COMPTER_DU,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,ACHA_LIGNE.UNITE_ACHAT::text]))[2]::text AS UNITE_ACHAT,
(MAX(ARRAY[ACHA_ENTETE.DATE_COMMANDE::text,CODE_BARRE::text]))[2]::text AS CIP,
count(*) AS nb,
0::bigint AS article_id,
0::bigint AS fournisseur_id,
0::bigint AS fournisseur_distributeur_id
FROM prod_sigems.ACHA_LIGNE
JOIN prod_sigems.ACHA_ENTETE ON ACHA_LIGNE.NUMERO_CDE = ACHA_ENTETE.NUMERO_CDE
JOIN prod_sigems.ARTICLES ON ARTICLES.CODE_ARTICLE = ACHA_LIGNE.CODE_ARTICLE
GROUP BY 1,2
ORDER BY 1,2
;
INSERT INTO w_ARTICLES_FOURNISSEUR
SELECT
w_ARTICLES_FOURNISSEURA.*
FROM w_ARTICLES_FOURNISSEURA
LEFT JOIN w_ARTICLES_FOURNISSEUR ON
w_ARTICLES_FOURNISSEUR.CODE_ARTICLE = w_ARTICLES_FOURNISSEURA.CODE_ARTICLE AND
w_ARTICLES_FOURNISSEUR.CODE_FOURNISSEUR = w_ARTICLES_FOURNISSEURA.CODE_FOURNISSEUR
WHERE w_ARTICLES_FOURNISSEUR.CODE_ARTICLE IS NULL
;
UPDATE w_ARTICLES_FOURNISSEUR
SET PRINCIPAL = 'N'
FROM
(
SELECT CODE_ARTICLE, (MAX(ARRAY[A_COMPTER_DU::text,CODE_FOURNISSEUR::text]))[2] AS CODE_FOURNISSEUR
FROM w_ARTICLES_FOURNISSEUR
WHERE PRINCIPAL = 'O'
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_ARTICLES_FOURNISSEUR.CODE_ARTICLE = subview.CODE_ARTICLE AND
w_ARTICLES_FOURNISSEUR.PRINCIPAL = 'O' AND
w_ARTICLES_FOURNISSEUR.CODE_FOURNISSEUR <> subview.CODE_FOURNISSEUR
;
UPDATE w_ARTICLES_FOURNISSEUR SET
COEFF_UNITE = w_ARTICLES_FOURNISSEURA.COEFF_UNITE
FROM w_ARTICLES_FOURNISSEURA
WHERE w_ARTICLES_FOURNISSEUR.CODE_ARTICLE = w_ARTICLES_FOURNISSEURA.CODE_ARTICLE AND
w_ARTICLES_FOURNISSEUR.CODE_FOURNISSEUR = w_ARTICLES_FOURNISSEURA.CODE_FOURNISSEUR AND
w_ARTICLES_FOURNISSEUR.COEFF_UNITE IS DISTINCT FROM w_ARTICLES_FOURNISSEURA.COEFF_UNITE
;
UPDATE w_ARTICLES_FOURNISSEUR
SET UCD13 = CODE_CHEZ_FOURNIS
WHERE length(CODE_CHEZ_FOURNIS) = 13 AND
CODE_CHEZ_FOURNIS LIKE '34008%'
;
UPDATE w_ARTICLES_FOURNISSEUR
SET UCD13 = CIP
WHERE length(CIP) = 13 AND
CIP LIKE '34008%' AND ucd = ''
;
UPDATE w_ARTICLES_FOURNISSEUR
SET article_id = t_articles.oid
FROM eco.t_articles
WHERE CODE_ARTICLE = t_articles.code
;
UPDATE w_ARTICLES_FOURNISSEUR SET
UCD13 = UCD,
UCD = substr(UCD,6,7)
WHERE length(UCD) = 13 AND
UCD LIKE '34008%'
;
UPDATE w_ARTICLES_FOURNISSEUR
SET UCD = substr(UCD13,6,7)
WHERE UCD = '' AND UCD13 <> ''
;
UPDATE w_ARTICLES_FOURNISSEUR SET
fournisseur_id = t_fournisseurs.oid,
fournisseur_distributeur_id = t_fournisseurs.fournisseur_distributeur_id
FROM eco.t_fournisseurs
WHERE CODE_FOURNISSEUR = t_fournisseurs.code
;
UPDATE eco.t_articles SET
ref_fournisseur_id = subview.ref_fournisseur_id,
ref_fournisseur_code = subview.ref_fournisseur_code,
ref_fournisseur_texte = subview.ref_fournisseur_texte
FROM
(
SELECT article_id,
base.cti_group_array3(fournisseur_id) AS ref_fournisseur_id,
base.cti_group_array3(ref_fournisseur_code) AS ref_fournisseur_code,
base.cti_group_array3(ref_fournisseur_texte) AS ref_fournisseur_texte
FROM
(
SELECT
article_id,
fournisseur_id,
(MAX(Array[A_COMPTER_DU::text, CASE WHEN CODE_CHEZ_FOURNIS <> '' THEN CODE_CHEZ_FOURNIS WHEN UCD <> '' THEN UCD WHEN CODE_TIPS <> '' THEN CODE_TIPS ELSE LIB_CHEZ_FOURNIS END]))[2] AS ref_fournisseur_code,
(MAX(Array[A_COMPTER_DU::text, LIB_CODE_CHEZ_FOURNIS]))[2] AS ref_fournisseur_texte
FROM w_ARTICLES_FOURNISSEUR
GROUP BY 1,2
ORDER BY 1,2
) subview
GROUP BY 1
) subview
WHERE t_articles.oid = subview.article_id AND
(
t_articles.ref_fournisseur_id IS DISTINCT FROM subview.ref_fournisseur_id OR
t_articles.ref_fournisseur_code IS DISTINCT FROM subview.ref_fournisseur_code OR
t_articles.ref_fournisseur_texte IS DIStINCT FROM subview.ref_fournisseur_texte
)
;
DROP TABLE IF EXISTS w_articles_fournisseur_eco;
CREATE TEMP TABLE w_articles_fournisseur_eco AS
SELECT
CODE_ARTICLE||'|'||CODE_FOURNISSEUR AS code_original,
MAX(article_id) AS article_id,
MAX(fournisseur_id) AS fournisseur_id,
MAX(fournisseur_distributeur_id) AS fournisseur_distributeur_id,
MAX(CASE WHEN PRINCIPAL = 'O' THEN '1' ELSE '0' END) AS est_fournisseur_principal,
(MAX(Array[A_COMPTER_DU::text, CASE WHEN CODE_CHEZ_FOURNIS <> '' THEN CODE_CHEZ_FOURNIS WHEN UCD <> '' THEN UCD WHEN CODE_TIPS <> '' THEN CODE_TIPS ELSE LIB_CHEZ_FOURNIS END]))[2] AS code_reference_fournisseur,
(MAX(Array[A_COMPTER_DU::text, LIB_CHEZ_FOURNIS]))[2] AS texte_reference_fournisseur,
MAX(CIP) AS code_cip,
''::text AS code_cahpp,
MAX(COALESCE(t_unites.oid,0)) AS unite_approvisionnement_id,
MAX(COEFF_UNITE) AS nombre_conditionnement_approvisionnement,
(MAX(Array[A_COMPTER_DU::text, E_PX_UNIT_NET::text]))[2]::numeric AS prix_unitaire_en_cours,
MAX(COALESCE(t_ucd.oid,0)) AS ucd_id,
MAX(UCD13) AS code_ucd13
FROM w_ARTICLES_FOURNISSEUR
LEFT JOIN eco.t_unites ON UNITE_ACHAT = t_unites.code_original
LEFT JOIN base.t_ucd ON w_ARTICLES_FOURNISSEUR.ucd = t_ucd.code
GROUP BY 1
;
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
)
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
FROM w_articles_fournisseur_eco
WHERE w_articles_fournisseur_eco.code_original NOT IN (SELECT t_article_fournisseur.code_original FROM eco.t_article_fournisseur WHERE code_original IS NOT NULL)
;
UPDATE eco.t_article_fournisseur SET
article_id = w_articles_fournisseur_eco.article_id,
fournisseur_id = w_articles_fournisseur_eco.fournisseur_id,
fournisseur_distributeur_id = w_articles_fournisseur_eco.fournisseur_distributeur_id,
est_fournisseur_principal = w_articles_fournisseur_eco.est_fournisseur_principal,
code_reference_fournisseur = w_articles_fournisseur_eco.code_reference_fournisseur,
texte_reference_fournisseur = w_articles_fournisseur_eco.texte_reference_fournisseur,
code_cip = w_articles_fournisseur_eco.code_cip,
code_cahpp = w_articles_fournisseur_eco.code_cahpp,
unite_approvisionnement_id = w_articles_fournisseur_eco.unite_approvisionnement_id,
nombre_conditionnement_approvisionnement = w_articles_fournisseur_eco.nombre_conditionnement_approvisionnement,
prix_unitaire_en_cours = w_articles_fournisseur_eco.prix_unitaire_en_cours,
ucd_id = w_articles_fournisseur_eco.ucd_id,
code_ucd13 = w_articles_fournisseur_eco.code_ucd13
FROM w_articles_fournisseur_eco
WHERE t_article_fournisseur.code_original = w_articles_fournisseur_eco.code_original AND
(
t_article_fournisseur.article_id IS DISTINCT FROM w_articles_fournisseur_eco.article_id OR
t_article_fournisseur.fournisseur_id IS DISTINCT FROM w_articles_fournisseur_eco.fournisseur_id OR
t_article_fournisseur.fournisseur_distributeur_id IS DISTINCT FROM w_articles_fournisseur_eco.fournisseur_distributeur_id OR
t_article_fournisseur.est_fournisseur_principal IS DISTINCT FROM w_articles_fournisseur_eco.est_fournisseur_principal OR
t_article_fournisseur.code_reference_fournisseur IS DISTINCT FROM w_articles_fournisseur_eco.code_reference_fournisseur OR
t_article_fournisseur.texte_reference_fournisseur IS DISTINCT FROM w_articles_fournisseur_eco.texte_reference_fournisseur OR
t_article_fournisseur.code_cip IS DISTINCT FROM w_articles_fournisseur_eco.code_cip OR
t_article_fournisseur.code_cahpp IS DISTINCT FROM w_articles_fournisseur_eco.code_cahpp OR
t_article_fournisseur.unite_approvisionnement_id IS DISTINCT FROM w_articles_fournisseur_eco.unite_approvisionnement_id OR
t_article_fournisseur.nombre_conditionnement_approvisionnement IS DISTINCT FROM w_articles_fournisseur_eco.nombre_conditionnement_approvisionnement OR
t_article_fournisseur.prix_unitaire_en_cours IS DISTINCT FROM w_articles_fournisseur_eco.prix_unitaire_en_cours OR
t_article_fournisseur.ucd_id IS DISTINCT FROM w_articles_fournisseur_eco.ucd_id OR
t_article_fournisseur.code_ucd13 IS DISTINCT FROM w_articles_fournisseur_eco.code_ucd13
)
;
]]>
'' AND
upper(LIEU_LIVRAISON) NOT IN (SELECT code_original FROM eco.t_lieux)
GROUP BY 1,2;
-- Stock
INSERT INTO eco.t_lieux(code, code_original, texte, texte_court)
SELECT
CODE_STOCK,
CODE_STOCK,
MAX(CODE_STOCK),
MAX(CODE_STOCK)
FROM prod_sigems.MVT_STOCK
WHERE CODE_STOCK <> '' AND
CODE_STOCK NOT IN (SELECT code_original FROM eco.t_lieux)
GROUP BY 1,2;
INSERT INTO eco.t_lieux(code, code_original, texte, texte_court)
SELECT
CODE_STOCK,
CODE_STOCK,
MAX(CODE_STOCK),
MAX(CODE_STOCK)
FROM prod_sigems.STOCK
WHERE CODE_STOCK <> '' AND
CODE_STOCK NOT IN (SELECT code_original FROM eco.t_lieux)
GROUP BY 1,2;
-- Gestionnaires
INSERT INTO eco.t_gestionnaires(code_original, code, texte, texte_court)
SELECT GROUPE.CODE, GROUPE.CODE, GROUPE.NOM, GROUPE.NOM
FROM prod_sigems.GROUPE
LEFT JOIN eco.t_gestionnaires ON code_original = GROUPE.CODE
WHERE code_original IS NULL
;
-- Unités fonctionnelles
INSERT INTO eco.t_unites_fonctionnelles(code, texte, texte_court, code_original)
SELECT SERVICE_DEST,SERVICE_DEST,SERVICE_DEST,SERVICE_DEST
FROM prod_sigems.MVT_STOCK
LEFT JOIN eco.t_unites_fonctionnelles ON code_original = SERVICE_DEST
WHERE SERVICE_DEST <> '' AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
UPDATE eco.t_unites_fonctionnelles
SET texte = nom, texte_court = nom
FROM prod_sigems.SERVIC
WHERE SERVIC.code = t_unites_fonctionnelles.code_original
;
-- Unités
INSERT INTO eco.t_unites(code, texte, texte_court, code_original)
SELECT UNITE_MVT,UNITE_MVT,UNITE_MVT,UNITE_MVT
FROM prod_sigems.MVT_STOCK
LEFT JOIN eco.t_unites ON code_original = UNITE_MVT
WHERE UNITE_MVT IS NOT NULL AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
INSERT INTO eco.t_unites(code, texte, texte_court, code_original)
SELECT UNITE_ACHAT,UNITE_ACHAT,UNITE_ACHAT,UNITE_ACHAT
FROM prod_sigems.ACHA_LIGNE
LEFT JOIN eco.t_unites ON code_original = UNITE_ACHAT
WHERE UNITE_ACHAT IS NOT NULL AND
code_original IS NULL
GROUP BY 1
ORDER BY 1;
-- Site
-- Types mouvements
INSERT INTO eco.t_types_mouvements(code, code_original, texte, texte_court)
SELECT NATURE_MVT_STOCK.CODE, NATURE_MVT_STOCK.CODE, MAX(LIBELLE), MAX(LIBELLE)
FROM prod_sigems.NATURE_MVT_STOCK
LEFT JOIN eco.t_types_mouvements ON code_original = NATURE_MVT_STOCK.CODE
WHERE NATURE_MVT_STOCK.CODE <> '' AND t_types_mouvements.oid IS NULL
GROUP BY 1,2;
]]>
'O' THEN QUANTITE_RESTE ELSE 0 END AS C_QUANTITE_COMMANDEE,
CASE WHEN QUANTITE_RESTE = 0 OR RELIQUAT_ANNULE = 'O' THEN 'T' ELSE 'N' END AS etat_livraison,
(QUANTITE_LIVREE + CASE WHEN RELIQUAT_ANNULE <> 'O' THEN QUANTITE_RESTE ELSE 0 END) * E_PX_UNIT_NET AS C_MONTANT_HT,
((QUANTITE_LIVREE + CASE WHEN RELIQUAT_ANNULE <> 'O' THEN QUANTITE_RESTE ELSE 0 END) * E_PX_UNIT_NET) * TAUX_TVA / 100 AS C_MONTANT_TVA,
(QUANTITE_LIVREE) * E_PX_UNIT_NET AS C_MONTANT_LIVRE_HT,
((QUANTITE_LIVREE) * E_PX_UNIT_NET) * TAUX_TVA / 100 AS C_MONTANT_LIVRE_TVA,
CASE WHEN DATE_FACT IS NOT NULL THEN 'T' ELSE 'N' END AS etat_liquidation,
CASE WHEN DATE_FACT IS NOT NULL THEN QUANTITE_LIVREE * E_PX_UNIT_NET ELSE 0 END AS C_MONTANT_LIQUIDE_HT,
CASE WHEN DATE_FACT IS NOT NULL THEN (QUANTITE_LIVREE * E_PX_UNIT_NET) * TAUX_TVA / 100 ELSE 0 END AS C_MONTANT_LIQUIDE_TVA,
ACHA_LIGNE.*,
ACHA_ENTETE.TYPE_CDE,
CASE WHEN
cume_dist() OVER (PARTITION BY ACHA_LIGNE.NUMERO_CDE, NUMERO_LIGNE ORDER BY ACHA_LIGNE.DATE_CREATION, REF_UNIQUE_MVT) != 1 OR
row_number() OVER (PARTITION BY ACHA_LIGNE.NUMERO_CDE, NUMERO_LIGNE ORDER BY ACHA_LIGNE.DATE_CREATION, CODE_ARTICLE, REF_UNIQUE_MVT) != 1
THEN (NUMERO_LIGNE || '.' || row_number() OVER (PARTITION BY ACHA_LIGNE.NUMERO_CDE, NUMERO_LIGNE ORDER BY ACHA_LIGNE.DATE_CREATION, REF_UNIQUE_MVT))::numeric
ELSE NUMERO_LIGNE END AS NUMERO_LIGNE_CORR
FROM prod_sigems.ACHA_LIGNE
JOIN prod_sigems.ACHA_ENTETE ON ACHA_LIGNE.NUMERO_CDE = ACHA_ENTETE.NUMERO_CDE
WHERE RELIQUAT_ANNULE <> 'O' OR QUANTITE_LIVREE <> 0 OR QUANTITE_RESTE <> 0
;
ANALYSE w_ACHA_LIGNE
;
DROP TABLE IF EXISTS w_MVT_STOCK;
CREATE TEMP TABLE w_MVT_STOCK AS
SELECT MVT_STOCK.*,
CODE_MVT::text AS code_original,
0::bigint AS commande_id,
0::bigint AS gestionnaire_id
FROM prod_sigems.MVT_STOCK
JOIN eco.t_lieux ON CODE_STOCK = t_lieux.code_original AND t_lieux.est_ignore IS DISTINCT FROM '1'
WHERE DATE_MVT BETWEEN '[ENV_ECO_ANNEEDEBUT]0101' AND date(now())
;
ANALYSE w_MVT_STOCK
;
UPDATE w_MVT_STOCK
SET gestionnaire_id = t_gestionnaires.oid
FROM prod_sigems.ARTICLES
JOIN eco.t_gestionnaires ON ARTICLES.GROUPE = t_gestionnaires.code_original
WHERE w_MVT_STOCK.CODE_ARTICLE = ARTICLES.CODE_ARTICLE
;
]]>
0
FROM eco.t_divers
WHERE code = 'SIGEMS_SAP_REAPPRO' AND
valeur = '1'
;
]]>
0
GROUP BY 1,2
;
ANALYSE w_ACHA_LIGNE_INI1
;
DROP TABLE IF EXISTS w_ACHA_LIGNE_INI2;
CREATE TEMP TABLE w_ACHA_LIGNE_INI2 AS
SELECT NUMERO_CDE_INI,
NUMERO_LIGNE_INI,
ACHA_LIGNE.NUMERO_CDE,
ACHA_LIGNE.NUMERO_LIGNE,
MAX(w_MVT_STOCK.CODE_STOCK) AS MVT_STOCK_CODE_STOCK,
MAX(w_MVT_STOCK.LIBELLE) AS MVT_STOCK_LIBELLE,
MAX(w_MVT_STOCK.NATURE_MVT) AS MVT_STOCK_NATURE_MVT
FROM prod_sigems.ACHA_LIGNE
JOIN w_MVT_STOCK ON
w_MVT_STOCK.NUMERO_CDE = NUMERO_CDE_INI AND
w_MVT_STOCK.NUMERO_LIGNE = NUMERO_LIGNE_INI
WHERE NUMERO_CDE_INI <> 0
GROUP BY 1,2,3,4
ORDER BY 1,2,3,4
;
ANALYSE w_ACHA_LIGNE_INI2
;
DROP TABLE IF EXISTS w_MVT_STOCK_DMI_in;
CREATE TEMP TABLE w_MVT_STOCK_DMI_in AS
SELECT w_MVT_STOCK.*,
MVT_STOCK_CODE_STOCK,
MVT_STOCK_LIBELLE,
MVT_STOCK_NATURE_MVT
FROM w_MVT_STOCK
JOIN w_ACHA_LIGNE_INI1 ON
w_MVT_STOCK.NUMERO_CDE = w_ACHA_LIGNE_INI1.NUMERO_CDE AND
w_MVT_STOCK.NUMERO_LIGNE = w_ACHA_LIGNE_INI1.NUMERO_LIGNE
JOIN w_ACHA_LIGNE_INI2 ON
w_MVT_STOCK.NUMERO_CDE = w_ACHA_LIGNE_INI2.NUMERO_CDE AND
w_MVT_STOCK.NUMERO_LIGNE = w_ACHA_LIGNE_INI2.NUMERO_LIGNE
;
UPDATE w_MVT_STOCK_DMI_in SET
LIBELLE = MVT_STOCK_LIBELLE,
NATURE_MVT = MVT_STOCK_NATURE_MVT,
PLUS_MOINS = 0-PLUS_MOINS,
code_original = code_original || 'E'
;
ALTER TABLE w_MVT_STOCK_DMI_in DROP COLUMN MVT_STOCK_CODE_STOCK;
ALTER TABLE w_MVT_STOCK_DMI_in DROP COLUMN MVT_STOCK_LIBELLE;
ALTER TABLE w_MVT_STOCK_DMI_in DROP COLUMN MVT_STOCK_NATURE_MVT;
INSERT INTO w_MVT_STOCK
SELECT * FROM w_MVT_STOCK_DMI_in
;
DELETE FROM w_MVT_STOCK
USING w_ACHA_LIGNE_INI2
WHERE
w_MVT_STOCK.NUMERO_CDE = w_ACHA_LIGNE_INI2.NUMERO_CDE_INI AND
w_MVT_STOCK.NUMERO_LIGNE = w_ACHA_LIGNE_INI2.NUMERO_LIGNE_INI
;
DELETE FROM w_ACHA_LIGNE
USING w_ACHA_LIGNE_INI2
WHERE
w_ACHA_LIGNE.NUMERO_CDE = w_ACHA_LIGNE_INI2.NUMERO_CDE_INI AND
w_ACHA_LIGNE.NUMERO_LIGNE = w_ACHA_LIGNE_INI2.NUMERO_LIGNE_INI
;
DROP TABLE IF EXISTS w_LIVRAISON_DMI_in;
CREATE TEMP TABLE w_LIVRAISON_DMI_in AS
SELECT NUMERO_CDE, NUMERO_LIGNE,
SUM(PLUS_MOINS * quantite) AS QUANTITE_LIVREE_DMI_in
FROM w_MVT_STOCK_DMI_in
GROUP BY 1,2
;
ANALYSE w_LIVRAISON_DMI_in
;
UPDATE w_ACHA_LIGNE SET
QUANTITE_RESTE = QUANTITE_RESTE - QUANTITE_LIVREE_DMI_in,
QUANTITE_LIVREE = QUANTITE_LIVREE + QUANTITE_LIVREE_DMI_in,
C_MONTANT_LIVRE_HT = (QUANTITE_LIVREE+QUANTITE_LIVREE_DMI_in) * E_PX_UNIT_NET,
C_MONTANT_LIVRE_TVA = ((QUANTITE_LIVREE+QUANTITE_LIVREE_DMI_in) * E_PX_UNIT_NET) * TAUX_TVA / 100,
C_MONTANT_LIQUIDE_HT = CASE WHEN DATE_FACT IS NOT NULL THEN (QUANTITE_LIVREE+QUANTITE_LIVREE_DMI_in) * E_PX_UNIT_NET ELSE 0 END,
C_MONTANT_LIQUIDE_TVA = CASE WHEN DATE_FACT IS NOT NULL THEN ((QUANTITE_LIVREE+QUANTITE_LIVREE_DMI_in) * E_PX_UNIT_NET) * TAUX_TVA / 100 ELSE 0 END
FROM w_LIVRAISON_DMI_IN
WHERE w_ACHA_LIGNE.NUMERO_CDE = w_LIVRAISON_DMI_in.NUMERO_CDE AND
w_ACHA_LIGNE.NUMERO_LIGNE = w_LIVRAISON_DMI_in.NUMERO_LIGNE
;
]]>
''
LEFT JOIN eco.t_gestionnaires ON ACHA_ENTETE.GROUPE = t_gestionnaires.code_original
WHERE ACHA_ENTETE.DATE_COMMANDE >= '[ENV_ECO_ANNEEDEBUT]-01-01'
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');
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,
fournisseur_distributeur_id,
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_prorata_tva,
taux_tva)
SELECT
p_commandes.code_original || '-' || NUMERO_LIGNE_CORR AS code_original,
p_commandes.oid AS commande_id,
NUMERO_LIGNE_CORR AS ligne_commande,
REF_LOT AS texte,
p_commandes.fournisseur_distributeur_id,
COALESCE(t_articles.oid, 0) AS article_id,
COALESCE(t_unites.oid,0) AS unite_approvisionnement_id,
COALESCE(t_compte.oid, t_articles.compte_id, 0) AS compte_id,
COALESCE(t_ucd.oid, t_articles.ucd_id, 0) AS ucd_id,
COALESCE(t_lpp.oid, t_articles.lpp_id, 0) AS lpp_id,
QUANTITE_COMMANDEE AS quantite_approvisionnement,
E_PX_UNIT_NET AS prix_unitaire_approvisionnement,
0::numeric AS multiplicateur_stockage,
0::numeric AS quantite_stockage,
0::numeric AS prix_unitaire_stockage,
E_PX_UNIT_NET * QUANTITE_COMMANDEE AS montant_commande_ht,
0::numeric AS montant_commande_remise,
C_MONTANT_TVA AS montant_commande_tva,
0::numeric AS montant_commande_port,
E_PX_UNIT_NET * QUANTITE_COMMANDEE + C_MONTANT_TVA AS montant_commande_ttc,
QUANTITE_LIVREE AS quantite_livraison_approvisionnement,
QUANTITE_LIVREE AS quantite_livraison_stockage,
C_MONTANT_LIVRE_HT AS montant_livraison_ht,
C_MONTANT_LIVRE_HT + C_MONTANT_LIVRE_TVA AS montant_livraison_ttc,
w_ACHA_LIGNE.etat_livraison,
C_MONTANT_LIQUIDE_HT AS montant_liquidation_ht,
0::numeric AS montant_liquidation_remise,
C_MONTANT_LIQUIDE_TVA AS montant_liquidation_tva,
0::numeric AS montant_liquidation_port,
C_MONTANT_LIQUIDE_HT + C_MONTANT_LIQUIDE_TVA AS montant_liquidation_ttc,
w_ACHA_LIGNE.etat_liquidation,
CASE WHEN t_articles.type_prorata_tva IS DISTINCT FROM '1' AND t_compte.type_prorata_tva IS DISTINCT FROM '1' THEN COALESCE(t_prorata_tva.taux,0) ELSE 0 END,
w_ACHA_LIGNE.TAUX_TVA
FROM w_ACHA_LIGNE
JOIN eco.p_commandes ON NUMERO_CDE = p_commandes.code_original
LEFT JOIN eco.t_articles ON w_ACHA_LIGNE.CODE_ARTICLE = t_articles.code_original AND t_articles.oid <> 0
LEFT JOIN eco.t_compte ON 'x' = t_compte.code_original AND t_compte.oid <> 0
LEFT JOIN eco.t_unites ON UNITE_ACHAT = t_unites.code_original
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 eco.t_prorata_tva ON p_commandes.date_engagement BETWEEN t_prorata_tva.date_debut AND t_prorata_tva.date_fin
;
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');
]]>
0
) sub,
w_prix_distri w_prix_distri_next
WHERE w_prix_distri.CODE_ARTICLE = sub.CODE_ARTICLE
AND sub.date_mvt BETWEEN w_prix_distri.date_mvt_last AND w_prix_distri.date_fin
AND w_prix_distri_next.CODE_ARTICLE = w_prix_distri.CODE_ARTICLE
AND w_prix_distri_next.prix_sequence = w_prix_distri.prix_sequence + 1
;
-- maj prix si inventaire
UPDATE w_prix_distri SET
prix_distri_ht = E_PX_UNIT_NET::numeric,
date_mvt_last = DATE_MVT
FROM prod_sigems.MVT_STOCK
WHERE w_prix_distri.CODE_ARTICLE = mvt_stock.CODE_ARTICLE
AND date_mvt BETWEEN date_mvt_last AND w_prix_distri.date_fin
AND module = 'I'
;
-- maj prix si entrée après dernière sortie sur le mois
UPDATE w_prix_distri
SET prix_distri_ht = w_prix_distri_next.prix_distri_ht_first
FROM
(
SELECT CODE_ARTICLE, DATE_MVT
FROM prod_sigems.MVT_STOCK
WHERE PLUS_MOINS > 0
) sub,
w_prix_distri w_prix_distri_next
WHERE w_prix_distri.CODE_ARTICLE = sub.CODE_ARTICLE
AND sub.date_mvt BETWEEN w_prix_distri.date_mvt_last AND w_prix_distri.date_fin
AND w_prix_distri_next.CODE_ARTICLE = w_prix_distri.CODE_ARTICLE
AND w_prix_distri_next.prix_sequence = w_prix_distri.prix_sequence + 1
;
-- Prix distri historisé à partir des entrées si pas de sorties
INSERT INTO w_prix_distri
SELECT subview.*, '20991231'::date AS date_fin, nextval('w_prix_distri_seq'::regclass) AS prix_sequence
FROM
(
SELECT CODE_ARTICLE, date(date_trunc('month',DATE_MVT)) AS date_debut,
(MAX(ARRAY[CODE_MVT::numeric,E_PX_UNIT_NET]))[2] AS prix_distri_ht,
(MAX(ARRAY[CODE_MVT::text,DATE_MVT::text]))[2] AS date_mvt_last,
0,
0
FROM prod_sigems.MVT_STOCK
WHERE PLUS_MOINS > 0
AND CODE_ARTICLE not in (select code_article from w_prix_distri)
GROUP BY 1,2
ORDER BY 1,2
) 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.CODE_ARTICLE = w_prix_distri_next.CODE_ARTICLE AND
w_prix_distri.prix_sequence = w_prix_distri_next.prix_sequence - 1
;
UPDATE w_prix_distri
SET date_debut = date_deb_corr
FROM
(
SELECT w_prix_distri.CODE_ARTICLE, w_prix_distri.date_fin, COALESCE(w_prix_distri_prev.date_fin + interval '1 day', '1900-01-01') as date_deb_corr
FROM w_prix_distri
LEFT JOIN w_prix_distri w_prix_distri_prev
ON w_prix_distri.CODE_ARTICLE = w_prix_distri_prev.CODE_ARTICLE AND
w_prix_distri.prix_sequence = w_prix_distri_prev.prix_sequence + 1
) sub
WHERE sub.CODE_ARTICLE = w_prix_distri.CODE_ARTICLE
AND sub.date_fin = w_prix_distri.date_fin
;
CREATE INDEX w_prix_distri_i1 ON w_prix_distri USING btree (CODE_ARTICLE)
;
DROP TABLE IF EXISTS w_STOCK;
CREATE TEMP TABLE w_STOCK AS
SELECT
CODE_STOCK,
MVT_STOCK.CODE_ARTICLE,
date_part('year',DATE_MVT) * 12 + date_part('month',DATE_MVT) AS mois_sequence,
MIN(date(date_trunc('month',DATE_MVT))) AS date_debut,
date(MAX(date(date_trunc('month',DATE_MVT))) + interval '1 month' - interval '1 day') AS date_fin,
0::numeric AS stock_quantite_debut,
0::numeric AS stock_valeur_debut,
SUM(CASE WHEN PLUS_MOINS > 0 THEN QUANTITE ELSE 0 END) AS entree_quantite,
round(SUM(CASE WHEN PLUS_MOINS > 0 THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END),2) AS entree_montant,
SUM(CASE WHEN PLUS_MOINS > 0 AND QUANTITE > 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE ELSE 0 END) AS entree_quantite_pump,
round(SUM(CASE WHEN PLUS_MOINS > 0 AND QUANTITE > 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END),2) AS entree_montant_pump,
SUM(CASE WHEN PLUS_MOINS < 0 THEN QUANTITE ELSE 0 END) AS sortie_quantite,
SUM(CASE
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 THEN QUANTITE*COALESCE(prix_distri_ht)
ELSE 0 END
) AS sortie_montant,
SUM(CASE WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE ELSE 0 END) AS sortie_quantite_valorise,
SUM(CASE WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END) AS sortie_montant_valorise,
SUM(CASE WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 THEN QUANTITE ELSE 0 END) AS sortie_quantite_non_valorise,
SUM(CASE WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END) AS sortie_montant_non_valorise,
0::numeric AS stock_quantite_fin,
0::numeric AS stock_valeur_fin,
0::numeric AS pump,
'0'::text AS ok_stock_fin
FROM prod_sigems.MVT_STOCK
JOIN eco.t_lieux ON CODE_STOCK = t_lieux.code_original AND t_lieux.est_ignore IS DISTINCT FROM '1'
LEFT JOIN w_prix_distri ON
MVT_STOCK.CODE_ARTICLE = w_prix_distri.CODE_ARTICLE AND
MVT_STOCK.DATE_MVT BETWEEN w_prix_distri.date_debut AND w_prix_distri.date_fin
WHERE DATE_MVT BETWEEN '[ENV_ECO_ANNEEDEBUT]-01-01' AND date(now()) OR
(DATE_MVT BETWEEN '[ENV_ECO_ANNEEDEBUT]-01-01' AND date(now()) AND PLUS_MOINS > 0 AND QUANTITE > 0 AND E_PX_UNIT_NET <> 0)
GROUP BY 1,2,3
HAVING SUM(PLUS_MOINS*QUANTITE) <> 0
;
CREATE INDEX w_STOCK_i1 ON w_STOCK USING btree (CODE_ARTICLE);
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_STOCK_FIN;
CREATE TEMP TABLE w_STOCK_FIN AS
SELECT
CODE_STOCK,
CODE_ARTICLE,
CURRENT_mois_sequence AS mois_sequence,
MAX(CURRENT_date_debut) AS date_debut,
MIN(CURRENT_date_fin) AS date_fin,
SUM(QUANTITE) AS stock_quantite_fin
FROM w_STOCK_CURRENT,
prod_sigems.STOCK
JOIN eco.t_lieux ON CODE_STOCK = t_lieux.code_original AND t_lieux.est_ignore IS DISTINCT FROM '1'
GROUP BY 1,2,3
HAVING SUM(QUANTITE) <> 0;
CREATE INDEX w_STOCK_FIN_i1 ON w_STOCK_FIN USING btree (CODE_ARTICLE);
INSERT INTO w_STOCK
(
CODE_STOCK,
CODE_ARTICLE,
mois_sequence,
date_debut,
date_fin,
stock_quantite_debut,
stock_valeur_debut,
entree_quantite,
entree_montant,
entree_quantite_pump,
entree_montant_pump,
sortie_quantite,
sortie_montant,
sortie_quantite_valorise,
sortie_montant_valorise,
sortie_quantite_non_valorise,
sortie_montant_non_valorise,
stock_quantite_fin,
stock_valeur_fin,
pump,
ok_stock_fin
)
SELECT
w_STOCK_FIN.CODE_STOCK,
w_STOCK_FIN.CODE_ARTICLE,
w_STOCK_FIN.mois_sequence,
w_STOCK_FIN.date_debut,
w_STOCK_FIN.date_fin,
w_STOCK_FIN.stock_quantite_fin AS stock_quantite_debut,
0::numeric AS stock_valeur_debut,
0::numeric AS entree_quantite,
0::numeric AS entree_montant,
0::numeric AS entree_quantite_pump,
0::numeric AS entree_montant_pump,
0::numeric AS sortie_quantite,
0::numeric AS sortie_montant,
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,
w_STOCK_FIN.stock_quantite_fin,
0::numeric AS stock_valeur_fin,
0::numeric AS pump,
'1'::text AS ok_stock_fin
FROM w_STOCK_FIN
LEFT JOIN w_STOCK ON
w_STOCK_FIN.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_FIN.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK_FIN.mois_sequence = w_STOCK.mois_sequence
WHERE w_STOCK.CODE_ARTICLE IS NULL;
UPDATE w_STOCK SET
stock_quantite_debut = w_STOCK_FIN.stock_quantite_fin - w_STOCK.entree_quantite + w_STOCK.sortie_quantite,
stock_quantite_fin = w_STOCK_FIN.stock_quantite_fin,
ok_stock_fin = '1'
FROM w_STOCK_FIN
WHERE
w_STOCK_FIN.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_FIN.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK_FIN.mois_sequence = w_STOCK.mois_sequence;
DROP TABLE IF EXISTS w_STOCK_ARTICLE;
CREATE TEMP TABLE w_STOCK_ARTICLE AS
SELECT
CODE_STOCK,
CODE_ARTICLE,
MIN(mois_sequence) AS mois_sequence_debut,
MAX(mois_sequence) AS mois_sequence_fin
FROM w_STOCK
GROUP BY 1,2
;
CREATE INDEX w_STOCK_ARTICLE_i1 ON w_STOCK_ARTICLE USING btree (CODE_ARTICLE);
UPDATE w_STOCK SET
stock_quantite_debut = w_STOCK.stock_quantite_fin - w_STOCK.entree_quantite + w_STOCK.sortie_quantite,
ok_stock_fin = '1'
FROM w_STOCK_ARTICLE
WHERE
w_STOCK_ARTICLE.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_ARTICLE.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK_ARTICLE.mois_sequence_fin = w_STOCK.mois_sequence AND
ok_stock_fin = '0';
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]-01-01' AND CURRENT_date_fin;
CREATE INDEX w_calendrier_mois_i1 ON w_calendrier_mois USING btree (mois_sequence);
INSERT INTO w_STOCK
(
CODE_STOCK,
CODE_ARTICLE,
mois_sequence,
date_debut,
date_fin,
stock_quantite_debut,
stock_valeur_debut,
entree_quantite,
entree_montant,
entree_quantite_pump,
entree_montant_pump,
sortie_quantite,
sortie_montant,
sortie_quantite_valorise,
sortie_montant_valorise,
sortie_quantite_non_valorise,
sortie_montant_non_valorise,
stock_quantite_fin,
stock_valeur_fin,
pump,
ok_stock_fin
)
SELECT
w_STOCK_ARTICLE.CODE_STOCK,
w_STOCK_ARTICLE.CODE_ARTICLE,
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,
0::numeric AS entree_quantite,
0::numeric AS entree_montant,
0::numeric AS entree_quantite_pump,
0::numeric AS entree_montant_pump,
0::numeric AS sortie_quantite,
0::numeric AS sortie_montant,
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,
0::numeric AS pump,
'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.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_ARTICLE.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK.mois_sequence = w_calendrier_mois.mois_sequence
WHERE w_STOCK.CODE_ARTICLE IS NULL;
VACUUM ANALYSE w_STOCK;
SELECT base.cti_execute(
'UPDATE w_STOCK SET
stock_quantite_debut =
w_STOCK_AFTER.stock_quantite_debut -
w_STOCK.entree_quantite +
w_STOCK.sortie_quantite,
stock_quantite_fin =
w_STOCK_AFTER.stock_quantite_debut,
ok_stock_fin = ''1''
FROM w_STOCK w_STOCK_AFTER
WHERE w_STOCK_AFTER.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_AFTER.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK_AFTER.mois_sequence = w_STOCK.mois_sequence+1 AND
w_STOCK.date_debut >= ''[ENV_ECO_ANNEEDEBUT]-01-01'' AND
w_STOCK_AFTER.ok_stock_fin = ''1'' AND
w_STOCK.ok_stock_fin = ''0''',300) ;
-- Nouvelle méthode ou on détermine le PUMP selon historique des prix distri
UPDATE w_STOCK SET
pump = prix_distri_ht,
stock_valeur_fin = w_STOCK.stock_quantite_fin * prix_distri_ht
FROM w_prix_distri
WHERE w_prix_distri.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK.date_fin BETWEEN w_prix_distri.date_debut AND w_prix_distri.date_fin
;
UPDATE w_STOCK SET
stock_quantite_debut = w_STOCK_BEFORE.stock_quantite_fin,
stock_valeur_debut = w_STOCK_BEFORE.stock_valeur_fin
FROM w_STOCK w_STOCK_BEFORE
WHERE w_STOCK_BEFORE.CODE_STOCK = w_STOCK.CODE_STOCK AND
w_STOCK_BEFORE.CODE_ARTICLE = w_STOCK.CODE_ARTICLE AND
w_STOCK_BEFORE.mois_sequence = w_STOCK.mois_sequence - 1;
-- maj des pump si inventaire sans mouvement dans période
UPDATE w_STOCK
SET pump = E_PX_UNIT_NET::numeric
FROM prod_sigems.MVT_STOCK
WHERE w_STOCK.CODE_ARTICLE = mvt_stock.CODE_ARTICLE
AND date_mvt BETWEEN w_STOCK.date_debut AND w_stock.date_fin
AND module = 'I' AND entree_quantite = 0 and sortie_quantite = 0
;
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 AS compte_id,
t_lieux.oid AS lieu_id,
0::bigint AS provider_id,
t_articles.fournisseur_principal_id AS fournisseur_id,
stock_quantite_debut,
stock_valeur_debut,
entree_quantite,
entree_montant,
pump,
sortie_quantite,
sortie_montant,
stock_quantite_fin,
stock_valeur_fin
FROM w_STOCK
JOIN eco.t_articles ON CODE_ARTICLE = t_articles.code_original
JOIN eco.t_lieux ON CODE_STOCK = t_lieux.code_original AND t_lieux.est_ignore IS DISTINCT FROM '1'
WHERE date_debut >= '[ENV_ECO_ANNEEDEBUT]-01-01' 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');
-- ajout des stocks mensuels manquants
SELECT base.cti_execute('
INSERT INTO eco.p_stock
(
fournisseur_id,
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.fournisseur_id,
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 >= ''2015-01-01'' AND
p_stock.stock_quantite_debut != 0 AND
p_stock_prev.article_id IS NULL
',200)
;
SELECT base.cti_execute('
INSERT INTO eco.p_stock
(
fournisseur_id,
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.fournisseur_id,
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 >= ''2015-01-01'' AND
p_stock.stock_quantite_fin != 0 AND
p_stock_next.article_id IS NULL
',200)
;
SELECT base.cti_enable_index('eco', 'i_stock_1');
SELECT base.cti_enable_index('eco', 'i_stock_2');
SELECT base.cti_enable_index('eco', 'i_stock_3');
SELECT base.cti_enable_index('eco', 'i_stock_4');
SELECT base.cti_enable_index('eco', 'i_stock_5');
]]>
'' AND
commande_id = 0
;
-- Réplication numero de séjour sur entrées si commande citée
UPDATE w_MVT_STOCK MVT_STOCK
SET ANN_DOS = ANN_DOS_CDE, COD_DOS = COD_DOS_CDE
FROM
(
SELECT commande_id, NUMERO_LIGNE, MAX(ANN_DOS) AS ANN_DOS_CDE, MAX(COD_DOS) AS COD_DOS_CDE
FROM w_MVT_STOCK MVT_STOCK
WHERE NUMERO_CDE <> 0 AND ANN_DOS <> ''
GROUP BY 1,2
HAVING count(DISTINCT ANN_DOS||to_char(COD_DOS,'FM900000')) = 1
) subview
WHERE MVT_STOCK.commande_id = subview.commande_id AND
MVT_STOCK.NUMERO_LIGNE = subview.NUMERO_LIGNE AND
MVT_STOCK.ANN_DOS = ''
;
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');
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,
ucd_id,
lpp_id,
prix_unitaire,
entree_quantite,
sortie_quantite,
entree_montant,
entree_montant_ht,
sortie_montant,
sortie_montant_ht,
sortie_montant_original_ttc,
sortie_montant_original_ht,
no_sejour,
no_patient,
livraison_code_original
)
SELECT
w_MVT_STOCK.code_original AS code_original,
DATE_MVT AS date,
CASE WHEN PLUS_MOINS = 1 THEN 'E' ELSE 'S' END AS sens_mouvement,
COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id,
libelle AS texte,
w_MVT_STOCK.gestionnaire_id,
COALESCE(t_lieux.oid,0) AS lieu_id,
COALESCE(t_unites_fonctionnelles.oid,0) AS unite_fonctionnelle_id,
COALESCE(t_articles.oid,0) AS article_id,
COALESCE(t_compte.oid,t_articles.compte_id,0) AS compte_id,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
w_MVT_STOCK.commande_id,
w_MVT_STOCK.NUMERO_LIGNE AS ligne_commande,
COALESCE(t_ucd.oid, t_articles.ucd_id, 0) AS ucd_id,
COALESCE(t_lpp.oid, t_articles.lpp_id, 0) AS lpp_id,
E_PX_UNIT_NET AS prix_unitaire,
CASE WHEN PLUS_MOINS > 0 THEN QUANTITE ELSE 0 END AS entree_quantite,
CASE WHEN PLUS_MOINS < 0 THEN QUANTITE ELSE 0 END AS sortie_quantite,
round(CASE WHEN PLUS_MOINS > 0 AND GRATUIT = 'N' THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END*w_ARTICLES_TVA.taux_tva,2) AS entree_montant,
round(CASE WHEN PLUS_MOINS > 0 AND GRATUIT = 'N' THEN QUANTITE*E_PX_UNIT_NET ELSE 0 END,2) AS entree_montant_ht,
round(CASE
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 AND E_VALEUR != 0 THEN QUANTITE*p_stock.pump
ELSE 0 END * w_ARTICLES_TVA.taux_tva
,2) AS sortie_montant,
round(CASE
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 AND E_VALEUR != 0 THEN QUANTITE*p_stock.pump
ELSE 0 END
,2) AS sortie_montant_ht,
round(CASE
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 AND E_VALEUR != 0 THEN QUANTITE*p_stock.pump
ELSE 0 END * w_ARTICLES_TVA.taux_tva
,2) AS sortie_montant_original_ttc,
round(CASE
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET <> 0 THEN QUANTITE*E_PX_UNIT_NET
WHEN PLUS_MOINS < 0 AND E_PX_UNIT_NET = 0 AND E_VALEUR != 0 THEN QUANTITE*p_stock.pump
ELSE 0 END
,2) AS sortie_montant_original_ht,
CASE WHEN ANN_DOS <> '' THEN ANN_DOS || to_char(COD_DOS,'FM900000') ELSE '' END AS no_sejour,
CASE WHEN IPP::text != '0' THEN IPP::text ELSE '' END AS no_patient,
LIG_ENTREE::text AS livraison_code_original
FROM w_MVT_STOCK
JOIN w_ARTICLES_TVA ON w_MVT_STOCK.CODE_ARTICLE = w_ARTICLES_TVA.CODE_ARTICLE AND date(DATE_MVT) BETWEEN w_ARTICLES_TVA.date_debut_tva AND w_ARTICLES_TVA.date_fin_tva
LEFT JOIN eco.t_types_mouvements ON NATURE_MVT = t_types_mouvements.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON SERVICE_DEST = t_unites_fonctionnelles.code_original
LEFT JOIN eco.t_articles ON w_MVT_STOCK.CODE_ARTICLE = t_articles.code_original AND t_articles.oid <> 0
LEFT JOIN eco.t_lieux ON CODE_STOCK = t_lieux.code_original
LEFT JOIN eco.t_fournisseurs ON FOURNISSEUR = 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 eco.p_stock ON
p_stock.article_id = t_articles.oid AND
p_stock.lieu_id = t_lieux.oid AND
date(DATE_MVT) BETWEEN p_stock.date_debut AND p_stock.date_fin
;
UPDATE eco.p_commandes
SET
date_reception = date
FROM
(SELECT
commande_id,
max(date) AS date
FROM eco.p_mouvements_articles
GROUP BY 1) sub
WHERE sub.commande_id = p_commandes.oid
;
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');
]]>