--
-- $Id$
--
-- Script containing customer specific db-configuration for VBGO.
DEFINE thisfile = 'VBGO.SQL'
DEFINE dbuser   = '^VBGO'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF

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

-- Koppeling om persoonsgegevens in te lezen vanuit Synergy van Yask (aangeleverde bestand dat
-- in de VenR omgeving via de mail ontvangen is wordt gekopieerd naar de VBGO omgeving.
CREATE OR REPLACE PROCEDURE vbgo_import_prs (p_import_key IN NUMBER)
AS
    v_seq_of_columns VARCHAR(255);
BEGIN
  -- v_alg_locatie_code 1
  -- v_alg_gebouw_code 2
  -- v_alg_verdieping_volgnr 3
  -- v_alg_ruimte_nr 4
  -- v_prs_werkplek_volgnr 5
  -- v_prs_werkplek_omschrijving 6
  -- v_prs_afdeling_naam 7
  -- v_prs_perslid_naam 8
  -- v_prs_perslid_tussenvoegsel 9
  -- v_prs_perslid_voornaam 10
  -- v_prs_perslid_voorletters 11
  -- v_prs_perslid_partner_naam 12
  -- v_prs_perslid_partner_tussenv 13
  -- v_prs_naamgebruik_code 14             0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
  --                                       1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
  --                                       2 personen die de geboortenaam van de partner willen gebruiken
  --                                       3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
  -- v_prs_perslid_geslacht 15             Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default
  -- v_prs_perslid_telefoonnr 16
  -- v_prs_perslid_mobiel 17
  -- v_prs_perslid_email 18
  -- v_prs_perslid_dienstverband 19
  -- v_prs_perslid_nr 20
  -- v_prs_srtperslid_omschrijving 21
  -- v_prs_perslid_oslogin 22
  -- v_prs_perslid_wachtwoord 23
  -- v_prs_perslid_titel 24
  -- v_prs_perslid_apikey 25
  -- v_dummy 26
  -- v_prs_kenmerk1 27
  -- v_prs_kenmerk2 28
  -- v_prs_kenmerk3 29
  -- v_prs_kenmerk4 30
  -- v_prs_kenmerk5 31
  -- v_prs_kenmerk6 32
  -- v_prs_kenmerk7 33
  -- v_prs_kenmerk8 34
  -- v_prs_kenmerk9 35
  -- v_prs_kenmerk10 36
  -- v_prs_kenmerk11 37
  -- v_prs_kenmerk12 38
  -- v_prs_kenmerk13 39
  -- v_prs_kenmerk14 40
  -- v_prs_kenmerk15 41
  -- v_prs_kenmerk16 42
  -- v_prs_kenmerk17 43
  -- v_prs_kenmerk18 44
  -- v_prs_kenmerk19 45
  -- v_prs_kenmerk20 46
    -- Voeg een lege regel toe anders wordt de eerste persoon geskipped.
    INSERT INTO fac_imp_file (fac_imp_file_line, fac_imp_file_index, fac_import_key)
      VALUES ('Header', 0, p_import_key);
    v_seq_of_columns := '0;0;0;0;0;0;9;4;3;2;0;0;0;0;0;10;11;8;0;1;5;8;0;0;0;0;6;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0';
    prs.import_perslid(p_import_key, v_seq_of_columns, '%');

    UPDATE fac_imp_perslid
       SET prs_perslid_oslogin = UPPER(prs_perslid_oslogin),
           prs_afdeling_naam = 'FS';

    DELETE fac_imp_perslid
     WHERE prs_perslid_oslogin IS NULL;
END;
/

CREATE OR REPLACE PROCEDURE vbgo_update_prs (p_import_key IN NUMBER)
IS
   CURSOR c_del
   IS
      SELECT p.prs_perslid_key
        FROM prs_perslid p
       WHERE p.prs_perslid_verwijder IS NULL        -- Persoon niet verwijderd
             AND p.prs_afdeling_key = 75                               -- FS
             AND p.prs_perslid_nr IS NOT NULL
             AND SUBSTR (COALESCE (p.prs_perslid_oslogin, 'Que'), 1, 1) <> '_'
             AND COALESCE (p.prs_perslid_login, SYSDATE - 300) < SYSDATE - 60 -- Persoon 2 maanden niet ingelogd geweest
             AND NOT EXISTS
                   (SELECT 1
                      FROM fac_imp_perslid i
                     WHERE lower(i.prs_perslid_email) = lower(p.prs_perslid_email));

   v_count   NUMBER;
BEGIN
   SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;

   prs.update_perslid (p_import_key, 'EMAIL', NULL);

   INSERT INTO fac_gebruikersgroep gg (prs_perslid_key, fac_groep_key)
     SELECT p.prs_perslid_key, 487   -- YASK_Default_MLD_BES_RES
       FROM prs_perslid p
      WHERE prs_perslid_verwijder IS NULL
        AND prs_afdeling_key = 75   -- YASK
        AND NOT EXISTS (SELECT 1
                          FROM fac_gebruikersgroep gg2
                         WHERE gg2.fac_groep_key = 487
                           AND p.prs_perslid_key = gg2.prs_perslid_key);

   -- Oppassen dat we geen leeg bestand ontvangen hebben.
   IF v_count > 100
   THEN
      FOR rec IN c_del
      LOOP
         prs.delete_perslid (p_import_key, rec.prs_perslid_key);
      END LOOP;
   END IF;

   COMMIT;
END;
/



-- View voor reserveerbare (werkplek)OBJECTEN, het default thema met key 13
-- Deze core-view wordt direct als kleur-objecten-thema gebruikt, maar kan ook als basis voor een alternatief via worden gebruikt
-- Kijkt nu hard maximaal 42 dagen tov van nu vooruit, wat hopelijk even genoeg is voor alle situaties
-- De verschillende waardevarianten zijn presentatie alternatieven, evt meerdere regels onder elkaar
-- waarde1: Voor hele dagen: Vrij(0) of Bezet (3)
-- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) of het type werkplek (kenmerk bij deel)
-- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij

CREATE OR REPLACE VIEW vbgo_v_thema_wp_res_datum
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
                   FROM DUAL
             CONNECT BY LEVEL <= 42)
      SELECT datum
                 fclt_f_datum,
             ins_deel_key,
             MIN (res_rsv_deel_van)
                 min_van,
             MAX (res_rsv_deel_tot)
                 max_tot,
             CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 ELSE 3                      -- hele dag
                                                                    END
                 waarde1,
             CASE
                 WHEN MAX (res_rsv_deel_tot) IS NULL THEN FAC.safe_to_number(fac_usrdata_code)
                 WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1               -- ochtend
                 WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2                -- middag
                 ELSE 3                                                                  -- hele dag
             END
                 waarde,
             COUNT (res_rsv_deel_tot)                                 -- aantal reservering deze dag
                 waarde3
        FROM (SELECT datums.datum,
                     res_ins_deel_key ins_deel_key,
                     res_rsv_deel_van,
                     res_rsv_deel_tot,
                     fac_usrdata_code
                FROM res_v_aanwezigdeel r,
                     ins_deel          d,
                     datums,
                     ins_kenmerkdeel kd,
                     fac_usrdata ud,
                     (SELECT datum,
                             res_deel_key,
                             res_rsv_deel_van,
                             res_rsv_deel_tot
                        FROM datums, res_v_aanwezigrsv_deel rrd
                       WHERE     res_rsv_deel_van > TRUNC(SYSDATE) - 1        -- negeer alle irrelevante historie sowieso
                             AND datum + 1 >= res_rsv_deel_van
                             AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen
               WHERE     r.res_deel_key = blokkerend.res_deel_key(+)
                     AND datums.datum = blokkerend.datum(+)
                     AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum)
                     AND d.ins_deel_key = r.res_ins_deel_key
                     AND d.ins_deel_key = kd.ins_deel_key
                     AND kd.ins_kenmerk_key = 1        -- type werkplek
                     AND FAC.safe_to_number(ins_kenmerkdeel_waarde) = ud.fac_usrdata_key)
    GROUP BY datum, ins_deel_key, fac_usrdata_code
    ORDER BY datum, ins_deel_key;

