--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- 
-- 
-- 
-- 
-- 

DEFINE thisfile = 'PROR.SQL'
DEFINE dbuser   = 'PROR'

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 PACKAGE PROR
AS

  PROCEDURE add_xml_row (p_bestand   IN VARCHAR2,
                          p_regel     IN VARCHAR2);

  PROCEDURE add_xml_element (p_bestand   IN VARCHAR2,
                              p_tag       IN VARCHAR2,
                              p_value     IN VARCHAR2);
                                

  PROCEDURE inactivate_prs;
  
  PROCEDURE mandateer_prs(p_perslid_key IN NUMBER);
  
  
    
END;
/

CREATE OR REPLACE PACKAGE BODY PROR
AS

    PROCEDURE add_xml_row (
      p_bestand   IN VARCHAR2,
      p_regel     IN VARCHAR2)
    AS
      v_index  NUMBER;
    BEGIN
      SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1
        INTO v_index
        FROM fac_rapport
       WHERE fac_rapport_node = p_bestand;

      INSERT INTO fac_rapport (
         fac_rapport_node,
         fac_rapport_volgnr,
         fac_rapport_regel)
      VALUES (p_bestand,
              v_index,
              p_regel);
    END;

    PROCEDURE add_xml_element (
      p_bestand   IN VARCHAR2,
      p_tag       IN VARCHAR2,
      p_value     IN VARCHAR2)
    AS
    BEGIN
      pror.add_xml_row(p_bestand,
                          '<' || p_tag || '>'
                       || xml.char_to_html(p_value)
                       || '</' || p_tag || '>');
    END;



    PROCEDURE inactivate_prs
    AS
        v_errormsg       VARCHAR2 (1000);
        v_errorhint      VARCHAR2 (1000);
        oracle_err_num   NUMBER;
        oracle_err_mes   VARCHAR2 (200);
        v_count          NUMBER (10);
        v_perslid_naam   VARCHAR (100);
        v_perslid_nr     VARCHAR (30);

        --- Als een persoon 12 maanden niet meer heeft ingelogd verwijderen we deze
        CURSOR prs_del IS
              SELECT p.prs_perslid_key, p.prs_perslid_oslogin
                FROM prs_v_aanwezigperslid p
               WHERE p.prs_perslid_login <
                     TRUNC (ADD_MONTHS (SYSDATE, -12), 'mm')
                 AND NOT EXISTS (SELECT  *                                 -- alleen de NIET AFAS account moeten worden verwijderd
                                   FROM prs_kenmerklink pkl, prs_kenmerk pk 
                                  WHERE pk.prs_kenmerk_upper='AFAS ACCOUNT'
                                    AND pk.prs_kenmerk_key = pkl.prs_kenmerk_key
                                    AND pkl.prs_link_key=p.prs_perslid_key
                                    AND pkl.prs_kenmerklink_waarde='1')
                 AND p.prs_perslid_nr NOT LIKE 'P%'                        -- Alle P accounts komen via  SCIM koppeling ,die geeft door als account inactief is                      
            GROUP BY p.prs_perslid_key, p.prs_perslid_oslogin;
        
        
        -- Alle personen die via de SCIM koppeling zijn aangemkaat en die inactief zijn gemaakt.    
        CURSOR prs_del_scim IS
              SELECT p.prs_perslid_key, p.prs_perslid_oslogin
                FROM prs_v_aanwezigperslid p
               WHERE p.prs_perslid_inactief <
                     TRUNC (ADD_MONTHS (SYSDATE, -12), 'mm')
                 AND NOT EXISTS (SELECT  *                                 -- alleen de NIET AFAS account moeten worden verwijderd
                                   FROM prs_kenmerklink pkl, prs_kenmerk pk 
                                  WHERE pk.prs_kenmerk_upper='AFAS ACCOUNT'
                                    AND pk.prs_kenmerk_key = pkl.prs_kenmerk_key
                                    AND pkl.prs_link_key=p.prs_perslid_key
                                    AND pkl.prs_kenmerklink_waarde='1')
                 AND p.prs_perslid_nr LIKE 'P%'                        -- Alle P accounts komen via  SCIM koppeling ,die geeft door als account inactief is                      
            GROUP BY p.prs_perslid_key, p.prs_perslid_oslogin;
    BEGIN        
        -- Eerst alle in Facilitro aangemaakt accounts     
        FOR rec IN prs_del
        LOOP
            prs.delete_perslid(NULL, rec.prs_perslid_key);          
        END LOOP;
        
        -- Alle inactive personen die initieel via de scim koppeling zijn aangemaakt
        FOR rec2 IN prs_del_scim
        LOOP
            prs.delete_perslid(NULL, rec2.prs_perslid_key);          
        END LOOP;
        
    END;

    -- Mandateren op alle kostenplaatsen
    PROCEDURE mandateer_prs(p_perslid_key IN NUMBER) 
    AS
        oracle_err_num   NUMBER;
        oracle_err_mes   VARCHAR2 (200);
        v_errormsg       VARCHAR2 (200); 
        v_count          NUMBER;
    BEGIN
      v_errormsg :='Mandatering voor '||(p_perslid_key);
      
      SELECT COUNT(*) INTO v_count
        FROM prs_perslidkostenplaats 
       WHERE prs_perslid_key=p_perslid_key;
      IF v_COUNT=0 THEN
        INSERT INTO prs_perslidkostenplaats(prs_perslid_key,
                                            prs_perslidkostenplaats_boeken,
                                            prs_perslidkostenplaats_inzage,
                                            prs_perslidkostenplaats_aanmk) 
                                     VALUES(p_perslid_key,
                                            1,
                                            0,
                                            SYSDATE);
       END IF;
     EXCEPTION
        WHEN OTHERS
        THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                   'OTHERS (error '
                || oracle_err_num
                || '/'
                || oracle_err_mes
                || ')';
            fac.writelog ('Mandatering medewerker',
                          'E',
                          v_errormsg,
                          '');
                                     
    END;


   

END;
/

-- IMPORT FUNCTIES

CREATE OR REPLACE PROCEDURE pror_import_afas_organisatie(p_import_key IN NUMBER)
AS
  CURSOR c1 IS
  SELECT     fac_imp_csv_col01  prs_bedrijf,
             fac_imp_csv_col02  prs_afdeling_code,
             fac_imp_csv_col03  prs_afdeling_naam,
             fac_imp_csv_col04  prs_parent,
             fac_imp_csv_col05  prs_laag,
             fac_imp_csv_col06  prs_laag1,
             fac_imp_csv_col07  prs_laag2,
             fac_imp_csv_col08  prs_laag3,
             fac_imp_csv_col09  prs_laag4,
             fac_imp_csv_col10  prs_laag5,
             fac_imp_csv_col11  prs_laag6,
             fac_imp_csv_col12  prs_laag7,
             fac_imp_csv_col13  prs_laag8,
             fac_imp_csv_col14  prs_laag9
      FROM fac_imp_csv
      WHERE fac_import_key=p_import_key
   ORDER BY fac_imp_csv_key;
   

   v_errormsg            VARCHAR2 (1000);
   v_errorhint           VARCHAR2 (1000);
   v_aanduiding          VARCHAR2 (1000);
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_count               NUMBER;
   v_parent              VARCHAR2(10);
BEGIN
    v_count:=0;
    DELETE FROM fac_imp_csv;
    DELETE FROM fac_imp_organisatie;
    COMMIT;
    
    fac_import_genericcsv(p_import_key);

    FOR rec IN c1
    LOOP
      if v_count>0 
      THEN
        IF (rec.prs_laag = '1')
        THEN
            v_parent:=rec.prs_laag1;
        ELSE 
            v_parent:=rec.prs_laag2;
        END IF;
        INSERT INTO fac_imp_organisatie (
                                             prs_bedrijf_naam,
                                             prs_afdeling_naam,
                                             prs_afdeling_naam_parent,
                                             prs_afdeling_omschrijving,
                                             prs_afdeling_externid)
                                   VALUES   (
                                             rec.prs_bedrijf,
                                             rec.prs_afdeling_code,                                         
                                             v_parent,
                                             rec.prs_afdeling_naam,
                                             rec.prs_laag);
      END IF;
      v_count:=v_count+1;
    END LOOP;
EXCEPTION

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

CREATE OR REPLACE PROCEDURE pror_update_afas_organisatie(p_import_key IN NUMBER)
AS
  
  CURSOR c1 IS
      SELECT prs_afdeling_naam,
             prs_afdeling_omschrijving,
             prs_afdeling_naam_parent,
             prs_afdeling_externid              
        FROM fac_imp_organisatie
        ORDER BY prs_afdeling_externid;
  v_date                    DATE;
  v_prs_afdeling_parentkey NUMBER:=-1;
  v_count                   NUMBER:=0;
  v_bedrijf_key             NUMBER :=-1;
  v_afdeling_key            NUMBER :=-1;
