-- Script containing customer specific configuration sql statements for MAASDELTA
-- $Revision$
-- $Id$

DEFINE thisfile = 'MAAS.SQL'
DEFINE dbuser   = '^MAAS'
DEFINE custid   = 'MAAS'

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

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

CREATE OR REPLACE VIEW maas_v_noti_lgstartdvb
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT 'CUST01' AS code,
                   NULL,
                   leidinggevende, -- Persoon "_Schoonmaak_Van_Vliet", voor de emailadressen
                   'Notificatie start indiensttreding ' || naam,
                   mld_melding_key,
                   NULL
     FROM (SELECT m.mld_melding_key,
                  (SELECT mld_kenmerkmelding_waarde
                     FROM mld_kenmerkmelding km
                    WHERE m.mld_melding_key = km.mld_melding_key
                          AND mld_kenmerk_key = 22)
                     AS naam,      --kenmerk_key voor kenmerk 'Volledige naam'
                  (SELECT mld_kenmerkmelding_waarde
                     FROM mld_kenmerkmelding km
                    WHERE m.mld_melding_key = km.mld_melding_key
                          AND mld_kenmerk_key = 343)
                     AS leidinggevende --kenmerk_key voor kenmerk 'leidinggevende'
             FROM mld_melding m
            WHERE TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)-1
                  AND m.mld_stdmelding_key = 262);

CREATE OR REPLACE VIEW maas_v_rap_inlog_als
(
   trackingdatum,
   datum,
   tijdstip,
   trackingomschrijving,
   key_als,
   inloggen_als,
   key_door,
   inloggen_door
)
AS
     SELECT t.fac_tracking_datum, TRUNC (t.fac_tracking_datum),
            TO_CHAR (t.fac_tracking_datum, 'hh24:mm:ss'),
            t.fac_tracking_oms,
            t.fac_tracking_refkey,
            als.prs_perslid_naam_friendly AS als,
            t.prs_perslid_key,
            door.prs_perslid_naam_friendly AS door
       FROM fac_tracking t,
            fac_srtnotificatie sn,
            prs_v_perslid_fullnames als,
            prs_v_perslid_fullnames door
      WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
            AND t.fac_srtnotificatie_key = 101                       -- PRSLOG
            AND als.prs_perslid_key = t.fac_tracking_refkey
            AND door.prs_perslid_key = t.prs_perslid_key
            AND (t.fac_tracking_oms LIKE '%INLOGGEN ALS%'
                 OR t.fac_tracking_oms LIKE '%Inloggen door%')
   ORDER BY t.fac_tracking_key DESC;

CREATE OR REPLACE FORCE VIEW maas_v_noti_inlogals
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT
          'CUST02' AS code,
          NULL,
          key_als,
          inloggen_door || ' heeft op uw account in Facilitor ingelogd',
          key_door,
          NULL
     FROM maas_v_rap_inlog_als
    WHERE     key_als <> key_door
          AND key_door <> 3 -- Facilitor, inlogpogingen vanuit Facilitor hoeven niet genotificeerd te worden
          AND (SYSDATE - trackingdatum) * 24 BETWEEN 0 AND 1;
/

