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

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

--------------------------------------------------
--- HIERONDER NIEUWE AFAS IMPORT (2025-JULI)  ----
--------------------------------------------------

CREATE OR REPLACE PROCEDURE hmod_import_afasonline (p_import_key IN NUMBER)
AS
    oracle_err_num            NUMBER;
    oracle_err_mes            VARCHAR2 (200);
    v_errormsg                VARCHAR2 (400);
    v_errorhint               VARCHAR2 (400);
    v_aantal_in_fclt          NUMBER;
    v_seq_of_columns          VARCHAR (255);
    v_seq_of_header           VARCHAR (1000);
    
    -- overige variabelen
    v_prs_afdeling_key        NUMBER (10);
    c_prs_bedrijf_key_hmod    NUMBER (10) := 41; 
    v_prs_perslid_rol_key     NUMBER (10);

    CURSOR c_afd
    IS
        SELECT fac_imp_file_index,
               prs_afdeling_naam,  -- Afdelingscode
               prs_kenmerk5        -- Afdeling omschrijving
          FROM fac_imp_perslid
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

    CURSOR c_afd_log
    IS
        SELECT prs_kenmerk20        -- Nieuwe afdeling aanmaken - vullen we in dit kenmerk20
          FROM fac_imp_perslid
         WHERE fac_import_key = p_import_key
               AND prs_kenmerk20 IS NOT NULL
      GROUP BY prs_kenmerk20;

    -- Op basis van de functie gaan we de facilitor-rol bepalen
    ---- via deze rol gaan tijdens verwerkingsactie mensen juiste rechten geven
    CURSOR c_rol
    IS
        SELECT fac_imp_file_index, prs_kenmerk6, prs_kenmerk7
          FROM fac_imp_perslid
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index ;

BEGIN
    -- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ;
    v_errorhint := 'Delimiter goed zetten';

    -- UPDATE fac_imp_file
    --   SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';')
    -- WHERE fac_import_key = p_import_key;

    -- Het aangeleverde bestand heeft aanhalingstekens om de invoervelden..
    UPDATE fac_imp_file
       SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '')
     WHERE fac_import_key = p_import_key;

    v_errorhint := 'Generieke update';
  -- Import AFAS_ONLINE -- csv formaat via stylesheet afas2fclt.xsl bepaald
    v_seq_of_header := 'Personeelsnummer;Roepnaam;Voorletters;Voorvoegsel;Achternaam;Geslacht;Zakelijk mailadres;Dienstverb.;Begindatum functieregel;Einddatum functieregel;Afdelingscode;Afdeling omschrijving;Functiecode;Functieomschrijving;Formatieplaatscode;Formatieplaats omschrijving;Uren/wk;Leidinggevende persnr.;Naam Leidinggevende;Kofferletter;Datum in dienst;Datum uit dienst';
  -- 1. Personeelsnummer
  -- 2. Roepnaam
  -- 3. Voorletters
  -- 4. Voorvoegsel
  -- 5. Achternaam
  -- 6. Geslacht
  -- 7. Zakelijk mailadres
  -- 8. Dienstverb.
  -- 9. Begindatum functieregel
  -- 10. Einddatum functieregel
  -- 11. Afdelingscode
  -- 12. Afdeling omschrijving
  -- 13. Functiecode
  -- 14. Functieomschrijving
  -- 15. Formatieplaatscode
  -- 16. Formatieplaats omschrijving
  -- 17. Uren/wk
  -- 18. Leidinggevende persnr.
  -- 19. Naam Leidinggevende
  -- 20. Kofferletter
  -- 21. Datum in dienst
  -- 22. Datum uit dienst

   -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure
    v_seq_of_columns := '0;0;0;0;0;0;11;5;4;2;'
  -- v_alg_locatie_code 1
  -- v_alg_gebouw_code 2
  -- v_alg_verdieping_volgnr 3
  -- v_alg_ruimte_nr 4
  -- v_prs_werkplek_volgnr 5
  -- v_prs_werkplek_omschrijving 6
  -- v_prs_afdeling_naam 7                 -- VERPLICHT BIJ IMPORT
  -- v_prs_perslid_naam 8                  -- VERPLICHT BIJ IMPORT   
  -- v_prs_perslid_tussenvoegsel 9
  -- v_prs_perslid_voornaam 10
                     || '3;0;0;0;6;0;0;7;0;1;'
  -- v_prs_perslid_voorletters 11
  -- v_prs_perslid_partner_naam 12
  -- v_prs_perslid_partner_tussenv 13
  -- v_prs_naamgebruik_code 14             0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
  --                                       1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
  --                                       2 personen die de geboortenaam van de partner willen gebruiken
  --                                       3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
  -- v_prs_perslid_geslacht 15             Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default
  -- v_prs_perslid_telefoonnr 16
  -- v_prs_perslid_mobiel 17
  -- v_prs_perslid_email 18
  -- v_prs_perslid_dienstverband 19
  -- v_prs_perslid_nr 20
                     || '14;0;0;0;0;0;8;9;10;11;'
  -- v_prs_srtperslid_omschrijving 21      -- VERPLICHT BIJ IMPORT
  -- v_prs_perslid_oslogin 22
  -- v_prs_perslid_wachtwoord 23
  -- v_prs_perslid_titel 24
  -- v_prs_perslid_apikey 25
  -- v_dummy 26
  -- v_prs_kenmerk1 27
  -- v_prs_kenmerk2 28
  -- v_prs_kenmerk3 29
  -- v_prs_kenmerk4 30
                     || '12;13;14;15;16;17;18;19;20;21;'
  -- v_prs_kenmerk5 31
  -- .t/m kenmerk14 40
                     || '22;0;0;0;0;0';
  -- v_prs_kenmerk15 41
  -- ..t/m kenmerk20 46                     

    
    v_errorhint := 'Generieke update';
    -- csv verwerken naar de fac_imp_perslid-tabel 
    prs.import_perslid(p_import_key, v_seq_of_columns, v_seq_of_header);

    v_errorhint := 'Login afleiden van emailadres';
    -- Loginnaam afleiden van emailadres
    UPDATE fac_imp_perslid
       SET prs_perslid_oslogin =
               UPPER (
                   (SUBSTR (prs_perslid_email,
                            0,
                            INSTR (prs_perslid_email, '@') - 1)))
     WHERE prs_perslid_email IS NOT NULL ;

    v_errorhint := 'Uitfilteren records'; -- in afasonline-bestand zitten wellicht aantal zaken die niet mee hoeven naar Facilitor
    -- moeten we uit afasbestand nog medewerkers verwijderen voordat we vervolg import/update-acties gaan doen? Vooralsnog niet...
    NULL;

    v_errorhint := 'Bewerken records'; -- in afasonline-bestand zitten wellicht aantal zaken die we voor import naar Facilitor willen bewerken
    -- Functie in Facilitor moet worden: functiecode - functieomschrijving
    UPDATE fac_imp_perslid
       SET prs_srtperslid_omschrijving = prs_kenmerk6 || ' - ' || prs_kenmerk7 ;

    -- Afdeling bepalen waar persoon onder komt te vallen.
    ---- Deze wordt voor HUMOD direct uit AFAS gevuld.
    ---- In Facilitor kiezen we er voor dat alle afdelingen op niveau 1 aangemaakt worden onder bedrijf_key c_prs_bedrijf_key_hmod 
    ---- Indien afdeling niet gevonden dan gaan we deze aanmaken onder bedrijf Humanitas Onder Dak 
    FOR rec IN c_afd
    LOOP
        BEGIN
            v_errorhint := 'Afdeling van Persoon - bestaand of nieuw?';

            -- Afdeling op niveau 1 zoeken
            SELECT MIN (a.prs_afdeling_key)
              INTO v_prs_afdeling_key
              FROM prs_v_afdeling a
             WHERE a.prs_afdeling_upper = UPPER (rec.prs_afdeling_naam)
                   AND a.prs_afdeling_verwijder IS NULL
                   AND a.niveau = 1 -- kijken alleen naar afdelingen op niveau 1 
                   AND a.prs_bedrijf_key = c_prs_bedrijf_key_hmod ;

           -- Als afdeling uit AFAS NIET bekend is in Facilitor dan maken we deze straks bij uitvoer/update aan - Bij deze import alvast de info-logging doen
                IF v_prs_afdeling_key IS NULL
                THEN

                    UPDATE fac_imp_perslid
                       SET prs_kenmerk20 = 'Nieuwe afdeling - ' || rec.prs_afdeling_naam
                     WHERE fac_imp_file_index = rec.fac_imp_file_index ;
                
                END IF;

        END;
    END LOOP;

    FOR rec IN c_afd_log
    LOOP
        BEGIN
            v_errorhint := 'Nieuwe afdelingen aanmaken - ter info';

            
            fac.imp_writelog (p_import_key,
                              'I',
                              rec.prs_kenmerk20,
                              v_errorhint);

        END;
    END LOOP;
    
    FOR rec IN c_rol
    LOOP
        BEGIN
            v_errorhint := 'Facilitor-rollen bepalen- ter info';
            -- Op zoek naar de Facilitor-rol voor deze medewerkers op basis van functie_code en functie_omschrijving
            -- Onderhouden in eigentabellen functie_rol1 en functie_rol2  (key 901 en key 903)        	

              SELECT MAX((SELECT rol.fac_usrdata_code FROM fac_usrdata rol WHERE rol.fac_usrdata_key = ud.fac_usrdata_parentkey AND rol.fac_usrtab_key = 901))
                      facilitor_rol
                INTO v_prs_perslid_rol_key
                FROM fac_usrtab ut, fac_usrdata ud
                     WHERE     ut.fac_usrtab_key = ud.fac_usrtab_key
                           AND ut.fac_usrtab_key = 903
                           AND ud.fac_usrdata_verwijder IS NULL
                           AND UPPER(ud.fac_usrdata_code) = UPPER(rec.prs_kenmerk6)  -- functiecode
                           AND UPPER(ud.fac_usrdata_omschr) = UPPER(rec.prs_kenmerk7)  -- functieomschrijving
                           ;
                           
              IF v_prs_perslid_rol_key IS NOT NULL
              THEN

                    UPDATE fac_imp_perslid
                       SET prs_kenmerk19 = v_prs_perslid_rol_key
                     WHERE fac_imp_file_index = rec.fac_imp_file_index ;
              
              END IF;
        	
        END;
    END LOOP;
        	


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

CREATE OR REPLACE PROCEDURE hmod_update_afasonline (p_import_key IN NUMBER)
IS
   -- AFAS in sync met Facilitor bedrijf c_prs_bedrijf_key_hmod
   --- Alle personen verwijderen die niet meer in het import bestand voorkomen.
   --- Match bij HUMOD loopt via Personeelsnummer
   
   -- Afdeling AFAS leading
   --- Op niveau 1 gaan we de afdeling van HMOD aanmaken.
   --- Indien onbekende afdelingscode dan gaan we die eerst aanmaken (in immport-deel vullen we daarvoor alvast prs_kenmerk20)

   -- Leidinggevende - verantwoordelijke 
   --- In de personenkaart van Facilitor wordt officiele leidinggevende uit afas gevuld
   --- En op basis functie een automatische toewijzing aan juiste autorisatiegroepen van managers en teamleiders
   
   -- Facilitor-rollen bepalen en op basis van deze rollen autorisaties uitreiken
   --- Op basis functie/code zijn er 3 rollen te onderscheiden voor hmod in Facilitor: Teamleider locatie, Regiomanager, Manager algemeen
   --- 
   
   -- HR-mutaties in Facilitor
   --- Bij mutaties in AFAS moeten in Facilitor voor desbetreffende persoon ook zaken geregeld worden. Hiervoor zetten we kenmerk/trigger 'mutatie-hr'
   --- Betreft 4 wijzigingen: Nieuwe medewerker EN Gewijzigde formatieplaats op bestaande medewerker EN medewerker uit dienst EN mutatie nevenfuncties
   ----- Ps. laatste NOG INPASSEN - AANLEVEREN UIT AFAS
   --- Werkwijze: Via een cockpit-rapportage zijn deze in beeld en zal BedrijfsBureau de juiste HR-workflow/melding opstarten om de acties voor IT, Applicatiebeheer en Facilitair uitgevoerd te krijgen. 
   ----- Ps. Cockpit-rapport dus tevens bewakingsrapport dat zaken tijdig geregeld worden.
   --- Voor de mutatie 'verwijderde en/of inactieve medewerkers': <NOG INPASSEN / BESPREKEN MET FRANK/CLAUDIA>
   ----- Werkwijze voortel: Daar voor elk medewerker een KOFFER-OBJECT koppelen zodat de medewerker bij verwijderactie uit AFAS-koppeling altijd op INACTIEF komt   

   v_count            NUMBER;
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_errormsg         VARCHAR2 (400);
   v_errorhint        VARCHAR2 (400);

   -- overige variabelen
   v_fac_gebruikersgroep_key NUMBER(10);
   v_prs_perslid_key_verantw NUMBER(10);
   v_prs_afdeling_key        NUMBER (10);
   c_prs_bedrijf_key_hmod    NUMBER (10) := 41;
   c_rol_key_teamleider      NUMBER (10) := 1280; 
   c_rol_key_regiomanager    NUMBER (10) := 1740; 
   c_rol_key_manager         NUMBER (10) := 1320;  
   v_prs_mutatie_hr          VARCHAR2 (1000);
   v_import_datum            VARCHAR2 (30) := TO_CHAR(SYSDATE) ;
   v_datum_vandaag           DATE  := TRUNC(SYSDATE) ;

   CURSOR c_afd
   IS
        SELECT i.prs_kenmerk20, i.prs_kenmerk4, i.prs_kenmerk5
          FROM fac_imp_perslid i
         WHERE i.prs_kenmerk20 IS NOT NULL
      GROUP BY i.prs_kenmerk20, i.prs_kenmerk4, i.prs_kenmerk5 ;

   CURSOR c_del
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving, a.prs_afdeling_omschrijving, b.prs_bedrijf_naam
        FROM prs_perslid p, fac_imp_perslid i, prs_srtperslid sp, prs_v_afdeling a, prs_bedrijf b
       WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
             AND p.prs_perslid_verwijder IS NULL
             AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = b.prs_bedrijf_key
             AND b.prs_bedrijf_key = c_prs_bedrijf_key_hmod
             AND p.prs_srtperslid_key = sp.prs_srtperslid_key 
             AND i.prs_perslid_nr IS NULL    -- in Facilitor, met onderstaande voorwaarden, is er dus geen mapping op personeelsnummer en die personen gaan we verwijderen/inactief maken
             AND p.prs_perslid_nr IS NOT NULL
             AND UPPER (p.prs_perslid_email) LIKE '%HUMOD.NL'
       ORDER BY 1 ;

   -- HR-koffersysteem mutatie op functie en/of afdeling (= formatieplaats-wijziging)
   CURSOR c_mut
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving, a.prs_afdeling_omschrijving,
             flx.getflex('PRS', 1606, p.prs_perslid_key, 'P')
              formatieplaats_huidig,
             i.prs_kenmerk8
              formatieplaats_import,
             TO_DATE(flx.getflex('PRS', 1800, p.prs_perslid_key, 'P'), 'yyyy-mm-dd')
              datum_uit_dienst,
             TO_DATE(i.prs_kenmerk15, 'yyyy-mm-dd')
              datum_uit_dienst_import
        FROM prs_perslid p, fac_imp_perslid i, prs_srtperslid sp, prs_v_afdeling a, prs_bedrijf b
       WHERE p.prs_perslid_key = i.prs_perslid_key
             AND p.prs_perslid_verwijder IS NULL
             AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = b.prs_bedrijf_key
             AND b.prs_bedrijf_key = c_prs_bedrijf_key_hmod
             AND p.prs_srtperslid_key = sp.prs_srtperslid_key 
             AND p.prs_perslid_nr IS NOT NULL
             AND UPPER (p.prs_perslid_email) LIKE '%HUMOD.NL'
       ORDER BY 1 ;

   CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers in blok AFAS_ONLINE op personenkaart
   IS
        SELECT p.prs_perslid_key, i.prs_perslid_nr, i.prs_perslid_naam, i.prs_perslid_email,
               i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk8, i.prs_kenmerk9, i.prs_kenmerk10, i.prs_kenmerk11, i.prs_kenmerk12, i.prs_kenmerk13, i.prs_kenmerk14, i.prs_kenmerk15
          FROM prs_v_aanwezigperslid p, fac_imp_perslid i
         WHERE p.prs_perslid_key = i.prs_perslid_key
      ORDER BY 1;
   
   CURSOR c_verantw
   IS
        SELECT p.prs_perslid_key,
               p.prs_perslid_email,
               p.prs_perslid_nr,
               p.prs_perslid_oslogin,
               CASE WHEN p.prs_perslid_key_verantw IS NOT NULL
                    THEN (SELECT prs_perslid_nr FROM prs_perslid WHERE prs_perslid_key = p.prs_perslid_key_verantw)
                    ELSE NULL
                  END
                  prs_perslid_verantw_nr,
               p.prs_perslid_verantw_nr_afas
           FROM fac_imp_perslid              i,
                (SELECT p.prs_perslid_key,
                        p.prs_perslid_email,
                        p.prs_perslid_nr,
                        p.prs_perslid_oslogin,
                        p.prs_perslid_key_verantw,
                       (SELECT kw.prs_kenmerklink_waarde
                          FROM prs_kenmerklink kw
                         WHERE     kw.prs_kenmerk_key = 1643
                               AND kw.prs_kenmerklink_niveau = 'P'
                               AND kw.prs_link_key = p.prs_perslid_key)
                          prs_perslid_verantw_nr_afas
                   FROM prs_perslid p)       p
         WHERE    p.prs_perslid_key = i.prs_perslid_key
        ORDER BY 1  ;     

   -- cursor ROLLEN inlezen in de rol-kenmerkvelden op personenkaart
   ----- en Autorisatie goed inregelen per rol                                         --- DIT NOG APART GOED INREGELEN
   CURSOR c_rol
   IS
        SELECT p.prs_perslid_key,
               i.prs_kenmerk19, -- rol_key uit afas en eigen-tabel met de facilitor-rollen die bij functie_code en functie_omschrijving horen (tabel key 901 en key 903)
               p.prs_perslid_teamleider,
               p.prs_perslid_regiomanager,
               p.prs_perslid_manager_algemeen
           FROM fac_imp_perslid              i,
                (SELECT p.prs_perslid_key,
                        p.prs_perslid_email,
                        p.prs_perslid_nr,
                        p.prs_perslid_oslogin,
                        p.prs_perslid_key_verantw,
                       (SELECT kw.prs_kenmerklink_waarde
                          FROM prs_kenmerklink kw
                         WHERE     kw.prs_kenmerk_key = c_rol_key_teamleider
                               AND kw.prs_kenmerklink_niveau = 'P'
                               AND kw.prs_link_key = p.prs_perslid_key)
                          prs_perslid_teamleider,
                       (SELECT kw.prs_kenmerklink_waarde
                          FROM prs_kenmerklink kw
                         WHERE     kw.prs_kenmerk_key = c_rol_key_regiomanager
                               AND kw.prs_kenmerklink_niveau = 'P'
                               AND kw.prs_link_key = p.prs_perslid_key)
                          prs_perslid_regiomanager,
                       (SELECT kw.prs_kenmerklink_waarde
                          FROM prs_kenmerklink kw
                         WHERE     kw.prs_kenmerk_key = c_rol_key_manager
                               AND kw.prs_kenmerklink_niveau = 'P'
                               AND kw.prs_link_key = p.prs_perslid_key)
                          prs_perslid_manager_algemeen
                   FROM prs_perslid p)       p
         WHERE    p.prs_perslid_key = i.prs_perslid_key
        ORDER BY 1  ; 


