''
GROUP BY 1
;
-- UCD
INSERT INTO base.t_ucd(
code,
texte,
texte_court,
laboratoire_texte,
conditionnement_texte,
atc_code,
atc_texte,
ephmra_code, ephmra_texte,
prestation_defaut_id)
SELECT
UCD,
MAX(LIBUCD),
'',
'',
'',
'',
'',
'',
'',
0
FROM w_ARP08
WHERE UCD <> '' AND
UCD NOT IN (SELECT code FROM base.t_ucd)
GROUP BY 1;
-- LPP
INSERT INTO base.t_lpp(
code,
texte,
texte_court)
SELECT
ARCIA1,
MAX(ARLI80),
MAX(ARLI80)
FROM prod_shs.[ECOLIB]_ARP03
WHERE ARCIA1 <> '' AND
ARCIA1 NOT IN (SELECT code FROM base.t_lpp)
GROUP BY 1;
-- Lettres budgetaires
INSERT INTO eco.t_lettre_budgetaire(code, texte, texte_court, code_original)
SELECT BCLBUD,
BCLBUD,
BCLBUD,
BCLBUD
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCLBUD NOT IN (SELECT code_original FROM eco.t_lettre_budgetaire)
GROUP BY 1
ORDER BY 1;
-- comptes
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8,
BCLI50,
BCLI50,
BCIUBC
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCIUBC IN (SELECT ARIUBC FROM prod_shs.[ECOLIB]_ARP01) AND
BCIUBC NOT IN (SELECT code_original FROM eco.t_compte)
ORDER BY 1;
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8,
BCLI50,
BCLI50,
BCIUBC
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCIUBC IN (SELECT FVIUBC FROM prod_shs.[ECOLIB]_FVP01) AND
BCIUBC NOT IN (SELECT code_original FROM eco.t_compte)
ORDER BY 1;
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8,
BCLI50,
BCLI50,
BCIUBC
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCIUBC IN (
SELECT BCIDV1
FROM prod_shs.[ECOLIB]_BCP01
JOIN eco.t_compte ON BCIUBC = t_compte.code_original
) AND
BCIUBC NOT IN (SELECT code_original FROM eco.t_compte)
ORDER BY 1;
INSERT INTO eco.t_compte(code, texte, texte_court, code_original)
SELECT BCCPT1 || BCCPT2 || BCCPT3 || BCCPT4 || BCCPT5 || BCCPT6 || BCCPT7 || BCCPT8,
BCLI50,
BCLI50,
BCIUBC
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCIUBC IN (
SELECT BCIDR1
FROM prod_shs.[ECOLIB]_BCP01
JOIN eco.t_compte ON BCIUBC = t_compte.code_original
) AND
BCIUBC NOT IN (SELECT code_original FROM eco.t_compte)
ORDER BY 1;
UPDATE eco.t_compte SET
texte = BCLI50,
texte_court = BCLI50
FROM prod_shs.[ECOLIB]_BCP01
WHERE BCIUBC = t_compte.code_original AND
(
t_compte.texte IS DISTINCT FROM BCLI50 OR
t_compte.texte_court IS DISTINCT FROM BCLI50
);
-- Lettres budgétaires (classes)
DROP TABLE IF EXISTS w_BCP01_classes;
CREATE TEMP TABLE w_BCP01_classes AS
SELECT
count(DISTINCT CASE WHEN BCLBUD <> '' THEN BCLBUD ELSE NULL END) AS CTI_CPTLETBUD,
count(DISTINCT CASE WHEN BCIDV1 <> '' THEN BCIDV1 ELSE NULL END) AS CTI_CPTVOTE,
count(DISTINCT CASE WHEN BCIDR1 <> '' THEN BCIDR1 ELSE NULL END) AS CTI_CPTRCV
FROM prod_shs.[ECOLIB]_BCP01;
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_CPTLETBUD',
'Lettres budgétaires',
t_listes_tables.oid,
'0',
6
FROM w_BCP01_classes, eco.t_listes_tables
WHERE CTI_CPTLETBUD > 1 AND
t_listes_tables.code = 'CPT' AND
6 NOT IN (SELECT sequence
FROM eco.t_classes
JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'
WHERE t_classes.sequence = 6;
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT BCLBUD, BCLBUD, current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_BCP01
JOIN eco.t_compte ON BCIUBC = t_compte.code_original
WHERE BCLBUD NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,2,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_BCP01 ON BCLBUD = t_classes_sections.code
JOIN eco.t_compte ON code_original = BCIUBC
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Comptes de vote (classes)
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_CPTVOTE',
'Compte de vote',
t_listes_tables.oid,
'0',
7
FROM w_BCP01_classes, eco.t_listes_tables
WHERE CTI_CPTVOTE > 1 AND
t_listes_tables.code = 'CPT' AND
7 NOT IN (SELECT sequence
FROM eco.t_classes
JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'
WHERE t_classes.sequence = 7;
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT trim(BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) ,
MAX(BCP01_2.BCLI50), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_BCP01 BCP01
JOIN eco.t_compte ON BCIUBC = t_compte.code_original
JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON BCP01.BCIDV1 = BCP01_2.BCIUBC
WHERE (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_BCP01 BCP01 ON BCP01.BCIDV1 = BCP01_2.BCIUBC
JOIN eco.t_compte ON code_original = BCP01.BCIUBC
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Comptes receveur (classes)
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_CPTRCV',
'Compte receveur',
t_listes_tables.oid,
'0',
8
FROM w_BCP01_classes, eco.t_listes_tables
WHERE CTI_CPTRCV > 1 AND
t_listes_tables.code = 'CPT' AND
8 NOT IN (SELECT sequence
FROM eco.t_classes
JOIn eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'CPT'
WHERE t_classes.sequence = 8;
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT trim(BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) ,
MAX(BCP01_2.BCLI50), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_BCP01 BCP01
JOIN eco.t_compte ON BCIUBC = t_compte.code_original
JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON BCP01.BCIDR1 = BCP01_2.BCIUBC
WHERE (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_compte.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_BCP01 BCP01_2 ON (BCP01_2.BCCPT1 || BCP01_2.BCCPT2 || BCP01_2.BCCPT3 || BCP01_2.BCCPT4 || BCP01_2.BCCPT5 || BCP01_2.BCCPT6 || BCP01_2.BCCPT7 || BCP01_2.BCCPT8) = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_BCP01 BCP01 ON BCP01.BCIDR1 = BCP01_2.BCIUBC
JOIN eco.t_compte ON code_original = BCP01.BCIUBC
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Familles d'articles
INSERT INTO eco.t_familles_articles(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE
LEFT JOIN eco.t_familles_articles ON (code_original = THCODE)
WHERE THCENR = 'FS1' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_familles_articles
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR = 'FS1' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Sous familles
INSERT INTO eco.t_sous_familles_articles(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE
LEFT JOIN eco.t_sous_familles_articles ON (code_original = THCODE)
WHERE THCENR = 'FS2' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_sous_familles_articles
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR = 'FS2' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UWCATC, UWCATC, MAX(UWLIBE), MAX(UWLIBE)
FROM prod_shs.[ECOLIB]_UWA01
LEFT JOIN eco.t_classification_atc ON (code_original = UWCATC)
WHERE code_original IS NULL
GROUP BY 1
ORDER BY 1;
UPDATE eco.t_classification_atc
SET texte = UWLIBE,
texte_court = UWLIBE
FROM prod_shs.[ECOLIB]_UWA01
WHERE
code_original = UWCATC AND
(texte IS DISTINCT FROM UWLIBE OR
texte_court IS DISTINCT FROM UWLIBE);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT UWCATC, UWCATC, MAX(UWLIBE), MAX(UWLIBE)
FROM prod_shs.[ECOLIB]_UWA03
LEFT JOIN eco.t_classification_atc ON (code_original = UWCATC)
WHERE code_original IS NULL
GROUP BY 1
ORDER BY 1;
-- Standard ATC
SELECT eco.cti_reorganize_classification_atc();
-- unités
INSERT INTO eco.t_unites(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_unites ON (code_original = THCODE)
WHERE THCENR IN ( 'UDI', 'UST') AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_unites
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR IN ( 'UDI', 'UST') AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Types articles
INSERT INTO eco.t_types_articles(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE
LEFT JOIN eco.t_types_articles ON (code_original = THCODE)
WHERE THCENR = 'TAG' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_types_articles
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR = 'TAG' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Catégories
INSERT INTO eco.t_categories_articles(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE
LEFT JOIN eco.t_categories_articles ON (code_original = THCODE)
WHERE THCENR = 'CAT' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_categories_articles
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR = 'CAT' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Sous catégories
INSERT INTO eco.t_sous_categories_articles(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP02GE LEFT JOIN eco.t_sous_categories_articles ON (code_original = THCODE)
WHERE THCENR = 'SCA' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_sous_categories_articles
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR = 'SCA' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Lieux
INSERT INTO eco.t_lieux(code, texte, texte_court, code_original)
SELECT ZLLIEU, ZLNLIE, ZLNLIE, ZLLIEU
FROM prod_shs.[ECOLIB]_ZLP01 LEFT JOIN eco.t_lieux ON (code_original = ZLLIEU)
WHERE code_original IS NULL;
UPDATE eco.t_lieux
SET texte = ZLNLIE,
texte_court = ZLNLIE
FROM prod_shs.[ECOLIB]_ZLP01
WHERE code_original = ZLLIEU
AND (texte IS DISTINCT FROM ZLNLIE OR
texte_court IS DISTINCT FROM ZLNLIE);
INSERT INTO eco.t_lieux(code, texte, texte_court, code_original)
SELECT ZYLIEU, ZYNLIE, ZYNLIE, ZYLIEU
FROM prod_shs.[ECOLIB]_ZYP01
LEFT JOIN eco.t_lieux ON (code_original = ZYLIEU)
WHERE code_original IS NULL;
-- Articles
INSERT INTO eco.t_articles(code, texte, texte_court, code_original)
SELECT DISTINCT ARARTI, ARLI40, ARLI15, ARIUAR
FROM prod_shs.[ECOLIB]_ARP01 LEFT JOIN eco.t_articles ON (code_original = ARIUAR)
WHERE code_original IS NULL;
UPDATE eco.t_articles
SET
code = ARARTI,
texte = ARLI40,
texte_court = ARLI15
FROM prod_shs.[ECOLIB]_ARP01
WHERE code_original = ARIUAR
AND (code IS DISTINCT FROM ARARTI OR
texte IS DISTINCT FROM ARLI40 OR
texte_court IS DISTINCT FROM ARLI15);
UPDATE eco.t_articles SET
type_id = COALESCE(t_types_articles.oid,0),
famille_id = COALESCE(t_familles_articles.oid,0),
sous_famille_id = COALESCE(t_sous_familles_articles.oid,0),
categorie_id = COALESCE(t_categories_articles.oid,0),
sous_categorie_id = COALESCE(t_sous_categories_articles.oid,0),
unite_stockage_id = COALESCE(t_unites_stockage.oid,0),
unite_distribution_id = COALESCE(t_unites_distribution.oid,0)
FROM prod_shs.[ECOLIB]_ARP01
LEFT JOIN eco.t_types_articles ON ARTYAG = t_types_articles.code_original
LEFT JOIN eco.t_familles_articles ON ARKFS1 = t_familles_articles.code_original
LEFT JOIN eco.t_sous_familles_articles ON ARKFS2 = t_sous_familles_articles.code_original
LEFT JOIN eco.t_categories_articles ON ARKCAT = t_categories_articles.code_original
LEFT JOIN eco.t_sous_categories_articles ON ARKSCA = t_sous_categories_articles.code_original
LEFT JOIN eco.t_unites t_unites_stockage ON ARKUST = t_unites_stockage.code_original
LEFT JOIN eco.t_unites t_unites_distribution ON ARKUST = t_unites_distribution.code_original
WHERE
t_articles.code_original = ARIUAR AND
(t_articles.type_id IS DISTINCT FROM COALESCE(t_types_articles.oid,0) OR
t_articles.famille_id IS DISTINCT FROM COALESCE(t_familles_articles.oid,0) OR
t_articles.sous_famille_id IS DISTINCT FROM COALESCE(t_sous_familles_articles.oid,0) OR
t_articles.categorie_id IS DISTINCT FROM COALESCE(t_categories_articles.oid,0) OR
t_articles.sous_categorie_id IS DISTINCT FROM COALESCE(t_sous_categories_articles.oid,0) OR
t_articles.unite_stockage_id IS DISTINCT FROM COALESCE(t_unites_stockage.oid,0) OR
t_articles.unite_distribution_id IS DISTINCT FROM COALESCE(t_unites_distribution.oid,0)
);
UPDATE eco.t_articles SET
classification_atc_id = COALESCE(t_classification_atc.oid,0)
FROM prod_shs.[ECOLIB]_ARP01
LEFT JOIN eco.t_classification_atc ON ARCATC = t_classification_atc.code
WHERE
t_articles.code_original = ARIUAR AND
classification_atc_id IS DISTINCT FROM COALESCE(t_classification_atc.oid,0);
UPDATE eco.t_articles SET classification_atc_id = 0 WHERE classification_atc_id IS NULL;
UPDATE eco.t_articles SET
compte_id = COALESCE(t_compte.oid,0)
FROM prod_shs.[ECOLIB]_ARP01
LEFT JOIN eco.t_compte ON ARIUBC = t_compte.code_original
WHERE
t_articles.code_original = ARIUAR AND
compte_id IS DISTINCT FROM COALESCE(t_compte.oid,0);
UPDATE eco.t_articles SET compte_id = 0 WHERE compte_id IS NULL;
UPDATE eco.t_articles SET
taux_tva_en_cours = TZTXTV
FROM prod_shs.[ECOLIB]_ARP01
JOIN prod_shs.[ECOLIB]_TZP01 ON ARCTVA = TZCTVA
WHERE t_articles.code_original = ARIUAR AND
taux_tva_en_cours IS DISTINCT FROM TZTXTV
;
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
);
-- LPP
UPDATE eco.t_articles
SET lpp_id = subview.lpp_id
FROM
(
SELECT ARIUAR,(MAX(Array[ARDMEA,t_lpp.oid]))[2] AS lpp_id
FROM prod_shs.[ECOLIB]_ARP06 ARP06
JOIN prod_shs.[ECOLIB]_ARP03 ARP03 ON ARIUA1 = ARIULP
JOIN base.t_lpp ON t_lpp.code = substr(ARP03.ARCIA1,1,7)
GROUP BY 1
) subview
WHERE t_articles.code_original = ARIUAR AND
t_articles.lpp_id IS DISTINCT FROM subview.lpp_id;
-- Référence article fournisseur
DROP TABLE IF EXISTS w_articles;
CREATE TEMP TABLE w_articles AS
SELECT t_articles.oid AS article_id,
t_articles.code AS article_code,
base.cti_group_array3(COALESCE(fournisseur_id,0))::bigint[] AS ref_fournisseur_id,
CASE WHEN count(*) < 50 THEN
base.cti_group_array3(COALESCE(AFLIFA,''))::text[]
ELSE
base.cti_group_array3(COALESCE(substr(AFLIFA,20),''))::text[]
END AS ref_fournisseur_texte,
base.cti_group_array3(COALESCE(AFREFA,''))::text[] AS ref_fournisseur_code
FROM eco.t_articles
LEFT JOIN (
SELECT t_articles.oid AS article_id,
t_fournisseurs.oid AS fournisseur_id,
CASE WHEN AFLIFA <> '' THEN AFLIFA ELSE ARLI40 END || CASE WHEN AFREFA <> '' THEN ' (' || AFREFA || ')' ELSE '' END AS AFLIFA,
AFREFA
FROM prod_shs.[ECOLIB]_AFP01
JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR
JOIN eco.t_articles ON AFIUAR = t_articles.code_original
JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original
WHERE AFIUAR <> ''
) subview ON subview.article_id = t_articles.oid
GROUP BY 1,2
ORDER BY 1;
UPDATE eco.t_articles
SET
ref_fournisseur_id = w_articles.ref_fournisseur_id,
ref_fournisseur_code = w_articles.ref_fournisseur_code,
ref_fournisseur_texte = w_articles.ref_fournisseur_texte
FROM w_articles
WHERE w_articles.article_id = t_articles.oid AND
(
t_articles.ref_fournisseur_id IS DISTINCT FROM w_articles.ref_fournisseur_id OR
t_articles.ref_fournisseur_code IS DISTINCT FROM w_articles.ref_fournisseur_code OR
t_articles.ref_fournisseur_texte IS DISTINCT FROM w_articles.ref_fournisseur_texte
);
INSERT INTO eco.t_article_fournisseur (
code_original,
article_id,
fournisseur_id,
fournisseur_distributeur_id,
code_reference_fournisseur,
texte_reference_fournisseur,
code_cip,
code_cahpp,
unite_approvisionnement_id,
nombre_conditionnement_approvisionnement,
prix_unitaire_en_cours
)
SELECT
AFIUAF,
t_articles.oid AS article_id,
t_fournisseurs.oid AS fournisseur_id,
COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid) AS fournisseur_distributeur_id,
AFREFA AS code_reference_fournisseur,
AFLIFA AS texte_reference_fournisseur,
AFCBAR,
AFCAEX,
COALESCE(t_unites.oid,0) AS unite_approvisionnement_id,
AFUSUA AS nombre_conditionnement_approvisionnement,
base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric) AS prix_unitaire_en_cours
FROM prod_shs.[ECOLIB]_AFP01
JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR
JOIN eco.t_articles ON AFIUAR = t_articles.code_original
JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original
LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON AFIUF1 = t_fournisseurs_distributeur.code_original
LEFT JOIN eco.t_unites ON AFKUAP = t_unites.code_original
WHERE AFIUAR <> '' AND AFIUFN <> '' AND
AFIUAF NOT IN (SELECT code_original FROM eco.t_article_fournisseur WHERE code_original <> '')
;
UPDATE eco.t_article_fournisseur SET
article_id = t_articles.oid,
fournisseur_id = t_fournisseurs.oid,
fournisseur_distributeur_id = COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid),
code_reference_fournisseur = AFREFA,
texte_reference_fournisseur = AFLIFA,
code_cip = AFCBAR,
code_cahpp = AFCAEX,
unite_approvisionnement_id = COALESCE(t_unites.oid,0),
nombre_conditionnement_approvisionnement = AFUSUA,
prix_unitaire_en_cours = base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric)
FROM prod_shs.[ECOLIB]_AFP01
JOIN prod_shs.[ECOLIB]_ARP01 ON AFIUAR = ARIUAR
JOIN eco.t_articles ON AFIUAR = t_articles.code_original
JOIN eco.t_fournisseurs ON AFIUFN = t_fournisseurs.code_original
LEFT JOIN eco.t_fournisseurs t_fournisseurs_distributeur ON AFIUF1 = t_fournisseurs_distributeur.code_original
LEFT JOIN eco.t_unites ON AFKUAP = t_unites.code_original
WHERE t_article_fournisseur.code_original = AFIUAF AND
AFIUAR <> '' AND AFIUFN <> '' AND
(
t_article_fournisseur.article_id IS DISTINCT FROM t_articles.oid OR
t_article_fournisseur.fournisseur_id IS DISTINCT FROM t_fournisseurs.oid OR
t_article_fournisseur.fournisseur_distributeur_id IS DISTINCT FROM COALESCE(t_fournisseurs_distributeur.oid,t_fournisseurs.oid) OR
t_article_fournisseur.code_reference_fournisseur IS DISTINCT FROM AFREFA OR
t_article_fournisseur.texte_reference_fournisseur IS DISTINCT FROM AFLIFA OR
t_article_fournisseur.code_cip IS DISTINCT FROM AFCBAR OR
t_article_fournisseur.code_cahpp IS DISTINCT FROM AFCAEX OR
t_article_fournisseur.unite_approvisionnement_id IS DISTINCT FROM COALESCE(t_unites.oid,0) OR
t_article_fournisseur.nombre_conditionnement_approvisionnement IS DISTINCT FROM AFUSUA OR
t_article_fournisseur.prix_unitaire_en_cours IS DISTINCT FROM base.cti_division(AFPUTA::numeric,CASE WHEN AFQTPU > 0 THEN AFQTPU ELSE 1 END::numeric)
)
;
-- géré en stock (a améliorer avec D dépot et P pret)
UPDATE eco.t_articles
SET
gere_en_stock = CASE WHEN ARTARB IN('D','P') THEN 0 ELSE 1 END
FROM prod_shs.[ECOLIB]_ARP01
WHERE code_original = ARIUAR;
]]>
''
GROUP BY 1;
UPDATE eco.t_types_fournisseurs
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP02GE
WHERE
THCENR IN ( 'TYF') AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
INSERT INTO eco.t_types_fournisseurs(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP01GE
LEFT JOIN eco.t_types_fournisseurs ON (code_original = THCODE)
WHERE THCENR = 'TYF' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_types_fournisseurs
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP01GE
WHERE
THCENR IN ( 'TYF') AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
-- Fournisseurs
INSERT INTO eco.t_fournisseurs(code, texte, texte_court, code_original, code_cahpp, siret)
SELECT DISTINCT FNFOUR, FNNOMF, FNNOMF, FNIUFN, FNCBAR, FNNFIN
FROM prod_shs.[ECOLIB]_FNP01
LEFT JOIN eco.t_fournisseurs ON (code_original = FNIUFN)
WHERE code_original IS NULL;
INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id)
SELECT VLCPOS, MAX(VLNOMV), MAX(VLNOMV), MAX(t_departements.oid)
FROM prod_shs.[ECOLIB]_FNP01
JOIN prod_shs.[ECOLIB]_VLP01GE ON FNIUVI = VLIUVI
LEFT JOIN base.t_codes_postaux ON VLCPOS = t_codes_postaux.code
JOIN base.t_departements ON CASE WHEN VLIPAY = '001' THEN substr(VLCPOS,1,2) else '99' END = t_departements.code
WHERE t_codes_postaux.oid IS NULL
GROUP BY 1
;
UPDATE eco.t_fournisseurs SET
texte = FNNOMF,
texte_court = FNNOMF,
adresse = trim(FNADRA || ' ' || FNADRB),
code_postal_id = COALESCE(t_codes_postaux.oid,0),
ville = VLNOMV,
cedex = FNCDEX,
telephone = FNNTEL,
fax = FNNFAX,
code_cahpp = FNCBAR,
siret = FNNFIN
FROM prod_shs.[ECOLIB]_FNP01
JOIN prod_shs.[ECOLIB]_VLP01GE ON FNIUVI = VLIUVI
LEFT JOIN base.t_codes_postaux ON VLCPOS = t_codes_postaux.code
WHERE code_original = FNIUFN
AND (
t_fournisseurs.texte IS DISTINCT FROM FNNOMF OR
t_fournisseurs.texte_court IS DISTINCT FROM FNNOMF OR
t_fournisseurs.adresse IS DISTINCT FROM trim(FNADRA || ' ' || FNADRB) OR
t_fournisseurs.code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR
t_fournisseurs.ville IS DISTINCT FROM VLNOMV OR
t_fournisseurs.cedex IS DISTINCT FROM FNCDEX OR
t_fournisseurs.telephone IS DISTINCT FROM FNNTEL OR
t_fournisseurs.fax IS DISTINCT FROM FNNFAX OR
t_fournisseurs.code_cahpp IS DISTINCT FROM FNCBAR OR
t_fournisseurs.siret IS DISTINCT FROM FNNFIN
);
UPDATE eco.t_fournisseurs SET
code_comptable = substr(code,2,5)
WHERE oid <> 0 AND
length(t_fournisseurs.code) = 6 AND
code_comptable IS DISTINCT FROM substr(code,2,5)
;
UPDATE eco.t_fournisseurs SET
iban = CASE WHEN FOIBAX <> '' THEN FOIBAX ELSE iban END,
bic = CASE WHEN FOBICX <> '' THEN FOBICX ELSE bic END
FROM
(
SELECT to_char(FOCFOU,'FM00000') AS FOCFOU,
CASE WHEN FOBICC <> '' THEN FOBICC ELSE FOBICP END AS FOBICX,
CASE WHEN FOIBAC <> '' THEN FOIBAC ELSE FOIBAP END AS FOIBAX
FROM prod_shs.[COMPTALIB]_FOP02
WHERE FOBICC <> '' OR FOBICP <> '' OR FOIBAC <> '' OR FOIBAP <> ''
) subview
WHERE code_comptable = FOCFOU AND
(
iban IS DISTINCT FROM CASE WHEN FOIBAX <> '' THEN FOIBAX ELSE iban END OR
bic IS DISTINCT FROM CASE WHEN FOBICX <> '' THEN FOBICX ELSE bic END
)
;
UPDATE eco.t_fournisseurs
SET iban = 'FR76'||' '||substr(FOCBQE,1,4)||' '||substr(FOCBQE,5,4)||' '||substr(FOCBQE,9,4)||' '||substr(FOCBQE,13,4)||' '||substr(FOCBQE,17,4)||' '||substr(FOCBQE,21,3)
FROM
(
SELECT to_char(FOCFOU,'FM00000') AS FOCFOU,
FORSOF,
CASE
WHEN FOBQEF <> '' THEN FOBQEF || FOGUIF || FONCPF || FOCRIF
WHEN FOBQEP <> '' THEN FOBQEP || FOGUIP || FONCPP || FOCRIP
ELSE '' END AS FOCBQE
FROM prod_shs.[COMPTALIB]_FOP01
WHERE FOBQEF <> '' OR FOBQEP <> ''
) subview
WHERE code_comptable = FOCFOU AND
length(FOCBQE) = 23 AND
iban = ''
;
UPDATE eco.t_fournisseurs SET
type_id = COALESCE(t_types_fournisseurs.oid,0)
FROM prod_shs.[ECOLIB]_FNP01
LEFT JOIN eco.t_types_fournisseurs ON FNKTYF = t_types_fournisseurs.code_original
WHERE
t_fournisseurs.code_original = FNIUFN AND
(t_fournisseurs.type_id IS DISTINCT FROM COALESCE(t_types_fournisseurs.oid,0));
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
);
]]>
'' THEN UFIUCR ELSE NULL END) AS CTI_UFCR,
count(DISTINCT CASE WHEN UFIUSE <> '' THEN UFIUSE ELSE NULL END) AS CTI_UFUM,
count(DISTINCT CASE WHEN UFSERS <> '' THEN UFSERS ELSE NULL END) AS CTI_UFSERS,
count(DISTINCT CASE WHEN UFETBF <> '' THEN UFETBF ELSE NULL END) AS CTI_UFSITE
FROM prod_shs.[ECOLIB]_UFP01GE;
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_UFSITE',
'Site',
t_listes_tables.oid,
'0',
6
FROM w_UFP01_classes, eco.t_listes_tables
WHERE CTI_UFSITE > 1 AND
t_listes_tables.code = 'UFO' AND
6 NOT IN (SELECT sequence
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'
WHERE t_classes.sequence = 6 AND t_classes.code = 'CTI_UFSITE';
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT LHIUSI ,
MAX(LHNSIT), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_UFP01GE
JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original
JOIN prod_shs.[ECOLIB]_LHP01GE ON UFETBF = LHIUSI
WHERE LHIUSI NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_LHP01GE ON LHIUSI = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_UFP01GE ON UFETBF = LHIUSI
JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Centre responsabilité
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_UFCR',
'Centre de responsabilité',
t_listes_tables.oid,
'0',
7
FROM w_UFP01_classes, eco.t_listes_tables
WHERE CTI_UFCR > 1 AND
t_listes_tables.code = 'UFO' AND
7 NOT IN (SELECT sequence
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'
WHERE t_classes.sequence = 7 AND t_classes.code = 'CTI_UFCR';
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT RCCICR ,
MAX(RCLI25), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_UFP01GE UFP01GE
JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original
JOIN prod_shs.[ECOLIB]_RCP01 ON UFIUCR = RCIURC
WHERE RCCICR NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_RCP01 ON RCCICR = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_UFP01GE ON UFIUCR = RCIURC
JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Unité médicale
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_UFUM',
'Unité médicale',
t_listes_tables.oid,
'0',
8
FROM w_UFP01_classes, eco.t_listes_tables
WHERE CTI_UFUM > 1 AND
t_listes_tables.code = 'UFO' AND
8 NOT IN (SELECT sequence
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'
WHERE t_classes.sequence = 8 AND t_classes.code = 'CTI_UFUM';
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT UMCSER ,
MAX(UMNSER), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_UFP01GE
JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original
JOIN prod_shs.[ECOLIB]_UMP01GE ON UFIUSE = UMIUSE
WHERE UMCSER NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_UMP01GE ON UMCSER = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_UFP01GE ON UFIUSE = UMIUSE
JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Service de soins
INSERT INTO eco.t_classes(
code, texte, table_id, is_cti, sequence)
SELECT
'CTI_UFSERS',
'Service de soins',
t_listes_tables.oid,
'0',
9
FROM w_UFP01_classes, eco.t_listes_tables
WHERE CTI_UFSERS > 1 AND
t_listes_tables.code = 'UFO' AND
9 NOT IN (SELECT sequence
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO');
DROP TABLE IF EXISTS w_classes;
CREATE TEMP TABLE w_classes AS
SELECT t_classes.oid AS current_classe_id
FROM eco.t_classes
JOIN eco.t_listes_tables ON t_classes.table_id = t_listes_tables.oid AND t_listes_tables.code = 'UFO'
WHERE t_classes.sequence = 9 AND t_classes.code = 'CTI_UFSERS';
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT SVKSER ,
MAX(SVLIBE), current_classe_id
FROM w_classes ,
prod_shs.[ECOLIB]_UFP01GE
JOIN eco.t_unites_fonctionnelles ON UFIUUF = t_unites_fonctionnelles.code_original
JOIN prod_shs.[ECOLIB]_SVP01GE ON UFSERS = SVKSER
WHERE SVKSER NOT IN
(SELECT t_classes_sections.code
FROM eco.t_classes_sections
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
)
GROUP BY 1,3
ORDER BY 1,2,3;
DROP TABLE IF EXISTS w_classes_sections_elements;
CREATE TEMP TABLE w_classes_sections_elements AS
SELECT t_classes_sections.oid AS section_id, t_unites_fonctionnelles.oid AS to_id
FROM eco.t_classes_sections
JOIN prod_shs.[ECOLIB]_SVP01GE ON SVKSER = t_classes_sections.code
JOIN prod_shs.[ECOLIB]_UFP01GE ON UFSERS = SVKSER
JOIN eco.t_unites_fonctionnelles ON code_original = UFIUUF
JOIN w_classes ON t_classes_sections.classe_id = current_classe_id
GROUP BY 1,2;
DELETE FROM eco.t_classes_sections_elements
USING w_classes, eco.t_classes_sections
WHERE t_classes_sections_elements.section_id = t_classes_sections.oid AND
t_classes_sections.classe_id = current_classe_id;
INSERT INTO eco.t_classes_sections_elements(section_id, to_id)
SELECT
section_id, to_id
FROM w_classes_sections_elements;
-- Types mouvements
INSERT INTO eco.t_types_mouvements(code, texte, texte_court, code_original)
SELECT DISTINCT THCODE, MAX(THLI40), MAX(THLI40), THCODE
FROM prod_shs.[ECOLIB]_THP01GE
LEFT JOIN eco.t_types_mouvements ON (code_original = THCODE)
WHERE THCENR = 'CMV' AND code_original IS NULL AND THCODE <> ''
GROUP BY 1;
UPDATE eco.t_types_mouvements
SET texte = THLI40,
texte_court = THLI40
FROM prod_shs.[ECOLIB]_THP01GE
WHERE
THCENR = 'CMV' AND THCODE <> '' AND
code_original = THCODE AND
(texte IS DISTINCT FROM THLI40 OR
texte_court IS DISTINCT FROM THLI40);
INSERT INTO eco.t_types_mouvements(code_original, code, texte, texte_court)
SELECT 'CTI_STOCK', 'CTI_STOCK', 'Stock début de mois', 'Stock début de mois'
WHERE 'CTI_STOCK' NOT IN (SELECT code_original FROM eco.t_types_mouvements);
]]>
0 THEN eco.cti_to_date(FUSENG, FUAENG, FUMENG, 01::numeric) ELSE eco.cti_to_date(FUSCRE, FUACRE, FUMCRE, 01::numeric) END) + interval '1 month' - interval '1 day') AS date_engagement,
trim(FUOBFU) AS objet,
trim(FUREFC) AS reference,
eco.cti_to_date(FUSLIP, FUALIP, FUMLIP, FUJLIP) AS date_livraison_prevue,
CASE WHEN FUTOP4 = '1' THEN 'T' ELSE 'N' END AS etat_reception,
eco.cti_to_date(FUSLIV, FUALIV, FUMLIV, FUJLIV) AS date_reception,
CASE WHEN FUTOP5 = '1' THEN 'T' ELSE 'N' END AS etat_liquidation,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_distributeur_id,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_lieux_commande.oid,0) AS lieu_commande_id,
COALESCE(t_lieux_facturation.oid,0) AS lieu_facturation_id,
COALESCE(t_lieux_livraison.oid,0) AS lieu_livraison_id,
COALESCE(t_unites_fonctionnelles.oid,0)AS unite_fonctionnelle_id,
FUMHTC AS montant_commande_ht,
FUMREC AS montant_commande_remise,
FUMTVC AS montant_commande_tva,
FUMPOC AS montant_commande_port,
FUMTCC AS montant_commande_total,
FUMHTL AS montant_liquidation_ht,
FUMREL AS montant_liquidation_remise,
FUMTVL AS montant_liquidation_tva,
FUMPOL AS montant_liquidation_port,
FUMTCL AS montant_liquidation_total
FROM prod_shs.[ECOLIB]_FUP01
LEFT JOIN eco.t_fournisseurs ON FUIUFN = t_fournisseurs.code_original
LEFT JOIN eco.t_gestionnaires ON FUKGEC = t_gestionnaires.code_original
LEFT JOIN eco.t_lieux t_lieux_commande ON FULFAC = t_lieux_commande.code_original
LEFT JOIN eco.t_lieux t_lieux_facturation ON FULFAC = t_lieux_facturation.code_original
LEFT JOIN eco.t_lieux t_lieux_livraison ON FULLIV = t_lieux_livraison.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON CASE WHEN FUIUU2 <> '' THEN FUIUU2 ELSE FUIUU1 END = t_unites_fonctionnelles.code_original
WHERE FUSCRE = 20 AND
100*FUSCRE + FUACRE >= [ENV_ECO_ANNEEDEBUT] AND
FUCANN = '' AND
FUTOP3 <> '0';
SELECT base.cti_enable_index('eco', 'i_commandes_1');
SELECT base.cti_enable_index('eco', 'i_commandes_2');
SELECT base.cti_enable_index('eco', 'i_commandes_3');
SELECT base.cti_enable_index('eco', 'i_commandes_4');
SELECT base.cti_enable_index('eco', 'i_commandes_5');
SELECT base.cti_enable_index('eco', 'i_commandes_6');
SELECT base.cti_enable_index('eco', 'i_commandes_7');
SELECT base.cti_enable_index('eco', 'i_commandes_8');
-- Si ligne commande soldée en réception et si quantité réceptionnée <> 0 (etat_livraison<>'N'), modification des quantités commandées
UPDATE prod_shs.[ECOLIB]_FVP01 SET
FVQCD1 = FVQRE1,
FVQCD2 = FVQRE2
WHERE 1=1
AND FVQCD1 != FVQRE1
AND FVTOP1 = '1'
AND FVQRE1 != 0
;
-- UCD par fournisseur
DROP TABLE IF EXISTS w_ARAF_ucd;
CREATE TEMP TABLE w_ARAF_ucd AS
SELECT AFIUAR, AFIUFN, AFREFA, COALESCE(t_ucd_fournisseur.oid, t_ucd.oid, 0) AS ucd_id
FROM prod_shs.[ECOLIB]_ARP01
LEFT JOIN base.t_ucd ON (t_ucd.code = substr(ARMOT2,1,7) AND length(ARMOT2) = 7) OR (t_ucd.code = substr(ARMOT2,6,7) AND length(ARMOT2) = 13)
JOIN prod_shs.[ECOLIB]_AFP01 ON AFIUAR = ARIUAR
LEFT JOIN base.t_ucd t_ucd_fournisseur ON (t_ucd_fournisseur.code = substr(AFREFA,1,7) AND length(AFREFA) = 7) OR (t_ucd_fournisseur.code = substr(AFREFA,6,7) AND length(AFREFA) = 13)
WHERE AFIUAR NOT IN (SELECT ARIUAR FROM prod_shs.[ECOLIB]_ARP06) AND
(ARMOT2 <> '' OR AFREFA <> '') AND
(t_ucd.oid IS NOT NULL OR t_ucd_fournisseur.oid IS NOT NULL);
CREATE INDEX w_ARAF_ucd_i1 ON w_ARAF_ucd USING btree (AFIUAR);
SELECT base.cti_disable_index('eco', 'i_ligne_commandes_1');
SELECT base.cti_disable_index('eco', 'i_ligne_commandes_2');
SELECT base.cti_disable_index('eco', 'i_ligne_commandes_3');
TRUNCATE eco.p_lignes_commandes;
INSERT INTO eco.p_lignes_commandes(
code_original,
commande_id,
ligne_commande,
texte,
fournisseur_distributeur_id,
article_id,
lpp_id,
ucd_id,
unite_approvisionnement_id,
compte_id,
quantite_approvisionnement,
prix_unitaire_approvisionnement,
multiplicateur_stockage,
quantite_stockage,
prix_unitaire_stockage,
taux_tva,
unite_fonctionnelle_id,
montant_commande_ht,
montant_commande_remise,
montant_commande_tva,
montant_commande_port,
montant_commande_ttc,
quantite_livraison_approvisionnement,
quantite_livraison_stockage,
montant_livraison_ht,
montant_livraison_ttc,
etat_livraison,
montant_liquidation_ht,
montant_liquidation_remise,
montant_liquidation_tva,
montant_liquidation_port,
montant_liquidation_ttc,
etat_liquidation)
SELECT
FVNCDE || '|' || FVLICD AS code_original,
p_commandes.oid AS commande_id,
FVLICD AS ligne_commande,
trim(FVLIA1 || ' ' || FVLIA2) AS texte,
CASE WHEN t_fournisseurs.fournisseur_distributeur_id <> 0 THEN t_fournisseurs.fournisseur_distributeur_id ELSE t_fournisseurs.oid END AS fournisseur_distributeur_id,
COALESCE(t_articles.oid, 0) AS article_id,
COALESCE(t_articles.lpp_id, 0) AS lpp_id,
COALESCE(w_ARAF_ucd.ucd_id, 0) AS ucd_id,
COALESCE(t_unites.oid,t_articles.unite_stockage_id,0) AS unite_approvisionnement_id,
COALESCE(t_compte.oid, t_articles.compte_id, 0) AS compte_id,
FVQCD1 AS quantite_approvisionnement,
FVPUN1 AS prix_unitaire_approvisionnement,
FVUSUA AS multiplicateur_stockage,
FVQCD2 AS quantite_stockage,
FVPUN2 AS prix_unitaire_stockage,
FVTXTV AS taux_tva,
p_commandes.unite_fonctionnelle_id,
FVMHT1 AS montant_commande_ht,
FVMRE1 AS montant_commande_remise,
FVMTV1 AS montant_commande_tva,
FVMPO1 AS montant_commande_port,
FVMTC1 AS montant_commande_ttc,
FVQRE1 AS quantite_livraison_approvisionnement,
FVQRE1 AS quantite_livraison_stockage,
CASE WHEN FVQRE1 = FVQCD1 THEN FVMHT1 WHEN FVQCD1 = 0 THEN 0 ELSE FVMHT1 / FVQCD1 * FVQRE1 END AS montant_livraison_ht,
CASE WHEN FVQRE1 = FVQCD1 THEN FVMTC1 WHEN FVQCD1 = 0 THEN 0 ELSE FVMTC1 / FVQCD1 * FVQRE1 END AS montant_livraison_ht,
CASE WHEN FVQRE1 = FVQCD1 THEN 'T' WHEN FVQRE1 > FVQCD1 THEN 'S' WHEN FVQRE1 = 0 THEN 'N' ELSE 'P' END AS etat_livraison,
COALESCE(YXMHT5,0) AS montant_liquidation_ht,
COALESCE(YXMRE5,0) AS montant_liquidation_remise,
COALESCE(YXMTV5,0) AS montant_liquidation_tva,
COALESCE(YXMPO5,0) AS montant_liquidation_port,
COALESCE(YXMTC5,0) AS montant_liquidation_ttc,
CASE WHEN FVTOP3 = '1' THEN 'T' ELSE 'N' END AS etat_liquidation
FROM prod_shs.[ECOLIB]_FVP01
JOIN prod_shs.[ECOLIB]_FUP01 ON FVNCDE = FUNCDE
LEFT JOIN prod_shs.[ECOLIB]_YXP01 ON FVNLIQ = YXNLIQ and FVLILI = YXLILI
JOIN eco.p_commandes ON FVNCDE = p_commandes.code_original
JOIN eco.t_fournisseurs ON p_commandes.fournisseur_id = t_fournisseurs.oid
LEFT JOIN eco.t_articles ON FVIUAR = t_articles.code_original AND t_articles.oid <> 0
LEFT JOIN w_ARAF_ucd ON FVIUAR = AFIUAR AND FUIUFN = AFIUFN
LEFT JOIN eco.t_unites ON FVKUAP = t_unites.code_original
LEFT JOIN eco.t_compte ON FVIUBC = t_compte.code_original AND t_compte.oid <> 0
WHERE FUSCRE = 20 AND
100*FUSCRE + FUACRE >= [ENV_ECO_ANNEEDEBUT] AND
FUCANN = '' AND
FUTOP3 <> '0' AND
FVCANN = ''
;
-- forcage des commandes et livraisons en fonction de la liquidation => dans share
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');
-- UCD par défaut article
UPDATE eco.t_articles
SET ucd_id = 0
WHERE ucd_id <> 0 AND
code_original NOT IN (SELECT AFIUAR FROM w_ARAF_ucd);
UPDATE eco.t_articles
SET ucd_id = subview.ucd_id
FROM
(
SELECT article_id, count(distinct ucd_id), (MAX(Array[date_commande::text, ucd_id::text]))[2]::bigint AS ucd_id
FROM eco.p_lignes_commandes
JOIN eco.p_commandes ON commande_id = p_commandes.oid
WHERE ucd_id <> 0
GROUP BY 1
) subview
WHERE t_articles.oid = subview.article_id AND
subview.ucd_id IS DISTINCT FROM t_articles.ucd_id;
UPDATE eco.t_articles
SET ucd_id = subview.ucd_id
FROM
(
SELECT t_articles.oid AS article_id, max(COALESCE(t_ucd_fournisseur.oid, t_ucd.oid, 0)) AS ucd_id
FROM prod_shs.[ECOLIB]_ARP01
JOIN eco.t_articles ON ARIUAR = t_articles.code_original
LEFT JOIN base.t_ucd ON (t_ucd.code = substr(ARMOT2,1,7) AND length(ARMOT2) = 7) OR (t_ucd.code = substr(ARMOT2,6,7) AND length(ARMOT2) = 7)
JOIN prod_shs.[ECOLIB]_AFP01 ON AFIUAR = ARIUAR
LEFT JOIN base.t_ucd t_ucd_fournisseur ON (t_ucd_fournisseur.code = substr(AFREFA,1,7) AND length(AFREFA) = 7) OR (t_ucd_fournisseur.code = substr(AFREFA,6,7) AND length(AFREFA) = 13)
WHERE AFIUAR NOT IN (SELECT ARIUAR FROM prod_shs.[ECOLIB]_ARP06) AND
(ARMOT2 <> '' OR AFREFA <> '') AND
(t_ucd.oid IS NOT NULL OR t_ucd_fournisseur.oid IS NOT NULL)
GROUP BY 1
) subview
WHERE t_articles.oid = subview.article_id
;
UPDATE eco.p_lignes_commandes
SET ucd_id = t_articles.ucd_id
FROM eco.t_articles
WHERE article_id = t_articles.oid AND
p_lignes_commandes.ucd_id = 0 AND
t_articles.ucd_id <> 0;
]]>
0 AND
(base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0)
;
INSERT INTO w_UBA01_DOSS
SELECT UBNMVL,
UBNCDE,
UBLICD,
eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date_mouvement,
UBDOSS::text AS no_sejour,
UBIUHN::text AS no_patient
FROM prod_shs.[ECOLIB]_UBA01
JOIN prod_shs.[ECOLIB]_SYP01 ON SYNMVT = UBNMVL
WHERE UBNMVL <> 0 AND
UBNMVL NOT IN (SELECT UBNMVT FROM w_UBA01_DOSS ) AND
(base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0)
;
INSERT INTO w_UBA01_DOSS
SELECT SYNMVT,
UBNCDE,
UBLICD,
eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date_mouvement,
UBDOSS::text AS no_sejour,
UBIUHN::text AS no_patient
FROM prod_shs.[ECOLIB]_UBA01
JOIN prod_shs.[ECOLIB]_SYP01 ON SYNCDE = UBNCDE AND SYLICD = UBLICD
WHERE UBNCDE <> 0 AND
SYNMVT NOT IN (SELECT UBNMVT FROM w_UBA01_DOSS) AND
(base.cti_to_number(UBDOSS) <> 0 OR base.cti_to_number(UBIUHN) <> 0)
;
UPDATE w_UBA01_DOSS
SET no_sejour = NULL
WHERE no_sejour = ''
;
UPDATE w_UBA01_DOSS
SET no_patient = NULL
WHERE no_patient = ''
;
-- Uniquement les mouvements qui n'ont qu'un seul séjour
DROP TABLE IF EXISTS w_UBA01_DOSS_U;
CREATE TEMP TABLE w_UBA01_DOSS_U AS
SELECT UBNMVT, COALESCE(MAX(no_sejour),'') AS no_sejour, COALESCE(MAX(no_patient),'') AS no_patient
FROM w_UBA01_DOSS
WHERE no_sejour IS NOT NULL OR no_patient IS NOT NULL
GROUP BY 1
HAVING count(DISTINCT no_sejour) <= 1 AND count(DISTINCT no_patient) <= 1
;
CREATE INDEX iw_UBA01_DOSS_U_UBNMVT ON w_UBA01_DOSS_U USING btree (UBNMVT)
;
TRUNCATE eco.p_mouvements_articles;
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_1');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_2');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_3');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_4');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_5');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_6');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_7');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_8');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_9');
SELECT base.cti_disable_index('eco', 'i_mouvements_articles_10');
-- TVA articles
DROP SEQUENCE IF EXISTS w_MVT_sequence;
CREATE TEMP SEQUENCE w_mvt_sequence;
DROP TABLE IF EXISTS w_MVT_ARTICLES;
CREATE TEMP TABLE w_MVT_ARTICLES AS
SELECT subview.*, nextval(' w_MVT_sequence'::regclass) AS sequence
FROM
(
SELECT
SYNMVT AS code_original,
eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR) AS date,
CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN 'E' ELSE 'S' END AS sens_mouvement,
COALESCE(t_types_mouvements.oid,0) AS type_mouvement_id,
TRIM(SYLI25) AS texte,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_lieux.oid,0) AS lieu_id,
COALESCE(t_unites_fonctionnelles.oid,0) AS unite_fonctionnelle_id,
COALESCE(t_articles.oid,0) AS article_id,
COALESCE(t_compte.oid,t_articles.compte_id,0) AS compte_id,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
COALESCE(p_commandes.oid,0) AS commande_id,
SYLICD AS ligne_commande,
COALESCE(t_articles.lpp_id,0) AS lpp_id,
COALESCE(t_ucd.oid,0) AS ucd_id,
SYPRMV AS prix_unitaire,
CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN SYQMVT ELSE 0 END AS entree_quantite,
CASE WHEN SYKNMV = 'S' OR (SYKNMV = 'T' AND SYKCMV = 'TS') THEN CASE WHEN SYKCMV <> 'NS' AND SYKCMV <> 'IN' THEN SYQMVT ELSE 0 - SYQMVT END ELSE 0 END AS sortie_quantite,
CASE WHEN SYKNMV = 'E' OR (SYKNMV = 'T' AND SYKCMV = 'TE') THEN
CASE
WHEN SYKNMV = 'E' AND SYKCMV IN ('EE','IE') AND SYMTC5 <> 0 THEN SYMTC5
WHEN SYKNMV = 'E' AND SYKCMV IN ('EE','IE') AND SYMTC5 = 0 THEN SYMTC1
WHEN SYKNMV = 'E' AND SYKCMV = 'EL' AND SYMTC1 = 0 THEN SYMTC5
WHEN SYKNMV = 'E' AND SYKCMV = 'EL' AND SYMTC5 = 0 THEN SYMTC1
WHEN SYKNMV = 'E' AND SYKCMV = 'EL' THEN SYMTC5 - SYMTC1
WHEN SYKNMV = 'E' AND SYKCMV = 'AE' THEN SYMTC1
WHEN SYKNMV = 'E' AND SYKCMV IN('EN', 'EP') THEN SYMTC5
WHEN SYMTC5 <> 0 THEN SYMTC5
WHEN SYMTC5 = 0 THEN SYMTC1
ELSE SYQMVT * SYPRMV
END
ELSE 0 END AS entree_montant,
CASE WHEN SYKNMV = 'S' OR (SYKNMV = 'T' AND SYKCMV = 'TS') THEN
CASE
WHEN SYKNMV = 'S' AND SYKCMV IN ('IS') AND SYMTC5 <> 0 THEN SYMTC5
WHEN SYKNMV = 'S' AND SYKCMV IN ('IS') AND SYMTC5 = 0 THEN SYMTC1
WHEN SYKNMV = 'S' AND SYKCMV = 'SL' AND SYMTC1 = 0 THEN SYMTC5
WHEN SYKNMV = 'S' AND SYKCMV = 'SL' AND SYMTC5 = 0 THEN SYMTC1
WHEN SYKNMV = 'S' AND SYKCMV = 'SL' THEN SYMTC5 - SYMTC1
WHEN SYKNMV = 'S' AND SYKCMV IN ('AS','IP','PS') AND SYMTC1 <> 0 THEN SYMTC1
WHEN SYKNMV = 'S' AND SYKCMV IN ('AS','IP','PS') THEN SYMTC5
WHEN SYKNMV = 'S' AND SYKCMV IN ('IN','NS') THEN 0-SYMTC1
WHEN SYMTC5 <> 0 THEN SYMTC5
WHEN SYMTC5 = 0 THEN SYMTC1
ELSE SYQMVT * SYPRMV
END
ELSE 0 END AS sortie_montant,
0 AS stock_quantite_debut,
0 AS stock_quantite_fin,
COALESCE(w_UBA01_DOSS_U.no_patient,'') AS no_patient,
COALESCE(w_UBA01_DOSS_U.no_sejour,'') AS no_sejour
FROM prod_shs.[ECOLIB]_SYP01
LEFT JOIN prod_shs.[ECOLIB]_AFP01 ON SYIUAF = AFIUAF
LEFT JOIN w_ARP08 ON AFREFA = UCD
LEFT JOIN prod_shs.[ECOLIB]_FUP01 ON SYNCDE = FUNCDE
LEFT JOIN eco.t_types_mouvements ON SYKCMV = t_types_mouvements.code_original
LEFT JOIN eco.t_gestionnaires ON SYKGEC = t_gestionnaires.code_original
LEFT JOIN eco.t_lieux ON SYLIEU = t_lieux.code_original
LEFT JOIN eco.t_unites_fonctionnelles ON SYIUUF = t_unites_fonctionnelles.code_original
LEFT JOIN eco.t_articles ON SYIUAR = t_articles.code_original AND t_articles.oid <> 0
LEFT JOIN eco.t_compte ON SYIUBC = t_compte.code_original AND t_compte.oid <> 0
LEFT JOIN eco.t_fournisseurs ON CASE
WHEN FUIUFN <> '' THEN FUIUFN
WHEN AFIUFN <> '' THEN AFIUFN
ELSE SYIUFN END
= t_fournisseurs.code_original
LEFT JOIN eco.p_commandes ON SYNCDE = p_commandes.code_original
LEFT JOIN base.t_ucd ON ((substr(UCD,1,7) = t_ucd.code AND length(UCD) = 7) OR (substr(UCD,1,7) = t_ucd.code AND length(UCD) = 7)) AND t_ucd.oid <> 0
LEFT JOIN w_UBA01_DOSS_U ON UBNMVT = SYNMVT
WHERE SYSIEC = 20 AND 100*SYSIEC + SYANNE >= [ENV_ECO_ANNEEDEBUT] AND SYCANN = ''
ORDER BY eco.cti_to_date(SYSIEC, SYANNE, SYMOIS, SYJOUR),SYNMVT
) subview
;
INSERT INTO eco.p_mouvements_articles(
oid,
code_original,
date,
sens_mouvement,
type_mouvement_id,
texte,
gestionnaire_id,
lieu_id,
unite_fonctionnelle_id,
article_id,
compte_id,
fournisseur_id,
commande_id,
ligne_commande,
lpp_id,
ucd_id,
prix_unitaire,
entree_quantite,
sortie_quantite,
entree_montant,
sortie_montant,
stock_quantite_debut,
stock_quantite_fin,
no_patient,
no_sejour)
SELECT
sequence,
code_original,
date,
sens_mouvement,
type_mouvement_id,
texte,
gestionnaire_id,
lieu_id,
unite_fonctionnelle_id,
article_id,
compte_id,
fournisseur_id,
commande_id,
ligne_commande,
lpp_id,
ucd_id,
prix_unitaire,
entree_quantite,
sortie_quantite,
entree_montant,
sortie_montant,
stock_quantite_debut,
stock_quantite_fin,
no_patient,
no_sejour
FROM
w_MVT_ARTICLES
;
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');
UPDATE eco.p_mouvements_articles SET
entree_quantite = 0 - entree_quantite,
sortie_quantite = 0 - sortie_quantite,
entree_montant = 0 - entree_montant,
sortie_montant = 0 - sortie_montant,
entree_montant_ht = 0 - entree_montant_ht,
sortie_montant_ht = 0 - sortie_montant_ht,
sortie_montant_original_ttc = 0 - sortie_montant_original_ttc,
sortie_montant_original_ht = 0 - sortie_montant_original_ht
FROM eco.t_types_mouvements
WHERE type_mouvement_id = t_types_mouvements.oid AND
t_types_mouvements.particularite_inverser_signe = '1';
UPDATE eco.p_mouvements_articles SET
entree_quantite = sortie_quantite,
sortie_quantite = entree_quantite,
entree_montant = sortie_montant,
sortie_montant = entree_montant,
entree_montant_ht = sortie_montant_ht,
sortie_montant_ht = entree_montant_ht,
sortie_montant_original_ttc = sortie_montant_original_ht,
sortie_montant_original_ht = sortie_montant_original_ttc,
sens_mouvement = sens_force
FROM eco.t_types_mouvements
WHERE type_mouvement_id = t_types_mouvements.oid AND
t_types_mouvements.sens_force IN ('E','S') AND t_types_mouvements.sens_force != p_mouvements_articles.sens_mouvement
;
UPDATE eco.p_mouvements_articles SET
entree_montant_ht = base.cti_division(entree_montant, (1 + tx_tva )),
sortie_montant_ht = base.cti_division(sortie_montant, (1 + tx_tva ))
FROM (
SELECT
article_id,
date_commande,
round(base.cti_division(p_lignes_commandes.montant_commande_ttc - p_lignes_commandes.montant_commande_ht + p_lignes_commandes.montant_commande_remise, p_lignes_commandes.montant_commande_ht),3) AS tx_tva,
COALESCE(lead(date_commande,1) OVER (PARTITION BY article_id ORDER BY date_commande) - interval '1 day', '2099-12-31') AS date_next
FROM eco.p_lignes_commandes
JOIN eco.p_commandes ON commande_id = p_commandes.oid
WHERE p_lignes_commandes.montant_commande_ttc != 0
ORDER BY 1,2
) sub
WHERE 1=1
AND sub.article_id = p_mouvements_articles.article_id
AND p_mouvements_articles.date between date_commande and date_next
;
UPDATE eco.p_mouvements_articles
SET ucd_id = t_articles.ucd_id
FROM eco.t_articles
WHERE article_id = t_articles.oid AND
p_mouvements_articles.ucd_id = 0 AND
t_articles.ucd_id <> 0;
]]>
STQSPH AND
w_STP01.STDATE >= date(now() - interval '1 year')
;
-- Traitement des mois non clos
DROP TABLE IF EXISTS w_STP01_cloture;
CREATE TEMP TABLE w_STP01_cloture AS
SELECT STLIEU, MIN(STSYMD) AS STSYMD_cloture
FROM
(
SELECT w_STP01.STSYMD, w_STP01.STLIEU,
SUM(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END),
SUM(case when w_STP01.STQSPH IS NOT DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END),
MAX(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN w_STP01.STIUAR ELSE '' END)
FROM w_STP01
LEFT JOIN w_STP01 w_STP01_apres ON
w_STP01.STLIEU = w_STP01_apres.STLIEU AND
w_STP01.STIUAR = w_STP01_apres.STIUAR AND
w_STP01.STSYMD = w_STP01_apres.STSYMD -1
WHERE w_STP01.STDATE >= date(now() - interval '1 year') AND
(w_STP01.STQSPH <> 0)
GROUP BY 1,2
HAVING SUM(case when w_STP01.STQSPH IS DISTINCT FROM w_STP01_apres.STQSDP THEN 1 ELSE 0 END) > 0
ORDER BY 1 DESC, 2
) subview
GROUP BY 1
;
DROP TABLE IF EXISTS w_STP01_nonclos;
CREATE TEMP TABLE w_STP01_nonclos AS
SELECT STLIEU, mois, (ANNEE*12+numero_mois) AS STSYMD_nonclos, (ANNEE*12+numero_mois)-1 AS STSYMD_nonclos_prec
FROM base.p_calendrier_mois
JOIN w_STP01_cloture ON (ANNEE*12+numero_mois) >= STSYMD_cloture AND date_debut <= date(now())
ORDER BY 1,2
;
SELECT base.cti_execute('
DROP TABLE IF EXISTS w_STP01_manquant
.,
CREATE TEMP TABLE w_STP01_manquant AS
SELECT w_STP01.*
FROM w_STP01
JOIN w_STP01_nonclos ON
w_STP01.STLIEU = w_STP01_nonclos.STLIEU AND
w_STP01.STSYMD = w_STP01_nonclos.STSYMD_nonclos -1
LEFT JOIN w_STP01 w_STP01_apres ON
w_STP01.STLIEU = w_STP01_apres.STLIEU AND
w_STP01.STIUAR = w_STP01_apres.STIUAR AND
w_STP01_nonclos.STSYMD_nonclos = w_STP01_apres.STSYMD
WHERE w_STP01.STQSPH <> 0 AND
w_STP01_apres IS NULL
.,
UPDATE w_STP01_manquant SET
STSYMD = STSYMD+1,
STDATE = date(STDATE+interval ''1 month''),
STQSDP = STQSPH,
STPUMD = STPUMF,
STQENT = 0,
STQSOR = 0
.,
INSERT INTO w_STP01
SELECT *
FROM w_STP01_manquant
',20)
;
SELECT base.cti_execute('
ALTER TABLE w_STP01 ALTER COLUMN STQSDP TYPE numeric.,
UPDATE w_STP01 SET
STQSDP = w_STP01_avant.STQSPH,
STPUMD = CASE WHEN w_STP01.STPUMD = 0 THEN w_STP01_avant.STPUMF ELSE w_STP01.STPUMD END,
STQSPH = w_STP01_avant.STQSPH + w_STP01.STQENT - w_STP01.STQSOR,
STPUMF = CASE WHEN w_STP01.STPUMF = 0 THEN w_STP01_avant.STPUMF ELSE w_STP01.STPUMF END
FROM w_STP01 w_STP01_avant
WHERE
w_STP01.STLIEU = w_STP01_avant.STLIEU AND
w_STP01.STIUAR = w_STP01_avant.STIUAR AND
w_STP01.STSYMD = '||STSYMD_nonclos||' AND
w_STP01_avant.STSYMD = '||STSYMD_nonclos-1||' AND
(
w_STP01.STQSDP <> w_STP01_avant.STQSPH OR
w_STP01.STPUMD <> w_STP01_avant.STPUMF OR
w_STP01.STQSPH <> w_STP01_avant.STQSPH + w_STP01.STQENT - w_STP01.STQSOR OR
w_STP01.STPUMF <> w_STP01_avant.STPUMF
)
',1)
FROM
(
SELECT STSYMD_nonclos
FROM w_STP01_nonclos
GROUP BY 1
ORDER BY 1
) subview
;
ANALYSE w_STP01
;
-- Ajout à la base
SELECT base.cti_disable_index('eco', 'i_stock_1');
SELECT base.cti_disable_index('eco', 'i_stock_2');
SELECT base.cti_disable_index('eco', 'i_stock_3');
SELECT base.cti_disable_index('eco', 'i_stock_4');
SELECT base.cti_disable_index('eco', 'i_stock_5');
TRUNCATE eco.p_stock;
INSERT INTO eco.p_stock(
article_id,
date_fin,
date_debut,
ucd_id,
lpp_id,
compte_id,
lieu_id,
provider_id,
fournisseur_id,
stock_quantite_debut,
stock_valeur_debut,
entree_quantite,
entree_montant,
sortie_quantite,
sortie_montant,
stock_quantite_fin,
stock_valeur_fin,
pump)
SELECT
COALESCE(t_articles.oid,0) AS article_id,
STDATE AS date_fin,
date(date_trunc('month',STDATE)) AS date_debut,
COALESCE(t_articles.ucd_id,0) AS ucd_id,
COALESCE(t_articles.lpp_id,0) AS lpp_id,
t_articles.compte_id AS compte_id,
COALESCE(t_lieux.oid,0) AS lieu_id,
0::bigint AS provider_id,
t_articles.fournisseur_principal_id AS fournisseur_id,
STQSDP AS stock_quantite_debut,
STQSDP * STPUMD AS stock_valeur_debut,
STQENT AS entree_quantite,
STVSEP+STVTEP AS entree_montant,
STQSOR AS sortie_quantite,
STVSSP+STVTSP AS sortie_montant,
STQSDP + STQENT - STQSOR AS stock_quantite_fin,
(STQSDP + STQENT - STQSOR) * STPUMF AS stock_valeur_fin,
STPUMF
FROM w_STP01
LEFT JOIN eco.t_lieux ON STLIEU = t_lieux.code_original
LEFT JOIN eco.t_articles ON STIUAR = t_articles.code_original AND t_articles.oid <> 0
WHERE STSIEC = 20 AND 100*STSIEC + STANNE >= [ENV_ECO_ANNEEDEBUT] AND STCANN = '' AND
(
STQSDP IS DISTINCT FROM 0 OR
STQENT IS DISTINCT FROM 0 OR
STVSEP IS DISTINCT FROM 0 OR
STVTEP IS DISTINCT FROM 0 OR
STQSOR IS DISTINCT FROM 0 OR
STVSSP IS DISTINCT FROM 0 OR
STVTSP IS DISTINCT FROM 0 OR
STQTSP IS DISTINCT FROM 0
);
SELECT base.cti_enable_index('eco', 'i_stock_1');
SELECT base.cti_enable_index('eco', 'i_stock_2');
SELECT base.cti_enable_index('eco', 'i_stock_3');
SELECT base.cti_enable_index('eco', 'i_stock_4');
SELECT base.cti_enable_index('eco', 'i_stock_5');
]]>