/* Formatted on 19-4-2019 13:56:13 (QP5 v5.336) */
--
-- $Id$
--
-- Importeren bezoekers

DEFINE thisfile = 'FCLT#56045_4.SQL'
DEFINE dbuser   = '^VOLK'

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
    c_park_disc_key        NUMBER
        := fac.safe_to_number (fac.getsetting ('vis_parking_key'));
    v_resnr                VARCHAR2 (100);
    v_errorhint            VARCHAR2 (200);
    v_count                NUMBER;
    v_res_rsv_ruimte_key   NUMBER (10);
    v_bez_afspraak_key     NUMBER (10);
    v_aanvrager_key        NUMBER (10);
    v_gastheer_key         NUMBER (10);
    v_gastheer_naam        VARCHAR2 (100);
    v_van                  DATE;
    v_tot                  DATE;
    v_alg_locatie_key      NUMBER (10);
    v_alg_gebouw_key       NUMBER (10);
    v_alg_gebouw_code      VARCHAR (20);
    v_facilitor            NUMBER (10);
    v_bez_bezoekers_key    NUMBER (10);

    CURSOR c_afspr IS
        SELECT DISTINCT
               aanvr.prs_perslid_key               aanvrager_key,
               voor.prs_perslid_key                voor_key,
               ib.nummer,
               aanvr.prs_perslid_naam_full         aanvrager_naam,
               voor.prs_perslid_naam_full          voor_naam,
               ib.gebouw,
               DECODE (ib.gebouw,
                       'UTRCR1', 'CR1',
                       'DENPE0', 'PE0',
                       'GELJO1', 'JO1')            res_gebouw,
               g.alg_gebouw_key,
               g.alg_locatie_key,
               IB.DATUM || ' ' || IB.START_TIJD    AS start_datum_tijd,
               IB.DATUM || ' ' || IB.EIND_TIJD     AS eind_datum_tijd
          FROM volk_import_bezoekers  IB,
               alg_gebouw             g,
               (SELECT p.prs_perslid_key,
                       p.prs_perslid_nr,
                       pn.prs_perslid_naam_full
                  FROM prs_perslid p, prs_v_perslid_fullnames_all pn
                 WHERE p.prs_perslid_key = pn.prs_perslid_key) aanvr,
               (SELECT p.prs_perslid_key,
                       p.prs_perslid_nr,
                       pn.prs_perslid_naam_full
                  FROM prs_perslid p, prs_v_perslid_fullnames_all pn
                 WHERE p.prs_perslid_key = pn.prs_perslid_key) voor
         WHERE     voor.prs_perslid_nr =
                   TO_CHAR (ib.persnr_voor, 'FM0000000')
               AND aanvr.prs_perslid_nr =
                   TO_CHAR (ib.persnr_aanvrager, 'FM0000000')
               AND g.alg_gebouw_verwijder IS NULL
               AND g.mld_dienstniveau_key = 2
               AND DECODE (ib.gebouw,
                           'UTRCR1', 'CR1',
                           'DENPE0', 'PE0',
                           'GELJO1', 'JO1') =
                   g.alg_gebouw_code;

    CURSOR c_bez IS
        SELECT nummer,
               bezoeker,
               bedrijf,
               DECODE (
                   (DECODE (bez.gebouw,
                            'UTRCR1', 'CR1',
                            'DENPE0', 'PE0',
                            'GELJO1', 'JO1')), --- we kennen in Facilitor alleen parkeerplaatsen in Utrecht en Den Bosch
                   'CR1', COALESCE (park_gewenst, 'Nee'),
                   'PE0', COALESCE (park_gewenst, 'Nee'),
                   'Nee')                  res_park,
               kenteken,
               bez_afspraak_key,
               DECODE (bez.gebouw,
                       'UTRCR1', 'CR1',
                       'DENPE0', 'PE0',
                       'GELJO1', 'JO1')    res_gebouw,
               g.alg_gebouw_key,
               g.alg_locatie_key
          FROM volk_import_bezoekers  bez,
               alg_gebouw             g,
               prs_perslid            a,
               prs_perslid            v
         WHERE     DECODE (bez.gebouw,
                           'UTRCR1', 'CR1',
                           'DENPE0', 'PE0',
                           'GELJO1', 'JO1') =
                   g.alg_gebouw_code
               AND g.mld_dienstniveau_key = 2
               AND bez.persnr_aanvrager = a.prs_perslid_nr
               AND bez.persnr_voor = v.prs_perslid_nr;