BEGIN
   v_errormsg := 'Update afasonline';
   v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';

   SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;

   IF v_count >= 100
   THEN
      -- Geldig importbestand wat betreft aantal personen
      
      -- Gaan we eerst de afdelingsstructuur bijwerken
      FOR rec IN c_afd
      LOOP
          BEGIN
          v_errorhint:='Fout aanvullen afdelingstructuur: ' || rec.prs_kenmerk4 || ' - ' || rec.prs_kenmerk5  ;
          
          INSERT INTO prs_afdeling (
                          prs_bedrijf_key,
                          prs_afdeling_naam,
                          prs_afdeling_omschrijving,
                          prs_kostenplaats_key,
                          prs_perslid_key_verantw,
                          mld_adres_key)
                  VALUES (
                          c_prs_bedrijf_key_hmod,
                          rec.prs_kenmerk4,
                          rec.prs_kenmerk5,
                          NULL,
                          NULL,
                          NULL) ;
          
          END;
      END LOOP;      
      
      -- En dan kunnen we de generieke import draaien
      v_errorhint := 'Verwerken persoonsgegevens';

      COMMIT;

      -- generic update
      -- 'EMAIL' betekent dat op basis van Email wordt gematched.
      -- 'NR' betekent op basis Personeelsnummer
      -- 'NULL' betekent altijd geen werkplekken verwijderen
      prs.update_perslid (p_import_key, 'NR', NULL);

      -- Verwijder personen die niet meer in de import voorkomen.
      FOR rec IN c_del
      LOOP
         BEGIN
     	      v_errorhint := 'Verwijderen persoonsgegevens';

            prs.delete_perslid (p_import_key, rec.prs_perslid_key);

         END;
      END LOOP;

      FOR rec IN c_mut
      LOOP
         BEGIN
     	      v_errorhint := 'Triggers HR-mutatie zetten';
     	      
     	      v_prs_mutatie_hr := '' ;
     	      
     	      -- Bestaande medewerker met wijzigende formatieplaats 
     	      IF rec.formatieplaats_huidig IS NOT NULL AND rec.formatieplaats_huidig <> rec.formatieplaats_import
     	      THEN
     	      
     	         v_prs_mutatie_hr := 'Formatieplaats gewijzigd van ' || rec.formatieplaats_huidig || ' naar ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ;
     	         
     	         -- kenmerk aanpassen 
     	         PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr);
     	         
     	         -- fac_tracking op personenkaart
               BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_FORMATIEPLAATS_GEWIJZIGD'); END;     	         
     	      
     	      END IF;

     	      -- Nieuwe medewerker in dienst 
     	      IF rec.formatieplaats_huidig IS NULL
     	      THEN
     	      
     	         v_prs_mutatie_hr := 'Nieuwe medewerker in dienst met formatieplaats ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ;
     	         
     	         -- kenmerk aanpassen 
     	         PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr);
     	         
     	         -- fac_tracking op personenkaart
               BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_IN_DIENST'); END;     	         
     	      
     	      END IF;
     	      
     	      -- Medewerker uit dienst
     	      IF rec.datum_uit_dienst_import IS NOT NULL AND rec.datum_uit_dienst_import <> COALESCE(rec.datum_uit_dienst, v_datum_vandaag) AND rec.datum_uit_dienst_import > v_datum_vandaag
     	      THEN
     	      
     	         v_prs_mutatie_hr := 'Medewerker uit dienst met formatieplaats ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ;
     	         
     	         -- kenmerk aanpassen 
     	         PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr);
     	         
     	         -- fac_tracking op personenkaart
               BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_UIT_DIENST'); END;     	         
     	      
     	      END IF;     	      

         END;
      END LOOP;     
     
      
      -- Op de personenkaart de actuele humod-mederwerkers de afas-velden uit de koppeling vullen - ter informatie
      FOR rec IN c_flex
      LOOP
         BEGIN
         	
            -- standaardvelden:
            v_errorhint:='Fout bijwerken - Naam';
            PRS.upsertkenmerk (1602, rec.prs_perslid_key, rec.prs_perslid_naam);
            
            v_errorhint:='Fout bijwerken - Personeelsnummer';
            PRS.upsertkenmerk (1604, rec.prs_perslid_key, rec.prs_perslid_nr);

            v_errorhint:='Fout bijwerken - Zakelijk emailadres';
            PRS.upsertkenmerk (1605, rec.prs_perslid_key, rec.prs_perslid_email);            

            -- overige uit de import-kenmerkvelden:
            v_errorhint:='Fout bijwerken kenmerkveld1 - Dienstverb.';
            PRS.upsertkenmerk (1660, rec.prs_perslid_key, rec.prs_kenmerk1);

            v_errorhint:='Fout bijwerken kenmerkveld2 - Begindatum functieregel';
            PRS.upsertkenmerk (1644, rec.prs_perslid_key, rec.prs_kenmerk2);

            v_errorhint:='Fout bijwerken kenmerkveld3 - Einddatum functieregel';
            PRS.upsertkenmerk (1645, rec.prs_perslid_key, rec.prs_kenmerk3);

            v_errorhint:='Fout bijwerken kenmerkveld4 - Afdelingscode';
            PRS.upsertkenmerk (1608, rec.prs_perslid_key, rec.prs_kenmerk4);

            v_errorhint:='Fout bijwerken kenmerkveld5 - Afdeling omschrijving';
            PRS.upsertkenmerk (1609, rec.prs_perslid_key, rec.prs_kenmerk5);

            v_errorhint:='Fout bijwerken kenmerkveld6 - Functiecode';
            PRS.upsertkenmerk (1610, rec.prs_perslid_key, rec.prs_kenmerk6);

            v_errorhint:='Fout bijwerken kenmerkveld7 - Functieomschrijving';
            PRS.upsertkenmerk (1611, rec.prs_perslid_key, rec.prs_kenmerk7);

            v_errorhint:='Fout bijwerken kenmerkveld8 - Formatieplaatscode';
            PRS.upsertkenmerk (1606, rec.prs_perslid_key, rec.prs_kenmerk8);

            v_errorhint:='Fout bijwerken kenmerkveld9 - Formatieplaats omschrijving';
            PRS.upsertkenmerk (1607, rec.prs_perslid_key, rec.prs_kenmerk9);

            v_errorhint:='Fout bijwerken kenmerkveld10 - Uren/wk';
            PRS.upsertkenmerk (1640, rec.prs_perslid_key, rec.prs_kenmerk10);

            v_errorhint:='Fout bijwerken kenmerkveld11 - Leidinggevende persnr';
            PRS.upsertkenmerk (1643, rec.prs_perslid_key, rec.prs_kenmerk11);

            v_errorhint:='Fout bijwerken kenmerkveld12 - Naam Leidinggevende';
            PRS.upsertkenmerk (1642, rec.prs_perslid_key, rec.prs_kenmerk12);

            v_errorhint:='Fout bijwerken kenmerkveld13 - Kofferletter';
            PRS.upsertkenmerk (1641, rec.prs_perslid_key, rec.prs_kenmerk13);

            v_errorhint:='Fout bijwerken kenmerkveld14 - Datum in Dienst';
            PRS.upsertkenmerk (1780, rec.prs_perslid_key, rec.prs_kenmerk14);            

            v_errorhint:='Fout bijwerken kenmerkveld14 - Datum uit Dienst';
            PRS.upsertkenmerk (1800, rec.prs_perslid_key, rec.prs_kenmerk15);            

         END;
      END LOOP;
      
      -- En de verantwoordelijk manager updaten in de personenkaart indien nodig
      FOR rec IN c_verantw
      LOOP
          BEGIN
          v_errorhint:='Fout bijwerken verantwoordelijke';
          
             -- als de aangeboden waarde uit afas anders is dan de huidige verantwoordelijke in de personenkaart dan gaan we personenkaart updaten
             IF COALESCE(rec.prs_perslid_verantw_nr_afas, '<leeg>') <> COALESCE(rec.prs_perslid_verantw_nr, '<leeg>')
             THEN
             
                -- geen gevonden facilitor-manager dan gevulde verantwoordelijke verwijderen 
                IF rec.prs_perslid_verantw_nr_afas IS NULL
                THEN
                  
                  UPDATE prs_perslid
                     SET prs_perslid_key_verantw = ''
                   WHERE prs_perslid_key = rec.prs_perslid_key ;
                
                END IF;

                -- wel gevonden facilitor-manager dan bijbehorende verantwoordelijke_key in personenkaart vullen 
                IF rec.prs_perslid_verantw_nr_afas IS NOT NULL
                THEN
                  
                  SELECT MIN(prs_perslid_key)
                    INTO v_prs_perslid_key_verantw
                    FROM prs_perslid
                   WHERE prs_perslid_nr = rec.prs_perslid_verantw_nr_afas ;
                  
                  IF v_prs_perslid_key_verantw IS NOT NULL
                  THEN
                      
                    UPDATE prs_perslid
                       SET prs_perslid_key_verantw = v_prs_perslid_key_verantw
                     WHERE prs_perslid_key = rec.prs_perslid_key ;
                  
                  ELSE

                    UPDATE prs_perslid
                       SET prs_perslid_key_verantw = ''
                     WHERE prs_perslid_key = rec.prs_perslid_key  ;                
                  
                  END IF;
                
                END IF;
           
          
             END IF;  
          

          END;
      END LOOP;

      FOR rec IN c_rol
      LOOP
          BEGIN
          v_errorhint:='Fout bijwerken facilitor-rollen';
          
             -- 1. als prs_kenmerk19 leeg is dan ook alle vinkjes leegmaken...
             IF rec.prs_kenmerk19 IS NULL AND (rec.prs_perslid_teamleider IS NOT NULL OR rec.prs_perslid_regiomanager IS NOT NULL OR rec.prs_perslid_manager_algemeen IS NOT NULL)
             THEN
                
                IF rec.prs_perslid_teamleider IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;

                IF rec.prs_perslid_regiomanager IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_regiomanager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;

                IF rec.prs_perslid_manager_algemeen IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;
             
             END IF;
             
             -- 2. als prs_kenmerk19 gevuld is dan checken of juiste rol-vinkje gezet is, zo niet, doen..
             -- 2.1. voor c_rol_key_teamleider
             IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_teamleider 
             THEN
              
                -- toevoegen
                IF rec.prs_perslid_teamleider IS NULL
                THEN
                  
                   INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) 
                        VALUES (rec.prs_perslid_key, c_rol_key_teamleider, '1', 'P') ;
                     
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: (leeg) --> 1 (vanuit AFAS_koppeling)'); END;
                
                END IF;

                -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen)
                IF rec.prs_perslid_regiomanager IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_regiomanager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;

                IF rec.prs_perslid_manager_algemeen IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;
             
             END IF;

             -- 2.2. c_rol_key_regiomanager
             IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_regiomanager 
             THEN
              
                -- toevoegen
                IF rec.prs_perslid_regiomanager IS NULL
                THEN
                  
                   INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) 
                        VALUES (rec.prs_perslid_key, c_rol_key_regiomanager, '1', 'P') ;
                     
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: (leeg) --> 1 (vanuit AFAS_koppeling)'); END;
                
                END IF;

                -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen)
                IF rec.prs_perslid_teamleider IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;

                IF rec.prs_perslid_manager_algemeen IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;
             
             END IF;

             -- 2.3. c_rol_key_manager
             IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_manager 
             THEN
              
                -- toevoegen
                IF rec.prs_perslid_manager_algemeen IS NULL
                THEN
                  
                   INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) 
                        VALUES (rec.prs_perslid_key, c_rol_key_manager, '1', 'P') ;
                     
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: (leeg) --> 1 (vanuit AFAS_koppeling)'); END;
                
                END IF;

                -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen)
                IF rec.prs_perslid_teamleider IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;

                IF rec.prs_perslid_manager_algemeen IS NOT NULL
                THEN

                   DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ;
               
                   -- tracking doen op personenkaart
                   BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END;

                END IF;
            
             END IF;

          END;
      END LOOP;

      /*
      FOR rec IN c_aut
      LOOP
         BEGIN
            -- Alle locatiemanagers toevoegen aan eigen autorisatiegroep'
            v_errorhint:='Fout bijwerken locatiemanagers in eigen autorisatiegroep';

            BEGIN
            
            SELECT fac_gebruikersgroep_key
              INTO v_fac_gebruikersgroep_key
              FROM fac_gebruikersgroep
             WHERE fac_groep_key = 22 -- Groep 'Locatie- en Regiomanagers'
                   AND prs_perslid_key = rec.prs_perslid_key ;              
            EXCEPTION
              WHEN NO_DATA_FOUND
              THEN 
              
                 INSERT INTO fac_gebruikersgroep (fac_groep_key,
                                               prs_perslid_key)
                        VALUES (22, rec.prs_perslid_key);
            
            END;

            
         END;
      END LOOP;
      */

      
   ELSE
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_errorhint);
      COMMIT;
   END IF;

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




---------------------------------------------------------------------------
--- HIERONDER OUDE IMPORT ADP en KOFFERSYSTEEM NOG HELEMAAL OPSCHONEN! ----
---------------------------------------------------------------------------


CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER)
AS
    c_fielddelimitor     VARCHAR2 (1) := ';';
    v_newline            VARCHAR2 (1000);                        -- Input line
    v_errormsg           VARCHAR2 (1000);
    oracle_err_num       NUMBER;
    oracle_err_mes       VARCHAR2 (200);
    header_is_valid      NUMBER;
    v_count              NUMBER;
    v_ongeldig           NUMBER (1);
    v_mode               NUMBER (1);
    v_aanduiding         VARCHAR2 (200);
    -- v_all_null            BOOLEAN;
    v_count_error        NUMBER (10);
    v_count_tot          NUMBER (10);
    v_count_import       NUMBER (10);
    -- De importvelden:
    v_versiedatum        VARCHAR2 (15);
    v_afdeling           VARCHAR2 (250);
    v_functie            VARCHAR2 (250);
    v_code               VARCHAR2 (30);
    v_token              VARCHAR2 (20);
    v_mob                VARCHAR2 (20);
    v_hit                VARCHAR2 (20);
    v_lap_en_sim         VARCHAR2 (20);
    v_lapt               VARCHAR2 (20);
    v_tnc                VARCHAR2 (20);
    v_tnc_omschrijving   VARCHAR2 (100);
    v_facilitor          VARCHAR2 (20);
    v_adp                VARCHAR2 (20);
    v_absentiemanager    VARCHAR2 (20);
    v_regas              VARCHAR2 (20);
    v_checks             VARCHAR2 (20);
    v_accountview        VARCHAR2 (20);
    v_elvy               VARCHAR2 (20);
    v_hodnet             VARCHAR2 (20);
    v_proactive          VARCHAR2 (20);
    v_opmerking          VARCHAR2 (1000);
    v_volgnr             NUMBER (10);
    v_lettercode         VARCHAR2 (30);

    CURSOR c
    IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;
BEGIN
    -- Vorige inlees eerst verwijderen
    ---- Voor hmod_koffersysteem geldt dat je inlezen op dezelfde dag mag/kunt overschrijven. Voorgaande versiedatums blijven staan.
    DELETE FROM hmod_imp_koffersysteem
          WHERE versiedatum = TO_CHAR(TRUNC (SYSDATE),'DD-MM-YYYY');
    COMMIT;

    header_is_valid := 0;
    v_ongeldig := 0;
    v_count_error := 0;
    header_is_valid := 0;
    v_count_tot := 0;
    v_count_import := 0;

    FOR rec IN c
    LOOP
        BEGIN
            v_newline := rec.fac_imp_file_line;
            v_errormsg := 'Fout opvragen te importeren rij';
            v_aanduiding := '';

            -- Lees alle veldwaarden: afdeling;functie;code;token;mob;hit;lap_en_sim;lapt;tnc;tnc omschrijving;facilitor;adp;absentiemanager;regas;checks;accountview;elvy;hodnet;proactive;opmerking
            v_errormsg := 'Fout opvragen te importeren kolom/rij 1';
            v_errormsg := 'Fout opvragen te importeren kolom/rij 2';
            fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_functie);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_code);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_lettercode);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_token);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_mob);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_hit);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_lap_en_sim);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_lapt);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_tnc);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_tnc_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_facilitor);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_adp);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_absentiemanager);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_regas);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_checks);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_accountview);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_elvy);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_hodnet);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_proactive);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_opmerking);

            v_aanduiding :=
                v_versiedatum || '|' || v_afdeling || '-' || v_functie || '|' || v_code;
            v_count_tot := v_count_tot + 1;

            -- Skip until the header is found
            IF header_is_valid = 0
            THEN
                IF v_afdeling = 'afdeling'
                   AND v_functie = 'functie'
                   AND v_code = 'code'
                   AND v_lettercode = 'lettercode'
                   AND v_token = 'token'
                   AND v_mob = 'mob'
                   AND v_hit = 'hit'
                   AND v_lap_en_sim = 'lap_en_sim'
                   AND v_lapt = 'lapt'
                   AND v_tnc = 'tnc'
                   AND v_tnc_omschrijving = 'tnc omschrijving'
                   AND v_facilitor = 'facilitor'
                   AND v_adp = 'adp'
                   AND v_absentiemanager = 'absentiemanager'
                   AND v_regas = 'regas'
                   AND v_checks = 'checks'
                   AND v_accountview = 'accountview'
                   AND v_elvy = 'elvy'
                   AND v_hodnet = 'hodnet'
                   AND v_proactive = 'proactive'
                   AND v_opmerking = 'opmerking'
                THEN
                    header_is_valid := 1;
                END IF;
            ELSE -- Header OK. Vanaf hier in de LOOP eventueel variabele vullen.
                
                BEGIN
                    v_errormsg := 'Versiedatum wordt sysdatum ';

                    SELECT TO_CHAR (TRUNC (SYSDATE), 'DD-MM-YYYY')
                      INTO v_versiedatum
                      FROM DUAL;
                      
                    -- volgnr vullen - dit numerieke veld gebruiken we voor kenmerkdomein-key.. 
                    ---- dit zou ik ook kunnen vullen buiten de LOOP, toch?
                    SELECT COALESCE (MAX (volgnr), 0) 
                    INTO v_volgnr
                    FROM hmod_imp_koffersysteem;
                    v_volgnr := v_volgnr + 1 ; 
                      
                END;

                INSERT INTO hmod_imp_koffersysteem (versiedatum,
                                                    afdeling,
                                                    functie,
                                                    code,
                                                    lettercode,
                                                    token,
                                                    mob,
                                                    hit,
                                                    lap_en_sim,
                                                    lapt,
                                                    tnc,
                                                    tnc_omschrijving,
                                                    facilitor,
                                                    adp,
                                                    absentiemanager,
                                                    regas,
                                                    checks,
                                                    accountview,
                                                    elvy,
                                                    hodnet,
                                                    proactive,
                                                    volgnr,
                                                    opmerking)
                     VALUES (v_versiedatum,
                             v_afdeling,
                             v_functie,
                             v_code,
                             v_lettercode,
                             v_token,
                             v_mob,
                             v_hit,
                             v_lap_en_sim,
                             v_lapt,
                             v_tnc,
                             v_tnc_omschrijving,
                             v_facilitor,
                             v_adp,
                             v_absentiemanager,
                             v_regas,
                             v_checks,
                             v_accountview,
                             v_elvy,
                             v_hodnet,
                             v_proactive,
                             v_volgnr,
                             v_opmerking);
            END IF;
        END;
    END LOOP;

    IF header_is_valid = 0
    THEN
        fac.imp_writelog (p_import_key,
                          'E',
                          'Ongeldig importbestand',
                          'Geen header of header niet volgens specificatie!');
    ELSE
        -- Afsluiting: Rollback/Delete tabel als er fouten in csv zitten. Initieel voor import koffersysteem nog zonder foutcheck opgezet, dus ook geen v_ongeldig aan het vullen...
        IF v_ongeldig > 0
        THEN
            ROLLBACK;
            -- Met rollback haalt hij ook al mijn errors en waarschuwingen weg!?? Daarom een DELETE
            -- delete from hmod_imp_contractscope where <alleen de ingelzen versiedatum ;
            COMMIT;
            fac.imp_writelog (
                p_import_key,
                'E',
                'Niet ingelezen. Staan aantal ongeldige regels in csv-bestand. Zie bovenstaande ERRORS. Pas deze eerst aan!',
                '');
        ELSE
            COMMIT;
            fac.imp_writelog (
                p_import_key,
                'S',
                'Aantal ingelezen regels: ' || TO_CHAR (v_count_import),
                '');
        END IF;
    END IF;
