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

3440 lines
128 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="INIT" label="INITIALISATIONS">
<NODE label="Tables Articles">
<sqlcmd><![CDATA[
-- Préparation
DROP TABLE IF EXISTS w_classification_articles;
CREATE TEMP TABLE w_classification_articles AS
SELECT
SXFAMILLES_1.DOS_IDE,
SXFAMILLES_1.FAM_IDE AS FAM_IDE_1, SXFAMILLES_1.FAM_COD AS FAM_COD_1, SXFAMILLES_1.FAM_LIB AS FAM_LIB_1,
COALESCE(SXFAMILLES_2.FAM_IDE,0) AS FAM_IDE_2, COALESCE(SXFAMILLES_2.FAM_COD,'') AS FAM_COD_2, COALESCE(SXFAMILLES_2.FAM_LIB,'') AS FAM_LIB_2,
COALESCE(SXFAMILLES_3.FAM_IDE,0) AS FAM_IDE_3, COALESCE(SXFAMILLES_3.FAM_COD,'') AS FAM_COD_3, COALESCE(SXFAMILLES_3.FAM_LIB,'') AS FAM_LIB_3,
COALESCE(SXFAMILLES_4.FAM_IDE,0) AS FAM_IDE_4, COALESCE(SXFAMILLES_4.FAM_COD,'') AS FAM_COD_4, COALESCE(SXFAMILLES_4.FAM_LIB,'') AS FAM_LIB_4,
COALESCE(SXFAMILLES_5.FAM_IDE,0) AS FAM_IDE_5, COALESCE(SXFAMILLES_5.FAM_COD,'') AS FAM_COD_5, COALESCE(SXFAMILLES_5.FAM_LIB,'') AS FAM_LIB_5,
COALESCE(SXFAMILLES_6.FAM_IDE,0) AS FAM_IDE_6, COALESCE(SXFAMILLES_6.FAM_COD,'') AS FAM_COD_6, COALESCE(SXFAMILLES_6.FAM_LIB,'') AS FAM_LIB_6
FROM prod_cegi.SXFAMILLES SXFAMILLES_1
LEFT JOIN prod_cegi.SXFAMILLES SXFAMILLES_2 ON SXFAMILLES_2.FAM_FAM = SXFAMILLES_1.FAM_IDE AND SXFAMILLES_2.DOS_IDE = SXFAMILLES_1.DOS_IDE
LEFT JOIN prod_cegi.SXFAMILLES SXFAMILLES_3 ON SXFAMILLES_3.FAM_FAM = SXFAMILLES_2.FAM_IDE AND SXFAMILLES_3.DOS_IDE = SXFAMILLES_2.DOS_IDE
LEFT JOIN prod_cegi.SXFAMILLES SXFAMILLES_4 ON SXFAMILLES_4.FAM_FAM = SXFAMILLES_3.FAM_IDE AND SXFAMILLES_4.DOS_IDE = SXFAMILLES_3.DOS_IDE
LEFT JOIN prod_cegi.SXFAMILLES SXFAMILLES_5 ON SXFAMILLES_5.FAM_FAM = SXFAMILLES_4.FAM_IDE AND SXFAMILLES_5.DOS_IDE = SXFAMILLES_4.DOS_IDE
LEFT JOIN prod_cegi.SXFAMILLES SXFAMILLES_6 ON SXFAMILLES_6.FAM_FAM = SXFAMILLES_5.FAM_IDE AND SXFAMILLES_6.DOS_IDE = SXFAMILLES_5.DOS_IDE
WHERE SXFAMILLES_1.FAM_NIV = 1
ORDER BY 1,3,6,9,12,15,18;
UPDATE w_classification_articles
SET FAM_LIB_2 = fam_lib_1
WHERE FAM_LIB_2 = '???';
UPDATE w_classification_articles
SET FAM_COD_1 = '?'||FAM_IDE_1
WHERE FAM_COD_1 = '' AND FAM_IDE_1 <> 0;
INSERT INTO w_classification_articles
SELECT
w_class_1.DOS_IDE,
w_class_1.FAM_IDE_1, w_class_1.FAM_COD_1, w_class_1.FAM_LIB_1,
w_class_1.FAM_IDE_2, w_class_1.FAM_COD_2, w_class_1.FAM_LIB_2,
w_class_1.FAM_IDE_3, w_class_1.FAM_COD_3, w_class_1.FAM_LIB_3,
w_class_1.FAM_IDE_4, w_class_1.FAM_COD_4, w_class_1.FAM_LIB_4,
w_class_1.FAM_IDE_5, w_class_1.FAM_COD_5, w_class_1.FAM_LIB_5,
0, '', ''
FROM w_classification_articles w_class_1
LEFT JOIN w_classification_articles w_class_2 ON
w_class_1.DOS_IDE = w_class_2.DOS_IDE AND
w_class_1.FAM_IDE_1 = w_class_2.FAM_IDE_1 AND
w_class_1.FAM_IDE_2 = w_class_2.FAM_IDE_2 AND
w_class_1.FAM_IDE_3 = w_class_2.FAM_IDE_3 AND
w_class_1.FAM_IDE_4 = w_class_2.FAM_IDE_4 AND
w_class_1.FAM_IDE_5 = w_class_2.FAM_IDE_5 AND
w_class_2.FAM_IDE_6 = 0
WHERE w_class_2.FAM_IDE_1 IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;
INSERT INTO w_classification_articles
SELECT
w_class_1.DOS_IDE,
w_class_1.FAM_IDE_1, w_class_1.FAM_COD_1, w_class_1.FAM_LIB_1,
w_class_1.FAM_IDE_2, w_class_1.FAM_COD_2, w_class_1.FAM_LIB_2,
w_class_1.FAM_IDE_3, w_class_1.FAM_COD_3, w_class_1.FAM_LIB_3,
w_class_1.FAM_IDE_4, w_class_1.FAM_COD_4, w_class_1.FAM_LIB_4,
0, '', '',
0, '', ''
FROM w_classification_articles w_class_1
LEFT JOIN w_classification_articles w_class_2 ON
w_class_1.DOS_IDE = w_class_2.DOS_IDE AND
w_class_1.FAM_IDE_1 = w_class_2.FAM_IDE_1 AND
w_class_1.FAM_IDE_2 = w_class_2.FAM_IDE_2 AND
w_class_1.FAM_IDE_3 = w_class_2.FAM_IDE_3 AND
w_class_1.FAM_IDE_4 = w_class_2.FAM_IDE_4 AND
w_class_2.FAM_IDE_5 = 0 AND
w_class_2.FAM_IDE_6 = 0
WHERE w_class_2.FAM_IDE_1 IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;
INSERT INTO w_classification_articles
SELECT
w_class_1.DOS_IDE,
w_class_1.FAM_IDE_1, w_class_1.FAM_COD_1, w_class_1.FAM_LIB_1,
w_class_1.FAM_IDE_2, w_class_1.FAM_COD_2, w_class_1.FAM_LIB_2,
w_class_1.FAM_IDE_3, w_class_1.FAM_COD_3, w_class_1.FAM_LIB_3,
0, '', '',
0, '', '',
0, '', ''
FROM w_classification_articles w_class_1
LEFT JOIN w_classification_articles w_class_2 ON
w_class_1.DOS_IDE = w_class_2.DOS_IDE AND
w_class_1.FAM_IDE_1 = w_class_2.FAM_IDE_1 AND
w_class_1.FAM_IDE_2 = w_class_2.FAM_IDE_2 AND
w_class_1.FAM_IDE_3 = w_class_2.FAM_IDE_3 AND
w_class_2.FAM_IDE_4 = 0 AND
w_class_2.FAM_IDE_5 = 0 AND
w_class_2.FAM_IDE_6 = 0
WHERE w_class_2.FAM_IDE_1 IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;
INSERT INTO w_classification_articles
SELECT
w_class_1.DOS_IDE,
w_class_1.FAM_IDE_1, w_class_1.FAM_COD_1, w_class_1.FAM_LIB_1,
w_class_1.FAM_IDE_2, w_class_1.FAM_COD_2, w_class_1.FAM_LIB_2,
0, '', '',
0, '', '',
0, '', '',
0, '', ''
FROM w_classification_articles w_class_1
LEFT JOIN w_classification_articles w_class_2 ON
w_class_1.DOS_IDE = w_class_2.DOS_IDE AND
w_class_1.FAM_IDE_1 = w_class_2.FAM_IDE_1 AND
w_class_1.FAM_IDE_2 = w_class_2.FAM_IDE_2 AND
w_class_2.FAM_IDE_3 = 0 AND
w_class_2.FAM_IDE_4 = 0 AND
w_class_2.FAM_IDE_5 = 0 AND
w_class_2.FAM_IDE_6 = 0
WHERE w_class_2.FAM_IDE_1 IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;
INSERT INTO w_classification_articles
SELECT
w_class_1.DOS_IDE,
w_class_1.FAM_IDE_1, w_class_1.FAM_COD_1, w_class_1.FAM_LIB_1,
0, '', '',
0, '', '',
0, '', '',
0, '', '',
0, '', ''
FROM w_classification_articles w_class_1
LEFT JOIN w_classification_articles w_class_2 ON
w_class_1.DOS_IDE = w_class_2.DOS_IDE AND
w_class_1.FAM_IDE_1 = w_class_2.FAM_IDE_1 AND
w_class_2.FAM_IDE_2 = 0 AND
w_class_2.FAM_IDE_3 = 0 AND
w_class_2.FAM_IDE_4 = 0 AND
w_class_2.FAM_IDE_5 = 0 AND
w_class_2.FAM_IDE_6 = 0
WHERE w_class_2.FAM_IDE_1 IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;
ANALYSE w_classification_articles
;
DROP TABLE IF EXISTS w_ARTICLE;
CREATE TEMP TABLE w_ARTICLE AS
SELECT
SXART_GEN.DOS_IDE::text || '-'::text || SXARTICLE.ART_IDE::text AS ART_IDE_CTI,
ART_GEN_COD::text AS ART_COD_CTI,
0::bigint AS article_id,
SXART_GEN.DOS_IDE, SXDOSSIER.DOS_COD,
SXARTICLE.ART_IDE, SXART_GEN.ART_GEN_IDE, SXART_GEN.ART_GEN_COD, SXART_GEN.ART_GEN_LIB, SXART_GEN.FAM_IDE,
SXARTICLE.ART_SUPP,
SXART_GEN.PLC_COMPTE,
0::bigint AS lpp_id,
0::bigint AS ucd_id,
0::bigint AS compte_id,
SXART_GEN.TVA_CODE AS TVA_CODE_article,
0::numeric AS taux_tva_en_cours,
0::numeric AS FAM_IDE_1,
''::text AS FAM_COD_1,
''::text AS FAM_LIB_1,
0::numeric AS FAM_IDE_2,
''::text AS FAM_COD_2,
''::text AS FAM_LIB_2,
0::numeric AS FAM_IDE_3,
''::text AS FAM_COD_3,
''::text AS FAM_LIB_3,
0::numeric AS FAM_IDE_4,
''::text AS FAM_COD_4,
''::text AS FAM_LIB_4,
0::numeric AS FAM_IDE_5,
''::text AS FAM_COD_5,
''::text AS FAM_LIB_5,
0::numeric AS FAM_IDE_6,
''::text AS FAM_COD_6,
''::text AS FAM_LIB_6,
''::text AS ATC_COD,
COALESCE(SXART_SUP.DOS_IDE::text || '-'::text || SXART_SUP.FORME_IDE::text) AS FORME_IDE_CTI,
ART_GEN_STO,
SXART_GEN.TSK_IDE,
TSK_COD,
TSK_LIB,
0::bigint AS unite_id
FROM prod_cegi.SXART_GEN
JOIN prod_cegi.SXARTICLE ON SXART_GEN.ART_GEN_IDE = SXARTICLE.ART_GEN_IDE AND
SXART_GEN.DOS_IDE = SXARTICLE.DOS_IDE
LEFT JOIN prod_cegi.SXART_SUP ON SXART_SUP.ART_IDE = SXARTICLE.ART_IDE AND
SXART_SUP.DOS_IDE = SXARTICLE.DOS_IDE
LEFT JOIN prod_cegi.SXTYPE_STOCK ON SXTYPE_STOCK.TSK_IDE = SXART_GEN.TSK_IDE AND
SXTYPE_STOCK.DOS_IDE = SXARTICLE.DOS_IDE
JOIN prod_cegi.SXDOSSIER ON SXDOSSIER.DOS_IDE = SXART_GEN.DOS_IDE
AND (ETAB_ID::text = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
;
ANALYSE w_ARTICLE
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_1 = FAM_IDE AND
FAM_IDE <> 0 AND
w_classification_articles.FAM_IDE_2 = 0
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_2 = FAM_IDE AND
FAM_IDE <> 0 AND
w_classification_articles.FAM_IDE_3 = 0
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_3 = FAM_IDE AND
FAM_IDE <> 0 AND
w_classification_articles.FAM_IDE_4 = 0
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_4 = FAM_IDE AND
FAM_IDE <> 0 AND
w_classification_articles.FAM_IDE_5 = 0
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_5 = FAM_IDE AND
FAM_IDE <> 0 AND
w_classification_articles.FAM_IDE_6 = 0
;
UPDATE w_ARTICLE SET
FAM_IDE_1 = w_classification_articles.FAM_IDE_1,
FAM_COD_1 = w_classification_articles.FAM_COD_1,
FAM_LIB_1 = w_classification_articles.FAM_LIB_1,
FAM_IDE_2 = w_classification_articles.FAM_IDE_2,
FAM_COD_2 = w_classification_articles.FAM_COD_2,
FAM_LIB_2 = w_classification_articles.FAM_LIB_2,
FAM_IDE_3 = w_classification_articles.FAM_IDE_3,
FAM_COD_3 = w_classification_articles.FAM_COD_3,
FAM_LIB_3 = w_classification_articles.FAM_LIB_3,
FAM_IDE_4 = w_classification_articles.FAM_IDE_4,
FAM_COD_4 = w_classification_articles.FAM_COD_4,
FAM_LIB_4 = w_classification_articles.FAM_LIB_4,
FAM_IDE_5 = w_classification_articles.FAM_IDE_5,
FAM_COD_5 = w_classification_articles.FAM_COD_5,
FAM_LIB_5 = w_classification_articles.FAM_LIB_5,
FAM_IDE_6 = w_classification_articles.FAM_IDE_6,
FAM_COD_6 = w_classification_articles.FAM_COD_6,
FAM_LIB_6 = w_classification_articles.FAM_LIB_6
FROM w_classification_articles
WHERE w_classification_articles.DOS_IDE = w_ARTICLE.DOS_IDE AND
w_classification_articles.FAM_IDE_6 = FAM_IDE AND
FAM_IDE <> 0
;
UPDATE W_ARTICLE
SET ART_GEN_COD = '?'||ART_IDE, ART_COD_CTI='?'||ART_IDE
WHERE ART_GEN_COD = '';
UPDATE w_ARTICLE
SET ART_COD_CTI = w_ARTICLE.ART_GEN_COD || '-' || DOS_COD
FROM
(
SELECT ART_GEN_COD, count(*) AS nb
FROM w_ARTICLE
WHERE ART_SUPP = 0
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_ARTICLE.ART_GEN_COD = subview.ART_GEN_COD
;
UPDATE w_ARTICLE
SET ART_COD_CTI = w_ARTICLE.ART_GEN_COD || '(SUPP)'
WHERE ART_SUPP = 1
;
UPDATE W_ARTICLE
SET ATC_COD =
CASE
WHEN FAM_IDE_6 <> 0 THEN FAM_COD_6
WHEN FAM_IDE_5 <> 0 THEN FAM_COD_5
WHEN FAM_IDE_4 <> 0 THEN FAM_COD_4
WHEN FAM_IDE_3 <> 0 THEN FAM_COD_3
WHEN FAM_IDE_2 <> 0 THEN FAM_COD_2
ELSE '' END
WHERE FAM_COD_1 = 'ATC' ;
-- ATC
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UPPER(FAM_COD_6), UPPER(MAX(FAM_COD_6)), MAX(FAM_LIB_6), MAX(FAM_LIB_6)
FROM w_classification_articles
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(FAM_COD_6)
WHERE FAM_COD_1 = 'ATC' AND
FAM_COD_6 <> '' 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(FAM_COD_5), UPPER(MAX(FAM_COD_5)), MAX(FAM_LIB_5), MAX(FAM_LIB_5)
FROM w_classification_articles
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(FAM_COD_5)
WHERE FAM_COD_1 = 'ATC' AND
FAM_COD_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(FAM_COD_4), UPPER(MAX(FAM_COD_4)), MAX(FAM_LIB_4), MAX(FAM_LIB_4)
FROM w_classification_articles
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(FAM_COD_4)
WHERE FAM_COD_1 = 'ATC' AND
FAM_COD_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(FAM_COD_3), UPPER(MAX(FAM_COD_3)), MAX(FAM_LIB_3), MAX(FAM_LIB_3)
FROM w_classification_articles
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(FAM_COD_3)
WHERE FAM_COD_1 = 'ATC' AND
FAM_COD_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(FAM_COD_2), UPPER(MAX(FAM_COD_2)), MAX(FAM_LIB_2), MAX(FAM_LIB_2)
FROM w_classification_articles
LEFT JOIN eco.t_classification_atc ON code_original = UPPER(FAM_COD_2)
WHERE FAM_COD_1 = 'ATC' AND
FAM_COD_2 <> '' 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 PLC_COMPTE, PLC_LIBELLE, LEFT(PLC_LIBELLE,50), PLC_COMPTE
FROM prod_cegi.CMPLANCPT
WHERE PLC_COMPTE IN (SELECT PLC_COMPTE FROM prod_cegi.SXART_GEN) AND
PLC_COMPTE NOT IN (SELECT code_original FROM eco.t_compte WHERE code_original IS NOT NULL);
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT PLC_COMPTE, PLC_LIBELLE, LEFT(PLC_LIBELLE,50), PLC_COMPTE
FROM prod_cegi.CMPLANCPT
WHERE PLC_COMPTE IN (SELECT PLC_COMPTE FROM prod_cegi.SXARTICLE_COMPTE) AND
PLC_COMPTE NOT IN (SELECT code_original FROM eco.t_compte WHERE code_original IS NOT NULL);
UPDATE eco.t_compte
SET
texte = PLC_LIBELLE,
texte_court = LEFT(PLC_LIBELLE,50)
FROM prod_cegi.CMPLANCPT
WHERE PLC_COMPTE = code_original
AND (
texte != PLC_LIBELLE
OR texte_court != LEFT(PLC_LIBELLE,50)
);
UPDATE w_ARTICLE
SET compte_id = t_compte.oid
FROM eco.t_compte
WHERE t_compte.code_original = PLC_COMPTE;
-- tva
UPDATE w_ARTICLE
SET taux_tva_en_cours = subview.TVV_TAUX
FROM
(
SELECT TVA_CODE, (MAX(ARRAY[COALESCE(TVV_DATFIN,'20991231')::text,TVV_TAUX::text]))[2]::numeric AS TVV_TAUX
FROM prod_cegi.CMVALEURTVA
GROUP BY 1
) subview
WHERE TVA_CODE_ARTICLE = TVA_CODE AND
taux_tva_en_cours <> subview.TVV_TAUX
;
-- unités
DROP TABLE IF EXISTS w_SXFORME;
CREATE TEMP TABLE w_SXFORME AS
SELECT
(SXFORME.DOS_IDE::text||'-'::text||FORME_IDE::text) AS FORME_IDE_CTI,
SXFORME.DOS_IDE,
DOS_COD,
FORME_IDE,
FORME_COD::text,
FORME_LIB,
0::bigint AS unite_id
FROM prod_cegi.SXFORME
JOIN prod_cegi.SXDOSSIER ON SXDOSSIER.DOS_IDE = SXFORME.DOS_IDE
AND (ETAB_ID::text = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
ORDER BY FORME_IDE, FORME_COD;
UPDATE w_SXFORME
SET FORME_COD = w_SXFORME.FORME_COD || '-' || DOS_COD
FROM
(
SELECT
FORME_COD
FROM w_SXFORME
GROUP BY 1
HAVING count(DISTINCT FORME_LIB) > 1
) subview
WHERE w_SXFORME.FORME_COD = subview.FORME_COD;
INSERT INTO eco.t_unites(code_original, code, texte, texte_court)
SELECT FORME_IDE_CTI, FORME_COD, MAX(FORME_LIB), MAX(FORME_LIB)
FROM w_SXFORME
LEFT JOIN eco.t_unites ON FORME_IDE_CTI = code_original
WHERE FORME_COD <> '' AND
code_original IS NULL
GROUP BY 1,2;
UPDATE w_SXFORME
SET unite_id = t_unites.oid
FROM eco.t_unites
WHERE w_SXFORME.FORME_IDE_CTI = code_original;
UPDATE w_SXFORME
SET unite_id = subview.unite_id
FROM
(
SELECT
FORME_COD,
FORME_LIB,
MIN(unite_id) AS unite_id
FROM w_SXFORME
GROUP BY 1,2
) subview
WHERE w_SXFORME.FORME_COD = subview.FORME_COD AND
w_SXFORME.FORME_LIB = subview.FORME_LIB AND
w_SXFORME.unite_id <> subview.unite_id;
UPDATE w_ARTICLE
SET unite_id = t_unites.oid
FROM eco.t_unites
WHERE t_unites.code_original = FORME_IDE_CTI;
-- Familles d'articles
DROP TABLE IF EXISTS w_SX_ARTFAM;
CREATE TEMP TABLE w_SX_ARTFAM AS
SELECT
DOS_IDE::text||'-'||FAM_IDE_1||'-'||FAM_IDE_2 AS FAM_IDE_CTI,
DOS_IDE,
DOS_COD,
FAM_IDE_1,
FAM_IDE_2,
FAM_COD_1||CASE WHEN FAM_IDE_2 != 0 THEN '-'||FAM_COD_2::text ELSE '' END AS FAM_COD_2,
FAM_LIB_1||CASE WHEN FAM_IDE_2 != 0 THEN ' - '||FAM_LIB_2 ELSE '' END AS FAM_LIB_2,
0::bigint AS famille_id
FROM w_ARTICLE
--WHERE FAM_IDE_2 <> 0
GROUP BY 1,2,3,4,5,6,7
ORDER BY DOS_IDE, FAM_IDE_2;
DROP TABLE IF EXISTS w_SX_ARTFAM_doubles;
CREATE TEMP TABLE w_SX_ARTFAM_doubles AS
SELECT
FAM_COD_2
FROM w_SX_ARTFAM
GROUP BY 1
HAVING count(DISTINCT FAM_LIB_2) > 1;
UPDATE w_SX_ARTFAM
SET FAM_COD_2 = w_SX_ARTFAM.FAM_COD_2 || '-' || no
FROM
(
SELECT
w_SX_ARTFAM.FAM_COD_2, MAX(FAM_IDE_CTI) AS FAM_IDE_CTI, count(*) AS no
FROM w_SX_ARTFAM
JOIN w_SX_ARTFAM_doubles ON w_SX_ARTFAM_doubles.FAM_COD_2 = w_SX_ARTFAM.FAM_COD_2
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_SX_ARTFAM.FAM_COD_2 = subview.FAM_COD_2 AND
w_SX_ARTFAM.FAM_IDE_CTI = subview.FAM_IDE_CTI;
INSERT INTO eco.t_familles_articles(code_original, code, texte, texte_court)
SELECT FAM_IDE_CTI, FAM_COD_2, MAX(FAM_LIB_2), MAX(FAM_LIB_2)
FROM w_SX_ARTFAM
LEFT JOIN eco.t_familles_articles ON FAM_IDE_CTI = code_original
WHERE FAM_IDE_CTI IS NOT NULL AND
code_original IS NULL
GROUP BY 1,2;
UPDATE w_SX_ARTFAM
SET famille_id = t_familles_articles.oid
FROM eco.t_familles_articles
WHERE w_SX_ARTFAM.FAM_IDE_CTI = code_original;
UPDATE w_SX_ARTFAM
SET famille_id = subview.famille_id
FROM
(
SELECT
FAM_COD_2,
FAM_LIB_2,
MIN(famille_id) AS famille_id
FROM w_SX_ARTFAM
GROUP BY 1,2
) subview
WHERE w_SX_ARTFAM.FAM_COD_2 = subview.FAM_COD_2 AND
w_SX_ARTFAM.FAM_LIB_2 = subview.FAM_LIB_2 AND
w_SX_ARTFAM.famille_id <> subview.famille_id;
-- Sous familles
DROP TABLE IF EXISTS w_SX_ARTSFA;
CREATE TEMP TABLE w_SX_ARTSFA AS
SELECT
DOS_IDE::text||'-'||FAM_IDE_1||'-'||FAM_IDE_3 AS FAM_IDE_CTI,
DOS_IDE,
DOS_COD,
FAM_IDE_1,
FAM_IDE_3,
FAM_COD_1||'-'||FAM_COD_3::text AS FAM_COD_3,
FAM_LIB_1||' - '||FAM_LIB_3 AS FAM_LIB_3,
0::bigint AS sous_famille_id
FROM w_ARTICLE
WHERE FAM_IDE_3 <> 0
GROUP BY 1,2,3,4,5,6,7
ORDER BY DOS_IDE, FAM_IDE_3;
DROP TABLE IF EXISTS w_SX_ARTSFA_doubles;
CREATE TEMP TABLE w_SX_ARTSFA_doubles AS
SELECT
FAM_COD_3
FROM w_SX_ARTSFA
GROUP BY 1
HAVING count(DISTINCT FAM_LIB_3) > 1;
UPDATE w_SX_ARTSFA
SET FAM_COD_3 = w_SX_ARTSFA.FAM_COD_3 || '-' || no
FROM
(
SELECT
w_SX_ARTSFA.FAM_COD_3, MAX(FAM_IDE_CTI) AS FAM_IDE_CTI, count(*) AS no
FROM w_SX_ARTSFA
JOIN w_SX_ARTSFA_doubles ON w_SX_ARTSFA_doubles.FAM_COD_3 = w_SX_ARTSFA.FAM_COD_3
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_SX_ARTSFA.FAM_COD_3 = subview.FAM_COD_3 AND
w_SX_ARTSFA.FAM_IDE_CTI = subview.FAM_IDE_CTI;
INSERT INTO eco.t_sous_familles_articles(code_original, code, texte, texte_court)
SELECT FAM_IDE_CTI, FAM_COD_3, MAX(FAM_LIB_3), MAX(FAM_LIB_3)
FROM w_SX_ARTSFA
LEFT JOIN eco.t_sous_familles_articles ON FAM_IDE_CTI = code_original
WHERE FAM_COD_3 <> '' AND
code_original IS NULL
GROUP BY 1,2;
UPDATE w_SX_ARTSFA
SET sous_famille_id = t_sous_familles_articles.oid
FROM eco.t_sous_familles_articles
WHERE w_SX_ARTSFA.FAM_IDE_CTI = code_original;
UPDATE w_SX_ARTSFA
SET sous_famille_id = subview.sous_famille_id
FROM
(
SELECT
FAM_COD_3,
FAM_LIB_3,
MIN(sous_famille_id) AS sous_famille_id
FROM w_SX_ARTSFA
GROUP BY 1,2
) subview
WHERE w_SX_ARTSFA.FAM_COD_3 = subview.FAM_COD_3 AND
w_SX_ARTSFA.FAM_LIB_3 = subview.FAM_LIB_3 AND
w_SX_ARTSFA.sous_famille_id <> subview.sous_famille_id;
-- Types d'articles
SELECT base.cti_execute('
UPDATE w_ARTICLE
SET FAM_IDE_1 = TSK_IDE,
FAM_COD_1 = TSK_COD,
FAM_LIB_1 = TSK_LIB
',1)
WHERE (SELECT count(*) FROM eco.t_divers WHERE code = 'CEGI_STO_TYP' AND valeur = '1') > 0
;
DROP TABLE IF EXISTS w_SX_ARTTYP;
CREATE TEMP TABLE w_SX_ARTTYP AS
SELECT
DOS_IDE::text||'-'||FAM_IDE_1 AS FAM_IDE_CTI,
DOS_IDE,
DOS_COD,
FAM_IDE_1,
FAM_COD_1::text,
FAM_LIB_1,
0::bigint AS type_article_id
FROM w_ARTICLE
WHERE FAM_IDE_1 <> 0
GROUP BY 1,2,3,4,5,6
ORDER BY DOS_IDE, FAM_IDE_1;
UPDATE w_SX_ARTTYP
SET FAM_COD_1 = w_SX_ARTTYP.FAM_COD_1 || '-' || DOS_COD
FROM
(
SELECT
FAM_COD_1
FROM w_SX_ARTTYP
GROUP BY 1
HAVING count(DISTINCT FAM_LIB_1) > 1
) subview
WHERE w_SX_ARTTYP.FAM_COD_1 = subview.FAM_COD_1;
INSERT INTO eco.t_types_articles(code_original, code, texte, texte_court)
SELECT FAM_IDE_CTI, FAM_COD_1, MAX(FAM_LIB_1), MAX(FAM_LIB_1)
FROM w_SX_ARTTYP
LEFT JOIN eco.t_types_articles ON FAM_IDE_CTI = code_original
WHERE FAM_COD_1 <> '' AND
code_original IS NULL
GROUP BY 1,2;
UPDATE w_SX_ARTTYP
SET type_article_id = t_types_articles.oid
FROM eco.t_types_articles
WHERE w_SX_ARTTYP.FAM_IDE_CTI = code_original;
UPDATE w_SX_ARTTYP
SET type_article_id = subview.type_article_id
FROM
(
SELECT
FAM_COD_1,
FAM_LIB_1,
MIN(type_article_id) AS type_article_id
FROM w_SX_ARTTYP
GROUP BY 1,2
) subview
WHERE w_SX_ARTTYP.FAM_COD_1 = subview.FAM_COD_1 AND
w_SX_ARTTYP.FAM_LIB_1 = subview.FAM_LIB_1 AND
w_SX_ARTTYP.type_article_id <> subview.type_article_id;
-- categories = type de stock cegi
INSERT INTO eco.t_categories_articles(code_original, code, texte, texte_court)
SELECT DOS_IDE || '-' || TSK_IDE, TSK_COD, MAX(TSK_LIB), MAX(LEFT(TSK_LIB,50))
FROM prod_cegi.SXTYPE_STOCK
LEFT JOIN eco.t_categories_articles ON DOS_IDE || '-' || TSK_IDE = code_original
WHERE code_original IS NULL
GROUP BY 1,2;
UPDATE eco.t_categories_articles
SET
code = TSK_COD,
texte = TSK_LIB,
texte_court = LEFT(TSK_LIB,50)
FROM (
SELECT
DOS_IDE,
TSK_IDE,
TSK_COD,
MAX(TSK_LIB) AS TSK_LIB
FROM prod_cegi.SXTYPE_STOCK
GROUP BY 1,2,3
) sub
WHERE DOS_IDE|| '-' || TSK_COD = code_original
AND (TSK_COD != code OR
TSK_LIB != texte OR
LEFT(TSK_LIB,50) != texte_court
)
;
-- Articles
INSERT INTO eco.t_articles(code_original, code, texte, texte_court)
SELECT ART_IDE_CTI, ART_COD_CTI, ART_GEN_LIB, LEFT(ART_GEN_LIB,50)
FROM W_ARTICLE
LEFT JOIN eco.t_articles ON code_original = ART_IDE_CTI
WHERE code_original IS NULL
ORDER by 1;
UPDATE eco.t_articles
SET
code = ART_COD_CTI,
texte = ART_GEN_LIB,
texte_court = LEFT(ART_GEN_LIB,50),
gere_en_stock = CASE WHEN ART_GEN_STO NOT IN ('N', 'D') THEN '1' ELSE '0' END
FROM W_ARTICLE
WHERE code_original = ART_IDE_CTI
AND (code IS DISTINCT FROM ART_COD_CTI OR
texte IS DISTINCT FROM ART_GEN_LIB OR
texte_court IS DISTINCT FROM LEFT(ART_GEN_LIB,50) OR
gere_en_stock IS DISTINCT FROM CASE WHEN ART_GEN_STO NOT IN ('N', 'D') THEN '1' ELSE '0' END);
UPDATE w_ARTICLE
SET article_id = t_articles.oid
FROM eco.t_articles
WHERE t_articles.code_original = ART_IDE_CTI;
UPDATE eco.t_articles SET
type_id = COALESCE(w_SX_ARTTYP.type_article_id,0),
famille_id = COALESCE(w_SX_ARTFAM.famille_id,0),
sous_famille_id = COALESCE(w_SX_ARTSFA.sous_famille_id,0),
categorie_id = COALESCE(t_categories_articles.oid,0),
sous_categorie_id = 0,
classification_atc_id = COALESCE(t_classification_atc.oid,0),
unite_stockage_id = w_ARTICLE.unite_id,
unite_distribution_id = w_ARTICLE.unite_id,
compte_id = w_ARTICLE.compte_id,
taux_tva_en_cours = w_ARTICLE.taux_tva_en_cours
FROM w_ARTICLE
LEFT JOIN w_SX_ARTTYP ON w_ARTICLE.DOS_IDE = w_SX_ARTTYP.DOS_IDE AND w_ARTICLE.FAM_IDE_1 = w_SX_ARTTYP.FAM_IDE_1
LEFT JOIN w_SX_ARTFAM ON w_ARTICLE.DOS_IDE = w_SX_ARTFAM.DOS_IDE AND w_ARTICLE.FAM_IDE_1 = w_SX_ARTFAM.FAM_IDE_1 AND w_ARTICLE.FAM_IDE_2 = w_SX_ARTFAM.FAM_IDE_2
LEFT JOIN w_SX_ARTSFA ON w_ARTICLE.DOS_IDE = w_SX_ARTSFA.DOS_IDE AND w_ARTICLE.FAM_IDE_1 = w_SX_ARTSFA.FAM_IDE_1 AND w_ARTICLE.FAM_IDE_3 = w_SX_ARTSFA.FAM_IDE_3
LEFT JOIN eco.t_classification_atc ON ATC_COD = t_classification_atc.code_original
LEFT JOIN eco.t_categories_articles ON w_ARTICLE.DOS_IDE || '-' || w_ARTICLE.TSK_IDE = t_categories_articles.code_original
WHERE
t_articles.code_original = ART_IDE_CTI AND
(t_articles.type_id IS DISTINCT FROM COALESCE(w_SX_ARTTYP.type_article_id,0) OR
t_articles.famille_id IS DISTINCT FROM COALESCE(w_SX_ARTFAM.famille_id,0) OR
t_articles.sous_famille_id IS DISTINCT FROM COALESCE(w_SX_ARTSFA.sous_famille_id,0) OR
t_articles.categorie_id IS DISTINCT FROM COALESCE(t_categories_articles.oid,0) OR
t_articles.sous_categorie_id IS DISTINCT FROM 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 w_ARTICLE.unite_id OR
t_articles.unite_distribution_id IS DISTINCT FROM w_ARTICLE.unite_id OR
t_articles.compte_id IS DISTINCT FROM w_ARTICLE.compte_id OR
t_articles.taux_tva_en_cours IS DISTINCT FROM w_ARTICLE.taux_tva_en_cours
);
UPDATE eco.t_articles SET
type_code = t_types_articles.code,
type_texte = t_types_articles.texte_court,
type_section_id = t_types_articles.section_id,
type_section_code = t_types_articles.section_code,
type_section_texte = t_types_articles.section_texte,
famille_code = t_familles_articles.code,
famille_texte = t_familles_articles.texte_court,
famille_section_id = t_familles_articles.section_id,
famille_section_code = t_familles_articles.section_code,
famille_section_texte = t_familles_articles.section_texte,
sous_famille_code = t_sous_familles_articles.code,
sous_famille_texte = t_sous_familles_articles.texte_court,
sous_famille_section_id = t_sous_familles_articles.section_id,
sous_famille_section_code = t_sous_familles_articles.section_code,
sous_famille_section_texte = t_sous_familles_articles.section_texte,
categorie_code = t_categories_articles.code,
categorie_texte = t_categories_articles.texte_court,
categorie_section_id = t_categories_articles.section_id,
categorie_section_code = t_categories_articles.section_code,
categorie_section_texte = t_categories_articles.section_texte,
sous_categorie_code = t_sous_categories_articles.code,
sous_categorie_texte = t_sous_categories_articles.texte_court,
sous_categorie_section_id = t_sous_categories_articles.section_id,
sous_categorie_section_code = t_sous_categories_articles.section_code,
sous_categorie_section_texte = t_sous_categories_articles.section_texte,
classification_atc_code = t_classification_atc.code,
classification_atc_texte = t_classification_atc.texte_court,
classification_atc_section_id = t_classification_atc.section_id,
classification_atc_section_code = t_classification_atc.section_code,
classification_atc_section_texte = t_classification_atc.section_texte,
classification_atc_1_id = t_classification_atc.classification_atc_1_id,
classification_atc_1_code = t_classification_atc.classification_atc_1_code,
classification_atc_1_texte = t_classification_atc.classification_atc_1_texte,
classification_atc_2_id = t_classification_atc.classification_atc_2_id,
classification_atc_2_code = t_classification_atc.classification_atc_2_code,
classification_atc_2_texte = t_classification_atc.classification_atc_2_texte,
classification_atc_3_id = t_classification_atc.classification_atc_3_id,
classification_atc_3_code = t_classification_atc.classification_atc_3_code,
classification_atc_3_texte = t_classification_atc.classification_atc_3_texte,
classification_atc_4_id = t_classification_atc.classification_atc_4_id,
classification_atc_4_code = t_classification_atc.classification_atc_4_code,
classification_atc_4_texte = t_classification_atc.classification_atc_4_texte,
unite_stockage_code = t_unites_stockage.code,
unite_stockage_texte = t_unites_stockage.texte_court,
unite_stockage_section_id = t_unites_stockage.section_id,
unite_stockage_section_code = t_unites_stockage.section_code,
unite_stockage_section_texte = t_unites_stockage.section_texte,
unite_distribution_code = t_unites_distribution.code,
unite_distribution_texte = t_unites_distribution.texte_court,
unite_distribution_section_id = t_unites_distribution.section_id,
unite_distribution_section_code = t_unites_distribution.section_code,
unite_distribution_section_texte = t_unites_distribution.section_texte,
compte_code = t_compte.code,
compte_texte = t_compte.texte_court,
compte_section_id = t_compte.section_id,
compte_section_code = t_compte.section_code,
compte_section_texte = t_compte.section_texte
FROM eco.t_types_articles ,
eco.t_familles_articles,
eco.t_sous_familles_articles,
eco.t_categories_articles,
eco.t_sous_categories_articles,
eco.t_classification_atc,
eco.t_unites t_unites_stockage,
eco.t_unites t_unites_distribution,
eco.t_compte
WHERE type_id = t_types_articles.oid
AND famille_id = t_familles_articles.oid
AND sous_famille_id = t_sous_familles_articles.oid
AND categorie_id = t_categories_articles.oid
AND sous_categorie_id = t_sous_categories_articles.oid
AND classification_atc_id = t_classification_atc.oid
AND unite_stockage_id = t_unites_stockage.oid
AND unite_distribution_id = t_unites_distribution.oid
AND compte_id = t_compte.oid
AND (
type_code IS DISTINCT FROM t_types_articles.code OR
type_texte IS DISTINCT FROM t_types_articles.texte_court OR
type_section_id IS DISTINCT FROM t_types_articles.section_id OR
type_section_code IS DISTINCT FROM t_types_articles.section_code OR
type_section_texte IS DISTINCT FROM t_types_articles.section_texte OR
famille_code IS DISTINCT FROM t_familles_articles.code OR
famille_texte IS DISTINCT FROM t_familles_articles.texte_court OR
famille_section_id IS DISTINCT FROM t_familles_articles.section_id OR
famille_section_code IS DISTINCT FROM t_familles_articles.section_code OR
famille_section_texte IS DISTINCT FROM t_familles_articles.section_texte OR
sous_famille_code IS DISTINCT FROM t_sous_familles_articles.code OR
sous_famille_texte IS DISTINCT FROM t_sous_familles_articles.texte_court OR
sous_famille_section_id IS DISTINCT FROM t_sous_familles_articles.section_id OR
sous_famille_section_code IS DISTINCT FROM t_sous_familles_articles.section_code OR
sous_famille_section_texte IS DISTINCT FROM t_sous_familles_articles.section_texte OR
categorie_code IS DISTINCT FROM t_categories_articles.code OR
categorie_texte IS DISTINCT FROM t_categories_articles.texte_court OR
categorie_section_id IS DISTINCT FROM t_categories_articles.section_id OR
categorie_section_code IS DISTINCT FROM t_categories_articles.section_code OR
categorie_section_texte IS DISTINCT FROM t_categories_articles.section_texte OR
sous_categorie_code IS DISTINCT FROM t_sous_categories_articles.code OR
sous_categorie_texte IS DISTINCT FROM t_sous_categories_articles.texte_court OR
sous_categorie_section_id IS DISTINCT FROM t_sous_categories_articles.section_id OR
sous_categorie_section_code IS DISTINCT FROM t_sous_categories_articles.section_code OR
sous_categorie_section_texte IS DISTINCT FROM t_sous_categories_articles.section_texte OR
t_articles.classification_atc_code IS DISTINCT FROM t_classification_atc.code OR
t_articles.classification_atc_texte IS DISTINCT FROM t_classification_atc.texte_court OR
t_articles.classification_atc_section_id IS DISTINCT FROM t_classification_atc.section_id OR
t_articles.classification_atc_section_code IS DISTINCT FROM t_classification_atc.section_code OR
t_articles.classification_atc_section_texte IS DISTINCT FROM t_classification_atc.section_texte OR
t_articles.classification_atc_1_id IS DISTINCT FROM t_classification_atc.classification_atc_1_id OR
t_articles.classification_atc_1_code IS DISTINCT FROM t_classification_atc.classification_atc_1_code OR
t_articles.classification_atc_1_texte IS DISTINCT FROM t_classification_atc.classification_atc_1_texte OR
t_articles.classification_atc_2_id IS DISTINCT FROM t_classification_atc.classification_atc_2_id OR
t_articles.classification_atc_2_code IS DISTINCT FROM t_classification_atc.classification_atc_2_code OR
t_articles.classification_atc_2_texte IS DISTINCT FROM t_classification_atc.classification_atc_2_texte OR
t_articles.classification_atc_3_id IS DISTINCT FROM t_classification_atc.classification_atc_3_id OR
t_articles.classification_atc_3_code IS DISTINCT FROM t_classification_atc.classification_atc_3_code OR
t_articles.classification_atc_3_texte IS DISTINCT FROM t_classification_atc.classification_atc_3_texte OR
t_articles.classification_atc_4_id IS DISTINCT FROM t_classification_atc.classification_atc_4_id OR
t_articles.classification_atc_4_code IS DISTINCT FROM t_classification_atc.classification_atc_4_code OR
t_articles.classification_atc_4_texte IS DISTINCT FROM t_classification_atc.classification_atc_4_texte OR
t_articles.unite_stockage_code IS DISTINCT FROM t_unites_stockage.code OR
t_articles.unite_stockage_texte IS DISTINCT FROM t_unites_stockage.texte_court OR
t_articles.unite_stockage_section_id IS DISTINCT FROM t_unites_stockage.section_id OR
t_articles.unite_stockage_section_code IS DISTINCT FROM t_unites_stockage.section_code OR
t_articles.unite_stockage_section_texte IS DISTINCT FROM t_unites_stockage.section_texte OR
t_articles.unite_distribution_code IS DISTINCT FROM t_unites_distribution.code OR
t_articles.unite_distribution_texte IS DISTINCT FROM t_unites_distribution.texte_court OR
t_articles.unite_distribution_section_id IS DISTINCT FROM t_unites_distribution.section_id OR
t_articles.unite_distribution_section_code IS DISTINCT FROM t_unites_distribution.section_code OR
t_articles.unite_distribution_section_texte IS DISTINCT FROM t_unites_distribution.section_texte OR
t_articles.compte_code IS DISTINCT FROM t_compte.code OR
t_articles.compte_texte IS DISTINCT FROM t_compte.texte_court OR
t_articles.compte_section_id IS DISTINCT FROM t_compte.section_id OR
t_articles.compte_section_code IS DISTINCT FROM t_compte.section_code OR
t_articles.compte_section_texte IS DISTINCT FROM t_compte.section_texte
);
INSERT INTO base.t_lpp (code, texte, texte_court)
SELECT
ART_SUP_LPP, MAX(LPP_COURT), LEFT(MAX(LPP_COURT),50)
FROM
prod_cegi.SXART_SUP
JOIN
prod_cegi.R_LPP ON ART_SUP_LPP = LPP_ACTE
WHERE 1=1 AND
ART_SUP_LPP NOT IN (SELECT code FROM base.t_lpp) AND
ART_SUP_LPP != ''
GROUP BY 1
;
UPDATE eco.t_articles
SET
lpp_id = t_lpp.oid
FROM
prod_cegi.SXART_SUP
JOIN base.t_lpp ON ART_SUP_LPP = t_lpp.code
WHERE 1=1 AND
ART_SUP_LPP != '' AND
DOS_IDE || '-' || ART_IDE = t_articles.code_original AND
lpp_id != t_lpp.oid
;
UPDATE w_ARTICLE
SET
lpp_id = t_articles.lpp_id
FROM eco.t_articles
WHERE t_articles.code_original = ART_IDE_CTI
;
INSERT INTO base.t_ucd (code, texte, texte_court)
SELECT CASE
WHEN LENGTH(ART_SUP_UCD) = 13 AND LEFT(ART_SUP_UCD,1) != '0' THEN LEFT(RIGHT(ART_SUP_UCD,8),7)::text
ELSE split_part(ART_SUP_UCD,'.',1)::text
END, MAX(ART_SUP_LIB), LEFT(MAX(ART_SUP_LIB),50)
FROM prod_cegi.SXART_SUP
WHERE CASE
WHEN LENGTH(ART_SUP_UCD) = 13 AND LEFT(ART_SUP_UCD,1) != '0' THEN LEFT(RIGHT(ART_SUP_UCD,8),7)::text
ELSE split_part(ART_SUP_UCD,'.',1)::text
END NOT IN (SELECT code FROM base.t_ucd) AND ART_SUP_UCD != ''
AND NOT ART_SUP_UCD ~ '[A-Z]' AND LENGTH(ART_SUP_UCD) < 14
GROUP BY 1
;
UPDATE eco.t_articles
SET
ucd_id = t_ucd.oid
FROM
prod_cegi.SXART_SUP
JOIN base.t_ucd ON (ART_SUP_UCD != '' AND NOT ART_SUP_UCD ~'[A-Z]' AND LENGTH(ART_SUP_UCD) < 14 AND CASE
WHEN LENGTH(ART_SUP_UCD) = 13 AND LEFT(ART_SUP_UCD,1) != '0' THEN LEFT(RIGHT(ART_SUP_UCD,8),7)::text
ELSE split_part(ART_SUP_UCD,'.',1)::text
END = t_ucd.code)
WHERE 1=1 AND
DOS_IDE || '-' || ART_IDE = t_articles.code_original AND
ucd_id != t_ucd.oid
;
UPDATE eco.t_articles
SET
code_ucd13 = ART_SUP_UCD
FROM prod_cegi.SXART_SUP
WHERE DOS_IDE || '-' || ART_IDE = t_articles.code_original AND
code_ucd13 IS DISTINCT FROM ART_SUP_UCD AND
ART_SUP_UCD LIKE '34008%'
;
UPDATE w_ARTICLE
SET
ucd_id = t_articles.ucd_id
FROM eco.t_articles
WHERE t_articles.code_original = ART_IDE_CTI
;
-- Référence article fournisseur
DROP TABLE IF EXISTS w_ARTICLES_FOURNISSEUR;
CREATE TEMP TABLE w_ARTICLES_FOURNISSEUR AS
SELECT
SX_CDD.DOS_IDE,
SX_CDD.ART_IDE,
SX_CDE.TIE_ID,
SX_CDD_REF,
SX_CDD_ART_LIB,
SX_CDE_DAT AS DATE_COMMANDE,
MAX(COALESCE(ART_SUP_LPP,'')) AS ART_SUP_LPP,
MAX(COALESCE(ART_SUP_UCD,'')) AS ART_SUP_UCD,
MAX(COALESCE(ART_SUP_UCD,'')) AS ART_SUP_UCD13,
''::text AS SX_CIP_COD,
''::text AS SX_LAF_REF,
0::numeric AS SX_LAF_CON,
MAX(SX_CDD_PHT)AS SX_CDD_PHT,
MAX(CASE WHEN SX_CDD.FORME_IDE <> 0 THEN SX_CDD.DOS_IDE::text||'-'::text||SX_CDD.FORME_IDE::text ELSE '' END) AS unite_code_original,
count(*) AS nb,
0::bigint AS article_id,
0::bigint AS fournisseur_id,
0::bigint AS fournisseur_distributeur_id,
0::bigint AS unite_id,
0::bigint AS ucd_id,
0::bigint AS lpp_id
FROM prod_cegi.SX_CDD
JOIN prod_cegi.SX_CDE ON SX_CDD.SX_CDE_IDE = SX_CDE.SX_CDE_IDE AND SX_CDD.DOS_IDE = SX_CDE.DOS_IDE
LEFT JOIN prod_cegi.SXART_SUP ON
SXART_SUP.ART_IDE = SX_CDD.ART_IDE AND
SXART_SUP.DOS_IDE = SX_CDD.DOS_IDE
GROUP BY 1,2,3,4,5,6
ORDER BY 1,2
;
ANALYSE w_ARTICLES_FOURNISSEUR
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_REF = SX_LAF.SX_LAF_REF
FROM
(
SELECT DOS_IDE, ART_IDE, TIE_ID,
(MAX(ARRAY[SX_LAF_DEB::text, SX_LAF_REF::text]))[2] AS SX_LAF_REF
FROM prod_cegi.SX_LAF
WHERE SX_LAF_SUPP = 0
GROUP BY 1,2,3
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR.TIE_ID = SX_LAF.TIE_ID
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_CON = SX_LAF.SX_LAF_CON
FROM
(
SELECT DOS_IDE, ART_IDE, TIE_ID,
(MAX(ARRAY[SX_LAF_DEB::text, SX_LAF_CON::text]))[2]::numeric AS SX_LAF_CON
FROM prod_cegi.SX_LAF
WHERE SX_LAF_SUPP = 0
GROUP BY 1,2,3
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR.TIE_ID = SX_LAF.TIE_ID
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_CON = SX_LAF.SX_LAF_CON
FROM
(
SELECT DOS_IDE, ART_IDE, TIE_ID,
(MAX(ARRAY[SX_LAF_DEB::text, SX_LAF_CON::text]))[2]::numeric AS SX_LAF_CON
FROM prod_cegi.SX_LAF
GROUP BY 1,2,3
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR.TIE_ID = SX_LAF.TIE_ID AND
w_ARTICLES_FOURNISSEUR.SX_LAF_CON = 0
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_CON = SX_LAF.SX_LAF_CON
FROM
(
SELECT DOS_IDE, ART_IDE,
(MAX(ARRAY[SX_LAF_DEB::text, SX_LAF_CON::text]))[2]::numeric AS SX_LAF_CON
FROM prod_cegi.SX_LAF
WHERE SX_LAF_SUPP = 0
GROUP BY 1,2
HAVING count(DISTINCT SX_LAF_CON) = 1
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR.SX_LAF_CON = 0
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_CON = SX_LAF.SX_LAF_CON
FROM
(
SELECT DOS_IDE, ART_IDE,
(MAX(ARRAY[SX_LAF_DEB::text, SX_LAF_CON::text]))[2]::numeric AS SX_LAF_CON
FROM prod_cegi.SX_LAF
WHERE SX_LAF_SUPP = 0
GROUP BY 1,2
HAVING count(DISTINCT SX_LAF_CON) > 1
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR.SX_LAF_CON = 0
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_LAF_CON = 1
WHERE SX_LAF_CON = 0
;
UPDATE w_ARTICLES_FOURNISSEUR
SET SX_CIP_COD = subview.SX_CIP_COD
FROM
(
SELECT DOS_IDE, ART_IDE, (MAX(ARRAY[(1-SX_CIP_SUPP)::text, SX_CIP_DEB::text,SX_CIP_COD::text]))[3] AS SX_CIP_COD
FROM prod_cegi.SX_CIP
GROUP BY 1,2
) subview
WHERE w_ARTICLES_FOURNISSEUR.DOS_IDE = subview.DOS_IDE AND
w_ARTICLES_FOURNISSEUR.ART_IDE = subview.ART_IDE
;
UPDATE w_ARTICLES_FOURNISSEUR SET
ART_SUP_UCD13 = CASE WHEN ART_SUP_UCD13 LIKE '34008%' THEN w_ARTICLES_FOURNISSEUR.ART_SUP_UCD13 ELSE '' END,
ART_SUP_UCD = CASE WHEN ART_SUP_UCD LIKE '34008%' THEN substr(w_ARTICLES_FOURNISSEUR.ART_SUP_UCD,6,7) ELSE w_ARTICLES_FOURNISSEUR.ART_SUP_UCD END
WHERE
(
ART_SUP_UCD13 IS DISTINCT FROM CASE WHEN ART_SUP_UCD13 LIKE '34008%' THEN w_ARTICLES_FOURNISSEUR.ART_SUP_UCD13 ELSE '' END OR
ART_SUP_UCD IS DISTINCT FROM CASE WHEN ART_SUP_UCD LIKE '34008%' THEN substr(w_ARTICLES_FOURNISSEUR.ART_SUP_UCD,6,7) ELSE w_ARTICLES_FOURNISSEUR.ART_SUP_UCD END
)
;
UPDATE w_ARTICLES_FOURNISSEUR
SET ucd_id = t_ucd.oid
FROM base.t_ucd
WHERE ART_SUP_UCD <> '' AND
ART_SUP_UCD = t_ucd.code
;
UPDATE w_ARTICLES_FOURNISSEUR
SET lpp_id = t_lpp.oid
FROM base.t_lpp
WHERE ART_SUP_LPP <> '' AND
ART_SUP_LPP = t_lpp.code
;
UPDATE w_ARTICLES_FOURNISSEUR
SET article_id = t_articles.oid
FROM eco.t_articles
WHERE DOS_IDE::text||'-'::text||ART_IDE::text = t_articles.code_original
;
UPDATE w_ARTICLES_FOURNISSEUR
SET fournisseur_id = t_fournisseurs.oid
FROM eco.t_fournisseurs
WHERE TIE_ID = t_fournisseurs.code_original
;
UPDATE w_ARTICLES_FOURNISSEUR
SET unite_id = t_unites.oid
FROM eco.t_unites
WHERE unite_code_original = t_unites.code_original AND
unite_code_original <> ''
;
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(subview.ref_fournisseur_code) AS ref_fournisseur_code,
base.cti_group_array3(CASE WHEN subview.ref_fournisseur_texte != '' THEN subview.ref_fournisseur_texte ELSE texte END || CASE WHEN subview.ref_fournisseur_code != '' AND subview.ref_fournisseur_code != subview.ref_fournisseur_texte THEN '(' || subview.ref_fournisseur_code || ')' ELSE '' END) AS ref_fournisseur_texte
FROM
(
SELECT
article_id,
fournisseur_id,
(MAX(Array[CASE WHEN SX_CDD_ART_LIB != '' THEN DATE_COMMANDE::text ELSE '1900-01-01' END, SX_CDD_ART_LIB]))[2] AS ref_fournisseur_texte,
(MAX(Array[CASE
WHEN SX_CDD_REF != '' OR split_part(split_part(SX_CDD_ART_LIB,' REF ',2),' ',1) != '' THEN DATE_COMMANDE::text
ELSE '1900-01-01'
END,
CASE
WHEN SX_CDD_REF != '' THEN SX_CDD_REF
WHEN ART_SUP_UCD != '' THEN ART_SUP_UCD
WHEN ART_SUP_LPP != '' THEN ART_SUP_LPP
WHEN SX_CDD_ART_LIB LIKE '% REF%' THEN split_part(split_part(SX_CDD_ART_LIB,' REF ',2),' ',1)
ELSE SX_CDD_ART_LIB
END]))[2] AS ref_fournisseur_code
FROM w_ARTICLES_FOURNISSEUR
WHERE fournisseur_id <> 0
GROUP BY 1,2
ORDER BY 1,2
) subview
JOIN eco.t_articles ON article_id = t_articles.oid
GROUP BY 1
ORDER BY 2,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
DOS_IDE::text||'-'::text||ART_IDE::text||'-'||TIE_ID AS code_original2,
DOS_IDE::text||'-'::text||ART_IDE::text||'-'||TIE_ID AS code_original,
MAX(DOS_IDE) AS DOS_IDE,
MAX(ART_IDE) AS ART_IDE,
MAX(TIE_ID) AS TIE_ID,
MAX(article_id) AS article_id,
MAX(fournisseur_id) AS fournisseur_id,
(MAX(Array[CASE WHEN SX_CDD_ART_LIB != '' THEN DATE_COMMANDE::text ELSE '1900-01-01' END, SX_CDD_ART_LIB]))[2] AS texte_reference_fournisseur,
(MAX(Array[CASE
WHEN SX_CDD_REF != '' OR split_part(split_part(SX_CDD_ART_LIB,' REF ',2),' ',1) != '' THEN DATE_COMMANDE::text
ELSE '1900-01-01'
END,
CASE
WHEN SX_LAF_REF != '' THEN SX_LAF_REF
WHEN SX_CDD_REF != '' THEN SX_CDD_REF
WHEN ART_SUP_UCD13 != '' THEN ART_SUP_UCD13
WHEN ART_SUP_UCD != '' THEN ART_SUP_UCD
WHEN ART_SUP_LPP != '' THEN ART_SUP_LPP
WHEN SX_CDD_ART_LIB LIKE '% REF%' THEN split_part(split_part(SX_CDD_ART_LIB,' REF ',2),' ',1)
ELSE SX_CDD_ART_LIB
END]))[2] AS code_reference_fournisseur,
(MAX(Array[CASE WHEN SX_CIP_COD != '' THEN DATE_COMMANDE::text ELSE '1900-01-01' END, SX_CIP_COD]))[2] AS code_cip,
(MAX(Array[CASE WHEN ucd_id <> 0 THEN DATE_COMMANDE::text ELSE '1900-01-01' END, ucd_id::text]))[2]::bigint AS ucd_id,
(MAX(Array[CASE WHEN lpp_id <> 0 THEN DATE_COMMANDE::text ELSE '1900-01-01' END, lpp_id::text]))[2]::bigint AS lpp_id,
(MAX(Array[CASE WHEN ART_SUP_UCD13 != '' THEN DATE_COMMANDE::text ELSE '1900-01-01' END, ART_SUP_UCD13]))[2] AS code_ucd13,
''::text AS code_cahpp,
MAX(unite_id) AS unite_approvisionnement_id,
MAX(SX_LAF_CON) AS nombre_conditionnement_approvisionnement,
(MAX(ARRAY[DATE_COMMANDE::text,SX_CDD_PHT::text]))[2]::numeric AS prix_unitaire_en_cours
FROM w_ARTICLES_FOURNISSEUR
GROUP BY 1
;
UPDATE w_ARTICLES_FOURNISSEUR_eco
SET prix_unitaire_en_cours = SX_LAF_PUN
FROM (SELECT DOS_IDE, TIE_ID, ART_IDE,
(MAX(Array[SX_LAF_IDE,SX_LAF_PUN]))[2] AS SX_LAF_PUN
FROM prod_cegi.SX_LAF
WHERE SX_LAF_SUPP = 0
AND (SX_LAF_APP IS NULL OR SX_LAF_APP <= now())
AND (SX_LAF_MAR_DAR IS NULL OR SX_LAF_MAR_DAR >= now())
GROUP BY 1,2,3
) SX_LAF
WHERE w_ARTICLES_FOURNISSEUR_eco.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR_eco.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR_eco.TIE_ID = SX_LAF.TIE_ID AND
prix_unitaire_en_cours <> SX_LAF_PUN
;
UPDATE w_ARTICLES_FOURNISSEUR_eco SET
code_original = w_ARTICLES_FOURNISSEUR_eco.DOS_IDE ||'-'::text|| SX_LAF.SX_LAF_IDE
FROM prod_cegi.SX_LAF
WHERE w_ARTICLES_FOURNISSEUR_eco.DOS_IDE = SX_LAF.DOS_IDE AND
w_ARTICLES_FOURNISSEUR_eco.ART_IDE = SX_LAF.ART_IDE AND
w_ARTICLES_FOURNISSEUR_eco.TIE_ID = SX_LAF.TIE_ID
;
-- Suppression des doublons éventuels (avant maj)
DELETE FROM eco.t_article_fournisseur
USING
(
SELECT article_id,
fournisseur_id,
max(oid) AS keep_oid
FROM eco.t_article_fournisseur
GROUP BY 1,2
HAVING count(*) > 1
) subview
WHERE t_article_fournisseur.article_id = subview.article_id AND
t_article_fournisseur.fournisseur_id = subview.fournisseur_id AND
t_article_fournisseur.oid <> subview.keep_oid
;
-- Le code original prend par défaut l'identifiant de CJ_LAF
UPDATE eco.t_article_fournisseur
SET code_original = w_ARTICLES_FOURNISSEUR_eco.code_original
FROM w_ARTICLES_FOURNISSEUR_eco
WHERE w_ARTICLES_FOURNISSEUR_eco.code_original = t_article_fournisseur.code_original AND
w_ARTICLES_FOURNISSEUR_eco.code_original2 <> w_ARTICLES_FOURNISSEUR_eco.code_original
;
INSERT INTO eco.t_article_fournisseur (
code_original,
article_id,
fournisseur_id,
code_reference_fournisseur,
texte_reference_fournisseur,
code_cip,
ucd_id,
code_ucd13,
lpp_id,
code_cahpp,
unite_approvisionnement_id,
nombre_conditionnement_approvisionnement,
prix_unitaire_en_cours
)
SELECT
code_original,
article_id,
fournisseur_id,
code_reference_fournisseur,
texte_reference_fournisseur,
code_cip,
ucd_id,
code_ucd13,
lpp_id,
code_cahpp,
unite_approvisionnement_id,
nombre_conditionnement_approvisionnement,
prix_unitaire_en_cours
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)
;
-- Suppression des doublons éventuels
DELETE FROM eco.t_article_fournisseur
USING
(
SELECT article_id,
fournisseur_id,
max(oid) AS keep_oid
FROM eco.t_article_fournisseur
GROUP BY 1,2
HAVING count(*) > 1
) subview
WHERE t_article_fournisseur.article_id = subview.article_id AND
t_article_fournisseur.fournisseur_id = subview.fournisseur_id AND
t_article_fournisseur.oid <> subview.keep_oid
;
UPDATE eco.t_article_fournisseur SET
article_id = w_articles_fournisseur_eco.article_id,
fournisseur_id = w_articles_fournisseur_eco.fournisseur_id,
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_ucd13 = w_articles_fournisseur_eco.code_ucd13,
ucd_id = w_articles_fournisseur_eco.ucd_id,
lpp_id = w_articles_fournisseur_eco.lpp_id,
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
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.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_ucd13 IS DISTINCT FROM w_articles_fournisseur_eco.code_ucd13 OR
t_article_fournisseur.ucd_id IS DISTINCT FROM w_articles_fournisseur_eco.ucd_id OR
t_article_fournisseur.lpp_id IS DISTINCT FROM w_articles_fournisseur_eco.lpp_id 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
)
;
-- Suppression des doublons éventuels (après maj, cas de SX_LAF qui change)
DELETE FROM eco.t_article_fournisseur
USING
(
SELECT article_id,
fournisseur_id,
max(oid) AS keep_oid
FROM eco.t_article_fournisseur
GROUP BY 1,2
HAVING count(*) > 1
) subview
WHERE t_article_fournisseur.article_id = subview.article_id AND
t_article_fournisseur.fournisseur_id = subview.fournisseur_id AND
t_article_fournisseur.oid <> subview.keep_oid
;
]]></sqlcmd>
</NODE>
<NODE label="Tables Fournisseurs">
<sqlcmd><![CDATA[
-- Types de fournisseurs
-- Fournisseurs
INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original)
SELECT TIE_CODE,
CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END,
CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END,
SX_FOURNISSEUR.TIE_ID
FROM prod_cegi.SX_FOURNISSEUR
LEFT JOIN eco.t_fournisseurs ON code_original = SX_FOURNISSEUR.TIE_ID
LEFT JOIN prod_cegi.CMTIERS ON SX_FOURNISSEUR.TIE_ID = CMTIERS.TIE_ID
WHERE code_original IS NULL;
-- Fournisseurs qui ne sont que dans la table des tiers
INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original)
SELECT TIE_CODE,
CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_CDE.TIE_ID END,
CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_CDE.TIE_ID END,
SX_CDE.TIE_ID
FROM prod_cegi.SX_CDE
LEFT JOIN prod_cegi.SX_FOURNISSEUR ON SX_CDE.TIE_ID = SX_FOURNISSEUR.TIE_ID
JOIN prod_cegi.CMTIERS ON SX_CDE.TIE_ID = CMTIERS.TIE_ID
LEFT JOIN eco.t_fournisseurs ON code_original = SX_CDE.TIE_ID
WHERE SX_FOURNISSEUR.TIE_ID IS NULL AND
code_original IS NULL
GROUP BY 1,2,3,4
;
UPDATE eco.t_fournisseurs
SET code = TIE_CODE,
texte = CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||CMTIERS.TIE_ID END,
texte_court = CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||CMTIERS.TIE_ID END
FROM prod_cegi.CMTIERS
WHERE code_original = CMTIERS.TIE_ID
AND (code IS DISTINCT FROM TIE_CODE OR
texte IS DISTINCT FROM CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||CMTIERS.TIE_ID END OR
texte_court IS DISTINCT FROM CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||CMTIERS.TIE_ID END)
;
UPDATE eco.t_fournisseurs
SET fournisseur_distributeur_id = COALESCE(t_fournisseurs_distributeur.oid, t_fournisseurs.oid)
FROM prod_cegi.SX_FOURNISSEUR
LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON SX_FOU_DIS_IDE = t_fournisseurs_distributeur.code_original AND SX_FOU_DIS_IDE > 0
WHERE t_fournisseurs.code_original = SX_FOURNISSEUR.TIE_ID AND
t_fournisseurs.fournisseur_distributeur_id IS DISTINCT FROM COALESCE(t_fournisseurs_distributeur.oid, t_fournisseurs.oid)
;
UPDATE eco.t_fournisseurs
SET fournisseur_distributeur_id = oid
WHERE fournisseur_distributeur_id = 0
;
INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id)
SELECT TIES_CODEP, UPPER(MAX(TIES_VILLE)), UPPER(MAX(TIES_VILLE)), MAX(t_departements.oid)
FROM prod_cegi.SX_FOURNISSEUR
JOIN prod_cegi.CMTIESERV ON SX_FOURNISSEUR.TIE_ID = CMTIESERV.TIE_ID AND CMTIESERV.TIES_SERV = 0
LEFT JOIN base.t_codes_postaux ON TIES_CODEP = t_codes_postaux.code
JOIN base.t_departements ON
TIES_CODEP NOT LIKE '97%' AND substr(TIES_CODEP,1,2) = t_departements.code OR
TIES_CODEP LIKE '97%' AND substr(TIES_CODEP,1,3) = t_departements.code
WHERE t_codes_postaux.oid IS NULL AND
length(TIES_CODEP) = 5
GROUP BY 1
;
-- Adresse
UPDATE eco.t_fournisseurs SET
code = TIE_CODE,
texte = CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END,
texte_court = CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END,
adresse = COALESCE(trim(TIES_ADR1 || ' ' || TIES_ADR2),''),
code_postal_id = COALESCE(t_codes_postaux.oid,0),
ville = COALESCE(TIES_VILLE,''),
cedex = '',
telephone = COALESCE(TIES_TEL,''),
fax = COALESCE(TIES_FAX,''),
email = COALESCE(TIES_EMAIL,''),
code_cahpp = '',
siret = COALESCE(TIE_SIRET,''),
iban = COALESCE(substr(RIB_IBAN,1,4) || ' ' || substr(RIB_IBAN,5,4) || ' ' || substr(RIB_IBAN,9,4) || ' ' || substr(RIB_IBAN,13,4) || ' ' || substr(RIB_IBAN,17,4) || ' ' || substr(RIB_IBAN,21,4) || ' ' || substr(RIB_IBAN,25,4),''),
bic = COALESCE(RIB_BIC,''),
code_comptable = COALESCE(PLX_COMPTE,TIE_CODE)
FROM prod_cegi.SX_FOURNISSEUR
LEFT JOIN prod_cegi.CMTIERS ON SX_FOURNISSEUR.TIE_ID = CMTIERS.TIE_ID
LEFT JOIN prod_cegi.CMPLANAUX ON CMTIERS.PLX_ID = CMPLANAUX.PLX_ID
LEFT JOIN prod_cegi.CMTIESERV ON SX_FOURNISSEUR.TIE_ID = CMTIESERV.TIE_ID AND CMTIESERV.TIES_SERV = 0
LEFT JOIN
(
SELECT CMTIERIB.*
FROM prod_cegi.CMTIERIB
JOIN
(
SELECT TIE_ID,
(MAX(ARRAY[COALESCE(RIB_DATECLOT,'20991231'::date)::text,RIB_DEF::text, RIB_NUMORD::text]))[3]::numeric AS RIB_NUMORD
FROM prod_cegi.CMTIERIB
GROUP BY 1
) subview ON CMTIERIB.TIE_ID = subview.TIE_ID AND CMTIERIB.RIB_NUMORD = subview.RIB_NUMORD
) CMTIERIB ON SX_FOURNISSEUR.TIE_ID = CMTIERIB.TIE_ID
LEFT JOIN base.t_codes_postaux ON TIES_CODEP = t_codes_postaux.code
WHERE code_original = SX_FOURNISSEUR.TIE_ID AND
(
t_fournisseurs.code IS DISTINCT FROM TIE_CODE OR
t_fournisseurs.texte IS DISTINCT FROM CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END OR
t_fournisseurs.texte_court IS DISTINCT FROM CASE WHEN COALESCE(TIE_NOM,'') <> '' THEN TIE_NOM ELSE '?'||SX_FOURNISSEUR.TIE_ID END OR
t_fournisseurs.adresse IS DISTINCT FROM COALESCE(trim(TIES_ADR1 || ' ' || TIES_ADR2),'') OR
t_fournisseurs.code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR
t_fournisseurs.ville IS DISTINCT FROM COALESCE(TIES_VILLE,'') OR
t_fournisseurs.cedex IS DISTINCT FROM '' OR
t_fournisseurs.telephone IS DISTINCT FROM COALESCE(TIES_TEL,'') OR
t_fournisseurs.fax IS DISTINCT FROM COALESCE(TIES_FAX,'') OR
t_fournisseurs.email IS DISTINCT FROM COALESCE(TIES_EMAIL,'') OR
t_fournisseurs.code_cahpp IS DISTINCT FROM '' OR
t_fournisseurs.siret IS DISTINCT FROM COALESCE(TIE_SIRET,'') OR
t_fournisseurs.iban IS DISTINCT FROM COALESCE(substr(RIB_IBAN,1,4) || ' ' || substr(RIB_IBAN,5,4) || ' ' || substr(RIB_IBAN,9,4) || ' ' || substr(RIB_IBAN,13,4) || ' ' || substr(RIB_IBAN,17,4) || ' ' || substr(RIB_IBAN,21,4) || ' ' || substr(RIB_IBAN,25,4),'') OR
t_fournisseurs.bic IS DISTINCT FROM COALESCE(RIB_BIC,'') OR
t_fournisseurs.code_comptable IS DISTINCT FROM COALESCE(PLX_COMPTE,TIE_CODE)
)
;
UPDATE eco.t_fournisseurs
SET type_id = 0
WHERE type_id IS NULL;
UPDATE eco.t_fournisseurs SET
type_code = t_types_fournisseurs.code,
type_texte = t_types_fournisseurs.texte_court,
type_section_id = t_types_fournisseurs.section_id,
type_section_code = t_types_fournisseurs.section_code,
type_section_texte = t_types_fournisseurs.section_texte
FROM eco.t_types_fournisseurs
WHERE type_id = t_types_fournisseurs.oid
AND (
type_code IS DISTINCT FROM t_types_fournisseurs.code OR
type_texte IS DISTINCT FROM t_types_fournisseurs.texte_court OR
type_section_id IS DISTINCT FROM t_types_fournisseurs.section_id OR
type_section_code IS DISTINCT FROM t_types_fournisseurs.section_code OR
type_section_texte IS DISTINCT FROM t_types_fournisseurs.section_texte
);
-- Référence article fournisseur
]]></sqlcmd>
</NODE>
<NODE label="Autres tables">
<sqlcmd><![CDATA[
-- Gestionnaires
INSERT INTO eco.t_divers (code, texte, valeur, description)
SELECT
'CEGI_GEST_SRC',
'Source du gestionnaire',
'UTI',
'UTI=Utilisateur, DOS=Dossier'
WHERE 'CEGI_GEST_SRC' NOT IN (SELECT code FROM eco.t_divers)
;
INSERT INTO eco.t_gestionnaires(code_original, code, texte, texte_court)
SELECT UTL_ID::text, UTL_CODE, UTL_LIB, UTL_LIB
FROM prod_cegi.CJ_UTIL
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC' AND t_divers.valeur <> 'DOS'
LEFT JOIN eco.t_gestionnaires ON (code_original = UTL_ID::text)
WHERE code_original IS NULL AND
UTL_ID IN (
SELECT SX_CDE_SIG FROM prod_cegi.SX_CDE
JOIN prod_cegi.SXDOSSIER ON SXDOSSIER.DOS_IDE = SX_CDE.DOS_IDE
WHERE SXDOSSIER.ETAB_ID::text = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
;
INSERT INTO eco.t_gestionnaires(code_original, code, texte, texte_court)
SELECT UTL_ID::text, UTL_CODE, UTL_LIB, UTL_LIB
FROM prod_cegi.CJ_UTIL
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC' AND t_divers.valeur <> 'DOS'
LEFT JOIN eco.t_gestionnaires ON (code_original = UTL_ID::text)
WHERE code_original IS NULL AND
UTL_ID IN (SELECT SX_CDE_UTI FROM prod_cegi.SX_CDE WHERE (ETAB_ID = ANY(string_to_array('[ETAB_ID]',',')) OR '[ETAB_ID]' = ''))
;
INSERT INTO eco.t_gestionnaires(code_original, code, texte, texte_court)
SELECT DOS_IDE::text, DOS_COD, DOS_LIB, DOS_LIB
FROM prod_cegi.SXDOSSIER
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC' AND t_divers.valeur = 'DOS'
LEFT JOIN eco.t_gestionnaires ON (code_original = DOS_IDE::text)
WHERE code_original IS NULL AND
(SXDOSSIER.ETAB_ID = ANY(string_to_array('[ETAB_ID]',',')) OR '[ETAB_ID]' = '')
;
UPDATE eco.t_gestionnaires SET
code = DOS_COD,
texte = DOS_LIB,
texte_court = DOS_LIB
FROM prod_cegi.SXDOSSIER
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC' AND t_divers.valeur = 'DOS'
WHERE t_gestionnaires.code_original = DOS_IDE::text AND
(
t_gestionnaires.code IS DISTINCT FROM DOS_COD OR
t_gestionnaires.texte IS DISTINCT FROM DOS_LIB OR
t_gestionnaires.texte_court IS DISTINCT FROM DOS_LIB
)
;
-- Unités fonctionnelles
INSERT INTO eco.t_unites_fonctionnelles(code_original, code, texte, texte_court)
SELECT TII_IDE::text, MAX(NVE_LIBC), MAX(NVE_LIBELLE), LEFT(MAX(NVE_LIBELLE),50)
FROM prod_cegi.SXTIERS_INTERNES
JOIN prod_cegi.CJ_NVE ON TII_IDE = NVE_ID AND (ETB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
LEFT JOIN eco.t_unites_fonctionnelles ON (code_original = TII_IDE::text)
WHERE code_original IS NULL
GROUP BY 1;
UPDATE eco.t_unites_fonctionnelles SET
code = NVE_LIBC,
texte = NVE_LIBELLE,
texte_court = LEFT(NVE_LIBELLE,50)
FROM prod_cegi.SXTIERS_INTERNES
JOIN prod_cegi.CJ_NVE ON TII_IDE = NVE_ID AND (ETB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
WHERE code_original = TII_IDE
AND (code IS DISTINCT FROM NVE_LIBC OR
texte IS DISTINCT FROM NVE_LIBELLE OR
texte_court IS DISTINCT FROM LEFT(NVE_LIBELLE,50));
-- Lieux
INSERT INTO eco.t_lieux(code_original, code, texte, texte_court)
SELECT NVE_ID::text, MAX(NVE_LIBC), MAX(NVE_LIBELLE), MAX(NVE_LIBELLE)
FROM prod_cegi.CJ_NVE
LEFT JOIN eco.t_lieux ON (code_original = NVE_ID::text)
WHERE NVE_ID IN (SELECT MVT_STO FROM prod_cegi.SXMOUVEMENT) AND
code_original IS NULL AND
(ETB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
GROUP BY 1;
-- Site
INSERT INTO eco.t_sites(code_original, code, texte, texte_court)
SELECT DOS_IDE::text, DOS_COD, DOS_LIB, DOS_LIB
FROM prod_cegi.SXDOSSIER
LEFT JOIN eco.t_sites ON (code_original = DOS_IDE::text)
WHERE code_original IS NULL
AND (ETAB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1');
-- Types mouvements
DROP TABLE IF EXISTS w_types_mouvements;
CREATE TEMP TABLE w_types_mouvements AS
SELECT
MVT_CAT::text||MVT_TY1||MVT_TY2||MVT_TY3 AS MVT_TYP,
CASE MVT_TY1
WHEN 'D' THEN 'Distribution'
WHEN 'E' THEN 'Echange'
WHEN 'I' THEN 'Inventaire'
WHEN 'L' THEN 'Livraison'
WHEN 'M' THEN 'Mise à jour stock'
WHEN 'R' THEN 'Retour'
WHEN 'X' THEN 'Destruction'
ELSE MVT_TY1 END
|| ' (' || MVT_CAT::text || ' ' || MVT_TY2 || ' ' || MVT_TY3 || ')' AS MVT_TYP_LIB,
MVT_CAT::text,
MVT_TY1,
MVT_TY2,
MVT_TY3
FROM prod_cegi.SXMOUVEMENT
GROUP BY 1,2,3,4,5,6
ORDER BY 1;
INSERT INTO eco.t_types_mouvements(code, texte, texte_court, code_original)
SELECT MVT_TYP, MVT_TYP_LIB, MVT_TYP_LIB, MVT_TYP
FROM w_types_mouvements
LEFT JOIN eco.t_types_mouvements ON code_original = MVT_TYP
WHERE MVT_TYP<> '' AND t_types_mouvements.oid IS NULL
GROUP BY 1,2,3,4;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PROD" label="RECUPERATION DES DONNEES DE PRODUCTION">
<NODE label="Préparation">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_SX_CDE;
CREATE TEMP TABLE w_SX_CDE AS
SELECT
SX_CDE.DOS_IDE,
SX_CDE_IDE,
SX_CDE.DOS_IDE::text||'-'::text||SX_CDE_IDE::text AS SX_CDE_IDE_CTI,
SX_CDE_NUM,
SX_CDE_DAT,
substr(SX_CDE_COM,1,255) AS SX_CDE_COM,
SX_CDE_REF,
SX_CDE_LIV,
TIE_ID,
SX_CDE_UTI,
SX_CDE_SIG,
CASE
WHEN t_divers.valeur = 'DOS' THEN SX_CDE.DOS_IDE::text
WHEN SX_CDE_SIG <> 0 THEN SX_CDE_SIG::text
ELSE SX_CDE_UTI::text END AS gestionnaire_code_original,
SX_CDE_MNT_HT,
SX_CDE_MNT_TVA AS SX_CDE_MNT_TTC,
SX_CDE_MNT_TVA - SX_CDE_MNT_HT AS SX_CDE_MNT_TVA,
'20991231'::date AS SX_LVE_DAT,
0::numeric AS SX_CDE_MNL_HT,
0::numeric AS SX_CDE_MNL_TTC,
0::numeric AS SX_CDE_MNL_TVA,
'20991231'::date AS SX_FCE_DAT,
0::numeric AS SX_CDE_MNF_HT,
0::numeric AS SX_CDE_MNF_TTC,
0::numeric AS SX_CDE_MNF_TVA
FROM prod_cegi.SX_CDE
JOIN prod_cegi.SXDOSSIER ON SXDOSSIER.DOS_IDE = SX_CDE.DOS_IDE
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC'
WHERE SX_CDE_DAT >= '[ENV_ECO_ANNEEDEBUT]0101' AND
SX_CDE_SUPP = 0 AND
(SXDOSSIER.ETAB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
;
DROP TABLE IF EXISTS w_SX_CDD;
CREATE TEMP TABLE w_SX_CDD AS
SELECT
SX_CDD.DOS_IDE,
SX_CDD.SX_CDE_IDE,
SX_CDD.DOS_IDE::text||'-'::text||SX_CDD.SX_CDE_IDE::text AS SX_CDE_IDE_CTI,
SX_CDD.DOS_IDE::text||'-'::text||SX_CDD.SX_CDD_IDE::text AS SX_CDD_IDE_CTI,
SX_CDD.SX_CDD_IDE,
SX_CDD.ART_IDE,
SX_CDD.DOS_IDE::text||'-'::text||SX_CDD.ART_IDE::text AS ART_IDE_CTI,
SX_CDD.FORME_IDE,
SX_CDD.DOS_IDE::text||'-'::text||SX_CDD.FORME_IDE::text AS FORME_IDE_CTI,
SX_CDD_QTE,
SX_CDD_QTL,
SX_CDD_PHT,
SX_CDD_PTC,
SX_CDD_SOL,
SX_CDD_OND,
round((SX_CDD_PHT * SX_CDD_QTE)::numeric,2) AS SX_CDD_MNT_HT,
round((SX_CDD_PTC * SX_CDD_QTE)::numeric,2) AS SX_CDD_MNT_TTC,
round((SX_CDD_PTC * SX_CDD_QTE)::numeric,2) - round((SX_CDD_PHT * SX_CDD_QTE)::numeric,2) AS SX_CDD_MNT_TVA,
'20991231'::date AS SX_LVE_DAT,
round((SX_CDD_PHT * SX_CDD_QTL)::numeric,2) AS SX_CDD_MNL_HT,
round((SX_CDD_PTC * SX_CDD_QTL)::numeric,2) AS SX_CDD_MNL_TTC,
round((SX_CDD_PTC * SX_CDD_QTL)::numeric,2) - round((SX_CDD_PHT * SX_CDD_QTL)::numeric,2) AS SX_CDD_MNL_TVA,
'20991231'::date AS SX_FCE_DAT,
SX_CDD_QTF,
0::numeric AS SX_CDD_MNF_HT,
0::numeric AS SX_CDD_MNF_TTC,
0::numeric AS SX_CDD_MNF_TVA,
SX_CDE_DAT AS TVA_DATE,
SX_CDD.TVA_CODE,
base.cti_division((round((SX_CDD_PTC)::numeric,2)-round((SX_CDD_PHT)::numeric,2)), round((SX_CDD_PHT)::numeric,2)) * 100 AS TVV_TAUX
FROM prod_cegi.SX_CDD
JOIN w_SX_CDE ON SX_CDD.DOS_IDE = w_SX_CDE.DOS_IDE AND SX_CDD.SX_CDE_IDE = w_SX_CDE.SX_CDE_IDE
WHERE SX_CDD_SUPP = 0;
UPDATE w_SX_CDD
SET TVV_TAUX = CMVALEURTVA.TVV_TAUX
FROM prod_cegi.CMVALEURTVA
WHERE w_SX_CDD.TVA_CODE = CMVALEURTVA.TVA_CODE AND
TVA_DATE BETWEEN TVV_DATDEB AND COALESCE(TVV_DATFIN,'20991231') AND
w_SX_CDD.TVV_TAUX IS DISTINCT FROM CMVALEURTVA.TVV_TAUX
;
DROP TABLE IF EXISTS w_SX_LVD;
CREATE TEMP TABLE w_SX_LVD AS
SELECT
w_SX_CDD.DOS_IDE,
w_SX_CDD.SX_CDD_IDE,
SUM(COALESCE(SX_LVD_QTE,0)) AS SX_LVD_QTE,
MAX(COALESCE(SX_LVE.SX_LVE_DAT,'20991231')) AS SX_LVE_DAT,
base.cti_group_array3(SX_LVD.DOS_IDE::text||'-'::text||SX_LVD.MVT_IDE::text) AS MVT_IDE_array
FROM w_SX_CDD
LEFT JOIN prod_cegi.SX_LVD ON SX_LVD.DOS_IDE = w_SX_CDD.DOS_IDE AND SX_LVD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE AND SX_LVD_SUPP = 0
LEFT JOIN prod_cegi.SX_LVE ON SX_LVD.DOS_IDE = SX_LVE.DOS_IDE AND SX_LVD.SX_LVE_IDE = SX_LVE.SX_LVE_IDE
GROUP BY 1,2;
UPDATE prod_cegi.SX_FCD
SET SX_CDD_IDE = SX_LVD.SX_CDD_IDE
FROM prod_cegi.SX_LVD
WHERE SX_LVD.DOS_IDE = SX_FCD.DOS_IDE AND
SX_LVD.SX_LVD_IDE = SX_FCD.SX_LVD_IDE AND
SX_FCD.SX_CDD_IDE IS DISTINCT FROM SX_LVD.SX_CDD_IDE;
UPDATE w_SX_CDD SET
SX_CDD_QTL = SX_LVD_QTE,
SX_LVE_DAT = w_SX_LVD.SX_LVE_DAT,
SX_CDD_MNL_HT = round((SX_CDD_PHT * SX_LVD_QTE)::numeric,2),
SX_CDD_MNL_TTC = round((SX_CDD_PTC * SX_LVD_QTE)::numeric,2),
SX_CDD_MNL_TVA = round((SX_CDD_PTC * SX_LVD_QTE)::numeric,2) - round((SX_CDD_PHT * SX_CDD_QTL)::numeric,2)
FROM w_SX_LVD
WHERE w_SX_LVD.DOS_IDE = w_SX_CDD.DOS_IDE AND
w_SX_LVD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE;
SELECT base.cti_execute('
UPDATE w_SX_CDD SET
SX_CDD_QTE = SX_CDD_QTL,
SX_CDD_MNT_HT = SX_CDD_MNL_HT,
SX_CDD_MNT_TTC = SX_CDD_MNL_TTC,
SX_CDD_MNT_TVA = SX_CDD_MNL_TVA
WHERE SX_CDD_SOL = 1 AND
SX_CDD_OND IS DISTINCT FROM ''D'' AND
(SX_CDD_QTL IS DISTINCT FROM SX_CDD_QTE OR
SX_CDD_MNT_HT IS DISTINCT FROM SX_CDD_MNL_HT OR
SX_CDD_MNT_TTC IS DISTINCT FROM SX_CDD_MNL_TTC OR
SX_CDD_MNT_TVA IS DISTINCT FROM SX_CDD_MNL_TVA)
',1);
DROP TABLE IF EXISTS w_SX_FCD;
CREATE TEMP TABLE w_SX_FCD AS
SELECT
w_SX_CDD.DOS_IDE,
w_SX_CDD.SX_CDD_IDE,
SUM(COALESCE(SX_FCD_QTE,0)) AS SX_FCD_QTE,
SUM(COALESCE(SX_FCD_MNT,0)) AS SX_FCD_MNT_HT,
round(SUM(COALESCE(SX_FCD_MNT * CMVALEURTVA.TVV_TAUX / 100.00,0))::numeric,2) AS SX_FCD_MNT_TVA,
SUM(COALESCE(SX_FCD_MNT,0)) + round(SUM(COALESCE(SX_FCD_MNT * CMVALEURTVA.TVV_TAUX / 100.00,0))::numeric,2) AS SX_FCD_MNT_TTC,
MAX(COALESCE(SX_FCE.SX_FCE_DAT,'20991231')) AS SX_FCE_DAT
FROM w_SX_CDD
JOIN prod_cegi.SX_FCD ON SX_FCD.DOS_IDE = w_SX_CDD.DOS_IDE AND SX_FCD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE AND SX_FCD_SUPP = 0
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
LEFT JOIN prod_cegi.CMVALEURTVA ON SX_FCD.TVA_CODE = CMVALEURTVA.TVA_CODE AND
SX_FCE.SX_FCE_DAT BETWEEN TVV_DATDEB AND COALESCE(TVV_DATFIN,'20991231')
GROUP BY 1,2;
UPDATE w_SX_CDD SET
SX_CDD_QTF = SX_FCD_QTE,
SX_FCE_DAT = w_SX_FCD.SX_FCE_DAT,
SX_CDD_MNF_HT = SX_FCD_MNT_HT,
SX_CDD_MNF_TTC = SX_FCD_MNT_TTC,
SX_CDD_MNF_TVA = SX_FCD_MNT_TVA
FROM w_SX_FCD
WHERE w_SX_FCD.DOS_IDE = w_SX_CDD.DOS_IDE AND
w_SX_FCD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE;
SELECT base.cti_execute('UPDATE w_SX_CDD SET
SX_CDD_MNT_HT = SX_CDD_QTE * base.cti_division(SX_FCD_MNT_HT::numeric,SX_FCD_QTE::numeric),
SX_CDD_MNT_TTC = SX_CDD_QTE * base.cti_division(SX_FCD_MNT_TTC::numeric,SX_FCD_QTE::numeric),
SX_CDD_MNT_TVA = SX_CDD_QTE * base.cti_division(SX_FCD_MNT_TVA::numeric,SX_FCD_QTE::numeric)
FROM w_SX_FCD
WHERE w_SX_FCD.DOS_IDE = w_SX_CDD.DOS_IDE AND
w_SX_FCD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE AND
SX_CDD_MNT_HT = 0.,
',1)
WHERE (SELECT valeur = 1 FROM eco.t_divers WHERE code = 'CEGI_FORCE_FAC_COM')
;
SELECT base.cti_execute('
UPDATE w_SX_CDD SET
SX_CDD_MNL_HT = SX_CDD_QTL * base.cti_division(SX_FCD_MNT_HT::numeric,SX_FCD_QTE::numeric),
SX_CDD_MNL_TTC = SX_CDD_QTL * base.cti_division(SX_FCD_MNT_TTC::numeric,SX_FCD_QTE::numeric),
SX_CDD_MNL_TVA = SX_CDD_QTL * base.cti_division(SX_FCD_MNT_TVA::numeric,SX_FCD_QTE::numeric)
FROM w_SX_FCD
WHERE w_SX_FCD.DOS_IDE = w_SX_CDD.DOS_IDE AND
w_SX_FCD.SX_CDD_IDE = w_SX_CDD.SX_CDD_IDE AND
SX_CDD_MNL_HT = 0',1)
WHERE (SELECT valeur = 1 FROM eco.t_divers WHERE code = 'CEGI_FORCE_FAC_LIV')
;
UPDATE w_SX_CDE SET
SX_CDE_MNT_HT = subview.SX_CDD_MNT_HT,
SX_CDE_MNT_TTC = subview.SX_CDD_MNT_TTC,
SX_CDE_MNT_TVA = subview.SX_CDD_MNT_TVA,
SX_LVE_DAT = subview.SX_LVE_DAT,
SX_CDE_MNL_HT = subview.SX_CDD_MNL_HT,
SX_CDE_MNL_TTC = subview.SX_CDD_MNL_TTC,
SX_CDE_MNL_TVA = subview.SX_CDD_MNL_TVA,
SX_FCE_DAT = subview.SX_FCE_DAT,
SX_CDE_MNF_HT = subview.SX_CDD_MNF_HT,
SX_CDE_MNF_TTC = subview.SX_CDD_MNF_TTC,
SX_CDE_MNF_TVA = subview.SX_CDD_MNF_TVA
FROM
(
SELECT
DOS_IDE,
SX_CDE_IDE,
SUM(SX_CDD_MNT_HT) AS SX_CDD_MNT_HT,
SUM(SX_CDD_MNT_TTC) AS SX_CDD_MNT_TTC,
SUM(SX_CDD_MNT_TVA) AS SX_CDD_MNT_TVA,
MAX(SX_LVE_DAT) AS SX_LVE_DAT,
SUM(SX_CDD_MNL_HT) AS SX_CDD_MNL_HT,
SUM(SX_CDD_MNL_TTC) AS SX_CDD_MNL_TTC,
SUM(SX_CDD_MNL_TVA) AS SX_CDD_MNL_TVA,
MAX(SX_FCE_DAT) AS SX_FCE_DAT,
SUM(SX_CDD_MNF_HT) AS SX_CDD_MNF_HT,
SUM(SX_CDD_MNF_TTC) AS SX_CDD_MNF_TTC,
SUM(SX_CDD_MNF_TVA) AS SX_CDD_MNF_TVA
FROM w_SX_CDD
GROUP BY 1,2
) subview
WHERE w_SX_CDE.DOS_IDE = subview.DOS_IDE AND
w_SX_CDE.SX_CDE_IDE = subview.SX_CDE_IDE;
DROP TABLE IF EXISTS w_SX_LAF;
CREATE TEMP TABLE w_SX_LAF AS
SELECT
SX_LAF.DOS_IDE,
SX_LAF.ART_IDE,
SX_LAF.TIE_ID,
date(SX_LAF_DEB) AS SX_LAF_DEB,
'20991231'::date AS SX_LAF_FIN,
MAX(SX_LAF_PUN) AS SX_LAF_PUN,
MAX(TVA_CODE) AS TVA_CODE
FROM prod_cegi.SX_LAF
JOIN prod_cegi.SXARTICLE ON SXARTICLE.ART_IDE = SX_LAF.ART_IDE AND
SXARTICLE.DOS_IDE = SX_LAF.DOS_IDE
JOIN prod_cegi.SXART_GEN ON SXART_GEN.ART_GEN_IDE = SXARTICLE.ART_GEN_IDE AND
SXART_GEN.DOS_IDE = SXARTICLE.DOS_IDE
GROUP BY 1,2,3,4;
UPDATE w_SX_LAF
SET SX_LAF_FIN = subview.SX_LAF_FIN
FROM
(
SELECT
w_SX_LAF.DOS_IDE,
w_SX_LAF.ART_IDE,
w_SX_LAF.TIE_ID,
w_SX_LAF.SX_LAF_DEB,
MIN(date(w_SX_LAF_next.SX_LAF_DEB - interval '1 day')) AS SX_LAF_FIN
FROM w_SX_LAF
JOIN w_SX_LAF w_SX_LAF_next ON
w_SX_LAF.DOS_IDE = w_SX_LAF_next.DOS_IDE AND
w_SX_LAF.ART_IDE = w_SX_LAF_next.ART_IDE AND
w_SX_LAF.TIE_ID = w_SX_LAF_next.TIE_ID AND
w_SX_LAF.SX_LAF_DEB < w_SX_LAF_next.SX_LAF_DEB
GROUP BY 1,2,3,4
) subview
WHERE w_SX_LAF.DOS_IDE = subview.DOS_IDE AND
w_SX_LAF.ART_IDE = subview.ART_IDE AND
w_SX_LAF.TIE_ID = subview.TIE_ID AND
w_SX_LAF.SX_LAF_DEB = subview.SX_LAF_DEB;
UPDATE w_SX_LAF
SET SX_LAF_DEB = '00010101'
FROM
(
SELECT
DOS_IDE,
ART_IDE,
TIE_ID,
MIN(SX_LAF_DEB) AS SX_LAF_DEB
FROM w_SX_LAF
GROUP BY 1,2,3
)subview
WHERE w_SX_LAF.DOS_IDE = subview.DOS_IDE AND
w_SX_LAF.ART_IDE = subview.ART_IDE AND
w_SX_LAF.TIE_ID = subview.TIE_ID AND
w_SX_LAF.SX_LAF_DEB = subview.SX_LAF_DEB;
UPDATE w_SX_LAF
SET SX_LAF_PUN = subview.SX_LAF_PUN
FROM
(
SELECT SX_FCD.DOS_IDE, SX_FCD.ART_IDE, SX_FCE.TIE_ID, SX_LAF_DEB,
(MAX(Array[date(SX_FCE_DAT)::text, (base.cti_division(SX_FCD_MNT::numeric,SX_FCD_QTE::numeric*GREATEST(SX_FCD_CON,1)::numeric))::text]))[2]::numeric AS SX_LAF_PUN
from prod_cegi.SX_FCD
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
JOIN w_SX_LAF ON
w_SX_LAF.DOS_IDE = SX_FCD.DOS_IDE AND
w_SX_LAF.ART_IDE = SX_FCD.ART_IDE AND
w_SX_LAF.TIE_ID = SX_FCE.TIE_ID AND
date(SX_FCE_DAT) BETWEEN SX_LAF_DEB AND SX_LAF_FIN
WHERE SX_LAF_PUN = 0 AND SX_FCD_MNT <> 0
GROUP BY 1,2,3,4
ORDER BY 1,2,3,4
) subview
WHERE w_SX_LAF.DOS_IDE = subview.DOS_IDE AND
w_SX_LAF.ART_IDE = subview.ART_IDE AND
w_SX_LAF.TIE_ID = subview.TIE_ID AND
w_SX_LAF.SX_LAF_DEB = subview.SX_LAF_DEB;
INSERT INTO w_SX_LAF
(
DOS_IDE,
ART_IDE,
TIE_ID,
SX_LAF_DEB,
SX_LAF_FIN,
SX_LAF_PUN,
TVA_CODE
)
SELECT SX_FCD.DOS_IDE,
SX_FCD.ART_IDE,
SX_FCE.TIE_ID,
'00010101'::date AS SX_LAF_DEB,
'20991231'::date AS SX_LAF_FIN,
(MAX(Array[date(SX_FCE_DAT)::text, (base.cti_division(SX_FCD_MNT::numeric,SX_FCD_QTE::numeric*GREATEST(SX_FCD_CON,1)::numeric))::text]))[2]::numeric AS SX_LAF_PUN,
SX_FCD.TVA_CODE
FROM prod_cegi.SX_FCD
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
JOIN prod_cegi.SXDOSSIER ON SXDOSSIER.DOS_IDE = SX_FCE.DOS_IDE
AND (SXDOSSIER.ETAB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
LEFT JOIN w_SX_LAF ON
w_SX_LAF.DOS_IDE = SX_FCD.DOS_IDE AND
w_SX_LAF.ART_IDE = SX_FCD.ART_IDE AND
w_SX_LAF.TIE_ID = SX_FCE.TIE_ID
WHERE SX_FCD_MNT <> 0 AND w_SX_LAF.ART_IDE IS NULL
GROUP BY 1,2,3,4,7
ORDER BY 1,2,3,4;
INSERT INTO w_SX_LAF
(
DOS_IDE,
ART_IDE,
TIE_ID,
SX_LAF_DEB,
SX_LAF_FIN,
SX_LAF_PUN,
TVA_CODE
)
SELECT SXMOUVEMENT.DOS_IDE,
SXMOUVEMENT.ART_IDE,
SXMOUVEMENT.TIE_ID,
'00010101'::date AS SX_LAF_DEB,
'20991231'::date AS SX_LAF_FIN,
0::numeric AS SX_LAF_PUN,
SXART_GEN.TVA_CODE
FROM prod_cegi.SXMOUVEMENT
JOIN prod_cegi.SXARTICLE ON SXARTICLE.ART_IDE = SXMOUVEMENT.ART_IDE AND
SXARTICLE.DOS_IDE = SXMOUVEMENT.DOS_IDE
JOIN prod_cegi.SXART_GEN ON SXART_GEN.ART_GEN_IDE = SXARTICLE.ART_GEN_IDE AND
SXART_GEN.DOS_IDE = SXARTICLE.DOS_IDE
LEFT JOIN w_SX_LAF ON
w_SX_LAF.DOS_IDE = SXMOUVEMENT.DOS_IDE AND
w_SX_LAF.ART_IDE = SXMOUVEMENT.ART_IDE AND
w_SX_LAF.TIE_ID = SXMOUVEMENT.TIE_ID
WHERE SXMOUVEMENT.TIE_ID <> 0 AND
SXMOUVEMENT.ART_IDE <> 0 AND
w_SX_LAF.ART_IDE IS NULL AND
MVT_STO IN (SELECT NVE_ID FROM prod_cegi.CJ_NVE WHERE ETB_ID::text = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
GROUP BY 1,2,3,4,7
ORDER BY 1,2,3,4;
UPDATE w_SX_LAF
SET SX_LAF_PUN = subview.SX_LAF_PUN
FROM
(
SELECT SX_FCD.DOS_IDE, SX_FCD.ART_IDE, w_SX_LAF.TIE_ID, SX_LAF_DEB,
(MAX(Array[date(SX_FCE_DAT)::text, (base.cti_division(SX_FCD_MNT::numeric,SX_FCD_QTE::numeric*GREATEST(SX_FCD_CON,1)::numeric))::text]))[2]::numeric AS SX_LAF_PUN
FROM prod_cegi.SX_FCD
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
JOIN w_SX_LAF ON
w_SX_LAF.DOS_IDE = SX_FCD.DOS_IDE AND
w_SX_LAF.ART_IDE = SX_FCD.ART_IDE AND
date(SX_FCE_DAT) BETWEEN SX_LAF_DEB AND SX_LAF_FIN
WHERE SX_LAF_PUN = 0 AND SX_FCD_MNT <> 0
GROUP BY 1,2,3,4
ORDER BY 1,2,3,4
) subview
WHERE w_SX_LAF.DOS_IDE = subview.DOS_IDE AND
w_SX_LAF.ART_IDE = subview.ART_IDE AND
w_SX_LAF.TIE_ID = subview.TIE_ID AND
w_SX_LAF.SX_LAF_DEB = subview.SX_LAF_DEB AND
w_SX_LAF.SX_LAF_PUN = 0;
DROP TABLE IF EXISTS w_SXMOUVEMENT;
CREATE TEMP TABLE w_SXMOUVEMENT AS
SELECT
DOS_IDE,
MVT_IDE,
DOS_IDE::text||'-'::text||MVT_IDE::text AS MVT_IDE_CTI,
date(MVT_DAT) AS MVT_DAT,
MVT_CAT,
ART_IDE,
DOS_IDE::text||'-'::text||ART_IDE::text AS ART_IDE_CTI,
TIE_ID,
MVT_TII,
MVT_STO,
MVT_UTI,
CASE
WHEN t_divers.valeur = 'DOS' THEN SXMOUVEMENT.DOS_IDE::text
ELSE MVT_UTI::text END AS gestionnaire_code_original,
MVT_ENT,
MVT_QTE,
MVT_MNT,
0::numeric AS MVT_MNT_HT,
0::numeric AS MVT_MNT_TTC,
MVT_QTI AS MVT_STO_DEB,
0 AS MVT_STO_FIN,
MVT_TY1,
MVT_TY2,
MVT_TY3,
MVT_CAT::text || MVT_TY1 || MVT_TY2 || MVT_TY3 AS MVT_TYP,
MVT_LIB::text,
MVT_NOM,
MVT_NOM_TYP,
LOT_IDE,
'0'::text AS MVT_FCD,
'0'::text AS MVT_LVD,
''::text AS no_sejour,
''::text AS no_patient,
0::bigint As commande_id,
0::numeric AS ligne_commande,
''::text AS livraison_code_original
FROM prod_cegi.SXMOUVEMENT
JOIN eco.t_divers ON t_divers.code = 'CEGI_GEST_SRC'
WHERE (MVT_QTE <> 0 OR MVT_MNT <> 0)-- AND MVT_ENT <> 0
AND MVT_STO IN (SELECT NVE_ID FROM prod_cegi.CJ_NVE WHERE ETB_ID = ANY (string_to_array('[ETAB_ID]'::text,',')) OR '[ETAB_ID]' = '' OR '[ETAB_ID]' = '-1')
-- todo: enlever les mouevemnts de facture et mettre à jour les quantités avec les quantiré
ORDER BY MVT_DAT, MVT_IDE
;
ANALYSE w_SXMOUVEMENT
;
CREATE INDEX w_SXMOUVEMENT_MVT_IDE ON w_SXMOUVEMENT USING btree (MVT_IDE)
;
-- Recherche séjour selon type de lien vers séjour
UPDATE w_SXMOUVEMENT
SET no_sejour = SEJ_NUMDOS, no_patient = COALESCE(p_sejours.no_patient,'')
FROM prod_cegi.CJ_SEJOUR
LEFT JOIN activite.p_sejours ON SEJ_NUMDOS = no_sejour
WHERE MVT_NOM_TYP = 2 AND
MVT_NOM = SEJ_ID
;
-- Recherche séjour dans libellé
UPDATE w_SXMOUVEMENT
SET no_sejour = SEJ_NUMDOS, no_patient = COALESCE(p_sejours.no_patient,'')
FROM prod_cegi.CJ_SEJOUR
LEFT JOIN activite.p_sejours ON SEJ_NUMDOS = no_sejour
WHERE split_part(MVT_LIB,' ',2) = SEJ_NUMDOS
;
DROP TABLE IF EXISTS w_SX_FCD_montant;
CREATE TEMP TABLE w_SX_FCD_montant AS
SELECT SX_FCD.DOS_IDE, SX_FCD.MVT_IDE,
SUM(SX_FCD_QTE * CASE WHEN SX_FCD_UNI = 0 THEN SX_FCD_CON ELSE 1 END) AS SX_FCD_QTE,
SUM(SX_FCD_MNT) AS SX_FCD_MNT_HT,
SUM(COALESCE(SX_FCD_MNT,0)) + round(SUM(COALESCE(SX_FCD_MNT * TVV_TAUX / 100.00,0))::numeric,2) AS SX_FCD_MNT_TTC
FROM prod_cegi.SX_FCD
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
LEFT JOIN prod_cegi.CMVALEURTVA ON SX_FCD.TVA_CODE = CMVALEURTVA.TVA_CODE AND
SX_FCE.SX_FCE_DAT BETWEEN TVV_DATDEB AND COALESCE(TVV_DATFIN,'20991231')
WHERE SX_FCD_QTE <> 0
GROUP BY 1,2;
DROP TABLE IF EXISTS w_SX_FCD_MVT;
CREATE TEMP TABLE w_SX_FCD_MVT AS
SELECT
SX_FCD.DOS_IDE,
SX_FCD.MVT_IDE,
SX_LVD.MVT_IDE AS MVT_IDE_LVD
FROM prod_cegi.SX_FCD
JOIN prod_cegi.SX_FCE ON SX_FCD.DOS_IDE = SX_FCE.DOS_IDE AND SX_FCD.SX_FCE_IDE = SX_FCE.SX_FCE_IDE AND SX_FCE_SUPP = 0
JOIN prod_cegi.SX_LVD ON SX_FCD.DOS_IDE = SX_LVD.DOS_IDE AND SX_FCD.SX_CDD_IDE = SX_LVD.SX_CDD_IDE AND SX_LVD_SUPP = 0
WHERE SX_FCD.MVT_IDE <> SX_LVD.MVT_IDE AND SX_FCD.SX_CDD_IDE <> 0
GROUP BY 1,2,3;
INSERT INTO w_SX_FCD_montant (
DOS_IDE,
MVT_IDE,
SX_FCD_QTE,
SX_FCD_MNT_HT,
SX_FCD_MNT_TTC
)
SELECT
w_SX_FCD_montant.DOS_IDE,
w_SX_FCD_MVT.MVT_IDE_LVD,
w_SX_FCD_montant.SX_FCD_QTE,
w_SX_FCD_montant.SX_FCD_MNT_HT,
w_SX_FCD_montant.SX_FCD_MNT_TTC
FROM w_SX_FCD_montant
JOIN w_SX_FCD_MVT ON
w_SX_FCD_montant.DOS_IDE = w_SX_FCD_MVT.DOS_IDE AND w_SX_FCD_montant.MVT_IDE = w_SX_FCD_MVT.MVT_IDE
LEFT JOIN w_SX_FCD_montant w_SX_FCD_montant_deja ON
w_SX_FCD_MVT.DOS_IDE = w_SX_FCD_montant_deja.DOS_IDE AND w_SX_FCD_MVT.MVT_IDE_LVD = w_SX_FCD_montant_deja.MVT_IDE
WHERE w_SX_FCD_montant_deja.DOS_IDE IS NULL;
DROP TABLE IF EXISTS w_SX_LVD_montant;
CREATE TEMP TABLE w_SX_LVD_montant AS
SELECT SX_LVD.DOS_IDE, SX_LVD.MVT_IDE,
SUM(SX_LVD_QTE * CASE WHEN SX_LVD_UNI = 0 THEN SX_LVD_CON ELSE 1 END) AS SX_LVD_QTE,
round(SUM(SX_LVD_PUN * SX_LVD_QTE)::numeric,2) AS SX_LVD_MNT_HT,
round(SUM(SX_LVD_PUN * SX_LVD_QTE)::numeric,2) + round(SUM(COALESCE((SX_LVD_PUN * SX_LVD_QTE)::numeric * TVV_TAUX / 100.00,0))::numeric,2) AS SX_LVD_MNT_TTC
FROM prod_cegi.SX_LVD
LEFT JOIN prod_cegi.SX_LVE ON SX_LVD.DOS_IDE = SX_LVE.DOS_IDE AND SX_LVD.SX_LVE_IDE = SX_LVE.SX_LVE_IDE AND SX_LVE_SUPP = 0
LEFT JOIN prod_cegi.CMVALEURTVA ON SX_LVD.TVA_CODE = CMVALEURTVA.TVA_CODE AND
SX_LVE.SX_LVE_DAT BETWEEN TVV_DATDEB AND COALESCE(TVV_DATFIN,'20991231')
WHERE SX_LVD_PUN <> 0
GROUP BY 1,2;
ANALYSE w_SX_LVD_montant
;
DROP TABLE IF EXISTS w_SX_LVD_code_original;
CREATE TEMP TABLE w_SX_LVD_code_original AS
SELECT SX_LVD.DOS_IDE, SX_LVD.MVT_IDE,
SX_LVD.DOS_IDE::text || '-' || (MAX(ARRAY[SX_CDD_IDE,SX_LVD_IDE]))[2]::text AS livraison_code_original
FROM prod_cegi.SX_LVD
WHERE MVT_IDE <> 0
GROUP BY 1,2;
ANALYSE w_SX_LVD_code_original
;
UPDATE w_SXMOUVEMENT SET
MVT_FCD = '1',
MVT_MNT_HT = SX_FCD_MNT_HT,
MVT_MNT_TTC = SX_FCD_MNT_TTC
FROM w_SX_FCD_montant
WHERE w_SXMOUVEMENT.DOS_IDE = w_SX_FCD_montant.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SX_FCD_montant.MVT_IDE AND
SX_FCD_QTE = w_SXMOUVEMENT.MVT_QTE;
UPDATE w_SXMOUVEMENT SET
MVT_FCD = '1',
MVT_MNT_HT = round((SX_FCD_MNT_HT / SX_FCD_QTE * w_SXMOUVEMENT.MVT_QTE)::numeric,2),
MVT_MNT_TTC = round((SX_FCD_MNT_TTC / SX_FCD_QTE * w_SXMOUVEMENT.MVT_QTE)::numeric,2)
FROM w_SX_FCD_montant
WHERE w_SXMOUVEMENT.DOS_IDE = w_SX_FCD_montant.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SX_FCD_montant.MVT_IDE AND
SX_FCD_QTE <> w_SXMOUVEMENT.MVT_QTE AND
SX_FCD_QTE <> 0 AND
w_SXMOUVEMENT.MVT_FCD <> '1';
UPDATE w_SXMOUVEMENT SET
MVT_LVD = '1',
MVT_MNT_HT = SX_LVD_MNT_HT,
MVT_MNT_TTC = SX_LVD_MNT_TTC
FROM w_SX_LVD_montant
WHERE w_SXMOUVEMENT.DOS_IDE = w_SX_LVD_montant.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SX_LVD_montant.MVT_IDE AND
SX_LVD_QTE = w_SXMOUVEMENT.MVT_QTE AND
w_SXMOUVEMENT.MVT_FCD <> '1' AND
MVT_MNT_HT = 0;
UPDATE w_SXMOUVEMENT SET
MVT_LVD = '1',
MVT_MNT_HT = round((SX_LVD_MNT_HT / SX_LVD_QTE * w_SXMOUVEMENT.MVT_QTE)::numeric,2),
MVT_MNT_TTC = round((SX_LVD_MNT_TTC / SX_LVD_QTE * w_SXMOUVEMENT.MVT_QTE)::numeric,2)
FROM w_SX_LVD_montant
WHERE w_SXMOUVEMENT.DOS_IDE = w_SX_LVD_montant.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SX_LVD_montant.MVT_IDE AND
SX_LVD_QTE <> w_SXMOUVEMENT.MVT_QTE AND
SX_LVD_QTE <> 0 AND
w_SXMOUVEMENT.MVT_FCD <> '1' AND
w_SXMOUVEMENT.MVT_LVD <> '1' AND
w_SXMOUVEMENT.MVT_QTE <> 0;
UPDATE w_SXMOUVEMENT SET
livraison_code_original = w_SX_LVD_code_original.livraison_code_original
FROM w_SX_LVD_code_original
WHERE w_SXMOUVEMENT.DOS_IDE = w_SX_LVD_code_original.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SX_LVD_code_original.MVT_IDE
;
DROP TABLE IF EXISTS w_SXMOUVEMENT_montant;
CREATE TEMP TABLE w_SXMOUVEMENT_montant AS
SELECT w_SXMOUVEMENT.DOS_IDE,
w_SXMOUVEMENT.MVT_IDE,
w_SXMOUVEMENT.ART_IDE,
w_SXMOUVEMENT.MVT_DAT,
round((SX_LAF_PUN * MVT_QTE)::numeric,2) AS MVT_MNT_HT,
round((SX_LAF_PUN * MVT_QTE)::numeric,2) + round(COALESCE((SX_LAF_PUN * MVT_QTE)::numeric * TVV_TAUX / 100.00,0)::numeric,2) AS MVT_MNT_TTC
FROM w_SXMOUVEMENT
JOIN w_SX_LAF ON
w_SXMOUVEMENT.DOS_IDE = w_SX_LAF.DOS_IDE AND
w_SXMOUVEMENT.ART_IDE = w_SX_LAF.ART_IDE AND
w_SXMOUVEMENT.TIE_ID = w_SX_LAF.TIE_ID AND
date(w_SXMOUVEMENT.MVT_DAT) BETWEEN w_SX_LAF.SX_LAF_DEB AND w_SX_LAF.SX_LAF_FIN
LEFT JOIN prod_cegi.CMVALEURTVA ON w_SX_LAF.TVA_CODE = CMVALEURTVA.TVA_CODE AND
w_SXMOUVEMENT.MVT_DAT BETWEEN TVV_DATDEB AND COALESCE(TVV_DATFIN,'20991231')
WHERE MVT_CAT = 1 AND
SX_LAF_PUN <> 0 AND
w_SXMOUVEMENT.MVT_FCD <> '1' AND
MVT_MNT_HT = 0 AND
w_SXMOUVEMENT.MVT_QTE <> 0;
-- montant des entrées
UPDATE w_SXMOUVEMENT SET
MVT_MNT_HT = w_SXMOUVEMENT_montant.MVT_MNT_HT,
MVT_MNT_TTC = w_SXMOUVEMENT_montant.MVT_MNT_TTC
FROM w_SXMOUVEMENT_montant
WHERE w_SXMOUVEMENT.DOS_IDE = w_SXMOUVEMENT_montant.DOS_IDE AND
w_SXMOUVEMENT.MVT_IDE = w_SXMOUVEMENT_montant.MVT_IDE
;
-- montant à partir du prix calculé et de la dernière TVA connue
DROP TABLE IF EXISTS w_SXMOUVEMENT_tva;
CREATE TEMP TABLE w_SXMOUVEMENT_tva AS
SELECT w_SXMOUVEMENT.DOS_IDE,
w_SXMOUVEMENT.MVT_IDE,
w_SXMOUVEMENT.ART_IDE,
w_SXMOUVEMENT.MVT_DAT,
base.cti_division(MVT_MNT_TTC, MVT_MNT_HT) AS TX_TVA_INV,
COALESCE(lead(MVT_IDE,1) OVER (PARTITION BY w_SXMOUVEMENT.DOS_IDE, w_SXMOUVEMENT.ART_IDE ORDER BY MVT_DAT,MVT_IDE),9999999999999) AS next_mvt
FROM w_SXMOUVEMENT
WHERE
MVT_MNT_HT != 0
;
UPDATE w_SXMOUVEMENT SET
MVT_MNT_HT = base.cti_division(MVT_MNT::numeric,TX_TVA_INV),
MVT_MNT_TTC = MVT_MNT
FROM w_SXMOUVEMENT_tva
WHERE w_SXMOUVEMENT.DOS_IDE = w_SXMOUVEMENT_tva.DOS_IDE AND
w_SXMOUVEMENT.ART_IDE = w_SXMOUVEMENT_tva.ART_IDE AND
w_SXMOUVEMENT.MVT_IDE BETWEEN w_SXMOUVEMENT_tva.MVT_IDE AND next_mvt AND
MVT_MNT_HT = 0
;
-- montant des sorties à partir du prix calculé et de la première TVA connue
UPDATE w_SXMOUVEMENT SET
MVT_MNT_HT = base.cti_division(MVT_MNT::numeric, TX_TVA_INV),
MVT_MNT_TTC = MVT_MNT
FROM
(SELECT
DOS_IDE,
ART_IDE,
min(MVT_IDE) AS MVT_IDE,
(MIN(ARRAY[MVT_IDE,TX_TVA_INV]))[2] AS TX_TVA_INV
FROM w_SXMOUVEMENT_tva
GROUP BY 1,2) w_SXMOUVEMENT_tva
WHERE w_SXMOUVEMENT.DOS_IDE = w_SXMOUVEMENT_tva.DOS_IDE AND
w_SXMOUVEMENT.ART_IDE = w_SXMOUVEMENT_tva.ART_IDE AND
w_SXMOUVEMENT.MVT_IDE < w_SXMOUVEMENT_tva.MVT_IDE AND
MVT_MNT_HT = 0
;
-- montant des sorties à partir du prix calculé et de la première TVA connue
UPDATE w_SXMOUVEMENT SET
MVT_MNT_HT = base.cti_division(MVT_MNT::numeric, (100.0+taux_tva_en_cours)/100.0),
MVT_MNT_TTC = MVT_MNT
FROM
eco.t_articles
WHERE w_SXMOUVEMENT.DOS_IDE || '-' || ART_IDE = code_original AND
MVT_MNT_HT = 0 AND
MVT_MNT != 0 AND
taux_tva_en_cours != 0
;
-- autres cas (?)
UPDATE w_SXMOUVEMENT SET
MVT_MNT_TTC = MVT_MNT
WHERE MVT_MNT_HT = 0 AND MVT_MNT != 0
;
]]></sqlcmd>
</NODE>
<NODE label="Commandes">
<sqlcmd><![CDATA[
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,
fournisseur_distributeur_id,
gestionnaire_id,
site_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
SX_CDE_IDE_CTI,
SX_CDE_NUM::text AS numero,
SX_CDE_DAT AS date_commande,
date_trunc('month',SX_CDE_DAT) + interval '1 month' - interval '1 day' AS date_engagement,
SX_CDE_COM AS objet,
SX_CDE_REF AS reference,
'20991231'::date AS date_livraison_prevue,
CASE WHEN SX_CDE_LIV = 1 THEN 'T' ELSE 'N' END AS etat_reception,
'20991231'::date AS date_reception,
CASE WHEN SX_CDE_LIV = 1 THEN 'T' ELSE 'N' END AS etat_liquidation,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
COALESCE(t_fournisseurs.fournisseur_distributeur_id, 0) AS fournisseur_distributeur_id,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_sites.oid,0),
0 AS lieu_commande_id,
0 AS lieu_facturation_id,
0 AS lieu_livraison_id,
0::bigint AS unite_fonctionnelle_id,
SX_CDE_MNT_HT AS montant_commande_ht,
0::numeric AS montant_commande_remise,
SX_CDE_MNT_TVA AS montant_commande_tva,
0::numeric AS montant_commande_port,
SX_CDE_MNT_TTC AS montant_commande_total,
SX_CDE_MNF_HT AS montant_liquidation_ht,
0::numeric AS montant_liquidation_remise,
SX_CDE_MNF_TVA AS montant_liquidation_tva,
0::numeric AS montant_liquidation_port,
SX_CDE_MNF_TTC AS montant_liquidation_total
FROM w_SX_CDE
LEFT JOIN eco.t_fournisseurs ON TIE_ID::text = t_fournisseurs.code_original
LEFT JOIN eco.t_gestionnaires ON w_SX_CDE.gestionnaire_code_original = t_gestionnaires.code_original
LEFT JOIN eco.t_sites ON w_SX_CDE.DOS_IDE = t_sites.code_original
;
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,
lpp_id,
ucd_id,
compte_id,
quantite_approvisionnement,
prix_unitaire_approvisionnement,
multiplicateur_stockage,
quantite_stockage,
prix_unitaire_stockage,
montant_commande_ht,
montant_commande_remise,
montant_commande_tva,
montant_commande_port,
montant_commande_ttc,
quantite_livraison_approvisionnement,
quantite_livraison_stockage,
montant_livraison_ht,
montant_livraison_ttc,
etat_livraison,
montant_liquidation_ht,
montant_liquidation_remise,
montant_liquidation_tva,
montant_liquidation_port,
montant_liquidation_ttc,
etat_liquidation,
taux_tva)
SELECT
SX_CDD_IDE_CTI AS code_original,
p_commandes.oid AS commande_id,
rank() OVER (PARTITION BY SX_CDE_IDE_CTI ORDER BY SX_CDD_IDE) AS ligne_commande,
''::text AS texte,
p_commandes.fournisseur_distributeur_id,
COALESCE(w_ARTICLE.article_id, 0) AS article_id,
COALESCE(t_unites.oid,w_ARTICLE.unite_id,0) AS unite_approvisionnement_id,
COALESCE(lpp_id,0) AS lpp_id,
COALESCE(ucd_id,0) AS ucd_id,
COALESCE(w_ARTICLE.compte_id, 0) AS compte_id,
SX_CDD_QTE AS quantite_approvisionnement,
SX_CDD_PHT AS prix_unitaire_approvisionnement,
1 AS multiplicateur_stockage,
SX_CDD_QTL AS quantite_stockage,
SX_CDD_PHT AS prix_unitaire_stockage,
SX_CDD_MNT_HT AS montant_commande_ht,
0 AS montant_commande_remise,
SX_CDD_MNT_TVA AS montant_commande_tva,
0 AS montant_commande_port,
SX_CDD_MNT_TTC AS montant_commande_ttc,
SX_CDD_QTL AS quantite_livraison_approvisionnement,
SX_CDD_QTL AS quantite_livraison_stockage,
SX_CDD_MNL_HT AS montant_livraison_ht,
SX_CDD_MNL_TTC AS montant_livraison_ttc,
CASE WHEN SX_CDD_QTL = SX_CDD_QTE THEN 'T' WHEN SX_CDD_QTL > SX_CDD_QTE THEN 'S' WHEN SX_CDD_QTl = 0 THEN 'N' ELSE 'P' END AS etat_livraison,
SX_CDD_MNF_HT AS montant_liquidation_ht,
0::numeric AS montant_liquidation_remise,
SX_CDD_MNF_TVA AS montant_liquidation_tva,
0::numeric AS montant_liquidation_port,
SX_CDD_MNF_TTC AS montant_liquidation_ttc,
CASE WHEN SX_CDD_SOL::text = 1 THEN 'T' ELSE 'N' END AS etat_liquidation,
TVV_TAUX
FROM w_SX_CDD
JOIN eco.p_commandes ON SX_CDE_IDE_CTI = p_commandes.code_original
LEFT JOIN w_ARTICLE ON w_SX_CDD.ART_IDE_CTI = w_ARTICLE.ART_IDE_CTI
LEFT JOIN eco.t_unites ON w_SX_CDD.FORME_IDE_CTI = t_unites.code_original AND t_unites.oid <> 0;
UPDATE eco.p_commandes
SET date_reception = date_liv
FROM
(
SELECT SX_CDE.DOS_IDE || '-' || SX_CDE.SX_CDE_IDE AS commande, MAX(SX_LVD.SX_LVD_CRE) as date_liv
FROM prod_cegi.SX_LVD
JOIN prod_cegi.SX_CDD ON SX_CDD.SX_CDD_IDE = SX_LVD.SX_CDD_IDE AND SX_CDD.DOS_IDE = SX_LVD.DOS_IDE
JOIN prod_cegi.SX_CDE ON SX_CDE.SX_CDE_IDE = SX_CDD.SX_CDE_IDE AND SX_CDD.DOS_IDE = SX_LVD.DOS_IDE
GROUP BY 1
) sub
WHERE commande = code_original
;
UPDATE eco.p_lignes_commandes
SET date_reception = date_liv
FROM
(SELECT
commande,
ligne,
max(date_liv) as date_liv
FROM
(
SELECT p_commandes.oid AS commande,
rank() OVER (PARTITION BY SX_CDE.DOS_IDE || '-' || SX_CDE.SX_CDE_IDE ORDER BY SX_CDD.SX_CDD_IDE) As ligne,
SX_LVD.SX_LVD_CRE as date_liv
FROM prod_cegi.SX_LVD
JOIN prod_cegi.SX_CDD ON SX_CDD.SX_CDD_IDE = SX_LVD.SX_CDD_IDE AND SX_CDD.DOS_IDE = SX_LVD.DOS_IDE
JOIN prod_cegi.SX_CDE ON SX_CDE.SX_CDE_IDE = SX_CDD.SX_CDE_IDE AND SX_CDD.DOS_IDE = SX_LVD.DOS_IDE
JOIN eco.p_commandes ON SX_CDE.DOS_IDE || '-' || SX_CDE.SX_CDE_IDE = code_original
) sub
GROUP BY 1,2
) sub_grouped
WHERE commande_id = commande AND ligne = ligne_commande
;
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');
]]></sqlcmd>
</NODE>
<NODE label="Mouvements">
<sqlcmd><![CDATA[
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');
-- DELETE FROM w_SXMOUVEMENT
-- USING
-- prod_cegi.SX_FCD
-- WHERE 1=1
-- AND SX_FCD.MVT_IDE = w_SXMOUVEMENT.MVT_IDE
-- AND SX_FCD.DOS_IDE = w_SXMOUVEMENT.DOS_IDE
-- AND SX_LVD_IDE = 0
-- ;
UPDATE w_SXMOUVEMENT
SET commande_id = sub.commande_id,
ligne_commande = sub.ligne_commande
FROM
(SELECT commande_id, ligne_commande, MVT_IDE, DOS_IDE
FROM prod_cegi.SX_FCD
JOIN eco.p_lignes_commandes ON DOS_IDE::text || '-' || SX_CDD_IDE::text = code_original) sub
WHERE sub.MVT_IDE = w_SXMOUVEMENT.MVT_IDE AND
sub.DOS_IDE = w_SXMOUVEMENT.DOS_IDE
;
UPDATE w_SXMOUVEMENT
SET commande_id = sub.commande_id,
ligne_commande = sub.ligne_commande
FROM
(SELECT commande_id, ligne_commande, MVT_IDE, DOS_IDE
FROM prod_cegi.SX_LVD
JOIN eco.p_lignes_commandes ON DOS_IDE::text || '-' || SX_CDD_IDE::text = code_original) sub
WHERE sub.MVT_IDE = w_SXMOUVEMENT.MVT_IDE AND
sub.DOS_IDE = w_SXMOUVEMENT.DOS_IDE AND
w_SXMOUVEMENT.commande_id = 0
;
ANALYSE w_SXMOUVEMENT
;
-- Séjour en réappro dépot
UPDATE w_SXMOUVEMENT SET
no_sejour = subview.no_sejour,
no_patient = subview.no_patient
FROM
(
SELECT p_lignes_commandes.commande_id, p_lignes_commandes.ligne_commande, MAX(no_sejour) AS no_sejour, MAX(no_patient) AS no_patient
FROM prod_cegi.SX_PTH
JOIN prod_cegi.SX_CDD ON SX_PTH.DOS_IDE = SX_CDD.DOS_IDE AND SX_PTH.SX_CDD_IDE = SX_CDD.SX_CDD_IDE
JOIN prod_cegi.SX_CDE ON SX_CDD.DOS_IDE = SX_CDE.DOS_IDE AND SX_CDD.SX_CDE_IDE = SX_CDE.SX_CDE_IDE
JOIN eco.p_lignes_commandes ON (SX_CDD.DOS_IDE::text || '-' || SX_CDD.SX_CDD_IDE::text = code_original)
JOIN w_SXMOUVEMENT ON
SX_PTH.MVT_IDE = w_SXMOUVEMENT.MVT_IDE AND
sx_PTH.DOS_IDE = w_SXMOUVEMENT.DOS_IDE
WHERE w_SXMOUVEMENT.no_sejour <> ''
GROUP BY 1,2
HAVING count(*) = 1
) subview
WHERE w_SXMOUVEMENT.commande_id = subview.commande_id AND
w_SXMOUVEMENT.ligne_commande = subview.ligne_commande
;
UPDATE w_SXMOUVEMENT
SET MVT_LIB = 'Commande ' || p_commandes.numero || ' - ' || MVT_LIB
FROM eco.p_commandes
WHERE commande_id = p_commandes.oid
;
-- Pour les dépots, créer un mouvement fictif qui relie à la commande
DROP TABLE IF EXISTS w_SXMOUVEMENT_NOM1;
CREATE TEMP TABLE w_SXMOUVEMENT_NOM1 AS
SELECT MVT_NOM, MAX(no_sejour) AS no_sejour, max(no_patient) AS no_patient
FROM w_SXMOUVEMENT
WHERE MVT_NOM_TYP = '1'
GROUP BY 1;
ANALYSE w_SXMOUVEMENT_NOM1
;
DROP TABLE IF EXISTS w_SX_CDD_depot;
CREATE TEMP TABLE w_SX_CDD_depot AS
SELECT SX_CDD.*,
date(SX_CDE_DAT) AS SX_CDE_DAT,
SX_CDE_NOM,
SX_CDE_NUM,
TIE_ID,
COALESCE(no_sejour,''::text) AS no_sejour,
COALESCE(no_patient,''::text) AS no_patient,
p_lignes_commandes.commande_id,
p_lignes_commandes.ligne_commande,
montant_commande_ht,
montant_commande_ttc,
montant_commande_tva,
0::numeric AS MVT_ENT_IDE,
''::text AS MVT_LIB
FROM prod_cegi.SX_CDD
JOIN prod_cegi.SX_CDE ON
SX_CDD.DOS_IDE = SX_CDE.DOS_IDE AND
SX_CDD.SX_CDE_IDE = SX_CDE.SX_CDE_IDE
JOIN prod_cegi.SXARTICLE ON
SX_CDD.DOS_IDE = SXARTICLE.DOS_IDE AND
SX_CDD.ART_IDE = SXARTICLE.ART_IDE
JOIN eco.p_lignes_commandes ON p_lignes_commandes.code_original = (SX_CDD.DOS_IDE::text||'-'||SX_CDD.SX_CDD_IDE)
LEFT JOIN w_SXMOUVEMENT_NOM1 ON SX_CDE_NOM = MVT_NOM
JOIN prod_cegi.SXART_GEN ON
SXARTICLE.DOS_IDE = SXART_GEN.DOS_IDE AND
SXARTICLE.ART_GEN_IDE = SXART_GEN.ART_GEN_IDE
WHERE SX_CDD_SUPP = 0 AND
SX_CDE_NOM <> 0 AND
SX_CDE_LIV <> 0 AND
SX_CDD.SX_CDD_SUPP = 0 AND
(SX_CDD_OND = 'D' OR SX_CDD_OND IS NULL) AND
SXART_GEN.ART_GEN_STO = 'D'
;
ANALYSE w_SX_CDD_depot
;
UPDATE w_SX_CDD_depot
SET SX_CDD_QTL = SX_CDD_QTE
FROM
(
SELECT DOS_IDE, SX_CDE_IDE
FROM w_SX_CDD_depot
GROUP BY 1,2
HAVING SUM(SX_CDD_QTL) = 0
) subview
WHERE w_SX_CDD_depot.DOS_IDE = subview.DOS_IDE AND
w_SX_CDD_depot.SX_CDE_IDE = subview.SX_CDE_IDE
;
-- Si le mouvement d'entrée est déjà là, il ne faudra rien faire
UPDATE w_SX_CDD_depot
SET MVT_ENT_IDE = w_SXMOUVEMENT.MVT_IDE,
MVT_LIB = w_SXMOUVEMENT.MVT_LIB
FROM w_SXMOUVEMENT
WHERE w_SXMOUVEMENT.commande_id = w_SX_CDD_depot.commande_id AND
w_SXMOUVEMENT.ligne_commande = w_SX_CDD_depot.ligne_commande AND
w_SXMOUVEMENT.MVT_ENT = 1
;
UPDATE w_SXMOUVEMENT SET
no_sejour = w_SX_CDD_depot.no_sejour,
no_patient = w_SX_CDD_depot.no_patient
FROM w_SX_CDD_depot
WHERE w_SX_CDD_depot.MVT_ENT_IDE = MVT_ENT and
w_SXMOUVEMENT.no_sejour = ''
;
-- Lieu par défaut par article
DROP TABLE IF EXISTS w_SXMOUVEMENT_STO;
CREATE TEMP TABLE w_SXMOUVEMENT_STO AS
SELECT DOS_IDE, ART_IDE, (MAX(ARRAY[nb, MVT_STO]))[2] AS MVT_STO_dft
FROM
(
SELECT DOS_IDE, ART_IDE, MVT_STO, count(*) AS nb
FROM w_SXMOUVEMENT
WHERE DOS_IDE::text || '-' || ART_IDE IN (SELECT DOS_IDE::text || '-' || ART_IDE FROM w_SX_CDD_depot)
GROUP BY 1,2,3
) subview
GROUP BY 1,2
;
-- Ajout des entrées avec commande et ligne
INSERT INTO w_SXMOUVEMENT (
DOS_IDE,
MVT_IDE,
MVT_IDE_CTI,
MVT_DAT,
MVT_CAT,
ART_IDE,
ART_IDE_CTI,
TIE_ID,
MVT_TII,
MVT_STO,
MVT_UTI,
MVT_ENT,
MVT_QTE,
MVT_MNT,
MVT_MNT_HT,
MVT_MNT_TTC,
MVT_STO_DEB,
MVT_STO_FIN,
MVT_TY1,
MVT_TY2,
MVT_TY3,
MVT_TYP,
MVT_LIB,
MVT_NOM,
MVT_NOM_TYP,
LOT_IDE,
MVT_FCD,
MVT_LVD,
no_sejour,
no_patient,
commande_id,
ligne_commande
)
SELECT
w_SX_CDD_depot.DOS_IDE,
SX_CDD_IDE AS MVT_IDE,
w_SX_CDD_depot.DOS_IDE::text || '-CDD' || SX_CDD_IDE || 'E' AS MVT_IDE_CTI,
SX_CDE_DAT AS MVT_DAT,
1::numeric AS MVT_CAT,
w_SX_CDD_depot.ART_IDE,
w_SX_CDD_depot.DOS_IDE::text||'-'::text||w_SX_CDD_depot.ART_IDE::text AS ART_IDE_CTI,
TIE_ID,
0::numeric AS MVT_TII,
COALESCE(MVT_STO_dft,0) AS MVT_STO,
SX_CDD_UTI AS MVT_UTI,
1::numeric AS MVT_ENT,
SX_CDD_QTL AS MVT_QTE,
base.cti_division(montant_commande_ht,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT,
base.cti_division(montant_commande_ht,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT_HT,
base.cti_division(montant_commande_ttc,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT_TTC,
0::numeric AS MVT_STO_DEB,
0::numeric AS MVT_STO_FIN,
'L'::text AS MVT_TY1,
'F'::text AS MVT_TY2,
'S'::text AS MVT_TY3,
'1LFS'::text AS MVT_TYP,
'Commande reappro '||SX_CDE_NUM AS MVT_LIB,
SX_CDE_NOM AS MVT_NOM,
1::numeric AS MVT_NOM_TYP,
0::numeric AS LOT_IDE,
0::numeric AS MVT_FCD,
0::numeric AS MVT_LVD,
no_sejour,
no_patient,
commande_id,
ligne_commande
FROM w_SX_CDD_depot
LEFT JOIN w_SXMOUVEMENT_STO ON
w_SX_CDD_depot.DOS_IDE = w_SXMOUVEMENT_STO.DOS_IDE AND
w_SX_CDD_depot.ART_IDE = w_SXMOUVEMENT_STO.ART_IDE
WHERE MVT_ENT_IDE = 0 AND
SX_CDD_QTL <> 0
;
-- Annulation des entrées sans commande et ligne
INSERT INTO w_SXMOUVEMENT (
DOS_IDE,
MVT_IDE,
MVT_IDE_CTI,
MVT_DAT,
MVT_CAT,
ART_IDE,
ART_IDE_CTI,
TIE_ID,
MVT_TII,
MVT_STO,
MVT_UTI,
MVT_ENT,
MVT_QTE,
MVT_MNT,
MVT_MNT_HT,
MVT_MNT_TTC,
MVT_STO_DEB,
MVT_STO_FIN,
MVT_TY1,
MVT_TY2,
MVT_TY3,
MVT_TYP,
MVT_LIB,
MVT_NOM,
MVT_NOM_TYP,
LOT_IDE,
MVT_FCD,
MVT_LVD,
no_sejour,
no_patient,
commande_id,
ligne_commande
)
SELECT
w_SX_CDD_depot.DOS_IDE,
SX_CDD_IDE AS MVT_IDE,
w_SX_CDD_depot.DOS_IDE::text || '-CDD' || SX_CDD_IDE || 'A' AS MVT_IDE_CTI,
SX_CDE_DAT AS MVT_DAT,
1::numeric AS MVT_CAT,
w_SX_CDD_depot.ART_IDE,
w_SX_CDD_depot.DOS_IDE::text||'-'::text||w_SX_CDD_depot.ART_IDE::text AS ART_IDE_CTI,
TIE_ID,
0::numeric AS MVT_TII,
COALESCE(MVT_STO_dft,0) AS MVT_STO,
SX_CDD_UTI AS MVT_UTI,
1::numeric AS MVT_ENT,
0-SX_CDD_QTL AS MVT_QTE,
0-base.cti_division(montant_commande_ht,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT,
0-base.cti_division(montant_commande_ht,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT_HT,
0-base.cti_division(montant_commande_ttc,SX_CDD_QTE::numeric)*SX_CDD_QTL AS MVT_MNT_TTC,
0::numeric AS MVT_STO_DEB,
0::numeric AS MVT_STO_FIN,
'L'::text AS MVT_TY1,
'F'::text AS MVT_TY2,
'S'::text AS MVT_TY3,
'1LFS'::text AS MVT_TYP,
'Commande reappro '||SX_CDE_NUM::text || ' (contrepasse)' AS MVT_LIB,
SX_CDE_NOM AS MVT_NOM,
1::numeric AS MVT_NOM_TYP,
0::numeric AS LOT_IDE,
0::numeric AS MVT_FCD,
0::numeric AS MVT_LVD,
no_sejour,
no_patient,
0::bigint AS commande_id,
0::numeric AS ligne_commande
FROM w_SX_CDD_depot
LEFT JOIN w_SXMOUVEMENT_STO ON
w_SX_CDD_depot.DOS_IDE = w_SXMOUVEMENT_STO.DOS_IDE AND
w_SX_CDD_depot.ART_IDE = w_SXMOUVEMENT_STO.ART_IDE
WHERE MVT_ENT_IDE = 0 AND
SX_CDD_QTL <> 0
;
TRUNCATE eco.p_mouvements_articles;
INSERT INTO eco.p_mouvements_articles(
code_original,
date,
sens_mouvement,
type_mouvement_id,
texte,
gestionnaire_id,
site_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,
prix_unitaire_calcule,
stock_quantite_debut,
stock_quantite_fin,
date_fin,
est_premier_jour,
est_dernier_jour,
no_sejour,
no_patient,
livraison_code_original
)
SELECT
MVT_IDE_CTI AS code_original,
MVT_DAT AS date,
CASE WHEN MVT_ENT = 1 THEN 'E' ELSE 'S' END AS sens_mouvement,
COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id,
MVT_LIB AS texte,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_sites.oid,0) AS site_id,
COALESCE(t_lieux.oid,0) AS lieu_id,
COALESCE(t_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,
commande_id,
ligne_commande,
ucd_id,
lpp_id,
base.cti_division(MVT_MNT_HT::numeric , MVT_QTE::numeric) AS prix_unitaire,
CASE WHEN MVT_ENT = 1 THEN MVT_QTE ELSE 0 END AS entree_quantite,
CASE WHEN MVT_ENT <> 1 THEN MVT_QTE ELSE 0 END AS sortie_quantite,
CASE WHEN MVT_ENT = 1 THEN MVT_MNT_TTC ELSE 0 END AS entree_montant,
CASE WHEN MVT_ENT = 1 THEN MVT_MNT_HT ELSE 0 END AS entree_montant_ht,
CASE WHEN MVT_ENT <> 1 THEN MVT_MNT_TTC ELSE 0 END AS sortie_montant,
CASE WHEN MVT_ENT <> 1 THEN MVT_MNT_HT ELSE 0 END AS sortie_montant_ht,
CASE WHEN MVT_ENT <> 1 THEN MVT_MNT_TTC ELSE 0 END AS sortie_montant_original_ttc,
CASE WHEN MVT_ENT <> 1 THEN MVT_MNT_HT ELSE 0 END AS sortie_montant_original_ht,
--ajuster PU calc que sur entrées
CASE WHEN MVT_QTE = 0 AND MVT_MNT != 0 THEN LAG(base.cti_division(MVT_MNT_HT::numeric,MVT_QTE::numeric)) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE)
ELSE base.cti_division(MVT_MNT_HT::numeric,MVT_QTE::numeric) END
AS prix_unitaire_calcule,
CASE WHEN MVT_QTE = 0 AND MVT_MNT != 0 THEN LAG(MVT_STO_DEB) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE) +
LAG(MVT_ENT*MVT_QTE) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE) ELSE MVT_STO_DEB
END,
CASE WHEN MVT_QTE = 0 AND MVT_MNT != 0 THEN LAG(MVT_STO_DEB) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE) +
LAG(MVT_ENT*MVT_QTE) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE) ELSE MVT_STO_DEB
END + MVT_ENT*MVT_QTE,
CASE WHEN COALESCE(LEAD(MVT_DAT) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE),'2100-01-01') = MVT_DAT THEN
MVT_DAT ELSE COALESCE(LEAD(MVT_DAT) OVER (PARTITION BY ART_IDE_CTI, MVT_STO ORDER BY MVT_DAT,MVT_IDE),'2100-01-01') - interval '1 day'
END as date_fin,
CASE WHEN rank() OVER (PARTITION BY ART_IDE_CTI, MVT_STO,MVT_DAT ORDER BY MVT_DAT,MVT_IDE) = 1 THEN 1
ELSE 0
END AS est_premier_jour,
CASE
WHEN cume_dist() OVER (PARTITION BY ART_IDE_CTI, MVT_STO,MVT_DAT ORDER BY MVT_DAT,MVT_IDE) = 1 THEN 1
ELSE 0
END AS est_dernier_jour,
w_SXMOUVEMENT.no_sejour,
w_SXMOUVEMENT.no_patient,
w_SXMOUVEMENT.livraison_code_original
FROM w_SXMOUVEMENT
LEFT JOIN eco.t_types_mouvements ON MVT_TYP = t_types_mouvements.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON t_unites_fonctionnelles.code_original = MVT_TII
LEFT JOIN eco.t_articles ON ART_IDE_CTI::text = t_articles.code_original AND t_articles.oid <> 0
LEFT JOIN eco.t_fournisseurs ON TIE_ID::text = t_fournisseurs.code_original
LEFT JOIN eco.t_gestionnaires ON w_SXMOUVEMENT.gestionnaire_code_original = t_gestionnaires.code_original
LEFT JOIN eco.t_lieux ON MVT_STO = t_lieux.code_original
LEFT JOIN eco.t_sites ON DOS_IDE = t_sites.code_original
LEFT JOIN eco.t_compte ON t_compte.oid = -1
WHERE MVT_DAT >= '[ENV_ECO_ANNEEDEBUT]0101' ;
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');
VACUUM ANALYSE eco.p_mouvements_articles;
--SELECT eco.cti_update_mvt_mnt_stock();
]]></sqlcmd>
</NODE>
<NODE label="Stocks">
<sqlcmd><![CDATA[
SELECT base.cti_disable_index('eco', 'i_stock_1');
SELECT base.cti_disable_index('eco', 'i_stock_2');
SELECT base.cti_disable_index('eco', 'i_stock_3');
SELECT base.cti_disable_index('eco', 'i_stock_4');
SELECT base.cti_disable_index('eco', 'i_stock_5');
TRUNCATE eco.p_stock;
INSERT INTO eco.p_stock(
article_id,
date_fin,
date_debut,
ucd_id,
lpp_id,
compte_id,
site_id,
lieu_id,
provider_id,
fournisseur_id,
stock_quantite_debut,
stock_valeur_debut,
stock_valeur_debut_ttc,
entree_quantite,
entree_montant,
pump,
sortie_quantite,
sortie_montant,
stock_quantite_fin,
stock_valeur_fin,
stock_valeur_fin_ttc)
SELECT
article_id,
date(date_trunc('month',date) + interval '1 month' - interval '1 day') AS date_fin,
date(date_trunc('month',date)) AS date_debut,
0::bigint AS ucd_id,
0::bigint AS lpp_id,
compte_id,
site_id,
lieu_id,
0::bigint AS provider_id,
p_mouvements_articles.fournisseur_id AS fournisseur_id,
(MIN(ARRAY[(to_char(date,'YYYMMDD') || code_original),stock_quantite_debut::text]))[2]::numeric,
(MIN(ARRAY[(to_char(date,'YYYMMDD') || code_original),(stock_quantite_debut*prix_unitaire_calcule)::text]))[2]::numeric,
(MIN(ARRAY[(to_char(date,'YYYMMDD') || code_original),(stock_quantite_debut*prix_unitaire_calcule*base.cti_division(entree_montant+sortie_montant,entree_montant_ht+sortie_montant_ht))::text]))[2]::numeric,
SUM(entree_quantite),
SUM(entree_montant),
(MAX(ARRAY[(to_char(date,'YYYMMDD') || code_original),prix_unitaire_calcule::text]))[2]::numeric,
SUM(sortie_quantite),
SUM(sortie_montant),
(MAX(ARRAY[(to_char(date,'YYYMMDD') || code_original),stock_quantite_fin::text]))[2]::numeric,
(MAX(ARRAY[(to_char(date,'YYYMMDD') || code_original),(stock_quantite_fin*prix_unitaire_calcule)::text]))[2]::numeric,
(MAX(ARRAY[(to_char(date,'YYYMMDD') || code_original),(stock_quantite_fin*prix_unitaire_calcule*base.cti_division(entree_montant+sortie_montant,entree_montant_ht+sortie_montant_ht))::text]))[2]::numeric
FROM eco.p_mouvements_articles
WHERE date >= '[ENV_ECO_ANNEEDEBUT]0101'
GROUP BY 1,2,3,4,5,6,7,8,10;
--maj des pump à 0
DROP TABLE IF EXISTS w_pump;
CREATE TEMP TABLE w_pump AS
SELECT
article_id,
site_id,
lieu_id,
COALESCE(lead(date) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY oid),'1900-01-01') AS prev_date,
date,
COALESCE(lead(date) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY oid),'2099-12-31') AS next_date,
prix_unitaire_calcule AS pump_cur,
prix_unitaire_calcule*base.cti_division(entree_montant+sortie_montant,entree_montant_ht+sortie_montant_ht) AS pump_ttc_cur
FROM eco.p_mouvements_articles
WHERE sortie_quantite > 0 AND est_dernier_jour = 1;
UPDATE eco.p_stock
SET
pump = pump_cur,
stock_valeur_fin = stock_quantite_fin * pump_cur,
stock_valeur_fin_ttc = stock_quantite_fin * pump_ttc_cur
FROM w_pump
WHERE 1=1 AND
p_stock.article_id = w_pump.article_id AND
p_stock.site_id = w_pump.site_id AND
p_stock.lieu_id = w_pump.lieu_id AND
date_fin BETWEEN date AND next_date AND
stock_valeur_fin = 0 AND
stock_quantite_fin != 0
;
UPDATE eco.p_stock
SET
stock_valeur_debut = stock_quantite_debut * pump_cur,
stock_valeur_debut_ttc = stock_quantite_debut * pump_ttc_cur
FROM w_pump
WHERE 1=1 AND
p_stock.article_id = w_pump.article_id AND
p_stock.site_id = w_pump.site_id AND
p_stock.lieu_id = w_pump.lieu_id AND
date_debut BETWEEN prev_date AND date AND
stock_valeur_debut = 0 AND
stock_quantite_debut != 0
;
DROP TABLE IF EXISTS w_pump;
CREATE TEMP TABLE w_pump AS
SELECT
article_id,
site_id,
lieu_id,
COALESCE(lead(date) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY oid),'1900-01-01') AS prev_date,
date,
COALESCE(lead(date) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY oid),'2099-12-31') AS next_date,
prix_unitaire_calcule AS pump_cur,
prix_unitaire_calcule*base.cti_division(entree_montant+sortie_montant,entree_montant_ht+sortie_montant_ht) AS pump_ttc_cur
FROM eco.p_mouvements_articles
WHERE entree_montant != 0 AND entree_montant_ht != 0 AND est_dernier_jour = 1;
UPDATE eco.p_stock
SET
pump = pump_cur,
stock_valeur_fin = stock_quantite_fin * pump_cur,
stock_valeur_fin_ttc = stock_quantite_fin * pump_ttc_cur
FROM w_pump
WHERE 1=1 AND
p_stock.article_id = w_pump.article_id AND
p_stock.site_id = w_pump.site_id AND
p_stock.lieu_id = w_pump.lieu_id AND
date_fin BETWEEN date AND next_date AND
stock_valeur_fin = 0 AND
stock_quantite_fin != 0
;
UPDATE eco.p_stock
SET
stock_valeur_debut = stock_quantite_debut * pump_cur,
stock_valeur_debut_ttc = stock_quantite_debut * pump_ttc_cur
FROM w_pump
WHERE 1=1 AND
p_stock.article_id = w_pump.article_id AND
p_stock.site_id = w_pump.site_id AND
p_stock.lieu_id = w_pump.lieu_id AND
date_debut BETWEEN prev_date AND date AND
stock_valeur_debut = 0 AND
stock_quantite_debut != 0
;
-- ajout des stocks mensuels manquants
SELECT base.cti_execute('
INSERT INTO eco.p_stock
(
article_id,
compte_id,
ucd_id,
lpp_id,
site_id,
lieu_id,
date_debut,
date_fin,
entree_quantite,
entree_montant,
sortie_quantite,
sortie_montant,
pump,
stock_quantite_debut,
stock_quantite_fin,
stock_valeur_debut,
stock_valeur_debut_ttc,
stock_valeur_fin,
stock_valeur_fin_ttc
)
SELECT
p_stock.article_id,
p_stock.compte_id,
p_stock.ucd_id,
p_stock.lpp_id,
p_stock.site_id,
p_stock.lieu_id,
date(date_trunc(''month'',p_stock.date_debut) - interval ''1 month'') AS date_debut,
date(date_trunc(''month'',p_stock.date_debut) - interval ''1 day'') AS date_fin,
0 AS entree_quantite,
0 AS entree_montant,
0 AS sortie_quantite,
0 AS sortie_montant,
p_stock.pump,
p_stock.stock_quantite_debut,
p_stock.stock_quantite_debut,
p_stock.stock_valeur_debut,
p_stock.stock_valeur_debut_ttc,
p_stock.stock_valeur_debut,
p_stock.stock_valeur_debut_ttc
FROM eco.p_stock
LEFT JOIN eco.p_stock p_stock_prev ON
p_stock.site_id = p_stock_prev.site_id AND
p_stock.lieu_id = p_stock_prev.lieu_id AND
p_stock.article_id = p_stock_prev.article_id AND
date(date_trunc(''month'',p_stock.date_debut) - interval ''1 day'') = p_stock_prev.date_fin
WHERE
p_stock.date_debut <= now() AND
p_stock.date_fin >= ''[ENV_ECO_ANNEEDEBUT]0101'' AND
p_stock.stock_quantite_debut != 0 AND
p_stock_prev.article_id IS NULL
',200)
;
SELECT base.cti_execute('
INSERT INTO eco.p_stock
(
article_id,
compte_id,
ucd_id,
lpp_id,
site_id,
lieu_id,
date_debut,
date_fin,
entree_quantite,
entree_montant,
sortie_quantite,
sortie_montant,
pump,
stock_quantite_debut,
stock_quantite_fin,
stock_valeur_debut,
stock_valeur_debut_ttc,
stock_valeur_fin,
stock_valeur_fin_ttc
)
SELECT
p_stock.article_id,
p_stock.compte_id,
p_stock.ucd_id,
p_stock.lpp_id,
p_stock.site_id,
p_stock.lieu_id,
date(date_trunc(''month'',p_stock.date_debut) + interval ''1 month'') AS date_debut,
date(date_trunc(''month'',p_stock.date_debut) + interval ''2 month'' - interval ''1 day'') AS date_fin,
0 AS entree_quantite,
0 AS entree_montant,
0 AS sortie_quantite,
0 AS sortie_montant,
p_stock.pump,
p_stock.stock_quantite_fin,
p_stock.stock_quantite_fin,
p_stock.stock_valeur_fin,
p_stock.stock_valeur_fin_ttc,
p_stock.stock_valeur_fin,
p_stock.stock_valeur_fin_ttc
FROM eco.p_stock
LEFT JOIN eco.p_stock p_stock_next ON
p_stock.site_id = p_stock_next.site_id AND
p_stock.lieu_id = p_stock_next.lieu_id AND
p_stock.article_id = p_stock_next.article_id AND
p_stock.date_fin + interval ''1 day'' = p_stock_next.date_debut
WHERE
p_stock.date_debut <= now() AND
p_stock.date_fin >= ''[ENV_ECO_ANNEEDEBUT]0101'' 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');
]]></sqlcmd>
</NODE>
<NODEx label="Factures">
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODEx>
</NODE>
<NODE name="POST" label="POST-TRAITEMENTS">
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODE>
</ROOT>