CREATE OR REPLACE PROCEDURE maas_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_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;
BEGIN
   v_errormsg := '(0x143)' || v_mldkey || psubject || v_actie;
   sender := 3;                           --Standaard de persoon     Facilitor
   v_mailorigin := 1342;                   --Opdrachtkenmerk_key originele mail-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 'HRM@%'
      THEN
         v_errormsg := '(0x145)' || v_mldkey || psubject || v_actie;
         stdmelding :=
            fac.safe_to_number (fac.getsetting ('defaultstdmelding'));

         mldstat := 4;
         -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden gecorrigeerd naar een workflowstartmelding.
         v_manager_key := NULL; --Standaard nog geen manager bepaald, dat doen we later en dit halen we dan uit m_body
         v_lgkenmerk_key := NULL; --Standaard nog geen kenmerk bepaald, dat doen we later

         -- Obv onderwerpveld bepalen welke stdmelding aangemaakt moet worden.
         CASE
            WHEN UPPER (psubject) LIKE '%NIEUWE MEDEWERKER%'
            THEN
               stdmelding := 501;
            WHEN UPPER (psubject) LIKE '%NIEUWE STAGIAIR%'
            THEN
               stdmelding := 501;
            WHEN UPPER (psubject) LIKE '%NIEUWE INLEENKRACHT%'
            THEN
               stdmelding := 501;
            WHEN UPPER (psubject) LIKE '%UIT DIENST%'
            THEN
               stdmelding := 522;
            WHEN UPPER (psubject) LIKE '%ANDERE FUNCTIE%'
            THEN
               stdmelding := 564;
            ELSE
               stdmelding := 581; -- Dit is de verzamelbak van binnenkomende meldingen/mails waarvan niet de juiste stdmelding kan worden bepaald.
               mldstat := 2;
         -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden gecorrigeerd naar een workflowstartmelding.
         END CASE;


         --We halen het emailadres en dan de key van de manager op uit de body (altijd eindigend op @maasdelta.nl). En in body staat 'Email manager: '
         v_errormsg :=
            '(0x146)' || v_mldkey || psubject || v_actie || 'Bepalen manager';
         v_manager_email :=
            SUBSTR (
               m_body,
               INSTR (m_body, 'Email manager:') + 15,
               INSTR (SUBSTR (m_body, INSTR (m_body, 'Email manager:')), '@')
               - 3);

         BEGIN
            SELECT MAX (prs_perslid_key)
              INTO v_manager_key
              FROM prs_perslid
             WHERE UPPER (prs_perslid_email) = UPPER (v_manager_email)
                   AND prs_perslid_verwijder IS NULL;
         END;

         -- Hier maken we de melding aan.
         BEGIN
            v_errormsg :=
                  'Melding kan niet worden aangemaakt ('
               || 'To: '
               || pto
               || 'Subject: '
               || psubject
               || 'From: '
               || pfrom
               || 'Body: '
               || SUBSTR (pbody, 1, 100)
               || ')';

            INSERT INTO mld_melding (mld_melding_module,
                                     mld_meldbron_key,
                                     mld_melding_datum,
                                     mld_melding_onderwerp,
                                     mld_melding_omschrijving,
                                     mld_melding_status,
                                     mld_melding_t_uitvoertijd,
                                     mld_stdmelding_key,
                                     mld_melding_kto,
                                     mld_melding_externnr,
                                     prs_perslid_key,
                                     prs_perslid_key_voor,
                                     prs_kostenplaats_key,
                                     mld_melding_spoed)
                VALUES ('MLD',
                        4,                                            -- email
                        SYSDATE,
                        psubject,
                        SUBSTR (
                           REPLACE (
                              SUBSTR (m_body, 1, 4000),
                              CHR (13) || CHR (10) || CHR (13) || CHR (10),
                              CHR (13) || CHR (10)),
                           1,
                           4000),              -- verwijder onnodige witregels
                        mldstat,
                        mld_t_uitvoertijd (2, 'D'),
                        stdmelding,
                        0,
                        NULL,
                        3,                                 --Persoon Facilitor
                        3,                                 --Persoon Facilitor
                        NULL,
                        3)
             RETURNING mld_melding_key
                  INTO mldkey;

            -- Bepalen kenmerk_key obv stdmelding
            BEGIN
               SELECT km.mld_kenmerk_key
                 INTO v_lgkenmerk_key
                 FROM mld_kenmerk km
                WHERE km.mld_srtkenmerk_key = 341 -- Kenmerksoort Leidinggevenden
                      AND stdmelding = km.mld_stdmelding_key;
            END;

            v_errormsg :=
                  '(0x147)'
               || v_mldkey
               || psubject
               || v_actie
               || 'Invoeren kenmerk Leidinggevende/manager';

            --Hier proberen we bij de zojuist aangemaakte melding het kenmerk 'Leidinggevende' te vullen met de prs_perslid_key die hoort bij het manager-emailadres uit de body
            CASE
               WHEN v_lgkenmerk_key IS NOT NULL
               THEN
                  INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                  mld_kenmerk_key,
                                                  mld_kenmerkmelding_waarde)
                      VALUES (mldkey, v_lgkenmerk_key, v_manager_key);
            END CASE;

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

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

            -- Indien het een melding is die start is van een workflow, dan moet ook de eerstvolgende stap(pen) aangemaakt worden.
            v_errormsg := '(0x149)' || v_mldkey || psubject || v_actie;
            mld.mld_nextworkflowstep (mldkey, -1);
         END;
      --   Eerst hanteerde ik een End case en End om de twee kanalen te scheiden. Daarop liep het tweede kanaal (pto: helpdesk_maasdelta@) niet, vreemd genoeg. Door de End case en End uit te commentarieren liep de procedure wel.
      --   Wellicht wat vreemd en onverwacht gedrag, maar met die wetenschap, dit maar zo laten.
      --   END CASE;
      --   CASE
      WHEN UPPER (pto) LIKE 'HELPDESK_MAASDELTA@%'
      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) - 50, 51)) LIKE
                    '%WACHT INMIDDELS EEN WEEK OP AANVULLENDE INFORMATIE%'
            THEN
                v_actie := 'ORDUPD';
                v_kenmstatusoms :=
                    'Wacht inmiddels een week op uw reactie';               
            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 = 602 -- 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 = 603 -- 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, 602, '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 = 602 -- 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,
                                    603, -- -- 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 = 603 -- 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 (
                                    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
                  END IF;
               --               ELSE
               --                  HIER TOCH GEEN LOGGING, ACTIE MAG ANDERS ZIJN DAN ORDUPD. DIT CREEERT TEVEEL ONNODIGE LOGGING.
               --                  fac.writelog (
               --                     'PROCESSEMAIL',
               --                     'E',
               --                     'Melding kan niet bijgewerkt worden, onbekende opdrachtkey'
               --                     || pfrom
               --                     || '['
               --                     || v_errormsg
               --                     || ']',
               --                        'OTHERS (error '
               --                     || SQLCODE
               --                     || '/'
               --                     || SUBSTR (SQLERRM, 1, 100)
               --                     || ')');
               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 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 gevuld heeft.
                     SELECT COALESCE (
                               (SELECT mld_kenmerkopdr_waarde
                                  FROM mld_kenmerkopdr
                                 WHERE     mld_kenmerk_key = 602 -- 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 = 603 -- 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, 602, '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 = 602 -- 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,
                                    603, -- -- 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 = 603 -- 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;
               --               ELSE
               --               HIER TOCH GEEN LOGGING, ACTIE MAG ANDERS ZIJN DAN ORDGOE. DIT CREEERT TEVEEL ONNODIGE LOGGING.
               --                  fac.writelog (
               --                     'PROCESSEMAIL',
               --                     'E',
               --                     'Melding kan niet bijgewerkt worden, onbekende opdrachtkey'
               --                     || pfrom
               --                     || '['
               --                     || v_errormsg
               --                     || ']',
               --                        'OTHERS (error '
               --                     || SQLCODE
               --                     || '/'
               --                     || SUBSTR (SQLERRM, 1, 100)
               --                     || ')');
               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)
                    INTO v_vm_oplossing
                    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 = 801 -- 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 :=
                           '(0x454)' || v_mldkey || psubject || v_actie;

                        INSERT INTO mld_kenmerkopdr (mld_opdr_key,
                                                     mld_kenmerk_key,
                                                     mld_kenmerkopdr_waarde)
                            VALUES (v_opdrkey, 801, 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 :=
                           '(0x455)' || 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 = 801 -- 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 :=
                              '(0x456)' || v_mldkey || psubject || v_actie;
                        END IF;
                     END IF;
                  END IF;
               --               ELSE
               --                  HIER TOCH GEEN LOGGING, ACTIE MAG ANDERS ZIJN DAN ORDOPL. DIT CREEERT TEVEEL ONNODIGE LOGGING.
               --                  fac.writelog (
               --                     'PROCESSEMAIL',
               --                     'E',
               --                     'Melding kan niet bijgewerkt worden met de aangeboden oplossing'
               --                     || pfrom
               --                     || '['
               --                     || v_errormsg
               --                     || ']',
               --                        'OTHERS (error '
               --                     || SQLCODE
               --                     || '/'
               --                     || SUBSTR (SQLERRM, 1, 100)
               --                     || ')');
               END IF;

               --Hieronder de afhandeling van het bericht wanneer de melding is opgelost in  .
               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 (
                                    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;

               -- 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 mldkey IS NOT NULL AND v_kenmerk_key IS NOT NULL
							 THEN
                  INSERT INTO fac_result (fac_result_sessionid,
                                          fac_result_naam,
                                          fac_result_waarde)
                      VALUES (psessionid,
                              'kenmerkpath',
                                 'MLD\M'
                              || TO_CHAR (TRUNC (mldkey / 1000), 'FM0000')
                              || '___\M'
                              || mldkey
                              || '\'
                              || v_kenmerk_key
                              || '\');
               END IF;
               
							 IF v_opdrkey IS NOT NULL
							 THEN
               -- 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 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 maas_export_valuemation 
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 = 481
                     AND note.prs_perslid_key <> 3
                     AND opdr.mld_opdr_verzonden IS NOT NULL
                     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 = 481
                     AND opdr.mld_opdr_verzonden IS NOT NULL
                     AND opdr.mld_statusopdr_key IN (5, 8) -- Toegekend, geaccepteerd
                     AND fac_bijlagen_kenmerk_key = 601 -- 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 = 75
                     AND (t.fac_tracking_oms LIKE '%Impact: %'
                          OR t.fac_tracking_oms LIKE '%Urgentie: %')
                     AND t.prs_perslid_key IS NOT NULL
                     AND t.prs_perslid_key <> 3  --Facilitor, dus enkel tracking door wijzigingen van gebruikers
                     AND opdr.mld_typeopdr_key = 481
                     AND opdr.mld_opdr_verzonden IS NOT NULL
                     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 (381, 382, 383); --Kenmerksoorten Status Valuemation, Status per en Opnieuw versturen'
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 (3 stuks).
   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 PROCEDURE maas_update_zendesk
AS
    v_errorhint   VARCHAR2 (100);

    --Bij een recente wijziging (toevoegen notitie / bijlage) moet Aareon een update krijgen via notificatie (ORDNOL)
    CURSOR sendagain IS
         SELECT DISTINCT (mld_opdr_key),
                        prs_perslid_email,
                        prs_perslid_key,
                        prs_bedrijfadres_url,
                        prs_bedrijfadres_key,     --Zelfde opdracht niet 2 maal
                        mld_opdr_note_key,
                        fac_bijlagen_key
          FROM (SELECT DISTINCT(o.mld_opdr_key)
                     , p.prs_perslid_email
                     , p.prs_perslid_key
                     , a.prs_bedrijfadres_url
                     , a.prs_bedrijfadres_key
                     , n.mld_opdr_note_key
                     , NULL fac_bijlagen_key
                  FROM mld_opdr o
                     , mld_opdr_note n
                     , fac_notificatie t
                     , fac_srtnotificatie s
                     , prs_bedrijf b
                     , prs_bedrijfadres a
                     , prs_perslid p
                 WHERE o.mld_opdr_key = n.mld_opdr_key
                   AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
                   AND o.prs_perslid_key = p.prs_perslid_key(+)
                   AND b.prs_bedrijf_key = a.prs_bedrijf_key
                   AND n.mld_opdr_key = t.fac_notificatie_refkey
                   AND t.fac_srtnotificatie_key = s.fac_srtnotificatie_key
                   AND s.fac_srtnotificatie_code = 'ORDNOL'
                   AND o.prs_perslid_key <> 3         -- Facilitor
                   AND o.mld_typeopdr_key = 481       -- Aareon
                   AND o.mld_statusopdr_key IN (5,8)  -- Toegekend, geaccepteerd
                   AND a.prs_bedrijfadres_type = 'N'
and t.fac_notificatie_datum = n.mld_opdr_note_aanmaak
                UNION ALL
                SELECT DISTINCT (opdr.mld_opdr_key),
                                p.prs_perslid_email,
                                p.prs_perslid_key,
                                ba.prs_bedrijfadres_url,
                                ba.prs_bedrijfadres_key,
                                NULL mld_opdr_note_key,
                                TO_CHAR(att.fac_bijlagen_key)
                  FROM mld_opdr          opdr,
                       fac_bijlagen      att,
                       prs_perslid       p,
                       prs_bedrijf       b,
                       prs_bedrijfadres  ba
                 WHERE opdr.mld_opdr_key = att.fac_bijlagen_refkey
                   AND opdr.prs_perslid_key = p.prs_perslid_key(+)
                   AND att.fac_bijlagen_module = 'MLD'
                   AND opdr.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
                   AND ba.prs_bedrijf_key = b.prs_bedrijf_key
                   AND opdr.mld_typeopdr_key = 481                --Aareon
                   AND opdr.mld_statusopdr_key IN (5, 8) -- Toegekend, geaccepteerd
                   AND ba.prs_bedrijfadres_type = 'N'
                   AND fac_bijlagen_kenmerk_key = 601 -- Opdrachtkenmerk Bijlagen bij opdrachttype Aareon
                   AND att.fac_bijlagen_aanmaak >
                           (SELECT MAX (t.fac_tracking_datum)
                              FROM fac_tracking t, 
                                   fac_srtnotificatie sn
                             WHERE sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
                               AND sn.fac_srtnotificatie_code = 'ORDSNT'
                           )
                   AND att.fac_bijlagen_aanmaak > opdr.mld_opdr_externsyncdate
               );
BEGIN
    v_errorhint := 'init';

    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
            INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                         fac_notificatie_status,
                                         fac_notificatie_refkey,
                                         fac_notificatie_prioriteit,
                                         fac_notificatie_datum,
                                         fac_notificatie_lang,
                                         fac_notificatie_sender_email,
                                         prs_perslid_key_sender,
                                         fac_notificatie_systeemadres,
                                         prs_bedrijfadres_key,
                                         fac_notificatie_extrakey,
                                         fac_notificatie_attachments
                                        )
                 VALUES ( (SELECT sn.fac_srtnotificatie_key
                             FROM fac_srtnotificatie sn
                            WHERE sn.fac_srtnotificatie_code = 'ORDNOL'),
                         0,
                         rec.mld_opdr_key,
                         2,
                         SYSDATE,
                         'NL',
                         rec.prs_perslid_email,
                         rec.prs_perslid_key,
                         NULL, --rec.prs_bedrijfadres_url,
                         rec.prs_bedrijfadres_key,
                         rec.mld_opdr_note_key,
                         rec.fac_bijlagen_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;
        END;
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        fac.writelog (
            'MAAS',
            'E',
            'Update sturen naar Zendesk' || '[' || v_errorhint || ']',
               'OTHERS (error '
            || SQLCODE
            || '/'
            || SUBSTR (SQLERRM, 1, 100)
            || ')');
END;
/


/*
CREATE OR REPLACE PROCEDURE maas_pre_putorders
AS
BEGIN
   --maas_export_valuemation
   --maas_update_zendesk;
END;
/
*/

CREATE OR REPLACE FORCE VIEW maas_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 = 381         --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 = 382                 --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 FORCE VIEW maas_v_noti_hrwf_man_id
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT 'CUST04' AS code,
                   NULL,
                   fac.safe_to_number (kmm.mld_kenmerkmelding_waarde), --prs_perslid_key manager. Manager is als email in processmail aangereikt
                   'Notificatie ivm medewerker in dienst',
                   m.mld_melding_key,
                   NULL
     FROM mld_melding m, mld_kenmerkmelding kmm
    WHERE kmm.mld_melding_key = m.mld_melding_key
          AND kmm.mld_kenmerk_key = 821 --Kenmerk Leidinggevende bij de startmelding workflow In Dienst
          AND m.mld_melding_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = m.mld_melding_key
                           AND UPPER (t.fac_tracking_oms) LIKE
                                 '%NOTIFICATIE CUST04 VERSTUURD%')
   UNION ALL                --Er moet op verzoek ook een mail naar Igor Zandee
   SELECT DISTINCT 'CUST04' AS code,
                   NULL,
                   238,                      --prs_perslid_key van Igor Zandee
                   'Notificatie ivm medewerker in dienst',
                   m.mld_melding_key,
                   NULL
     FROM mld_melding m, mld_kenmerkmelding kmm
    WHERE kmm.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = 501 --stdmelding Start in dienst (vanuit Visma)
          AND m.mld_melding_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = m.mld_melding_key
                           AND UPPER (t.fac_tracking_oms) LIKE
                                 '%NOTIFICATIE CUST04 VERSTUURD%')
   UNION ALL                --Er moet op verzoek ook een mail naar Igor Zandee
   SELECT DISTINCT 'CUST04' AS code,
                   NULL,
                   238,                      --prs_perslid_key van Igor Zandee
                   'Notificatie ivm medewerker uit dienst',
                   m.mld_melding_key,
                   NULL
     FROM mld_melding m, mld_kenmerkmelding kmm
    WHERE kmm.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = 522 --stdmelding Start uit dienst (vanuit Visma)
          AND m.mld_melding_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = m.mld_melding_key
                           AND UPPER (t.fac_tracking_oms) LIKE
                                 '%NOTIFICATIE CUST04 VERSTUURD%')
   UNION ALL                --Er moet op verzoek ook een mail naar Igor Zandee
   SELECT DISTINCT 'CUST04' AS code,
                   NULL,
                   238,                      --prs_perslid_key van Igor Zandee
                   'Notificatie ivm functiewijziging medewerker',
                   m.mld_melding_key,
                   NULL
     FROM mld_melding m, mld_kenmerkmelding kmm
    WHERE kmm.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = 564 --stdmelding  functiewijziging (vanuit Visma)
          AND m.mld_melding_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = m.mld_melding_key
                           AND UPPER (t.fac_tracking_oms) LIKE
                                 '%NOTIFICATIE CUST04 VERSTUURD%');

CREATE OR REPLACE VIEW maas_v_noti_hrwf_man_bm
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT 'CUST05' AS code,
                   NULL,
                   kmm.mld_kenmerkmelding_waarde, --prs_perslid_key manager. Manager is als email in processmail aangereikt
                   'Notificatie bruikleenmiddelen voor nieuwe medewerker',
                   m.mld_melding_key,
                   NULL
     FROM mld_melding m, mld_kenmerkmelding kmm
    WHERE     kmm.mld_melding_key = m.mld_melding_key
          AND kmm.mld_kenmerk_key = 922 --Kenmerk Leidinggevende bij de melding Bruikleenmiddelen in orde maken (Servicedesk)
          AND m.mld_melding_status IN (1, 5, 6, 99) -- Afgewezen, afgemeld, historie, niet opgelost.
          AND m.mld_melding_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = m.mld_melding_key
                        AND UPPER (t.fac_tracking_oms) LIKE
                              '%NOTIFICATIE CUST05 VERSTUURD%');