-- rapportage voor vergaderdisplays
CREATE OR REPLACE VIEW vbgo_v_rap_res_room_display
AS
    SELECT prs_perslid_naam_friendly
               res_rsv_ruimte_host_friendly,
           res_ruimte_nr,
           TO_CHAR (COALESCE (rrr.res_rsv_ruimte_van, SYSDATE), 'Day')
               dagvdweek,
           TO_CHAR (COALESCE (rrr.res_rsv_ruimte_van, SYSDATE), 'Month')
               maand,
           TO_CHAR (COALESCE (rrr.res_rsv_ruimte_van, SYSDATE), 'YYYY')
               jaar,
           TO_CHAR (COALESCE (rrr.res_rsv_ruimte_van, SYSDATE), 'DD')
               dag,
           DECODE (rrr.res_rsv_ruimte_key, NULL, 'Vrij',
             DECODE(SIGN(rrr.res_rsv_ruimte_van - SYSDATE), 1, 'Vrij', 'Bezet'))
               status,
           TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi')
               res_rsv_ruimte_van,
           TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi')
               res_rsv_ruimte_tot,
           rar.res_alg_ruimte_key
      FROM res_ruimte               rr,
           res_rsv_ruimte           rrr,
           prs_v_perslid_fullnames  pf,
           res_alg_ruimte           rar,
           (SELECT *
              FROM res_v_rsv_ruimte_2_alg_ruimte
             WHERE res_rsv_ruimte_tot > SYSDATE
                   AND TRUNC(res_rsv_ruimte_van) = TRUNC(SYSDATE))
           r2a
     WHERE     rr.res_ruimte_key = r2a.res_ruimte_key(+)
           AND r2a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key(+)
           AND rr.res_ruimte_key = rar.res_ruimte_key;


-- Tijdelijke procedures om reserveringen uit Outlook in te lezen
CREATE OR REPLACE PROCEDURE vbgo_import_res (p_import_key IN NUMBER)
AS
   c_fielddelimitor      VARCHAR2 (1) := ';';
   v_newline             VARCHAR2 (1000);                                              -- Input line
   v_errormsg            VARCHAR2 (1000);
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_aanduiding          VARCHAR2 (200);

   -- De importvelden:
   v_afdelingscode              VARCHAR2 (100);
   v_afdelingsomschrijving      VARCHAR2 (100);
   v_afdelingsparent            VARCHAR2 (100);
   v_zaal                       VARCHAR2(1000);
   v_starttijd                  VARCHAR2(100);
   v_eindtijd                   VARCHAR2(100);
   v_onderwerp                  VARCHAR2(1000);
   v_organisator                VARCHAR2(100);
   v_uitgenodigd                VARCHAR2(1000);
   v_dummy                      VARCHAR2(1000);

   v_perslid_key                NUMBER;
   CURSOR c
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   -- Eerst de importtabel leegmaken
   DELETE vbgo_imp_res;

   FOR rec IN c
   LOOP
      BEGIN
         v_errormsg := 'Fout FETCH te importeren rij';

         v_newline := rec.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_fielddelimitor, v_zaal);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_starttijd);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_eindtijd);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_onderwerp);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_organisator);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_uitgenodigd);

         v_aanduiding := v_zaal || '|' || v_starttijd || '|' || v_eindtijd;

         v_errormsg :=
               'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_aanduiding || ']';

         BEGIN
            SELECT MAX(prs_perslid_key)
              INTO v_perslid_key
              FROM prs_perslid
             WHERE prs_perslid_verwijder IS NULL
               AND UPPER(prs_perslid_email) = UPPER(v_organisator);

         EXCEPTION WHEN NO_DATA_FOUND
         THEN
            fac.imp_writelog (p_import_key,
                              'W',
                              v_errormsg,
                              '');
         END;

         INSERT INTO vbgo_imp_res (zaal,
                                   starttijd,
                                   eindtijd,
                                   onderwerp,
                                   organisator,
                                   uitgenodigd)
                VALUES (v_zaal,
                        v_starttijd,
                        v_eindtijd,
                        v_onderwerp,
                        v_organisator,
                        v_uitgenodigd);

      END;
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        '');
END vbgo_import_res;
/

CREATE OR REPLACE PROCEDURE vbgo_update_res (p_import_key IN NUMBER)
AS
    CURSOR c IS
        SELECT *
          FROM vbgo_imp_res
         WHERE     TO_DATE (starttijd, 'dd-mm-yyyy hh24:mi') > SYSDATE
               AND starttijd NOT LIKE 'Starttijd';

    v_ruimte_opstel_key   NUMBER;
    v_perslid_key         NUMBER;
    v_res_ruimte_key      NUMBER;
    v_rsv_ruimte_key      NUMBER;
    v_reservering_key     NUMBER;
    v_opmerking           VARCHAR2(200);

    v_aanduiding          VARCHAR2 (100);
    v_errorhint           VARCHAR2 (1000);
    v_errormsg            VARCHAR2 (1000);
    oracle_err_num        NUMBER;
    oracle_err_mes        VARCHAR2 (200);