EXCEPTION
    WHEN OTHERS
    THEN
        ROLLBACK;
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
            'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
        fac.imp_writelog (p_import_key,
                          'E',
                          v_errormsg || ' - Check !!!! : ' || v_aanduiding,
                          '');
END hmod_import_koffer;
/

CREATE OR REPLACE PROCEDURE hmod_update_koffer (p_import_key IN NUMBER)
AS
    v_errormsg       VARCHAR (200);
    v_errorhint      VARCHAR (200);
    oracle_err_mes   VARCHAR2 (150);
    currentversion   fac_module.fac_module_version%TYPE;
    v_aanduiding     VARCHAR (100);
    v_count          NUMBER;
BEGIN
    --   hmod_update_koffer (p_import_key);
    NULL;
END hmod_update_koffer;
/

-- Voor UDR-rapportage.
-- Later stadium nog aanvullen met personen-koppeling zodat men goed overzicht heeft van wat er per persoon is uitgereikt. Bij herziening van de koffer oook direct in beeld heeft waar eventuele vervolgacties gedaan moeten worden. 
CREATE OR REPLACE VIEW hmod_v_koffersysteem
(
    OMSCHRIJVING_TOTAAL,
    VERSIEDATUM,
    OMSCHRIJVING,
    AFDELING,
    FUNCTIE,
    CODE,
    LETTERCODE,
    TOKEN,
    MOB,
    HIT,
    LAP_EN_SIM,
    LAPT,
    TNC,
    TNC_OMSCHRIJVING,
    FACILITOR,
    ADP,
    ABSENTIEMANAGER,
    REGAS,
    CHECKS,
    ACCOUNTVIEW,
    ELVY,
    HODNET,
    PROACTIVE,
    VOLGNR,
    OPMERKING    
)
AS
    SELECT afdeling || ' - ' || functie || ' (' || code || ')' AS omschrijving_totaal,
           versiedatum,
           afdeling || ' - ' || functie AS omschrijving,
           afdeling,
           functie,
           code,
           lettercode,
           token,
           mob,
           hit,
           lap_en_sim,
           lapt,
           tnc,
           tnc_omschrijving,
           facilitor,
           adp,
           absentiemanager,
           regas,
           checks,
           accountview,
           elvy,
           hodnet,
           proactive,
           volgnr,
           opmerking
      FROM hmod_imp_koffersysteem;

-- Voor keuzelijstjes (kenmerk domein)
CREATE OR REPLACE VIEW hmod_v_koffersysteem_huidig
(
    VOLGNR,
    OMSCHRIJVING,
    VERSIEDATUM,
    FORMATIEPLAATS,
    ORGANISATIE_CODE,
    ORGANISATIE_TOT,
    FUNCTIE_CODE,
    FUNCTIE_0,  -- uit koffersysteem ADP
    FUNCTIE_1,  -- uit prs_srtfunctie
    FUNCTIE_TOT
)
AS
    SELECT 
       k.volgnr,
       k.omschrijving_totaal,
       k.versiedatum,
       k.code,
       SUBSTR (k.code, 1, INSTR (k.code, '-')-1)
         organisatie_code,
       SUBSTR (k.code, 1, INSTR (k.code, '-')-1) || ' - ' || k.afdeling
         organisatie_tot,
       SUBSTR(k.code,(instr(k.code,'-')+1),LENGTH(k.code))
         functie_code,
       k.functie
         functie_0,  
       f.functie
         functie_1,
       SUBSTR(k.code,(instr(k.code,CHR(45))+1),LENGTH(k.code)) || ' -  ' || k.functie 
         functie_tot
      FROM hmod_v_koffersysteem k,
           (SELECT v.functie_code, v.formatieplaats, MAX (v.functie) functie
                     FROM (SELECT k.prs_kenmerklink_waarde
                             formatieplaats,
                           SUBSTR (k.prs_kenmerklink_waarde, (INSTR (k.prs_kenmerklink_waarde, CHR(45)) + 1), LENGTH (k.prs_kenmerklink_waarde))
                             functie_code,
                           sp.prs_srtperslid_omschrijving
                             functie
                      FROM prs_perslid p, prs_srtperslid sp, prs_kenmerklink k
                     WHERE     p.prs_srtperslid_key = sp.prs_srtperslid_key
                           AND p.prs_perslid_key = k.prs_link_key(+)
                           AND k.prs_kenmerk_key = 1025) v
                GROUP BY v.functie_code, v.formatieplaats ) f
      WHERE TO_DATE (versiedatum, 'DD-MM-YYYY') = (SELECT MAX (TO_DATE (versiedatum, 'DD-MM-YYYY')) FROM hmod_v_koffersysteem)
            AND k.code = f.formatieplaats (+)
      ORDER BY omschrijving, versiedatum DESC ;

-- KEUZELIJST VOOR KP's
CREATE OR REPLACE VIEW hmod_v_kostenplaatsen
(
    KEY,
    KP_NR,
    OMSCHRIJVING,
    OMSCHRIJVING_TOT,
    KP_EINDDATUM,
    KP_GROEP
)
AS
    SELECT 
       kp.prs_kostenplaats_key,
       kp.prs_kostenplaats_nr,
       kp.prs_kostenplaats_omschrijving,
       kp.prs_kostenplaats_omschrijving || ' (' || kp.prs_kostenplaats_nr ||')' omschrijving_tot,
       prs_kostenplaats_eind,
       kpg.prs_kostenplaatsgrp_oms
    FROM
    prs_kostenplaats    kp,
    prs_kostenplaatsgrp kpg
    WHERE
    kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
    AND kpg.prs_kostenplaatsgrp_key = 2
    AND kp.prs_kostenplaats_verwijder IS NULL 
    AND TRUNC(SYSDATE) < COALESCE(TRUNC(prs_kostenplaats_eind),TO_DATE('31-12-2099','DD-MM-YYYY'))
    ;

-- KEUZELIJST VOOR PERSONEN
CREATE OR REPLACE VIEW hmod_v_personenlijst
(
    KEY,
    NAAM,
    PERSONEELSNUMMER,
    NAAM_TOT,
    TEAMLEIDER_LOC,
    MANAGER_ALGEMEEN,
    REGIOMANAGER,
    BEDRIJF,
    DATUM_UITDIENST
)
AS
    SELECT 
       p.prs_perslid_key,
       p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam
         naam,
       p.prs_perslid_nr,
       p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ')' ||
         DECODE(v.teamleider_loc, 'ja', ' - teamleider loc',
                                  DECODE(v.regiomanager, 'ja', ' - regiomanager',
                                           DECODE(v.manager_algemeen, 'ja', '- manager algemeen',
                                           NULL))) naam_tot,
       v.teamleider_loc,
       v.manager_algemeen,
       v.regiomanager,
       b.prs_bedrijf_naam,
       v.datum_uitdienst
    FROM
    prs_perslid    p,
    prs_v_afdeling a,
    prs_bedrijf    b,
    (
     SELECT prs_perslid_key,
            (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END teamleider_mt 
               from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1280) -- tl
              teamleider_loc,
            (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END hr_functionaris 
               from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1320) -- manager algemeen
              manager_algemeen,
            (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END regiomanager 
               from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1740) -- regiomanager
              regiomanager,
            (select TO_DATE(max(k.prs_kenmerklink_waarde),'DD-MM-YYYY') 
               from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1100) -- datum_uitdienst
              datum_uitdienst
       FROM prs_perslid p) v 
    WHERE
    p.prs_afdeling_key = a.prs_afdeling_key
    AND a.prs_bedrijf_key = b.prs_bedrijf_key
    AND p.prs_perslid_key = v.prs_perslid_key
    AND p.prs_perslid_verwijder IS NULL
    AND p.prs_perslid_nr IS NOT NULL  
    AND b.prs_bedrijf_key IN (41, 8101) -- HMOD en HMOD-interne-emailadressen
    AND TRUNC(SYSDATE) < COALESCE(TRUNC(v.datum_uitdienst),TO_DATE('31-12-2099','DD-MM-YYYY'))
    ;

CREATE OR REPLACE VIEW hmod_v_personenlijst_tl
AS
    SELECT *
    FROM hmod_v_personenlijst
    WHERE 
    teamleider_loc = 'ja'
    ;

CREATE OR REPLACE VIEW hmod_v_personenlijst_man
AS
    SELECT *
    FROM hmod_v_personenlijst
    WHERE 
    manager_algemeen = 'ja'
    ;

CREATE OR REPLACE VIEW hmod_v_personenlijst_rm -- Regiomanager
AS
    SELECT *
    FROM hmod_v_personenlijst
    WHERE 
    regiomanager = 'ja'
    ;

-- HR is geen officiele Facilitor-rol meer en view kan tzt weg/gedropt worden
CREATE OR REPLACE VIEW hmod_v_personenlijst_hr
AS
    SELECT *
    FROM hmod_v_personenlijst ;    


CREATE OR REPLACE VIEW hmod_v_koffersysteem_actueel
AS
    SELECT *
      FROM hmod_v_koffersysteem
      WHERE TO_DATE (versiedatum, 'DD-MM-YYYY') = (SELECT MAX (TO_DATE (versiedatum, 'DD-MM-YYYY')) FROM hmod_v_koffersysteem)
      ;

     
CREATE OR REPLACE VIEW hmod_v_meldingen_mutatieprs
(
    MLD_MELDING_KEY,
    OMSCHRIJVING
)
AS
    SELECT 
       mld_melding_key,
       'SA' || to_char(mld_melding_key) || ' - ' || mld_melding_onderwerp
      FROM mld_melding m
      WHERE mld_stdmelding_key in (922, 923, 924) and mld_melding_status in (2,3,4)
      ORDER BY mld_melding_datum DESC
     ;     

-- Basisview en rapportview voor de telefoon-objecten mobiel en vast per persoon
CREATE OR REPLACE VIEW HMOD_V_TELEFOONNR_KLANTOBJECT
(
    PRS_PERSLID_KEY,
    PRS_NAAM,
    SOORT,
    SOORT_KEY,
    NUMMER_OBJECT,
    INS_DEEL_KEY,                                                     -- KEY 1
    INS_DEEL_AANMAAK,
    INS_DEEL_KEY2,                              -- KEY2 voor MOBIEL-SIM-OBJECT
    VASTNR_HUIDIG,
    MOBIELNR_HUIDIG
)
AS
    SELECT p.prs_perslid_key,
           prs_perslid_naam || ' (' || prs_perslid_voornaam || ')'
               AS naam_werknemer,
           sd.ins_srtdeel_omschrijving,
           sd.ins_srtdeel_key,
           d.ins_deel_upper,
           d.ins_deel_key
               key1,
           d.ins_deel_aanmaak,
           NULL
               key2,
           p.prs_perslid_telefoonnr,
           p.prs_perslid_mobiel
      FROM prs_perslid             p,
           ins_deel                d,
           ins_srtdeel             sd,
           prs_v_aanwezigafdeling  v
     WHERE     p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_srtdeel_key = 70               -- Telefooncentralenummers
           AND d.ins_alg_ruimte_type = 'P'
           AND d.ins_deel_verwijder IS NULL
           AND d.ins_deel_actief = 1
           AND (   d.ins_deel_vervaldatum IS NULL
                OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))
           AND d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND p.prs_perslid_verwijder IS NULL
           AND p.prs_afdeling_key = v.prs_afdeling_key
           AND v.prs_bedrijf_key = 41 -- Personen binnen bedrijf Humanitas onder Dak
           AND p.prs_perslid_key NOT IN (721) -- M.u.v. perslid voor met nr '999001' (bestemd voor objecten nog uit te lenen...)
    UNION ALL
    SELECT p.prs_perslid_key,
           prs_perslid_naam || ' (' || prs_perslid_voornaam || ')'
               AS Naam_werknemer,
           sd.ins_srtdeel_omschrijving,
           sd.ins_srtdeel_key,
           dd.ins_deel_upper,
           d.ins_deel_key
               Key1,
           d.ins_deel_aanmaak,
           dd.ins_deel_key
               Key2,
           p.prs_perslid_telefoonnr,
           p.prs_perslid_mobiel
      FROM prs_perslid             p,
           ins_deel                d,
           ins_srtdeel             sd,
           prs_v_aanwezigafdeling  v,
           ins_kenmerkdeel         kd,
           ins_deel                dd
     WHERE     p.prs_perslid_key = d.ins_alg_ruimte_key
           AND d.ins_srtdeel_key = 69                        -- Mobieltelefoon
           AND d.ins_alg_ruimte_type = 'P'
           AND d.ins_deel_verwijder IS NULL
           AND d.ins_deel_actief = 1
           AND (   d.ins_deel_vervaldatum IS NULL
                OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))
           AND d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND p.prs_perslid_verwijder IS NULL
           AND p.prs_afdeling_key = v.prs_afdeling_key
           AND v.prs_bedrijf_key = 41   -- afdeling binnen bedrijf Humanitas..
           AND p.prs_perslid_key NOT IN (721) -- perslid voor met nr '999001' voor objecten nog uit te lenen...
           AND d.ins_deel_key = kd.ins_deel_key
           AND kd.ins_kenmerk_key = 152
           AND kd.ins_kenmerkdeel_verwijder IS NULL
           AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) =
               dd.ins_deel_key
           AND dd.ins_srtdeel_key = 341             --  SIM-kaarten en nummers
           AND dd.ins_deel_verwijder IS NULL
           AND dd.ins_deel_actief = 1
           AND (   dd.ins_deel_vervaldatum IS NULL
                OR TRUNC (dd.ins_deel_vervaldatum) > TRUNC (SYSDATE)) ;


