--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust)
--                       - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
--                       - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)

DEFINE thisfile = 'FBEA.SQL'
DEFINE dbuser   = 'FBEA'

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

CREATE OR REPLACE PROCEDURE fbea_processemail (pfrom        IN VARCHAR2,
                                               pto          IN VARCHAR2,
                                               psubject     IN VARCHAR2,
                                               pbody        IN VARCHAR2,
                                               psessionid   IN VARCHAR2,
                                               pemailkey    IN NUMBER)
AS
    v_count             NUMBER;
    sender              prs_perslid.prs_perslid_key%TYPE;
    defaultstdmelding   fac_setting.fac_setting_default%TYPE;
    subject_regexp      fac_setting.fac_setting_default%TYPE;
    v_newkey            mld_melding.mld_melding_key%TYPE;
    v_gebouwkey         mld_melding.mld_alg_onroerendgoed_keys%TYPE;
    v_locatiekey        mld_melding.mld_alg_locatie_key%TYPE;
    v_mldnum            VARCHAR2 (4000);
    v_mldkey            mld_melding.mld_melding_key%TYPE;
    v_email             fac_notificatie.fac_notificatie_receiver_email%TYPE;
    v_check             NUMBER;
    v_pbody             VARCHAR2 (4000);
    v_folder_kkey       mld_kenmerk.mld_kenmerk_key%TYPE;
    -- kkey                mld_kenmerk.mld_kenmerk_key%TYPE;
    errormsg            fac_result.fac_result_waarde%TYPE;
BEGIN
    -- Valideer de sender in pfrom: kennen we deze?
    SELECT COUNT (*)
      INTO v_count
      FROM prs_perslid p
     WHERE UPPER (prs_perslid_email) = UPPER (pfrom);

    -- Bekende afzender --> dat is de melder
    IF (v_count = 1)
    THEN
        SELECT prs_perslid_key
          INTO sender
          FROM prs_perslid p
         WHERE UPPER (prs_perslid_email) = UPPER (pfrom);
    -- Geen bekende afzender --> _FACILITOR
    ELSE
        SELECT prs_perslid_key
          INTO sender
          FROM prs_perslid p
         WHERE prs_perslid_key = 3;
    END IF;

    CASE
        -- Op basis van het mailadres bepalen we het gebouw waar de melding voor bedoeld is
        -- Voorlopig doen we dat alleen voor Het Eemhuis en ICOON
        -- 11   Eemhuis
        -- 2    ICOON
        -- 3    Bibliotheek Baarn
        -- 4    Bibliotheek Bunschoten
        -- 5    Bibliotheek Hoogland
        -- 6    Scholen in de Kunst Hoogland
        -- 7    Bibliotheek Leusden Aanbouw
        -- 8    Scholen in de Kunst Leusden
        -- 9    Scholen in de Kunst Soest
        -- 10   Bibliotheek Woudenberg
        -- 901  Bibliotheek Woudenberg - Boerderij
        -- 921  Bibliotheek Leusden Boerderij

        WHEN UPPER (pto) LIKE 'HETEEMHUIS@%'
        THEN
            v_gebouwkey := '1';
        WHEN UPPER (pto) LIKE 'ICOON@%'
        THEN
            v_gebouwkey := '2';
        ELSE
            NULL;
    END CASE;

    -- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
    -- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie
    -- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd.
    subject_regexp := '[[:digit:]]{1,}';
    v_mldnum :=
        REGEXP_SUBSTR (psubject,
                       subject_regexp,
                       1,
                       1,
                       'i');

    v_mldkey := fac.safe_to_number (v_mldnum);

    --- kijken of er inderdaad een melding bestaat met het gevonden nummer
    SELECT COUNT (m.mld_melding_key)
      INTO v_check
      FROM mld_melding m
     WHERE m.mld_melding_key = v_mldkey;

    IF v_check = 1
    THEN
        -- Bestaande melding gevonden dus we zetten de mail als notitie bij deze melding
        BEGIN
            INSERT INTO mld_melding_note (mld_melding_key,
                                          mld_melding_note_omschrijving,
                                          prs_perslid_key)
                     VALUES (
                         v_mldkey,
                         SUBSTR (
                                psubject
                             || CHR (13)
                             || CHR (10)
                             || REPLACE (SUBSTR (v_pbody, 1, 4000 - (LENGTH (psubject) + 2)),
                                         CHR (13) || CHR (10) || CHR (13) || CHR (10),
                                         CHR (13) || CHR (10)),
                             1,
                             4000),                                  -- verwijder onnodige witregels
                         sender);

            --- vlaggeteje melding bij aanvrager zetten
            UPDATE mld_melding
               SET mld_melding_actiecode = 2
             WHERE mld_melding_key = v_mldkey;

            --- notificatie naar (niet geregistreerd) aanvrager
            SELECT COALESCE (m.mld_melding_email_ext, p.prs_perslid_email)     email
              INTO v_email
              FROM mld_melding m, prs_perslid p
             WHERE m.prs_perslid_key_voor = p.prs_perslid_key AND m.mld_melding_key = v_mldkey;

            INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                         fac_notificatie_status,
                                         prs_perslid_key_receiver,
                                         fac_notificatie_receiver_email,
                                         fac_notificatie_oms,
                                         fac_notificatie_refkey,
                                         fac_notificatie_prioriteit)
                 VALUES (69,                                                              --- mldnot
                         2,
                         NULL,
                         v_email,
                         'Er is een opmerking geplaatst bij melding ' || TO_CHAR (v_mldkey),
                         v_mldkey,
                         2);

            -- Find the lowest volgnummer of the Folder-flexfield.
            SELECT MIN (k1.mld_kenmerk_key)
              INTO v_folder_kkey
              FROM mld_stdmelding      sm1,
                   ins_tab_discipline  td1,
                   mld_kenmerk         k1,
                   mld_srtkenmerk      sk1,
                   mld_melding         m
             WHERE     m.mld_stdmelding_key = sm1.mld_stdmelding_key
                   AND m.mld_melding_key = v_mldkey
                   AND sm1.mld_ins_discipline_key = td1.ins_discipline_key
                   AND k1.mld_kenmerk_verwijder IS NULL
                   AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
                   AND sk1.mld_srtkenmerk_kenmerktype = 'M'
                   AND (   (    k1.mld_stdmelding_key = sm1.mld_stdmelding_key
                            AND k1.mld_kenmerk_niveau = 'S')
                        OR (    k1.mld_stdmelding_key = td1.ins_discipline_key
                            AND k1.mld_kenmerk_niveau = 'D')
                        OR (    k1.mld_stdmelding_key = td1.ins_srtdiscipline_key
                            AND k1.mld_kenmerk_niveau = 'T')
                        OR (k1.mld_kenmerk_niveau = 'A'));

            IF v_folder_kkey IS NOT NULL
            THEN
                INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                         VALUES (
                             psessionid,
                             'kenmerkpath',
                                'MLD\M'
                             || TO_CHAR (TRUNC (v_mldkey / 1000), 'FM0000')
                             || '___\M'
                             || v_mldkey
                             || '\'
                             || v_folder_kkey
                             || '\');
            END IF;

            fac.trackaction ('MLDTRK',
                             v_mldkey,
                             NULL,
                             NULL,
                             'Nieuwe notitie via Mail2melding');
        END;
    ELSE
        IF v_gebouwkey IS NOT NULL
        THEN
            BEGIN
                SELECT g.alg_locatie_key
                  INTO v_locatiekey
                  FROM alg_gebouw g
                 WHERE g.alg_gebouw_key = v_gebouwkey;

                INSERT INTO mld_melding (mld_melding_module,
                                         mld_meldbron_key,
                                         mld_melding_datum,
                                         mld_melding_onderwerp,
                                         mld_melding_omschrijving,
                                         mld_melding_status,
                                         mld_stdmelding_key,
                                         mld_alg_locatie_key,
                                         mld_alg_onroerendgoed_keys,
                                         prs_perslid_key,
                                         prs_perslid_key_voor,
                                         mld_melding_email_ext,
                                         mld_melding_spoed)
                     VALUES (
                         'MLD',
                         4,                                                                 -- email
                         SYSDATE,
                         SUBSTR (psubject, 1, 60),
                         SUBSTR (
                             REPLACE (SUBSTR (pbody, 1, 4000),
                                      CHR (13) || CHR (10) || CHR (13) || CHR (10),
                                      CHR (13) || CHR (10)),
                             1,
                             4000),                                  -- verwijder onnodige witregels
                         2,
                         61,
                         v_locatiekey,
                         v_gebouwkey,
                         sender,
                         sender,
                         pfrom,
                         3)
                  RETURNING mld_melding_key
                       INTO v_newkey;

                INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                     VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_newkey);
            END;

            IF errormsg IS NOT NULL
            THEN
                INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                     VALUES (psessionid, 'errormsg', errormsg);
            END IF;
        END IF;
    END IF;