BEGIN
    BEGIN
        FOR rec IN c
        LOOP
            BEGIN
                v_opmerking := NULL;
                v_aanduiding := rec.zaal || '-' || rec.starttijd;
                v_errorhint := 'Opzoeken reserveerbare ruimte: ' || rec.zaal;

                SELECT CASE SUBSTR (rec.zaal, 1, INSTR (rec.zaal, '@') - 1)
                           WHEN 'ams.jordaan' THEN 21 --AMS Vergaderruimte 2 - De Jordaan                   ams.jordaan@vebego.mail.onmicrosoft.com
                           WHEN 'AMS.Albert' THEN 41 --AMS Vergaderruimte 1 - Albert Cuyp          AMS.Albert@vebego.mail.onmicrosoft.com
                           WHEN 'ams.dam' THEN 42   --AMS Vergaderruimte 3 - De dam                     ams.dam@vebego.mail.onmicrosoft.com
                           WHEN 'ams.vondelpark' THEN 61 --AMS Vergaderruimte 6 - Het vondelpark               ams.vondelpark@vebego.mail.onmicrosoft.com
                           WHEN 'ams.rembrandtplein' THEN 62 --AMS Vergaderruimte 5 - Rembrandtplein               ams.rembrandtplein@vebego.mail.onmicrosoft.com
                           WHEN 'ams.johan' THEN 63 --AMS Vergaderruimte 4 - Johan Cruijf Arena           ams.johan@vebego.mail.onmicrosoft.com
                           WHEN 'Vergaderruimte.1.Eindhoven' THEN 81 --EIND Vergaderruimte 1 - Eindhoven                   Vergaderruimte.1.Eindhoven@hago.nl
                           WHEN 'Vergaderruimte.2.Eindhoven' THEN 101 --EIND Vergaderruimte 2 - Eindhoven                  Vergaderruimte.2.Eindhoven@hago.nl
                           WHEN 'Vergaderruimte.3.Eindhoven' THEN 121 --EIND Vergaderruimte 3 - Eindhoven                  Vergaderruimte.3.Eindhoven@hago.nl
                           WHEN 'ruimte1arn' THEN 141  --ARN Vergaderruimte 1 - Arnhem                     ruimte1arn@vebego.mail.onmicrosoft.com
                           WHEN '19' THEN 142 --EIND Vergaderruimte 4 - Eindhoven
                           WHEN 'ruimte2arn' THEN 143  --ARN Vergaderruimte 2 - Arnhem                     ruimte2arn@vebego.mail.onmicrosoft.com
                           WHEN 'ruimte3arn' THEN 144  --ARN Vergaderruimte 3 - Arnhem                     ruimte3arn@vebego.mail.onmicrosoft.com
                           WHEN '22' THEN 161 --EIND Combi ruimte 2&3 - Eindhoven
                           WHEN '23' THEN 161 --EIND Combi ruimte 2&3 - Eindhoven
                           WHEN 'Vergaderruimte1' THEN 181 --DB Vergaderruimte 1 - Den Bosch                    Vergaderruimte1@hagozorg.nl
                           WHEN '25' THEN 201 --DB Vergaderruimte 3 - Den Bosch
                           WHEN 'Vergaderruimte4' THEN 221 --DB Vergaderruimte 4 - Den Bosch                    Vergaderruimte4@hagozorg.nl
                           WHEN 'Vergaderruimte5' THEN 222 --DB Vergaderruimte 5 - Den Bosch                    Vergaderruimte5@hagozorg.nl
                           WHEN 'Vergaderkamer.Capelle.Hago.Zorg' THEN 223 --CAP Vergaderruimte ZW - Capelle                    Vergaderkamer.Capelle.Hago.Zorg@hagozorg.nl
                           WHEN 'Vergaderruimte6' THEN 224 --DB Vergaderruimte 6 - Den Bosch                    Vergaderruimte6@hagozorg.nl
                           WHEN 'Vergaderruimte1CAY' THEN 225 --CAP Vergaderruimte 1 - Capelle                     Vergaderruimte1CAY@hago.nl
                           WHEN 'Vergaderruimte7' THEN 226 --DB Vergaderruimte 7 - Den Bosch                    Vergaderruimte7@hagozorg.nl
                           WHEN 'Vergaderruimte2CAY' THEN 227 --CAP Vergaderruimte 2 - Capelle                     Vergaderruimte2CAY@hago.nl
                           WHEN 'Vergaderruimte8' THEN 228 --DB Vergaderruimte 8 - Den Bosch                    Vergaderruimte8@hagozorg.nl
                           WHEN '34' THEN 229      --CAP Spreekkamer - Capelle
                           WHEN 'Vergaderkamer.heerlen1' THEN 241 --HRL/8 Vergaderruimte 1 - Heerlen                   Vergaderkamer.heerlen1@hagozorg.nl
                           WHEN 'Vergaderkamer.heerlen2' THEN 242 --HRL/8 Vergaderruimte 2 - Heerlen                   Vergaderkamer.heerlen2@hagozorg.nl
                           WHEN 'Vergaderkamer.heerlen3' THEN 243 --HRL/8 Vergaderruimte 3 - Heerlen                   Vergaderkamer.heerlen3@hagozorg.nl
                           WHEN 'Vergaderkamer.heerlen4' THEN 244 --HRL/8 Vergaderruimte 4 - Heerlen                   Vergaderkamer.heerlen4@hagozorg.nl
                           WHEN 'Vergaderkamer.heerlen5' THEN 245 --HRL/8 Vergaderruimte 5 - Heerlen                   Vergaderkamer.heerlen5@hagozorg.nl
                           WHEN 'Vergaderkamer.heerlen.6' THEN 246 --HRL/8 Vergaderruimte 6 - Heerlen                   Vergaderkamer.heerlen.6@hagozorg.nl
                           WHEN '41' THEN 247 --HRL/8 Vergaderruimte 7 - Heerlen
                           WHEN '42' THEN 261 --HRL/8 Vergaderruimte 1 - Heerlen 8A
                           WHEN '43' THEN 262 --HRL/8 Vergaderruimte 2 - Heerlen 8A
                           WHEN '44' THEN 263 --HRL/8 Vergaderruimte 3 - Heerlen 8A
                           WHEN '45' THEN 264 --HRL/8 Vergaderruimte 4 - Heerlen 8A
                           WHEN '45' THEN 265 --HRL/8 Vergaderruimte 5 - Heerlen 8A
                           WHEN '46' THEN 266 --HRL/8 Vergaderruimte 6 - Heerlen 8A
                           ELSE -1
                       END
                  INTO v_res_ruimte_key
                  FROM DUAL;

                v_errorhint := 'Opzoeken opstelling: ' || rec.zaal;

                SELECT res_ruimte_opstel_key
                  INTO v_ruimte_opstel_key
                  FROM res_ruimte_opstelling
                 WHERE     res_ruimte_opstel_verwijder IS NULL
                       AND res_ruimte_key = v_res_ruimte_key;

                BEGIN
                    SELECT prs_perslid_key
                      INTO v_perslid_key
                      FROM prs_perslid
                     WHERE     prs_perslid_verwijder IS NULL
                           AND UPPER (prs_perslid_email) =
                               UPPER (rec.organisator);
                EXCEPTION
                    WHEN NO_DATA_FOUND
                    THEN
                        v_perslid_key := 3;                       -- Facilitor
                        v_opmerking := 'Contactpersoon: ' || rec.organisator;
                END;

                INSERT INTO res_reservering (res_reservering_verwijder)
                     VALUES (NULL)
                  RETURNING res_reservering_key
                       INTO v_reservering_key;

                v_errormsg := 'Fout toevoegen rsv_ruimte.';

                INSERT INTO res_rsv_ruimte (res_reservering_key,
                                            res_rsv_ruimte_volgnr,
                                            res_rsv_ruimte_opmerking,
                                            res_rsv_ruimte_omschrijving,
                                            prs_kostenplaats_key,
                                            res_rsv_ruimte_contact_key,
                                            res_rsv_ruimte_host_key,
                                            res_ruimte_opstel_key,
                                            res_activiteit_key,
                                            res_rsv_ruimte_van,
                                            res_rsv_ruimte_tot,
                                            res_rsv_ruimte_bezoekers,
                                            res_status_fo_key,
                                            res_status_bo_key)
                     VALUES (v_reservering_key,
                             1,
                             v_opmerking,
                             rec.onderwerp,
                             NULL,
                             v_perslid_key,
                             v_perslid_key,
                             v_ruimte_opstel_key,
                             10,                                -- vergadering
                             TO_DATE (rec.starttijd, 'DD-MM-YYYY:HH24:MI'),
                             TO_DATE (rec.eindtijd, 'DD-MM-YYYY:HH24:MI'),
                             NULL,
                             2,
                             2)
                  RETURNING res_rsv_ruimte_key
                       INTO v_rsv_ruimte_key;

                FAC.trackaction ('RESNEW',
                                 v_rsv_ruimte_key,
                                 3,
                                 SYSDATE,
                                 'Aangemaakt door conversie uit Outook');

                RES.set_ruimte_dirty (v_rsv_ruimte_key);

                fac.imp_writelog (p_import_key,
                                  'I',
                                  'Reservering is aangemaakt: '  || v_rsv_ruimte_key,
                                  v_aanduiding);
            EXCEPTION
                WHEN OTHERS
                THEN
                    oracle_err_num := SQLCODE;
                    oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                    v_errormsg :=
                           'OTHERS (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                    fac.imp_writelog (p_import_key,
                                      'E',
                                      v_aanduiding || v_errormsg,
                                      v_errorhint);
            END;
        END LOOP;

    EXCEPTION
        WHEN OTHERS
        THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                   'OTHERS (error '
                || oracle_err_num
                || '/'
                || oracle_err_mes
                || ')';
            fac.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              v_errorhint);
    END;
END;
/

CREATE OR REPLACE PROCEDURE vbgo_import_mailomzetting (p_import_key IN NUMBER)
AS

    CURSOR f IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;

    v_newline           fac_imp_file.fac_imp_file_line%TYPE;                                               -- Input line
    v_header_is_valid   NUMBER;
    v_count             NUMBER;
    v_field             VARCHAR2(100);
    v_index             NUMBER (2);
    v_old_email_index   NUMBER := NULL;
    v_new_email_index   NUMBER := NULL;
    v_name_index        NUMBER := NULL;
    v_old_email         VARCHAR2(200);
    v_new_email         VARCHAR2(200);
    v_name              VARCHAR2(200);
    c_delim             VARCHAR2(1) := ';';