BEGIN
  
     
     SELECT prs_bedrijf_key 
       INTO v_bedrijf_key 
       FROM prs_bedrijf 
      WHERE prs_bedrijf_naam_upper='PRORAIL' 
        AND prs_bedrijf_verwijder IS NULL;
        
    IF v_bedrijf_key>0 THEN
        
        FOR rec in C1
        LOOP
            -- kijk of de afdeling al bestaat en dezelfde parent heeft
            IF rec.prs_afdeling_naam_parent IS NOT NULL
            THEN
              -- wat is de afdelings key van de parent
              IF rec.prs_afdeling_naam_parent='50035512'    -- deze moeten onder het berdijf worden gezet.
              THEN
                v_prs_afdeling_parentkey:=TO_NUMBER(NULL);
              ELSE 
                v_bedrijf_key := to_number(NULL);  
                SELECT prs_afdeling_key INTO v_prs_afdeling_parentkey 
                  FROM prs_afdeling 
                 WHERE prs_afdeling_naam=rec.prs_afdeling_naam_parent
                   AND prs_afdeling_verwijder IS NULL;
              END IF;

              SELECT COUNT(*) INTO v_count 
                FROM prs_afdeling a1
               where a1.prs_afdeling_naam = rec.prs_afdeling_naam               
               AND a1.prs_afdeling_verwijder IS NULL;
              IF v_count=0 
              THEN 
                  INSERT INTO PRS_AFDELING
                                      (prs_afdeling_naam,
                                       prs_afdeling_omschrijving,
                                       prs_bedrijf_key,
                                       prs_afdeling_parentkey                              
                                      )
                                      VALUES
                                      (rec.prs_afdeling_naam,
                                       rec.prs_afdeling_omschrijving,
                                       v_bedrijf_key,
                                       v_prs_afdeling_parentkey
                                      )
                   RETURNING prs_afdeling_key 
                        INTO v_afdeling_key;
                  
                  -- Wat was de afdeling waar deze in afas ondervalt
                  IF rec.prs_afdeling_externid != '1'
                  THEN                    
                    SELECT  p.prs_afdeling_key
                      INTO v_prs_afdeling_parentkey
                      FROM fac_imp_csv csv, prs_afdeling p
                      WHERE csv.fac_imp_csv_col02=rec.prs_afdeling_naam
                      AND p.prs_afdeling_naam=csv.fac_imp_csv_col04
                      AND p.prs_afdeling_verwijder IS NULL;     
                          
                          
                    flx.setflex('PRS', 1020,v_afdeling_key, 'A', v_prs_afdeling_parentkey);   -- D=1021, A=1041 P=1020
                    flx.setflex('PRS', 1021,v_afdeling_key, 'A', rec.prs_afdeling_externid);  -- D=1020  A=1040 P=1021
                  END IF;
                  COMMIT;
               ELSE 
                IF rec.prs_afdeling_externid != '1'
                THEN 
               -- Wat is de nieuwe parent afdeling
                        SELECT  p.prs_afdeling_key
                          INTO v_prs_afdeling_parentkey
                          FROM fac_imp_csv csv, prs_afdeling p
                          WHERE csv.fac_imp_csv_col02=rec.prs_afdeling_naam
                          AND p.prs_afdeling_naam=csv.fac_imp_csv_col04
                          AND p.prs_afdeling_verwijder IS NULL;  
                    
               -- Wta is de huidge afdeling_key
                        SELECT prs_afdeling_key 
                          INTO v_afdeling_key 
                          FROM prs_afdeling where prs_afdeling_naam= rec.prs_afdeling_naam               
                           AND prs_afdeling_verwijder IS NULL;          
                       
                       flx.setflex('PRS', 1020,v_afdeling_key,'A', v_prs_afdeling_parentkey);   -- D=1021, A=1041 P=1020
                       flx.setflex('PRS', 1021,v_afdeling_key,'A',  rec.prs_afdeling_externid); -- D=1020  A=1040 P=1021
                 END IF;
              END IF;

            END IF; 
        END LOOP;
      END IF;
      -- Nu even opruimen
      DELETE FROM fac_imp_csv where fac_import_key=p_import_key;
      DELETE FROM fac_imp_organisatie;
      COMMIT;
END;
/


-- "Roepnaam";"Voorletters";"Voorvoegsel";"Achternaam";"Persnr.";"Afdnr.";"Functie";"Email";"Telefoon";"Loginnaam";"Kostenplaats";"OE_Niveau"
CREATE OR REPLACE PROCEDURE pror_import_afas_personen(p_import_key IN NUMBER)
AS
  CURSOR c1 IS
  SELECT     fac_imp_csv_col01  prs_voornaam,
             fac_imp_csv_col02  prs_voorletters,
             fac_imp_csv_col03  prs_tussenvoegsel,
             fac_imp_csv_col04  prs_achternaam,
             fac_imp_csv_col05  prs_perslid_nr,
             fac_imp_csv_col06  prs_afd1_code,             
             fac_imp_csv_col07  prs_functie,
             fac_imp_csv_col08  prs_email,
             fac_imp_csv_col09  prs_telefoon,
             fac_imp_csv_col10  prs_loginnaam,
             fac_imp_csv_col10  prs_level
      FROM fac_imp_csv
      WHERE fac_import_key=p_import_key
   ORDER BY fac_imp_csv_key;

   v_errormsg            VARCHAR2 (1000);
   v_errorhint           VARCHAR2 (1000);
   v_aanduiding          VARCHAR2 (1000);
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_count               NUMBER;
   
   v_afdelingnaam       VARCHAR2(20);
   v_afd_count          NUMBER;
   v_srtperslid_omschrijving VARCHAR2(60);
BEGIN
    v_count:=0;
    
    DELETE FROM fac_imp_perslid;
    fac_import_genericcsv(p_import_key);
    
    FOR rec IN c1
    LOOP
      IF v_count>0 THEN
       -- ALs een per op niveau 9 zit heeft de         
        
        
        -- controleren of de afdeling wel beschikbaar is anders onder Onbekend zetten
        SELECT COUNT(*) INTO v_afd_count 
          FROM prs_afdeling 
         WHERE prs_afdeling_naam=rec.prs_afd1_code 
         AND prs_afdeling_verwijder IS NULL;
        
        IF v_afd_count=0 THEN
          v_afdelingnaam :='Onbekend';
        ELSE
          v_afdelingnaam := rec.prs_afd1_code;
        END IF;
        
        IF rec.prs_functie IS NULL
        THEN
            v_srtperslid_omschrijving:='Onbekend';
        ELSE 
            v_srtperslid_omschrijving:= rec.prs_functie;           
        END IF;
        
        
        INSERT INTO fac_imp_perslid(fac_import_key,
                                       prs_afdeling_naam,
                                       prs_perslid_voornaam,
                                       prs_perslid_voorletters,
                                       prs_perslid_tussenvoegsel,
                                       prs_perslid_naam,
                                       prs_perslid_email,
                                       prs_perslid_telefoonnr,                                       
                                       prs_srtperslid_omschrijving,
                                       prs_perslid_oslogin,                                      
                                       prs_perslid_nr,
                                       prs_kenmerk1)
                                VALUES(p_import_key,
                                       v_afdelingnaam,
                                       rec.prs_voornaam,
                                       rec.prs_voorletters,
                                       rec.prs_tussenvoegsel,
                                       rec.prs_achternaam,
                                    --   LTRIM(rec.prs_tussenvoegsel||' '||rec.prs_achternaam),
                                       rec.prs_email,
                                       rec.prs_telefoon,                                       
                                       v_srtperslid_omschrijving,
                                    --   rec.prs_perslid_nr,
                                       SUBSTR(rec.prs_email,0,30),
                                       rec.prs_perslid_nr,
                                       '1000=1');   -- AFAS account kenmerk D=1022, A=1020, P=1000
      END IF;
      v_count:=v_count+1;                                      
    END LOOP;
    DELETE FROM fac_imp_csv where fac_import_key=p_import_key;
EXCEPTION

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

CREATE OR REPLACE PROCEDURE pror_update_afas_personen(p_import_key IN NUMBER)
AS
   CURSOR p_del        -- We doen dit alleen voor de afas aqccounts
  IS
     SELECT p.prs_perslid_key
       FROM prs_perslid p, prs_kenmerklink kl, prs_kenmerk pk             
      WHERE p.prs_perslid_verwijder IS NULL
        AND pk.prs_kenmerk_upper='AFAS ACCOUNT'
        AND kl.prs_kenmerk_key = pk.prs_kenmerk_key
        AND kl.prs_link_key=p.prs_perslid_key        
        AND kl.prs_kenmerklink_waarde=1        
        AND p.prs_perslid_nr NOT IN (SELECT prs_perslid_nr 
                                          FROM fac_imp_perslid);

  CURSOR p_mandaat
  IS
      SELECT p.prs_perslid_key 
        FROM fac_imp_perslid f, prs_perslid p      
       WHERE f.prs_perslid_email = p.prs_perslid_email
         AND p.prs_perslid_verwijder IS NULL        
         AND p.prs_perslid_key NOT IN (SELECT DISTINCT prs_perslid_key 
                                         FROM prs_perslidkostenplaats pk);

  CURSOR p_autgroep  -- welke afas accounts hebben nog geen autgroep
  IS
     SELECT p.prs_perslid_key 
       FROM prs_perslid p, prs_kenmerklink kl, prs_kenmerk pk    
      WHERE p.prs_perslid_verwijder is null            
        AND pk.prs_kenmerk_upper='AFAS ACCOUNT'
        AND kl.prs_kenmerk_key = pk.prs_kenmerk_key
        AND kl.prs_link_key=p.prs_perslid_key        
        AND kl.prs_kenmerklink_waarde=1       
        AND NOT EXISTS (SELECT 'x'  
                          FROM fac_gebruikersgroep f 
                         WHERE f.prs_perslid_key=p.prs_perslid_key);

  v_date DATE;
  v_defaultgroep NUMBER:=1;
BEGIN
    prs.update_perslid (p_import_key, 'NR', 'A', 1);  
    
       
    FOR rec IN p_del
    LOOP
      prs.delete_perslid (p_import_key, rec.prs_perslid_key);
    END LOOP;
    
    FOR rec_man IN p_mandaat
    LOOP
      pror.mandateer_prs(rec_man.prs_perslid_key);
    END LOOP;
   
    FOR rec2 IN p_autgroep
    LOOP
      INSERT INTO fac_gebruikersgroep(FAC_GROEP_KEY, prs_perslid_key) 
           VALUES(v_defaultgroep, rec2.prs_perslid_key);
    END LOOP;
    
    
    
    
    COMMIT;
END;
/



-- Import objecten lijst waarbij omschrijving gevult dowrt met de locatie gegevens

CREATE OR REPLACE PROCEDURE pror_import_objecten(p_import_key IN NUMBER)
AS

BEGIN
  DELETE FROM fac_imp_ins;
  fac_import_ins(p_import_key);
END;
/


CREATE OR REPLACE PROCEDURE pror_update_objecten(p_import_key IN NUMBER)
AS
  CURSOR ins
  IS
    SELECT * FROM fac_imp_ins;