EXCEPTION
    WHEN OTHERS
    THEN
        fac.writelog (
            'PROCESSEMAIL',
            'W',
            'Mail kon niet verwerkt worden afzender: ' || pfrom || '[' || errormsg || ']',
            'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')');

        INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                 VALUES (psessionid,
                         'errormsg',
                         'Database fout - Neem contact op met uw systeembeheerder');
END fbea_processemail;
/

CREATE OR REPLACE VIEW FBEA_V_TEAMLEIDERS_BIEB
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_NAAM,
    PRS_PERSLID_VERWIJDER
)
AS
    SELECT p.prs_perslid_key, pf.prs_perslid_naam_friendly, pf.prs_perslid_verwijder
      FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_srtperslid f
     WHERE     p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_srtperslid_key = f.prs_srtperslid_key
           AND f.prs_srtperslid_upper = 'TEAMLEIDER BIBLIOTHEEK';

CREATE OR REPLACE VIEW FBEA_V_NOTI_EVALUATIE
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY
)
AS
    SELECT sn.fac_srtnotificatie_code,
           '',
           evaluatie.contact_key,
           REPLACE (sn.fac_srtnotificatie_oms, '##nr##', evaluatie.reservering)     tekst,
           evaluatie.res_reservering_key,
           NULL                                                                     xkey
      FROM (  SELECT r.res_reservering_key,
                     r.res_reservering_key                                      reservering,
                     c.prs_perslid_key                                          contact_key,
                     c.prs_perslid_email                                        contact_email,
                     h.prs_perslid_key                                          host_key,
                     h.prs_perslid_email                                        host_email,
                     MAX (r.res_rsv_ruimte_volgnr),
                     MAX (r.res_rsv_ruimte_tot),
                     r.res_rsv_ruimte_omschrijving,
                     TO_CHAR (MAX (r.res_rsv_ruimte_tot) + 1, 'DD-MM-YYYY')     AS notificatie_datum
                FROM res_rsv_ruimte r, prs_perslid h, prs_perslid c
               WHERE     r.res_activiteit_key = 30              --- actviteiten bibliotheken Eemland
                     AND r.res_rsv_ruimte_contact_key = c.prs_perslid_key
                     AND r.res_rsv_ruimte_host_key = h.prs_perslid_key
            GROUP BY r.res_reservering_key,
                     r.res_reservering_key,
                     c.prs_perslid_key,
                     c.prs_perslid_email,
                     h.prs_perslid_key,
                     h.prs_perslid_email,
                     r.res_rsv_ruimte_omschrijving) evaluatie,
           fac_notificatie_job  nj,
           fac_srtnotificatie   sn
     WHERE     sn.fac_srtnotificatie_code = 'CUST01'
           AND nj.fac_notificatie_job_view = 'FBEA_V_NOTI_EVALUATIE'
           AND fac.safe_to_date (notificatie_datum, 'DD-MM-YYYY') = TRUNC (SYSDATE);

CREATE OR REPLACE VIEW FBEA_V_RAP_INFOBORD
(
    RESERVERING,
    AKTIEF,
    DATUM,
    DAG,
    TIJD_VAN,
    TIJD_TOT,
    RUIMTE,
    GASTHEER,
    OMSCHRIJVING,
    LOCATIE_OMSCHRIJVING,
    GEBOUW_CODE,
    GEBOUW,
    VERDIEPING_OMSCHRIJVING,
    VERDIEPING_VOLGNR,
    TITEL,
    PUBLIEKE_OMSCHRIJVING
)
AS
    SELECT res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr    reservering,
           (CASE
                WHEN res_rsv_ruimte_van > SYSDATE THEN 'expected'
                WHEN res_rsv_ruimte_tot < SYSDATE THEN 'passed'
                ELSE 'active'
            END)                                                      aktief,
           res_rsv_ruimte_van                                         datum,
           TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy')                 dag,
           TO_CHAR (res_rsv_ruimte_van, 'hh24:mi')                    tijd_van,
           TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi')                    tijd_tot,
           res_ruimte_nr                                              ruimte,
           gastheer.prs_perslid_naam_full                             gastheer,
           res_rsv_ruimte_omschrijving                                omschrijving,
           l.alg_locatie_omschrijving                                 locatie_omschrijving,
           g.alg_gebouw_code                                          gebouw_code,
           g.alg_gebouw_naam                                          gebouw,
           v.alg_verdieping_omschrijving                              verdieping_omschrijving,
           v.alg_verdieping_volgnr                                    verdieping_volgnr,
           titel.titel,
           po.omschrijving                                            publieke_omschrijving
      FROM res_v_aanwezigrsv_ruimte   rrr,
           res_ruimte_opstelling      rro,
           prs_v_perslid_fullnames    aanvrager,
           prs_v_perslid_fullnames    gastheer,
           res_v_res_ruimte_gegevens  rrg,
           alg_locatie                l,
           alg_gebouw                 g,
           alg_verdieping             v,
           res_status_fo              sf,
           res_discipline             rd,
           (SELECT res_rsv_ruimte_key, ud.fac_usrdata_omschr weergeven, ud.fac_usrdata_key
              FROM res_kenmerkwaarde  kw,
                   res_kenmerk        k,
                   res_srtkenmerk     sk,
                   fac_usrdata        ud,
                   fac_usrtab         ut
             WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                   AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
                   AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) = ud.fac_usrdata_key
                   AND ud.fac_usrtab_key = ut.fac_usrtab_key
                   AND sk.res_srtkenmerk_key = 141
                   AND ut.fac_usrtab_key = 4) weergeven,
           (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde titel
              FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
             WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                   AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                   AND sk.res_srtkenmerk_key = 161) titel,
           (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde omschrijving
              FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
             WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                   AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                   AND sk.res_srtkenmerk_key = 162) po
     WHERE     rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
           AND rro.res_ruimte_key = rrg.res_ruimte_key
           AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
           AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
           AND rrg.alg_locatie_key = l.alg_locatie_key
           AND rrg.alg_gebouw_key = g.alg_gebouw_key
           AND rrg.alg_verdieping_key = v.alg_verdieping_key
           AND rrr.res_status_fo_key = sf.res_status_fo_key
           AND rrg.res_discipline_key = rd.ins_discipline_key
           AND weergeven.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
           AND titel.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
           AND po.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
           AND weergeven.fac_usrdata_key = 33                      --- weergeven is 'Ja' of onbekend
           AND UPPER (sf.res_status_fo_omschrijving) = 'DEFINITIEF';