CREATE OR REPLACE PROCEDURE hmod_prs_telefoonnummers (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
   CURSOR c_vast
   IS
   SELECT PRS_PERSLID_KEY, PRS_NAAM, SOORT, SOORT_KEY, NUMMER_OBJECT, INS_DEEL_KEY, INS_DEEL_AANMAAK, INS_DEEL_KEY2, VASTNR_HUIDIG, MOBIELNR_HUIDIG   
   FROM HMOD_V_TELEFOONNR_KLANTOBJECT
   WHERE SOORT_KEY = 70 AND (VASTNR_HUIDIG<>NUMMER_OBJECT OR VASTNR_HUIDIG is null)  ;
   
   CURSOR c_mob
   IS
   SELECT PRS_PERSLID_KEY, PRS_NAAM, SOORT, SOORT_KEY, NUMMER_OBJECT, INS_DEEL_KEY, INS_DEEL_AANMAAK, INS_DEEL_KEY2, VASTNR_HUIDIG, MOBIELNR_HUIDIG   
   FROM HMOD_V_TELEFOONNR_KLANTOBJECT
   WHERE SOORT_KEY = 69 AND (MOBIELNR_HUIDIG<>NUMMER_OBJECT OR MOBIELNR_HUIDIG is null)  ;

   CURSOR c_delvast
   IS 
   SELECT p.prs_perslid_key, p.prs_perslid_telefoonnr
    FROM prs_perslid p
    WHERE 
    p.prs_perslid_key not in (select v.prs_perslid_key from HMOD_V_TELEFOONNR_KLANTOBJECT v where v.soort_key = 70)
    and p.prs_afdeling_key in (select v.prs_afdeling_key  from prs_v_aanwezigafdeling v where v.prs_bedrijf_key = 41 and v.prs_afdeling_verwijder is null) -- Onderdeel bedrijf Humanitas...
    and p.prs_perslid_telefoonnr is not null ;  

   CURSOR c_delmob
   IS   
    SELECT p.prs_perslid_key, p.prs_perslid_mobiel
    FROM prs_perslid p
    WHERE 
    p.prs_perslid_key not in (select v.prs_perslid_key from HMOD_V_TELEFOONNR_KLANTOBJECT v where v.soort_key = 69)
    and p.prs_afdeling_key in (select v.prs_afdeling_key  from prs_v_aanwezigafdeling v where v.prs_bedrijf_key = 41 and v.prs_afdeling_verwijder is null) -- Onderdeel bedrijf Humanitas...
    and p.prs_perslid_mobiel is not null ;  

    v_telefoon_vast    VARCHAR2(15);
    v_telefoon_mobiel  VARCHAR2(15);
    
    v_errormsg       VARCHAR (200);
    v_errorhint      VARCHAR (200);
    oracle_err_mes   VARCHAR2 (150);
    currentversion   fac_module.fac_module_version%TYPE;
    v_aanduiding     VARCHAR (100);
    v_count          NUMBER;

BEGIN
    v_count:=0;
    
    FOR rec IN c_vast
    LOOP

        v_aanduiding :=
               'Vast nummer gewijzigd, ' || CHR(10)
             || 'van ' || COALESCE(rec.vastnr_huidig,'<leeg>') || ' naar ' || rec.nummer_object ;
        v_errorhint := 'telefoonnr vast aanpassen';

    UPDATE prs_perslid p
    SET prs_perslid_telefoonnr = rec.nummer_object
    WHERE p.prs_perslid_key = rec.prs_perslid_key ;

        fac.trackaction (
            'PRSUPD',
            rec.prs_perslid_key,
            3,
            SYSDATE,
               v_aanduiding);

    END LOOP;

    FOR rec IN c_mob
    LOOP
        v_aanduiding :=
               'Mobielnummer gewijzigd, ' || CHR(10)
            || 'van ' || COALESCE(rec.mobielnr_huidig,'<leeg>') || ' naar ' || rec.nummer_object ;
        v_errorhint := 'telefoonnr mobiel aanpassen';

    UPDATE prs_perslid p
    SET prs_perslid_mobiel = rec.nummer_object
    WHERE p.prs_perslid_key = rec.prs_perslid_key ;

        fac.trackaction (
            'PRSUPD',
            rec.prs_perslid_key,
            3,
            SYSDATE,
               v_aanduiding);
    
    END LOOP;

    FOR rec IN c_delvast
    LOOP
        v_aanduiding :=
               'Vast nummer verwijderd ' || CHR(10)
            || 'Was ' || rec.prs_perslid_telefoonnr ;
        v_errorhint := 'vast nummer verwijderen';

    UPDATE prs_perslid p
    SET p.prs_perslid_telefoonnr = ''
    WHERE p.prs_perslid_key = rec.prs_perslid_key ;

        fac.trackaction (
            'PRSUPD',
            rec.prs_perslid_key,
            3,
            SYSDATE,
               v_aanduiding);
    
    END LOOP;

    FOR rec IN c_delmob
    LOOP
        v_aanduiding :=
               'Mobielnummer verwijderd ' || CHR(10)
            || 'Was ' || rec.prs_perslid_mobiel ;
        v_errorhint := 'mobielnummer verwijderen';

    UPDATE prs_perslid p
    SET p.prs_perslid_mobiel = ''
    WHERE p.prs_perslid_key = rec.prs_perslid_key ;

        fac.trackaction (
            'PRSUPD',
            rec.prs_perslid_key,
            3,
            SYSDATE,
               v_aanduiding);
    
    END LOOP;

END;
/

-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE hmod_select_daily_task (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
   -- job om de telefoonnummers in persoonkaart te synchroniseren met de eigendommen (gekoppelde telefoonobjecten vast en mobiel)
   hmod_prs_telefoonnummers (p_applname, p_applrun);
END;
/

-- Rapport van de import-personen ADP. 
---- Zowel te gebruiken bij LEZEN als bij VERWERKEN
---- Deze view wordt tevens gebruikt als cursor voor de import-proceduren
CREATE OR REPLACE VIEW hmod_v_prsimport
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_NR,
    PRS_PERSLID_NAAM,
    PRS_PERSLID_VOORNAAM,
    PRS_PERSLID_OSLOGIN,
    PRS_DATUM_UITDIENST,
    PRS_STATUS,
    FORMATIEPLAATS_HUIDIG,
    FORMATIEPLAATS_CSV,
    LETTERCODE,
    TOKEN,
    MOB,
    HIT,
    LAP_EN_SIM,
    LAPT,
    TNC,
    TNC_OMSCHRIJVING,
    FACILITOR,
    ADP,
    ABSENTIEMANAGER,
    REGAS,
    CHECKS,
    ACCOUNTVIEW,
    ELVY,
    HODNET,
    PROACTIVE,
    OPMERKING_KOFFERSYSTEEM,
    DATUM_GELEZEN,
    DATUM_VERWERKT    
)
AS -- Bestaande personen die ook weer in deze PRS-import zitten
  SELECT basis.prs_perslid_key,
         basis.prs_perslid_nr,
         basis.prs_perslid_naam,
         i.prs_perslid_voornaam,
         basis.prs_perslid_oslogin,
         basis.DatumUitDienst,
         CASE
            WHEN d.datum_verwerkt is not null THEN i.prs_perslid_partner_naam -- Deze vul ik tijdens de import met de prs_status
            WHEN d.datum_verwerkt is null and k.code is null THEN 'Basis - Fout'
            ELSE basis.koffersysteem_status
            END as prs_status,
         COALESCE(basis.formatieplaats_huidig,'nvt'),   
         COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,               
         k.lettercode,
         k.token,
         k.mob,
         k.hit,
         k.lap_en_sim,
         k.lapt,
         k.tnc,
         k.tnc_omschrijving,
         k.facilitor,
         k.adp,
         k.absentiemanager,
         k.regas,
         k.checks,
         k.accountview,
         k.elvy,
         k.hodnet,
         k.proactive,
         k.opmerking,
         d.datum_gelezen,
         d.datum_verwerkt         
    FROM (SELECT p.prs_perslid_key,
                 p.prs_perslid_nr,
                 p.prs_perslid_naam,
                 p.prs_perslid_oslogin,
                 a.prs_bedrijf_key,
                 b.prs_bedrijf_naam,
                 (SELECT prs_kenmerklink_waarde
                    FROM prs_kenmerklink
                   WHERE     prs_link_key = p.prs_perslid_key
                         AND prs_kenmerk_key = 1025
                         AND prs_kenmerklink_niveau = 'P'
                         AND prs_kenmerklink_verwijder IS NULL)
                     AS formatieplaats_huidig,
                 (SELECT prs_kenmerklink_waarde
                    FROM prs_kenmerklink
                   WHERE     prs_link_key = p.prs_perslid_key
                         AND prs_kenmerk_key = 1100
                         AND prs_kenmerklink_niveau = 'P'
                         AND prs_kenmerklink_verwijder IS NULL)
                     AS DatumUitDienst,
                 (SELECT kd.fac_usrdata_omschr
                    FROM prs_kenmerklink k, fac_usrdata kd
                   WHERE k.prs_link_key = p.prs_perslid_key    
                         AND k.prs_kenmerk_key = 1081    -- Kenmerkveld Status
                         AND k.prs_kenmerklink_niveau = 'P'
                         AND k.prs_kenmerklink_verwijder IS NULL
                         AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
                         AND kd.fac_usrtab_key = 82) as Koffersysteem_status                    
            FROM prs_perslid   p,
                 prs_v_afdeling a,
                 prs_bedrijf   b
           WHERE p.prs_afdeling_key = a.prs_afdeling_key
                 AND a.prs_bedrijf_key = b.prs_bedrijf_key
                 AND p.prs_perslid_verwijder IS NULL) basis,
         fac_imp_perslid       i,
         hmod_v_koffersysteem_actueel k,
        (SELECT i.fac_import_key,
                MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
                MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
           FROM fac_import f, fac_imp_perslid i
          WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
                GROUP BY i.fac_import_key,
                f.fac_import_datum_gelezen,
                f.fac_import_datum_verwerkt) d
   WHERE     basis.prs_perslid_nr = i.prs_perslid_nr
         AND i.prs_kenmerk3 = k.code (+)
         AND basis.prs_bedrijf_key = 41 -- Alleen voor Humanitas onder Dak mensen
UNION ALL -- NIEUWE PERSONEN die nog niet in BEDRIJF HUMANITAS zitten en die dus bij import toegevoegd gaan worden en met juiste koffersysteem gevuld moet worden...
          ---- Nieuwe personen zitten bij INLEZEN aan deze kant (omdat ze nog geen prs_perslid_key hebben). Bij verwerken hebben ze dit wel en dan zitten de NIEUWE personen in bovenstaande union..
SELECT -1                           AS prs_perslid_key,
       i.prs_perslid_nr,
       i.prs_perslid_naam,
       i.prs_perslid_voornaam,
       NULL as prs_perslid_oslogin, -- Nieuwe mensen krijgen handmatig via voorkant een login
       '' as DatumUitDienst,
       CASE
            WHEN k.code is null THEN 'Nieuw - Fout'
            ELSE 'Nieuw'
            END as prs_status,
       'nvt'                        AS formatieplaats_huidig,               
       COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,
       k.lettercode,
       k.token,
       k.mob,
       k.hit,
       k.lap_en_sim,
       k.lapt,
       k.tnc,
       k.tnc_omschrijving,
       k.facilitor,
       k.adp,
       k.absentiemanager,
       k.regas,
       k.checks,
       k.accountview,
       k.elvy,
       k.hodnet,
       k.proactive,
       k.opmerking,
       d.datum_gelezen,
       d.datum_verwerkt      
  FROM fac_imp_perslid i, hmod_v_koffersysteem_actueel k,
        (SELECT i.fac_import_key,
                MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
                MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
           FROM fac_import f, fac_imp_perslid i
          WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
                GROUP BY i.fac_import_key,
                f.fac_import_datum_gelezen,
                f.fac_import_datum_verwerkt) d
 WHERE     i.prs_kenmerk3 = k.code(+)
       AND i.fac_import_key = d.fac_import_key 
       AND UPPER(i.prs_perslid_nr) NOT IN
               (SELECT UPPER(p.prs_perslid_nr)
                  FROM prs_perslid     p,
                       prs_bedrijf     b,
                       prs_v_afdeling  a
                   WHERE p.prs_afdeling_key = a.prs_afdeling_key
                         AND a.prs_bedrijf_key = b.prs_bedrijf_key
                         AND p.prs_perslid_nr IS NOT NULL
                         AND p.prs_perslid_verwijder IS NULL
                         AND b.prs_bedrijf_key = 41 -- Humanitas onder Dak
                         )
UNION ALL -- Alle HUMANITAS medewerkers die wel in Facilitor staan, maar niet in CSV-import zitten - Indien nodig handmatig te verwijderen
SELECT basis.prs_perslid_key,
       basis.prs_perslid_nr,
       basis.prs_perslid_naam,
       basis.prs_perslid_voornaam,
       basis.prs_perslid_oslogin,
       basis.DatumUitDienst,
       'Verwijderen' AS prs_status,
       basis.formatieplaats_huidig,
       'nvt'                                  AS formatieplaats_CSV,
       k.lettercode,
       k.token,
       k.mob,
       k.hit,
       k.lap_en_sim,
       k.lapt,
       k.tnc,
       k.tnc_omschrijving,
       k.facilitor,
       k.adp,
       k.absentiemanager,
       k.regas,
       k.checks,
       k.accountview,
       k.elvy,
       k.hodnet,
       k.proactive,
       k.opmerking,
       d.datum_gelezen,
       d.datum_verwerkt
    FROM (SELECT p.prs_perslid_key,
                 COALESCE(p.prs_perslid_nr,'999') as prs_perslid_nr,
                 p.prs_perslid_naam,
                 p.prs_perslid_voornaam,
                 p.prs_perslid_oslogin,
                 a.prs_bedrijf_key,
                 b.prs_bedrijf_naam,
                 (SELECT prs_kenmerklink_waarde
                    FROM prs_kenmerklink
                   WHERE     prs_link_key = p.prs_perslid_key
                         AND prs_kenmerk_key = 1025
                         AND prs_kenmerklink_niveau = 'P'
                         AND prs_kenmerklink_verwijder IS NULL)
                     AS formatieplaats_huidig,
                 (SELECT prs_kenmerklink_waarde
                    FROM prs_kenmerklink
                   WHERE     prs_link_key = p.prs_perslid_key
                         AND prs_kenmerk_key = 1100
                         AND prs_kenmerklink_niveau = 'P'
                         AND prs_kenmerklink_verwijder IS NULL)
                     AS DatumUitDienst,
                 (SELECT kd.fac_usrdata_omschr
                    FROM prs_kenmerklink k, fac_usrdata kd
                   WHERE k.prs_link_key = p.prs_perslid_key    
                         AND k.prs_kenmerk_key = 1081    -- Kenmerkveld Status
                         AND k.prs_kenmerklink_niveau = 'P'
                         AND k.prs_kenmerklink_verwijder IS NULL
                         AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
                         AND kd.fac_usrtab_key = 82) as Koffersysteem_status                    
            FROM prs_perslid   p,
                 prs_v_afdeling a,
                 prs_bedrijf   b
           WHERE p.prs_afdeling_key = a.prs_afdeling_key
                 AND a.prs_bedrijf_key = b.prs_bedrijf_key
                 AND b.prs_bedrijf_key = 41
                 AND p.prs_perslid_verwijder IS NULL) basis,
       hmod_v_koffersysteem_actueel  k,
       (  SELECT i.fac_import_key,
                 MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
                 MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
            FROM fac_import f, fac_imp_perslid i
           WHERE     f.fac_import_key = i.fac_import_key
                 AND f.fac_import_app_key = 41
        GROUP BY i.fac_import_key,
                 f.fac_import_datum_gelezen,
                 f.fac_import_datum_verwerkt) d
 WHERE     basis.formatieplaats_huidig = k.code(+)
       AND basis.Koffersysteem_status != 'Nvt'
       AND basis.prs_perslid_nr NOT IN (SELECT i.prs_perslid_nr
                                          FROM fac_imp_perslid i) ;
                                          
CREATE OR REPLACE PROCEDURE hmod_import_perslid (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   v_errorhint      VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding      VARCHAR2 (1000);
   v_count    NUMBER;
   v_count_leeg  NUMBER;
   v_count_fout  NUMBER;
   v_count_nieuw NUMBER;
   v_count_verwijder NUMBER;
   v_count_codeverschilt NUMBER;
   
   CURSOR c  -- Alle medewerkers HUMANITAS die in aangeleverde ADP-personen-bestand zitten
   IS   
   SELECT prs_perslid_key,
         prs_perslid_nr,
         prs_perslid_voornaam,
         prs_perslid_oslogin,
         prs_status,
         formatieplaats_huidig,
         formatieplaats_csv,
         lettercode,         
         token,
         mob,
         hit,
         lap_en_sim,
         lapt,
         tnc,
         tnc_omschrijving,
         facilitor,
         adp,
         absentiemanager,
         regas,
         checks,
         accountview,
         elvy,
         hodnet,
         proactive
    FROM 
    hmod_v_prsimport WHERE instr(prs_status,'Verwijderen') = 0 and prs_status is not null ;

BEGIN
   v_errorhint := 'Generieke import';

   -- Standaard Import. De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;1;2;0;3;0;0;0;0;0;0;0;5;0;7;6;0;0;4;0;0;8;9;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0',
      'Afdelingscode;Volbrief;Roepnaam;Geslacht;Zakelijk e-mailadres;Omschrijving verkort;Werknemernummer;Geboortenaam;Aanhef brief;Formatie code%');

-- DEF2: Afdelingscode;Volbrief;Roepnaam;Geslacht;Zakelijk e-mailadres;Omschrijving verkort;Werknemernummer;Geboortenaam;Aanhef brief;Formatie code'
-----       1          2           3        4            5                    6                   7                8        9           10              

   COMMIT;

   FOR rec IN c
   LOOP
      BEGIN
         -- Koffersysteem-kenmerken vullen
         IF rec.prs_status = 'Basis' or rec.prs_status = 'Nieuw' -- Dan alle koffersysteemvelden naar personenkaart wegschrijven...
         THEN
         
         UPDATE fac_imp_perslid p
         SET prs_kenmerk6 = rec.token,  -- Token  
             prs_kenmerk7 = rec.mob, -- Mobiel 
             prs_kenmerk8 = rec.hit,  -- Hit 
             prs_kenmerk9 = rec.lap_en_sim,  -- Lap+Sim 
             prs_kenmerk10 = rec.lapt, -- Lapt
             prs_kenmerk11 = rec.tnc, -- Toegangsniveau
             prs_kenmerk12 = rec.facilitor, -- Facilitor
             prs_kenmerk13 = rec.adp,    -- ADP  
             prs_kenmerk14 = rec.absentiemanager, -- Absentiemanager 
             prs_kenmerk15 = rec.regas,  -- Regas 
             prs_kenmerk16 = rec.checks,   -- Checks
             prs_kenmerk17 = rec.accountview, -- Accountview
             prs_kenmerk18 = rec.elvy,  -- Elvy
             prs_kenmerk19 = rec.hodnet, -- HodNet
             prs_kenmerk20 = rec.proactive  -- Proactive
             WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
       END IF;
     
     -- De prs_status (= status voor deze import) ook wegschrijven in fac_imp_perslid. 
     ---- Om updateprocedure mee te sturen... + om rapport import prs goed mee te vullen..
     ---- Omdat er voor koffersysteem al 20 kenmerken gevuld worden, moet ik hier ander veld voor (mis)bruiken.
         UPDATE fac_imp_perslid p
         SET prs_perslid_partner_naam = rec.prs_status  -- Partner_naam voor misbruiken. Wordt in standaard update niet gebruikt (omdat PRS_PERSLID_NAAMGEBRUIK_CODE op 0 meegaat..) 
         WHERE p.prs_perslid_nr = rec.prs_perslid_nr;           
     
     -- Voorletter vullen vanuit Roepnaam
         UPDATE fac_imp_perslid p
         SET prs_perslid_voorletters = substr(rec.prs_perslid_voornaam,1,1) 
         WHERE p.prs_perslid_nr = rec.prs_perslid_nr and rec.prs_perslid_voornaam is not null;  

     -- Basiskoffer - Lettercode vullen - 
         UPDATE fac_imp_perslid p
         SET prs_kenmerk4 = rec.lettercode   
         WHERE p.prs_perslid_nr = rec.prs_perslid_nr;    
     
     -- Loginnaam vullen vanuit huidige personenkaart
        UPDATE fac_imp_perslid p
        SET prs_perslid_oslogin = rec.prs_perslid_oslogin
        WHERE p.prs_perslid_nr = rec.prs_perslid_nr ;

     -- Alle Humanitas-personen willen we tijdens de import standaard werkplek-koppeling meegeven 
     -- Omdat momenteel standplaats nog niet uit ADP kan komen, wordt dit nu met default gevuld: HOD_ALG
        UPDATE fac_imp_perslid p
        SET alg_locatie_code = 'HOD-ALG',
            alg_gebouw_code = 'G',
            alg_verdieping_volgnr = 0, 
            alg_ruimte_nr = '_'
        WHERE p.prs_perslid_nr = rec.prs_perslid_nr ;


 
       END;
   END LOOP;

   BEGIN
      v_errormsg := 'Checks op importbestand ';
      v_aanduiding := 'Raadpleeg rapport en pas csv-bestand aan en lees opnieuw in';
      v_count := 0;
      v_count_leeg:=0;
      v_count_fout := 0;
      v_count_nieuw := 0;
      v_count_verwijder :=0;
      v_count_codeverschilt  := 0;

   -- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
   SELECT count (*) INTO v_count FROM hmod_v_prsimport;
   SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE (prs_perslid_partner_naam = 'Nieuw' or prs_perslid_partner_naam = 'Nieuw - Fout') ;
   SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
   SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
   SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
   SELECT count (*) INTO v_count_codeverschilt FROM hmod_v_prsimport WHERE prs_status = 'Basis' and formatieplaats_huidig <> formatieplaats_csv  ;   

        IF v_count_leeg > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal personen zonder import-status is: ' || v_count_leeg,
                   'ACTIE: ' || v_aanduiding);
        END IF;
 
        IF v_count_fout > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal personen zonder gekoppelde formatieplaats is: ' || v_count_fout,
                   'ACTIE: ' || v_aanduiding);       
        END IF;

        IF v_count_codeverschilt > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal personen die op BASIS staan, hebben in csv andere formatieplaats dan nu in Facilitor: ' || v_count_codeverschilt,
                   'ACTIE: ' || v_aanduiding);       
        END IF;

        IF v_count_verwijder > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal te verwijderen personen is: '|| v_count_verwijder,
                   'Ter info');       
        END IF;        

        IF v_count_nieuw > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal nieuw in te lezen personen is: '|| v_count_nieuw,
                   'Ter info');       
        END IF;        

       IF v_count > 0 THEN
             fac.imp_writelog (
                p_import_key, 'W', 'Aantal totaal te muteren personen is: '|| v_count,
                   'Ter info');       
        END IF;        
        
    END;