BEGIN
    fac_update_ins(p_import_key);
    FOR rec IN ins
    LOOP
      UPDATE ins_deel i 
         SET i.ins_deel_opmerking=(SELECT al.alg_locatie_code||'-'||a.alg_plaatsaanduiding||' ('||a.alg_ruimte_omschrijving||')' 
                                     FROM alg_v_allonrgoed_gegevens a, alg_locatie al 
                                    WHERE a.alg_locatie_key = al.alg_locatie_key 
                                      AND a.alg_ruimte_key=i.ins_alg_ruimte_key) 
       WHERE i.ins_deel_omschrijving=rec.ins_deel_omschrijving;
    END LOOP;
  
END;
/

-- END IMPORT ins_deel

CREATE OR REPLACE PROCEDURE pror_daily
AS
BEGIN
    -- inactiveren personen die 12 maanden niet hebben ingelogd
    pror.inactivate_prs ();

    

END;
/



-- NOTIFICATIE VIEWS

-- Notificatie VIEW tbv opdracht updates die met NSecure zijn uitgewisseld
CREATE OR REPLACE VIEW PROR_V_NSECURE_UPDATE
(
  sender,
  receiver,
  code,
  text,
  key,
  xkey,
  xemail,
  xmobile  
)
AS
      SELECT NULL sender,
             NULL receiver,
             'CUST03' code,
             'Opdracht '||o.mld_melding_key||'/'||o.mld_opdr_bedrijfopdr_volgnr||' met NSecureNr '||ko.mld_kenmerkopdr_waarde||' is gewijzigd' text,
             o.mld_opdr_key,
             null xkey,       
             (SELECT b.prs_bedrijf_email 
               FROM prs_bedrijf b 
              WHERE b.prs_leverancier_nr ='313341' 
                AND b.prs_bedrijf_uitvoerende='1' 
                AND b.prs_bedrijf_verwijder IS NULL) xemail,
             NULL xmobile
        FROM mld_opdr o, mld_kenmerkopdr ko, mld_kenmerk km
       WHERE o.mld_statusopdr_key IN (5,8) -- toegekend, geaccpeteerd
         AND o.mld_uitvoerende_keys=(SELECT b.prs_bedrijf_key 
                                        FROM prs_bedrijf b 
                                       WHERE b.prs_leverancier_nr ='313341' 
                                         AND b.prs_bedrijf_uitvoerende='1'  
                                         AND b.prs_bedrijf_verwijder IS NULL)
         AND ko.mld_opdr_key = o.MLD_OPDR_KEY
         AND ko.mld_kenmerk_key = km.mld_kenmerk_key
         AND km.mld_kenmerk_omschrijving='NSecure Nr'
         AND LENGTH(ko.mld_kenmerkopdr_waarde)>2 
         AND (
               ( o.mld_opdr_verzonden < (SELECT MAX(ft.fac_tracking_datum)  
                                            FROM fac_tracking ft 
                                           WHERE ft.fac_tracking_refkey=o.mld_opdr_key -- Alleen een update
                                             AND ft.fac_srtnotificatie_key=80
                                             AND lower(ft.fac_tracking_oms) like '%gewijzigd%omschrijving%veranderd%'
                                             AND ft.prs_perslid_key != 621) 
                 AND (SELECT MAX(ft.fac_tracking_datum)  
                          FROM fac_tracking ft 
                         WHERE ft.fac_tracking_refkey=o.mld_opdr_key -- Alleen een update
                           AND ft.fac_srtnotificatie_key=80
                           AND lower(ft.fac_tracking_oms) like '%gewijzigd%omschrijving%veranderd%'
                           AND ft.prs_perslid_key != 621) 
                      > 
                      COALESCE((SELECT MAX(ft.fac_tracking_datum)  
                         FROM fac_tracking ft 
                        WHERE ft.fac_tracking_refkey=o.mld_opdr_key -- Alleen een update
                          AND ft.fac_srtnotificatie_key=220    -- ORDTRL
                          AND LOWER(ft.fac_tracking_oms) like '%cust03%'), o.mld_opdr_verzonden)                           
                ) 
              OR 
                (     o.mld_opdr_verzonden < (SELECT MAX(mld_opdr_note_aanmaak) 
                                                FROM mld_opdr_note  
                                               WHERE mld_opdr_key=o.mld_opdr_key 
                                                 AND mld_opdr_note_flag in (4,5)) 
                 AND  (SELECT MAX(mld_opdr_note_aanmaak) 
                         FROM mld_opdr_note  
                        WHERE mld_opdr_key=o.mld_opdr_key 
                          AND mld_opdr_note_flag in (4,5)) 
                      > 
                      COALESCE((SELECT MAX(ft.fac_tracking_datum)  
                                  FROM fac_tracking ft 
                                 WHERE ft.fac_tracking_refkey=o.mld_opdr_key -- Alleen een update
                                   AND ft.fac_srtnotificatie_key=220    -- ORDTRL
                                   AND LOWER(ft.fac_tracking_oms) like '%cust03%'), o.mld_opdr_verzonden)                             
                 )
              );



-- Noifictaie View tbv te late annulering outlook reservereing inc catering
CREATE OR REPLACE VIEW pror_v_outl_cat_annu
(
  reserveringnr,
  key,
  code,
  text,
  gastheer,
  receiver,
  sender,
  xemail,
  xmobile,
  xkey
)
AS
     SELECT DISTINCT res_reservering_key||'/'||RES_RSV_RUIMTE_VOLGNR reserveringNr,
             res_reservering_key key,
            'CUST02' cust_code,
            'Reservering '||res_reservering_key||'/'||RES_RSV_RUIMTE_VOLGNR||' op '|| TO_CHAR(leverdatum,'DD-MM-YYYY HH24:MI')||' is verwijderd buiten anullerings horizon.' text, 
            (SElECT p.prs_perslid_naam_friendly 
               FROM prs_v_perslid_fullnames_all p 
              WHERE p.prs_perslid_key= gastheer_key) gastheer,
            NULL receiver,             
            NULL sender,           
            'cateringmanagerprorail@prorail.nl' xemail,
            NULL xmobile,
            res_rsv_ruimte_key xkey
       FROM (SElECT r.*,
                    (SELECT MAX(rdp.res_disc_params_cancel_dagen) annuleer_dagen
                        FROM res_rsv_artikel rra, res_artikel ra, res_discipline rd, res_disc_params rdp
                       WHERE     res_rsv_ruimte_key = r.res_rsv_ruimte_key
                            AND ra.RES_ARTIKEL_KEY = rra.RES_ARTIKEL_KEY
                            AND ra.RES_DISCIPLINE_KEY = rd.INS_DISCIPLINE_KEY
                            AND rdp.res_INS_DISCIPLINE_KEY=rd.INS_DISCIPLINE_KEY) annuleer_dagen 
               FROM (SELECT DISTINCT
                            res.res_rsv_ruimte_key res_rsv_ruimte_key,
                            res.res_reservering_key res_reservering_key,
                            res.res_rsv_ruimte_volgnr res_rsv_ruimte_volgnr,
                            res.RES_RSV_RUIMTE_HOST_KEY gastheer_key,
                            res.res_rsv_ruimte_verwijder datum_verwijder,                                          
                            fac.safe_to_date (
                                 TO_CHAR (res.res_rsv_ruimte_van, 'DD-MM-YYYY')||' 12:00',
                                 'DD-MM-YYYY HH24:MI')         leverdatum
                       FROM res_rsv_ruimte res, res_rsv_artikel rra
                      WHERE     res.res_rsv_ruimte_verwijder IS NOT NULL 
                            AND res.res_rsv_ruimte_externnr IS NOT NULL
                            AND res.res_status_fo_key=4
                            AND rra.RES_RSV_RUIMTE_KEY=res.RES_RSV_RUIMTE_KEY) r)                                  
         WHERE     datum_verwijder> leverdatum - annuleer_dagen
               AND NOT EXISTS (SELECT rkw.res_kenmerk_key 
                                 FROM res_kenmerkwaarde rkw, 
                                      res_kenmerk rk
                                WHERE     rkw.res_rsv_ruimte_key=res_rsv_ruimte_key
                                      AND rk.res_kenmerk_key = rkw.res_kenmerk_key
                                      AND UPPER(rk.res_kenmerk_omschrijving)='EXTERNSYNCDATUM')
               AND NOT EXISTS (SElECT * 
                             FROM fac_tracking ft 
                            WHERE     fac_tracking_refkey=res_rsv_ruimte_key
                                  AND ft.fac_srtnotificatie_key=223
                                  AND ft.fac_tracking_oms LIKE '%CUST02%'); 


-- Noifictaie View tbv reservereing gedaan door contact<>host
CREATE OR REPLACE VIEW pror_v_res_other_contact
(
  sender,
  receiver,
  code,
  text,
  key,
  xkey,
  xemail,
  xmobile  
)
AS
      SELECT 
            NULL sender, 
            rrr.res_rsv_ruimte_contact_key receiver,
            'CUST01' code,
            'Reservering '||rrr.res_reservering_key||'/ '||rrr.res_rsv_ruimte_volgnr||
--            ' is door '||(SELECT prs_perslid_naam_friendly 
--                            FROM prs_v_perslid_fullnames p, fac_tracking ft 
--                           WHERE ft.fac_tracking_refkey=rrr.res_rsv_ruimte_key 
--                             AND fac_srtnotificatie_key=116 
--                             AND p.prs_perslid_key= ft.prs_perslid_key)||
            ' voor u aangemaakt.' text,
            rrr.res_rsv_ruimte_key key,
            NULL xkey,
            NULL xemail,
            NULL xmobile
       FROM res_rsv_ruimte rrr
      WHERE rrr.res_rsv_ruimte_host_key<>rrr.res_rsv_ruimte_contact_key   -- DIT MOET ANDERS      
        AND NOT EXISTS (SELECT * 
                              FROM fac_tracking ft 
                             WHERE fac_tracking_refkey=rrr.res_rsv_ruimte_key 
                               AND ft.fac_srtnotificatie_key=223
                               AND ft.fac_tracking_oms LIKE '%CUST01%')
        AND rrr.res_rsv_ruimte_aanmaak BETWEEN SYSDATE-1 AND SYSDATE;                  
                               
                             


-- EINDE NOTIFICATIE VIEWS