CREATE OR REPLACE VIEW FBEA_V_RAP_AKKOORD_ACT
(
    RES_RSV_RUIMTE_KEY,
    RESERVERING_KEY,
    RESERVERING,
    DATUM_SPECIALIST,
    BEOORDELING_SPECIALIST,
    DATUM_TEAMLEIDER,
    BEOORDELING_TEAMLEIDER,
    DATUM_MARCOM,
    BEOORDELING_MARCOM
)
AS
    SELECT rr.res_rsv_ruimte_key,
           res.res_reservering_key,
           res.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr,
           datum_spec_akkoord,
           beoordeling_spec,
           datum_tl_akkoord,
           beoordeling_marcom,
           datum_marcom_akkoord,
           beoordeling_tl
      FROM res_rsv_ruimte   rr,
           res_reservering  res,
           (SELECT kw.res_rsv_ruimte_key,
                   res_kenmerkwaarde_aanmaak     datum_spec_akkoord,
                   ud.fac_usrdata_upper          beoordeling_spec
              FROM res_kenmerk k, res_kenmerkwaarde kw, fac_usrdata ud
             WHERE     k.res_kenmerk_key = 8                                 --- Specialist akkoord?
                   AND k.res_activiteit_key = 30
                   AND kw.res_kenmerk_key = k.res_kenmerk_key
                   AND kw.res_kenmerkwaarde_verwijder IS NULL
                   AND ud.fac_usrdata_key = fac.safe_to_number (kw.res_kenmerkreservering_waarde))
           spec_akkoord,
           (SELECT kw.res_rsv_ruimte_key,
                   res_kenmerkwaarde_aanmaak     datum_tl_akkoord,
                   ud.fac_usrdata_upper          beoordeling_tl
              FROM res_kenmerk k, res_kenmerkwaarde kw, fac_usrdata ud
             WHERE     k.res_kenmerk_key = 10                                --- Teamleider akkoord?
                   AND k.res_activiteit_key = 30
                   AND kw.res_kenmerk_key = k.res_kenmerk_key
                   AND kw.res_kenmerkwaarde_verwijder IS NULL
                   AND ud.fac_usrdata_key = fac.safe_to_number (kw.res_kenmerkreservering_waarde))
           tl_akkoord,
           (SELECT kw.res_rsv_ruimte_key,
                   res_kenmerkwaarde_aanmaak     datum_marcom_akkoord,
                   ud.fac_usrdata_upper          beoordeling_marcom
              FROM res_kenmerk k, res_kenmerkwaarde kw, fac_usrdata ud
             WHERE     k.res_kenmerk_key = 12                                    --- MarCom akkoord?
                   AND k.res_activiteit_key = 30
                   AND kw.res_kenmerk_key = k.res_kenmerk_key
                   AND kw.res_kenmerkwaarde_verwijder IS NULL
                   AND ud.fac_usrdata_key = fac.safe_to_number (kw.res_kenmerkreservering_waarde))
           marcom_akkoord
     WHERE     rr.res_rsv_ruimte_verwijder IS NULL
           AND rr.res_activiteit_key = 30
           AND rr.res_reservering_key = res.res_reservering_key
           AND spec_akkoord.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
           AND tl_akkoord.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
           AND marcom_akkoord.res_rsv_ruimte_key = rr.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW FBEA_V_NOTI_ACT_NIET_AKK
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    FAC_SRTNOTIFICATIE_KEY,
    KEY,
    XKEY,
    XEMAIL,
    XMOBILE
)
AS
    SELECT DISTINCT NULL                                                                  sender,
                    NULL                                                                  receiver,
                    REPLACE (n.fac_srtnotificatie_oms, '##nr##', a.reservering)           tekst,
                    fac_srtnotificatie_code,
                    n.fac_srtnotificatie_key,
                    a.reservering_key,
                    a.res_rsv_ruimte_key,
                    'k.postel@bibliotheekeemland.nl;j.haanstra@bibliotheekeemland.nl'     xemail,
                    NULL                                                                  xmobile
      FROM fbea_v_rap_akkoord_act a, fac_srtnotificatie n
     WHERE     n.fac_srtnotificatie_code = 'CUST02'
           AND (   a.beoordeling_marcom = 'NIET AKKOORD'
                OR a.beoordeling_specialist = 'NIET AKKOORD'
                OR a.beoordeling_teamleider = 'NIET AKKOORD')
           AND (GREATEST (datum_specialist, datum_teamleider, datum_marcom)) >
               (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24
                  FROM fac_notificatie_job
                 WHERE UPPER (fac_notificatie_job_view) = 'FBEA_V_NOTI_ACT_NIET_AKK')
           AND (GREATEST (datum_specialist, datum_teamleider, datum_marcom)) <
               (SELECT fac_notificatie_job_nextrun
                  FROM fac_notificatie_job
                 WHERE UPPER (fac_notificatie_job_view) = 'FBEA_V_NOTI_ACT_NIET_AKK');

CREATE OR REPLACE VIEW FBEA_V_COORD_SIDK
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_NAAM,
    PRS_PERSLID_VERWIJDER
)
AS
    SELECT p.prs_perslid_key, p.prs_perslid_naam_friendly, p.prs_perslid_verwijder
      FROM fac_groep g, fac_gebruikersgroep gg, prs_v_perslid_fullnames_all p
     WHERE     g.fac_groep_key = 261
           AND gg.fac_groep_key = g.fac_groep_key
           AND p.prs_perslid_key = gg.prs_perslid_key;