-- Nog wat updates uitvoeren op tussentabel...
UPDATE fac_imp_perslid
   SET prs_perslid_geslacht =
           CASE
               WHEN prs_perslid_titel = 'Man' THEN 1
               WHEN prs_perslid_titel = 'Vrouw' THEN 0
               ELSE NULL
           END,
       prs_kenmerk1 = -- Meisjesnaam leegmaken indien man
           CASE
               WHEN prs_perslid_titel = 'Man' THEN ''
               ELSE prs_kenmerk1
           END
       ;

-- Titel kan nu leeggemaakt worden..
UPDATE fac_imp_perslid
   SET prs_perslid_titel = '' ;

EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') ';
      fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END hmod_import_perslid;
/

-- DE UPDATE
CREATE OR REPLACE PROCEDURE hmod_update_perslid (p_import_key IN NUMBER)
IS

   CURSOR c_flex -- Alle records pakken. O.a. voor updaten van de algemene flex-kenmerkvelden
   IS
        SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam,i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3
          FROM prs_v_aanwezigperslid p, fac_imp_perslid i
         WHERE p.prs_perslid_nr = i.prs_perslid_nr
      ORDER BY 2;

   CURSOR c_flex_koffer -- De flexkenmerken koffersysteem - alleen updaten voor die gevuld zijn
   IS
       SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam, i.prs_kenmerk4, i.prs_kenmerk6,i.prs_kenmerk7,i.prs_kenmerk8,i.prs_kenmerk9,i.prs_kenmerk10,i.prs_kenmerk11,i.prs_kenmerk12,i.prs_kenmerk13,i.prs_kenmerk14,i.prs_kenmerk15,i.prs_kenmerk16,i.prs_kenmerk17,i.prs_kenmerk18,i.prs_kenmerk19,i.prs_kenmerk20
          FROM prs_v_aanwezigperslid p, fac_imp_perslid i
         WHERE p.prs_perslid_nr = i.prs_perslid_nr AND (i.prs_perslid_partner_naam = 'Basis' or i.prs_perslid_partner_naam = 'Nieuw')
      ORDER BY 2;
      
   CURSOR c_del  -- Alle medewerkers van bedrijf HUMANITAS die niet in aangeleverde ADP-personen-bestand zitten
   IS   
   SELECT prs_perslid_key,
         prs_perslid_nr,
         prs_status
    FROM 
    hmod_v_prsimport WHERE prs_status = 'Verwijderen' ;


   v_errorhint      VARCHAR2 (1000) := '';
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (1000);
   v_count       NUMBER;
   v_count_leeg  NUMBER;
   v_count_fout  NUMBER;
   v_count_nieuw NUMBER;
   v_count_verwijder NUMBER;
   v_count_codeverschilt NUMBER;   
   
BEGIN
   -- Generieke update.
   v_errorhint :='Fout in generieke update';
   
   -- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
   v_aanduiding := 'Import afgebroken (conform afspraak) - Zie rapport voor specificaties';
   SELECT count (*) INTO v_count FROM hmod_v_prsimport;
   SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE (prs_perslid_partner_naam = 'Nieuw' or prs_perslid_partner_naam = 'Nieuw - Fout');
   SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
   SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
   SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
   SELECT count (*) INTO v_count_codeverschilt FROM hmod_v_prsimport WHERE prs_status = 'Basis' and formatieplaats_huidig <> formatieplaats_csv  ;   
   
   IF v_count < 20
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein: ' || TO_CHAR (v_count), v_aanduiding);
      RETURN;
   END IF;

   IF v_count_fout > 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Er zitten in import teveel medewerkers met prs_status FOUT: ' || TO_CHAR (v_count_fout), v_aanduiding);
      RETURN;
   END IF;

   IF v_count_nieuw > 20
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Er zijn teveel NIEUWE medewerkers in import, kan niet kloppen: ' || TO_CHAR (v_count_nieuw), v_aanduiding);
      RETURN;
   END IF;

   IF v_count_leeg > 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Er zitten in import medewerkers ZONDER prs_status: ' || TO_CHAR (v_count_leeg), v_aanduiding);
      RETURN;
   END IF;

   IF v_count_codeverschilt > 0
   THEN  
      fac.imp_writelog (p_import_key, 'E', 'Er zijn (teveel) personen die op BASIS staan, maar in csv andere formatieplaats hebben dan nu in Facilitor: ' || TO_CHAR (v_count_codeverschilt), v_aanduiding);       
      RETURN;
   END IF;

   -- Generieke update. NR - key personeelsnr - NULL is geen werkplekken verwijderd
   prs.update_perslid (p_import_key, 'NR', 'NULL');

   -- Update flexvelden algemeen
   FOR rec IN c_flex
   LOOP
      BEGIN
      v_aanduiding   := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_perslid_partner_naam;
      
      v_errorhint:='Fout bijwerken meisjes';
      PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_kenmerk1); -- Meisjesnaam
      v_errorhint:='Fout bijwerken briefaanhef';
      PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk2); -- Brief aanhef
      v_errorhint:='Fout bijwerken formatieplaats';
      PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk3); -- Formatieplaats

    -- Nog paar kenmerkvelden bijwerken
    DELETE FROM prs_kenmerklink
      WHERE     prs_link_key = rec.prs_perslid_key
            AND prs_kenmerk_key = 1082  -- Veld om aan te geven dat persoon verwijderd kan worden. Voor de personen die meekomen in de fac_imp_perslid moet deze leeggemaakt worden...
            AND prs_kenmerklink_niveau = 'P'
            AND prs_kenmerklink_verwijder IS NULL;

    IF rec.prs_perslid_partner_naam = 'Nieuw' or rec.prs_perslid_partner_naam = 'Nieuw - Fout'
    THEN
      v_errorhint:='Nieuwe personen krijgen altijd basiskoffer mee';
      PRS.upsertkenmerk (1081, rec.prs_perslid_key, '143'); -- Koffersysteem (status) = key 143    
      
      -- Toevoegen nieuwe personen aan de autorisatiegroep Werknemer - key 79
      INSERT INTO fac_gebruikersgroep (fac_groep_key, fac_gebruikersgroep_aanmaak, prs_perslid_key)
                 VALUES (79, sysdate, rec.prs_perslid_key);
      
    END IF;
    
      fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;    
 
      END;

    END LOOP;

   -- Update flexvelden Koffersysteem
   FOR rec IN c_flex_koffer
   LOOP
      BEGIN
      v_errorhint:='Fout bijwerken Token';
      PRS.upsertkenmerk (1068, rec.prs_perslid_key, rec.prs_kenmerk6); -- Token, 6 , 1068
      v_errorhint:='Fout bijwerken Mobiel';
      PRS.upsertkenmerk (1067, rec.prs_perslid_key, rec.prs_kenmerk7); -- Mobiel 7 , 1067
      v_errorhint:='Fout bijwerken Hit';
      PRS.upsertkenmerk (1069, rec.prs_perslid_key, rec.prs_kenmerk8); -- Hit 8 , 1069
      v_errorhint:='Fout bijwerken Lap+Sim';
      PRS.upsertkenmerk (1063, rec.prs_perslid_key, rec.prs_kenmerk9); -- Lap+Sim  9 ,  1063
      v_errorhint:='Fout bijwerken Lapt';
      PRS.upsertkenmerk (1065, rec.prs_perslid_key, rec.prs_kenmerk10); -- Lapt  10,  1065
      v_errorhint:='Fout bijwerken Toegangsniveau';
      PRS.upsertkenmerk (1061, rec.prs_perslid_key, rec.prs_kenmerk11); -- Toegangsniveau 11, 1061
      v_errorhint:='Fout bijwerken Facilitor';
      PRS.upsertkenmerk (1072, rec.prs_perslid_key, rec.prs_kenmerk12); -- Facilitor  12 , 1072
      v_errorhint:='Fout bijwerken ADP';
      PRS.upsertkenmerk (1073, rec.prs_perslid_key, rec.prs_kenmerk13);  -- ADP  13 , 1073
      v_errorhint:='Fout bijwerken Absentiemanager';
      PRS.upsertkenmerk (1074, rec.prs_perslid_key, rec.prs_kenmerk14);  -- Absentiemanager 14, 1074
      v_errorhint:='Fout bijwerken Regas';
      PRS.upsertkenmerk (1075, rec.prs_perslid_key, rec.prs_kenmerk15);  -- Regas 15, 1075
      v_errorhint:='Fout bijwerken Checks';
      PRS.upsertkenmerk (1076, rec.prs_perslid_key, rec.prs_kenmerk16);  -- Checks 15,  1076
      v_errorhint:='Fout bijwerken Accountview';
      PRS.upsertkenmerk (1077, rec.prs_perslid_key, rec.prs_kenmerk17);  -- Accountview 17, 1077
      v_errorhint:='Fout bijwerken Elvy';
      PRS.upsertkenmerk (1078, rec.prs_perslid_key, rec.prs_kenmerk18);  -- Elvy  18,  1078
      v_errorhint:='Fout bijwerken HodNet';
      PRS.upsertkenmerk (1079, rec.prs_perslid_key, rec.prs_kenmerk19);  -- HodNet 19, 1079
      v_errorhint:='Fout bijwerken Proactive';
      PRS.upsertkenmerk (1080, rec.prs_perslid_key, rec.prs_kenmerk20);  -- Proactive 20, 1080
      v_errorhint:='Fout bijwerken Basiskoffer';
      PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk4); -- Basiskoffer
      
      -- Vanuit bovenstaande upsert komen er ook 0-waarden mee op de vinkbox-velden.
      -- Voor goede werking van de HR-flow moeten deze records echter direct weer gedelete worden 
      DELETE FROM prs_kenmerklink kl
      WHERE kl.prs_kenmerklink_key IN
                (SELECT k.prs_kenmerklink_key
                   FROM prs_kenmerklink k, prs_kenmerk key
                  WHERE     k.prs_kenmerk_key = key.prs_kenmerk_key
                        AND k.prs_kenmerklink_waarde = '0' -- 0-waarde vanuit import is niet ok
                        AND key.prs_kenmerk_niveau = 'P'
                        AND key.prs_kenmerk_kenmerktype = 'V' -- persoonskenmerken + type vinkbox
                        AND key.prs_kenmerk_key in (1063,1065,1067,1068,1069,1074,1075,1076,1077,1078,1080)
                        AND k.prs_link_key = rec.prs_perslid_key
                                                             );
      
      END;
   END LOOP;

   FOR rec IN c_del 
   LOOP
      --  prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Deze niet draaien voor HMOD ivm de workflow HRM die men in Facilitor uitvoert...?
      -- wel vullen van een kenmerkveld ADP-import 1082
      BEGIN
         v_aanduiding   := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_status;
         
         v_errorhint:='Bijwerken veld verwijderen';
         PRS.upsertkenmerk (1082, rec.prs_perslid_key,'let op: verwijderen' ); 

        fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;    
         
      END;
   END LOOP;
   
   BEGIN
   -- Telefoongegevens komen niet mee met de ADP-import. Deze velden worden dus bij deze prs-import leeggegooid. 
   -- De telefoonnummers worden gevuld vanuit de aan de persoon gekoppelde telefoonobjecten (vast en mobiel)
   -- Daarom aan eind van deze prs-import deze telefoonvelden weer vullen door het dagelijks script wat hiervoor 's nachts draait, nogmaals te runnen. 
   hmod_prs_telefoonnummers (null, null);
   END;
   
   COMMIT;

EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') ';
      fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Importproces personen afgebroken!');

END hmod_update_perslid;
/

------------------------
-- NOTIFICATIEJOBS -----
------------------------ 

-- View tbv notificatiejob - Melding toegewezen aan behandelteam zonder behandelaar dan notificatie sturen naar team
-- Notificatie gaat dan naar emailadres bij vakgroep-behandelteam
CREATE OR REPLACE VIEW HMOD_V_NOTI_BEHANDELTEAM
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    FAC_SRTNOTIFICATIE_KEY,
    KEY,
    XKEY,
    XEMAIL,
    XMOBILE
)
AS
    SELECT (SELECT prs_perslid_key
              FROM prs_perslid
             WHERE prs_perslid_upper = 'FACILITOR')
               sender,
           NULL
               receiver,
              'De melding '
           || m.mld_melding_key
           || ' is toegewezen aan jouw/jullie behandelgroep '
           || m.actieve_behandelgroep
               text,
           'CUST01'
               code,
           (SELECT fac_srtnotificatie_key
              FROM fac_srtnotificatie
             WHERE fac_srtnotificatie_code = 'CUST01')
               fac_srtnotificatie_key,
           m.mld_melding_key
               key,
           NULL
               xkey,
           m.vakgroep_email
               xemail,
           NULL
               xmobile
      FROM (SELECT m.mld_melding_key,
                   sm.mld_stdmelding_omschrijving,
                   d.ins_discipline_omschrijving,         -- primaire vakgroep
                   (SELECT COALESCE(fac_notificatie_job_lastrun, trunc(sysdate))
                      FROM fac_notificatie_job
                     WHERE fac_notificatie_job_view ='HMOD_V_NOTI_BEHANDELTEAM')
                       job_datum_vanaf,
                   m.mld_ins_discipline_key,                -- Discipline_key Actieve behandelgroep
                   (SELECT md2.ins_discipline_omschrijving
                      FROM mld_discipline md2
                     WHERE md2.ins_discipline_key = m.mld_ins_discipline_key)
                       actieve_behandelgroep,
                   m.mld_melding_behandelaar2_key,
                   dp2.mld_disc_params_emailnw3             -- email prio normaal/laag
                       vakgroep_email,
                   (SELECT COALESCE(MAX (fac_tracking_datum), sysdate)
                      FROM fac_tracking ft
                     WHERE     fac_tracking_refkey = m.mld_melding_key
                           AND (
                                 (INSTR (fac_tracking_oms, 'Behandelteam: ') > 0 AND fac_srtnotificatie_key = 52)  -- MLDUPD
                                 OR
                                 (INSTR (fac_tracking_oms, 'Behandelteam is gewijzigd naar') > 0 AND fac_srtnotificatie_key = 61)  -- MLDBHG
                                 OR
                                 (INSTR (fac_tracking_oms, 'is toegewezen aan jouw/jullie behandelgroep') > 0 AND fac_srtnotificatie_key = 261))  -- CUST01 -- flag 16
                               )
                       mld_toegewezen_laatste
              FROM mld_melding         m,
                   mld_stdmelding      sm,
                   ins_tab_discipline  d,
                   mld_disc_params     dp,                        -- Primaire vakgroep
                   mld_disc_params     dp2                        -- Behandelteam vakgroep
             WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
                   AND sm.mld_ins_discipline_key = d.ins_discipline_key
                   AND d.ins_discipline_module = 'MLD'
                   AND d.ins_discipline_key = dp.mld_ins_discipline_key
                   AND m.mld_ins_discipline_key = dp2.mld_ins_discipline_key -- Is de key van Behandelteam in mld_melding
                   AND m.mld_melding_behandelaar2_key IS NULL
                   AND dp2.mld_disc_params_emailnw3 IS NOT NULL) m
     WHERE   m.mld_toegewezen_laatste > m.job_datum_vanaf;

-- RAPPEL CONTRACTEN ---

-- Op contracten wordt dit aangegeven. Dit is in basisview opgenomen en deze fungeert als bron voor notificatie
CREATE OR REPLACE VIEW hmod_v_cnt_rappel_basis
AS
    SELECT d.ins_discipline_omschrijving,
           c.cnt_contract_key,
           c.cnt_contract_nummer_intern
           || DECODE (c.cnt_contract_versie,
                      NULL, '',
                      '.' || c.cnt_contract_versie)
               cnt_contract_nr,
           c.cnt_contract_omschrijving,    
           c.cnt_contract_looptijd_van begindatum,
           c.cnt_contract_looptijd_tot einddatum,
           cnt.cnt_getopzegdatum (c.cnt_contract_key) cnt_opzegdatum,
           cnt.cnt_getrappeldatum (c.cnt_contract_key) cnt_rappeldatum,
           DECODE (cnt.cnt_contract_status (c.cnt_contract_looptijd_van,
                                            cnt.cnt_getrappeldatum (c.cnt_contract_key),
                                            cnt.cnt_getopzegdatum (c.cnt_contract_key),
                                            c.cnt_contract_looptijd_tot),
                   0, lcl.l ('lcl_cnt_future'),
                   1, lcl.l ('lcl_cnt_topical'),
                   2, lcl.l ('lcl_cnt_warn'),
                   3, lcl.l ('lcl_cnt_cancel'),
                   4, lcl.l ('lcl_cnt_past'))
           fase_actief,
          DECODE (
             c.cnt_contract_status,
             0,
             DECODE (fac.getsetting ('cnt_contract_approval'),
                     1, lcl.l ('lcl_cnt_active_approval'),
                     lcl.l ('lcl_cnt_active')),
             1,
             lcl.l ('lcl_cnt_inactive'),
             2,
             lcl.l ('lcl_cnt_new'),
             3,
             lcl.l ('lcl_cnt_forapproval'))
           cnt_contract_status,
          CASE WHEN cnt_contract_verlenging = 2 THEN 'nee' ELSE 'ja' END
            automatisch_verlengen,
          CASE WHEN cnt_contract_inactiveren = 1 THEN 'ja' ELSE 'nee' END
            automatisch_beeindigen,
           (SELECT kc.cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                   AND kc.cnt_contract_key = c.cnt_contract_key
                   AND k.cnt_kenmerk_key = 716)        -- contractbeheerder
               vink_beheerder,
           (SELECT p.prs_perslid_email
              FROM prs_perslid p
             WHERE     p.prs_perslid_key = c.prs_perslid_key_beh
                   AND p.prs_perslid_verwijder IS NULL)
               beheerder_email,
           (SELECT kc.cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                   AND kc.cnt_contract_key = c.cnt_contract_key
                   AND k.cnt_kenmerk_key = 715) -- verantwoordelijk manager
               vink_verantwoordelijke,
           (SELECT p.prs_perslid_email
              FROM prs_perslid p
             WHERE     p.prs_perslid_key = c.prs_perslid_key_eig
                   AND p.prs_perslid_verwijder IS NULL)
               veantwoordelijke_email,
           (SELECT kc.cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                   AND kc.cnt_contract_key = c.cnt_contract_key
                   AND k.cnt_kenmerk_key = 724)            -- rappel 2e aanspreekpunt
               vink_tweede_aanspreekpunt,
           (SELECT p.prs_perslid_email
              FROM prs_perslid p
             WHERE     p.prs_perslid_key = (SELECT fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
                                             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                                                   AND kc.cnt_contract_key = c.cnt_contract_key
                                                   AND k.cnt_kenmerk_key = 723)
                   AND p.prs_perslid_verwijder IS NULL)
               tweede_aanspreekpunt_email,
           (SELECT kc.cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                   AND kc.cnt_contract_key = c.cnt_contract_key
                   AND k.cnt_kenmerk_key = 717) -- opgezegd
               contract_opgezegd,
           (SELECT kc.cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k
             WHERE     k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                   AND kc.cnt_contract_key = c.cnt_contract_key
                   AND k.cnt_kenmerk_key = 709) -- opgezegd_reden
               contract_opgezegd_reden
      FROM cnt_v_aanwezigcontract c, ins_tab_discipline d
     WHERE     c.ins_discipline_key = d.ins_discipline_key
           AND d.ins_discipline_module = 'CNT';