CREATE OR REPLACE VIEW maas_v_noti_noresponsevm
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile
)
AS
   SELECT DISTINCT
          'CUST06' AS code,
          NULL,
          NULL,
             'Opdracht '
          || mld_melding_key
          || '/'
          || mld_opdr_bedrijfopdr_volgnr
          || ' heeft nog geen ticketnummer van Valuemation ontvangen',
          mld_opdr_key,
          NULL,
          'gerard.mensink@aareon.nl;c.stok@maasdelta.nl;s.schepers@facilitor.nl',
          NULL,
          NULL
     FROM mld_opdr
    WHERE mld_opdr_externnr IS NULL
          AND mld_opdr_verzonden < SYSDATE - (30 / 1440) -- Enkel opdrachten van meer dan 30 minuten geleden
          AND mld_opdr_key NOT IN
                   (SELECT t.fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE t.fac_tracking_refkey = mld_opdr_key
                           AND UPPER (t.fac_tracking_oms) LIKE
                                 '%NOTIFICATIE CUST06 VERSTUURD%');

CREATE OR REPLACE VIEW maas_v_maillog
(
   key,
   datum,
   status,
   omschrijving,
   hinthint
)
AS								 
  SELECT imp_log_key, imp_log_datum, imp_log_status, imp_log_omschrijving, imp_log_hint
    FROM imp_log
   WHERE imp_log_applicatie = 'PROCESSEMAIL'