BEGIN
    v_header_is_valid := 0;

    FOR rec IN f
    LOOP
        v_newline := rec.fac_imp_file_line;

        IF v_header_is_valid = 0
        THEN
            IF rec.fac_imp_file_index = 1
            THEN
               v_index := 0;
               v_field := 'QueQeLeQue';
               WHILE v_field IS NOT NULL AND  v_index < 30
               LOOP
                  fac.imp_getfield (v_newline, c_delim, v_field);
                  v_index := v_index + 1;
                  CASE UPPER(v_field)
                  WHEN 'CUSTOMER EMAIL'      THEN v_old_email_index := v_index;
                  WHEN 'NIEUWE UPN'          THEN v_new_email_index := v_index;
                  WHEN 'CUSTOMER NAME'       THEN v_name_index := v_index;
                  ELSE
                     NULL;
                  END CASE;
               END LOOP;
            END IF;

            IF     v_old_email_index IS NOT NULL
               AND v_new_email_index IS NOT NULL
               AND v_name_index IS NOT NULL
            THEN
                v_header_is_valid := 1;
            END IF;
        ELSIF v_newline NOT LIKE ';;;;;;;;%'
        THEN
            fac.imp_getfield_nr (v_newline, c_delim, v_old_email_index, v_old_email);
            fac.imp_getfield_nr (v_newline, c_delim, v_new_email_index, v_new_email);
            fac.imp_getfield_nr (v_newline, c_delim, v_name_index, v_name);

            SELECT COUNT (*)
              INTO v_count
              FROM prs_perslid
             WHERE prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_email) = UPPER (v_old_email);

            IF v_count = 0
            THEN
               fac.imp_writelog (p_import_key, 'W', 'Persoon is niet gevonden: ' || v_name || ' <' || v_old_email || '>', '');
            END IF;

            IF v_count > 1
            THEN
                fac.imp_writelog (p_import_key, 'E', 'Persoon is ' || v_count || ' keer gevonden: ' || v_name || ' <' || v_old_email || '>', '');
            END IF;

            IF v_count = 1
            THEN
                fac.imp_writelog (p_import_key, 'I', 'Persoon is gevonden: ' || v_name || ' <' || v_old_email || '>', '');
            END IF;
        END IF;
    END LOOP;

    IF v_header_is_valid = 0
    THEN
        fac.imp_writelog (p_import_key, 'W', 'Geen geldige header aangetroffen', '');
    END IF;
END;
/

CREATE OR REPLACE PROCEDURE vbgo_update_mailomzetting (p_import_key IN NUMBER)
AS
    CURSOR f IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;

    v_newline             fac_imp_file.fac_imp_file_line%TYPE;                                               -- Input line
    v_header_is_valid     NUMBER;
    v_count               NUMBER;
    v_field               VARCHAR2(100);
    v_index               NUMBER (2);
    v_old_email_index     NUMBER := NULL;
    v_new_email_index     NUMBER := NULL;
    v_name_index          NUMBER := NULL;
    v_old_email           VARCHAR2(200);
    v_new_email           VARCHAR2(200);
    v_name                VARCHAR2(200);
    c_delim               VARCHAR2(1) := ';';

    v_errormsg            VARCHAR2 (1000);
    oracle_err_num        NUMBER;
    oracle_err_mes        VARCHAR2 (200);
    v_aanduiding          VARCHAR2 (200);
    v_prs_perslid_key     NUMBER;
BEGIN
    v_aanduiding := 'Initialisatie';
    v_header_is_valid := 0;

    v_header_is_valid := 0;

    FOR rec IN f
    LOOP
        BEGIN
           v_newline := rec.fac_imp_file_line;

           IF v_header_is_valid = 0
           THEN
               IF rec.fac_imp_file_index = 1
               THEN
                  v_index := 0;
                  v_field := 'QueQeLeQue';
                  WHILE v_field IS NOT NULL AND  v_index < 30
                  LOOP
                     fac.imp_getfield (v_newline, c_delim, v_field);
                     v_index := v_index + 1;
                     CASE UPPER(v_field)
                     WHEN 'CUSTOMER EMAIL'      THEN v_old_email_index := v_index;
                     WHEN 'NIEUWE UPN'          THEN v_new_email_index := v_index;
                     WHEN 'CUSTOMER NAME'       THEN v_name_index := v_index;
                     ELSE
                        NULL;
                     END CASE;
                  END LOOP;
               END IF;

               IF     v_old_email_index IS NOT NULL
                  AND v_new_email_index IS NOT NULL
                  AND v_name_index IS NOT NULL
               THEN
                   v_header_is_valid := 1;
               END IF;
           ELSIF v_newline NOT LIKE ';;;;;;;;%'
           THEN
               fac.imp_getfield_nr (v_newline, c_delim, v_old_email_index, v_old_email);
               fac.imp_getfield_nr (v_newline, c_delim, v_new_email_index, v_new_email);
               fac.imp_getfield_nr (v_newline, c_delim, v_name_index, v_name);

               SELECT COUNT (*)
                 INTO v_count
                 FROM prs_perslid
                WHERE prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_email) = UPPER (v_old_email);

               IF v_count = 1
               THEN
                  SELECT prs_perslid_key
                    INTO v_prs_perslid_key
                    FROM prs_perslid
                   WHERE prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_email) = UPPER (v_old_email);

                   UPDATE prs_perslid
                      SET prs_perslid_email = v_new_email
                    WHERE prs_perslid_key = v_prs_perslid_key;

                   BEGIN fac.trackaction('PRSUPD', v_prs_perslid_key, NULL, NULL, 'E-mail: ' || v_old_email || ' --> ' || v_new_email); END;
                   fac.imp_writelog (p_import_key, 'I', 'Email is aangepast: ' || v_name || ' <' || v_old_email || '>', '');
               END IF;
           END IF;

        EXCEPTION WHEN OTHERS
        THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
            fac.imp_writelog (p_import_key,
                              'E',
                              v_errormsg,
                              v_aanduiding);
        END;
    END LOOP;

    IF v_header_is_valid = 0
    THEN
        fac.imp_writelog (p_import_key, 'W', 'Geen geldige header aangetroffen', '');
    END IF;
END;
/

-- View om een catalogus te exporteren die daarna weer ingelezen kan worden.
-- Hopelijk komt hier met YAXX#78417 een generieke oplossing voor.
CREATE OR REPLACE VIEW vbgo_v_rap_sync_catalogus
AS
    SELECT d.ins_discipline_omschrijving                                                       catalogus_naam,
           b.prs_bedrijf_naam                                                                  leverancier,
           NULL                                                                                cat_datum,
           sd.bes_srtdeel_nr                                                                   artikelnr,
           sg.bes_srtgroep_omschrijving                                                        groep,
           sd.bes_srtdeel_omschrijving                                                         omschrijving,
           REPLACE (TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)), ',', '.')        prijs,
           sd.bes_srtdeel_eenheid                                                              eenheid,
           sd.bes_srtdeel_image                                                                picture,
           sd.bes_srtdeel_veelvoud                                                             orderaantal,
           sd.bes_srtdeel_btw                                                                  tax,
           TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd')                                    duedate,
           REPLACE (TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)), ',', '.')     inkoopprijs,
           bes_srtdeel_minimum                                                                 minimum,
           bes_staffeltabel_naam                                                               staffeltabel,
           bes_srtdeel_wijzigdagen                                                             wijzigdagen,
           bes_srtdeel_annuleerdagen                                                           annuleerdagen,
           bes_srtdeel_opmerking                                                               opmerking
      FROM bes_srtdeel       sd,
           bes_srtgroep      sg,
           bes_discipline    d,
           prs_bedrijf       b,
           bes_staffeltabel  st
     WHERE     sd.bes_srtgroep_key = sg.bes_srtgroep_key
           AND sg.ins_discipline_key = d.ins_discipline_key
           AND sd.prs_bedrijf_key = b.prs_bedrijf_key
           AND sd.bes_staffeltabel_key = st.bes_staffeltabel_key(+)
           AND sd.bes_srtdeel_verwijder IS NULL
           AND sg.bes_srtgroep_verwijder IS NULL;


