-- Script containing customer specific configuration sql statements Elkien (WELK)
-- $Revision$
-- $Id$

DEFINE thisfile = 'WELK.SQL'
DEFINE dbuser   = 'WELK'

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

-- Gebouw-key = 5 in onderstaande view om alle bezoekers van het hoofdkantoor in Heerenveen op te kunnen vragen
CREATE OR REPLACE VIEW welk_v_rapp_bezoekers_screen
AS
SELECT to_char(a.bez_afspraak_datum,'DD-MM-YYYY') bez_afspraak_datum,
			 to_char(a.bez_afspraak_datum,'YYYY-MM-DD') datum_yyyymmdd,
			 to_char(a.bez_afspraak_datum,'HH24:MI') starttijd,
			 a.bez_afspraak_key afspr_key,
       b.bez_afspraak_naam,
       b.bez_afspraak_bedrijf bez_bedrijf,
       b.prs_contactpersoon_key,
       p.prs_perslid_naam
       || CASE
             WHEN p.prs_perslid_voorletters IS NULL THEN ''
             ELSE ', ' || p.prs_perslid_voorletters
          END
       || CASE
             WHEN p.prs_perslid_tussenvoegsel IS NULL THEN ''
             ELSE ' ' || p.prs_perslid_tussenvoegsel
          END
       || CASE
             WHEN p.prs_perslid_voornaam IS NULL THEN ''
             ELSE ' (' || p.prs_perslid_voornaam || ')'
          END
          pers_naam,
       a.bez_afspraak_gastheer gastheer,
       COALESCE (a.bez_afspraak_telefoonnr,
                 p.prs_perslid_telefoonnr,
                 p.prs_perslid_mobiel
       )
          telf_nr,
       (SELECT alg_verdieping_volgnr
          FROM alg_verdieping
         WHERE alg_verdieping_key = og.alg_verdieping_key)
          verdieping,          
       a.bez_afspraak_ruimte ruimte,
       a.bez_afspraak_opmerking,
       a.bez_afspraak_eind,
       to_char(a.bez_afspraak_eind,'HH24:MI') eindtijd,
       t.bez_actie_omschrijving actie,
       b.bez_bezoekers_done,
       b.bez_bezoekers_out,
       l.alg_locatie_omschrijving loc_omschr,
       b.bez_bezoekers_key bez_key
FROM bez_afspraak a,
     bez_bezoekers b,
     bez_actie t,
     prs_perslid p,
     alg_locatie l,
     alg_district d,
     res_rsv_ruimte rrr,
     res_ruimte_opstelling rro,
     res_ruimte rr,
     (SELECT alg_r.alg_ruimte_key alg_onroerendgoed_keys,
             alg_r.alg_ruimte_key,
             alg_r.alg_verdieping_key,
             alg_v.alg_gebouw_key,
             'R' alg_type
      FROM alg_ruimte alg_r, alg_verdieping alg_v
      WHERE alg_r.alg_verdieping_key = alg_v.alg_verdieping_key
      UNION ALL
      SELECT alg_v.alg_verdieping_key,
             TO_NUMBER (NULL),
             alg_v.alg_verdieping_key,
             alg_v.alg_gebouw_key,
             'V'
      FROM alg_verdieping alg_v
      UNION ALL
      SELECT alg_g.alg_gebouw_key,
             TO_NUMBER (NULL),
             TO_NUMBER (NULL),
             alg_g.alg_gebouw_key,
             'G'
      FROM alg_gebouw alg_g) og,
     res_rsv_deel rd
WHERE     a.bez_afspraak_key = b.bez_afspraak_key
      AND l.alg_district_key = d.alg_district_key
      AND t.bez_actie_key(+) = a.bez_actie_key
      AND a.alg_locatie_key = l.alg_locatie_key
      AND og.alg_onroerendgoed_keys(+) = a.alg_onrgoed_keys
      AND b.bez_bezoekers_key = rd.bez_bezoekers_key(+)
      AND p.prs_perslid_key = a.bez_afspraak_contact_key
      AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
      AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
      AND rro.res_ruimte_key = rr.res_ruimte_key(+)
      AND a.bez_afspraak_datum BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE+1)
      AND og.alg_gebouw_key = 5
      AND bez_afspraak_naam not like '%*%';


-- res_discipline_key 101 = Catalogus "Lunch"
-- res_discipline_key 281 = Catalogus "Bakker"

