<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>

    <NODE name="INIT" label="INITIALISATIONS ENVIRONNEMENT [FINESS] [FINESS_TEXTE]" />

    <NODE name="PARAM" label="RÉCUPÉRATION DES PARAMÈTRES">
        <NODE label="Récupération des tables">
            <sqlcmd><![CDATA[

            -- Niveau.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.t_planning_niveau',
                'temp t_planning_niveau')
            ;

            -- Création de la table de correspondance (t_corr).
            DROP TABLE IF EXISTS c_planning_niveau
            ;

            CREATE TEMP TABLE c_planning_niveau AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex,
                    null::text AS to_code,
                    null::text AS to_texte,
                    null::bigint AS to_oid
                FROM t_planning_niveau
            ;

            -- Création d'une table temp des données de destination avec soundex (t_dsx).
            DROP TABLE IF EXISTS w_planning_niveau_to
            ;

            CREATE TEMP TABLE w_planning_niveau_to AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex
                FROM rh.t_planning_niveau
            ;

            -- Màj de t_corr à partir de t_dsx avec liaison différente sur le code (nouveaux codes).
            UPDATE c_planning_niveau SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte
            WHERE code NOT IN (SELECT code FROM w_planning_niveau_to)
            ;

            -- Pour les lignes de t_corr non traitées, màj à partir de t_dsx avec liaison sur le code et le soundex.
            -- Permet de rapprocher les codes existants.
            UPDATE c_planning_niveau SET
                to_oid = w_planning_niveau_to.oid,
                to_code = w_planning_niveau_to.code,
                to_texte = w_planning_niveau_to.texte
            FROM w_planning_niveau_to
            WHERE 1=1
                AND c_planning_niveau.to_oid IS NULL
                AND c_planning_niveau.code = w_planning_niveau_to.code
                AND c_planning_niveau.texte_soundex = w_planning_niveau_to.texte_soundex
            ;

            -- Pour les lignes restantes, on applique la translation standard.
            UPDATE c_planning_niveau SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte_court
            WHERE to_oid IS NULL
            ;

            ALTER TABLE c_planning_niveau ADD CONSTRAINT c_planning_niveau_pkey PRIMARY KEY(oid)
            ;

            -- ???
            UPDATE rh.t_planning_niveau SET
                code_original = '#'||oid::text
            WHERE code_original != oid::text
            ;
            UPDATE rh.t_planning_niveau SET
                code_original = oid::text
            WHERE code_original != oid::text
            ;

            INSERT INTO rh.t_planning_niveau(
                oid,
                code_original,
                code,
                texte,
                texte_court)
                SELECT
                    to_oid,
                    to_oid AS code_original,
                    to_code,
                    texte,
                    texte_court
                FROM c_planning_niveau
                WHERE 1=1
                    AND oid != 0 -- Le N/R est importé dans le SHARE.
                    AND to_oid NOT IN (SELECT oid FROM rh.t_planning_niveau) -- On insère que les nouveaux codes.
            ;

            -- Qualification.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.t_planning_qualification',
                'temp t_planning_qualification')
            ;

            -- Création de la table de correspondance (t_corr).
            DROP TABLE IF EXISTS c_planning_qualification
            ;

            CREATE TEMP TABLE c_planning_qualification AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex,
                    null::text AS to_code,
                    null::text AS to_texte,
                    null::bigint AS to_oid
                FROM t_planning_qualification
            ;

            -- Création d'une table temp des données de destination avec soundex (t_dsx).
            DROP TABLE IF EXISTS w_planning_qualification_to
            ;

            CREATE TEMP TABLE w_planning_qualification_to AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex
                FROM rh.t_planning_qualification
            ;

            -- Màj de t_corr à partir de t_dsx avec liaison différente sur le code (nouveaux codes).
            UPDATE c_planning_qualification SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte
            WHERE code NOT IN (SELECT code FROM w_planning_qualification_to)
            ;

            -- Pour les lignes de t_corr non traitées, màj à partir de t_dsx avec liaison sur le code et le soundex.
            -- Permet de rapprocher les codes existants.
            UPDATE c_planning_qualification SET
                to_oid = w_planning_qualification_to.oid,
                to_code = w_planning_qualification_to.code,
                to_texte = w_planning_qualification_to.texte
            FROM w_planning_qualification_to
            WHERE 1=1
                AND c_planning_qualification.to_oid IS NULL
                AND c_planning_qualification.code = w_planning_qualification_to.code
                AND c_planning_qualification.texte_soundex = w_planning_qualification_to.texte_soundex
            ;

            -- Pour les lignes restantes, on applique la translation standard.
            UPDATE c_planning_qualification SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte_court
            WHERE to_oid IS NULL
            ;

            ALTER TABLE c_planning_qualification ADD CONSTRAINT c_planning_qualification_pkey PRIMARY KEY(oid)
            ;

            -- ???
            UPDATE rh.t_planning_qualification SET
                code_original = '#'||oid::text
            WHERE code_original != oid::text
            ;
            UPDATE rh.t_planning_qualification SET
                code_original = oid::text
            WHERE code_original != oid::text
            ;

            INSERT INTO rh.t_planning_qualification(
                oid,
                code_original,
                code,
                texte,
                texte_court)
                SELECT
                    to_oid,
                    to_oid AS code_original,
                    to_code,
                    texte,
                    texte_court
                FROM c_planning_qualification
                WHERE 1=1
                    AND oid != 0 -- Le N/R est importé dans le SHARE.
                    AND to_oid NOT IN (SELECT oid FROM rh.t_planning_qualification) -- On insère que les nouveaux codes.
            ;

            -- Service.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.t_planning_service',
                'temp t_planning_service')
            ;

            -- Création de la table de correspondance (t_corr).
            DROP TABLE IF EXISTS c_planning_service
            ;

            CREATE TEMP TABLE c_planning_service AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex,
                    null::text AS to_code,
                    null::text AS to_texte,
                    null::bigint AS to_oid
                FROM t_planning_service
            ;

            -- Création d'une table temp des données de destination avec soundex (t_dsx).
            DROP TABLE IF EXISTS w_planning_service_to
            ;

            CREATE TEMP TABLE w_planning_service_to AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex
                FROM rh.t_planning_service
            ;

            -- Màj de t_corr à partir de t_dsx avec liaison différente sur le code (nouveaux codes).
            UPDATE c_planning_service SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte
            WHERE code NOT IN (SELECT code FROM w_planning_service_to)
            ;

            -- Pour les lignes de t_corr non traitées, màj à partir de t_dsx avec liaison sur le code et le soundex.
            -- Permet de rapprocher les codes existants.
            UPDATE c_planning_service SET
                to_oid = w_planning_service_to.oid,
                to_code = w_planning_service_to.code,
                to_texte = w_planning_service_to.texte
            FROM w_planning_service_to
            WHERE 1=1
                AND c_planning_service.to_oid IS NULL
                AND c_planning_service.code = w_planning_service_to.code
                AND c_planning_service.texte_soundex = w_planning_service_to.texte_soundex
            ;

            -- Pour les lignes restantes, on applique la translation standard.
            UPDATE c_planning_service SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte_court
            WHERE to_oid IS NULL
            ;

            ALTER TABLE c_planning_service ADD CONSTRAINT c_planning_service_pkey PRIMARY KEY(oid)
            ;

            -- ???
            UPDATE rh.t_planning_service SET
                code_original = '#'||oid::text
            WHERE code_original != oid::text
            ;
            UPDATE rh.t_planning_service SET
                code_original = oid::text
            WHERE code_original != oid::text
            ;

            INSERT INTO rh.t_planning_service(
                oid,
                code_original,
                code,
                texte,
                texte_court)
                SELECT
                    to_oid,
                    to_oid AS code_original,
                    to_code,
                    texte,
                    texte_court
                FROM c_planning_service
                WHERE 1=1
                    AND oid != 0 -- Le N/R est importé dans le SHARE.
                    AND to_oid NOT IN (SELECT oid FROM rh.t_planning_service) -- On insère que les nouveaux codes.
            ;

            -- Type d'absence.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.t_planning_type_absence',
                'temp t_planning_type_absence')
            ;

            -- Création de la table de correspondance (t_corr).
            DROP TABLE IF EXISTS c_planning_type_absence
            ;

            CREATE TEMP TABLE c_planning_type_absence AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex,
                    null::text AS to_code,
                    null::text AS to_texte,
                    null::bigint AS to_oid
                FROM t_planning_type_absence
            ;

            -- Création d'une table temp des données de destination avec soundex (t_dsx).
            DROP TABLE IF EXISTS w_planning_type_absence_to
            ;

            CREATE TEMP TABLE w_planning_type_absence_to AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex
                FROM rh.t_planning_type_absence
            ;

            -- Màj de t_corr à partir de t_dsx avec liaison différente sur le code (nouveaux codes).
            UPDATE c_planning_type_absence SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte
            WHERE code NOT IN (SELECT code FROM w_planning_type_absence_to)
            ;

            -- Pour les lignes de t_corr non traitées, màj à partir de t_dsx avec liaison sur le code et le soundex.
            -- Permet de rapprocher les codes existants.
            UPDATE c_planning_type_absence SET
                to_oid = w_planning_type_absence_to.oid,
                to_code = w_planning_type_absence_to.code,
                to_texte = w_planning_type_absence_to.texte
            FROM w_planning_type_absence_to
            WHERE 1=1
                AND c_planning_type_absence.to_oid IS NULL
                AND c_planning_type_absence.code = w_planning_type_absence_to.code
                AND c_planning_type_absence.texte_soundex = w_planning_type_absence_to.texte_soundex
            ;

            -- Pour les lignes restantes, on applique la translation standard.
            UPDATE c_planning_type_absence SET
                to_oid = oid + [IPX],
                to_code = code,
                to_texte = texte_court
            WHERE to_oid IS NULL
            ;

            ALTER TABLE c_planning_type_absence ADD CONSTRAINT c_planning_type_absence_pkey PRIMARY KEY(oid)
            ;

            -- ???
            UPDATE rh.t_planning_type_absence SET
                code_original = '#'||oid::text
            WHERE code_original != oid::text
            ;
            UPDATE rh.t_planning_type_absence SET
                code_original = oid::text
            WHERE code_original != oid::text
            ;

            INSERT INTO rh.t_planning_type_absence(
                oid,
                code_original,
                code,
                texte,
                texte_court)
                SELECT
                    to_oid,
                    to_oid AS code_original,
                    to_code,
                    texte,
                    texte_court
                FROM c_planning_type_absence
                WHERE 1=1
                    AND oid != 0 -- Le N/R est importé dans le SHARE.
                    AND to_oid NOT IN (SELECT oid FROM rh.t_planning_type_absence) -- On insère que les nouveaux codes.
            ;

            -- Code horaire.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.t_planning_code_horaire',
                'temp t_planning_code_horaire')
            ;

            -- Création de la table de correspondance (t_corr).
            DROP TABLE IF EXISTS c_planning_code_horaire
            ;

            CREATE TEMP TABLE c_planning_code_horaire AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex,
                    null::text AS to_code,
                    null::text AS to_texte,
                    null::bigint AS to_oid
                FROM t_planning_code_horaire
            ;

            -- Création d'une table temp des données de destination avec soundex (t_dsx).
            DROP TABLE IF EXISTS w_planning_code_horaire_to
            ;

            CREATE TEMP TABLE w_planning_code_horaire_to AS
                SELECT
                    *,
                    base.cti_soundex_nom(texte) AS texte_soundex
                FROM rh.t_planning_code_horaire
            ;

            -- Màj de t_corr à partir de t_dsx avec liaison différente sur le code (nouveaux codes).
            UPDATE c_planning_code_horaire SET
                to_oid = oid + [IPX],
                to_code = code_original,
                to_texte = texte
            WHERE code_original NOT IN (SELECT code_original FROM w_planning_code_horaire_to)
            ;

            -- Pour les lignes de t_corr non traitées, màj à partir de t_dsx avec liaison sur le code et le soundex.
            -- Permet de rapprocher les codes existants.
            UPDATE c_planning_code_horaire SET
                to_oid = w_planning_code_horaire_to.oid,
                to_code = w_planning_code_horaire_to.code_original,
                to_texte = w_planning_code_horaire_to.texte
            FROM w_planning_code_horaire_to
            WHERE 1=1
                AND c_planning_code_horaire.to_oid IS NULL
                AND c_planning_code_horaire.code_original = w_planning_code_horaire_to.code_original
                AND c_planning_code_horaire.texte_soundex = w_planning_code_horaire_to.texte_soundex
            ;

            -- Pour les lignes restantes, on applique la translation standard.
            UPDATE c_planning_code_horaire SET
                to_oid = oid + [IPX],
                to_code = code_original,
                to_texte = texte_court
            WHERE to_oid IS NULL
            ;

            ALTER TABLE c_planning_code_horaire ADD CONSTRAINT c_planning_code_horaire_pkey PRIMARY KEY(oid)
            ;

            -- ???
            -- UPDATE rh.t_planning_code_horaire SET
            --     code_original = '#'||oid::text
            -- WHERE code_original != oid::text
            -- ;
            -- UPDATE rh.t_planning_code_horaire SET
            --     code_original = oid::text
            -- WHERE code_original != oid::text
            -- ;

            INSERT INTO rh.t_planning_code_horaire(
                oid,
                code_original,
                code,
                texte,
                texte_court)
                SELECT
                    to_oid,
                    to_oid AS code_original,
                    to_code,
                    texte,
                    texte_court
                FROM c_planning_code_horaire
                WHERE 1=1
                    AND oid != 0 -- Le N/R est importé dans le SHARE.
                    AND to_oid NOT IN (SELECT oid FROM rh.t_planning_code_horaire) -- On insère que les nouveaux codes.
            ;
			
			UPDATE rh.t_planning_code_horaire SET
				code = t_planning_code_horaire_source.code,
				texte = t_planning_code_horaire_source.texte,
				texte_court = t_planning_code_horaire_source.texte_court
			FROM t_planning_code_horaire t_planning_code_horaire_source
			WHERE t_planning_code_horaire . oid = t_planning_code_horaire_source.oid + [IPX] AND
			(
				t_planning_code_horaire.code <> t_planning_code_horaire_source.code OR
				t_planning_code_horaire.texte <> t_planning_code_horaire_source.texte OR
				t_planning_code_horaire.texte_court <> t_planning_code_horaire_source.texte_court
			)

            ]]></sqlcmd>
        </NODE>
    </NODE>

    <NODE name="PLANNING" label="RÉCUPÉRATION DU PLANNING">
        <NODE label="Mouvements du planning">
            <sqlcmd><![CDATA[

            -- Mouvements du planning.
            SELECT base.cti_copy_table(
                'dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]',
                'SELECT * FROM rh.p_planning_mouvement',
                'temp p_planning_mouvement')
            ;

            INSERT INTO rh.p_planning_mouvement (
                contrat_id,
                contrat_mois_id,
                date,
                etablissement_id,
                mois,
                niveau_id,
                qualification_id,
                salarie_id,
                semaine,
                service_id,
                code_horaire_id,
                temps_absence,
                temps_du,
                temps_du_initial,
                temps_valide,
                type_absence_id)
                SELECT
                    contrat_id + [IPX] AS contrat_id,
                    contrat_mois_id + [IPX] AS contrat_mois_id,
                    date,
                    case when p_planning_mouvement.etablissement_id = 0 then 0 else p_planning_mouvement.etablissement_id + [IPX] end AS etablissement_id,
                    mois,
                    coalesce(c_planning_niveau.to_oid, 0) AS niveau_id,
                    coalesce(c_planning_qualification.to_oid, 0) AS qualification_id,
                    salarie_id + [IPX] AS salarie_id,
                    semaine,
                    coalesce(c_planning_service.to_oid, 0) AS service_id,
                    coalesce(c_planning_code_horaire.to_oid, 0) AS code_horaire_id,
                    temps_absence,
                    temps_du,
                    temps_du_initial,
                    temps_valide,
                    coalesce(c_planning_type_absence.to_oid, 0) AS type_absence_id
                FROM p_planning_mouvement
                    LEFT JOIN c_planning_niveau        ON c_planning_niveau.oid        = p_planning_mouvement.niveau_id
                    LEFT JOIN c_planning_qualification ON c_planning_qualification.oid = p_planning_mouvement.qualification_id
                    LEFT JOIN c_planning_service       ON c_planning_service.oid       = p_planning_mouvement.service_id
                    LEFT JOIN c_planning_code_horaire  ON c_planning_code_horaire.oid  = p_planning_mouvement.code_horaire_id
                    LEFT JOIN c_planning_type_absence  ON c_planning_type_absence.oid  = p_planning_mouvement.type_absence_id
            ;

            ]]></sqlcmd>
        </NODE>
    </NODE>

    <NODE name="RAZ" type="common" />

    <NODE name="POST" type="common" />

    <NODE name="VACUUM" type="common" />

    <NODE name="DISABLE_INDEX" type="common" />

    <NODE name="ENABLE_INDEX" type="common" />

</ROOT>