-- Views overgenomen uit de Yask omgeving
CREATE OR REPLACE VIEW vbgo_v_kosten_doorbelasting
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer,
       m.mld_melding_key,
       l.alg_locatie_omschrijving meldinglocatie,
       pf.prs_perslid_naam_full melder,
       sd.ins_srtdiscipline_omschrijving soortmelding,
       d.ins_discipline_omschrijving productgroep,
       std.mld_stdmelding_omschrijving subproductgroep,
       ksm.prs_kostensoort_oms melding_nen_omschrijving,
       ksm.prs_kostensoort_refcode melding_nen_code,
       CASE
           WHEN m.mld_melding_status = 5 AND m.mld_melding_afgerond = 1
           THEN
               'Afgerond'
           ELSE
               ms.mld_statuses_omschrijving
       END
           meldingstatus,
       fs.fac_usrdata_omschr facturatiestatus,
       m.mld_melding_datum meldingdatum,
       MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld,
       m.mld_melding_onderwerp onderwerp,
       m.mld_melding_omschrijving vomschrijving,
       sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdrachtnummer,
       ot.mld_typeopdr_omschrijving opdrachttype,
       so.mld_statusopdr_omschrijving opdrachtstatus,
       o.mld_opdr_omschrijving opdrachtomschrijving,
       kso.prs_kostensoort_oms opdracht_nen_omschrijving,
       b.prs_bedrijf_naam opdrachtuitvoerende,
       o.mld_opdr_kosten opdrachtkosten,
       'Geen' soortopslag,
       0 opslag,
       o.mld_opdr_kosten  kostenplusopslag,
       NULL geenopslag,
       NULL boekmaand,
       aog.alg_gebouw_naam meldinggebouw,
       (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding km WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 182) klant_inkoopordernr,  -- keys uit Yask omgeving.
       (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding km WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 181) klant_kostenplaats,
       (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding km WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 183) klant_werkorder,
       o.mld_opdr_key,
       l.alg_district_key
  FROM prs_v_perslid_fullnames_all  pf,
       prs_kostensoort          ksm,
       mld_statuses             ms,
       mld_opdr                 o,
       mld_typeopdr             ot,
       mld_statusopdr           so,
       prs_bedrijf              b,
       alg_locatie              l,
       prs_kostensoort          kso,
       mld_melding              m,
       mld_stdmelding           std,
       ins_tab_discipline       d,
       ins_srtdiscipline        sd,
       alg_v_allonrgoed_gegevens aog,
       (SELECT mld_melding_key, fac_usrdata_omschr
          FROM fac_usrdata ud, mld_kenmerkmelding km
         WHERE     km.mld_kenmerk_key = 1 -- Facturatiestatus
               AND FAC.safe_to_number (mld_kenmerkmelding_waarde) =
                   ud.fac_usrdata_key) fs
 WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
       AND std.mld_ins_discipline_key = d.ins_discipline_key
       AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
       AND std.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
       AND m.mld_melding_status = ms.mld_statuses_key
       AND m.mld_melding_key = fs.mld_melding_key(+)
       AND m.mld_melding_key = o.mld_melding_key
       AND m.prs_perslid_key = pf.prs_perslid_key
       AND m.mld_alg_locatie_key = l.alg_locatie_key
       AND o.mld_typeopdr_key = ot.mld_typeopdr_key
       AND o.mld_statusopdr_key = so.mld_statusopdr_key
       AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
       AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+);

--yask_v_kosten_export_power_bi
CREATE OR REPLACE VIEW vbgo_v_kosten_export_power_bi
AS
    SELECT d.meldingnummer,
           d.mld_melding_key,
           d.meldinglocatie,
           u.melding_gebouw,
           u.melding_gebouwcode,
           d.melder,
           d.soortmelding,
           d.productgroep,
           d.subproductgroep,
           d.melding_nen_omschrijving,
           d.melding_nen_code,
           d.meldingstatus,
           d.facturatiestatus,
           d.meldingdatum,
           d.afgemeld,
           d.onderwerp,
           d.vomschrijving,
           d.opdrachtnummer,
           d.opdrachttype,
           d.opdrachtstatus,
           d.opdrachtomschrijving,
           d.opdracht_nen_omschrijving,
           d.opdrachtuitvoerende,
           d.opdrachtkosten,
           d.soortopslag,
           d.opslag,
           d.kostenplusopslag,
           d.geenopslag,
           d.boekmaand,
           d.klant_inkoopordernr,
           d.klant_kostenplaats,
           d.klant_werkorder,
           d.mld_opdr_key,
           u.sla_accpturen,
           u.plan_uitvoertijd_sla,
           u.accept_sla_dagen,
           u.accept_sla_uren,
           u.afspraak_sla_dagen,
           u.accept_sla_optijd,
           u.uitvoering_sla_optijd,
           u.afspraak_sla_optijd,
           u.melding_afgemeld datum_afgemeld,
           u.melding_accepted datum_acceptatie,
           u.melding_datum datum_aanmaak,
           u.fclt_3d_locatie_key
      FROM vbgo_v_kosten_doorbelasting d, mld_v_udr_melding u
     WHERE d.mld_melding_key = u.melding_key;