-- Rappel-opzet - HERZIEN
---- Eenmalig verstuurd naar optioneel contract-veantwoordelijke, contractbeheerder en 2e aanspreekpunt
CREATE OR REPLACE VIEW hmod_v_noti_cntreminder_2
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS                 -- Op rappel-datum naar de Beheerder/Administrateur sturen
   SELECT 'CNTMAI',
          NULL,
          c.prs_perslid_key_beh,
          'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
          || DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
          || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
          || ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key,
          NULL,
          NULL,
          NULL
     FROM hmod_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND v.cnt_contract_key = c.cnt_contract_key
          AND v.vink_beheerder = 1 
          AND c.cnt_contract_status = 0
          AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
          AND c.prs_perslid_key_beh <> c.prs_perslid_key_eig -- als administrateur gelijk aan 1e aanspreekpunt dan dan sturen we de info-mail niet uit
          AND v.contract_opgezegd IS NULL
          AND v.automatisch_verlengen = 'nee'
          AND v.automatisch_beeindigen = 'nee'
   UNION ALL     -- Op rappel-datum ACTIE-mail naar het 1e aanspreekpunt sturen (contractverantwoordelijke)
   SELECT 'CUST02',
          NULL,
          c.prs_perslid_key_eig,
          'ACTIE: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
          || DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
          || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
          || ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key,
          NULL,
          NULL,
          NULL
     FROM hmod_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND v.cnt_contract_key = c.cnt_contract_key
          AND v.vink_verantwoordelijke = 1 
          AND c.cnt_contract_status = 0
          AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
          AND c.prs_perslid_key_eig IS NOT NULL
          AND v.contract_opgezegd IS NULL          
          AND v.automatisch_verlengen = 'nee'
          AND v.automatisch_beeindigen = 'nee'          
   UNION ALL     -- Op rappel-datum ACTIE-mail naar het 'RAPPEL-ANDERS-emailadres'
   SELECT 'CUST03',
          NULL,
          NULL,
          'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
          || DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
          || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
          || ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key,
          NULL,
          v.tweede_aanspreekpunt_email,
          NULL
     FROM hmod_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND v.cnt_contract_key = c.cnt_contract_key
          AND v.vink_tweede_aanspreekpunt = 1
          AND c.cnt_contract_status = 0
          AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
          AND v.contract_opgezegd IS NULL 
          AND v.automatisch_verlengen = 'nee' 
          AND v.automatisch_beeindigen = 'nee' ;

-- domeinview Contracten
CREATE OR REPLACE VIEW hmod_v_contracten
(
    KEY,
    OMSCHRIJVING, -- Soort - Nr.versie - Omschrijving
    CONTRACTANT,  -- Voor extra_tesktkolom
    VERVALDATUM   -- Alle contracten die al meer dan jaar verlopen zijn, worden niet meer getoond in keuzelijst
)
AS
    SELECT c.cnt_contract_key,
              d.ins_discipline_omschrijving
           || ' - '
           || c.cnt_contract_nummer_intern
           || DECODE (c.cnt_contract_versie,
                      NULL, '',
                      '.' || c.cnt_contract_versie)
           || ' - '
           || c.cnt_contract_omschrijving
               omschrijving,
           (SELECT prs_bedrijf_naam
              FROM prs_bedrijf
             WHERE prs_bedrijf_key = c.cnt_prs_bedrijf_key)
               contractant,
           c.cnt_contract_looptijd_tot + 365
               vervaldatum
      FROM cnt_contract c, ins_tab_discipline d
     WHERE     c.ins_discipline_key = d.ins_discipline_key
           AND d.ins_discipline_module = 'CNT' ;

-- Als vanuit AFAS-koppeling een nieuwe medewerker binnenkomt of een bestaande medewerker een formatieplaats-wijziging heeft, dan moet er in Facilitor een HR-mutatieproces opgestart worden
CREATE OR REPLACE VIEW hmod_v_noti_afas_hrtrigger
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT 'PRSUPD',
          NULL,
          g.prs_perslid_key,
          'HR_MUTATIE: ' || v.prs_perslid_email || ' - ' || v.afas_hr_mutatie
           text,
          v.prs_perslid_key,
          NULL,
          NULL,
          NULL
     FROM (SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, 
                  flx.getflex('PRS', 1760, p.prs_perslid_key, 'P') afas_hr_mutatie
             FROM prs_perslid p ) v,
          (SELECT ft.fac_tracking_refkey, ft.fac_tracking_oms, MAX(ft.fac_tracking_datum) datum_mutatie 
             FROM fac_tracking ft, fac_srtnotificatie sn
            WHERE ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                  AND sn.fac_srtnotificatie_code = 'PRSUPD'
                  AND (
                       ft.fac_tracking_oms = 'MDW_FORMATIEPLAATS_GEWIJZIGD' 
                       OR
                       ft.fac_tracking_oms = 'MDW_NIEUW'
                       )  
          GROUP BY ft.fac_tracking_refkey, ft.fac_tracking_oms
            ) ft,
          (SELECT gg.prs_perslid_key
             FROM fac_groep g, fac_gebruikersgroep gg
            WHERE g.fac_groep_key = gg.fac_groep_key
                  AND g.fac_groep_key = 541 -- AUTORISATIEGROEP HR_MUTATIE
                  AND gg.fac_gebruikersgroep_vervaldatum IS NULL  
                  ) g,
           (SELECT COALESCE(fac_notificatie_job_lastrun, trunc(sysdate-1)) datum_last_run
              FROM fac_notificatie_job
             WHERE LOWER(fac_notificatie_job_view) ='hmod_v_noti_afas_hrtrigger') n
    WHERE v.prs_perslid_key = ft.fac_tracking_refkey
          AND ft.datum_mutatie >= n.datum_last_run
    ;


---------------------
-- RAPPORTVIEWS -----
--------------------- 

-- O.a. bestemd voor overzicht HR-behandelteams
CREATE OR REPLACE VIEW hmod_v_rap_hrmeldingen
(
    SRTDISCIPLINE_OMSCHRIJVING,
    FCLT_3D_DISCIPLINE_KEY,          -- vakgroep_key
    DISCIPLINE_NAAM,
    MLD_MELDING_KEY,
    MLD_MELDING_NR,
    MLD_MELDING_DATUM,
    MLD_STD_MELDING,
    MLD_MELDING_ONDERWERP,
    MLD_MELDING_STATUS,
    ACTIECODE_OMSCHRIJVING,
    MARKERING,
    MLD_AANVRAGER,
    BESTEMD_VOOR_PERSONEELSLID,  -- Voor wie geldt de hr-mutatie?
    -- Behandeling
    FCLT_3D_DISCIPLINE2_KEY,     -- vakgroep_key van actieve behandelteam
    ACTIEVE_BEHANDELTEAM,
    BEHANDELAAR_FILTER_KEY,      -- Voor HR-mensen die zowel Hoofd- als Actieve behandelaar kunnen zijn
    BEHANDELAAR_FILTER_NAAM,
    -- Datums en doorloop
    DATUM_ACCEPT,
    DATUM_EIND,
    DATUM_AFGEMELD,
    DOORLOOPTIJD_WD,
    -- Kenmerkvelden
    HR_FUNCTIONARIS,             -- In aanvraag - welke hr-functionaris is aangegeven?
    WORKFLOW_GEKOPPELD,
    CONTROLE_ADP
)
AS
    SELECT sd.ins_srtdiscipline_omschrijving,
           md.ins_discipline_key,
           md.ins_discipline_omschrijving,
           m.mld_melding_key,
           sd.ins_srtdiscipline_prefix || m.mld_melding_key
            mld_melding_nr,
           m.mld_melding_datum,
           CASE WHEN s.mld_stdmelding_key = 145 THEN 
                s.mld_stdmelding_omschrijving || ' - ' || 
                (SELECT fu.fac_usrdata_omschr
                   FROM mld_kenmerkmelding mkm,
                        mld_kenmerk       k,
                        fac_usrdata       fu
                  WHERE mkm.mld_melding_key = m.mld_melding_key
                    AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                    AND fac.safe_to_number(mkm.mld_kenmerkmelding_waarde) = fu.fac_usrdata_key
                    AND k.mld_kenmerk_verwijder IS NULL
                    AND k.mld_srtkenmerk_key = 95)
            ELSE s.mld_stdmelding_omschrijving
            END
             mld_stdmelding_omschrijving,
           m.mld_melding_onderwerp,
           (SELECT mld_statuses_omschrijving
              FROM mld_statuses sta
             WHERE sta.mld_statuses_key = m.mld_melding_status)
             mld_melding_status,
           CASE WHEN mld_melding_actiecode = 2 THEN 'Actie bij aanvrager'
                WHEN mld_melding_actiecode = 129 THEN 'Attentie (actie bo)'
                ELSE 'Standaard'
                END actiecode_omschrijving,
           CASE WHEN mld_melding_flag > 0 THEN lcl.l ('lcl_mld_flag' || mld_melding_flag)
                END  markering,
           (SELECT prs_perslid_naam_full
              FROM prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = m.prs_perslid_key)
            mld_aanvrager,
          (SELECT p.prs_perslid_naam_full
             FROM mld_kenmerkmelding mkm, mld_kenmerk k, prs_v_perslid_fullnames p 
            WHERE mkm.mld_melding_key = m.mld_melding_key
                  AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                  AND fac.safe_to_number (mkm.mld_kenmerkmelding_waarde) = p.prs_perslid_key
                  AND k.mld_kenmerk_verwijder IS NULL
                  AND k.mld_srtkenmerk_key = 97)
            bestemd_voor_personeelslid,  -- srtkenmerk_key = 97
           -- Behandeling
           m.mld_ins_discipline_key,
           (SELECT md2.ins_discipline_omschrijving
              FROM mld_discipline md2
             WHERE md2.ins_discipline_key = m.mld_ins_discipline_key)
             actieve_behandelteam,
           COALESCE(m.[REDACTED], m.mld_melding_behandelaar_key)
            behandelaar_filter_key,
           COALESCE(pba.prs_perslid_naam_full, pb.prs_perslid_naam_full,'<leeg>')
            behandelaar_filter_naam,
           -- Datums en doorloop
           mld.getmeldingstatusdate (m.mld_melding_key, 4)
            datum_accept,
           m.mld_melding_einddatum,
           COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                     mld.getmeldingstatusdate (m.mld_melding_key, 1))
            datum_afgemeld,
           DECODE (mld.getactualuitvoer (m.mld_melding_key).eenheid,
                   'D', mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                   mld.getactualuitvoer (m.mld_melding_key).tijdsduur/24)
            doorlooptijd_wd,
         -- Kenmerkvelden 
          (SELECT p.prs_perslid_naam_full
             FROM mld_kenmerkmelding mkm, mld_kenmerk k, prs_v_perslid_fullnames p 
            WHERE mkm.mld_melding_key = m.mld_melding_key
                  AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_kenmerk_verwijder IS NULL
                  AND fac.safe_to_number (mkm.mld_kenmerkmelding_waarde) = p.prs_perslid_key
                  AND k.mld_srtkenmerk_key = 681)
            hr_functionaris,              -- srtkenmerk_key = 681
          CASE WHEN m.mld_stdmelding_key NOT IN (923, 924, 925) THEN 'nvt'
               WHEN m.mld_melding_parentkey IS NOT NULL AND m.mld_stdmelding_key IN (923, 924, 925) THEN 'ja, aan melding ' || to_char(m.mld_melding_parentkey)
               ELSE ''
               END 
           workflow_gekoppeld,
          (SELECT mkm.mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding mkm, mld_kenmerk k 
            WHERE mkm.mld_melding_key = m.mld_melding_key
                  AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_kenmerk_verwijder IS NULL
                  AND k.mld_srtkenmerk_key = 1741)
           controle_ADP          -- srtkenmerk = 1741
      FROM mld_melding                 m,
           prs_perslid                 p,  -- aanvrager
           prs_v_perslid_fullnames_all pb, -- behandelaar
           prs_v_perslid_fullnames_all pba,-- actievehandelaar
           mld_stdmelding              s,
           mld_stdmeldinggroep         sg,
           mld_discipline              md,
           mld_disc_params             mdp,
           ins_srtdiscipline           sd      
     WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
           AND m.prs_perslid_key = p.prs_perslid_key
           AND m.mld_melding_behandelaar_key = pb.prs_perslid_key (+) 
           AND m.mld_melding_behandelaar2_key = pba.prs_perslid_key (+)
           AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
           AND md.ins_discipline_key = s.mld_ins_discipline_key
           AND md.ins_discipline_key = mdp.mld_ins_discipline_key
           AND sd.ins_srtdiscipline_key = 22 -- Alleen uit SA
           AND md.ins_discipline_key in (94,96)  -- vakgroep HR-algemeen en HR-spec
           AND s.mld_stdmeldinggroep_key = sg.mld_stdmeldinggroep_key (+) 
UNION ALL
    SELECT sd.ins_srtdiscipline_omschrijving,
           md.ins_discipline_key,
           md.ins_discipline_omschrijving,
           m.mld_melding_key,
           sd.ins_srtdiscipline_prefix || m.mld_melding_key
            mld_melding_nr,
           m.mld_melding_datum,
           wf.mld_stdmelding_omschrijving || ' - ' || s.mld_stdmelding_omschrijving
             mld_stdmelding_omschrijving,
           m.mld_melding_onderwerp,
           (SELECT mld_statuses_omschrijving
              FROM mld_statuses sta
             WHERE sta.mld_statuses_key = m.mld_melding_status)
             mld_melding_status,
           CASE WHEN mld_melding_actiecode = 2 THEN 'Actie bij aanvrager'
                WHEN mld_melding_actiecode = 129 THEN 'Attentie (actie bo)'
                ELSE 'Standaard'
                END actiecode_omschrijving,
           CASE WHEN mld_melding_flag > 0 THEN lcl.l ('lcl_mld_flag' || mld_melding_flag)
                END  markering,
           'nvt'
            mld_aanvrager,
           (SELECT prs_perslid_naam_full
              FROM prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = m.prs_perslid_key)
            bestemd_voor_personeelslid,  -- Voor WF is dit aanvrager
           -- Behandeling
           m.mld_ins_discipline_key,
           md.ins_discipline_omschrijving
             actieve_behandelteam,
           m.mld_melding_behandelaar_key
            behandelaar_filter_key,
           COALESCE(pb.prs_perslid_naam_full,'<leeg>')
            behandelaar_filter_naam,
           -- Datums en doorloop
           mld.getmeldingstatusdate (m.mld_melding_key, 4)
            datum_accept,
           m.mld_melding_einddatum,
           COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                     mld.getmeldingstatusdate (m.mld_melding_key, 1))
            datum_afgemeld,
           DECODE (mld.getactualuitvoer (m.mld_melding_key).eenheid,
                   'D', mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                   mld.getactualuitvoer (m.mld_melding_key).tijdsduur/24)
            doorlooptijd_wd,
         -- Kenmerkvelden 
           'nvt'
             hr_functionaris,
          'workflow - hoofmelding ' || to_char(m.mld_melding_start_key) 
           workflow_gekoppeld,
          (SELECT mkm.mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding mkm, mld_kenmerk k 
            WHERE mkm.mld_melding_key = m.mld_melding_key
                  AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_kenmerk_verwijder IS NULL
                  AND k.mld_srtkenmerk_key = 1741)
           controle_ADP          -- srtkenmerk = 1742 in acceptatie
      FROM mld_melding                 m,
           prs_perslid                 p,  -- aanvrager
           prs_v_perslid_fullnames_all pb, -- behandelaar
           mld_stdmelding              s,
           mld_stdmeldinggroep         sg,
           mld_discipline              md,
           mld_disc_params             mdp,
           ins_srtdiscipline           sd,
           (SELECT m.mld_melding_start_key, s.mld_stdmelding_omschrijving
             FROM mld_melding m, mld_stdmelding s
            WHERE     m.mld_melding_start_key = m.mld_melding_key
                  AND m.mld_stdmelding_key = s.mld_stdmelding_key ) wf     
     WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
           AND m.prs_perslid_key = p.prs_perslid_key
           AND m.mld_melding_behandelaar_key = pb.prs_perslid_key (+) 
           AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
           AND md.ins_discipline_key = s.mld_ins_discipline_key
           AND md.ins_discipline_key = mdp.mld_ins_discipline_key
           AND sd.ins_srtdiscipline_key = 24 -- Alleen uit HR-Workflows
           AND s.mld_stdmeldinggroep_key = sg.mld_stdmeldinggroep_key (+) 
           AND m.mld_melding_start_key <> m.mld_melding_key  -- Alleen de actiemeldingen in de workflow tonen
           AND m.mld_melding_start_key = wf.mld_melding_start_key
;