CREATE OR REPLACE VIEW welk_v_res_lunches_en_bakker
(fclt_f_datum, tijd, fclt_f_locatie, res_discipline_key, ruimte, voorziening, aantal, aanvrager, gastheer, afdeling, activiteit, bezoekers, omschrijving, opmerking)
AS SELECT
TO_CHAR(DATUM,'YYYY-MM-DD') DATUM,
TO_CHAR(DATUM,'HH24:MI') TIJD,
LOCATIE,
res_ins_discipline_key,
ALG_RUIMTE_AANDUIDING RUIMTE,
RES_VOORZIENING,
AANTAL,
AANVRAGER,
GASTHEER,
ORGANISATIE,
RES_ACTIVITEIT_OMSCHRIJVING,
BEZOEKERS,
OMSCHRIJVING,
OPMERKING
FROM (WITH theperslid
             AS (SELECT prs_perslid_key,
                        prs_perslid_telefoonnr,
                        prs_afdeling_key,
                        p.prs_perslid_naam
                        || CASE
                              WHEN p.prs_perslid_voorletters IS NULL THEN ''
                              ELSE ', ' || p.prs_perslid_voorletters
                           END
                        || CASE
                              WHEN p.prs_perslid_tussenvoegsel IS NULL THEN ''
                              ELSE ' ' || p.prs_perslid_tussenvoegsel
                           END
                        || CASE
                              WHEN p.prs_perslid_voornaam IS NULL THEN ''
                              ELSE ' (' || p.prs_perslid_voornaam || ')'
                           END
                           naam
                 FROM prs_perslid p),
          theresrsv
             AS (SELECT *
                 FROM res_rsv_ruimte
                 )
      SELECT rrr.res_reservering_key,
             ruimte_geg.alg_locatie_key,
             l.alg_locatie_omschrijving locatie,
             ruimte_geg.alg_gebouw_key,
             ruimte_geg.alg_verdieping_key,
             ruimte_geg.alg_ruimte_key,
             COALESCE (opstelalg.res_ruimte_nr,
                       ruimte_geg.alg_ruimte_aanduiding
             )
                res_ruimte_nr,
             ruimte_geg.alg_ruimte_aanduiding,
             res_geg.res_voorziening,
             NULL,
             res_geg.res_reservering_van num_datum_tijd,
             res_geg.res_reservering_van datum,
             res_geg.res_reservering_van tijd,
             res_geg.res_reservering_tot tot,
             pcontact.naam aanvrager,
             res_geg.res_ins_discipline_key,
             res_rsv_ruimte_omschrijving omschrijving,
             res_rsv_ruimte_opmerking opmerking,
             res_geg.res_rsv_ruimte_key rsv_ruimte_key,
             res_geg.res_item_key,
             res_geg.res_status_bo_key res_status_bo_key,
             res_geg.res_type categorie,
             rrr.res_rsv_ruimte_bezoekers bezoekers,
             phost.naam gastheer,
             pcontact.prs_perslid_telefoonnr,
             COALESCE ( (SELECT k.prs_kostenplaats_nr
                         FROM prs_kostenplaats k
                         WHERE rrr.prs_kostenplaats_key =
                                  k.prs_kostenplaats_key),
                       ''
             )
                kostenplaats,
             res_geg.aantal aantal,
             res_geg.rsv_ruimte_aantal,
             res_geg.prijs verwerkt_prijs,
             l.alg_district_key,
             rrr.res_activiteit_key,
             ra.res_activiteit_omschrijving,
             ra.res_activiteit_upper,
             res_geg.stuks_prijs stuks_prijs,
             phost.prs_afdeling_key,
             (SELECT d.prs_afdeling_naam2
              FROM prs_v_afdeling d
              WHERE phost.prs_afdeling_key = d.prs_afdeling_key)
                organisatie,
             artikelnummer,
             rrr.res_rsv_ruimte_noshow noshow,
             artikel_groep,
             res_geg.rcv_type rcv_type,
             res_geg.res_type res_type,
             res_geg.keycolumn keycolumn,
             rrr.res_rsv_ruimte_volgnr,
             rrr.res_rsv_ruimte_key,
             res_geg.res_ruimte_key
      FROM (SELECT 'C' AS res_type,
                   'CV' AS rcv_type,
                   rra.res_rsv_ruimte_key,
                   (SELECT rro.res_ruimte_key
                    FROM res_ruimte_opstelling rro
                    WHERE rrr.res_ruimte_opstel_key =
                             rro.res_ruimte_opstel_key)
                      AS res_ruimte_key,
                   res_rsv_artikel_key AS res_item_key,
                   rra.res_rsv_artikel_levering AS res_reservering_van,
                   res_rsv_ruimte_tot AS res_reservering_tot,
                   rra.res_rsv_artikel_aantal AS aantal,
                   LTRIM (ra.res_artikel_omschrijving)
                   || CASE
                         WHEN ra.res_artikel_eenheid IS NULL THEN ''
                         ELSE ' (' || ra.res_artikel_eenheid || ')'
                      END
                      AS res_voorziening,
                   NULL,
                   ra.res_discipline_key AS res_ins_discipline_key,
                   rra.res_status_bo_key,
                   ra.res_artikel_key AS res_artikel_key,
                   rra.res_rsv_artikel_prijs AS prijs,
                   ra.res_artikel_prijs AS stuks_prijs,
                   TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                   ra.res_artikel_nr AS artikelnummer,
                   ra.res_artikel_groep AS artikel_groep,
                   rra.res_rsv_artikel_key keycolumn
            FROM res_v_aanwezigrsv_artikel rra, theresrsv rrr, res_artikel ra
            WHERE     rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                  AND rra.res_rsv_artikel_dirtlevel = 0
                  AND rra.res_artikel_key = ra.res_artikel_key
                  AND ra.res_discipline_key IN (101, 281)) res_geg,
           res_rsv_ruimte rrr,
           res_activiteit ra,
           theperslid phost,
           theperslid pcontact,
           alg_v_ruimte_gegevens ruimte_geg,
           (SELECT res_ruimte_opstel_key,
                   res_ruimte_nr,
                   MIN (alg_ruimte_key) alg_ruimte_key
            FROM res_ruimte_opstelling rro, res_alg_ruimte rar, res_ruimte rr
            WHERE     rro.res_ruimte_key = rar.res_ruimte_key
                  AND rr.res_ruimte_key = rar.res_ruimte_key
                  AND rar.res_alg_ruimte_verwijder IS NULL
            GROUP BY res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
           alg_locatie l,
           alg_district di,
           prs_kostenplaats k
      WHERE     res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
            AND rrr.res_rsv_ruimte_verwijder IS NULL
            AND rrr.res_activiteit_key = ra.res_activiteit_key
            AND res_rsv_ruimte_host_key = phost.prs_perslid_key
            AND res_rsv_ruimte_contact_key = pcontact.prs_perslid_key
            AND rrr.res_ruimte_opstel_key = opstelalg.res_ruimte_opstel_key(+)
            AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
            AND ruimte_geg.alg_ruimte_key =
                  COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
            AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
            AND l.alg_district_key = di.alg_district_key
            AND res_geg.res_status_bo_key < 5);


CREATE OR REPLACE VIEW welk_v_rapp_lunches
(fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, afdeling, activiteit, bezoekers, omschrijving, opmerking)
AS SELECT fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, afdeling, activiteit, bezoekers, omschrijving, opmerking
FROM welk_v_res_lunches_en_bakker
WHERE res_discipline_key = 101;

-- Overmorgen is standaard 2 dagen erbij optellen bij vandaag, alleen bij donderdag en vrijdag nogeens 2 extra dagen.
CREATE OR REPLACE VIEW welk_v_rap_lunches_overmorgen
(datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, omschrijving, opmerking)
AS 
SELECT fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, omschrijving, opmerking
FROM welk_v_rapp_lunches
WHERE TO_DATE (fclt_f_datum, 'YYYY-MM-DD') = trunc(sysdate + 2 + decode(to_char(sysdate,'D'),5,2,6,2,0));

-- Bakker
CREATE OR REPLACE VIEW welk_v_rapp_bakker
(fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, afdeling, activiteit, bezoekers, omschrijving, opmerking)
AS SELECT fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, afdeling, activiteit, bezoekers, omschrijving, opmerking
FROM welk_v_res_lunches_en_bakker
WHERE res_discipline_key = 281;

-- Overmorgen is standaard 2 dagen erbij optellen bij vandaag, alleen bij donderdag en vrijdag nogeens 2 extra dagen.
CREATE OR REPLACE VIEW welk_v_rap_bakker_overmorgen
(datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, omschrijving, opmerking)
AS 
SELECT fclt_f_datum, tijd, fclt_f_locatie, ruimte, voorziening, aantal, aanvrager, gastheer, omschrijving, opmerking
FROM welk_v_rapp_bakker
WHERE TO_DATE (fclt_f_datum, 'YYYY-MM-DD') = trunc(sysdate + 2 + decode(to_char(sysdate,'D'),5,2,6,2,0));

-- fac_notificatie_job_key = 41 is de notifictaiejob die een mail stuurt naar receptie bij een nieuwe melding
-- 361 = vakgroep postkamer; 1541 = persoon postkamer; 1181 = persoon receptie
CREATE OR REPLACE VIEW welk_v_noti_receptie
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS 
   SELECT   sn.fac_srtnotificatie_code,
            fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key),
            DECODE (std.mld_ins_discipline_key, 361, 1541, 1181), 
            sn.fac_srtnotificatie_oms,
            m.mld_melding_key,
            m.mld_stdmelding_key,
            m.mld_melding_omschrijving,
            NULL
     FROM   mld_melding m,
            mld_stdmelding std,
            ins_tab_discipline d,
            fac_notificatie_job nj,
            fac_srtnotificatie sn
    WHERE       sn.fac_srtnotificatie_code = 'CUST01'
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND m.mld_melding_status = 2
            AND nj.fac_notificatie_job_key = 41
            AND d.ins_discipline_key = std.mld_ins_discipline_key
            AND d.ins_srtdiscipline_key = 1
            AND fac.gettrackingdate ('MLDNEW', m.mld_melding_key) >=
                  nj.fac_notificatie_job_nextrun
                  - (nj.fac_notificatie_job_interval / 24);
                  
CREATE OR REPLACE PROCEDURE welk_processemail (pfrom        IN VARCHAR2,
                                               pto          IN VARCHAR2,
                                               psubject     IN VARCHAR2,
                                               pbody        IN VARCHAR2,
                                               psessionid   IN VARCHAR2,
                                               pemailkey    IN NUMBER)
AS
    sender                  prs_perslid.prs_perslid_key%TYPE;
    mldkey                  mld_melding.mld_melding_key%TYPE;
    mldstat                 mld_melding.mld_melding_status%TYPE;
    stdmelding              mld_stdmelding.mld_stdmelding_key%TYPE;
    v_errormsg              fac_result.fac_result_waarde%TYPE;
    v_from                  VARCHAR2 (4000);
    v_body                  VARCHAR2 (4000);
    m_body                  VARCHAR2 (4000);
    v_actie                 VARCHAR2 (4000);
    v_vmnr                  mld_melding.mld_melding_externnr%TYPE; --Ticketnr Valuemation
    v_opdrextnr             mld_melding.mld_melding_externnr%TYPE; --Huidig externnr
    v_mldkey                mld_melding.mld_melding_key%TYPE; --bestaande mld_melding_key
    v_opdrkey               mld_opdr.mld_opdr_key%TYPE; --bestaande mld_opdr_key
    v_opdrvolgnr            mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE; --bestaande volgnr
    v_status                mld_opdr.mld_statusopdr_key%TYPE; -- status opdracht
    v_kenmerk_key           NUMBER (10);
    v_kenmstatusoms         VARCHAR2 (4000);
    v_kenmstatusper         VARCHAR2 (4000);
    v_kenmstatusoms_cur     VARCHAR2 (4000);
    v_kenmstatusper_cur     VARCHAR2 (4000);
    v_vm_oplossing          VARCHAR2 (4000);
    v_vm_oplossing_cur      VARCHAR2 (4000);
    v_vm_niet_akkoord       VARCHAR2 (4000);
    v_vm_niet_akkoord_cur   VARCHAR2 (4000);
    v_manager_email         VARCHAR2 (4000);
    v_manager_key           prs_perslid.prs_perslid_key%TYPE;
    v_lgkenmerk_key         mld_kenmerk.mld_kenmerk_key%TYPE;
    v_mailorigin            mld_kenmerk.mld_kenmerk_key%TYPE;
    v_attachorigin          mld_kenmerk.mld_kenmerk_key%TYPE;