-- VIEW TBV Kalender rappprt Service medewerkers
CREATE OR REPLACE VIEW pror_v_SerMdwKalender
(
    USER_KEY,
    TITLE,
    VAN,
    TOT,
    ITEM_KEY,
    COLOR,
    TEXTCOLOR,
    URL
)
AS
      SELECT rrr.res_rsv_ruimte_host_key user_key, 
      CASE  WHEN rro.res_ruimte_opstel_tijd>0 AND (SELECT COUNT(*) 
                                                     FROM res_rsv_deel rrd 
                                                    WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)>0 THEN 'Opstelling + Vergadermiddel'
            WHEN rro.res_ruimte_opstel_tijd>0 then 'Opstelling'
            ELSE 'Vergadermiddel' end title, 
      rrr.res_rsv_ruimte_van van, 
      rrr.res_rsv_ruimte_tot tot,
      rrr.res_rsv_ruimte_key item_key,
      '#009900' color,
      '#ffffff' textcolor, 
      '?u=reservering' || chr (38) || 'k=' || rrr.res_rsv_ruimte_key    url 
      FROM res_rsv_ruimte rrr, res_activiteit ra, res_ruimte_opstelling rro 
      WHERE rrr.res_activiteit_key=ra.res_activiteit_key 
      AND UPPER(ra.res_activiteit_omschrijving)='VERGADERING' 
      AND TRUNC(rrr.res_rsv_ruimte_van)>= TRUNC(SYSDATE-30)    -- we laten alleen een 30 dagen terug zien.
      AND rrr.res_ruimte_opstel_key= rro.res_ruimte_opstel_key
      AND rrr.res_rsv_ruimte_verwijder IS NULL 
      AND (rro.res_ruimte_opstel_tijd> 0 OR (SELECT COUNT(*) 
                                               FROM res_rsv_deel rrd 
                                              WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)>0
          );

---
-- VIEW van alle reserveringen die catering hebben,
--

CREATE OR REPLACE VIEW pror_v_res_cat
AS
    SELECT * FROM (
    SELECT DISTINCT(rrr.res_rsv_ruimte_key) rrr_key,
             rrr.res_reservering_key reservering_key,
             rrr.res_rsv_ruimte_volgnr,             
             rrr.res_rsv_ruimte_aanmaak aanmk_datum,
             (SELECT MAX (fac_tracking_datum)
                        FROM fac_tracking
                       WHERE     fac_tracking_refkey = rrr.res_rsv_ruimte_key
                             AND fac_srtnotificatie_key = 117) last_upd,
              rrr.res_rsv_ruimte_externsyncdate last_export,
              rrr.res_rsv_ruimte_verwijder verw_datum,
              COALESCE(rer.res_ruimte_friendlyname,alg.alg_ruimte_nr) ruimte_nr,
              (SELECT prs_perslid_externid
                  FROM prs_perslid
                 WHERE prs_perslid_key = rrr.res_rsv_ruimte_contact_key) besteller,
                 (SELECT DISTINCT lev.PRS_BEDRIJF_EMAIL                           
                               FROM res_rsv_artikel rar,
                                    res_artikel art,
                                    res_disc_params dsp,
                                    prs_bedrijf lev
                              WHERE     rar.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                                    AND art.res_artikel_key = rar.res_artikel_key
                                    AND dsp.res_ins_discipline_key =
                                        art.res_discipline_key
                                    AND lev.prs_bedrijf_key = dsp.prs_bedrijf_key) cateraar,
               rrr.RES_RSV_RUIMTE_VAN datum_van,
               rrr.RES_RSV_RUIMTE_TOT datum_tot,
               rrr.res_rsv_ruimte_omschrijving oms,
               rrr.res_rsv_ruimte_bezoekers aantal,
               alg.alg_locatie_code locatie_code,
               'ruimte' soort,
               ros.res_opstelling_omschrijving opstelling,
               rrr.res_status_fo_key fo_status,
               rrr.res_rsv_ruimte_dirtlevel dirtlevel
        FROM res_rsv_ruimte rrr,
             res_rsv_artikel rra,
             res_ruimte_opstelling      rop,
             res_opstelling ros,
             res_ruimte                 rer,
             res_alg_ruimte             rarm,
             alg_v_ruimte_gegevens_all  alg
       WHERE rrr.res_status_bo_key = 2
             AND rra.RES_RSV_RUIMTE_KEY = rrr.RES_RSV_RUIMTE_KEY
             AND rrr.res_ruimte_opstel_key = rop.res_ruimte_opstel_key
             AND ros.res_opstelling_key = rop.res_opstelling_key
             AND rer.res_ruimte_key = rop.res_ruimte_key
             AND rarm.res_ruimte_key = rer.res_ruimte_key
             AND alg.alg_ruimte_key = rarm.alg_ruimte_key         
    UNION ALL
    SELECT DISTINCT(rrr.res_rsv_ruimte_key) rrr_key,
             rrr.res_reservering_key reservering_key,
             rrr.res_rsv_ruimte_volgnr,             
             rrr.res_rsv_ruimte_aanmaak aanmk_datum,
             (SELECT MAX (fac_tracking_datum)
                        FROM fac_tracking
                       WHERE     fac_tracking_refkey = rrr.res_rsv_ruimte_key
                             AND fac_srtnotificatie_key = 117) last_upd,
              rrr.res_rsv_ruimte_externsyncdate last_export,
              rrr.res_rsv_ruimte_verwijder verw_datum,
              alg.alg_ruimte_nr ruimte_nr,
              (SELECT pa.PRS_PERSLID_EMAIL
                  FROM PRS_V_PERSLID_GEGEVENS pa
                 WHERE pa.prs_perslid_key = rrr.res_rsv_ruimte_contact_key) besteller,
              (SELECT DISTINCT lev.prs_bedrijf_email                           
                               FROM res_rsv_artikel rar,
                                    res_artikel art,
                                    res_disc_params dsp,
                                    prs_bedrijf lev
                              WHERE     rar.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                                    AND art.res_artikel_key = rar.res_artikel_key
                                    AND dsp.res_ins_discipline_key =
                                        art.res_discipline_key
                                    AND lev.prs_bedrijf_key = dsp.prs_bedrijf_key) cateraar,
               rrr.RES_RSV_RUIMTE_VAN datum_van,
               rrr.RES_RSV_RUIMTE_TOT datum_tot,
               rrr.res_rsv_ruimte_omschrijving oms,
               rrr.res_rsv_ruimte_bezoekers aantal,
               alg.alg_locatie_code locatie_code,
               'losse-catering' soort,
               'N.V.T.' opstelling,
               rrr.res_status_fo_key fo_status,
               0 dirtlevel
        FROM res_rsv_ruimte rrr,
             res_rsv_artikel rra,
             alg_v_ruimte_gegevens_all  alg
       WHERE rrr.res_status_fo_key = 2
             AND rra.RES_RSV_RUIMTE_KEY = rrr.RES_RSV_RUIMTE_KEY
             AND alg.alg_ruimte_key = rrr.alg_ruimte_key
             ORDER BY reservering_key)             
      WHERE aanmk_datum > SYSDATE-2/24
         OR last_upd>aanmk_datum AND last_upd > SYSDATE-2/24;


---
-- View tbv alle veiligheidsmeldingen
-- Dez worden naar Provat geexporteerd/rapport wordt door provat aangeroepen
---
CREATE OR REPLACE VIEW pror_v_mld_provat
AS    
    SELECT m.mld_melding_key melding_key,
           m.mld_melding_datum begin_datum,
           (SELECT p.prs_perslid_naam||','|| p.prs_perslid_voornaam||' '||p.prs_perslid_tussenvoegsel FROM prs_perslid p WHERE p.prs_perslid_key=m.prs_perslid_key) contact,
           md.ins_discipline_omschrijving Service,
           ms.mld_stdmelding_omschrijving omschrijving,    
           (SELECT al.alg_locatie_omschrijving 
              FROM alg_locatie al 
             WHERE al.alg_locatie_key=m.mld_alg_locatie_key) ||'-'|| a.alg_gebouw_naam  locatie,
            (SELECT ins_discipline_omschrijving FROM mld_discipline md WHERE md.ins_discipline_key = m.mld_ins_discipline_key) assignee,   --- DEZE MOET NOG WORDERN GEVULD.
            '' type_request,
            (SELECT ms.mld_statuses_omschrijving 
               FROM mld_statuses ms 
              WHERE ms.mld_statuses_key=m.mld_melding_status) mld_status,
            '' kostenplaats,            
            m.mld_melding_omschrijving onderwerp,
            (SELECT listagg(x.kenmerkwaardes, ', ' ) within group (order by x.volgnr) 
               FROM 
                  (SELECT k.mld_kenmerk_omschrijving||':'||COALESCE(fud.fac_usrdata_code, km.mld_kenmerkmelding_waarde) kenmerkwaardes,
                          k.mld_kenmerk_volgnummer volgnr  
                     FROM mld_kenmerkmelding km, 
                          mld_kenmerk k, 
                          mld_srtkenmerk skm, 
                          fac_kenmerkdomein fk, 
                          fac_usrdata fud, 
                          fac_usrtab fut  
                    WHERE mld_melding_key=m.mld_melding_key 
                      AND k.mld_kenmerk_key = km.mld_kenmerk_key        
                      AND skm.mld_srtkenmerk_key(+) = k.mld_srtkenmerk_key
                      AND fk.fac_kenmerkdomein_key(+) = skm.fac_kenmerkdomein_key
                      AND  fut.fac_usrtab_key(+) = fk.fac_usrtab_key
                      AND fud.fac_usrtab_key(+) = fut.fac_usrtab_key
                      AND fud.fac_usrdata_key(+) = FAC.SAFE_TO_NUMBER(km.mld_kenmerkmelding_waarde)
                      AND k.mld_kenmerk_volgnummer>0) x
              ) kenmerkwaardes, 
            (SELECT MAX (f.fac_tracking_datum) 
               FROM fac_tracking f 
              WHERE     f.FAC_TRACKING_REFKEY=m.mld_melding_key
                    AND f.FAC_SRTNOTIFICATIE_KEY=55
                    AND f.FAC_TRACKING_DATUM>m.mld_melding_datum) mld_update,
            (SELECT mk.mld_kenmerkmelding_waarde 
                FROM mld_kenmerkmelding mk,
                     mld_kenmerk k 
               WHERE     mk.MLD_melding_KEY=m.mld_melding_key 
                     AND mk.mld_kenmerk_key=k.mld_kenmerk_key
                     AND UPPER(k.mld_kenmerk_omschrijving)='PROVATEXPORTFLAG') provat_flag,
            (SELECT mk.mld_kenmerkmelding_waarde 
                FROM mld_kenmerkmelding mk,
                     mld_kenmerk k
               WHERE     mk.mld_melding_key=m.mld_melding_key 
                     AND mk.mld_kenmerk_key=k.mld_kenmerk_key
                     AND UPPER(k.mld_kenmerk_omschrijving)='PROVATEXPORT') export_provat       
      FROM mld_melding m, 
           mld_stdmelding ms, 
           mld_discipline md,
           alg_v_allonrgoed_gegevens a 
     WHERE m.mld_stdmelding_key=ms.mld_stdmelding_key
       AND md.ins_discipline_key= ms.mld_ins_discipline_key
       AND (UPPER(ms.mld_stdmelding_omschrijving)='INZET BHV OF ONGEVAL MELDEN' 
            OR UPPER(ms.mld_stdmelding_omschrijving)='ONVEILIGE SITUATIE MELDEN'
            OR UPPER(ms.mld_stdmelding_omschrijving)='BEVEILIGINGSINCIDENT MELDEN')
       AND a.alg_locatie_key=m.mld_alg_locatie_key 
       AND a.alg_onroerendgoed_keys=m.mld_alg_onroerendgoed_keys
       AND m.mld_melding_status IN (2,3,4,5,7);  
    