-- Rapporview voor HMOD voor de Informatiegids om de telefoonnummers van Management te kunnen opvragen...
CREATE OR REPLACE VIEW hmod_v_rap_informatiegids
(
    BEDRIJFSNAAM,
    CONTACTPERSOON,
    CONTACT_TEL,
    CONTACT_MOB,
    CONTACT_MAIL,
    FUNCTIE,
    CONTACTPRS_INTERN,
    KERSTKAARTEN,
    JAARDOCUMENT,
    JAARDOCUMENT_PUBL,
    HUMIT_MAILING,
    RVT_MAILING
)
AS
  SELECT v.BEDRIJFSNAAM,
         v.CONTACT_NAAM,
         v.CONTACT_TEL,
         v.CONTACT_MOB,
         v.CONTACT_EMAIL,
         v.FUNCTIE,
         v.contactpersoon_intern,
         v.kerstkaarten,
         v.jaardocument,
         v.jaardocument_publiekeversie,
         v.humit_mailing,
         v.mailing_rvt_voorzitter
    FROM (SELECT 0                           AS soort,
                 b.prs_bedrijf_key,
                 b.prs_bedrijf_naam          AS bedrijfsnaam,
                 b.prs_bedrijf_contact_persoon AS contact_naam,
                 b.prs_bedrijf_telefoon      AS contact_tel,
                 'nvt'                       AS contact_mob,                 
                 b.prs_bedrijf_email         AS contact_email,
                 'nvt'                       AS functie,
                 'nvt'                       AS contactpersoon_intern,
                 'nvt'                       AS kerstkaarten,
                 'nvt'                       AS jaardocument,
                 'nvt'                       AS jaardocument_publiekeversie,
                 'nvt'                       AS humit_mailing,
                 'nvt'                       AS mailing_rvt_voorzitter
            FROM prs_bedrijf b
           WHERE     b.prs_bedrijf_ingids IS NULL
                 AND b.prs_bedrijf_verwijder IS NULL
          UNION ALL
          SELECT 1                             AS soort,
                 b.prs_bedrijf_key,
                 b.prs_bedrijf_naam            AS bedrijfsnaam,
                 c.prs_contactpersoon_naam     AS contact_naam,
                 c.prs_contactpersoon_telefoon_1 AS contact_tel,
                 c.prs_contactpersoon_telefoon_2 AS contact_mob,
                 c.prs_contactpersoon_email    AS contact_email,
                 c.prs_contactpersoon_functie  AS functie,
                 (SELECT ud.fac_usrdata_omschr
                   FROM prs_kenmerklink    kw,
                        prs_kenmerk        k,
                        fac_kenmerkdomein  kd,
                        fac_usrdata        ud
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                          AND kw.prs_kenmerk_key = 1260
                          AND k.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
                          AND kd.fac_kenmerkdomein_module = 'PRS'
                          AND kd.fac_usrtab_key = ud.fac_usrtab_key
                          AND fac.safe_to_number (kw.prs_kenmerklink_waarde) = ud.fac_usrdata_key
                          AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS contactpersoon_intern, 
                 (SELECT DECODE (COALESCE (TO_CHAR (COUNT (*)), '0'),
                                 '1', 'aan',
                                 '0', 'uit',
                                 'onbekend')
                    FROM prs_kenmerklink kw
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                    AND kw.prs_kenmerk_key = 1243
                    AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS kerstkaarten,
                 (SELECT DECODE (COALESCE (TO_CHAR (COUNT (*)), '0'),
                                 '1', 'aan',
                                 '0', 'uit',
                                 'onbekend')
                    FROM prs_kenmerklink kw
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                    AND kw.prs_kenmerk_key = 1241
                    AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS jaardocument,
                 (SELECT DECODE (COALESCE (TO_CHAR (COUNT (*)), '0'),
                                 '1', 'aan',
                                 '0', 'uit',
                                 'onbekend')
                    FROM prs_kenmerklink kw
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                    AND kw.prs_kenmerk_key = 1242
                    AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS jaardocument_publiekeversie,
                 (SELECT DECODE (COALESCE (TO_CHAR (COUNT (*)), '0'),
                                 '1', 'aan',
                                 '0', 'uit',
                                 'onbekend')
                    FROM prs_kenmerklink kw
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                    AND kw.prs_kenmerk_key = 1240
                    AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS humit_mailing,
                 (SELECT DECODE (COALESCE (TO_CHAR (COUNT (*)), '0'),
                                 '1', 'aan',
                                 '0', 'uit',
                                 'onbekend')
                    FROM prs_kenmerklink kw
                    WHERE     kw.prs_kenmerklink_niveau = 'C'
                    AND kw.prs_kenmerk_key = 1244
                    AND kw.prs_link_key = c.prs_contactpersoon_key)
                    AS mailing_rvt_voorzitter
            FROM prs_bedrijf b, prs_contactpersoon c
           WHERE     b.prs_bedrijf_ingids IS NULL
                 AND b.prs_bedrijf_verwijder IS NULL
                 AND b.prs_bedrijf_key = c.prs_bedrijf_key
                 AND c.prs_contactpersoon_verwijder IS NULL) v
ORDER BY v.bedrijfsnaam, v.soort;

-- Rapport met de telefooncentrale-nr's als objecten vastgelegd onder objectsoort 2438
-- View kan in principe met udr-insdeel gemaakt worden echter dat rapport wordt dan nog niet goed getoond in Informatiegids
-- Daarom een cust-view voor gemaakt. Zie ook ticket HMOD#64927. 
CREATE OR REPLACE VIEW hmod_v_rap_telefooncentr_nrs
(
    PLAATS,
    BEZOEKADRES,
    TELEFOON_AFDELING,
    AFDELING,  -- opmerkingsinfo bij Object
    TELEFOON_ALGEMEEN,
    EMAIL_ALGEMEEN
)
AS
    SELECT 
    l.alg_locatie_plaats,
    l.alg_locatie_adres,
    i.ins_deel_omschrijving,
    i.ins_deel_opmerking,
    (SELECT kl.alg_onrgoedkenmerk_waarde
      FROM alg_onrgoedkenmerk kl, alg_kenmerk k
       WHERE     kl.alg_kenmerk_key = k.alg_kenmerk_key
             AND kl.alg_onrgoed_key = l.alg_locatie_key
             AND kl.alg_onrgoed_niveau = 'L'
             AND k.alg_kenmerk_key = 1040) telefoon_algemeen,
    l.alg_locatie_email
    FROM 
      ins_deel i,
      ins_srtdeel s,
      ins_v_alg_overzicht  o,
      alg_locatie          l
    WHERE     i.ins_deel_verwijder IS NULL
          AND i.ins_deel_module = 'INS'
          AND i.ins_deel_parent_key IS NULL
          AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
          AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
          AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND o.alg_locatie_key = i.ins_alg_locatie_key
          AND i.ins_alg_locatie_key = l.alg_locatie_key
          AND s.ins_srtdeel_key = i.ins_srtdeel_key
          AND s.ins_srtdeel_code = '2438'  -- Telefooncentrale nummers
          AND i.ins_deel_opmerking IS NOT NULL
    ORDER BY  l.alg_locatie_plaats, l.alg_locatie_adres, i.ins_deel_omschrijving ;

-- View - Per persoon de eigendommen (gekoppelde objecten) en de persoonlijke koffersysteem-kenmerken
---- O.a. bedoeld om via gestylde UDR de gebruikersovereenkomst op te stellen
CREATE OR REPLACE VIEW hmod_v_koffersysteem_prs
(
    PRS_PERSLID_KEY,
    PERSONEELSNR,
    NAAM,
    FUNCTIE,
    AFDELING,
    BEDRIJFSNAAM,
    TYPE_EIGENDOM,
    INS_DISC,
    INS_GROEP,
    INS_SOORT,
    INS_SOORT_CODE,
    SOORT_EIGENDOM,
    INS_DEEL_KEY,
    INS_DEEL_UPPER,
    GEBRUIKSEIGENDOM,
    MERK,
    TYPE,
    SERIENUMMER,
    IMEI_NR,
    FORMATIEPLAATS,
    KOFFERSYSTEEM_STATUS,
    DATUM_UITDIENST,
    PRS_PERSLID_VERWIJDER    
)
AS
SELECT                           -- 1. Objecteigendommen
       p.prs_perslid_key,
       p.prs_perslid_nr,
       p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam,
       sp.prs_srtperslid_omschrijving,
       a.prs_afdeling_naam || ' - ' || a.prs_afdeling_upper
           AS Afdeling,
       b.prs_bedrijf_naam,
       'Apparatuur'
           type_eigendom,                --apparatuur of rechten koffersysteem
       vd.ins_discipline_omschrijving,
       vd.ins_srtgroep_upper,
       vd.ins_srtdeel_upper,
       sd.ins_srtdeel_code,
       sd.ins_srtdeel_omschrijving,
       vd.ins_deel_key,
       vd.ins_deel_upper,
       COALESCE (s.sim_nr, vd.ins_deel_upper)
           IdentificatieCode,
       (SELECT kw.ins_kenmerkdeel_waarde
          FROM ins_kenmerkdeel kw, ins_kenmerk k
         WHERE     kw.ins_deel_key = vd.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 9)
           merk,
       (SELECT kw.ins_kenmerkdeel_waarde
          FROM ins_kenmerkdeel kw, ins_kenmerk k
         WHERE     kw.ins_deel_key = vd.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 11)
           type,
       (SELECT kw.ins_kenmerkdeel_waarde
          FROM ins_kenmerkdeel kw, ins_kenmerk k
         WHERE     kw.ins_deel_key = vd.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 10)
           serienummer,
       (SELECT kw.ins_kenmerkdeel_waarde
          FROM ins_kenmerkdeel kw, ins_kenmerk k
         WHERE     kw.ins_deel_key = vd.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 63)
           IMEI_nr,
       (SELECT kw.prs_kenmerklink_waarde
          FROM prs_kenmerklink kw
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1025)
           formatieplaats,
       (SELECT ud.fac_usrdata_omschr
          FROM prs_kenmerklink    kw,
               prs_kenmerk        k,
               fac_kenmerkdomein  d,
               fac_usrtab         ut,
               fac_usrdata        ud
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1081
               AND kw.prs_kenmerk_key = k.prs_kenmerk_key
               AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
               AND d.fac_usrtab_key = ut.fac_usrtab_key
               AND ut.fac_usrtab_key = ud.fac_usrtab_key
               AND fac.safe_to_number (kw.prs_kenmerklink_waarde) =
                   ud.fac_usrdata_key)
           koffersysteem_status,
       (SELECT kw.prs_kenmerklink_waarde
          FROM prs_kenmerklink kw
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1100)
           datum_uitdienst,
       p.prs_perslid_verwijder
  FROM prs_perslid          p,
       prs_v_afdeling_boom  va,
       prs_bedrijf          b,
       prs_afdeling         a,
       prs_srtperslid       sp,
       ins_v_deel_gegevens  vd,
       ins_srtdeel          sd,
       (SELECT d.ins_deel_key,
               d.ins_deel_upper,
               kw.ins_kenmerkdeel_waarde,
               sim.ins_deel_upper AS sim_nr
          FROM ins_deel         d,
               ins_kenmerkdeel  kw,
               ins_kenmerk      k,
               ins_deel         sim
         WHERE     d.ins_deel_key = kw.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 24                      -- SIM-kaart
               AND kw.ins_kenmerkdeel_verwijder IS NULL
               AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) =
                   sim.ins_deel_key) s
 WHERE     p.prs_afdeling_key = va.prs_afdeling_key
       AND va.prs_bedrijf_key = b.prs_bedrijf_key
       AND p.prs_afdeling_key = a.prs_afdeling_key
       AND p.prs_srtperslid_key = sp.prs_srtperslid_key
       AND p.prs_perslid_verwijder IS NULL
       AND p.prs_perslid_key = vd.prs_perslid_key
       AND vd.ins_srtdeel_key = sd.ins_srtdeel_key
       AND vd.ins_deel_key = s.ins_deel_key(+)
UNION ALL
SELECT                              -- 2. Eigen koffersysteem
       p.prs_perslid_key,
       p.prs_perslid_nr,
       p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam,
       sp.prs_srtperslid_omschrijving,
       a.prs_afdeling_naam || ' - ' || a.prs_afdeling_upper
           AS Afdeling,
       b.prs_bedrijf_naam,
       'Eigen koffersysteem'
           type_eigendom,
       NULL,
       NULL,
       NULL,
       NULL,
       koffer.soort,
       NULL,
       NULL,
       prs_kenmerk_omschrijving,
       NULL,
       NULL,
       NULL,
       NULL,
       (SELECT kw.prs_kenmerklink_waarde
          FROM prs_kenmerklink kw
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1025)
           formatieplaats,
       (SELECT ud.fac_usrdata_omschr
          FROM prs_kenmerklink    kw,
               prs_kenmerk        k,
               fac_kenmerkdomein  d,
               fac_usrtab         ut,
               fac_usrdata        ud
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1081
               AND kw.prs_kenmerk_key = k.prs_kenmerk_key
               AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
               AND d.fac_usrtab_key = ut.fac_usrtab_key
               AND ut.fac_usrtab_key = ud.fac_usrtab_key
               AND fac.safe_to_number (kw.prs_kenmerklink_waarde) =
                   ud.fac_usrdata_key)
           koffersysteem_status,
       (SELECT kw.prs_kenmerklink_waarde
          FROM prs_kenmerklink kw
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1100)
           datum_uitdienst,
       p.prs_perslid_verwijder
  FROM prs_perslid          p,
       prs_v_afdeling_boom  va,
       prs_bedrijf          b,
       prs_afdeling         a,
       prs_srtperslid       sp,
       (  SELECT v.prs_link_key AS prs_perslid_key,
                 v.prs_kenmerk_omschrijving,
                 v.soort
            FROM ((SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Telefonie en IT' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1063)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Telefonie en IT' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1065)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Telefonie en IT' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1067)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Telefonie en IT' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1068)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Telefonie en IT' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1069)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1072)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1073)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1074)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1075)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1076)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1077)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1078)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1079)
                  UNION
                  (SELECT kw.prs_link_key,
                          k.prs_kenmerk_omschrijving,
                          'Applicaties' AS Soort
                     FROM prs_kenmerklink kw, prs_kenmerk k
                    WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1080)) v
        ORDER BY v.prs_link_key, v.soort, v.prs_kenmerk_omschrijving) koffer
 WHERE     p.prs_afdeling_key = va.prs_afdeling_key
       AND va.prs_bedrijf_key = b.prs_bedrijf_key
       AND p.prs_afdeling_key = a.prs_afdeling_key
       AND p.prs_srtperslid_key = sp.prs_srtperslid_key
       AND p.prs_perslid_key = koffer.prs_perslid_key
       AND p.prs_perslid_verwijder IS NULL
;

-- Persoonlijk Koffersysteem vergeleken met Basis-koffersysteem (om snel discrepanties mee naar boven te halen
CREATE OR REPLACE VIEW hmod_v_koffersysteem_prs2
(
    PERSLID_KEY,
    PERSLID_NR,
    PERSLID_NAAM,
    FUNCTIE,
    AFDELING,
    BEDRIJF,
    FORMATIEPLAATS,
    KOFFERSYSTEEM_STATUS,
    B_LAP_EN_SIM,
    P_LAP_EN_SIM,
    B_LAPT,
    P_LAPT,
    B_MOB,
    P_MOB,
    B_TOKEN,
    P_TOKEN,
    B_HIT,
    P_HIT,
    B_FACILITOR,
    P_FACILITOR,
    B_ADP,
    P_ADP,
    B_ABSENTIEMANAGER,
    P_ABSENTIEMANAGER,
    B_REGAS,
    P_REGAS,
    B_CHECKS,
    P_CHECKS,
    B_ACCOUNTVIEW,
    P_ACCOUNTVIEW,
    B_ELVY,
    P_ELVY,
    B_HODNET,
    P_HODNET,
    B_PROACTIVE,
    P_PROACTIVE,
    B_TOEGANGSNIVEAU, -- tnc
    P_TOEGANGSNIVEAU,
    OPMERKING_KOFFERSYSTEEM,
    DATUM_UITDIENST,
    VERWIJDERD
)
AS
SELECT
       p.prs_perslid_key,
       p.prs_perslid_nr,
       p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam,
       sp.prs_srtperslid_omschrijving,
       a.prs_afdeling_naam || ' - ' || a.prs_afdeling_upper
           AS Afdeling,
       b.prs_bedrijf_naam,
       v.formatieplaats,
       v.koffersysteem_status,
       COALESCE(k.lap_en_sim,'<!>') b_lap_en_sim,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1063) p_lap_en_sim,
       COALESCE(k.lapt,'<!>') b_lapt,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1065) p_lapt,
       COALESCE(k.mob,'<!>') b_mob,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1067) p_mob,
       COALESCE(k.token,'<!>') b_token,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1068) p_token,
       COALESCE(k.hit,'<!>') b_hit,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1069) p_hit,
       COALESCE(k.facilitor,'<!>') b_facilitor,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1072) p_facilitor,
       COALESCE(k.adp,'<!>') b_adp,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1073) p_adp,
       COALESCE(k.absentiemanager,'<!>') b_absentiemanager,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1074) p_absentiemanager,
       COALESCE(k.regas,'<!>') b_regas,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1075) p_regas,
       COALESCE(k.checks,'<!>') b_checks,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1076) p_checks,
       COALESCE(k.accountview,'<!>') b_accountview,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1077) p_accountview,
       COALESCE(k.elvy,'<!>') b_elvy,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1078) p_elvy,
       COALESCE(k.hodnet,'<!>') b_hodnet,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1079) p_hodnet,
       COALESCE(k.proactive,'<!>') b_proactive,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1080) p_proactive,
       COALESCE(k.tnc,'<!>') b_toegangsniveau,
       (SELECT  COALESCE(max(kw.prs_kenmerklink_waarde),'0')
           FROM prs_kenmerklink kw, prs_kenmerk k
                WHERE     kw.prs_kenmerklink_niveau = 'P'
                          AND kw.prs_link_key = p.prs_perslid_key
                          AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                          AND k.prs_kenmerk_key = 1061) p_toegangsniveau,
        k.opmerking,
       (SELECT kw.prs_kenmerklink_waarde
          FROM prs_kenmerklink kw
         WHERE     kw.prs_link_key = p.prs_perslid_key
               AND kw.prs_kenmerklink_niveau = 'P'
               AND kw.prs_kenmerk_key = 1100)
           datum_uitdienst,
       p.prs_perslid_verwijder
  FROM prs_perslid          p,
       prs_v_afdeling_boom  va,
       prs_bedrijf          b,
       prs_afdeling         a,
       prs_srtperslid       sp,
       (SELECT prs_perslid_key,
              (SELECT kw.prs_kenmerklink_waarde
                 FROM prs_kenmerklink kw
                 WHERE     kw.prs_link_key = p.prs_perslid_key
                       AND kw.prs_kenmerklink_niveau = 'P'
                       AND kw.prs_kenmerk_key = 1025)
                 formatieplaats,
               (SELECT ud.fac_usrdata_omschr
                 FROM prs_kenmerklink    kw,
                      prs_kenmerk        k,
                      fac_kenmerkdomein  d,
                      fac_usrtab         ut,
                      fac_usrdata        ud
                 WHERE     kw.prs_link_key = p.prs_perslid_key
                       AND kw.prs_kenmerklink_niveau = 'P'
                       AND kw.prs_kenmerk_key = 1081
                       AND kw.prs_kenmerk_key = k.prs_kenmerk_key
                       AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
                       AND d.fac_usrtab_key = ut.fac_usrtab_key
                       AND ut.fac_usrtab_key = ud.fac_usrtab_key
                       AND fac.safe_to_number (kw.prs_kenmerklink_waarde) = ud.fac_usrdata_key)
                         koffersysteem_status
            FROM prs_perslid p ) v,
       (
       SELECT *
         FROM hmod_v_koffersysteem
          WHERE TO_DATE (versiedatum, 'DD-MM-YYYY') =
                 (SELECT MAX (TO_DATE (versiedatum, 'DD-MM-YYYY'))
                    FROM hmod_v_koffersysteem) ) k     
 WHERE     p.prs_afdeling_key = va.prs_afdeling_key
       AND va.prs_bedrijf_key = b.prs_bedrijf_key
       AND p.prs_afdeling_key = a.prs_afdeling_key
       AND p.prs_srtperslid_key = sp.prs_srtperslid_key
       AND p.prs_perslid_key = v.prs_perslid_key
       AND p.prs_perslid_verwijder IS NULL
       AND v.formatieplaats = k.code (+)