BEGIN
    v_errormsg := '(0x143)' || v_mldkey || psubject || v_actie;
    sender := 4;                              --Standaard de persoon Facilitor
    v_mailorigin := 410;                  --Kenmerk_key originele mail-bijlage
    v_attachorigin := 411;                               --Kenmerk_key bijlage

    -- Verwijder de Bounce Address Tag Validation
    IF pfrom LIKE 'prvs=%'
    THEN
        v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
    ELSE
        v_from := pfrom;
    END IF;

    v_body := pbody;
    m_body := pbody;

    CASE
        WHEN UPPER (pto) LIKE 'HELPDESK_ELKIEN@%'
        THEN
            v_errormsg := '(0x245)' || v_mldkey || psubject || v_actie;
            stdmelding :=
                fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
            mldstat := 2;
            -- Standaard de status in Nieuw (2). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden doorgezet en er een workflow gaat starten na het doorzetten.

            -- Bepalen van het ticknr. uit Valuemation, deze is vooral van belang bij het confirmation bericht
            v_errormsg := '(0x246)' || v_mldkey || psubject || v_actie;
            v_vmnr := SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''), 0, 12);

            -- Bepalen van mld_melding_key
            v_errormsg := '(0x247)' || v_mldkey || psubject || v_actie;
            v_mldkey :=
                SUBSTR (
                    SUBSTR (
                        SUBSTR (psubject,
                                INSTR (psubject, 'Facilitor opdracht:') + 19),
                        0,
                          INSTR (
                              SUBSTR (
                                  psubject,
                                    INSTR (psubject, 'Facilitor opdracht:')
                                  + 19),
                              '"')
                        - 1),
                    0,
                      INSTR (
                          SUBSTR (
                              SUBSTR (
                                  psubject,
                                    INSTR (psubject, 'Facilitor opdracht:')
                                  + 19),
                              0,
                                INSTR (
                                    SUBSTR (
                                        psubject,
                                          INSTR (psubject,
                                                 'Facilitor opdracht:')
                                        + 19),
                                    '"')
                              - 1),
                          '/')
                    - 1);

            -- Bepalen van opdrachtvolgnr
            v_errormsg := '(0x248)' || v_mldkey || psubject || v_actie;
            v_opdrvolgnr :=
                SUBSTR (
                    SUBSTR (
                        SUBSTR (psubject,
                                INSTR (psubject, 'Facilitor opdracht:') + 19),
                        0),
                      INSTR (
                          SUBSTR (
                              SUBSTR (
                                  psubject,
                                    INSTR (psubject, 'Facilitor opdracht:')
                                  + 19),
                              0),
                          '/')
                    + 1,
                    1);

            -- Bepalen van de mld_opdr_key
            -- Uitgangspunt is 1 opdracht per melding
            v_errormsg := '(0x249)' || v_mldkey || psubject || v_actie;

            SELECT MIN (mld_opdr_key)
              INTO v_opdrkey
              FROM mld_opdr
             WHERE     mld_melding_key = v_mldkey
                   AND mld_opdr_bedrijfopdr_volgnr = v_opdrvolgnr;

            --Hier gaan we obv het onderwerpveld bepalen wat de actie in Facilitor moet zijn
            v_errormsg := 'Kan actie niet bepalen: ' || psubject || v_mldkey;

            CASE
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 13, 14)) LIKE
                         '%IS AANGEMAAKT%'
                THEN
                    v_actie := 'ORDVAL';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 22, 23)) LIKE
                         '%IS DOOR ONS GEVALIDEERD%'
                THEN
                    v_actie := 'ORDACP';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 22, 23)) LIKE
                         '%WACHT OP UW REACTIE%'
                THEN
                    v_actie := 'ORDUPD';
                    v_kenmstatusoms :=
                        'Aanvullende info gevraagd, wacht op uw reactie';
                WHEN UPPER (SUBSTR (psubject, 0, 14)) LIKE '%AFSTEMMING NAV%'
                THEN
                    v_actie := 'ORDUPD';
                    v_kenmstatusoms :=
                        'Telefonisch contact leggen mislukt, wacht op uw reactie';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 11, 12)) LIKE
                         '%IS OPGELOST%'
                THEN
                    v_actie := 'ORDGOE';
                    v_kenmstatusoms :=
                        'Oplossing is aangereikt, bij akkoord kan de opdracht door u afgemeld worden via de link in Facilitor. Bij geen akkoord, dit graag aangeven via de portal van Valuemation.';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 12, 13)) LIKE
                         '%ACCORDERING%'
                THEN
                    v_actie := 'ORDOPL';
                    v_kenmstatusoms :=
                        'Oplossing is aangereikt, bij akkoord kan de opdracht door u afgemeld worden via de link in Facilitor.';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 45, 46)) LIKE
                         '%IN VERBAND MET HET UITBLIJVEN VAN EEN REACTIE%'
                THEN
                    v_actie := 'ORDAFM';
                WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 13, 14)) LIKE
                         '%IS BIJGEWERKT%'
                THEN
                    v_actie := 'ORDUPD';
                    v_kenmstatusoms := 'De melding is bijgewerkt.';
                ELSE
                    v_actie := NULL;
            END CASE;


            BEGIN
                --Hieronder de acties die gedaan moeten worden.

                --Bevestigingsmail vanuit Valuemation, vult externnr bij de melding
                v_errormsg := '(0x350)' || v_mldkey || psubject || v_actie;

                --Als de actie niet bepaald kan worden obv het onderwerp van de mail uit Valuemation, dan doen we niets met de mail.
                IF v_actie = NULL
                THEN
                    v_errormsg := '(0x361)' || v_mldkey || psubject;

                    fac.writelog (
                        'PROCESSEMAIL',
                        'E',
                           'Onbekende actie, mail van: '
                        || pfrom
                        || '['
                        || v_errormsg
                        || ']',
                           'OTHERS (error '
                        || SQLCODE
                        || '/'
                        || SUBSTR (SQLERRM, 1, 100)
                        || ')');
                ELSE
                    --Bij een confirmationbericht uit Valuemation, wordt het ticketnr vanuit Valuemation doorgegeven.
                    IF v_actie = 'ORDVAL'
                    THEN
                        v_errormsg :=
                               '(0x410)'
                            || v_mldkey
                            || psubject
                            || v_actie
                            || 'vmnr: '
                            || v_vmnr
                            || 'opdrkey: '
                            || v_opdrkey;

                        IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
                        THEN
                            SELECT mld_opdr_externnr
                              INTO v_opdrextnr
                              FROM mld_opdr
                             WHERE mld_opdr_key = v_opdrkey;

                            UPDATE mld_opdr
                               SET mld_opdr_externnr = v_vmnr
                             WHERE mld_opdr_key = v_opdrkey;

                            --Tracking toevoegen (externnr)
                            fac.trackaction (
                                'ORDUPD',
                                v_opdrkey,
                                sender,
                                NULL,
                                   'Valuemation nr vanuit confirmationbericht: '
                                || v_opdrextnr
                                || ' --> '
                                || v_vmnr);
                        ELSE
                            fac.writelog (
                                'PROCESSEMAIL',
                                'E',
                                   'Valuemation nr kon niet worden gevuld:'
                                || pfrom
                                || '['
                                || v_errormsg
                                || v_vmnr
                                || ']',
                                   'OTHERS (error '
                                || SQLCODE
                                || '/'
                                || SUBSTR (SQLERRM, 1, 100)
                                || ')');
                        END IF;
                    END IF;

                    --Hieronder de afhandeling van het bericht wanneer de melding wordt gevalideerd in Valuemation.
                    IF v_actie = 'ORDACP'
                    THEN
                        v_errormsg :=
                            '(0x420)' || v_mldkey || psubject || v_actie;
                        v_vmnr :=
                            SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''),
                                    1,
                                    12);

                        IF v_opdrkey IS NOT NULL
                        THEN
                            --Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
                            IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
                            THEN
                                UPDATE mld_opdr
                                   SET mld_opdr_externnr = v_vmnr
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND mld_opdr_externnr IS NULL;

                                --Enkel tracking mbt nieuw (of aanpassing Externnr) toevoegen als er ook iets wijzigt.
                                IF v_opdrextnr <> v_vmnr
                                THEN
                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           '#Valuemation nr vanuit confirmationbericht: '
                                        || v_opdrextnr
                                        || ' --> '
                                        || v_vmnr);  -- # voorkomt notificatie
                                END IF;              -- # voorkomt notificatie
                            ELSE
                                fac.writelog (
                                    'PROCESSEMAIL',
                                    'E',
                                       'Valuemation nr kon niet worden gevuld:'
                                    || pfrom
                                    || '['
                                    || v_errormsg
                                    || v_vmnr
                                    || ']',
                                       'OTHERS (error '
                                    || SQLCODE
                                    || '/'
                                    || SUBSTR (SQLERRM, 1, 100)
                                    || ')');
                            END IF;

                            UPDATE mld_opdr
                               SET mld_statusopdr_key = 8 --Status geaccepteerd
                             WHERE mld_opdr_key = v_opdrkey;

                            fac.trackaction (
                                'ORDACP',
                                v_opdrkey,
                                sender,
                                NULL,
                                '#Melding gevalideerd in Valuemation'); -- # voorkomt notificatie

                            INSERT INTO mld_opdr_note (
                                            mld_opdr_key,
                                            mld_opdr_note_omschrijving,
                                            prs_perslid_key)
                                     VALUES (
                                                v_opdrkey,
                                                SUBSTR (
                                                       psubject
                                                    || CHR (13)
                                                    || CHR (10)
                                                    || REPLACE (
                                                           SUBSTR (
                                                               pbody,
                                                               1,
                                                                 4000
                                                               - (  LENGTH (
                                                                        psubject)
                                                                  + 2)),
                                                              CHR (13)
                                                           || CHR (10)
                                                           || CHR (13)
                                                           || CHR (10),
                                                              CHR (13)
                                                           || CHR (10)),
                                                    1,
                                                    4000), -- Verwijder onnodige witregels
                                                sender);

                            fac.trackaction (
                                'ORDUPD',
                                v_opdrkey,
                                sender,
                                NULL,
                                '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
                        ELSE
                            fac.writelog (
                                'PROCESSEMAIL',
                                'E',
                                   'Melding kan niet geaccepteerd worden, onbekende opdrachtkey'
                                || pfrom
                                || '['
                                || v_errormsg
                                || ']',
                                   'OTHERS (error '
                                || SQLCODE
                                || '/'
                                || SUBSTR (SQLERRM, 1, 100)
                                || ')');
                        END IF;
                    END IF;

                    --Hieronder de afhandeling van het bericht wanneer de melding moet worden bijgewerkt en een reactie wordt verwacht
                    IF v_actie = 'ORDUPD'
                    THEN
                        v_errormsg :=
                            '(0x430)' || v_mldkey || psubject || v_actie;
                        v_vmnr :=
                            SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''),
                                    1,
                                    12);


                        IF v_opdrkey IS NOT NULL
                        THEN
                            v_errormsg :=
                                '(0x431)' || v_mldkey || psubject || v_actie;

                            SELECT mld_statusopdr_key
                              INTO v_status
                              FROM mld_opdr
                             WHERE mld_opdr_key = v_opdrkey;

                            --Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
                            IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
                            THEN
                                v_errormsg :=
                                       '(0x432)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                UPDATE mld_opdr
                                   SET mld_opdr_externnr = v_vmnr
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND mld_opdr_externnr IS NULL;

                                --Enkel tracking mbt nieuw (of aanpassing Externnr) toevoegen als er ook iets wijzigt.
                                IF v_opdrextnr <> v_vmnr
                                THEN
                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           '#Valuemation nr vanuit confirmationbericht: '
                                        || v_opdrextnr
                                        || ' --> '
                                        || v_vmnr);  -- # voorkomt notificatie
                                END IF;
                            ELSE
                                fac.writelog (
                                    'PROCESSEMAIL',
                                    'E',
                                       'Valuemation nr kon niet worden gevuld:'
                                    || pfrom
                                    || '['
                                    || v_errormsg
                                    || v_vmnr
                                    || ']',
                                       'OTHERS (error '
                                    || SQLCODE
                                    || '/'
                                    || SUBSTR (SQLERRM, 1, 100)
                                    || ')');
                            END IF;

                            --Wanneer confirmationbericht niet binnen is gekomen, dan is de status nog Toegekend (5) en niet Geaccepteerd (8). Dat kunnen we nu ook omzetten.
                            IF     v_vmnr IS NOT NULL
                               AND v_opdrkey IS NOT NULL
                               AND v_status = 5 --Toegekend (en dus nog niet geaccepteerd)
                            THEN
                                v_errormsg :=
                                       '(0x433)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                UPDATE mld_opdr
                                   SET mld_statusopdr_key = 8  -- Geaccepteerd
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND v_status = 5;

                                fac.trackaction (
                                    'ORDACP',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                    '#Melding gevalideerd in Valuemation'); -- # voorkomt notificatie
                            END IF;

                            -- Hieronder bepalen of de opdracht al de kenmerken mbt status Valuemation gevuld heeft.
                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 402 -- Kenmerk 'Status valuemation'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_kenmstatusoms_cur
                              FROM DUAL;

                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 404 -- Kenmerk 'Status per'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_kenmstatusper_cur
                              FROM DUAL;

                            -- Als de kenmerken nog niet bestaan, dan toevoegen bij de opdracht, anders updaten indien gewijzigd.
                            IF v_kenmstatusoms_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x434)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                         VALUES (v_opdrkey,
                                                 402,
                                                 'Wacht op uw reactie'); -- Kenmerk 'Status valuemation'

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status Valuemation: leeg --> '
                                    || v_kenmstatusoms); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x435)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                UPDATE mld_kenmerkopdr
                                   SET mld_kenmerkopdr_waarde =
                                           v_kenmstatusoms
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND mld_kenmerk_key = 402 -- Kenmerk 'Status valuemation'
                                       AND mld_kenmerkopdr_verwijder IS NULL;

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status Valuemation: '
                                    || v_kenmstatusoms_cur
                                    || ' --> '
                                    || v_kenmstatusoms); -- # voorkomt notificatie

                                v_errormsg :=
                                       '(0x436)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;
                            END IF;

                            IF v_kenmstatusper_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x437)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                     VALUES (
                                                v_opdrkey,
                                                404, -- -- Kenmerk 'Status per'
                                                TO_CHAR (
                                                    SYSDATE,
                                                    'DD-MM-YYYY HH24:MI:SS'))
                                  RETURNING mld_kenmerkopdr_waarde
                                       INTO v_kenmstatusper;

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status per: leeg --> '
                                    || v_kenmstatusper); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x438)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                   UPDATE mld_kenmerkopdr
                                      SET mld_kenmerkopdr_waarde =
                                              TO_CHAR (SYSDATE,
                                                       'DD-MM-YYYY HH24:MI:SS')
                                    WHERE     mld_opdr_key = v_opdrkey
                                          AND mld_kenmerk_key = 404 -- Kenmerk 'Status per'
                                          AND mld_kenmerkopdr_verwijder IS NULL
                                RETURNING mld_kenmerkopdr_waarde
                                     INTO v_kenmstatusper;

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status per:'
                                    || v_kenmstatusper_cur
                                    || ' --> '
                                    || v_kenmstatusper); -- # voorkomt notificatie
                            END IF;

                            -- Als er een opdracht_key gevonden kan worden, dan ook de body als notitie meenemen
                            v_errormsg :=
                                '(0x439)' || v_mldkey || psubject || v_actie;

                            INSERT INTO mld_opdr_note (
                                            mld_opdr_key,
                                            mld_opdr_note_omschrijving,
                                            prs_perslid_key)
                                     VALUES (
                                                v_opdrkey,
                                                SUBSTR (
                                                    REPLACE (
                                                        SUBSTR (pbody,
                                                                1,
                                                                4000),
                                                           CHR (13)
                                                        || CHR (10)
                                                        || CHR (13)
                                                        || CHR (10),
                                                        CHR (13) || CHR (10)),
                                                    1,
                                                    4000), -- Verwijder onnodige witregels
                                                sender);

                            fac.trackaction (
                                'ORDUPD',
                                v_opdrkey,
                                sender,
                                NULL,
                                '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
                        END IF;
                    END IF;

                    --Hieronder de afhandeling van het bericht wanneer de melding vanuit Valuemation ter goedkeuring in Facilitor wordt aangeboden.
                    --Op termijn ontvangen we hopelijk nog 2 url's in fac_result in de html-body om de oplossing te accepteren of af te wijzen. 1 url wordt al geboden (zie actie ORDOPL hieronder)
                    IF v_actie = 'ORDGOE'
                    THEN
                        v_errormsg :=
                            '(0x440)' || v_mldkey || psubject || v_actie;
                        v_vmnr :=
                            SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''),
                                    1,
                                    12);


                        IF v_opdrkey IS NOT NULL
                        THEN
                            v_errormsg :=
                                '(0x441)' || v_mldkey || psubject || v_actie;

                            SELECT mld_statusopdr_key
                              INTO v_status
                              FROM mld_opdr
                             WHERE mld_opdr_key = v_opdrkey;

                            --Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
                            IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
                            THEN
                                v_errormsg :=
                                       '(0x442)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                UPDATE mld_opdr
                                   SET mld_opdr_externnr = v_vmnr
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND mld_opdr_externnr IS NULL;

                                --Enkel tracking mbt nieuw (of aanpassing Externnr) toevoegen als er ook iets wijzigt.
                                IF v_opdrextnr <> v_vmnr
                                THEN
                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           '#Valuemation nr vanuit confirmationbericht: '
                                        || v_opdrextnr
                                        || ' --> '
                                        || v_vmnr);  -- # voorkomt notificatie
                                END IF;
                            ELSE
                                fac.writelog (
                                    'PROCESSEMAIL',
                                    'E',
                                       'Valuemation nr kon niet worden gevuld:'
                                    || pfrom
                                    || '['
                                    || v_errormsg
                                    || v_vmnr
                                    || ']',
                                       'OTHERS (error '
                                    || SQLCODE
                                    || '/'
                                    || SUBSTR (SQLERRM, 1, 100)
                                    || ')');
                            END IF;

                            --Wanneer confirmationbericht niet binnen is gekomen, dan is de status nog Toegekend (5) en niet Geaccepteerd (8). Dat kunnen we nu ook omzetten.
                            IF     v_vmnr IS NOT NULL
                               AND v_opdrkey IS NOT NULL
                               AND v_status = 5 --Toegekend (en dus nog niet geaccepteerd)
                            THEN
                                v_errormsg :=
                                       '(0x443)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                UPDATE mld_opdr
                                   SET mld_statusopdr_key = 8  -- Geaccepteerd
                                 WHERE mld_opdr_key = v_opdrkey;

                                fac.trackaction (
                                    'ORDACP',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                    '#Melding gevalideerd in Valuemation'); -- # voorkomt notificatie
                            END IF;

                            -- Hieronder bepalen of de opdracht al de kenmerken gevuld heeft.
                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 402 -- Kenmerk 'Status valuemation'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_kenmstatusoms_cur
                              FROM DUAL;

                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 404 -- Kenmerk 'Status per'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_kenmstatusper_cur
                              FROM DUAL;

                            -- Als de kenmerken nog niet bestaan, dan toevoegen bij de opdracht, anders updaten indien gewijzigd.
                            IF v_kenmstatusoms_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x444)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                         VALUES (v_opdrkey,
                                                 402,
                                                 'Oplossing is aangereikt'); -- Kenmerk 'Status valuemation'

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status Valuemation: leeg --> '
                                    || v_kenmstatusoms); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x445)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                IF v_kenmstatusoms_cur <> v_kenmstatusoms_cur
                                THEN
                                    UPDATE mld_kenmerkopdr
                                       SET mld_kenmerkopdr_waarde =
                                               v_kenmstatusoms
                                     WHERE     mld_opdr_key = v_opdrkey
                                           AND mld_kenmerk_key = 402 -- Kenmerk 'Status valuemation'
                                           AND mld_kenmerkopdr_verwijder
                                                   IS NULL;

                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           'Status Valuemation: '
                                        || v_kenmstatusoms_cur
                                        || ' --> '
                                        || v_kenmstatusoms); -- # voorkomt notificatie
                                ELSE
                                    v_errormsg :=
                                           '(0x446)'
                                        || v_mldkey
                                        || psubject
                                        || v_actie;
                                END IF;
                            END IF;

                            IF v_kenmstatusper_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x447)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                     VALUES (
                                                v_opdrkey,
                                                404, -- -- Kenmerk 'Status per'
                                                TO_CHAR (
                                                    SYSDATE,
                                                    'DD-MM-YYYY HH24:MI:SS'))
                                  RETURNING mld_kenmerkopdr_waarde
                                       INTO v_kenmstatusper;

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status per: leeg --> '
                                    || v_kenmstatusper); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x448)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                   UPDATE mld_kenmerkopdr
                                      SET mld_kenmerkopdr_waarde =
                                              TO_CHAR (SYSDATE,
                                                       'DD-MM-YYYY HH24:MI:SS')
                                    WHERE     mld_opdr_key = v_opdrkey
                                          AND mld_kenmerk_key = 404 -- Kenmerk 'Status per'
                                          AND mld_kenmerkopdr_verwijder IS NULL
                                RETURNING mld_kenmerkopdr_waarde
                                     INTO v_kenmstatusper;

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Status per:'
                                    || v_kenmstatusper_cur
                                    || ' --> '
                                    || v_kenmstatusper); -- # voorkomt notificatie
                            END IF;

                            -- Als er een opdracht_key gevonden kan worden, dan ook de body als afhandeling meenemen
                            v_errormsg :=
                                '(0x449)' || v_mldkey || psubject || v_actie;

                            UPDATE mld_opdr
                               SET mld_opdr_opmerking =
                                       SUBSTR (
                                           REPLACE (
                                               SUBSTR (pbody, 1, 4000),
                                                  CHR (13)
                                               || CHR (10)
                                               || CHR (13)
                                               || CHR (10),
                                               CHR (13) || CHR (10)),
                                           1,
                                           4000)
                             WHERE mld_opdr_key = v_opdrkey;

                            fac.trackaction ('ORDUPD',
                                             v_opdrkey,
                                             sender,
                                             NULL,
                                             'Oplossing is aangereikt');
                        END IF;
                    END IF;

                    --Hieronder de afhandeling van het bericht wanneer de melding vanuit Valuemation ter goedkeuring in Facilitor wordt aangeboden. Er wordt een kenmerk gevuld met een url naar VM om de oplossing te accorderen
                    --Deze actie ORDOPL komt als 2e email met de email die hoort bij actie ORDGOE. Een aantal handelingen worden hier dus niet (dubbel) gedaan (dat gebeurt al bij ORDGOE)
                    IF v_actie = 'ORDOPL'
                    THEN
                        v_errormsg :=
                            '(0x450)' || v_mldkey || psubject || v_actie;
                        v_vmnr :=
                            SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''),
                                    1,
                                    12);

                        SELECT SUBSTR (
                                   SUBSTR (
                                       fac_result_waarde,
                                       (INSTR (
                                            fac_result_waarde,
                                            'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                   0,
                                     INSTR (
                                         SUBSTR (
                                             fac_result_waarde,
                                             (INSTR (
                                                  fac_result_waarde,
                                                  'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                         '"')
                                   - 1),
                               SUBSTR (
                                   SUBSTR (
                                       SUBSTR (
                                           fac_result_waarde,
                                           INSTR (
                                               SUBSTR (
                                                   fac_result_waarde,
                                                   (INSTR (
                                                        fac_result_waarde,
                                                        'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                               '"')),
                                       (INSTR (
                                            SUBSTR (
                                                fac_result_waarde,
                                                INSTR (
                                                    SUBSTR (
                                                        fac_result_waarde,
                                                        (INSTR (
                                                             fac_result_waarde,
                                                             'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                                    '"')),
                                            'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                   0,
                                     INSTR (
                                         SUBSTR (
                                             SUBSTR (
                                                 fac_result_waarde,
                                                 INSTR (
                                                     SUBSTR (
                                                         fac_result_waarde,
                                                         (INSTR (
                                                              fac_result_waarde,
                                                              'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                                     '"')),
                                             (INSTR (
                                                  SUBSTR (
                                                      fac_result_waarde,
                                                      INSTR (
                                                          SUBSTR (
                                                              fac_result_waarde,
                                                              (INSTR (
                                                                   fac_result_waarde,
                                                                   'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                                          '"')),
                                                  'https://support.aareon.com/vmwebprod/vmweb?task=runlink'))),
                                         '"')
                                   - 1)
                          INTO v_vm_oplossing, v_vm_niet_akkoord
                          FROM fac_result
                         WHERE     fac_result_naam = 'htmlbody'
                               AND fac_result_sessionid = psessionid;

                        IF v_opdrkey IS NOT NULL
                        THEN
                            v_errormsg :=
                                '(0x451)' || v_mldkey || psubject || v_actie;

                            -- Hieronder bepalen of de opdracht al het kenmerk gevuld heeft.
                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 407 -- Kenmerk 'Klik hier als de oplossing akkoord is'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_vm_oplossing_cur
                              FROM DUAL;

                            -- Als de kenmerken nog niet bestaan, dan toevoegen bij de opdracht, anders updaten indien gewijzigd.
                            IF v_vm_oplossing_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x452)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie
                                    || v_vm_oplossing;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                     VALUES (v_opdrkey, 407, v_vm_oplossing); -- Kenmerk 'Klik hier als de oplossing akkoord is'

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                    'Oplossing: leeg --> ' || v_vm_oplossing); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x453)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                IF v_vm_oplossing <> v_vm_oplossing_cur
                                THEN
                                    UPDATE mld_kenmerkopdr
                                       SET mld_kenmerkopdr_waarde =
                                               v_vm_oplossing
                                     WHERE     mld_opdr_key = v_opdrkey
                                           AND mld_kenmerk_key = 407 -- Kenmerk 'Klik hier als de oplossing akkoord is'
                                           AND mld_kenmerkopdr_verwijder
                                                   IS NULL;

                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           'Oplossing: '
                                        || v_vm_oplossing_cur
                                        || ' --> '
                                        || v_vm_oplossing); -- # voorkomt notificatie
                                ELSE
                                    v_errormsg :=
                                           '(0x454)'
                                        || v_mldkey
                                        || psubject
                                        || v_actie;
                                END IF;
                            END IF;

                            v_errormsg :=
                                '(0x456)' || v_mldkey || psubject || v_actie;

                            -- Hieronder bepalen of de opdracht al het kenmerk gevuld heeft.
                            SELECT COALESCE (
                                       (SELECT mld_kenmerkopdr_waarde
                                          FROM mld_kenmerkopdr
                                         WHERE     mld_kenmerk_key = 408 -- Kenmerk 'Klik hier als de oplossing niet akkoord is'
                                               AND mld_opdr_key = v_opdrkey
                                               AND mld_kenmerkopdr_verwijder
                                                       IS NULL),
                                       'leeg')
                              INTO v_vm_niet_akkoord_cur
                              FROM DUAL;

                            -- Als de kenmerken nog niet bestaan, dan toevoegen bij de opdracht, anders updaten indien gewijzigd.
                            IF v_vm_niet_akkoord_cur = 'leeg'
                            THEN
                                v_errormsg :=
                                       '(0x457)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie
                                    || v_vm_niet_akkoord;

                                INSERT INTO mld_kenmerkopdr (
                                                mld_opdr_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkopdr_waarde)
                                         VALUES (v_opdrkey,
                                                 408,
                                                 v_vm_niet_akkoord); -- Kenmerk 'Klik hier als de oplossing niet akkoord is'

                                fac.trackaction (
                                    'ORDUPD',
                                    v_opdrkey,
                                    sender,
                                    NULL,
                                       'Niet akkoord: leeg --> '
                                    || v_vm_niet_akkoord); -- # voorkomt notificatie
                            ELSE
                                v_errormsg :=
                                       '(0x458)'
                                    || v_mldkey
                                    || psubject
                                    || v_actie;

                                IF v_vm_niet_akkoord <> v_vm_niet_akkoord_cur
                                THEN
                                    UPDATE mld_kenmerkopdr
                                       SET mld_kenmerkopdr_waarde =
                                               v_vm_niet_akkoord
                                     WHERE     mld_opdr_key = v_opdrkey
                                           AND mld_kenmerk_key = 408 -- Kenmerk 'Klik hier als de oplossing niet akkoord is'
                                           AND mld_kenmerkopdr_verwijder
                                                   IS NULL;

                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           'Niet akkoord: '
                                        || v_vm_niet_akkoord_cur
                                        || ' --> '
                                        || v_vm_niet_akkoord); -- # voorkomt notificatie
                                ELSE
                                    v_errormsg :=
                                           '(0x459)'
                                        || v_mldkey
                                        || psubject
                                        || v_actie;
                                END IF;
                            END IF;
                        END IF;
                    END IF;

                    --Hieronder de afhandeling van het bericht wanneer de melding is opgelost in Valuemation.
                    IF v_actie = 'ORDAFM'
                    THEN
                        v_errormsg :=
                            '(0x460)' || v_mldkey || psubject || v_actie;
                        v_vmnr :=
                            SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''),
                                    1,
                                    12);

                        IF v_opdrkey IS NOT NULL
                        THEN
                            --Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
                            IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
                            THEN
                                UPDATE mld_opdr
                                   SET mld_opdr_externnr = v_vmnr
                                 WHERE     mld_opdr_key = v_opdrkey
                                       AND mld_opdr_externnr IS NULL;

                                --Enkel tracking mbt nieuw (of aanpassing Externnr) toevoegen als er ook iets wijzigt.
                                IF v_opdrextnr <> v_vmnr
                                THEN
                                    fac.trackaction (
                                        'ORDUPD',
                                        v_opdrkey,
                                        sender,
                                        NULL,
                                           '#Valuemation nr vanuit confirmationbericht: '
                                        || v_opdrextnr
                                        || ' --> '
                                        || v_vmnr);  -- # voorkomt notificatie
                                END IF;
                            ELSE
                                fac.writelog (
                                    'PROCESSEMAIL',
                                    'E',
                                       'Valuemation nr kon niet worden gevuld:'
                                    || pfrom
                                    || '['
                                    || v_errormsg
                                    || v_vmnr
                                    || ']',
                                       'OTHERS (error '
                                    || SQLCODE
                                    || '/'
                                    || SUBSTR (SQLERRM, 1, 100)
                                    || ')');
                            END IF;

                            UPDATE mld_opdr
                               SET mld_statusopdr_key = 6,         -- Afgemeld
                                   mld_opdr_opmerking =
                                       SUBSTR (
                                              psubject
                                           || CHR (13)
                                           || CHR (10)
                                           || REPLACE (
                                                  SUBSTR (
                                                      pbody,
                                                      1,
                                                        4000
                                                      - (  LENGTH (psubject)
                                                         + 2)),
                                                     CHR (13)
                                                  || CHR (10)
                                                  || CHR (13)
                                                  || CHR (10),
                                                  CHR (13) || CHR (10)),
                                           1,
                                           4000) -- Verwijder onnodige witregels
                             WHERE mld_opdr_key = v_opdrkey;

                            fac.trackaction (
                                'ORDUPD',
                                v_opdrkey,
                                sender,
                                NULL,
                                'Melding gereed gemeld in Valuemation'); -- # voorkomt notificatie

                            INSERT INTO mld_opdr_note (
                                            mld_opdr_key,
                                            mld_opdr_note_omschrijving,
                                            prs_perslid_key)
                                     VALUES (
                                                v_opdrkey,
                                                SUBSTR (
                                                    REPLACE (
                                                        SUBSTR (pbody,
                                                                1,
                                                                4000),
                                                           CHR (13)
                                                        || CHR (10)
                                                        || CHR (13)
                                                        || CHR (10),
                                                        CHR (13) || CHR (10)),
                                                    1,
                                                    4000), -- Verwijder onnodige witregels
                                                sender);

                            fac.trackaction (
                                'ORDUPD',
                                v_opdrkey,
                                sender,
                                NULL,
                                '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
                        ELSE
                            fac.writelog (
                                'PROCESSEMAIL',
                                'E',
                                   'Melding kan niet geaccepteerd worden, onbekende opdrachtkey'
                                || pfrom
                                || '['
                                || v_errormsg
                                || ']',
                                   'OTHERS (error '
                                || SQLCODE
                                || '/'
                                || SUBSTR (SQLERRM, 1, 100)
                                || ')');
                        END IF;
                    END IF;

                    --               -- Zoek het laagste bijlagen kenmerk om de bijlagen onder te stoppen
                    --               v_errormsg := 'Fout bij zoeken naar kenmerkbijlage';
                    --
                    --               SELECT MIN (mld_kenmerk_key)
                    --                 INTO v_kenmerk_key
                    --                 FROM mld_kenmerk k,
                    --                      mld_srtkenmerk sk,
                    --                      mld_stdmelding std,
                    --                      ins_tab_discipline d
                    --                WHERE     mld_srtkenmerk_kenmerktype = 'M'
                    --                      AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                    --                      AND std.mld_stdmelding_key = stdmelding
                    --                      AND std.mld_ins_discipline_key = d.ins_discipline_key
                    --                      AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
                    --                             AND k.mld_kenmerk_niveau = 'S')
                    --                           OR (k.mld_stdmelding_key = d.ins_discipline_key
                    --                               AND k.mld_kenmerk_niveau = 'D')
                    --                           OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
                    --                               AND k.mld_kenmerk_niveau = 'T'))
                    --                      AND k.mld_kenmerk_verwijder IS NULL
                    --                      AND NOT EXISTS
                    --                            (SELECT mld_kenmerk_volgnummer
                    --                               FROM mld_kenmerk k1,
                    --                                    mld_srtkenmerk sk1,
                    --                                    mld_stdmelding std1,
                    --                                    ins_tab_discipline d1
                    --                              WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
                    --                                    AND sk1.mld_srtkenmerk_key =
                    --                                          k1.mld_srtkenmerk_key
                    --                                    AND std1.mld_stdmelding_key = stdmelding
                    --                                    AND std1.mld_ins_discipline_key =
                    --                                          d1.ins_discipline_key
                    --                                    AND ( (k1.mld_stdmelding_key =
                    --                                              std1.mld_stdmelding_key
                    --                                           AND k1.mld_kenmerk_niveau = 'S')
                    --                                         OR (k1.mld_stdmelding_key =
                    --                                                d1.ins_discipline_key
                    --                                             AND k1.mld_kenmerk_niveau = 'D')
                    --                                         OR (k1.mld_stdmelding_key =
                    --                                                d1.ins_srtdiscipline_key
                    --                                             AND k1.mld_kenmerk_niveau = 'T'))
                    --                                    AND k1.mld_kenmerk_verwijder IS NULL
                    --                                    AND k1.mld_kenmerk_volgnummer >
                    --                                          k.mld_kenmerk_volgnummer);
                    --
                    --               IF v_opdrkey IS NOT NULL
                    --               THEN
                    -- Bijlagen toevoegen uit email
                    v_errormsg :=
                        '(0x601)' || v_mldkey || psubject || v_actie;

                    INSERT INTO fac_result (fac_result_sessionid,
                                            fac_result_naam,
                                            fac_result_waarde)
                             VALUES (
                                        psessionid,
                                        'kenmerkpath',
                                           'MLD\O'
                                        || TO_CHAR (TRUNC (v_opdrkey / 1000),
                                                    'FM0000')
                                        || '___\O'
                                        || v_opdrkey
                                        || '\'
                                        || v_attachorigin
                                        || '\');

                    --               END IF;

                    -- Originele email wordt opgeslagen bij de opdracht
                    v_errormsg :=
                        '(0x602`)' || v_mldkey || psubject || v_actie;

                    INSERT INTO fac_result (fac_result_sessionid,
                                            fac_result_naam,
                                            fac_result_waarde)
                             VALUES (
                                        psessionid,
                                        'kenmerkorgmailpath',
                                           'MLD\O'
                                        || TO_CHAR (TRUNC (v_opdrkey / 1000),
                                                    'FM0000')
                                        || '___\O'
                                        || v_opdrkey
                                        || '\'
                                        || v_mailorigin
                                        || '\');
                END IF;
            END;
        ELSE
            v_errormsg := '(0x900)' || v_mldkey || psubject || v_actie || ' - geen pto herkend';             
            INSERT INTO fac_result (fac_result_sessionid,
                                    fac_result_naam,
                                    fac_result_waarde)
                     VALUES (psessionid,
                             'maillog',
                             v_errormsg);
    END CASE;
EXCEPTION
    WHEN OTHERS
    THEN
        INSERT INTO fac_result (fac_result_sessionid,
                                fac_result_naam,
                                fac_result_waarde)
             VALUES (psessionid, 'maillog', v_errormsg);

        fac.writelog (
            'PROCESSEMAIL',
            'E',
               'Mail kon niet ingelezen worden afzender:'
            || pfrom
            || '['
            || v_errormsg
            || v_mldkey
            || psubject
            || v_actie
            || ']',
               'OTHERS (error '
            || SQLCODE
            || '/'
            || SUBSTR (SQLERRM, 1, 100)
            || ')');
END;
/


CREATE OR REPLACE PROCEDURE welk_export_valuemation (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_filedir    IN VARCHAR2,
   p_filename   IN VARCHAR2)
AS
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_errorhint      VARCHAR2 (100);

   -- Dit haalt het externnummer op van een opdrachtkenmerk indien externnr bij de melding nog leeg is
   CURSOR sendagain
   IS
      SELECT DISTINCT (mld_opdr_key)             --Zelfde opdracht niet 2 maal
        FROM (SELECT DISTINCT (opdr.mld_opdr_key) --, opdr.mld_melding_key, opdr.mld_opdr_externsyncdate
                FROM mld_opdr opdr, mld_opdr_note note
               WHERE     note.mld_opdr_key = opdr.mld_opdr_key
                     AND opdr.mld_typeopdr_key = 341 --Aareon
                     AND note.prs_perslid_key <> 4 --Facilitor
                     AND mld_statusopdr_key IN (5, 8) -- Toegekend, geaccepteerd
                     AND (opdr.mld_opdr_externsyncdate IS NULL
                          OR opdr.mld_opdr_externsyncdate <
                               note.mld_opdr_note_aanmaak)
              UNION ALL
              SELECT DISTINCT (opdr.mld_opdr_key)
                FROM mld_opdr opdr, fac_bijlagen att
               WHERE     opdr.mld_opdr_key = att.fac_bijlagen_refkey
                     AND att.fac_bijlagen_module = 'MLD'
                     AND opdr.mld_typeopdr_key = 341 --Aareon
                     AND opdr.mld_statusopdr_key IN (5, 8) -- Toegekend, geaccepteerd
                     AND fac_bijlagen_kenmerk_key = 409 -- Opdrachtkenmerk Bijlagen bij opdrachttype Aareon
                     AND (opdr.mld_opdr_externsyncdate IS NULL
                          OR opdr.mld_opdr_externsyncdate <
                               att.fac_bijlagen_aanmaak)
              UNION ALL
              SELECT opdr.mld_opdr_key
                FROM mld_opdr opdr, fac_tracking t
               WHERE     opdr.mld_opdr_key = t.fac_tracking_refkey
                     AND t.fac_srtnotificatie_key = 121 --ORDUPD
                     AND (t.fac_tracking_oms LIKE '%Impact: %'
                          OR t.fac_tracking_oms LIKE '%Urgentie: %')
                     AND opdr.mld_typeopdr_key = 341 --Aareon
                     AND opdr.mld_statusopdr_key IN (5, 8) -- Toegekend, geaccepteerd
                     AND (opdr.mld_opdr_externsyncdate IS NULL
                          OR opdr.mld_opdr_externsyncdate <
                               t.fac_tracking_datum));

   CURSOR kenmerken (
      c_opdr_key NUMBER)
   IS
      SELECT ko.mld_kenmerkopdr_key AS kmkey
        FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk skm
       WHERE     ko.mld_opdr_key = c_opdr_key
             AND k.mld_kenmerk_key = ko.mld_kenmerk_key
             AND skm.mld_srtkenmerk_key = k.mld_srtkenmerk_key
             AND ko.mld_kenmerkopdr_verwijder IS NULL
             AND skm.mld_srtkenmerk_key IN (341, 342); --Kenmerksoorten Status Valuemation en Status per
BEGIN
   v_errorhint := 'init';

   -- We zetten de opdracht opnieuw in de wachtrij voor putorder.
   -- Ook halen we de kenmerken leeg mbt de status in Valuemation
   FOR rec IN sendagain
   LOOP
      BEGIN
         v_errorhint :=
            'Opdracht opnieuw klaar zetten voor verzenden '
            || rec.mld_opdr_key;

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

         v_errorhint :=
            'Kenmerken opdracht legen bij opnieuw verzenden '
            || rec.mld_opdr_key;

         --Daarna legen we de kenmerken bij de opdracht die we opnieuw klaar zetten om te verzenden
         FOR rec1 IN kenmerken (rec.mld_opdr_key)
         LOOP
            BEGIN
               v_errorhint := 'Kenmerken legen ' || rec.mld_opdr_key;

               UPDATE mld_kenmerkopdr
                  SET mld_kenmerkopdr_verwijder = SYSDATE
                WHERE mld_kenmerkopdr_key = rec1.kmkey;
            EXCEPTION
               WHEN OTHERS
               THEN
                  fac.writelog (
                     'EXP_VALUEMATION',
                     'E',
                        'Export tbv opnieuw klaarzetten opdrachten'
                     || '['
                     || v_errorhint
                     || ']',
                        'OTHERS (error '
                     || SQLCODE
                     || '/'
                     || SUBSTR (SQLERRM, 1, 100)
                     || ')');
            END;
         END LOOP;

         v_errorhint :=
            'Syncdatum instellen na opnieuw klaar zetten voor verzenden '
            || rec.mld_opdr_key;

         --We updaten de syncdatum zodat de wijziging eenmalig wordt verstuurd.

         UPDATE mld_opdr
            SET mld_opdr_externsyncdate = SYSDATE
          WHERE mld_opdr_key = rec.mld_opdr_key;

         fac.trackaction (
            'ORDUPD',
            rec.mld_opdr_key,
            NULL,
            NULL,
            'Opdracht opnieuw klaarzetten voor verzending '
            || rec.mld_opdr_key);
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      fac.writelog (
         'EXP_VALUEMATION',
         'E',
            'Export tbv opnieuw klaarzetten opdrachten'
         || '['
         || v_errorhint
         || ']',
            'OTHERS (error '
         || SQLCODE
         || '/'
         || SUBSTR (SQLERRM, 1, 100)
         || ')');
END;
/

CREATE OR REPLACE VIEW welk_v_mldopdr
(
    melding_key,
    meldingnummer,
    melding_start_key,
    externnummer,
    melding_regio,
    melding_district,
    melding_locatiecode,
    melding_locatie,
    melding_locatieplaats,
    fclt_3d_locatie_key,
    melding_gebouwcode,
    melding_gebouw,
    melding_verdieping,
    melding_ruimtenr,
    melding_ruimte,
    melding_ordernr,
    kostensoortgroep,
    kostensoort,
    kostenplaats,
    kostenplaats_oms,
    melder,
    melder_key,
    afdeling,
    afdeling_omschrijving,
    [REDACTED],
    bedrijf_key,
    invoerder,
    meldbron,
    soortmelding,
    fclt_3d_discipline_key,
    productgroep,
    subproductgroep,
    behandelgroep,
    behandelaar,
    behandelaar_key,
    subproductgroepgroep,
    [REDACTED],
    actieve_behandelgroep,
    actieve_behandelaar_key,
    actieve_behandelaar,
    melding_status,
    sla_nvt,
    sla_werkdgn,
    sla_werkuren,
    sla_respijtdgn,
    sla_respijturen,
    sla_accptdgn,
    sla_accpturen,
    plan_uitvoertijd_sla,
    melding_datum,
    melding_einddatum,
    melding_einddatum_std,
    melding_acceptdatum,
    melding_afgemeld,
    melding_accepted,
    doorlooptijd_werkdgn,
    doorlooptijd_werkuren,
    onderwerp,
    vomschrijving,
    melding_opmerking,
    prioriteit,
    prioriteittxt,
    rating,
    rating_opmerking,
    bolletje,
    actiecode,
    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,
    selfservice,
    opdracht_key,
    opdracht_nummer,
    opdracht_regio,
    opdracht_district,
    opdracht_locatie_code,
    opdracht_locatie,
    opdracht_locatieplaats,
    opdracht_gebouwcode,
    opdracht_gebouw,
    opdracht_verdieping,
    opdracht_ruimtenr,
    opdracht_ruimte,
    opdracht_kostenplaats,
    opdracht_kostenplaats_oms,
    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_verstrektdatum,
    opdracht_lev_doorloopuren,
    opdracht_lev_doorloopdagen,
    status_valuemation,
    status_per
)
AS
    SELECT melding_key,
           meldingnummer,
           melding_start_key,
           mo.mld_opdr_externnr,
           melding_regio,
           melding_district,
           melding_locatiecode,
           melding_locatie,
           melding_locatieplaats,
           fclt_3d_locatie_key,
           melding_gebouwcode,
           melding_gebouw,
           melding_verdieping,
           melding_ruimtenr,
           melding_ruimte,
           melding_ordernr,
           kostensoortgroep,
           kostensoort,
           kostenplaats,
           kostenplaats_oms,
           melder,
           melder_key,
           afdeling,
           afdeling_omschrijving,
           fclt_3d_afdeling_key,
           bedrijf_key,
           invoerder,
           meldbron,
           soortmelding,
           fclt_3d_discipline_key,
           productgroep,
           subproductgroep,
           behandelgroep,
           behandelaar,
           behandelaar_key,
           subproductgroepgroep,
           fclt_3d_discipline2_key,
           actieve_behandelgroep,
           actieve_behandelaar_key,
           actieve_behandelaar,
           melding_status,
           sla_nvt,
           sla_werkdgn,
           sla_werkuren,
           sla_respijtdgn,
           sla_respijturen,
           sla_accptdgn,
           sla_accpturen,
           plan_uitvoertijd_sla,
           melding_datum,
           melding_einddatum,
           melding_einddatum_std,
           melding_acceptdatum,
           melding_afgemeld,
           melding_accepted,
           doorlooptijd_werkdgn,
           doorlooptijd_werkuren,
           onderwerp,
           vomschrijving,
           melding_opmerking,
           prioriteit,
           prioriteittxt,
           rating,
           rating_opmerking,
           bolletje,
           actiecode,
           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,
           selfservice,
           opdracht_key,
           opdracht_nummer,
           opdracht_regio,
           opdracht_district,
           opdracht_locatie_code,
           opdracht_locatie,
           opdracht_locatieplaats,
           opdracht_gebouwcode,
           opdracht_gebouw,
           opdracht_verdieping,
           opdracht_ruimtenr,
           opdracht_ruimte,
           opdracht_kostenplaats,
           opdracht_kostenplaats_oms,
           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_verstrektdatum,
           opdracht_lev_doorloopuren,
           opdracht_lev_doorloopdagen,
           (SELECT DISTINCT mld_kenmerkopdr_waarde
              FROM mld_v_aanwezigkenmerkopdr  km1,
                   mld_srtkenmerk             sk,
                   mld_kenmerk                km
             WHERE     km1.mld_opdr_key = opdracht_key
                   AND sk.mld_srtkenmerk_key = 341        --Status Valuemation
                   AND km.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = km1.mld_kenmerk_key
                   AND km1.mld_kenmerkopdr_verwijder IS NULL)
               AS status_valuemation,
           (SELECT DISTINCT mld_kenmerkopdr_waarde
              FROM mld_v_aanwezigkenmerkopdr  km1,
                   mld_srtkenmerk             sk,
                   mld_kenmerk                km
             WHERE     km1.mld_opdr_key = opdracht_key
                   AND sk.mld_srtkenmerk_key = 342                --Status per
                   AND km.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = km1.mld_kenmerk_key
                   AND km1.mld_kenmerkopdr_verwijder IS NULL)
               AS status_per
      FROM mld_v_udr_meldingopdracht, mld_opdr mo
     WHERE mo.mld_opdr_key = opdracht_key AND opdracht_key IS NOT NULL;
     
CREATE OR REPLACE VIEW WELK_V_NOTI_KERNGEBR
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY
)
AS
      SELECT 'CUST02'                                              AS code,
             NULL                                                  AS sender,
             fac.safe_to_number (kmm.mld_kenmerkmelding_waarde)    AS receiver,
                'Er is een nieuwe melding: '
             || m.mld_melding_key
             || ' ('
             || COALESCE (m.mld_melding_onderwerp,
                          sm.mld_stdmelding_omschrijving)
             || ')'                                                AS text,
             m.mld_melding_key                                     AS key,
             NULL                                                  AS extra_key
        FROM mld_melding       m,
             mld_stdmelding    sm,
             ins_tab_discipline d,
             ins_srtdiscipline sd,
             mld_kenmerkmelding kmm,
             mld_kenmerk       km
       WHERE     m.mld_melding_key NOT IN
                     (SELECT t.fac_tracking_refkey
                        FROM fac_tracking t
                       WHERE     t.fac_tracking_oms LIKE '%CUST02%'
                             AND t.fac_tracking_refkey = m.mld_melding_key)
             AND m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = d.ins_discipline_key
             AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
             AND sd.ins_srtdiscipline_key IN (21, 41) -- IenA Probleem en IenA Wijzigingsverzoek
             AND kmm.mld_melding_key = m.mld_melding_key
             AND km.mld_kenmerk_key = kmm.mld_kenmerk_key
             AND km.mld_srtkenmerk_key = 363 -- Kenmerksoort Personen (kerngebruikers)
    ORDER BY m.mld_melding_key;     

BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('WELK', 10); 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