---
-- View tbv alle bookmarks
-- Deze worden door BIOMNI via API uitgelezen
---
CREATE OR REPLACE VIEW pror_v_bkms_biomni
AS
    SELECT 
      CASE WHEN (SELECT USER FROM DUAL)='PROR_TEST' 
           THEN 'https://fmis.testprorail.nl/?u='||fac_bookmark_id||CHR(38)||'mld_defaultstdmelding='||ms.MLD_STDMELDING_KEY
           ELSE 'https://fmis.prorail.nl/?u='||fac_bookmark_id||CHR(38)||'mld_defaultstdmelding='||ms.MLD_STDMELDING_KEY 
            END url,
           ms.MLD_STDMELDING_OMSCHRIJVING
      FROM fac_bookmark fb, mld_stdmelding ms
     WHERE fb.FAC_BOOKMARK_NAAM='SSP/Biomni melding'
       AND ms.mld_stdmelding_verwijder IS NULL
     ORDER BY ms.MLD_STDMELDING_KEY;

---
-- View tbv alle melding status
-- Deze worden door BIOMNI via API uitgelezen
---
CREATE OR REPLACE VIEW pror_v_mld_biomni
AS
    SELECT m.mld_melding_key mld_key,
           id.ins_srtdiscipline_prefix||m.mld_melding_key mld_key_inclprefix,             
           COALESCE(m.mld_melding_onderwerp, ms.mld_stdmelding_omschrijving) omschrijving, 
           mst.mld_statuses_omschrijving, 
           m.mld_melding_datum aanvraag_datum,
           COALESCE(p.prs_perslid_email,m.mld_melding_email_ext) email_aanvrager,
           (SELECT a.mld_melding_note_omschrijving 
              FROM (SELECT mld_melding_note_omschrijving 
                      FROM mld_melding_note 
                     WHERE mld_melding_key=m.mld_melding_key 
                  ORDER BY mld_melding_note_aanmaak desc) a 
             WHERE ROWNUM=1) notitie,
           CASE WHEN (SELECT USER FROM DUAL)='PROR_TEST' 
                THEN 'https://fmis.testprorail.nl/?urole=fe'||chr(38)||'mld_key='||m.mld_melding_key
                ELSE 'https://fmis.prorail.nl/?urole=fe'||chr(38)||'mld_key='||m.mld_melding_key 
                 END response_url
           --'https://fmis.prorail.nl/appl/mld/mld_melding.asp?urole=fe'||chr(38)||'mld_key='||m.mld_melding_key response_url            
      FROM mld_melding m, 
           mld_stdmelding ms, 
           mld_discipline md, 
           ins_srtdiscipline id, 
           mld_statuses mst, 
           prs_perslid p   
     WHERE p.prs_perslid_key=m.prs_perslid_key 
       AND ms.mld_stdmelding_key = m.mld_stdmelding_key
       AND md.ins_discipline_key=ms.mld_ins_discipline_key 
       AND id.ins_srtdiscipline_key = md.ins_srtdiscipline_key        
       AND mst.mld_statuses_key=m.mld_melding_status
       AND (   p.prs_perslid_email IS NOT NULL 
            OR m.mld_melding_email_ext IS NOT NULL)
     ORDER BY m.mld_melding_datum;