CREATE OR REPLACE PROCEDURE fbea_topdesk
AS
    oracle_err_num   NUMBER;
    oracle_err_mes   VARCHAR2 (200);
    v_errorhint      VARCHAR2 (100);
    v_aanduiding     VARCHAR2 (100);
    v_locatie_key    NUMBER;
    v_lengte         NUMBER;
    v_new_note       VARCHAR2 (4000);

    -- Dit haalt het externnummer op uit de opdrachtomschrijving indien externnr bij de melding nog leeg is
    CURSOR externnr IS
        SELECT DISTINCT
               m.mld_melding_key,
               o.mld_opdr_key,
               o.mld_opdr_externnr                                             AS externnr,
               SUBSTR (o.mld_opdr_omschrijving,
                       INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12)    topdesknr
          FROM mld_melding m, mld_opdr o
         WHERE     m.mld_melding_key = o.mld_melding_key
               AND o.mld_opdr_externnr IS NOT NULL
               AND o.mld_uitvoerende_keys = 1081        --- voorlopig in ieder geval alleen Duzz ICT
               AND o.mld_statusopdr_key NOT IN (1,
                                                2,
                                                6,
                                                7,
                                                9)
               AND m.mld_melding_externnr IS NULL;

    -- Onderstaande cursor verzamelt de gegevens om te bepalen welke meldingen nieuwe opmerkingen heeft en die verzonden kunnen worden naar Topdesk
    -- Alle notities bij een melding / opdracht die niet al eerder zijn verstuurd en niet door DUZZ zijn gemaakt mogen verstuurd worden
    CURSOR sync IS
        SELECT n.mld_melding_key,                                                --- meldingen notes
               n.mld_opdr_key,
               n.notitie,
               n.mld_melding_note_aanmaak
          FROM (  SELECT mld.mld_melding_key,
                         o.mld_opdr_key,
                         LISTAGG (
                                pfn.prs_perslid_naam_friendly
                             || '/'
                             || mn.mld_melding_note_aanmaak
                             || ' '
                             || mn.mld_melding_note_omschrijving,
                             '; ')
                         WITHIN GROUP (ORDER BY mld.mld_melding_key)    notitie,
                         MAX (mn.mld_melding_note_aanmaak)              mld_melding_note_aanmaak
                    FROM mld_melding                mld,
                         mld_melding_note           mn,
                         mld_opdr                   o,
                         prs_perslid                p,
                         prs_v_perslid_fullnames_all pfn
                   WHERE     mn.mld_melding_key = mld.mld_melding_key
                         AND mn.prs_perslid_key = pfn.prs_perslid_key
                         AND pfn.prs_perslid_key = p.prs_perslid_key
                         AND (   UPPER (p.prs_perslid_email) NOT LIKE '%DUZZ%'
                              OR p.prs_perslid_email IS NULL) -- notities door Duzz zelf gemaakt sturen we niet terug
                         AND mld.mld_melding_key = o.mld_melding_key -- alleen naar Duzz als er ook een opdracht bij Duzz is
                         AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die voor Duzz zijn
                         AND o.mld_statusopdr_key IN (5, 8)
                         AND mld_melding_note_aanmaak > o.mld_opdr_datumbegin
                         AND (   mld.mld_melding_externsyncdate < mld_melding_note_aanmaak
                              OR mld.mld_melding_externsyncdate IS NULL)
                GROUP BY mld.mld_melding_key, o.mld_opdr_key
                ORDER BY mld_melding_key, mld_melding_note_aanmaak DESC) n,
               (SELECT mld_melding_key, aant_char
                  FROM (  SELECT mld.mld_melding_key,
                                 SUM (LENGTH (mn.mld_melding_note_omschrijving))     aant_char
                            FROM mld_melding                mld,
                                 mld_melding_note           mn,
                                 mld_stdmelding             sm,
                                 mld_opdr                   o,
                                 prs_v_perslid_fullnames_all prs,
                                 prs_perslid                p
                           WHERE     mn.mld_melding_key = mld.mld_melding_key
                                 AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
                                 AND mn.prs_perslid_key = prs.prs_perslid_key
                                 AND prs.prs_perslid_key = p.prs_perslid_key
                                 AND (   UPPER (p.prs_perslid_email) NOT LIKE '%DUZZ%'
                                      OR p.prs_perslid_email IS NULL)
                                 AND mld.mld_melding_key = o.mld_melding_key -- Enkel bijwerken indien er ook een opdracht is.
                                 AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die bij Duzz liggen
                                 AND o.mld_statusopdr_key IN (5, 8)
                                 AND mld_melding_note_aanmaak > o.mld_opdr_datumbegin
                                 AND (   mld.mld_melding_externsyncdate < mld_melding_note_aanmaak
                                      OR mld.mld_melding_externsyncdate IS NULL)
                        GROUP BY mld.mld_melding_key)
                 WHERE aant_char < 4000) t
         WHERE t.mld_melding_key = n.mld_melding_key
        UNION ALL
        SELECT n.mld_melding_key,                                                -- opdrachten notes
               n.mld_opdr_key,
               n.notitie,
               n.mld_melding_note_aanmaak
          FROM (  SELECT mld.mld_melding_key,
                         o.mld_opdr_key,
                         LISTAGG (
                                pfn.prs_perslid_naam_friendly
                             || '/'
                             || opdrn.mld_opdr_note_aanmaak
                             || ' '
                             || opdrn.mld_opdr_note_omschrijving,
                             '; ')
                         WITHIN GROUP (ORDER BY mld.mld_melding_key)    notitie,
                         MAX (opdrn.mld_opdr_note_aanmaak)              mld_melding_note_aanmaak
                    FROM mld_melding                mld,
                         mld_opdr_note              opdrn,
                         mld_opdr                   o,
                         prs_perslid                p,
                         prs_v_perslid_fullnames_all pfn
                   WHERE     opdrn.mld_opdr_key = o.mld_opdr_key
                         AND opdrn.prs_perslid_key = pfn.prs_perslid_key
                         AND pfn.prs_perslid_key = p.prs_perslid_key
                         AND mld.mld_melding_key = o.mld_melding_key -- alleen naar Duzz als er ook een opdracht bij Duzz is
                         AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die voor Duzz zijn
                         AND o.mld_statusopdr_key IN (5, 8)
                         AND NOT EXISTS
                                 (SELECT 1
                                    FROM prs_perslid duzz
                                   WHERE     duzz.prs_perslid_key = 621
                                         AND p.prs_perslid_key = duzz.prs_perslid_key) -- notities door Duzz zelf gemaakt sturen we niet terug
                         AND (   mld.mld_melding_externsyncdate < opdrn.mld_opdr_note_aanmaak
                              OR mld.mld_melding_externsyncdate IS NULL)
                GROUP BY mld.mld_melding_key, o.mld_opdr_key
                ORDER BY mld_melding_key, mld_melding_note_aanmaak DESC) n,
               (SELECT mld_melding_key, aant_char
                  FROM (  SELECT mld.mld_melding_key,
                                 SUM (LENGTH (opdrn.mld_opdr_note_omschrijving))     aant_char
                            FROM mld_melding mld, mld_opdr_note opdrn, mld_opdr o
                           WHERE     opdrn.mld_opdr_key = o.mld_opdr_key
                                 AND mld.mld_melding_key = o.mld_melding_key -- Enkel bijwerken indien er ook een opdracht is.
                                 AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die bij Duzz liggen
                                 AND o.mld_statusopdr_key IN (5, 8)
                                 AND NOT EXISTS
                                         (SELECT 1
                                            FROM prs_perslid duzz
                                           WHERE     duzz.prs_perslid_key = 621
                                                 AND opdrn.prs_perslid_key = duzz.prs_perslid_key) -- notities door Duzz zelf gemaakt sturen we niet terug
                                 AND (   mld.mld_melding_externsyncdate < opdrn.mld_opdr_note_aanmaak
                                      OR mld.mld_melding_externsyncdate IS NULL)
                        GROUP BY mld.mld_melding_key)
                 WHERE aant_char < 4000) t
         WHERE t.mld_melding_key = n.mld_melding_key;

    --- meldingen waarbij het totaal te versturen notities de 4000 karakters overschrijdt
    --- deze zetten we in de tracking
    CURSOR large IS
        SELECT mld_melding_key, mld_opdr_key, aant_char
          FROM (  SELECT mld.mld_melding_key,
                         o.mld_opdr_key,
                         SUM (LENGTH (mn.mld_melding_note_omschrijving))     aant_char
                    FROM mld_melding                mld,
                         mld_melding_note           mn,
                         mld_stdmelding             sm,
                         mld_opdr                   o,
                         prs_v_perslid_fullnames_all prs,
                         prs_perslid                p
                   WHERE     mn.mld_melding_key = mld.mld_melding_key
                         AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
                         AND mn.prs_perslid_key = prs.prs_perslid_key
                         AND p.prs_perslid_key = prs.prs_perslid_key
                         AND (   UPPER (p.prs_perslid_email) NOT LIKE '%DUZZ%'
                              OR p.prs_perslid_email IS NULL)
                         AND mld.mld_melding_key = o.mld_melding_key -- Enkel relavant indien er ook een opdracht is.
                         AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die voor Duzz zijn
                         AND o.mld_statusopdr_key IN (5, 8)
                         AND mld_melding_note_aanmaak > o.mld_opdr_datumbegin
                         AND (   mld.mld_melding_externsyncdate < mld_melding_note_aanmaak
                              OR mld.mld_melding_externsyncdate IS NULL)
                GROUP BY mld.mld_melding_key, o.mld_opdr_key)
         WHERE aant_char > 4000;