ORDER BY imp_log_datum DESC;

CREATE OR REPLACE VIEW MAAS_V_NOTI_UITLEEN
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY,
    XSENDER,
    XEMAIL,
    XMOBILE
)
AS
    SELECT DISTINCT
           'CUST07'
               AS code,
           NULL,
           NULL,
              'Aan u is uitgegeven '
           || sd.ins_srtdeel_omschrijving
           || ' met kenmerk '
           || d.ins_deel_omschrijving,
           d.ins_deel_key,
           NULL,
           NULL,
           p.prs_perslid_email || '; servicedesk-ict@maasdelta.nl',
           NULL
      FROM ins_deel      d,
           ins_srtdeel   sd,
           ins_srtgroep  sg,
           fac_tracking  t,
           prs_perslid   p
     WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND t.fac_tracking_refkey = d.ins_deel_key
           AND t.fac_srtnotificatie_key = 126                         --INSOUT
           AND p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_alg_ruimte_type = 'P'
           AND d.ins_deel_key NOT IN 
                (SELECT ins_deel_key
                    FROM ins_kenmerkdeel kmd, ins_kenmerk km
                   WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                         AND km.ins_srtkenmerk_key = 81  -- Kenmerksoort Indienstredingsproces
                         AND kmd.ins_kenmerkdeel_waarde = '1'  -- Ja (uit eigen tabel 'Ja/Nee')
                         AND kmd.ins_kenmerkdeel_verwijder IS NULL)           
           AND (t.fac_tracking_datum > (SELECT fac_notificatie_job_lastrun
                                                FROM fac_notificatie_job
                                               WHERE UPPER (
                                                         fac_notificatie_job_view) =
                                                     'MAAS_V_NOTI_UITLEEN'))
    UNION ALL
    SELECT DISTINCT
           'CUST09'
               AS code,
           NULL,
           NULL,
              'Van u is ingenomen '
           || sd.ins_srtdeel_omschrijving
           || ' met kenmerk '
           || d.ins_deel_omschrijving,
           d.ins_deel_key,
           NULL,
           NULL,
           (CASE
                  WHEN (SELECT kmd1.ins_kenmerkdeel_waarde
                        FROM ins_kenmerkdeel kmd1, ins_kenmerk km1
                        WHERE     km1.ins_kenmerk_key = kmd1.ins_kenmerk_key
                              AND kmd1.ins_deel_key = d.ins_deel_key
                              AND km1.ins_srtkenmerk_key = 103 -- Kenmerksoort Emailadres (***@maasdelta.nl)
                              AND kmd1.ins_kenmerkdeel_verwijder IS NULL)
                           IS NULL
                  THEN
                     'servicedesk-ict@maasdelta.nl'
                  ELSE
                        (SELECT kmd1.ins_kenmerkdeel_waarde
                           FROM ins_kenmerkdeel kmd1, ins_kenmerk km1
                           WHERE     km1.ins_kenmerk_key = kmd1.ins_kenmerk_key
                                 AND kmd1.ins_deel_key = d.ins_deel_key
                                 AND km1.ins_srtkenmerk_key = 103 -- Kenmerksoort Emailadres (***@maasdelta.nl)
                                 AND kmd1.ins_kenmerkdeel_verwijder IS NULL)
                     || '; servicedesk-ict@maasdelta.nl'
           END),
           NULL
      FROM ins_deel      d,
           ins_srtdeel   sd,
           ins_srtgroep  sg,
           fac_tracking  t,
           prs_perslid   p
     WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND t.fac_tracking_refkey = d.ins_deel_key
           AND t.fac_srtnotificatie_key IN (127, 128)          --INSINN/INSIN2
           AND p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_deel_key IN
                   (SELECT ins_deel_key
                      FROM ins_kenmerkdeel kmd, ins_kenmerk km
                     WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                           AND km.ins_srtkenmerk_key = 201 -- Kenmerksoort Inname/Uitgifte
                           AND kmd.ins_kenmerkdeel_waarde = '561'    -- Inname
                           AND kmd.ins_kenmerkdeel_verwijder IS NULL)
           AND d.ins_deel_key IN
                   (SELECT ins_deel_key
                      FROM ins_kenmerkdeel kmd, ins_kenmerk km
                     WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                           AND km.ins_srtkenmerk_key = 102 -- Kenmerksoort Uitdienstredingsproces
                           AND kmd.ins_kenmerkdeel_waarde = '2' -- Ja (uit eigen tabel 'Ja/Nee')
                           AND kmd.ins_kenmerkdeel_verwijder IS NULL)
           AND (t.fac_tracking_datum >
                (SELECT fac_notificatie_job_lastrun
                   FROM fac_notificatie_job
                  WHERE UPPER (fac_notificatie_job_view) =
                        'MAAS_V_NOTI_UITLEEN'))
    UNION ALL
    SELECT DISTINCT
           'CUST09'
               AS code,
           NULL,
           NULL,
              'Van u is ingenomen '
           || sd.ins_srtdeel_omschrijving
           || ' met kenmerk '
           || d.ins_deel_omschrijving,
           d.ins_deel_key,
           NULL,
           NULL,
           (CASE
                  WHEN (SELECT kmd1.ins_kenmerkdeel_waarde
                        FROM ins_kenmerkdeel kmd1, ins_kenmerk km1
                        WHERE     km1.ins_kenmerk_key = kmd1.ins_kenmerk_key
                              AND kmd1.ins_deel_key = d.ins_deel_key
                              AND km1.ins_srtkenmerk_key = 103 -- Kenmerksoort Emailadres (***@maasdelta.nl)
                              AND kmd1.ins_kenmerkdeel_verwijder IS NULL)
                           IS NULL
                  THEN
                     'servicedesk-ict@maasdelta.nl'
                  ELSE
                        (SELECT kmd1.ins_kenmerkdeel_waarde
                           FROM ins_kenmerkdeel kmd1, ins_kenmerk km1
                           WHERE     km1.ins_kenmerk_key = kmd1.ins_kenmerk_key
                                 AND kmd1.ins_deel_key = d.ins_deel_key
                                 AND km1.ins_srtkenmerk_key = 103 -- Kenmerksoort Emailadres (***@maasdelta.nl)
                                 AND kmd1.ins_kenmerkdeel_verwijder IS NULL)
                     || '; servicedesk-ict@maasdelta.nl'
           END),
           NULL
      FROM ins_deel      d,
           ins_srtdeel   sd,
           ins_srtgroep  sg,
           fac_tracking  t,
           prs_perslid   p
     WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND t.fac_tracking_refkey = d.ins_deel_key
           AND t.fac_srtnotificatie_key IN (127, 128)          --INSINN/INSIN2
           AND p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_deel_key IN
                   (SELECT ins_deel_key
                      FROM ins_kenmerkdeel kmd, ins_kenmerk km
                     WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                           AND km.ins_srtkenmerk_key = 201 -- Kenmerksoort Inname/Uitgifte
                           AND kmd.ins_kenmerkdeel_waarde = '561'    -- Inname
                           AND kmd.ins_kenmerkdeel_verwijder IS NULL)
           AND d.ins_deel_key IN
                   (SELECT ins_deel_key
                      FROM ins_kenmerkdeel kmd, ins_kenmerk km
                     WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                           AND km.ins_srtkenmerk_key = 102 -- Kenmerksoort Uitdienstredingsproces
                           AND kmd.ins_kenmerkdeel_waarde = '1' -- Ja (uit eigen tabel 'Ja/Nee')
                           AND kmd.ins_kenmerkdeel_verwijder IS NULL)
           AND (t.fac_tracking_datum >
                (SELECT fac_notificatie_job_lastrun
                   FROM fac_notificatie_job
                  WHERE UPPER (fac_notificatie_job_view) =
                        'MAAS_V_NOTI_UITLEEN'));