--
-- Looplijst Cateraar
--
CREATE OR REPLACE VIEW pror_v_cat_reserveringincl
(
   key,
   nummer,
   res_omschrijving,
   invoerdatum,
   datum,
   gastheer,
   contact,
   gastheer_email,
   gastheer_telefoon,
   contact_email,
   contact_telefoon,
   invoerder,
   kostensoortgroep,
   kostensoort,
   kpn,
   kpn_omschrijving,
   kpn_extern,
   [REDACTED],
   divisie_naam,
   divisie_omschrijving,
   fclt_3d_afdeling_key,
   afdeling_code,
   afdeling_omschrijving,
   regio_omschrijving,
   district_omschijving,
   fclt_3d_locatie_key,
   locatie,
   locatie_omschrijving,
   locatie_plaats,
   gebouw,
   verdieping,
   ruimte,
   opstelling,
   capaciteit,
   no_show,
   mandaat,
   personeelsnr,
   [REDACTED],
   catalogus_key,
   catalogus,
   reserveerbare_ruimte,
   bezoekers,
   van,
   tot,
   duur,
   status,
   bostatus,
   activiteit,
   srtactiviteit_key,
   activiteitsoort,
   opmerking,
   voorziening_discipline_key,
   voorziening_type,
   voorziening_catalogus,
   leverancier,
   voorziening_product_key,
   voorziening_product,
   voorziening_totaalprijs,
   voorziening_totaalprijsex,
   voorziening_van,
   voorziening_tot,
   voorziening_aantal,
   voorziening_prijs,
   voorziening_opmerking   
)
AS
   SELECT rrr.res_rsv_ruimte_key,
          res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_omschrijving,
          COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van),
          rrr.res_rsv_ruimte_van,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT ph.prs_perslid_email
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT ph.prs_perslid_telefoonnr
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT pc.prs_perslid_email
             FROM prs_perslid pc
            WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT pc.prs_perslid_telefoonnr
             FROM prs_perslid pc
            WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT pf.prs_perslid_naam_full
             FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf
            WHERE     tr.prs_perslid_key = pf.prs_perslid_key
                  AND str.fac_srtnotificatie_code = 'RESNEW'
                  AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                  AND tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key),
          (SELECT ksg.prs_kostensoortgrp_oms
             FROM prs_kostensoortgrp ksg, prs_kostensoort ks
            WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                  AND ks.prs_kostensoort_key =
                        (SELECT disc.prs_kostensoort_key
                           FROM res_discipline disc
                          WHERE disc.ins_discipline_key =
                                   COALESCE (
                                      voorz.ins_discipline_key,
                                      (SELECT ins_discipline_key
                                         FROM ins_tab_discipline d,
                                              res_ruimte_opstelling ro,
                                              res_ruimte rr
                                        WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                              AND ro.res_ruimte_key = rr.res_ruimte_key
                                              AND rr.res_discipline_key = d.ins_discipline_key))))
             kostensoortgroep,
          (SELECT ks.prs_kostensoort_oms
             FROM prs_kostensoort ks
            WHERE ks.prs_kostensoort_key =
                     (SELECT disc.prs_kostensoort_key
                        FROM res_discipline disc
                       WHERE disc.ins_discipline_key =
                                COALESCE (
                                   voorz.ins_discipline_key,
                                   (SELECT ins_discipline_key
                                      FROM ins_tab_discipline d,
                                           res_ruimte_opstelling ro,
                                           res_ruimte rr
                                     WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                           AND ro.res_ruimte_key = rr.res_ruimte_key
                                           AND rr.res_discipline_key = d.ins_discipline_key))))
             kostensoort,
          k.prs_kostenplaats_nr,
          k.prs_kostenplaats_omschrijving,
          k.prs_kostenplaats_extern,
          an.prs_afdeling_key,
          an.prs_afdeling_naam,
          an.prs_afdeling_omschrijving,
          a.prs_afdeling_key,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          (SELECT rg.alg_regio_omschrijving
             FROM alg_regio rg,
                  alg_district d,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     rg.alg_regio_key = d.alg_regio_key
                  AND d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT d.alg_district_omschrijving
             FROM alg_district d,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT l.alg_locatie_key
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_code
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_omschrijving
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_plaats
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_gebouw_naam
             FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
            WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_verdieping_code
             FROM alg_verdieping v, alg_ruimte r
            WHERE v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          r2a.ruimte_nr,
          r2a.opstelling,
          r2a.capaciteit,
          rrr.res_rsv_ruimte_noshow,
          NVL ( (SELECT pr.fac_profiel_limiet
                   FROM fac_profiel pr
                  WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
          prs_perslid_nr,
          COALESCE (
             voorz.ins_discipline_key,
             (SELECT ins_discipline_key
                FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
               WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                     AND ro.res_ruimte_key = rr.res_ruimte_key
                     AND rr.res_discipline_key = d.ins_discipline_key)),
          (SELECT ins_discipline_key
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                  AND ro.res_ruimte_key = rr.res_ruimte_key
                  AND rr.res_discipline_key = d.ins_discipline_key),
          (SELECT ins_discipline_omschrijving
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                  AND ro.res_ruimte_key = rr.res_ruimte_key
                  AND rr.res_discipline_key = d.ins_discipline_key),
          DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee'),
          rrr.res_rsv_ruimte_bezoekers,
          rrr.res_rsv_ruimte_van,
          rrr.res_rsv_ruimte_tot,
          COALESCE ( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 0),
          (SELECT res_status_fo_omschrijving
             FROM res_status_fo rs
            WHERE rs.res_status_fo_key = rrr.res_status_fo_key),
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo rs
            WHERE rs.res_status_bo_key = rrr.res_status_bo_key),
          ra.res_activiteit_omschrijving,
          rsa.res_srtactiviteit_key,
          rsa.res_srtactiviteit_omschrijving,
          rrr.res_rsv_ruimte_opmerking,
          voorz.ins_discipline_key,
          voorz.vtype,
          voorz.catalogus,
          (SELECT prs_bedrijf_naam
             FROM res_disc_params rdp, prs_bedrijf b
            WHERE     rdp.prs_bedrijf_key = b.prs_bedrijf_key
                  AND rdp.res_ins_discipline_key = voorz.ins_discipline_key),
          voorz.product_key,
          voorz.product,
          voorz.totaalprijs,
          voorz.totaalprijs_ex,
          TO_CHAR (voorz.van, 'hh24:mi'),
          TO_CHAR (voorz.tot, 'hh24:mi'),
          voorz.aantal,
          ROUND(voorz.prijs,2),         
          (SELECT rk.res_kenmerkartikel_waarde 
             FROM res_kenmerkartikel rk 
            WHERE rk.res_rsv_artikel_key=voorz.rrr_dl_art_key 
              AND rk.res_kenmerkartikel_verwijder IS NULL) voorz_opm    
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_reservering res,
          prs_kostenplaats k,
          prs_perslid p,
          prs_afdeling a,
          prs_afdeling an,
          prs_v_afdeling_boom ab,
          (  SELECT res_rsv_ruimte_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ro.res_ruimte_opstel_bezoekers) capaciteit,
                    MAX (ra.alg_ruimte_key) alg_ruimte_key,
                    MAX (rr.res_ruimte_nr) ruimte_nr
               FROM res_rsv_ruimte r,
                    res_ruimte_opstelling ro,
                    res_opstelling o,
                    res_ruimte rr,
                    res_alg_ruimte ra
              WHERE     r.res_rsv_ruimte_verwijder IS NULL
                    AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                    AND ro.res_ruimte_key = rr.res_ruimte_key
                    AND ro.res_opstelling_key = o.res_opstelling_key
                    AND rr.res_ruimte_key = ra.res_ruimte_key
           GROUP BY res_rsv_ruimte_key
           UNION ALL
           SELECT res_rsv_ruimte_key,
                  '' opstelling,
                  NULL capaciteit,
                  rrr.alg_ruimte_key,
                  r.alg_ruimte_nr
             FROM res_rsv_ruimte rrr, alg_ruimte r
            WHERE rrr.alg_ruimte_key IS NOT NULL AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a,
          (SELECT rrd.res_rsv_ruimte_key res_rsv_ruimte_key,
                  null rrr_dl_art_key,
                  rd.res_deel_key product_key,
                  rd.res_deel_omschrijving product,
                  DECODE (
                     rd.res_deel_prijs_vast,
                     1,
                     NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs),
                       (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van)
                     * 24
                     * NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs))
                     totaalprijs,
                  NULL totaalprijs_ex,
                  rrd.res_rsv_deel_van van,
                  rrd.res_rsv_deel_tot tot,
                  (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal,
                  NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs) prijs,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'object' vtype
             FROM res_v_aanwezigrsv_deel rrd,
                  res_deel rd,
                  ins_deel d,
                  ins_tab_discipline c
            WHERE     rrd.res_deel_key = rd.res_deel_key
                  AND d.ins_deel_key = rd.res_ins_deel_key
                  AND rrd.res_rsv_ruimte_key IS NOT NULL
                  AND c.ins_discipline_key = rd.res_discipline_key
           UNION ALL
           SELECT rra.res_rsv_ruimte_key res_rsv_ruimte_key,
                  rra.res_rsv_artikel_key rrr_dl_art_key,
                  ra.res_artikel_key product_key,
                  ra.res_artikel_omschrijving product,
                  NVL (rra.res_rsv_artikel_prijs, rra.res_rsv_artikel_aantal * res_artikel_prijs)
                     totaalprijs,
                  NVL (rra.res_rsv_artikel_prijs/(1+NVL(res_artikel_btw/100,0)), rra.res_rsv_artikel_aantal * res_artikel_prijs/(1+NVL(res_artikel_btw/100,0)))
                     totaalprijs_ex,
                  rra.res_rsv_artikel_levering van,
                  NULL tot,
                  rra.res_rsv_artikel_aantal aantal,
                  NVL (rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal, res_artikel_prijs)
                     prijs,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'consumable' vtype
             FROM res_v_aanwezigrsv_artikel rra, res_artikel ra, ins_tab_discipline c
            WHERE rra.res_artikel_key = ra.res_artikel_key
                  AND ra.res_discipline_key = c.ins_discipline_key) voorz
    WHERE     rrr.res_reservering_key = res.res_reservering_key
          AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key(+)
          AND rrr.res_activiteit_key = ra.res_activiteit_key
          AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
          AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
          AND p.prs_afdeling_key = a.prs_afdeling_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_afdeling_key1 = an.prs_afdeling_key
          AND (rrr.res_ruimte_opstel_key IS NOT NULL OR voorz.res_rsv_ruimte_key IS NOT NULL)
          AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2010', 'DD-MM-YYYY');




--- EXPORTS

-- PROVAT EXPORT
-- De geexporteerde meldingen een export datum meegeven.
CREATE OR REPLACE PROCEDURE PROR_SELECT_PROVAT(p_applname IN VARCHAR2,
                                                  p_applrun IN VARCHAR2                                                 
)
AS
  v_kenmerk_key NUMBER;
  CURSOR c 
  IS
      SELECT * 
        FROM pror_v_mld_provat                         
       WHERE provat_flag IS NULL
             OR (provat_flag='0' AND mld_update>TO_DATE(export_provat,'DD-MM-YYYY'));
BEGIN
  
  FOR rec in c
  LOOP
          flx.setflex('MLD',823,rec.melding_key,'1');  -- Deze mogen geexporteerd worden      A = 1041 P=823    
      
  END LOOP;
  
 
END;
/


--
-- Export view voor alle meldingen die naar ProVat geexporteerd moeten die syncstatus=1 hebben
--
CREATE OR REPLACE VIEW PROR_V_EXPORT_PROVAT  
(
  result,
  result_order
)
AS
  SELECT 'SLA-escalatieniveau;Requestnr;Begindatum;Contact;Service;Omschrijving;Gebouw;Assignee;Type request;Status;Kostenplaats;Omschrijving' heaeder,0 FROM DUAL
  UNION ALL
  SELECT ';'||melding_key||';'||TO_CHAR(begin_datum,'DD-MM-YYYY HH24:MI:SS')||';'||contact||';'||service||';'||omschrijving||';'||locatie||';'||assignee||';'||type_request||';'||mld_status||';;'||REPLACE(REPLACE(REPLACE(onderwerp, CHR(10),''),CHR(13),''),';',' ')||', '||kenmerkwaardes, 1
    FROM pror_v_mld_provat                        
   WHERE provat_flag='1'               
   ORDER BY 1 DESC;
    


-- alle geexporteerde meldingen de sync date en syncstatus goedzetten    
CREATE OR REPLACE PROCEDURE PROR_EXPORT_PROVAT(p_applname IN VARCHAR2,
                                               p_applrun IN VARCHAR2,
                                               p_index IN VARCHAR2,
                                               p_file IN VARCHAR2
)
AS
  CURSOR c
  IS
      SELECT * 
        FROM pror_v_mld_provat                            
       WHERE provat_flag='1';
BEGIN
    FOR rec IN C
    LOOP      
        
        flx.setflex('MLD',757,rec.melding_key,TO_CHAR(SYSDATE,'DD-MM-YYYY'));  -- A = 1021 P=757
        flx.setflex('MLD',823,rec.melding_key,'0');                            -- A = 1041 P=823
    END LOOP; 
END;
/    
-- EINDE PROVAT EXPORT    
    
