--
-- $Id$
--
-- Interne bedrijven omzetten naar behandelgroepen.

DEFINE thisfile = 'YKPN#56941.sql'
DEFINE dbuser   = '^YKPN'
DEFINE custid   = 'YKPN'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

------ payload begin ------


DECLARE
    CURSOR c
    IS
        SELECT prs_bedrijf_naam, b.prs_bedrijf_key, prs_dienst_key
          FROM prs_bedrijf b, prs_bedrijfdienstlocatie bdl
         WHERE     UPPER (prs_bedrijf_naam) LIKE 'RETAIL%'
               AND prs_bedrijf_naam IN ('Retail IT-OPS',
                                        'Retail Audit',
                                        'Retail innovatie',
                                        'Retail Logistiek Operations',
                                        'Retail Processen',
                                        'Retail BI',
                                        'Retail Channel',
                                        'Retail Security')
               AND b.prs_bedrijf_key = bdl.prs_bedrijf_key(+);

    CURSOR c2 (
        c_bedrijf_key   IN NUMBER)
    IS
        SELECT *
          FROM prs_contactpersoon cp
         WHERE     cp.prs_bedrijf_key = c_bedrijf_key
               AND prs_perslid_key IS NOT NULL
               AND prs_contactpersoon_verwijder IS NULL;

    CURSOR c_std (c_dienst_key IN NUMBER)
    IS
        SELECT *
          FROM mld_stdmelding
         WHERE prs_dienst_key = c_dienst_key;

    v_discipline_key        NUMBER;
    v_groep_key             NUMBER;
    v_aanduiding            VARCHAR2 (1000);
    v_gebruikersgroep_key   NUMBER;
BEGIN
    -- De huidige Retail vakgroepen mogen verwijzen naar een behandelgroep
    UPDATE mld_disc_params
       SET mld_disc_params_srtgroep = 1
     WHERE     mld_ins_discipline_key IN (SELECT ins_discipline_key
                                            FROM mld_discipline
                                           WHERE ins_srtdiscipline_key = 41)
           AND mld_disc_params_srtgroep = 0;

    FOR rec IN c
    LOOP
        BEGIN
            v_aanduiding := rec.prs_bedrijf_naam;

            BEGIN
                SELECT ins_discipline_key
                  INTO v_discipline_key
                  FROM mld_discipline
                 WHERE ins_discipline_omschrijving = rec.prs_bedrijf_naam;
            EXCEPTION
                WHEN NO_DATA_FOUND
                THEN
                    -- maak voor ieder bedrijf een vakgroep aan zodat we kunnen autoriseren.
                    INSERT INTO ins_tab_discipline (
                                    ins_discipline_module,
                                    ins_discipline_omschrijving,
                                    ins_srtdiscipline_key)
                         VALUES ('MLD', rec.prs_bedrijf_naam, 41)
                      RETURNING ins_discipline_key
                           INTO v_discipline_key;

                    INSERT INTO mld_disc_params (mld_ins_discipline_key,
                                                 mld_disc_params_notify,
                                                 mld_disc_params_srtgroep)
                         VALUES (v_discipline_key, 1, 2);
            END;

            BEGIN
                SELECT fac_groep_key
                  INTO v_groep_key
                  FROM fac_groep
                 WHERE fac_groep_omschrijving = 'BO ' || rec.prs_bedrijf_naam;
            EXCEPTION
                WHEN NO_DATA_FOUND
                THEN
                    -- maak voor ieder bedrijf een autorisatiegroep aan.
                    INSERT INTO fac_groep (fac_groep_omschrijving)
                         VALUES ('BO ' || rec.prs_bedrijf_naam)
                      RETURNING fac_groep_key
                           INTO v_groep_key;
            END;

            -- de mensen die nu ordbo2 rechten hebben krijgen nu MLDBOF rechten
            INSERT INTO fac_groeprechten (fac_groep_key,
                                          fac_functie_key,
                                          ins_discipline_key,
                                          fac_gebruiker_prs_level_read,
                                          fac_gebruiker_prs_level_write,
                                          fac_gebruiker_alg_level_read,
                                          fac_gebruiker_alg_level_write)
                (SELECT v_groep_key,
                        fac_functie_key,
                        v_discipline_key,
                        -1,
                        -1,
                        -1,
                        -1
                   FROM fac_functie f
                  WHERE     fac_functie_code = 'WEB_MLDBOF'
                        AND NOT EXISTS
                                (SELECT fac_groeprechten_key
                                   FROM fac_groeprechten gr
                                  WHERE     ins_discipline_key =
                                            v_discipline_key
                                        AND fac_groep_key = v_groep_key
                                        AND gr.fac_functie_key =
                                            f.fac_functie_key));

            -- Voeg de personen toe aan de autorisatiegroep.
            FOR reccp IN c2 (rec.prs_bedrijf_key)
            LOOP
                BEGIN
                    DBMS_OUTPUT.put_line (reccp.prs_perslid_key);

                    SELECT fac_gebruikersgroep_key
                      INTO v_gebruikersgroep_key
                      FROM fac_gebruikersgroep
                     WHERE     prs_perslid_key = reccp.prs_perslid_key
                           AND fac_groep_key = v_groep_key;
                EXCEPTION
                    WHEN NO_DATA_FOUND
                    THEN
                        DBMS_OUTPUT.put_line (
                            'Toevoegen: ' || reccp.prs_perslid_key);

                        INSERT INTO fac_gebruikersgroep (prs_perslid_key,
                                                         fac_groep_key)
                             VALUES (reccp.prs_perslid_key, v_groep_key);
                END;
            END LOOP;

            --   UPDATE mld_melding SET
            DBMS_OUTPUT.put_line ('Dienstkey:' || rec.prs_dienst_key);

            IF rec.prs_dienst_key IS NOT NULL
            THEN
                FOR rec_std IN c_std (rec.prs_dienst_key)
                LOOP
                    DBMS_OUTPUT.put_line (
                        'Update stdmelding:' || rec_std.mld_stdmelding_key);

                    UPDATE mld_stdmelding
                       SET mld_stdmelding_vereisdienst = 0,
                           prs_dienst_key = NULL,
                           mld_stdmelding_autoorder = 0,
                           mld_typeopdr_key = NULL,
                           mld_stdmelding_opdrtypevast = 0,
                           mld_stdmelding_default_disc = v_discipline_key
                     WHERE mld_stdmelding_key = rec_std.mld_stdmelding_key;
                END LOOP;
            END IF;
        END;
    END LOOP;


    COMMIT;
--EXCEPTION WHEN OTHERS THEN
--dbms_output.put_line (v_aanduiding);
END;
/

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile