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 ; ]]> '' 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 ]]> '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; ]]> 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 ; ]]> 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'); ]]> '' 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(); ]]> = '[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'); ]]>