CREATE OR REPLACE VIEW maas_v_object_bezit
AS
    SELECT p.prs_perslid_key,
           p.prs_perslid_naam_full,
           (  SELECT LISTAGG (d.ins_deel_omschrijving, '; ')
                         WITHIN GROUP (ORDER BY d.ins_deel_key DESC)    AS mobiel
                FROM ins_v_deel_gegevens d, ins_deel dd, ins_srtdeel sd
               WHERE     d.ins_deel_key = dd.ins_deel_key
                     AND dd.ins_srtdeel_key = sd.ins_srtdeel_key
                     AND sd.ins_srtgroep_key = 28 -- Groep Mobiel onder Telefonie
                     AND dd.ins_deel_verwijder IS NULL
                     AND p.prs_perslid_key = d.prs_perslid_key
            GROUP BY d.prs_perslid_key)    AS mobiel,
           (  SELECT LISTAGG (d.ins_deel_omschrijving, '; ')
                         WITHIN GROUP (ORDER BY d.ins_deel_key DESC)    AS Simkaart
                FROM ins_v_deel_gegevens d, ins_deel dd, ins_srtdeel sd
               WHERE     d.ins_deel_key = dd.ins_deel_key
                     AND dd.ins_srtdeel_key = sd.ins_srtdeel_key
                     AND sd.ins_srtgroep_key = 141 -- Groep Simkaart onder Telefonie
                     AND dd.ins_deel_verwijder IS NULL
                     AND p.prs_perslid_key = d.prs_perslid_key
            GROUP BY d.prs_perslid_key)    AS Simkaart,
           (  SELECT LISTAGG (d.ins_deel_omschrijving, '; ')
                         WITHIN GROUP (ORDER BY d.ins_deel_key DESC)    AS Vervoer
                FROM ins_v_deel_gegevens d, ins_deel dd, ins_srtdeel sd
               WHERE     d.ins_deel_key = dd.ins_deel_key
                     AND dd.ins_srtdeel_key = sd.ins_srtdeel_key
                     AND sd.ins_srtgroep_key = 1 -- Groep Vervoersmiddelen onder Vervoer
                     AND dd.ins_deel_verwijder IS NULL
                     AND p.prs_perslid_key = d.prs_perslid_key
            GROUP BY d.prs_perslid_key)    AS Vervoer,
           (  SELECT LISTAGG (d.ins_deel_omschrijving, '; ')
                         WITHIN GROUP (ORDER BY d.ins_deel_key DESC)    AS Tablet
                FROM ins_v_deel_gegevens d, ins_deel dd, ins_srtdeel sd
               WHERE     d.ins_deel_key = dd.ins_deel_key
                     AND dd.ins_srtdeel_key = sd.ins_srtdeel_key
                     AND sd.ins_srtgroep_key = 33 -- Groep Tablet onder Hardware
                     AND dd.ins_deel_verwijder IS NULL
                     AND p.prs_perslid_key = d.prs_perslid_key
            GROUP BY d.prs_perslid_key)    AS Tablet
      FROM prs_v_perslid_fullnames p;
      