-- EXPORT VAN CATERING BESTELLINGE TBV Eurest
--    
-- VIEW TBV EUREST EXPORT (ook gebruikt in rapportage)
CREATE OR REPLACE VIEW pror_v_select_eurest_cat
AS
       SELECT distinct rra.res_rsv_ruimte_key rrr_key,
              rrr.res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr reservering,
              rrr.res_rsv_ruimte_opmerking opmerking,
              'Regulier' extra_opmerking,
              rrr.res_rsv_ruimte_van van,
              rrr.res_rsv_ruimte_tot tot,
              (SELECT prs_perslid_naam_friendly 
                 FROM prs_v_perslid_fullnames 
                WHERE prs_perslid_key=rrr.res_rsv_ruimte_contact_key) aanvrager,
              p.prs_perslid_telefoonnr telefoon,
              p.prs_perslid_email email,
              k.prs_kostenplaats_key,
              k.prs_kostenplaats_nr kostenplaats,
              k.prs_kostenplaats_omschrijving,
              COALESCE (
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key
                      GROUP BY alg_locatie_code,alg_gebouw_upper,alg_verdieping_code)) loc_gb_ruimtenr,
              COALESCE (
                  (SELECT alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key)) ruimtenr,
              ra.res_artikel_groep soort_locatie,
              rrr.res_activiteit_key activiteit_key        
         FROM res_rsv_artikel   rra,
              res_artikel       ra,
              res_rsv_ruimte    rrr,
              prs_kostenplaats  k,
              prs_v_perslid_gegevens p
        WHERE rrr.res_rsv_ruimte_van > TO_DATE('01-05-2022','DD-MM-YYYY')
          AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rra.res_artikel_key = ra.res_artikel_key        
          AND rrr.res_status_bo_key = 2  -- afgemeld
          AND rrr.res_status_fo_key = 2          
          AND p.prs_perslid_key=rrr.res_rsv_ruimte_contact_key
          AND rra.res_rsv_artikel_verwijder IS NULL
          AND rrr.res_rsv_ruimte_verwijder IS NULL
          AND rrr.res_rsv_ruimte_key NOT IN (SELECT rkw.RES_RSV_RUIMTE_KEY FROM res_kenmerkwaarde rkw, res_kenmerk rk
                                              WHERE rkw.RES_RSV_RUIMTE_KEY = rrr.RES_RSV_RUIMTE_KEY
                                              AND rk.RES_KENMERK_KEY = rkw.RES_KENMERK_KEY
                                              AND rk.RES_KENMERK_OMSCHRIJVING='ExternSyncDatum')
 --         AND rrr.res_rsv_ruimte_externsyncdate IS NULL  KUNNEN WE NIET GEBRUIKEN AANGEZIEN DE OUTLOOK KOPPELING DEZE GEBRUIKT
     UNION  -- alle bezrogde reserveringn
     SELECT distinct rra.res_rsv_ruimte_key rrr_key,
              rrr.res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr reservering,
              rrr.res_rsv_ruimte_opmerking opmerking,
              'Bezorgen' extra_opmerking,
              rrr.res_rsv_ruimte_van van,
              rrr.res_rsv_ruimte_tot tot,
              (SELECT prs_perslid_naam_friendly 
                 FROM prs_v_perslid_fullnames 
                WHERE prs_perslid_key=rrr.res_rsv_ruimte_contact_key) aanvrager,
              p.prs_perslid_telefoonnr telefoon,
              p.prs_perslid_email email,
              k.prs_kostenplaats_key,
              k.prs_kostenplaats_nr kostenplaats,
              k.prs_kostenplaats_omschrijving,
            --  b.prs_bedrijf_key,
            --  b.prs_overeenkomst_nr,
            COALESCE (
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key
                      GROUP BY alg_locatie_code,alg_gebouw_upper,alg_verdieping_code)) loc_gb_ruimtenr,
              COALESCE (
                  (SELECT alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key)) ruimtenr,
              ra.res_artikel_groep soort_locatie,
              rrr.res_activiteit_key activiteit_key          
         FROM res_rsv_artikel   rra,
              res_artikel       ra,           
              res_rsv_ruimte    rrr,
              prs_kostenplaats  k,
              prs_v_perslid_gegevens p
        WHERE rrr.res_rsv_ruimte_van > TO_DATE('01-05-2022','DD-MM-YYYY')
          AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rra.res_artikel_key = ra.res_artikel_key        
          AND rrr.res_status_fo_key = 2  -- vervallen en te laat uit outllok afgemeld
          AND rrr.res_rsv_ruimte_cvab_mode IS NOT NULL  -- vervallen en te laat uit outllok afgemeld          
          AND p.prs_perslid_key=rrr.res_rsv_ruimte_contact_key         
          AND rrr.res_rsv_ruimte_key NOT IN (SELECT rkw.RES_RSV_RUIMTE_KEY FROM res_kenmerkwaarde rkw, res_kenmerk rk
                                              WHERE rkw.RES_RSV_RUIMTE_KEY = rrr.RES_RSV_RUIMTE_KEY
                                              AND rk.RES_KENMERK_KEY = rkw.RES_KENMERK_KEY
                                              AND rk.RES_KENMERK_OMSCHRIJVING='ExternSyncDatum')
       --   AND rrr.res_rsv_ruimte_externsyncdate IS NULL
     UNION   -- alle te laat verwijderde outlook reservereingen met catering     
     SELECT distinct rra.res_rsv_ruimte_key rrr_key,
              rrr.res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr reservering,
              rrr.res_rsv_ruimte_opmerking opmerking,
              'Te late annulering' extra_opmerking,
              rrr.res_rsv_ruimte_van van,
              rrr.res_rsv_ruimte_tot tot,
              (SELECT prs_perslid_naam_friendly FROM prs_v_perslid_fullnames WHERE prs_perslid_key=rrr.res_rsv_ruimte_contact_key) aanvrager,
              p.prs_perslid_telefoonnr telefoon,
              p.prs_perslid_email email,
              k.prs_kostenplaats_key,
              k.prs_kostenplaats_nr kostenplaats,
              k.prs_kostenplaats_omschrijving,
              COALESCE (
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT alg_locatie_code||'-'||alg_gebouw_upper||'-'||MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key
                      GROUP BY alg_locatie_code,alg_gebouw_upper,alg_verdieping_code)) loc_gb_ruimtenr,
              COALESCE (
                  (SELECT alg_ruimte_nr
                     FROM alg_v_ruimte_gegevens alg
                    WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key),
                  (SELECT MIN(alg.alg_ruimte_nr)
                     FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg
                    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rr.res_ruimte_key = rro.res_ruimte_key
                      AND rarm.res_ruimte_key = rr.res_ruimte_key
                      AND rarm.res_alg_ruimte_verwijder IS NULL
                      AND alg.alg_ruimte_key = rarm.alg_ruimte_key)) ruimtenr,
              ra.res_artikel_groep soort_locatie,
              rrr.res_activiteit_key activiteit_key          
         FROM res_rsv_artikel   rra,
              res_artikel       ra,           
              res_rsv_ruimte    rrr,
              prs_kostenplaats  k,
              prs_v_perslid_gegevens p
        WHERE rrr.res_rsv_ruimte_van > TO_DATE('01-05-2022','DD-MM-YYYY')
          AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rra.res_artikel_key = ra.res_artikel_key        
          AND rrr.res_status_fo_key = 4  -- vervallen en te laat uit outllok afgemeld
          AND rrr.res_status_bo_key = 2  -- vervallen en te laat uit outllok afgemeld          
          AND p.prs_perslid_key=rrr.res_rsv_ruimte_contact_key         
          AND rrr.res_rsv_ruimte_externnr IS NOT NULL
     --     AND rrr.res_rsv_ruimte_externsyncdate IS NULL 
          AND rrr.res_rsv_ruimte_key NOT IN (SELECT rkw.RES_RSV_RUIMTE_KEY FROM res_kenmerkwaarde rkw, res_kenmerk rk
                                              WHERE rkw.RES_RSV_RUIMTE_KEY = rrr.RES_RSV_RUIMTE_KEY
                                              AND rk.RES_KENMERK_KEY = rkw.RES_KENMERK_KEY
                                              AND rk.RES_KENMERK_OMSCHRIJVING='ExternSyncDatum')                 
          AND rrr.res_rsv_ruimte_key NOT IN (SELECT rkw.res_rsv_ruimte_key    -- deze zijn door kenmerk uitgesloten van facturatie (aangegeven door cateraar) 
                                               FROM res_kenmerkwaarde rkw, res_kenmerk rk 
                                              WHERE rkw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                                                AND rkw.res_kenmerk_key = rk.res_kenmerk_key
                                                AND rk.res_kenmerk_omschrijving='Niet factureren');  