BEGIN
    v_errorhint := 'init';
    v_lengte := 0;

    -- Hier vullen we het externnr bij de melding bij de opdracht binnenkomt vanuit Topdesk
    FOR rec IN externnr
    LOOP
        BEGIN
            v_aanduiding := 'Topdesknr zetten bij melding: ' || rec.mld_melding_key;
            v_errorhint := 'Melding vullen met externnr voor melding ' || rec.mld_melding_key;

            UPDATE mld_melding
               SET mld_melding_externnr = rec.topdesknr
             WHERE mld_melding_key = rec.mld_melding_key;

            -- Vervolgens zetten we de sync state zodat we weten vanaf wanneer de sync van notities en bijlagen mag gaan lopen
            UPDATE mld_melding
               SET mld_melding_externsyncdate = SYSDATE
             WHERE mld_melding_externsyncdate IS NULL AND mld_melding_key = rec.mld_melding_key;

            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken mldtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (207,
                                 rec.mld_melding_key,
                                 v_aanduiding || '/' || oracle_err_num || ': ' || oracle_err_mes);
        END;
    END LOOP;

    FOR rec IN sync
    LOOP
        BEGIN
            -- Eerst verzamelen we alle nieuwe notities en zetten deze klaar in een kenmerk voor verzending
            v_aanduiding := 'Note naar Topdesk voor melding: ' || rec.mld_melding_key;
            v_errorhint := 'Notities verzamelen voor verzending ' || rec.mld_melding_key;

            -- Daarvoor moeten we de juiste kenmerkkey bepalen, dit kenmerk is bij alle opdrachttypen aangemaakt
            SELECT k.mld_kenmerk_key
              INTO v_new_note
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE     sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                   AND UPPER (sk.mld_srtkenmerk_omschrijving) = 'UPDATE NOTITIES';

            -- De oude notitie gooien we weg
            DELETE MLD_KENMERKOPDR ko
             WHERE ko.mld_opdr_key = rec.mld_opdr_key AND ko.mld_kenmerk_key = v_new_note;

            -- Dan vullen we de nieuwe notitie
            mld.upsertopdrachtkenmerk (v_new_note, rec.mld_opdr_key, rec.notitie);

            v_errorhint :=
                'Opdracht opnieuw te verzenden naar Topdesk voor melding: ' || rec.mld_melding_key;

            -- Eerst zetten we de opdracht opnieuw klaar om te verzenden
            UPDATE mld_opdr o
               SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
             WHERE o.mld_opdr_key = rec.mld_opdr_key;

            v_errorhint := 'Syncdatum Topdesk bijwerken voor melding ' || rec.mld_melding_key;

            -- Als er nog niet eerder gesynchroniseerd is maken we een kenmerk aan met de syncdatum
            -- Als al eerder gesynchroniseerd is werken we de syncdatum bij
            -- Hiermee komt deze notitie de volgende keer niet meer voor in de cursor

            UPDATE mld_melding m
               SET m.mld_melding_externsyncdate = SYSDATE
             WHERE rec.mld_melding_key = m.mld_melding_key;

            --- deze notitie moet resulteren in een patch naar Topdesk
            --- dat wordt getriggerd door een ordupd
            fac.trackaction ('ORDUPD',
                             rec.mld_opdr_key,
                             NULL,
                             NULL,
                             'Notitie naar Duzz: ' || rec.notitie);

            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken ordtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (210,
                                 rec.mld_opdr_key,
                                 v_aanduiding || '/' || oracle_err_num || ': ' || oracle_err_mes);
        END;
    END LOOP;

    FOR rec IN large
    LOOP
        BEGIN
            --
            v_aanduiding :=
                   'Notities bij melding '
                || rec.mld_melding_key
                || ' te groot voor export naar Topdesk.';

            -- aanmaken mldtrk in fac_tracking
            INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                      fac_tracking_refkey,
                                      fac_tracking_oms)
                 VALUES (207, rec.mld_opdr_key, v_aanduiding);
        END;
    END LOOP;

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

        fac.writelog ('Topdesk',
                      'E',
                      oracle_err_num || '/' || oracle_err_mes,
                      v_errorhint);
END fbea_topdesk;
/