CREATE OR REPLACE VIEW MAAS_V_RAP_INSUIT_HR_IN
(
    PERSLID_KEY,
    DEEL_KEY,
    MEDEWERKER,
    EMAIL,
    MANAGER,
    IMEI,
    SERIE,
    OBJECTID,
    OBJECTSOORT,
    GROEPSOORT,
    DISCIPLINE_KEY,
    DISCIPLINE,
    TRACKING_DATE,
    MAX_DEEL_KEY,
    KENMERK_HANDTEKENING,
    EXTRA_KEY
)
AS
    SELECT d.ins_alg_ruimte_key,
           d.ins_deel_key,
           p.prs_perslid_naam_friendly,
           pp.prs_perslid_email,
           (SELECT pm.prs_perslid_naam_friendly
              FROM ins_deel dm, prs_v_perslid_fullnames pm
             WHERE     dm.ins_deel_key = 2901
                   AND pm.PRS_PERSLID_KEY = dm.ins_alg_ruimte_key
                   AND dm.ins_alg_ruimte_type = 'P')
               AS manager,
           (SELECT kd1.ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel kd1, ins_kenmerk k1
             WHERE     d.ins_deel_key = kd1.ins_deel_key
                   AND k1.ins_kenmerk_key = kd1.ins_kenmerk_key
                   AND k1.ins_srtkenmerk_key = 1                -- Imei nummer
                   AND kd1.ins_kenmerkdeel_verwijder IS NULL)
               imei,
           (SELECT kd2.ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel kd2, ins_kenmerk k2
             WHERE     d.ins_deel_key = kd2.ins_deel_key
                   AND k2.ins_kenmerk_key = kd2.ins_kenmerk_key
                   AND k2.ins_srtkenmerk_key = 6                -- Serienummer
                   AND kd2.ins_kenmerkdeel_verwijder IS NULL)
               serie,
           d.ins_deel_omschrijving,
           sd.ins_srtdeel_omschrijving,
           sg.ins_srtgroep_omschrijving,
           disc.ins_discipline_key,
           disc.ins_discipline_omschrijving,
           t.fac_tracking_datum,
           (SELECT MAX (kmd.ins_deel_key)
              FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_deel hd
             WHERE     kmd.ins_deel_key = hd.ins_deel_key
                   AND p.prs_perslid_key = hd.ins_alg_ruimte_key
                   AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
                   AND km.ins_srtkenmerk_key = 42 -- Kenmerksoort Handtekening
                   AND kmd.ins_kenmerkdeel_verwijder IS NULL)
               max_deel_key, --Dit is de max deel_key die is uitgeleend aan de betreffende persoon.
           (SELECT MAX (kmd.ins_kenmerk_key)
              FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_deel hd
             WHERE     kmd.ins_deel_key =
                       (SELECT MAX (kmd.ins_deel_key)
                          FROM ins_kenmerkdeel  kmd,
                               ins_kenmerk      km,
                               ins_deel         hd
                         WHERE     kmd.ins_deel_key = hd.ins_deel_key
                               AND p.prs_perslid_key = hd.ins_alg_ruimte_key
                               AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
                               AND km.ins_srtkenmerk_key = 42 -- Kenmerksoort Handtekening
                               AND kmd.ins_kenmerkdeel_verwijder IS NULL)
                   AND p.prs_perslid_key = hd.ins_alg_ruimte_key
                   AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
                   AND km.ins_srtkenmerk_key = 42 -- Kenmerksoort Handtekening
                   AND kmd.ins_kenmerkdeel_verwijder IS NULL)
               kenmerk_handtekening, --Dit is de kenmerk key behorend bij de max deel_key (vorige veld)
           d.ins_alg_ruimte_key
      FROM ins_deel                 d,
           fac_tracking             t,
           prs_v_perslid_fullnames  p,
           prs_perslid              pp,
           ins_srtdeel              sd,
           ins_srtgroep             sg,
           ins_tab_discipline       disc
     WHERE     t.fac_tracking_refkey = d.ins_deel_key
           AND t.fac_srtnotificatie_key = 126                         --INSOUT
           AND p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND d.ins_alg_ruimte_type = 'P'
           AND p.prs_perslid_key = pp.prs_perslid_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND sg.ins_discipline_key = disc.ins_discipline_key
           AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE);
           --AND (t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_lastrun
           --                                     FROM fac_notificatie_job
           --                                    WHERE UPPER (
           --                                              fac_notificatie_job_view) =
           --                                          'MAAS_V_NOTI_UITLEEN_HR_IN')
           --                              AND (SELECT fac_notificatie_job_nextrun
           --                                     FROM fac_notificatie_job
           --                                    WHERE UPPER (
           --                                              fac_notificatie_job_view) =
           --                                          'MAAS_V_NOTI_UITLEEN_HR_IN'));