CREATE OR REPLACE PROCEDURE PROR_SELECT_EUREST_CAT(
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS

   CURSOR sel
   IS
   SELECT  p.*,
          (SELECT alg.alg_gebouw_code 
             FROM alg_v_allonrgoed_gegevens alg 
            WHERE alg.alg_plaatsaanduiding=p.loc_gb_ruimtenr) gebouw_code,
           (SELECT k.res_kenmerk_key from res_kenmerk k
             WHERE k.res_kenmerk_omschrijving='ExternSyncDatum'       
               AND k.res_activiteit_key = p.activiteit_key) kenmerk_sync_key 
     FROM PROR_V_SELECT_EUREST_CAT p                 
    WHERE TO_CHAR(p.van,'MM')=TO_CHAR(ADD_MONTHS(SYSDATE,-1),'MM');  

  CURSOR sel_art(p_rrr_key NUMBER)
  IS
       SELECT rra.res_rsv_artikel_key,
              rra.res_rsv_artikel_aantal aantal,
              ra.res_artikel_omschrijving artikel_omschrijving,
              COALESCE(ra.RES_ARTIKEL_NR,ra.res_artikel_externnr) artikelnr,
              rra.res_rsv_artikel_levering van,
              ra.res_artikel_btw btw,
              rra.res_rsv_artikel_prijs totprijs,
              ra.res_artikel_prijs prijs,
              rd.ins_discipline_omschrijving catalogus,
              (SELECT rka.res_kenmerkartikel_waarde 
                 from res_kenmerkartikel rka, res_kenmerk rk, res_srtkenmerk rsk 
                where rka.res_rsv_artikel_key=rra.res_rsv_artikel_key
                AND rk.res_kenmerk_key=rka.res_kenmerk_key
                AND rsk.res_srtkenmerk_key = rk.res_srtkenmerk_key
                AND rsk.res_srtkenmerk_upper='MAATWERK OPMERKING') opmerking
         FROM res_rsv_artikel   rra,
              res_artikel       ra,
              res_discipline    rd
        WHERE rra.res_rsv_ruimte_key=p_rrr_key
              AND rra.res_artikel_key = ra.res_artikel_key
           --   AND rra.res_status_bo_key = 2  -- afgemeld
              AND rra.res_rsv_artikel_verwijder IS NULL
              AND ra.res_artikel_btw IN (0, 9, 21)
              AND rd.ins_discipline_key=ra.res_discipline_key;

    v_bestand  VARCHAR2(20);
    v_shop_token  VARCHAR2(50);
    v_contact_email VARCHAR2(50);
    v_debitor_value VARCHAR2(20);
    v_counter NUMBER;
    v_artikelprijs  NUMBER;
    v_maand   NUMBER;
    v_jaar    NUMBER;
    
BEGIN
    v_bestand :='EUR-EX';
    v_counter:=0;

    -- CIRFOOD settings
    v_shop_token:='CMPS_1234';
    v_contact_email :='compass@prorail.nl';
    v_debitor_value := 'PROR_DEB_CODE';

   -- IF fac.safe_to_number((TO_CHAR(SYSDATE,'MM'))) = 1 THEN
   --   v_maand:=12
   --   v_jaar := fac_safe_to_number(TO_CHAR(SYSDATE,'YYYY'))-1;
   -- END IF;  

    -- eerst opschonen
    DELETE FROM fac_rapport
    WHERE fac_rapport_node = v_bestand;

    pror.add_xml_row (v_bestand, '<?xml version="1.0" encoding="windows-1252"?>');
    pror.add_xml_row (v_bestand, '<Message version="1.1">');
    pror.add_xml_row (v_bestand, '<Header>');
 /*   pror.add_xml_row (v_bestand, '<ShopToken>'||v_shop_token||'</ShopToken>'); */
    pror.add_xml_row (v_bestand, '<Sender>');
    pror.add_xml_row (v_bestand, '<ID>1</ID>');
    pror.add_xml_row (v_bestand, '<Name>Prorail</Name>');
    pror.add_xml_row (v_bestand, '<Email>'||v_contact_email||'</Email>');
    pror.add_xml_row (v_bestand, '</Sender>');
    pror.add_xml_row (v_bestand, '<Subject>Purchaseorder Facilitor</Subject>');
    pror.add_xml_row (v_bestand, '</Header>');
    pror.add_xml_row (v_bestand, '<Content>');
    pror.add_xml_row (v_bestand, '<Orders>');
    FOR rec IN sel
    LOOP
          v_counter:=v_counter+1;
          pror.add_xml_row(v_bestand, '<Order>');
                pror.add_xml_row(v_bestand, '<Customer>');
                pror.add_xml_element (v_bestand, 'Name', 'PROR');
                pror.add_xml_element (v_bestand, 'ID', '0000');
                pror.add_xml_element (v_bestand, 'ExternalID', rec.reservering);
                pror.add_xml_row(v_bestand, '<ContentContact>');
                pror.add_xml_element (v_bestand, 'Name', rec.aanvrager);
                pror.add_xml_element (v_bestand, 'Tel', rec.telefoon);
                pror.add_xml_element (v_bestand, 'Email', rec.email);
                pror.add_xml_row(v_bestand, '</ContentContact>');
                pror.add_xml_row(v_bestand, '</Customer>');
                pror.add_xml_element (v_bestand, 'Comments',  REGEXP_REPLACE(rec.opmerking, '[^ -~|[:space:]]', ''));
                pror.add_xml_row(v_bestand, '<Delivery>');
                pror.add_xml_row(v_bestand, '<Location>');
                pror.add_xml_element (v_bestand, 'Reference', SUBSTR(rec.loc_gb_ruimtenr,INSTR(rec.loc_gb_ruimtenr,'-',1,1)+1,INSTR(rec.loc_gb_ruimtenr,'-',1,2)-INSTR(rec.loc_gb_ruimtenr,'-',1,1)-1));
                pror.add_xml_row(v_bestand, '<Room>');
                pror.add_xml_element (v_bestand, 'Description',rec.loc_gb_ruimtenr);
                pror.add_xml_row(v_bestand, '</Room>');
                pror.add_xml_row(v_bestand, '</Location>');
                pror.add_xml_element (v_bestand, 'RequestedDeliveryDateTime',to_char(rec.van,'YYYYMMDD')||'T'||to_char(rec.van,'HH24:MI:SS'));
                pror.add_xml_element (v_bestand, 'RequestedCollectDateTime',to_char(rec.tot,'YYYYMMDD')||'T'||to_char(rec.tot,'HH24:MI:SS'));
                pror.add_xml_row(v_bestand, '</Delivery>');
                pror.add_xml_row(v_bestand, '<CostCentre>');
                pror.add_xml_element (v_bestand, 'Code',rec.kostenplaats);
                pror.add_xml_row(v_bestand, '</CostCentre>');
                pror.add_xml_row(v_bestand, '<OrderLines>');
                FOR rec_art in sel_art(rec.rrr_key)
                LOOP
                    pror.add_xml_row(v_bestand, '<OrderLine>');
                    pror.add_xml_element (v_bestand, 'Start',TO_CHAR(rec_art.van,'HH24:MI'));
                    pror.add_xml_row(v_bestand, '<Item>');
                    IF UPPER(rec_art.catalogus) LIKE 'MAATWERK%' THEN
                        pror.add_xml_element (v_bestand, 'Description',SUBSTR(rec_art.artikel_omschrijving||', '||rec_art.opmerking,1,100));
                    ELSE 
                        pror.add_xml_element (v_bestand, 'Description',rec_art.artikel_omschrijving);                    
                    END IF;
                    pror.add_xml_element (v_bestand, 'Reference',rec_art.artikelnr);
                    pror.add_xml_row(v_bestand, '</Item>');
                   
                    v_artikelprijs:=0;
                    
                    IF UPPER(rec_art.catalogus) LIKE 'MAATWERK%' 
                    THEN
                      v_artikelprijs := rec_art.totprijs/rec_art.aantal;
                    
                    ELSE
                      v_artikelprijs := rec_art.prijs;                        
                    
                    END IF;
                    pror.add_xml_element (v_bestand, 'QuantityOrdered',rec_art.aantal);                    
                    pror.add_xml_row(v_bestand, '<Price>');
                    
                    pror.add_xml_element (v_bestand, 'NetPrice',ROUND(v_artikelPrijs/(1+rec_art.btw/100),2));
                    pror.add_xml_element (v_bestand, 'BrtPrice',v_artikelprijs);

                    pror.add_xml_element (v_bestand, 'Currency','EUR');
                    pror.add_xml_element (v_bestand, 'VatPercentage',rec_art.btw);
                    pror.add_xml_row(v_bestand, '</Price>');
                    pror.add_xml_row(v_bestand, '</OrderLine>');
                    UPDATE res_rsv_artikel SET res_rsv_artikel_externsyncdate=SYSDATE WHERE res_rsv_artikel_key=rec_art.res_rsv_artikel_key;
                 END LOOP;
                pror.add_xml_row(v_bestand, '</OrderLines>');
                pror.add_xml_row(v_bestand, '</Order>');
                
                flx.setflex('RES',rec.kenmerk_sync_key,rec.rrr_key,TO_CHAR(TRUNC(SYSDATE),'DD-MM-YYYY'));
                
   --             UPDATE res_rsv_ruimte SET res_rsv_ruimte_externsyncdate=SYSDATE WHERE res_rsv_ruimte_key=rec.rrr_key;
    END LOOP;
    pror.add_xml_row (v_bestand, '</Orders>');
    pror.add_xml_row (v_bestand, '</Content>');
    pror.add_xml_row (v_bestand, '</Message>');

    IF v_counter=0  -- we hebben niets te exporteren dan kunnen we de xml headers ook opruimen.
    THEN
        DELETE FROM fac_rapport
         WHERE fac_rapport_node = v_bestand;
    END IF;
END;
/

CREATE OR REPLACE VIEW PROR_V_EXPORT_EUREST_CAT
(
    result,
    result_order
)
AS
    SELECT fac_rapport_regel, fac_rapport_volgnr
      FROM fac_rapport
     WHERE fac_rapport_node LIKE 'EUR-EX%';    
 -- EINDE EXPORT COMPASSGROUP   
    
    
    
CREATE OR REPLACE PROCEDURE PROR_EXPORT_NSECURE_UPD(p_applname   IN VARCHAR2,
                                                 p_applrun    IN VARCHAR2,
                                                 p_filedir    IN VARCHAR2,
                                                 p_filename   IN VARCHAR2)
AS
    oracle_err_num     NUMBER;
    oracle_err_mes     VARCHAR2 (200);
    v_errorhint        VARCHAR2 (100);
    v_aanduiding       VARCHAR2 (100);
    v_locatie_key      NUMBER;
    v_lengte           NUMBER;    
    v_new_note         VARCHAR2 (4000);
    v_note_key         NUMBER;
    
    
    CURSOR upd 
    IS
        SELECT o.mld_opdr_key, M.MLD_MELDING_KEY from mld_opdr o, mld_melding m 
         WHERE  o.MLD_STATUSOPDR_KEY IN (5,8) 
           AND m.mld_melding_key = o.mld_melding_key
           AND o.MLD_UITVOERENDE_KEYS=(select b.prs_bedrijf_key 
                                         from prs_bedrijf b 
                                        where b.PRS_LEVERANCIER_NR ='313341' 
                                          and b.PRS_BEDRIJF_UITVOERENDE='1'  
                                          AND b.PRS_BEDRIJF_VERWIJDER IS NULL)
           AND o.MLD_OPDR_EXTERNSYNCDATE < (select MAX(mld_melding_note_aanmaak) 
                                      from mld_melding_note      
                                     where mld_melding_key=6
                                       and mld_melding_note_flag =1);
                                       
BEGIN
      FOR rec IN upd
      LOOP
        
            SELECT MLD_MELDING_NOTE_OMSCHRIJVING 
              INTO v_new_note
              FROM (SELECT MAX(mld_MELDING_note_aanmaak), mld_MELDING_key, mld_melding_note_key, MLD_melding_NOTE_OMSCHRIJVING 
                      from mld_melding_note where mld_melding_key=rec.mld_melding_key
                  GROUP BY mld_melding_key,mld_melding_note_key,MLD_melding_NOTE_OMSCHRIJVING); 
            -- Gaan we hem nu in de melding kenmerk notite zetten
            SELECT k.mld_kenmerk_key
              INTO v_note_key
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                    AND UPPER (sk.mld_srtkenmerk_omschrijving) = 'UPDATE NOTITIES';
             
              v_errorhint :=
                   'Verwijderen kenmerk bij de opdracht : '
                || rec.mld_melding_key;
             
             DELETE MLD_KENMERKOPDR ko
              WHERE ko.mld_opdr_key = rec.mld_opdr_key
                AND ko.mld_kenmerk_key = v_note_key;
            
            
             mld.upsertopdrachtkenmerk (v_note_key,
                                       rec.mld_opdr_key,
                                       v_new_note);
                                       
             v_errorhint :=
                   'Opdracht opnieuw te verzenden naar Nsecure voor opdracht : '
                || rec.mld_melding_key;

            -- Eerst zetten we de opdracht opnieuw klaar om te verzenden
            UPDATE mld_opdr o
               SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
             WHERE o.mld_opdr_key = rec.mld_opdr_key;                          
                                       
      END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

        fac.writelog (p_applname,
                      'E',
                      oracle_err_num || '/' || oracle_err_mes,
                      v_errorhint);  
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