CREATE OR REPLACE VIEW FBEA_V_RAP_ACT_EVALUATIE
(
    RES_RSV_RUIMTE_KEY,
    RESERVERING,
    DATUM,
    DAG,
    TIJD_VAN,
    TIJD_TOT,
    LOCATIE_OMSCHRIJVING,
    GEBOUW,
    RUIMTE,
    GASTHEER,
    OMSCHRIJVING,
    TITEL,
    PUBLIEKE_OMSCHRIJVING,
    KWALITATIEVE_DOELST,
    KWANTITATIEVE_DOELST,
    WIE_ORGANISEERT,
    DOELGROEP,
    VOLKS_UITGESPROKEN,
    BESCHEIDEN_OUDEREN,
    GEZELLIGE_EMPTYNESTERS,
    PLANNEN_RENNEN,
    GEWOON_GEMIDDELD,
    WAAROM_MENSEN_KOMEN,
    SPREKERS_ONDERW,
    BEGROTING_VOOR,
    KAART_VERKOOP,
    MLD_KEY,
    EVALUATIENR,
    AANMAAKDATUM_EVALUATIE,
    EINDDATUM_EVALUATIE,
    KWALITATIEVE_DOELST_BEHAALD,
    TOELICHTING_KWAL_DOELST,
    KWANTITATIEVE_DOELST_BEHAALD,
    TOELICHTING_KWANT_DOELST,
    FINANCIEEL_EINDRESULT,
    AANDACHTSPUNTEN,
    TEVREDENHEIDSSCORE,
    WEBSITE_BEZOEKEN,
    CLICKS_NIEUWSBRIEF,
    CLICKS_SOCIAL_MEDIA,
    PERSBERICHT,
    FLYER,
    INZET_BETAALMIDDELEN,
    RESULTATEN_ENQUETE
)
AS
    SELECT r.res_rsv_ruimte_key,
           r.reservering,
           r.datum,
           r.dag,
           r.tijd_van,
           r.tijd_tot,
           r.locatie_omschrijving,
           r.gebouw,
           r.ruimte,
           r.gastheer,
           r.omschrijving,
           r.titel,
           r.publieke_omschrijving,
           r.kwalitatieve_doelstelling,
           r.kwantitatieve_doelstelling,
           r.wie_organiseert,
           r.doelgroep,
           r.volks_uitgesproken,
           r.bescheiden_ouderen,
           r.gezellige_emptynesters,
           r.plannen_rennen,
           r.gewoon_gemiddeld,
           r.waarom_moeten_mensen_komen,
           r.sprekers_onderw,
           r.begroting_voor,
           r.kaart_verkoop,
           m.evaluatienr     mldkey,
           m.evaluatienr,
           m.aanmaakdatum_evaluatie,
           m.einddatum_evaluatie,
           m.kwalitatieve_doelstelling_behaald,
           m.toelichting_kwalitatieve_doelstelling,
           m.kwantitatieve_doelstelling_behaald,
           m.toelichting_kwantitatieve_doelstelling,
           m.financieel_eindresultaat,
           m.aandachtspunten,
           m.tevredenheidsscore,
           m.website_bezoeken,
           m.aantal_clicks_nieuwsbrief,
           m.aantal_clicks_social_media,
           m.persbericht,
           m.flyer,
           m.inzet_betaalmiddelen,
           m.resultaten_enquete
      FROM (SELECT rrr.res_rsv_ruimte_key,
                   res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                       reservering,
                   res_rsv_ruimte_van
                       datum,
                   TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy')
                       dag,
                   TO_CHAR (res_rsv_ruimte_van, 'hh24:mi')
                       tijd_van,
                   TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi')
                       tijd_tot,
                   l.alg_locatie_omschrijving
                       locatie_omschrijving,
                   g.alg_gebouw_naam
                       gebouw,
                   res_ruimte_nr
                       ruimte,
                   gastheer.prs_perslid_naam_full
                       gastheer,
                   res_rsv_ruimte_omschrijving
                       omschrijving,
                   titel.titel,
                   po.omschrijving
                       publieke_omschrijving,
                   kwal_doelst.kwalitatieve_doelstelling,
                   kwant_doelst.kwantitatieve_doelstelling,
                   org.wie_organiseert,
                   dg.doelgroep,
                   vu.volks_uitgesproken,
                   bo.bescheiden_ouderen,
                   ge.gezellige_emptynesters,
                   pr.plannen_rennen,
                   gg.gewoon_gemiddeld,
                   why.waarom_moeten_mensen_komen,
                   spr.sprekers_onderw,
                   begr.begroting_voor,
                   krt.kaart_verkoop
              FROM res_v_aanwezigrsv_ruimte   rrr,
                   res_ruimte_opstelling      rro,
                   prs_v_perslid_fullnames    aanvrager,
                   prs_v_perslid_fullnames    gastheer,
                   res_v_res_ruimte_gegevens  rrg,
                   alg_locatie                l,
                   alg_gebouw                 g,
                   alg_verdieping             v,
                   res_status_fo              sf,
                   res_discipline             rd,
                   (SELECT res_rsv_ruimte_key, ud.fac_usrdata_omschr weergeven, ud.fac_usrdata_key
                      FROM res_kenmerkwaarde  kw,
                           res_kenmerk        k,
                           res_srtkenmerk     sk,
                           fac_usrdata        ud,
                           fac_usrtab         ut
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
                           AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
                               ud.fac_usrdata_key
                           AND ud.fac_usrtab_key = ut.fac_usrtab_key
                           AND sk.res_srtkenmerk_key = 141
                           AND ut.fac_usrtab_key = 4) weergeven,
                   (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde titel
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 102)
                   titel,
                   (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde omschrijving
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 201) po,
                   (SELECT kw.res_rsv_ruimte_key,
                           kw.res_kenmerkreservering_waarde     kwalitatieve_doelstelling
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 5)
                   kwal_doelst,
                   (SELECT kw.res_rsv_ruimte_key,
                           kw.res_kenmerkreservering_waarde     kwantitatieve_doelstelling
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 241)
                   kwant_doelst,
                   (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde wie_organiseert
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 42) org,
                   (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde doelgroep
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 44) dg,
                   (SELECT kw.res_rsv_ruimte_key,
                           kw.res_kenmerkreservering_waarde     waarom_moeten_mensen_komen
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 46) why,
                   (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde sprekers_onderw
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_kenmerk_key = 47) spr,
                   (SELECT res_rsv_ruimte_key,
                           ud.fac_usrdata_omschr     begroting_voor,
                           ud.fac_usrdata_key
                      FROM res_kenmerkwaarde  kw,
                           res_kenmerk        k,
                           res_srtkenmerk     sk,
                           fac_usrdata        ud,
                           fac_usrtab         ut
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
                           AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
                               ud.fac_usrdata_key
                           AND ud.fac_usrtab_key = ut.fac_usrtab_key
                           AND sk.res_srtkenmerk_key = 9
                           AND ut.fac_usrtab_key = 5) begr,
                   (SELECT res_rsv_ruimte_key,
                           ud.fac_usrdata_omschr     kaart_verkoop,
                           ud.fac_usrdata_key
                      FROM res_kenmerkwaarde  kw,
                           res_kenmerk        k,
                           res_srtkenmerk     sk,
                           fac_usrdata        ud,
                           fac_usrtab         ut
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
                           AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
                               ud.fac_usrdata_key
                           AND ud.fac_usrtab_key = ut.fac_usrtab_key
                           AND sk.res_srtkenmerk_key = 27
                           AND ut.fac_usrtab_key = 4) krt,
                   (SELECT kw.res_rsv_ruimte_key,
                           CASE WHEN kw.res_kenmerkreservering_waarde = 1 THEN 'Ja' ELSE 'Nee' END    volks_uitgesproken
                      FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                           AND k.res_kenmerk_key = 541) vu,
                   (SELECT kw.res_rsv_ruimte_key,
                           CASE WHEN kw.res_kenmerkreservering_waarde = 1 THEN 'Ja' ELSE 'Nee' END    bescheiden_ouderen
                      FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                           AND k.res_kenmerk_key = 561) bo,
                   (SELECT kw.res_rsv_ruimte_key,
                           CASE WHEN kw.res_kenmerkreservering_waarde = 1 THEN 'Ja' ELSE 'Nee' END    gezellige_emptynesters
                      FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                           AND k.res_kenmerk_key = 581) ge,
                   (SELECT kw.res_rsv_ruimte_key,
                           CASE WHEN kw.res_kenmerkreservering_waarde = 1 THEN 'Ja' ELSE 'Nee' END    plannen_rennen
                      FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                           AND k.res_kenmerk_key = 582) pr,
                   (SELECT kw.res_rsv_ruimte_key,
                           CASE WHEN kw.res_kenmerkreservering_waarde = 1 THEN 'Ja' ELSE 'Nee' END    gewoon_gemiddeld
                      FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                           AND k.res_kenmerk_key = 583) gg
             WHERE     rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                   AND rro.res_ruimte_key = rrg.res_ruimte_key
                   AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
                   AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
                   AND rrg.alg_locatie_key = l.alg_locatie_key
                   AND rrg.alg_gebouw_key = g.alg_gebouw_key
                   AND rrg.alg_verdieping_key = v.alg_verdieping_key
                   AND rrr.res_status_fo_key = sf.res_status_fo_key
                   AND rrg.res_discipline_key = rd.ins_discipline_key
                   AND weergeven.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND titel.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND po.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND kwal_doelst.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND kwant_doelst.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND org.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND dg.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND why.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND spr.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND begr.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND krt.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND vu.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND bo.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND ge.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND pr.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
                   AND gg.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key) r,
           (SELECT m.res_rsv_ruimte_key,
                   m.mld_melding_key
                       evaluatienr,
                   m.mld_melding_datum
                       aanmaakdatum_evaluatie,
                   COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                             mld.getmeldingstatusdate (m.mld_melding_key, 1))
                       einddatum_evaluatie,
                   kwant_ds.kwantitatieve_doelstelling_behaald,
                   kwant_ds_toel.toelichting_kwantitatieve_doelstelling,
                   kwal_ds.kwalitatieve_doelstelling_behaald,
                   kwal_ds_toel.toelichting_kwalitatieve_doelstelling,
                   fin_eindres.financieel_eindresultaat,
                   aand.aandachtspunten,
                   score.tevredenheidsscore,
                   website.website_bezoeken,
                   clicks_sm.aantal_clicks_social_media,
                   clicks_nb.aantal_clicks_nieuwsbrief,
                   persb.persbericht,
                   flyer.flyer,
                   betaalm.inzet_betaalmiddelen,
                   enq.resultaten_enquete
              FROM mld_melding  m,
                   (SELECT km.mld_melding_key,
                           ud.fac_usrdata_omschr     kwantitatieve_doelstelling_behaald
                      FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                     WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_kenmerk_key = 43
                           AND ud.fac_usrdata_key =
                               fac.safe_to_number (km.mld_kenmerkmelding_waarde)) kwant_ds,
                   (SELECT km.mld_melding_key,
                           km.mld_kenmerkmelding_waarde     toelichting_kwantitatieve_doelstelling
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 44)
                   kwant_ds_toel,
                   (SELECT km.mld_melding_key,
                           ud.fac_usrdata_omschr     kwalitatieve_doelstelling_behaald
                      FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                     WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_kenmerk_key = 45
                           AND ud.fac_usrdata_key =
                               fac.safe_to_number (km.mld_kenmerkmelding_waarde)) kwal_ds,
                   (SELECT km.mld_melding_key,
                           km.mld_kenmerkmelding_waarde     toelichting_kwalitatieve_doelstelling
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 46)
                   kwal_ds_toel,
                   (SELECT km.mld_melding_key,
                           km.mld_kenmerkmelding_waarde     financieel_eindresultaat
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 47)
                   fin_eindres,
                   (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde aandachtspunten
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 48) aand,
                   (SELECT km.mld_melding_key, ud.fac_usrdata_omschr tevredenheidsscore
                      FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                     WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_kenmerk_key = 49
                           AND ud.fac_usrdata_key =
                               fac.safe_to_number (km.mld_kenmerkmelding_waarde)) score,
                   (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde website_bezoeken
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 101)
                   website,
                   (SELECT km.mld_melding_key,
                           km.mld_kenmerkmelding_waarde     aantal_clicks_social_media
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 102)
                   clicks_sm,
                   (SELECT km.mld_melding_key,
                           km.mld_kenmerkmelding_waarde     aantal_clicks_nieuwsbrief
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 103)
                   clicks_nb,
                   (SELECT km.mld_melding_key, ud.fac_usrdata_omschr persbericht
                      FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                     WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_kenmerk_key = 104
                           AND ud.fac_usrdata_key =
                               fac.safe_to_number (km.mld_kenmerkmelding_waarde)) persb,
                   (SELECT km.mld_melding_key, ud.fac_usrdata_omschr flyer
                      FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                     WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_kenmerk_key = 105
                           AND ud.fac_usrdata_key =
                               fac.safe_to_number (km.mld_kenmerkmelding_waarde)) flyer,
                   (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde inzet_betaalmiddelen
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 106)
                   betaalm,
                   (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde resultaten_enquete
                      FROM mld_kenmerkmelding km, mld_kenmerk k
                     WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_kenmerk_key = 107) enq
             WHERE     m.mld_melding_key = kwant_ds.mld_melding_key(+)
                   AND m.mld_melding_key = kwant_ds_toel.mld_melding_key(+)
                   AND m.mld_melding_key = kwal_ds.mld_melding_key(+)
                   AND m.mld_melding_key = kwal_ds_toel.mld_melding_key(+)
                   AND m.mld_melding_key = fin_eindres.mld_melding_key(+)
                   AND m.mld_melding_key = aand.mld_melding_key(+)
                   AND m.mld_melding_key = score.mld_melding_key(+)
                   AND m.mld_melding_key = website.mld_melding_key(+)
                   AND m.mld_melding_key = clicks_sm.mld_melding_key(+)
                   AND m.mld_melding_key = clicks_nb.mld_melding_key(+)
                   AND m.mld_melding_key = persb.mld_melding_key(+)
                   AND m.mld_melding_key = flyer.mld_melding_key(+)
                   AND m.mld_melding_key = betaalm.mld_melding_key(+)
                   AND m.mld_melding_key = enq.mld_melding_key(+)) m
     WHERE m.res_rsv_ruimte_key(+) = r.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW FBEA_RAP_PLANBORD_SIDK