BEGIN
    -- met een schone lei beginnen
    DELETE imp_log
     WHERE imp_log_applicatie = 'IMP_BEZ';

    DELETE bez_bezoekers;

    DELETE bez_afspraak;

    DELETE bez_kenmerkwaarde
     WHERE bez_kenmerk_key = 1000;

    DELETE res_rsv_deel
     WHERE res_rsv_deel_key IN
               (SELECT res_rsv_deel_key
                  FROM res_rsv_deel rd, res_deel d
                 WHERE     rd.res_deel_key = d.res_deel_key
                       AND d.res_discipline_key = c_park_disc_key);

    UPDATE volk_import_bezoekers
       SET bez_afspraak_key = ''
     WHERE bez_afspraak_key IS NOT NULL;

    COMMIT;

    v_facilitor := 3;


    --- Stap 1: eerste de afspraken aanmaken
    FOR rec IN c_afspr
    LOOP
        v_errorhint := 'Bepalen begintijd';
        v_van :=
            TO_DATE (rec.start_datum_tijd,
                     'dd-mm-yyyy hh24:mi');

        v_errorhint := 'Bepalen eindtijd';
        v_tot :=
            TO_DATE (rec.eind_datum_tijd,
                     'dd-mm-yyyy hh24:mi');

        v_errorhint := 'Bepalen contactpersoon';
        v_aanvrager_key := rec.aanvrager_key;

        v_errorhint := 'Bepalen gastheer';
        v_gastheer_key := rec.voor_key;


        v_errorhint := 'Naam gastheer/vrouw';
        v_gastheer_naam := rec.voor_naam;

        v_errorhint := 'Bepalen gebouw';
        v_alg_gebouw_key := rec.alg_gebouw_key;
        v_alg_gebouw_code := rec.res_gebouw;

        v_errorhint := 'Bepalen locatie';
        v_alg_locatie_key := rec.alg_locatie_key;


        INSERT INTO bez_afspraak (prs_perslid_key,
                                  bez_afspraak_host_key,
                                  bez_afspraak_contact_key,
                                  bez_afspraak_gastheer,
                                  bez_afspraak_datum,
                                  bez_actie_key,
                                  alg_locatie_key,
                                  res_rsv_ruimte_key,
                                  bez_afspraak_ruimte,
                                  bez_afspraak_opmerking,
                                  bez_afspraak_eind)
             VALUES (v_facilitor,
                     v_gastheer_key,
                     v_aanvrager_key,
                     v_gastheer_naam,
                     v_van,
                     2,
                     v_alg_locatie_key,
                     NULL,
                     v_alg_gebouw_code,
                     'Import vanuit Prequest',
                     v_tot)
          RETURNING bez_afspraak_key
               INTO v_bez_afspraak_key;

        UPDATE volk_import_bezoekers ib
           SET ib.bez_afspraak_key = v_bez_afspraak_key
         WHERE ib.nummer = rec.nummer;
    END LOOP;

    -- Stap 2: bij de zojuist geregistreerde afspraken alle bezoekers aanmaken
    FOR rec IN c_bez
    LOOP
        v_errorhint := 'Toevoegen bezoeker';


        INSERT INTO bez_bezoekers (bez_afspraak_key,
                                   bez_afspraak_naam,
                                   bez_afspraak_bedrijf)
             VALUES (rec.bez_afspraak_key,
                     SUBSTR (rec.bezoeker, 1, 30),
                     SUBSTR (rec.bedrijf, 1, 60))
          RETURNING bez_bezoekers_key
               INTO v_bez_bezoekers_key;


        --Kenmerk kenteken vullen
        IF rec.kenteken IS NOT NULL
        THEN
            INSERT INTO bez_kenmerkwaarde (bez_bezoekers_key,
                                           bez_kenmerk_key,
                                           bez_kenmerkwaarde_waarde)
                 VALUES (v_bez_bezoekers_key, 1000, rec.kenteken);
        END IF;


        -- Parkeerplaats reserveren
        IF UPPER (rec.res_park) = 'JA'
        THEN
            v_errorhint := 'Claimen parkeerplaats';
            bez.claim_parking (v_bez_bezoekers_key, rec.alg_gebouw_key);

            v_errorhint := 'Checken parkeerplaats';

            SELECT bez.hasparking (v_bez_bezoekers_key)
              INTO v_count
              FROM DUAL;

            IF (v_count = 0)
            THEN
                fac.writelog (
                    'IMP_BEZ',
                    'W',
                       'Geen parkeerplaats geclaimd ('
                    || v_bez_bezoekers_key
                    || ')',
                    v_errorhint);
            END IF;
        END IF;
    END LOOP;

    COMMIT;
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