-- Tijdelijke versie van de UDR view omdat in de originele view de kostenplaats hard wordt vereist.
-- Melding VBGO#70402 aangemaakt om de UDR view aan te passen.
-- VBGO#71830: Bestelkenmerk met key=101=Vebego onderdeel opnemen als kolom.
CREATE OR REPLACE VIEW vbgo_v_udr_bestelling
AS
    SELECT bes_bestelling_key,
           bestelaanvraagnr,
           besteldatum,
           bedrijf_naam,
           besteller,
           invoerder,
           kostensoortgroep,
           kostensoort,
           kpn,
           kpn_omschrijving,
           prs_afdeling_key,
           afdeling_code,
           afdeling_omschrijving,
           alg_locatie_key,
           locatie_code,
           regio_omschrijving,
           district_omschijving,
           afleveradres,
           afleverplaats,
           mandaat,
           ins_discipline_key,
           catalogus,
           groep,
           productomschrijving,
           productcode,
           afleverdatum,
           doorlooptijd_werkdgn,
           sla_tijd,
           prijs,
           inkoopprijs,
           status,
           gefiatteerddoor,
           bestelopdrachtnummer,
           aantal,
           itemprijs,
           iteminkoopprijs,
           itemposnr,
           vebego_onderdeel
      FROM (SELECT b.bes_bestelling_key
                       bes_bestelling_key,
                   'A-' || b.bes_bestelling_key
                       bestelaanvraagnr,
                   b.bes_bestelling_datum
                       besteldatum,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = p.prs_perslid_key)
                       besteller,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key =
                           COALESCE (
                               fac.gettrackinguserkey ('BESNEW',
                                                       b.bes_bestelling_key),
                               fac.gettrackinguserkey ('BESAP2',
                                                       b.bes_bestelling_key)))
                       invoerder,
                   (SELECT ksg.prs_kostensoortgrp_oms
                      FROM prs_kostensoortgrp ksg, prs_kostensoort ks
                     WHERE     ksg.prs_kostensoortgrp_key =
                               ks.prs_kostensoortgrp_key
                           AND ks.prs_kostensoort_key =
                               (SELECT MAX (
                                           COALESCE (
                                               bsg.prs_kostensoort_key,
                                               disc.prs_kostensoort_key))
                                  FROM bes_discipline disc, bes_srtgroep bsg
                                 WHERE disc.ins_discipline_key =
                                       d.ins_discipline_key))
                       kostensoortgroep,
                   (SELECT ks.prs_kostensoort_oms
                      FROM prs_kostensoort ks
                     WHERE ks.prs_kostensoort_key =
                           (SELECT MAX (
                                       COALESCE (bsg.prs_kostensoort_key,
                                                 disc.prs_kostensoort_key))
                              FROM bes_discipline disc, bes_srtgroep bsg
                             WHERE     disc.ins_discipline_key =
                                       bsg.ins_discipline_key
                                   AND disc.ins_discipline_key =
                                       d.ins_discipline_key))
                       kostensoort,
                   k.prs_kostenplaats_nr
                       kpn,
                   k.prs_kostenplaats_omschrijving
                       kpn_omschrijving,
                   (SELECT b.prs_bedrijf_naam
                      FROM prs_bedrijf b
                     WHERE b.prs_bedrijf_key = sd.prs_bedrijf_key)
                       bedrijf_naam,
                   a.prs_afdeling_key,
                   a.prs_afdeling_naam
                       afdeling_code,
                   a.prs_afdeling_omschrijving
                       afdeling_omschrijving,
                   ma.alg_locatie_key
                       alg_locatie_key,
                   (SELECT alg_locatie_code
                      FROM alg_locatie l
                     WHERE l.alg_locatie_key = ma.alg_locatie_key)
                       locatie_code,
                   (SELECT alg_regio_omschrijving
                      FROM alg_locatie l, alg_district d, alg_regio r
                     WHERE     r.alg_regio_key = d.alg_regio_key
                           AND l.alg_district_key = d.alg_district_key
                           AND l.alg_locatie_key = ma.alg_locatie_key)
                       regio_omschrijving,
                   (SELECT alg_district_omschrijving
                      FROM alg_locatie l, alg_district d
                     WHERE     l.alg_district_key = d.alg_district_key
                           AND l.alg_locatie_key = ma.alg_locatie_key)
                       district_omschijving,
                   ma.mld_adres_naam
                       afleveradres,
                   b.bes_bestelling_plaats
                       afleverplaats,
                   NVL ((SELECT pr.fac_profiel_limiet
                           FROM fac_profiel pr
                          WHERE p.fac_profiel_key = pr.fac_profiel_key),
                        0)
                       mandaat,
                   d.ins_discipline_key
                       ins_discipline_key,
                   d.ins_discipline_omschrijving
                       catalogus,
                   sg.bes_srtgroep_omschrijving
                       groep,
                   b.bes_bestelling_leverdatum
                       afleverdatum,
                   fac.count_work_days (
                       b.bes_bestelling_datum,
                       NVL (
                           fac.gettrackingdate ('BESOTV',
                                                b.bes_bestelling_key),
                           SYSDATE))
                       doorlooptijd_werkdgn,
                   NVL (
                       (SELECT bdp.bes_disc_params_leverdagen
                          FROM bes_disc_params bdp
                         WHERE d.ins_discipline_key =
                               bdp.bes_ins_discipline_key),
                       0)
                       sla_tijd,
                   sd.bes_srtdeel_nr
                       productcode,
                     bi.bes_bestelling_item_prijs
                   * bi.bes_bestelling_item_aantal
                       prijs,
                     NVL (
                         bes.getsrtdeelinkprijs (sd.bes_srtdeel_key,
                                                 bes_bestelling_datum),
                         bi.bes_bestelling_item_prijs)
                   * bi.bes_bestelling_item_aantal
                       inkoopprijs,
                   (SELECT bes_bestellingstatuses_omschr
                      FROM bes_bestellingstatuses bs
                     WHERE bs.bes_bestellingstatuses_key =
                           b.bes_bestelling_status)
                       status,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = b.bes_bestelling_fiat_user)
                       gefiatteerddoor,
                   'O-' || bo.bes_bestelopdr_id
                       bestelopdrachtnummer,
                   bi.bes_bestelling_item_aantal
                       aantal,
                   bi.bes_bestelling_item_prijs
                       itemprijs,
                   NVL (
                       bes.getsrtdeelinkprijs (sd.bes_srtdeel_key,
                                               bes_bestelling_datum),
                       bi.bes_bestelling_item_prijs)
                       iteminkoopprijs,
                   sd.bes_srtdeel_omschrijving
                       productomschrijving,
                   boi.bes_bestelopdr_item_posnr
                       itemposnr,
                   vo.fac_usrdata_omschr vebego_onderdeel
              FROM bes_bestelling       b,
                   prs_perslid          p,
                   prs_afdeling         a,
                   prs_kostenplaats     k,
                   mld_adres            ma,
                   bes_bestelling_item  bi,
                   bes_bestelopdr_item  boi,
                   bes_bestelopdr       bo,
                   bes_srtdeel          sd,
                   bes_srtgroep         sg,
                   ins_tab_discipline   d,
                   (SELECT kb.bes_bestelling_key, ud.fac_usrdata_omschr
                      FROM bes_kenmerkbestell kb, fac_usrdata ud
                     WHERE kb.bes_kenmerkbestell_verwijder IS NULL
                           AND kb.bes_kenmerk_key = 101       -- Vebego onderdeel
                           AND fac.safe_to_number (kb.bes_kenmerkbestell_waarde) = ud.fac_usrdata_key) vo
             WHERE b.prs_perslid_key = p.prs_perslid_key
                   AND p.prs_afdeling_key = a.prs_afdeling_key
                   AND b.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
                   AND b.mld_adres_key_lev = ma.mld_adres_key
                   AND b.bes_bestelling_key = bi.bes_bestelling_key
                   AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key(+)
                   AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
                   AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                   AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                   AND sg.ins_discipline_key = d.ins_discipline_key
                   AND b.bes_bestelling_key = vo.bes_bestelling_key(+));
