0
', 'temp t_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
code,
texte,
texte_court,
laboratoire_texte,
conditionnement_texte,
atc_code,
atc_texte,
ephmra_code,
ephmra_texte,
0
FROM t_ucd
WHERE code NOT IN (SELECT code FROM base.t_ucd WHERE code IS NOT NULL);
DROP TABLE IF EXISTS c_ucd;
CREATE TEMP TABLE c_ucd AS
SELECT
t_ucd_from.oid AS from_oid,
COALESCE(t_ucd.oid,0) AS to_oid
FROM t_ucd t_ucd_from
LEFT JOIN base.t_ucd ON t_ucd_from.code = t_ucd.code;
-- lpp
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *
FROM base.t_lpp
WHERE oid <> 0
', 'temp t_lpp'
);
INSERT INTO base.t_lpp(
code,
texte,
texte_court)
SELECT
code,
texte,
texte_court
FROM t_lpp
WHERE code NOT IN (SELECT code FROM base.t_lpp WHERE code IS NOT NULL);
DROP TABLE IF EXISTS c_lpp;
CREATE TEMP TABLE c_lpp AS
SELECT
t_lpp_from.oid AS from_oid,
COALESCE(t_lpp.oid,0) AS to_oid
FROM t_lpp t_lpp_from
LEFT JOIN base.t_lpp ON t_lpp_from.code = t_lpp.code;
-- comptes
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *
FROM eco.t_compte
WHERE oid <> 0
', 'temp t_compte'
);
-- Traitement des codes déjà remontés avec l'ancienne stratégie : on enlève le suffixe aux codes.
UPDATE eco.t_compte SET
code = replace(code, '[TPX]', '')
WHERE strpos(code, '[TPX]') > 0
;
-- Màj des champs potentiellement màj dans l'env source.
-- Le code est traité comme le texte[_court].
UPDATE eco.t_compte SET
code = t_compte_from.code,
texte = t_compte_from.texte,
texte_court = t_compte_from.texte_court
FROM t_compte AS t_compte_from
WHERE 1=1
AND t_compte.code_original = '[CPX]' || t_compte_from.oid
AND (1!=1
OR t_compte.code IS DISTINCT FROM t_compte_from.code
OR t_compte.texte IS DISTINCT FROM t_compte_from.texte
OR t_compte.texte_court IS DISTINCT FROM t_compte_from.texte_court)
;
-- Insertion des nouveaux comptes.
INSERT INTO eco.t_compte (
code,
code_original,
texte,
texte_court)
SELECT
code AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_compte
WHERE '[CPX]' || oid NOT IN (SELECT code_original FROM eco.t_compte WHERE code_original IS NOT NULL)
;
-- Création de la table de correspondance oid env source -> oid consolidé.
-- Lorsque le code/texte est identique n'en prendre qu'un seul (au hasard) pour le "fusionner".
DROP TABLE IF EXISTS c_compte
;
CREATE TEMP TABLE c_compte AS
SELECT
t_compte_from.oid AS from_oid,
max(COALESCE(t_compte_fusion.oid, t_compte.oid, 0)) AS to_oid
FROM t_compte AS t_compte_from
LEFT JOIN eco.t_compte ON t_compte.code_original = '[CPX]' || t_compte_from.oid
LEFT JOIN eco.t_compte as t_compte_fusion ON 1=1
AND t_compte_fusion.code = t_compte_from.code
AND t_compte_fusion.texte = t_compte_from.texte
GROUP BY 1
;
-- ATC
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *
FROM eco.t_classification_atc
WHERE oid <> 0
', 'temp t_classification_atc'
);
INSERT INTO eco.t_classification_atc
(
code,
code_original,
texte,
texte_court
)
SELECT
code,
code_original,
texte,
texte_court
FROM t_classification_atc
WHERE code NOT IN
(SELECT code FROM eco.t_classification_atc WHERE code IS NOT NULL);
DROP TABLE IF EXISTS c_classification_atc;
CREATE TEMP TABLE c_classification_atc AS
SELECT
t_classification_atc_from.oid AS from_oid,
COALESCE(t_classification_atc.oid,0) AS to_oid
FROM t_classification_atc t_classification_atc_from
LEFT JOIN eco.t_classification_atc ON t_classification_atc_from.code = t_classification_atc.code;
-- Standard ATC
SELECT eco.cti_reorganize_classification_atc();
-- unites
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_unites
WHERE oid <> 0
', 'temp t_unites_from'
);
UPDATE t_unites_from
SET to_oid = t_unites.oid
FROM eco.t_unites
WHERE upper(t_unites.code) = upper(t_unites_from.code) || '[TPX]' AND
upper(t_unites.texte) = upper(t_unites_from.texte) OR
t_unites.oid = t_unites_from.oid + [IPX];
INSERT INTO eco.t_unites
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_unites_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_unites;
CREATE TEMP TABLE c_unites AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_unites_from;
-- familles articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_familles_articles
WHERE oid <> 0
', 'temp t_familles_articles_from'
);
UPDATE t_familles_articles_from
SET to_oid = t_familles_articles.oid
FROM eco.t_familles_articles
WHERE upper(t_familles_articles.code) = upper(t_familles_articles_from.code) || '[TPX]' AND
upper(t_familles_articles.texte) = upper(t_familles_articles_from.texte) OR
t_familles_articles.oid = t_familles_articles_from.oid + [IPX];
INSERT INTO eco.t_familles_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_familles_articles_from
WHERE to_oid = 0 ;
DROP TABLE IF EXISTS c_familles_articles;
CREATE TEMP TABLE c_familles_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_familles_articles_from;
-- sous_familles articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_sous_familles_articles
WHERE oid <> 0
', 'temp t_sous_familles_articles_from'
);
UPDATE t_sous_familles_articles_from
SET to_oid = t_sous_familles_articles.oid
FROM eco.t_sous_familles_articles
WHERE upper(t_sous_familles_articles.code) = upper(t_sous_familles_articles_from.code) || '[TPX]' AND
upper(t_sous_familles_articles.texte) = upper(t_sous_familles_articles_from.texte) OR
t_sous_familles_articles.oid = t_sous_familles_articles_from.oid + [IPX];
INSERT INTO eco.t_sous_familles_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_sous_familles_articles_from
WHERE to_oid = 0 ;
DROP TABLE IF EXISTS c_sous_familles_articles;
CREATE TEMP TABLE c_sous_familles_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_sous_familles_articles_from;
-- types articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_types_articles
WHERE oid <> 0
', 'temp t_types_articles_from'
);
UPDATE t_types_articles_from
SET to_oid = t_types_articles.oid
FROM eco.t_types_articles
WHERE (upper(t_types_articles.code) = upper(t_types_articles_from.code) || '[TPX]' AND
upper(t_types_articles.texte) = upper(t_types_articles_from.texte)) OR
t_types_articles.oid = t_types_articles_from.oid + [IPX];
INSERT INTO eco.t_types_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_types_articles_from
WHERE to_oid = 0 ;
DROP TABLE IF EXISTS c_types_articles;
CREATE TEMP TABLE c_types_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_types_articles_from;
-- categories articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_categories_articles
WHERE oid <> 0
', 'temp t_categories_articles_from'
);
UPDATE t_categories_articles_from
SET to_oid = t_categories_articles.oid
FROM eco.t_categories_articles
WHERE upper(t_categories_articles.code) = upper(t_categories_articles_from.code) || '[TPX]' AND
upper(t_categories_articles.texte) = upper(t_categories_articles_from.texte) OR
t_categories_articles.oid = t_categories_articles_from.oid + [IPX];
INSERT INTO eco.t_categories_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_categories_articles_from
WHERE to_oid = 0 ;
DROP TABLE IF EXISTS c_categories_articles;
CREATE TEMP TABLE c_categories_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_categories_articles_from;
-- sous_categories articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_sous_categories_articles
WHERE oid <> 0
', 'temp t_sous_categories_articles_from'
);
UPDATE t_sous_categories_articles_from
SET to_oid = t_sous_categories_articles.oid
FROM eco.t_sous_categories_articles
WHERE upper(t_sous_categories_articles.code) = upper(t_sous_categories_articles_from.code) || '[TPX]' AND
upper(t_sous_categories_articles.texte) = upper(t_sous_categories_articles_from.texte) OR
t_sous_categories_articles.oid = t_sous_categories_articles_from.oid + [IPX];
INSERT INTO eco.t_sous_categories_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_sous_categories_articles_from
WHERE to_oid = 0 ;
DROP TABLE IF EXISTS c_sous_categories_articles;
CREATE TEMP TABLE c_sous_categories_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_sous_categories_articles_from;
-- lieux
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_lieux
WHERE oid <> 0
', 'temp t_lieux_from'
);
UPDATE t_lieux_from
SET to_oid = t_lieux.oid
FROM eco.t_lieux
WHERE upper(t_lieux.code) = upper(t_lieux_from.code) || '[TPX]' AND
upper(t_lieux.texte) = upper(t_lieux_from.texte) OR
t_lieux.oid = t_lieux_from.oid + [IPX];
INSERT INTO eco.t_lieux
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_lieux_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_lieux;
CREATE TEMP TABLE c_lieux AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_lieux_from;
-- articles
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_articles
WHERE oid <> 0 AND
oid IN (SELECT oid FROM eco.p_oids WHERE code_table = ''articles'')
', 'temp t_articles_from'
);
CREATE INDEX i_articles_from_oid ON t_articles_from USING btree (oid);
CREATE INDEX i_articles_from_code ON t_articles_from USING btree (code);
CREATE INDEX i_articles_from_famille_id ON t_articles_from USING btree (famille_id);
CREATE INDEX i_articles_from_sous_famille_id ON t_articles_from USING btree (sous_famille_id);
CREATE INDEX i_articles_from_categorie_id ON t_articles_from USING btree (categorie_id);
CREATE INDEX i_articles_from_sous_categorie_id ON t_articles_from USING btree (sous_categorie_id);
CREATE INDEX i_articles_from_unite_stockage_id ON t_articles_from USING btree (unite_stockage_id );
CREATE INDEX i_articles_from_unite_distribution_id ON t_articles_from USING btree (unite_distribution_id);
CREATE INDEX i_articles_from_classification_atc_id ON t_articles_from USING btree (classification_atc_id);
CREATE INDEX i_articles_from_compte_id ON t_articles_from USING btree (compte_id);
UPDATE t_articles_from
SET to_oid = t_articles.oid
FROM eco.t_articles
LEFT JOIN eco.t_providers ON t_providers.oid = 0
WHERE t_providers.oid IS DISTINCT FROM NULL AND
upper(t_articles.code) = upper(t_articles_from.code) || '[TPX]' AND
upper(translate(t_articles.texte,' ,./:=()','')) = upper(translate(t_articles_from.texte,' ,./:=()','')) AND
t_articles.oid < 2000000000000 ;
UPDATE t_articles_from
SET to_oid = subview.oid
FROM (
SELECT upper(translate(t_articles.texte,' ,./:=()','')) AS texte, MIN(oid) AS oid
FROM eco.t_articles
WHERE oid <> 0
GROUP BY 1
) subview
LEFT JOIN eco.t_providers ON t_providers.oid = 0
WHERE t_providers.oid IS DISTINCT FROM NULL AND
subview.texte = upper(translate(t_articles_from.texte,' ,./:=()',''));
UPDATE t_articles_from
SET to_oid = t_articles.oid
FROM eco.t_articles
WHERE to_oid = 0 AND t_articles.oid = t_articles_from.oid + [IPX] ;
INSERT INTO eco.t_articles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_articles_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_articles;
CREATE TEMP TABLE c_articles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_articles_from;
CREATE INDEX c_articles_i1 ON c_articles USING btree (from_oid);
CREATE INDEX c_articles_i2 ON c_articles USING btree (to_oid);
UPDATE eco.t_articles
SET
code = t_articles_from.code || '[TPX]',
texte = t_articles_from.texte,
texte_court = t_articles_from.texte_court
FROM t_articles_from
WHERE t_articles.oid = t_articles_from.to_oid AND
(t_articles.code IS DISTINCT FROM t_articles_from.code || '[TPX]'
OR t_articles.texte IS DISTINCT FROM t_articles_from.texte) AND
t_articles.code LIKE '%[TPX]'
;
UPDATE eco.t_articles
SET famille_id = COALESCE(c_familles_articles.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_familles_articles ON famille_id = c_familles_articles.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.famille_id IS DISTINCT FROM COALESCE(c_familles_articles.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET sous_famille_id = COALESCE(c_sous_familles_articles.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_sous_familles_articles ON sous_famille_id = c_sous_familles_articles.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.sous_famille_id IS DISTINCT FROM COALESCE(c_sous_familles_articles.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET categorie_id = COALESCE(c_categories_articles.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_categories_articles ON categorie_id = c_categories_articles.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.categorie_id IS DISTINCT FROM COALESCE(c_categories_articles.to_oid,0) AND
t_articles.code LIKE '%[TPX]';;
UPDATE eco.t_articles
SET sous_categorie_id = COALESCE(c_sous_categories_articles.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_sous_categories_articles ON sous_categorie_id = c_sous_categories_articles.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.sous_categorie_id IS DISTINCT FROM COALESCE(c_sous_categories_articles.to_oid,0) AND
t_articles.code LIKE '%[TPX]';;
UPDATE eco.t_articles
SET type_id = COALESCE(c_types_articles.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_types_articles ON type_id = c_types_articles.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.type_id IS DISTINCT FROM COALESCE(c_types_articles.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET lpp_id = COALESCE(c_lpp.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_lpp ON lpp_id = c_lpp.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.lpp_id IS DISTINCT FROM COALESCE(c_lpp.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET ucd_id = COALESCE(c_ucd.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_ucd ON ucd_id = c_ucd.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.ucd_id IS DISTINCT FROM COALESCE(c_ucd.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET unite_stockage_id = COALESCE(c_unites.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_unites ON unite_stockage_id = c_unites.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.unite_stockage_id IS DISTINCT FROM COALESCE(c_unites.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET unite_distribution_id = COALESCE(c_unites.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_unites ON unite_distribution_id = c_unites.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.unite_distribution_id IS DISTINCT FROM COALESCE(c_unites.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET classification_atc_id = COALESCE(c_classification_atc.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_classification_atc ON classification_atc_id = c_classification_atc.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.classification_atc_id IS DISTINCT FROM COALESCE(c_classification_atc.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
UPDATE eco.t_articles
SET compte_id = COALESCE(c_compte.to_oid,0)
FROM t_articles_from
JOIN c_articles ON t_articles_from.oid = c_articles.from_oid
LEFT JOIN c_compte ON compte_id = c_compte.from_oid
WHERE t_articles.oid = c_articles.to_oid AND
t_articles.compte_id IS DISTINCT FROM COALESCE(c_compte.to_oid,0) AND
t_articles.code LIKE '%[TPX]';
]]>
0
', 'temp t_types_fournisseurs_from'
);
UPDATE t_types_fournisseurs_from
SET to_oid = t_types_fournisseurs.oid
FROM eco.t_types_fournisseurs
WHERE upper(t_types_fournisseurs.code) = upper(t_types_fournisseurs_from.code) || '[TPX]' AND
upper(t_types_fournisseurs.texte) = upper(t_types_fournisseurs_from.texte) OR
t_types_fournisseurs.oid = t_types_fournisseurs_from.oid + [IPX];
INSERT INTO eco.t_types_fournisseurs
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_types_fournisseurs_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_types_fournisseurs;
CREATE TEMP TABLE c_types_fournisseurs AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_types_fournisseurs_from;
-- fournisseurs
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_fournisseurs
WHERE oid <> 0 AND
oid IN (SELECT oid FROM eco.p_oids WHERE code_table = ''fournisseurs'')
', 'temp t_fournisseurs_from'
);
UPDATE t_fournisseurs_from
SET to_oid = t_fournisseurs.oid
FROM eco.t_fournisseurs
LEFT JOIN eco.t_providers ON t_providers.oid = 0
WHERE t_providers.oid IS DISTINCT FROM NULL AND
upper(t_fournisseurs.code) = upper(t_fournisseurs_from.code) || '[TPX]' AND
upper(t_fournisseurs.texte) = upper(t_fournisseurs_from.texte);
UPDATE t_fournisseurs_from
SET to_oid = t_fournisseurs.oid
FROM eco.t_fournisseurs
LEFT JOIN eco.t_providers ON t_providers.oid = 0
WHERE t_providers.oid IS DISTINCT FROM NULL AND
upper(t_fournisseurs.code) = upper(t_fournisseurs_from.code) || '[TPX]' AND
upper(translate(t_fournisseurs.texte,' ,./:','')) = upper(translate(t_fournisseurs_from.texte,' ,./:','')) AND
t_fournisseurs.oid < 2000000000000;
UPDATE t_fournisseurs_from
SET to_oid = t_fournisseurs.oid
FROM eco.t_fournisseurs
WHERE to_oid = 0 AND
t_fournisseurs.oid = t_fournisseurs_from.oid + [IPX];
INSERT INTO eco.t_fournisseurs
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_fournisseurs_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_fournisseurs;
CREATE TEMP TABLE c_fournisseurs AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_fournisseurs_from;
UPDATE eco.t_fournisseurs SET
code = t_fournisseurs_from.code || '[TPX]',
texte = t_fournisseurs_from.texte,
texte_court = t_fournisseurs_from.texte_court,
code_original = '#[CPX]' || t_fournisseurs_from.oid
FROM c_fournisseurs
JOIN t_fournisseurs_from ON t_fournisseurs_from.oid = c_fournisseurs.from_oid
WHERE t_fournisseurs.oid = c_fournisseurs.to_oid AND
(SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND
(
t_fournisseurs.code IS DISTINCT FROM t_fournisseurs_from.code OR
t_fournisseurs.texte IS DISTINCT FROM t_fournisseurs_from.texte OR
t_fournisseurs.texte_court IS DISTINCT FROM t_fournisseurs_from.texte_court OR
t_fournisseurs.code_original IS DISTINCT FROM '[CPX]' || t_fournisseurs_from.oid
)
;
DELETE
FROM eco.t_fournisseurs
WHERE (SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND
oid BETWEEN [IPX] AND [IPX] + 900000000000 AND
(oid - [IPX]) NOT IN (SELECT oid FROM t_fournisseurs_from)
;
UPDATE eco.t_fournisseurs SET
code_original = '[CPX]' || t_fournisseurs_from.oid
FROM c_fournisseurs
JOIN t_fournisseurs_from ON t_fournisseurs_from.oid = c_fournisseurs.from_oid
WHERE (SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND
t_fournisseurs.oid = c_fournisseurs.to_oid AND
t_fournisseurs.oid BETWEEN [IPX] AND [IPX] + 900000000000 AND
(
t_fournisseurs.code_original IS DISTINCT FROM ('[CPX]' || t_fournisseurs_from.oid)
)
;
UPDATE eco.t_fournisseurs
SET type_id = COALESCE(c_types_fournisseurs.to_oid,0)
FROM t_fournisseurs_from
JOIN c_fournisseurs ON t_fournisseurs_from.oid = c_fournisseurs.from_oid
LEFT JOIN c_types_fournisseurs ON type_id = c_types_fournisseurs.from_oid
WHERE t_fournisseurs.oid = c_fournisseurs.to_oid AND
t_fournisseurs.type_id IS DISTINCT FROM COALESCE(c_types_fournisseurs.to_oid,0) AND
t_fournisseurs.code LIKE '%[TPX]'
;
UPDATE eco.t_articles
SET
ref_fournisseur_id = sub.ref_ids,
ref_fournisseur_code = sub.ref_codes,
ref_fournisseur_texte = sub.ref_textes
FROM (
SELECT
sub2.to_oid,
array_agg(c_fournisseurs.to_oid) AS ref_ids,
array_agg(codes) AS ref_codes,
array_agg(textes) AS ref_textes
FROM
(
SELECT
to_oid,
unnest(ref_fournisseur_id) AS ids,
unnest(ref_fournisseur_code) AS codes,
unnest(ref_fournisseur_texte) as textes
FROM
t_articles_from
) sub2
LEFT JOIN c_fournisseurs ON ids = from_oid
GROUP BY 1
) sub
WHERE t_articles.oid = sub.to_oid AND
(ref_fournisseur_id IS DISTINCT FROM ref_ids OR
ref_fournisseur_code IS DISTINCT FROM ref_codes OR
ref_fournisseur_texte IS DISTINCT FROM ref_textes)
AND
t_articles.code LIKE '%[TPX]'
;
]]>
0
', 'temp t_unites_fonctionnelles_from'
);
UPDATE t_unites_fonctionnelles_from
SET to_oid = t_unites_fonctionnelles.oid
FROM eco.t_unites_fonctionnelles
WHERE upper(t_unites_fonctionnelles.code) = upper(t_unites_fonctionnelles_from.code) || '[TPX]' AND
upper(t_unites_fonctionnelles.texte) = upper(t_unites_fonctionnelles_from.texte) OR
t_unites_fonctionnelles.oid = t_unites_fonctionnelles_from.oid + [IPX];
INSERT INTO eco.t_unites_fonctionnelles
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_unites_fonctionnelles_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_unites_fonctionnelles;
CREATE TEMP TABLE c_unites_fonctionnelles AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_unites_fonctionnelles_from;
-- types_mouvements
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_types_mouvements
WHERE oid <> 0
', 'temp t_types_mouvements_from'
);
UPDATE t_types_mouvements_from
SET to_oid = t_types_mouvements.oid
FROM eco.t_types_mouvements
WHERE upper(t_types_mouvements.code) = upper(t_types_mouvements_from.code) || '[TPX]' AND
upper(t_types_mouvements.texte) = upper(t_types_mouvements_from.texte) OR
t_types_mouvements.oid = t_types_mouvements_from.oid + [IPX];
INSERT INTO eco.t_types_mouvements
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_types_mouvements_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_types_mouvements;
CREATE TEMP TABLE c_types_mouvements AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_types_mouvements_from;
-- types_mouvements
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_types_mouvements
WHERE oid <> 0
', 'temp t_types_mouvements_from'
);
UPDATE t_types_mouvements_from
SET to_oid = t_types_mouvements.oid
FROM eco.t_types_mouvements
WHERE upper(t_types_mouvements.code) = upper(t_types_mouvements_from.code) || '[TPX]' AND
upper(t_types_mouvements.texte) = upper(t_types_mouvements_from.texte) OR
t_types_mouvements.oid = t_types_mouvements_from.oid + [IPX];
INSERT INTO eco.t_types_mouvements
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_types_mouvements_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_types_mouvements;
CREATE TEMP TABLE c_types_mouvements AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_types_mouvements_from;
-- gestionnaires
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_gestionnaires
WHERE oid <> 0
', 'temp t_gestionnaires_from'
);
UPDATE t_gestionnaires_from
SET to_oid = t_gestionnaires.oid
FROM eco.t_gestionnaires
WHERE upper(t_gestionnaires.code) = upper(t_gestionnaires_from.code) || '[TPX]' AND
upper(t_gestionnaires.texte) = upper(t_gestionnaires_from.texte) OR
t_gestionnaires.oid = t_gestionnaires_from.oid + [IPX];
INSERT INTO eco.t_gestionnaires
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_gestionnaires_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_gestionnaires;
CREATE TEMP TABLE c_gestionnaires AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_gestionnaires_from;
-- centres_responsabilites
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *, 0::bigint AS to_oid
FROM eco.t_centres_responsabilites
WHERE oid <> 0
', 'temp t_centres_responsabilites_from'
);
UPDATE t_centres_responsabilites_from
SET to_oid = t_centres_responsabilites.oid
FROM eco.t_centres_responsabilites
WHERE upper(t_centres_responsabilites.code) = upper(t_centres_responsabilites_from.code) || '[TPX]' AND
upper(t_centres_responsabilites.texte) = upper(t_centres_responsabilites_from.texte) OR
t_centres_responsabilites.oid = t_centres_responsabilites_from.oid + [IPX];
INSERT INTO eco.t_centres_responsabilites
(
oid,
code,
code_original,
texte,
texte_court
)
SELECT
oid + [IPX],
code || '[TPX]' AS code,
'[CPX]' || oid AS code_original,
texte,
texte_court
FROM t_centres_responsabilites_from
WHERE to_oid = 0;
DROP TABLE IF EXISTS c_centres_responsabilites;
CREATE TEMP TABLE c_centres_responsabilites AS
SELECT
oid AS from_oid,
CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid
FROM t_centres_responsabilites_from;
-- profils comptables
SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', '
SELECT *
FROM eco.t_profils_comptables
WHERE oid <> 0
', 'temp t_profils_comptables'
);
INSERT INTO eco.t_profils_comptables (
oid,
code_original,
centre_responsabilite_id,
unite_fonctionnelle_id
)
SELECT
oid + [IPX] AS oid,
'[CPX]' || code_original AS code_original,
COALESCE(c_centres_responsabilites.to_oid,0) AS centre_responsabilite_id,
COALESCE(c_unites_fonctionnelles.to_oid,0) AS unite_fonctionnelle_id
FROM t_profils_comptables
LEFT JOIN c_centres_responsabilites ON centre_responsabilite_id = c_centres_responsabilites.from_oid
LEFT JOIN c_unites_fonctionnelles ON unite_fonctionnelle_id = c_unites_fonctionnelles.from_oid;
]]>