(
    USER_KEY,
    ITEM_KEY,
    LOCATIE,
    TITLE,
    VAN,
    TOT,
    URL,
    COLOR,
    STATUS,
    BEHANDELTEAM,
    VAKGROEP
)
AS
    SELECT NULL                                                                    user_key,
           m.mld_melding_key,
           ruimte,
           vg.mld_stdmelding_omschrijving
           ||   CHR (10)
           || 'Melding: '
           || m.mld_melding_key
           || (CASE
                   WHEN m.mld_melding_onderwerp IS NOT NULL
                   THEN
                       ' (' || m.mld_melding_onderwerp || ')'
                   ELSE
                       NULL
               END)
           || CHR (10)
           || omschrijving                                                         txt,
           TRUNC(m.mld_melding_actiedatum),
           TRUNC(m.mld_melding_actiedatum),
           '?u=melding' || CHR (38) || 'k=' || m.mld_melding_key                   url,
           CASE WHEN m.MLD_MELDING_STATUS = 5 THEN '#F26522'                               -- oranje
                                                             ELSE '#02A528'                 -- groen
                                                                            END    AS color,
           s.mld_statuses_omschrijving,
           bt.ins_discipline_omschrijving                                          behandelteam,
           vg.vakgroep
      FROM mld_melding         m,
           ins_tab_discipline  bt,
           mld_statuses        s,
           (SELECT sm.mld_stdmelding_key, sm.mld_stdmelding_omschrijving, vg.ins_discipline_omschrijving vakgroep
              FROM mld_stdmelding sm, ins_tab_discipline vg
             WHERE sm.mld_ins_discipline_key = vg.ins_discipline_key) vg,
           (SELECT rsv.res_rsv_ruimte_key,
                      (SELECT g.alg_gebouw_naam
                         FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
                        WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                              AND v.alg_verdieping_key = r.alg_verdieping_key
                              AND r.alg_ruimte_key = r2r.alg_ruimte_key)
                   || ' '
                   || r2r.ruimte_nr                                                   ruimte,
                      'Reservering: '
                   || res.res_reservering_key
                   || '/'
                   || rsv.res_rsv_ruimte_volgnr
                   || CHR (10)
                   || rsv.res_rsv_ruimte_omschrijving
                   || CHR (10)
                   || 'Contactpersoon:  '
                   || (SELECT prs_perslid_naam_full
                         FROM prs_v_perslid_fullnames_all pf
                        WHERE pf.prs_perslid_key = rsv.res_rsv_ruimte_contact_key)    omschrijving
              FROM res_v_aanwezigrsv_ruimte  rsv,
                   res_reservering           res,
                   res_activiteit            ra,
                   res_srtactiviteit         rsa,
                   (  SELECT res_rsv_ruimte_key,
                             MAX (o.res_opstelling_omschrijving)      opstelling,
                             MAX (ro.res_ruimte_opstel_bezoekers)     capaciteit,
                             MAX (ra.alg_ruimte_key)                  alg_ruimte_key,
                             MAX (rr.res_ruimte_nr)                   ruimte_nr
                        FROM res_rsv_ruimte       r,
                             res_ruimte_opstelling ro,
                             res_opstelling       o,
                             res_ruimte           rr,
                             res_alg_ruimte       ra
                       WHERE     r.res_rsv_ruimte_verwijder IS NULL
                             AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                             AND ro.res_ruimte_key = rr.res_ruimte_key
                             AND ro.res_opstelling_key = o.res_opstelling_key
                             AND rr.res_ruimte_key = ra.res_ruimte_key
                    GROUP BY res_rsv_ruimte_key
                    UNION ALL
                    SELECT res_rsv_ruimte_key,
                           ''       opstelling,
                           NULL     capaciteit,
                           rrr.alg_ruimte_key,
                           r.alg_ruimte_nr
                      FROM res_rsv_ruimte rrr, alg_ruimte r
                     WHERE rrr.alg_ruimte_key IS NOT NULL AND r.alg_ruimte_key = rrr.alg_ruimte_key)
                   r2r
             WHERE     r2r.res_rsv_ruimte_key = rsv.res_rsv_ruimte_key
                   AND res.res_reservering_key = rsv.res_reservering_key
                   AND rsv.res_activiteit_key = ra.res_activiteit_key
                   AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
                   AND rsa.res_srtactiviteit_key = 30) reservering
     WHERE     m.res_rsv_ruimte_key = reservering.res_rsv_ruimte_key(+)
           AND bt.ins_discipline_key = m.mld_ins_discipline_key
           AND vg.mld_stdmelding_key = m.mld_stdmelding_key
           AND s.mld_statuses_key = m.mld_melding_status;   