/*
CREATE OR REPLACE VIEW VBGO_V_RES_WP_DAG_BEZETTING
(
   RES_RSV_RUIMTE_VAN,
   RES_RSV_RUIMTE_TOT,
   RES_RUIMTE_OPSTEL_KEY,
   RES_RSV_RUIMTE_VERWIJDER,
   RES_RSV_RUIMTE_KEY,
   RES_STATUS_FO_KEY,
   N8,
   N9,
   N10,
   N11,
   N12,
   N13,
   N14,
   N15,
   N16,
   N17
)
AS
     SELECT res_rsv_deel_key,
            res_rsv_deel_van,
            res_rsv_deel_tot,
            SUM (DECODE (uurnum, 8, n_uur)) n8,
            SUM (DECODE (uurnum, 9, n_uur)) n9,
            SUM (DECODE (uurnum, 10, n_uur)) n10,
            SUM (DECODE (uurnum, 11, n_uur)) n11,
            SUM (DECODE (uurnum, 12, n_uur)) n12,
            SUM (DECODE (uurnum, 13, n_uur)) n13,
            SUM (DECODE (uurnum, 14, n_uur)) n14,
            SUM (DECODE (uurnum, 15, n_uur)) n15,
            SUM (DECODE (uurnum, 16, n_uur)) n16,
            SUM (DECODE (uurnum, 17, n_uur)) n17
       FROM (SELECT res_rsv_deel_key,
                    res_rsv_deel_van,
                    res_rsv_deel_tot,
                    uurnum,
                    CASE
                       WHEN res.van <= uurnum + 0.00 AND res.tot >= uurnum + 0.25
                       THEN 1 / 4
                       ELSE 0
                    END
                    + CASE
                         WHEN res.van <= uurnum + 0.25 AND res.tot >= uurnum + 0.50
                         THEN 1 / 4
                         ELSE 0
                      END
                    + CASE
                         WHEN res.van <= uurnum + 0.50 AND res.tot >= uurnum + 0.75
                         THEN 1 / 4
                         ELSE 0
                      END
                    + CASE
                         WHEN res.van <= uurnum + 0.75 AND res.tot >= uurnum + 1.00
                         THEN 1 / 4
                         ELSE 0
                      END
                       n_uur
               FROM (SELECT rrd.res_rsv_deel_key,
                            (rrd.res_rsv_deel_van - TRUNC (rrd.res_rsv_deel_van)) * 24
                               van,
                            (rrd.res_rsv_deel_tot - TRUNC (rrd.res_rsv_deel_tot)) * 24
                               tot,
                            rrd.res_rsv_deel_van,
                            rrd.res_rsv_deel_tot
                       FROM res_rsv_deel rrd, res_rsv_ruimte rrr, res_deel rd, ins_deel d
                      WHERE rrd.res_rsv_deel_verwijder IS NULL
                            AND rrd.res_rsv_deel_dirtlevel = 0
                            --AND TO_CHAR (rrd.res_rsv_deel_tot, 'd') BETWEEN '2' AND '6'
                            --AND NOT EXISTS (SELECT 1 FROM mld_vrije_dagen WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (rrd.res_rsv_deel_tot))
                            AND TRUNC (rrd.res_rsv_deel_van) = TRUNC (rrd.res_rsv_deel_tot) -- Eendaags!
                            AND rrd.res_rsv_deel_tot BETWEEN TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND TRUNC (SYSDATE + 7, 'iw')
                            AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
                            AND rrr.res_status_fo_key(+) IN (1, 2) -- Optie/Definitief
                            AND rrr.res_activiteit_key = 30 -- Reservering werkplekken
                            AND rrd.res_deel_key = rd.res_deel_key
                            AND rd.res_ins_deel_key = d.ins_deel_key
                            AND COALESCE (d.ins_alg_ruimte_type_org, d.ins_alg_ruimte_type) = 'R') res, -- Noodzakelijk?
                    (    SELECT 8 + LEVEL - 1 uurnum
                           FROM DUAL
                     CONNECT BY LEVEL <= 10) uren)
   GROUP BY res_rsv_deel_key,
            res_rsv_deel_van,
            res_rsv_deel_tot;
*/
CREATE OR REPLACE VIEW VBGO_V_RAP_RES_BZG
(
   hide_f_sortering,
   fclt_3d_locatie_key,
   locatie,
   datum,
   zaal,
   uur_08_09,
   uur_09_10,
   uur_10_11,
   uur_11_12,
   uur_12_13,
   uur_13_14,
   uur_14_15,
   uur_15_16,
   uur_16_17,
   uur_17_18
)
AS
   SELECT TO_CHAR (x.res_rsv_ruimte_van, 'yyyymmdd') || l.alg_locatie_code sortering,
          l.alg_locatie_key,
          l.alg_locatie_code locatie,
          TRUNC (x.res_rsv_ruimte_van) datum,
          rr.res_ruimte_nr zaal,
          x.n8,
          x.n9,
          x.n10,
          x.n11,
          x.n12,
          x.n13,
          x.n14,
          x.n15,
          x.n16,
          x.n17
     FROM res_v_res_dag_bezetting x,
          res_ruimte_opstelling rro,
          (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
               FROM res_alg_ruimte
              WHERE res_alg_ruimte_verwijder IS NULL
           GROUP BY res_ruimte_key) rar1,
          (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
               FROM res_alg_ruimte
              WHERE res_alg_ruimte_verwijder IS NOT NULL
           GROUP BY res_ruimte_key) rar2,
          --alg_v_allonrgoed_gegevens aog,         -- Ook verwijderde ruimten!
          alg_v_allonroerendgoed aog,              -- Ook verwijderde ruimten!
          alg_locatie l,                           -- Ook verwijderde locaties
          res_ruimte rr
    WHERE x.res_rsv_ruimte_verwijder IS NULL
          AND x.res_status_fo_key IN (1, 2)                -- Optie/Definitief
          AND x.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
          AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
          AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
          AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) = aog.alg_ruimte_key
          AND aog.alg_locatie_key = l.alg_locatie_key
          AND rro.res_ruimte_key = rr.res_ruimte_key;