CREATE OR REPLACE VIEW MAAS_V_NOTI_UITLEEN_HR_IN
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY,
    XSENDER,
    XEMAIL,
    XMOBILE    
)
AS
    SELECT DISTINCT 'CUST08'                              AS code,
                    NULL,
                    NULL, 
                    'Aan u zijn objecten uitgegeven',
                    (SELECT fac_usrrap_key
                       FROM fac_usrrap
                      WHERE UPPER (fac_usrrap_code) =
                            'MAAS_V_RAP_INSUIT_HR_IN')    rapportnr,
                    d.ins_alg_ruimte_key,
                    NULL,
                    p.prs_perslid_email || '; servicedesk-ict@maasdelta.nl',
                    NULL
      FROM ins_deel      d,
           ins_srtdeel   sd,
           ins_srtgroep  sg,
           fac_tracking  t,
           prs_perslid   p
     WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND t.fac_tracking_refkey = d.ins_deel_key
           AND t.fac_srtnotificatie_key = 126                         --INSOUT
           AND p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_alg_ruimte_type = 'P'
           AND d.ins_deel_key IN 
                (SELECT ins_deel_key
                    FROM ins_kenmerkdeel kmd, ins_kenmerk km
                   WHERE     km.ins_kenmerk_key = kmd.ins_kenmerk_key
                         AND km.ins_srtkenmerk_key = 81  -- Kenmerksoort Indienstredingsproces
                         AND kmd.ins_kenmerkdeel_waarde = '1'  -- Ja (uit eigen tabel 'Ja/Nee')
                         AND kmd.ins_kenmerkdeel_verwijder IS NULL)           
           AND (t.fac_tracking_datum > (SELECT fac_notificatie_job_lastrun
                                                FROM fac_notificatie_job
                                               WHERE UPPER (
                                                         fac_notificatie_job_view) =
                                                     'MAAS_V_NOTI_UITLEEN_HR_IN'));