CREATE OR REPLACE VIEW FBEA_V_RAP_PLANNING
AS
    SELECT alle_ruimten.datum,
           alle_ruimten.dag,
           (SELECT alg_gebouw_omschrijving
              FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
             WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                   AND v.alg_verdieping_key = r.alg_verdieping_key
                   AND r.alg_ruimte_key = alle_ruimten.alg_ruimte_key)    gebouw,
           alle_ruimten.res_ruimte_nr,
           COALESCE (ROUND (aantallen.duur_res, 1), 0)                    tot_duur
      FROM (  SELECT MAX (ra.alg_ruimte_key)     alg_ruimte_key,
                     rr.res_ruimte_key,
                     rr.res_ruimte_nr,
                     datum,
                     dag
                FROM res_ruimte    rr,
                     res_alg_ruimte ra,
                     (    SELECT TRUNC (SYSDATE) + LEVEL - 1                      AS datum,
                                 TO_CHAR (TRUNC (SYSDATE) + LEVEL - 1, 'DAY')     dag
                            FROM DUAL
                      CONNECT BY LEVEL <= SYSDATE - SYSDATE + 365) d
               WHERE     rr.res_discipline_key = 241
                     AND rr.res_ruimte_verwijder IS NULL
                     AND rr.res_ruimte_key = ra.res_ruimte_key
                     AND (rr.res_ruimte_vervaldatum > SYSDATE OR rr.res_ruimte_vervaldatum IS NULL)
            GROUP BY rr.res_ruimte_key,
                     rr.res_ruimte_nr,
                     datum,
                     dag) alle_ruimten,
           (  SELECT d.dag,
                     d.datum,
                     r.res_ruimte_key,
                     r.ruimte,
                     SUM (r.duur)     duur_res
                FROM (SELECT ur.datum,
                             ur.datum_van,
                             ur.datum_tot,
                             ur.duur,
                             ur.res_ruimte_key,
                             ur.ruimte_nr     ruimte,
                             ur.key
                        FROM (SELECT rrr.res_rsv_ruimte_key
                                         key,
                                     res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                                         reservering,
                                     rrr.res_rsv_ruimte_omschrijving,
                                     rrr.res_rsv_ruimte_aanmaak,
                                     r2a.ruimte_nr,
                                     r2a.res_ruimte_key,
                                     (SELECT ins_discipline_key
                                        FROM ins_tab_discipline   d,
                                             res_ruimte_opstelling ro,
                                             res_ruimte           rr
                                       WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                             AND ro.res_ruimte_key = rr.res_ruimte_key
                                             AND rr.res_discipline_key = d.ins_discipline_key)
                                         catalogus_key,
                                     (SELECT ins_discipline_omschrijving
                                        FROM ins_tab_discipline   d,
                                             res_ruimte_opstelling ro,
                                             res_ruimte           rr
                                       WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                             AND ro.res_ruimte_key = rr.res_ruimte_key
                                             AND rr.res_discipline_key = d.ins_discipline_key)
                                         catalogus,
                                     DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee')
                                         reserveerbare_ruimte,
                                     TRUNC (rrr.res_rsv_ruimte_van)
                                         datum,
                                     rrr.res_rsv_ruimte_van
                                         datum_van,
                                     rrr.res_rsv_ruimte_tot
                                         datum_tot,
                                     COALESCE (
                                         (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24,
                                         0)
                                         duur,
                                     rrr.res_rsv_ruimte_opmerking
                                FROM res_v_aanwezigrsv_ruimte rrr,
                                     res_activiteit          ra,
                                     res_srtactiviteit       rsa,
                                     res_reservering         res,
                                     (  SELECT res_rsv_ruimte_key,
                                               MAX (o.res_opstelling_omschrijving)      opstelling,
                                               MAX (ro.res_ruimte_opstel_bezoekers)     capaciteit,
                                               MAX (ra.alg_ruimte_key)                  alg_ruimte_key,
                                               MAX (rr.res_ruimte_nr)                   ruimte_nr,
                                               MAX (ra.res_ruimte_key)                  res_ruimte_key
                                          FROM res_rsv_ruimte     r,
                                               res_ruimte_opstelling ro,
                                               res_opstelling     o,
                                               res_ruimte         rr,
                                               res_alg_ruimte     ra
                                         WHERE     r.res_rsv_ruimte_verwijder IS NULL
                                               AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                               AND ro.res_ruimte_key = rr.res_ruimte_key
                                               AND ro.res_opstelling_key = o.res_opstelling_key
                                               AND rr.res_ruimte_key = ra.res_ruimte_key
                                      GROUP BY res_rsv_ruimte_key) r2a
                               WHERE     rrr.res_reservering_key = res.res_reservering_key
                                     AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
                                     AND rrr.res_activiteit_key = ra.res_activiteit_key
                                     AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key) ur
                       WHERE     UPPER (ur.reserveerbare_ruimte) = 'JA'
                             AND ur.catalogus_key = 241
                             AND ur.datum_van BETWEEN SYSDATE AND SYSDATE + 365) r,
                     (    SELECT TRUNC (SYSDATE) + LEVEL - 1                      AS datum,
                                 TO_CHAR (TRUNC (SYSDATE) + LEVEL - 1, 'DAY')     dag
                            FROM DUAL
                      CONNECT BY LEVEL <= SYSDATE - SYSDATE + 365) d
               WHERE r.datum(+) = d.datum
            GROUP BY d.dag,
                     d.datum,
                     r.res_ruimte_key,
                     r.ruimte
            ORDER BY datum) aantallen
     WHERE     aantallen.datum(+) = alle_ruimten.datum
           AND aantallen.res_ruimte_key(+) = alle_ruimten.res_ruimte_key;

CREATE OR REPLACE PROCEDURE FBEA_PRE_PUTORDERS
AS
BEGIN

    fbea_topdesk;  

END FBEA_PRE_PUTORDERS;
/

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