-- Rapportage overgenomen uit de VENR omgeving.
-- TODO: Keys aanpassen
-- VENR#65754: Opdrachtgegevens incl. kenmerken (afgeleid van mld_v_udr_opdrachtkenmerk_cnd).
-- VENR#69955: Uitbreiden met de SLA-velden van de bovenliggende melding + (sub)productgroep.
CREATE OR REPLACE VIEW vbgo_v_udr_opdrachten
(
   opdracht_key,
   opdracht_nummer,
   opdracht_regio,
   opdracht_district,
   opdracht_locatie_code,
   opdracht_locatie,
   opdracht_locatieplaats,
   fclt_3d_locatie_key,
   opdracht_gebouwcode,
   opdracht_gebouw,
   opdracht_verdieping,
   opdracht_ruimtenr,
   opdracht_ruimte,
   opdracht_kostenplaats,
   opdracht_kostenplaats_oms,
   melding_key,
   opdracht_type,
   opdracht_volgnummer,
   opdracht_status,
   opdracht_duur_gepland,
   opdracht_datum,
   opdracht_einddatum,
   opdracht_plandatum,
   opdracht_acceptdatum,
   opdracht_afgemeld,
   opdracht_doorlooptijd,
   opdracht_accepttijd,
   opdracht_omschrijving,
   opdracht_opmerking,
   opdracht_uitvoerende,
   opdracht_uitvoerende_contact,
   opdracht_behandelaar,
   opdracht_contract,
   opdracht_contract_versie,
   opdracht_contactpersoon,
   opdracht_uren,
   opdracht_correctie,
   opdracht_materiaal,
   opdracht_uurtarief,
   opdracht_kosten,
   opdracht_parent_key,
   opdracht_parent_nummer,
   opdracht_parent_volgnummer,
   opdracht_verstrektdatum,
   opdracht_lev_doorloopdagen,
   opdracht_lev_doorloopuren,
   refnr_lev,
   klant,
   accept_sla_dagen,
   accept_sla_uren,
   uitvoering_sla_dagen,
   uitvoering_sla_uren,
   afspraak_sla_dagen,
   afspraak_sla_uren,
   accept_sla_optijd,
   uitvoering_sla_optijd,
   afspraak_sla_optijd,
   productgroep,
   subproductgroep
)
AS
  SELECT o.opdracht_key,
          o.opdracht_nummer,
          o.opdracht_regio,
          o.opdracht_district,
          o.opdracht_locatie_code,
          o.opdracht_locatie,
          o.opdracht_locatieplaats,
          o.fclt_3d_locatie_key,
          o.opdracht_gebouwcode,
          o.opdracht_gebouw,
          o.opdracht_verdieping,
          o.opdracht_ruimtenr,
          o.opdracht_ruimte,
          o.opdracht_kostenplaats,
          o.opdracht_kostenplaats_oms,
          o.melding_key,
          o.opdracht_type,
          o.opdracht_volgnummer,
          o.opdracht_status,
          o.opdracht_duur_gepland,
          o.opdracht_datum,
          o.opdracht_einddatum,
          o.opdracht_plandatum,
          o.opdracht_acceptdatum,
          o.opdracht_afgemeld,
          o.opdracht_doorlooptijd,
          o.opdracht_accepttijd,
          o.opdracht_omschrijving,
          o.opdracht_opmerking,
          o.opdracht_uitvoerende,
          o.opdracht_uitvoerende_contact,
          o.opdracht_behandelaar,
          o.opdracht_contract,
          o.opdracht_contract_versie,
          o.opdracht_contactpersoon,
          o.opdracht_uren,
          o.opdracht_correctie,
          o.opdracht_materiaal,
          o.opdracht_uurtarief,
          o.opdracht_kosten,
          o.opdracht_parent_key,
          o.opdracht_parent_nummer,
          o.opdracht_parent_volgnummer,
          o.opdracht_verstrektdatum,
          o.opdracht_lev_doorloopdagen,
          o.opdracht_lev_doorloopuren,
          ko4.mld_kenmerkopdr_waarde,
          km5.fac_usrdata_omschr,
          m.accept_sla_dagen,
          m.accept_sla_uren,
          m.uitvoering_sla_dagen,
          m.uitvoering_sla_uren,
          m.afspraak_sla_dagen,
          m.afspraak_sla_uren,
          m.accept_sla_optijd,
          m.uitvoering_sla_optijd,
          m.afspraak_sla_optijd,
          m.productgroep,
          m.subproductgroep
     FROM mld_v_udr_opdracht o,
          mld_v_udr_melding m,
          (SELECT ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde
             FROM mld_v_aanwezigkenmerkopdr ko
            WHERE EXISTS
                     (SELECT 1
                        FROM mld_kenmerk
                       WHERE mld_srtkenmerk_key = 341
                             AND mld_kenmerk_key = ko.mld_kenmerk_key)) ko4, -- Refnr. Leverancier
          (SELECT km.mld_melding_key, ud.fac_usrdata_omschr
             FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
            WHERE fac.safe_to_number (km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key
                  AND EXISTS
                        (SELECT 1
                           FROM mld_kenmerk
                          WHERE mld_srtkenmerk_key = 461
                                AND mld_kenmerk_key = km.mld_kenmerk_key)) km5 -- Klant(R)
    WHERE fac.gettrackingdate ('ORDNEW', o.opdracht_key) > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
          AND o.melding_key = m.melding_key
          AND o.opdracht_key = ko4.mld_opdr_key(+)
          AND m.melding_key = km5.mld_melding_key(+);

CREATE OR REPLACE VIEW VBGO_V_RUIMTEEXPORT
(
  ruimte_key,
  gebouw_code,
  verdieping_nr,
  ruimte_nr,
  ruimte_soort,
  werkplek_key,
  werkplek_omschrijving,
  werkplek_persoon
)
AS
    SELECT a.alg_ruimte_key,
           b.alg_gebouw_code,
           v.alg_verdieping_code,
           a.alg_ruimte_nr,
           s.alg_srtruimte_omschrijving,
           w.prs_werkplek_key,
           w.prs_werkplek_omschrijving,
           (SELECT p.prs_perslid_naam_friendly
              FROM prs_v_perslid_fullnames p, prs_perslidwerkplek pw
             WHERE     pw.prs_werkplek_key=w.prs_werkplek_key
                   AND pw.prs_perslid_key = p.prs_perslid_key) werkplek_persoon
      FROM alg_v_aanwezigruimte a,
           alg_v_aanwezigsrtruimte s,
           alg_v_aanweziggebouw b,
           alg_v_aanwezigverdieping v,
           prs_werkplek w
     WHERE     s.alg_srtruimte_key = a.alg_srtruimte_key
           AND v.alg_verdieping_key=a.alg_verdieping_key
           AND b.alg_gebouw_key=v.alg_gebouw_key
           AND w.prs_alg_ruimte_key(+) =a.alg_ruimte_key;


-- Procedure tbv de Facilitor - Facilitor koppeling met het logcenter.
CREATE OR REPLACE PROCEDURE vbgo_pre_putorders
AS
BEGIN
   UPDATE mld_opdr
      SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
    WHERE mld_opdr_key IN
             ( SELECT new.mld_opdr_key
                 FROM (  SELECT mld_opdr_key, MAX (datum) datum
                           FROM (SELECT o.mld_opdr_key, fac_tracking_datum datum
                                   FROM fac_tracking t, fac_srtnotificatie sn, mld_opdr o
                                  WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                                        AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
                                        AND fac_tracking_refkey = o.mld_opdr_key
                                        AND o.mld_opdr_externnr IS NOT NULL
                                        AND sn.fac_srtnotificatie_code <> 'ORDTRK'
                                 UNION
                                 SELECT o.mld_opdr_key, mld_opdr_note_wijzigdatum datum
                                   FROM mld_opdr_note n, mld_opdr o
                                  WHERE     n.mld_opdr_key = o.mld_opdr_key
                                        AND o.mld_opdr_externnr IS NOT NULL
                                        AND BITAND (mld_opdr_note_flag, 4) = 4)
                       GROUP BY mld_opdr_key) new,
                      (  SELECT o.mld_opdr_key, MAX (fac_tracking_datum) fac_tracking_datum
                           FROM fac_tracking t, fac_srtnotificatie sn, mld_opdr o
                          WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                                AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
                                AND fac_tracking_refkey = o.mld_opdr_key
                                AND o.mld_opdr_externnr IS NOT NULL
                                AND sn.fac_srtnotificatie_code = 'ORDTRK'
                       GROUP BY o.mld_opdr_key) ordtrk
                WHERE new.mld_opdr_key = ordtrk.mld_opdr_key(+) AND new.datum > COALESCE (ordtrk.fac_tracking_datum, SYSDATE - 100));
END;
/


CREATE OR REPLACE PROCEDURE vbgo_daily
AS
   -- Alle personen die in de groep zitten dat ze alleen een emailadres hebben en geen windows login (geen laptop)
   -- Waarbij geen wachtwoord is ingesteld.
   CURSOR c_setpw IS
      SELECT p.*
        FROM prs_perslid p
       WHERE     prs_perslid_key IN
                    (SELECT prs_perslid_key
                       FROM fac_gebruikersgroep gg, fac_groep g
                      WHERE gg.fac_groep_key = g.fac_groep_key AND fac_groep_omschrijving = 'SG-VFS-NL-APP-FACPRD')
             AND prs_perslid_salt IS NULL;

   -- Alle personen die in de groep zitten dat ze alleen een emailadres hebben en geen windows login (geen laptop)
   -- Waarbij al wel een wachtwoord is ingesteld.
   -- Bij deze mensen hoeven we alleen het vinkje te zetten.
   CURSOR c_setpw_once (c_kenmerk_key NUMBER)
   IS
      SELECT p.*
        FROM prs_perslid p
       WHERE     prs_perslid_key IN
                    (SELECT prs_perslid_key
                       FROM fac_gebruikersgroep gg, fac_groep g
                      WHERE gg.fac_groep_key = g.fac_groep_key AND fac_groep_omschrijving = 'SG-VFS-NL-APP-FACPRD')
             AND prs_perslid_salt IS NOT NULL
             AND NOT EXISTS
                    (SELECT 1
                       FROM prs_kenmerklink kl, prs_kenmerk k
                      WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = c_kenmerk_key);

   -- Alle personen die het vinkje hebben staan dat ze in de via wachtwoord inloggen maar die niet (meer) deel uitmaken van de autorisatiegroep
   CURSOR c_delpw (c_kenmerk_key NUMBER)
   IS
      SELECT p.*
        FROM prs_perslid p
       WHERE     prs_perslid_key NOT IN
                    (SELECT prs_perslid_key
                       FROM fac_gebruikersgroep gg, fac_groep g
                      WHERE gg.fac_groep_key = g.fac_groep_key AND fac_groep_omschrijving = 'SG-VFS-NL-APP-FACPRD')
             AND EXISTS
                    (SELECT 1
                       FROM prs_kenmerklink kl, prs_kenmerk k
                      WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = c_kenmerk_key);


   v_kenmerk_key   NUMBER;
BEGIN
   SELECT prs_kenmerk_key
     INTO v_kenmerk_key
     FROM prs_kenmerk
    WHERE prs_kenmerk_code = 'WACHTWOORDACCOUNT';

   FOR rec IN c_setpw
   LOOP
      PRS.setpassword (rec.prs_perslid_key, '[REDACTED]');
      FLX.setflex ('PRS',
                   v_kenmerk_key,
                   rec.prs_perslid_key,
                   'P',
                   1);
      FAC.trackaction ('PRSUPD',
                       rec.prs_perslid_key,
                       NULL,
                       NULL,
                       'Logt in met wachtwoord: (leeg) --> 1');
   END LOOP;

   FOR rec IN c_setpw_once (v_kenmerk_key)
   LOOP
      FLX.setflex ('PRS',
                   v_kenmerk_key,
                   rec.prs_perslid_key,
                   'P',
                   1);
      FAC.trackaction ('PRSUPD',
                       rec.prs_perslid_key,
                       NULL,
                       NULL,
                       'Logt in met wachtwoord: (leeg) --> 1');
   END LOOP;

   FOR rec IN c_delpw (v_kenmerk_key)
   LOOP
      PRS.setpassword (rec.prs_perslid_key, NULL);
      FLX.setflex ('PRS',
                   v_kenmerk_key,
                   rec.prs_perslid_key,
                   'P',
                   NULL);
      FAC.trackaction ('PRSUPD',
                       rec.prs_perslid_key,
                       NULL,
                       NULL,
                       'Logt in met wachtwoord: 1 --> (leeg)');
   END LOOP;
END;
/


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

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

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