;

-- Meldingen en Actiedatums
CREATE OR REPLACE VIEW hmod_v_rap_meldingen_bo
(
    MLD_MELDING_KEY,
    MLD_MELDING_ONDERWERP,
    BEHANDELAAR_KEY,
    BEHANDELAAR,
    MLD_STDMELDING_OMSCHRIJVING,
    MLD_STDMELDINGGROEP_NAAM,
    MLD_STATUS_OMSCHRIJVING,
    LOCATIE_PLAATS,
    LOCATIE_OMSCHRIJVING,
    MLD_MELDING_DATUM,
    MLD_MELDING_ACTIEDATUM,
    MLD_MELDING_ACTIEDATUM_B,  -- berekend voor kalenderweergave
    MLD_MELDING_EINDDATUM,
    OPDRACHTEN_AANTAL_LOPEND,
    STATUS_KALENDER          -- t.b.v. kalenderweergave
)
AS
    SELECT m.mld_melding_key,
           m.mld_melding_onderwerp,
           m.mld_melding_behandelaar_key,
           COALESCE(pb.prs_perslid_naam_friendly, '<nog geen behandelaar>')
            behandelaar,
           std.mld_stdmelding_omschrijving,
           stg.mld_stdmeldinggroep_naam,
           ms.mld_statuses_omschrijving,
           l.alg_locatie_plaats,
           l.alg_locatie_omschrijving,
           m.mld_melding_datum,
           m.mld_melding_actiedatum,
           CASE WHEN m.mld_melding_actiedatum IS NULL THEN m.mld_melding_datum
                ELSE m.mld_melding_actiedatum
                END
            mld_melding_actiedatum_b,
           m.mld_melding_einddatum,
           (SELECT count(*) FROM mld_opdr o WHERE o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key IN (5,8) ) -- uitgegeven, geaccepteerd 
             opdrachten_aantal_lopend,
           CASE 
               WHEN ms.mld_statuses_key IN (2,3,4,7) AND m.mld_melding_actiedatum IS NULL THEN 'Nog inplannen'    -- lopende melding nog inplannen
               WHEN ms.mld_statuses_key IN (2,3,4,7) AND m.mld_melding_actiedatum IS NOT NULL THEN 'Ingepland'    -- lopende melding nog inplannen
               ELSE ms.mld_statuses_omschrijving
               END status_kalender
      FROM mld_melding              m,
           mld_statuses             ms,
           prs_v_perslid_fullnames  p,  -- melder
           prs_v_perslid_fullnames  pb, -- behandelaar
           ins_tab_discipline       d,
           mld_stdmelding           std,
           mld_stdmeldinggroep      stg,
           alg_locatie              l,
           alg_district             d
     WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key
           AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie
           AND l.alg_district_key = d.alg_district_key
           AND m.mld_melding_status = ms.mld_statuses_key
           AND m.prs_perslid_key = p.prs_perslid_key(+)
           AND m.mld_melding_behandelaar_key = pb.prs_perslid_key (+)
           AND std.mld_stdmeldinggroep_key = stg.mld_stdmeldinggroep_key (+)
           ;

-- Tbv calenderview op actiedatum vanuit Meldingen
CREATE OR REPLACE VIEW hmod_v_cal_meldingen_bo
(
 USER_KEY,
 TITLE,
 VAN,
 TOT,
 ITEM_KEY,
 COLOR,
 TEXTCOLOR,
 BEHANDELAAR,
 ADRES,
 STATUS_KALENDER,
 MLD_STDMELDINGGROEP_NAAM
)
AS
SELECT behandelaar_key,
       ' - M' || mld_melding_key || ' - ' || mld_melding_onderwerp || CHR(10)
          || locatie_plaats || ' - ' || locatie_omschrijving || CHR(10)
          || CASE WHEN mld_melding_actiedatum IS NOT NULL THEN 'Van ' || TO_CHAR(mld_melding_actiedatum_b) || ' tot ...........' || CHR(10) ELSE '' || CHR(10) END || CHR(10)
          || 'Einddatum melding: ' || TO_CHAR(mld_melding_einddatum, 'dd-mm-yyyy')  || CHR(10) 
          || 'Behandelaar: ' || behandelaar
          || CASE WHEN opdrachten_aantal_lopend >0 THEN CHR(10) || 'Lopende opdrachten:' || TO_CHAR(opdrachten_aantal_lopend) || 'x' ELSE '' END
         title,
       mld_melding_actiedatum_b
        van,
       mld_melding_actiedatum_b + 2/24
        tot,
       mld_melding_key,
       DECODE (status_kalender,
                   'Afgewezen', '#C0C0C0',                                   -- grijs
                   'Afgemeld', '#C0C0C0',                                    -- grijs
                   'Nog inplannen', '#f58a20',                               -- oranje
                   'Ingepland', '#20b2f5',                                   -- lichtblauw
                               '#0000FF')
         color, 
       DECODE (status_kalender,
                   'Afgewezen', '#bf0b3b',                                   -- rood
                   'Afgemeld', '#000000',                                    -- zwart
                   'Nog inplannen', '#FFFFFF',                               -- wit,
                   'Ingepland', '#FFFFFF',
                                '#000000')
         textcolor,
       behandelaar,
       locatie_plaats || ' - ' || locatie_omschrijving
         adres,
       status_kalender,
       mld_stdmeldinggroep_naam
FROM hmod_v_rap_meldingen_bo
ORDER BY mld_melding_actiedatum ;

-- Opdrachten en Geplande aanvang
--- uit storingen en service-aanvragen
CREATE OR REPLACE VIEW hmod_v_rap_opdrachten
(
    INTERN,
    TYPE,
    MLD_OPDR_KEY,
    MLD_UITVOERENDE_KEY,
    OPDRACHTNR,
    STATUS,
    MELDING,
    BEHANDELAAR,
    LOCATIE_PLAATS,
    LOCATIE_OMSCHRIJVING,
    OPDRACHT_AANMAAKDATUM,
    GEPLANDE_AANVANG,
    GEPLANDE_AANVANG_B,     -- berekend voor kalenderweergave
    GEPLANDE_EINDDATUM,
    GEPLANDE_EINDDATUM_B,   -- berekend voor kalenderweergave
    OPDRACHT_EINDDATUM,
    MELDING_EINDDATUM,
    OMSCHRIJVING,
    PRS_PERSLID_KEY,
    NAAM_UITVOERDER,
    UREN_BESTEED,
    AFMELD_DATUM,
    OPDRACHT_TYPE,
    TD_NAAM,
    PRIORITEIT,
    STATUS_KALENDER,          -- t.b.v. kalenderweergave
    ACTIE_CODE_OPDRACHT,
    FCLT_3D_DISCIPLINE_KEY,   -- vakgroep_key
    VAKGROEP,
    VAKGROEPTYPE
)
AS
    SELECT mu.intern,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN 'Poule-opdracht'
               WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN 'Klus-opdracht'
               WHEN mu.intern = 0 THEN 'Externe opdracht'
               ELSE '<?>'
           END
               TYPE,
           o.mld_opdr_key,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN mu.mld_uitvoerende_key
               WHEN mu.TYPE = 'P' AND mu.intern = 1  THEN mu.mld_uitvoerende_key
               WHEN mu.intern = 0 THEN mu.mld_uitvoerende_key
               ELSE NULL
           END
               mld_uitvoerende_key,
              TO_CHAR (o.mld_melding_key)
           || '/'
           || o.mld_opdr_bedrijfopdr_volgnr
               opdrachtnummer,
           DECODE (
               os.mld_statusopdr_key,
               8, DECODE (o.mld_opdr_halted,
                          1, 'Onderbroken',
                          os.mld_statusopdr_omschrijving),
               os.mld_statusopdr_omschrijving)
               status,
           std.mld_stdmelding_omschrijving,
           COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
            behandelaar,
           l.alg_locatie_plaats,
           l.alg_locatie_omschrijving,
           o.mld_opdr_datumbegin,
           o.mld_opdr_plandatum
            geplande_aanvang,
           CASE WHEN o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum ELSE o.mld_opdr_datumbegin END 
             geplande_aanvang_b,
           o.mld_opdr_plandatum2
            geplande_einddatum,
           CASE WHEN o.mld_opdr_plandatum2 IS NOT NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum2
                WHEN o.mld_opdr_plandatum2 IS NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum + 2/24
                ELSE o.mld_opdr_datumbegin + 2/24
                END
             geplande_einddatum_b,
           o.mld_opdr_einddatum,
           m.mld_melding_einddatum,
           TRIM (
                  REGEXP_REPLACE (
                      REGEXP_SUBSTR (o.mld_opdr_omschrijving,
                                     '(([^ ]*)( |$)*){10}'),
                      '[[:space:]]',
                      ' '))
            || '...'
            omschrijving,
           p.prs_perslid_key,
           mu.naam
            naam_uitvoerder,
           (SELECT ko.mld_kenmerkopdr_waarde
              FROM mld_kenmerkopdr ko
             WHERE     ko.mld_opdr_key = o.mld_opdr_key
                   AND ko.mld_kenmerk_key = 203)        -- kenmerk Uren_besteed
             uren_besteed,
           (SELECT MAX (ft.fac_tracking_datum)
              FROM fac_tracking ft
             WHERE     ft.fac_tracking_refkey = o.mld_opdr_key
                   AND ft.fac_srtnotificatie_key = 78)  -- ORDAFM
             afmeld_datum, 
           ot.mld_typeopdr_omschrijving,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
               WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN mu.naam
               ELSE ''
               END td_naam,
           CASE WHEN mu.intern = 1 THEN COALESCE(v.prioriteit,'3 - NORMAAL')
                ELSE 'nvt'
                END
            prioriteit,
           CASE 
               WHEN os.mld_statusopdr_omschrijving = 'Afgemeld' THEN 'Afgemeld'
               WHEN os.mld_statusopdr_omschrijving = 'Afgewezen' THEN 'Afgewezen'
               WHEN mu.intern = 1 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NULL THEN 'Nog inplannen'
               WHEN mu.intern = 1 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NOT NULL THEN 'Ingepland'
               WHEN mu.intern = 0 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NULL THEN 'Nog niet bevestigd'
               WHEN mu.intern = 0 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NOT NULL THEN 'Bevestigd'
               ELSE ''
               END status_kalender,
           CASE WHEN o.mld_opdr_actiecode = 1 THEN 'Bij uitvoerder (1)'
                WHEN o.mld_opdr_actiecode = 4 THEN 'Bij uitvoerder (4)'  
                WHEN o.mld_opdr_actiecode = 129 THEN 'Bij backoffice'
                ELSE 'Bij uitvoerder (0)'
              END
             actie_code_opdracht,  
           d.ins_discipline_key,
           d.ins_discipline_omschrijving,
           sd.ins_srtdiscipline_omschrijving
      FROM mld_opdr                 o,
           mld_melding              m,
           mld_typeopdr             ot,
           prs_v_perslid_fullnames  p,
           ins_tab_discipline       d,
           ins_srtdiscipline        sd,
           mld_stdmelding           std,
           alg_locatie              l,
           alg_district             di,
           mld_v_uitvoerende        mu,
           mld_statusopdr           os,
           (
            SELECT ko.mld_opdr_key, ud.fac_usrdata_code || ' - ' || ud.fac_usrdata_omschr prioriteit
              FROM mld_kenmerkopdr ko, fac_usrdata ud
             WHERE fac.safe_to_number(ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key
                   AND fac_usrtab_key = 641             -- keuzelijst eigen tabel Prioriteit 
                   AND ko.mld_kenmerk_key IN (3881, 3901)         -- kenmerk Prioriteit
                   ) v          
     WHERE     o.mld_melding_key = m.mld_melding_key(+)
           AND o.prs_perslid_key = p.prs_perslid_key(+)
           AND o.mld_typeopdr_key = ot.mld_typeopdr_key
           AND ot.mld_typeopdr_isofferte = 0          -- Alleen werkopdrachten
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key
           AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
           AND sd.ins_srtdiscipline_key IN (22, 23) -- Storingen en Serviceaanvragen
           AND m.mld_alg_locatie_key = l.alg_locatie_key (+)
           AND l.alg_district_key = di.alg_district_key (+)
           AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
           AND os.mld_statusopdr_key = o.mld_statusopdr_key
           AND o.mld_opdr_key = v.mld_opdr_key(+);

-- Tbv calenderview vanuit Opdrachten - geplande aanvang
CREATE OR REPLACE VIEW hmod_v_cal_opdrachten
(
 USER_KEY,
 TITLE,
 VAN,
 TOT,
 ITEM_KEY,
 COLOR,
 TEXTCOLOR,
 NAAM_UITVOERRDER,
 LOCATIE_PLAATS,
 STATUS_KALENDER,
 INTERN,
 OPDRACHT_TYPE
)
AS 
SELECT mld_uitvoerende_key,
       ' - ' || opdrachtnr || CHR(10)
             || naam_uitvoerder || CHR(10)
             || locatie_omschrijving || CHR(10)
             || 'Status: ' || status_kalender || CHR(10) 
             || CASE WHEN geplande_einddatum IS NOT NULL THEN DECODE(intern, 1, 'Ingepland tot ', 'Bevestigd voor ') || TO_CHAR(geplande_einddatum_b) || CHR(10) ELSE '' END
             || CASE WHEN intern = 1 THEN CHR(10) || 'Prio: ' || prioriteit ELSE '' END
           title,
       geplande_aanvang_b
        van,
       geplande_einddatum_b
        tot,
       mld_opdr_key,
       DECODE (intern, 1,
                       DECODE (status_kalender,
                               'Afgewezen', '#C0C0C0',                                   -- grijs
                               'Afgemeld', '#C0C0C0',                                    -- grijs
                               'Nog inplannen', '#f58a20',                               -- oranje
                               'Ingepland', '#20b2f5',                                   -- lichtblauw
                               '#0000FF'),
                       0,
                       DECODE (status_kalender,
                               'Afgewezen', '#C0C0C0',                                   -- grijs
                               'Afgemeld', '#C0C0C0',                                    -- grijs
                               'Nog niet bevestigd', '#F5ED5D',                          -- lichtgeel
                               'Bevestigd', '#DED304',                                   -- donkergeel
                               '#0000FF'),
                       '#0000FF'
                         ) color,                                         -- 
       DECODE (intern, 1,
                       DECODE (status_kalender,
                               'Afgewezen', '#bf0b3b',                                   -- rood
                               'Afgemeld', '#000000',                                    -- zwart
                               'Nog inplannen', '#FFFFFF',                               -- wit,
                               'Ingepland',                                   
                                         DECODE (LOWER(prioriteit),
                                                  '3 - normaal', '#FFFFFF',              -- wit
                                                  '4 - laag',  '#FFFFFF',                -- wit
                                                  '2 - hoog',  '#f58a20',                -- oranje
                                                  '1 - kritiek',  '#bf0b3b',             -- rood
                                                  '#000000'),
                               '#000000'),
                        0,
                        DECODE (status_kalender,
                               'Afgewezen', '#bf0b3b',                                   -- rood
                               'Afgemeld', '#000000',                                    -- zwart
                               'Nog niet bevestigd', '#000000',                          -- zwart
                               'Bevestigd', '#000000',                                   -- zwart
                               'Toegekend', '#FFFFFF',                                   -- wit,
                               '#0000FF'),                        
                     '#000000'
                     ) textcolor,
           naam_uitvoerder,
           locatie_plaats,
           status_kalender,
           intern,
           opdracht_type
FROM hmod_v_rap_opdrachten
ORDER BY geplande_aanvang_b ; 


-- view om QR codes voor een deel te genereren
CREATE OR REPLACE VIEW hmod_v_rap_qr_deel
AS
SELECT fac_bookmark_naam,
       fac_bookmark_id,
       b.fac_bookmark_path,
       b.fac_bookmark_query,
       ins_discipline_omschrijving,
       ins_srtgroep_omschrijving,
       ins_srtdeel_omschrijving,
       ins_deel_omschrijving,
       CASE
          WHEN d.ins_discipline_key = 109 -- IT
          THEN
             (SELECT k.ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel k
               WHERE k.ins_deel_key = d.ins_deel_key
                     AND k.ins_kenmerk_key = 21)
                ELSE
                   NULL
            END
             serienummer,       
       DECODE (d.ins_discipline_key, 109, flx.getdomeinwaarde (61, flx.getflex('INS', 26, ins_deel_key)),  -- IT
                                     110, flx.getdomeinwaarde (61, flx.getflex('INS', 27, ins_deel_key)),  -- Inventaris
                                     'Nee')
             gestickerd,
       DECODE(flx.getflex ('INS', 582, d.ins_deel_key), '1', 'ja', 'nee')
        bekend_bij_microsoft,
       TO_DATE(flx.getflex ('INS', 583, d.ins_deel_key),'dd-mm-yyyy')
        datum_configuratie,
       CASE WHEN alg_locatie_key IS NOT NULL THEN 'Locatiegebonden'
            WHEN d.prs_perslid_key IS NOT NULL THEN 'Persoonsgebonden'
            ELSE 'Overig'
            END type,
       alg_locatie_key,
       alg_gebouw_omschrijving,
       d.prs_perslid_key,
       prs_perslid_volnaam,
       ins_deel_aanmaak,
       ins_deel_key
  FROM fac_bookmark b, ins_v_deel_gegevens d
 WHERE fac_bookmark_expire IS NULL
       AND fac_bookmark_id = 'QPgqz69zEKMLncP6'; 

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