CREATE OR REPLACE PACKAGE MAAS
AS
   PROCEDURE create_fac_usrdata_node (p_key        IN NUMBER,
                                      p_custid     IN VARCHAR2,
                                      p_sessionid  IN VARCHAR2,
                                      p_extra      IN VARCHAR2,
                                      p_where      IN VARCHAR2);
END;
/

CREATE OR REPLACE PACKAGE BODY MAAS
AS
   PROCEDURE create_fac_usrdata_node (p_key        IN NUMBER,
                                      p_custid     IN VARCHAR2,
                                      p_sessionid  IN VARCHAR2,
                                      p_extra      IN VARCHAR2,
                                      p_where      IN VARCHAR2)
   AS
      v_fac_usrtab_key         fac_usrdata.fac_usrtab_key%TYPE;
      v_fac_usrdata_code       fac_usrdata.fac_usrdata_code%TYPE;
      v_fac_usrdata_omschr     fac_usrdata.fac_usrdata_omschr%TYPE;
      v_fac_usrdata_omschr2    fac_usrdata.fac_usrdata_omschr2%TYPE;
      v_fac_usrdata_prijs      fac_usrdata.fac_usrdata_prijs%TYPE;
                
   BEGIN
      IF p_key IS NOT NULL
      THEN
         XML.createconciseopentag ('fac_usrdata');

         SELECT fac_usrdata.fac_usrtab_key,
                fac_usrdata.fac_usrdata_code,
                fac_usrdata.fac_usrdata_omschr,
                fac_usrdata.fac_usrdata_omschr2,
                fac_usrdata.fac_usrdata_prijs
           INTO v_fac_usrtab_key,
                v_fac_usrdata_code,
                v_fac_usrdata_omschr,
                v_fac_usrdata_omschr2,
                v_fac_usrdata_prijs
            FROM fac_usrdata
          WHERE fac_usrdata_key = p_key;

         XML.createxmltagvalue ('tabel_key', v_fac_usrtab_key);
         XML.createxmltagvalue ('code', v_fac_usrdata_code);
         XML.createxmltagvalue ('omschrijving', v_fac_usrdata_omschr);
         XML.createxmltagvalue ('omschrijving2', v_fac_usrdata_omschr2);
         XML.createxmltagvalue ('prijs', XML.mynumbertochar(v_fac_usrdata_prijs));
         XML.createclosetag ('fac_usrdata');
      END IF;
   END;
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