-- $Id$

SET ECHO ON
SET HEADING ON
SET LINESIZE 2048
SET TERMOUT ON
SET VERIFY ON
SET pagesize 0
SET FEEDBACK ON



set echo on
set autocommit off
show user

update fip_perslid_sap
set    fip_error = IMPORTROW
                        ,fip_error2 = ''
      ,ALG_LOCATIE_CODE = LTRIM(RTRIM(ALG_LOCATIE_CODE))
      ,ALG_GEBOUW_CODE = LTRIM(RTRIM(ALG_GEBOUW_CODE))
      ,ALG_RUIMTE_NR = LTRIM(RTRIM(ALG_RUIMTE_NR))
      ,PRS_WERKPLEK_OMSCHRIJVING = LTRIM(RTRIM(PRS_WERKPLEK_OMSCHRIJVING))
      ,PRS_AFDELING_NAAM = LTRIM(RTRIM(PRS_AFDELING_NAAM))
      ,PRS_PERSLID_NAAM = LTRIM(RTRIM(PRS_PERSLID_NAAM))
      ,TUSSENVOEGSEL = LTRIM(RTRIM(TUSSENVOEGSEL))
      ,PRS_PERSLID_VOORLETTERS = LTRIM(RTRIM(PRS_PERSLID_VOORLETTERS))
      ,PRS_PERSLID_VOORNAAM = LTRIM(RTRIM(PRS_PERSLID_VOORNAAM))
      ,PRS_PERSLID_INITIALEN = LTRIM(RTRIM(PRS_PERSLID_INITIALEN))
      ,PRS_PERSLID_TELEFOONNR = LTRIM(RTRIM(PRS_PERSLID_TELEFOONNR))
      ,PRS_SRTPERSLID_OMSCHRIJVING = LTRIM(RTRIM(PRS_SRTPERSLID_OMSCHRIJVING))
      ,PRS_PERSLID_NR = LTRIM(RTRIM(PRS_PERSLID_NR))
      ,PRS_PERSLID_TITEL = LTRIM(RTRIM(PRS_PERSLID_TITEL))
      ,PRS_PERSLID_OSLOGIN = LTRIM(RTRIM(PRS_PERSLID_OSLOGIN))
      ,PRS_PERSLID_WACHTWOORD = LTRIM(RTRIM(PRS_PERSLID_WACHTWOORD))
      ,PERSLID_EMAIL = LTRIM(RTRIM(PERSLID_EMAIL))
      ,KAMERNUMMER = LTRIM(RTRIM(KAMERNUMMER))
      ,UITDIENST = LTRIM(RTRIM(UITDIENST));

-- PRS_PERSLID
DECLARE
  CURSOR c1 IS
    SELECT   *
    FROM     fip_perslid_sap ps
    WHERE    not exists (select 'x'
                          from   prs_perslid p
                          where  upper(ltrim(rtrim(ps.prs_perslid_nr))) = upper(ltrim(rtrim(p.prs_perslid_nr)))
                            and    ps.uitdienst = 'UD'
                            and    p.prs_perslid_verwijder is not null
                            and    rownum = 1)
    ORDER BY ps.fip_perslid_sap_key;
  rec c1%rowtype;
  teller integer;
  locatie_key number(10);
  alg_gebouw number(10);
  verdieping_key number(10);
  afdeling_key number(10);
  srtperslid_key number(10);
  perslid_naam varchar2(30);
  errormsg varchar2(1024);
  errormsg2 varchar2(1024);
  warningmsg varchar2(1024);
  ccount number(10);
  perslid_key number(10);
  update_record number(1);
  werkplek_key number(10);
  werkplek_key_old number(10);
  ncount number(10);
  ruimte_key_new number(10);
  ruimte_key_old number(10);
  gebouw_code varchar2(10);
  verdieping_code varchar2(10);
  werkplek_volgnr number(3);
  ruimte_nr varchar2(10);
  update_action varchar2(3);
  werkplek_new boolean;
  update_msg varchar2(1024);
  prs_perslid_tussenvoegsel_old varchar2(15);
  afdeling_naam_old varchar2(10);
  afdeling_naam_new varchar2(10);
  prs_perslid_naam_old varchar2(30);
  prs_perslid_voorletters_old varchar2(10);
  prs_perslid_voornaam_old varchar2(30);
  prs_perslid_telefoonnr_old varchar2(15);
  prs_perslid_oslogin_old varchar2(30);
  kamernummer_old varchar(64);
  kamernummer_new varchar(64);
  email_old varchar2(50);
  groep_key number(10);
BEGIN

  OPEN c1;
  IF c1%ISOPEN THEN

    teller := 0;

    SELECT fac_groep_key
    INTO   groep_key
    FROM   fac_groep
    WHERE  fac_groep_upper = 'DEFAULT';

    LOOP
      BEGIN

-- insert into fip_sandra values('Volgende persoon ....',sysdate);
commit;

        errorMsg := 'Volgende persoon ....';
        errorMsg2 := '';
        warningmsg := '';

        FETCH c1 INTO rec;
        EXIT WHEN c1%NOTFOUND;
        teller := teller + 1;

        -- Insert or Update?
        SELECT count(*)
        INTO   update_record
        FROM   prs_v_aanwezigperslid
        WHERE  upper(ltrim(rtrim(prs_perslid_nr))) = upper(ltrim(rtrim(rec.prs_perslid_nr)));

        update_msg := 'Personeelsnummer<' || upper(ltrim(rtrim(rec.prs_perslid_nr))) || '>';

        IF update_record = 0 THEN
          -- Bij INSERT mag de oslogin nog niet voorkomen
          select count(*)
          into   ncount
          from   prs_v_aanwezigperslid
          where  upper(prs_perslid_oslogin) = upper(rec.prs_perslid_oslogin);

          errorMsg2 := ' (error : prs_perslid_oslogin niet uniek)';



        END IF;

        IF update_record = 1 THEN
          SELECT prs_perslid_key
          INTO   perslid_key
          FROM   prs_v_aanwezigperslid
          WHERE  upper(ltrim(rtrim(prs_perslid_nr))) = upper(ltrim(rtrim(rec.prs_perslid_nr)));
          update_msg := update_msg || ' UPDATE';

-- insert into fip_sandra values('Dit is een update ....',sysdate);
-- commit;

        ELSE
          perslid_key := 0;
          update_msg := update_msg || ' INSERT';

-- insert into fip_sandra values('Dit is een insert ....',sysdate);
-- commit;

        END IF;

        errorMsg := ' (error : bepaling nieuwe afdeling)';

-- insert into fip_sandra values('bepaling nieuwe afdeling ....',sysdate);
-- commit;


        SELECT prs_afdeling_key, upper(prs_afdeling_naam)
        INTO   afdeling_key, afdeling_naam_new
        FROM   prs_afdeling
        WHERE  UPPER(PRS_AFDELING_NAAM) = UPPER(rec.PRS_AFDELING_NAAM)
        AND    prs_afdeling_verwijder IS NULL;

        errorMsg := ' (error : bepaling oude afdeling)';

-- insert into fip_sandra values('bepaling oude afdeling ....',sysdate);
-- commit;


        IF perslid_key = 0 THEN
          afdeling_naam_old := '';
        ELSE
          SELECT upper(prs_afdeling_naam)
          INTO   afdeling_naam_old
          FROM   prs_v_aanwezigperslid A, prs_afdeling B
          WHERE  A.prs_afdeling_key = B.prs_afdeling_key
          AND    A.prs_perslid_key = perslid_key;
        END IF;

        IF afdeling_naam_old <> afdeling_naam_new THEN
          update_msg := update_msg || ' ***Practice:<' || afdeling_naam_old || '> wordt <' || afdeling_naam_new || '>';
        END IF;

-- insert into fip_sandra values('bepalen ruimte a.d.h.v. KAMERNUMMER t.b.v. werkplek ....',sysdate);
-- commit;

        errorMsg := ' (error : bepalen ruimte a.d.h.v. KAMERNUMMER t.b.v. werkplek)';

        IF rec.KAMERNUMMER IS NULL THEN
          -- Personen zonder kamernummer --> srtfunctie == 'FlEXIBEL'

          SELECT PRS_SRTPERSLID_KEY
          INTO   SRTPERSLID_KEY
          FROM   PRS_V_AANWEZIGSRTPERSLID
          WHERE  UPPER(PRS_SRTPERSLID_OMSCHRIJVING) = 'FLEXIBEL';

          ruimte_key_new := 0;

        ELSE

          errorMsg := ' (error : bepalen functie van de persoon)';

          -- Personen zonder kamernummer --> srtfunctie == 'VAST'
          SELECT PRS_SRTPERSLID_KEY
          INTO   SRTPERSLID_KEY
          FROM   PRS_V_AANWEZIGSRTPERSLID
          WHERE  UPPER(PRS_SRTPERSLID_OMSCHRIJVING) = 'VAST';

          gebouw_code := '';
          verdieping_code := '';
          ruimte_nr := '';

          errorMsg := ' (error : bepalen gebouw/verdieping/ruimte a.d.h.v. KAMERNUMMER <' || rec.KAMERNUMMER || ')';

          IF upper(SUBSTR(rec.KAMERNUMMER, 1, 1)) in ('1','2','G','V','W') THEN
            -- Daltonlaan 200, 300
            gebouw_code := upper(SUBSTR(rec.KAMERNUMMER, 1, 1));
            verdieping_code := SUBSTR(rec.KAMERNUMMER, 2, 1);
            ruimte_nr := SUBSTR(rec.KAMERNUMMER, 3, 2);
          END IF;

          IF upper(SUBSTR(rec.KAMERNUMMER, 1, 2)) in ('1.','2.') THEN
            -- Daltonlaan 200, 300
            gebouw_code := upper(SUBSTR(rec.KAMERNUMMER, 1, 1));
            verdieping_code := SUBSTR(rec.KAMERNUMMER, 3, 2);
            ruimte_nr := SUBSTR(rec.KAMERNUMMER, 6, 2);
          END IF;

          IF upper(SUBSTR(rec.KAMERNUMMER, 1, 1)) in ('A','B','C','M','N','Z') THEN
            -- Hoofdgebouw toren A, B, Congres gebouw, Gebouw Midden, Gebouw Noord, Gebouw Zuid
            gebouw_code := upper(SUBSTR(rec.KAMERNUMMER, 1, 1));
            verdieping_code := SUBSTR(rec.KAMERNUMMER, 2, 2);
            ruimte_nr := SUBSTR(rec.KAMERNUMMER, 4, 2);
          END IF;

          IF upper(SUBSTR(rec.KAMERNUMMER, 1, 2)) in ('A.','B.','C.','M.','N.','Z.') THEN
            -- Daltonlaan 200, 300
            gebouw_code := upper(SUBSTR(rec.KAMERNUMMER, 1, 1));
            verdieping_code := SUBSTR(rec.KAMERNUMMER, 3, 2);
            ruimte_nr := SUBSTR(rec.KAMERNUMMER, 6, 2);
          END IF;

          SELECT count(g.alg_ruimte_key)
          INTO   ncount
          FROM   alg_v_allonrgoed_gegevens g, alg_ruimte r
          WHERE  g.alg_gebouw_code = gebouw_code
          AND    g.alg_verdieping_code = verdieping_code
          AND    g.alg_ruimte_nr = ruimte_nr
          AND            r.alg_ruimte_key = g.alg_ruimte_key
          AND            r.alg_ruimte_verwijder is null;

          IF ncount = 1 THEN

                  SELECT g.alg_ruimte_key
                  INTO   ruimte_key_new
                  FROM   alg_v_allonrgoed_gegevens g, alg_ruimte r
                  WHERE  g.alg_gebouw_code = gebouw_code
                  AND    g.alg_verdieping_code = verdieping_code
                  AND    g.alg_ruimte_nr = ruimte_nr
                  AND            r.alg_ruimte_key = g.alg_ruimte_key
                  AND            r.alg_ruimte_verwijder is null;

          ELSE

            -- Behandelen als persoon zonder werkplek indien ruimtenummer niet gevonden n Facilitor CGEYLOG#
            SELECT PRS_SRTPERSLID_KEY
            INTO   SRTPERSLID_KEY
            FROM   PRS_V_AANWEZIGSRTPERSLID
            WHERE  UPPER(PRS_SRTPERSLID_OMSCHRIJVING) = 'FLEXIBEL';

            ruimte_key_new := 0;

            warningmsg := warningmsg || ' (warning : bepalen gebouw/verdieping/ruimte a.d.h.v. KAMERNUMMER <' || rec.KAMERNUMMER || ')';

          END IF;


        END IF;

-- insert into fip_sandra values('bepalen werkplek ....',sysdate);
-- commit;

        errorMsg := ' (error : bepalen werkplek)';

        werkplek_key := 0;
        werkplek_key_old := 0;
        werkplek_new := TRUE;

        IF perslid_key = 0 THEN
          -- Een toe te voegen persoon heeft nog geen werkplek
          ruimte_key_old := 0;
        ELSE
          -- Heeft de te wijzigen persoon een werkplek?
          SELECT count(*)
          INTO   nCount
          FROM   prs_werkplek
          WHERE  prs_werkplek_key in (
            SELECT prs_werkplek_key
            from   prs_perslidwerkplek
            where  prs_perslid_key = perslid_key);

          IF nCount = 1 THEN
            -- Persoon is gekoppeld aan 1 werkplek
            SELECT prs_werkplek_key, prs_alg_ruimte_key
            INTO   werkplek_key_old, ruimte_key_old
            FROM   prs_werkplek
            WHERE  prs_werkplek_key in (
              SELECT prs_werkplek_key
              from   prs_perslidwerkplek
              where  prs_perslid_key = perslid_key)
            AND    prs_werkplek_module = 'PRR';
          ELSE
            IF nCount = 0 THEN
              -- Persoon is gekoppeld aan 0 werkplekken
              ruimte_key_old := 0;
            ELSE
              -- Persoon is gekoppled aan meer dan 1 werkplek
              -- Centrale vraag: moet er een nieuwe werkplek aangemaakt worden?
              SELECT count(*)
              INTO   nCount
              FROM   prs_werkplek
              WHERE  prs_werkplek_key in (
                SELECT A.prs_werkplek_key
                from   prs_perslidwerkplek A, prs_werkplek B
                where  A.prs_perslid_key = perslid_key
                and    A.prs_werkplek_key = B.prs_werkplek_key
                and    B.prs_alg_ruimte_key = ruimte_key_new)
              AND    prs_werkplek_module = 'PRR';

              IF nCount > 0 THEN
                -- Nee, er hoeft geen nieuwe werkplek aangemaakt te worden
                ruimte_key_old := 0;
                werkplek_new := FALSE;
              ELSE
                -- Ja, er moet een nieuwe werkplek aangemaakt worden
                ruimte_key_old := 0;
              END IF;

            END IF;
          END IF;
        END IF;

-- insert into fip_sandra values('verwijderen oude werkplek indien van toepassing ....',sysdate);
-- commit;


        errorMsg := ' (error : verwijderen oude werkplek indien van toepassing)';

        IF (ruimte_key_old <> ruimte_key_new) AND (werkplek_key_old > 0) THEN

          DELETE
          FROM    prs_perslidwerkplek
          WHERE   prs_perslid_key = perslid_key
          AND     prs_werkplek_key = werkplek_key_old;

          DELETE
          FROM    prs_werkplek
          WHERE   prs_werkplek_key = werkplek_key_old;

        END IF;

        errorMsg := ' (error : bepaling naam + tussenvoegsel)';

-- insert into fip_sandra values('bepaling naam + tussenvoegsel ....',sysdate);
-- commit;


-- CAPG#116        IF rec.TUSSENVOEGSEL IS NULL THEN
          PERSLID_NAAM := SUBSTR(rec.PRS_PERSLID_NAAM,1,30);
-- CAPG#116        ELSE
-- CAPG#116          PERSLID_NAAM := SUBSTR(rec.PRS_PERSLID_NAAM || ', ' || rec.TUSSENVOEGSEL,1,30);
-- CAPG#116        END IF;

        IF perslid_key = 0 THEN
          prs_perslid_naam_old := '';
        ELSE
          SELECT prs_perslid_voorletters
          INTO   prs_perslid_voorletters_old
          FROM   prs_v_aanwezigperslid
          WHERE  prs_perslid_key = perslid_key;
        END IF;
        prs_perslid_voorletters_old := '';
        prs_perslid_voornaam_old := '';
        prs_perslid_telefoonnr_old := '';
        prs_perslid_oslogin_old := '';
        email_old := '';

        IF perslid_key = 0 THEN

-- insert into fip_sandra values('daadwerkelijk toevoegen {insert} persoon ....',sysdate);
-- commit;

          IF errorMsg2 = '' THEN
            errorMsg := ' (error : daadwerkelijk toevoegen {insert} persoon)';
          ELSE
            errorMsg := ' (error : daadwerkelijk toevoegen {insert} persoon)';
          END IF;

          insert into PRS_PERSLID
          (PRS_PERSLID_MODULE
          ,PRS_SRTPERSLID_KEY
          ,PRS_AFDELING_KEY
          ,PRS_PERSLID_NAAM
          ,PRS_PERSLID_VOORLETTERS
          ,PRS_PERSLID_VOORNAAM
          ,PRS_PERSLID_TUSSENVOEGSEL
          ,PRS_PERSLID_INITIALEN
          ,PRS_PERSLID_TELEFOONNR
          ,PRS_PERSLID_NR
          ,PRS_PERSLID_TITEL
          ,PRS_PERSLID_OSLOGIN
          ,PRS_PERSLID_EMAIL
          )
           values
          ('PRS'
          ,SRTPERSLID_KEY
          ,AFDELING_KEY
          ,PERSLID_NAAM
          ,rec.PRS_PERSLID_VOORLETTERS
          ,rec.PRS_PERSLID_VOORNAAM
          ,SUBSTR(rec.TUSSENVOEGSEL,1,15)
          ,rec.PRS_PERSLID_INITIALEN
          ,rec.PRS_PERSLID_TELEFOONNR
          ,rec.PRS_PERSLID_NR
          ,rec.PRS_PERSLID_TITEL
          ,rec.PRS_PERSLID_OSLOGIN
          ,rec.PERSLID_EMAIL
          );

          SELECT max(prs_perslid_key)
          INTO   perslid_key
          FROM   prs_perslid;

        ELSE

-- insert into fip_sandra values('daadwerkelijk wijzigen {update} persoon ....',sysdate);
-- commit;

          errorMsg := ' (error : daadwerkelijk wijzigen {update} persoon)';

          SELECT prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_perslid_telefoonnr, prs_perslid_oslogin, prs_perslid_email
          INTO   prs_perslid_naam_old, prs_perslid_tussenvoegsel_old, prs_perslid_voorletters_old, prs_perslid_voornaam_old, prs_perslid_telefoonnr_old, prs_perslid_oslogin_old, email_old
          FROM   PRS_V_AANWEZIGPERSLID
          WHERE  prs_perslid_key = perslid_key;

          update PRS_V_AANWEZIGPERSLID
          set
             PRS_SRTPERSLID_KEY      = SRTPERSLID_KEY
            ,PRS_AFDELING_KEY        = AFDELING_KEY
            ,PRS_PERSLID_NAAM        = PERSLID_NAAM
            ,PRS_PERSLID_VOORLETTERS = rec.PRS_PERSLID_VOORLETTERS
            ,PRS_PERSLID_VOORNAAM    = rec.PRS_PERSLID_VOORNAAM
            ,PRS_PERSLID_TUSSENVOEGSEL = SUBSTR(rec.TUSSENVOEGSEL,1,15)
            ,PRS_PERSLID_INITIALEN   = rec.PRS_PERSLID_INITIALEN
            ,PRS_PERSLID_TELEFOONNR  = rec.PRS_PERSLID_TELEFOONNR
            ,PRS_PERSLID_NR          = rec.PRS_PERSLID_NR
            ,PRS_PERSLID_TITEL       = rec.PRS_PERSLID_TITEL
            ,PRS_PERSLID_OSLOGIN     = rec.PRS_PERSLID_OSLOGIN
            ,PRS_PERSLID_EMAIL       = rec.PERSLID_EMAIL
          where prs_perslid_key = perslid_key;

        END IF;

-- insert into fip_sandra values('aanmaken gedeelte logging ....',sysdate);
-- commit;

        errorMsg := ' (error : aanmaken gedeelte logging)';

        IF upper(prs_perslid_naam_old) <> upper(PERSLID_NAAM) THEN
          update_msg := update_msg || ' ***Achternaam:<' || prs_perslid_naam_old || '> wordt <' || PERSLID_NAAM || '>';
        END IF;

        IF upper(prs_perslid_tussenvoegsel_old) <> upper(SUBSTR(rec.TUSSENVOEGSEL,1,15)) THEN
          update_msg := update_msg || ' ***Tussenvoegsel:<' || prs_perslid_tussenvoegsel_old || '> wordt <' || SUBSTR(rec.TUSSENVOEGSEL,1,15) || '>';
        END IF;

        IF upper(prs_perslid_voorletters_old) <> upper(rec.PRS_PERSLID_VOORLETTERS) THEN
          update_msg := update_msg || ' ***Voorletters:<' || prs_perslid_voorletters_old || '> wordt <' || rec.PRS_PERSLID_VOORLETTERS || '>';
        END IF;

        IF upper(prs_perslid_voornaam_old) <> upper(rec.PRS_PERSLID_VOORNAAM) THEN
          update_msg := update_msg || ' ***Voornaam:<' || prs_perslid_voornaam_old || '> wordt <' || rec.PRS_PERSLID_VOORNAAM || '>';
        END IF;

        IF prs_perslid_telefoonnr_old <> rec.PRS_PERSLID_TELEFOONNR THEN
          update_msg := update_msg || ' ***Toestelnummer:<' || prs_perslid_telefoonnr_old || '> wordt <' || rec.PRS_PERSLID_TELEFOONNR || '>';
        END IF;

        IF upper(prs_perslid_oslogin_old) <> upper(rec.PRS_PERSLID_OSLOGIN) THEN
          update_msg := update_msg || ' ***Loginid:<' || prs_perslid_oslogin_old || '> wordt <' || upper(rec.PRS_PERSLID_OSLOGIN) || '>';
        END IF;

        IF upper(email_old) <> upper(rec.PERSLID_EMAIL) THEN
          update_msg := update_msg || ' ***Email:<' || email_old || '> wordt <' || upper(rec.PERSLID_EMAIL) || '>';
        END IF;

-- insert into fip_sandra values('aanmaken nieuwe werkplek indien van toepassing ....',sysdate);
-- commit;


        errorMsg := ' (error : aanmaken nieuwe werkplek indien van toepassing)';

        IF ((ruimte_key_old <> ruimte_key_new) AND (ruimte_key_new > 0) AND werkplek_new)
        THEN

           SELECT count(*)
            INTO   nCount
            FROM   prs_werkplek
            WHERE  PRS_ALG_RUIMTE_KEY = ruimte_key_new;

            IF nCount = 0 THEN
              WERKPLEK_VOLGNR := 1;
            ELSE
             SELECT max(prs_werkplek_volgnr) + 1
             INTO   WERKPLEK_VOLGNR
              FROM   prs_werkplek
              WHERE  PRS_ALG_RUIMTE_KEY = ruimte_key_new;
            END IF;

           insert into PRS_WERKPLEK
            (PRS_WERKPLEK_MODULE
            ,PRS_WERKPLEK_VOLGNR
            ,PRS_WERKPLEK_OMSCHRIJVING
            ,PRS_ALG_RUIMTE_KEY
            )
             values
            ('PRR'
            ,WERKPLEK_VOLGNR
            ,SUBSTR(rec.KAMERNUMMER,1,30)
            ,ruimte_key_new
            );

            SELECT max(prs_werkplek_key)
            INTO   werkplek_key
            FROM   prs_werkplek;

           insert into PRS_PERSLIDWERKPLEK
           (prs_perslid_key
           ,prs_werkplek_key)
           values
           (PERSLID_KEY
           ,WERKPLEK_KEY);

        END IF;

        IF ruimte_key_old <> ruimte_key_new THEN

          IF ruimte_key_old > 0 THEN
            SELECT alg_gebouw_code || '-' || alg_verdieping_code || '-' || alg_ruimte_nr
            INTO   kamernummer_old
            FROM   alg_gebouw A, alg_verdieping B, alg_v_aanwezigruimte C
            WHERE  C.alg_ruimte_key = ruimte_key_old
            AND    B.alg_verdieping_key = C.alg_verdieping_key
            AND    A.alg_gebouw_key = B.alg_gebouw_key;
          ELSE
            kamernummer_old := '';
          END IF;

          IF ruimte_key_new > 0 THEN
            SELECT alg_gebouw_code || '-' || alg_verdieping_code || '-' || alg_ruimte_nr
            INTO   kamernummer_new
            FROM   alg_gebouw A, alg_verdieping B, alg_v_aanwezigruimte C
            WHERE  C.alg_ruimte_key = ruimte_key_new
            AND    B.alg_verdieping_key = C.alg_verdieping_key
            AND    A.alg_gebouw_key = B.alg_gebouw_key;
          ELSE
            kamernummer_new := '';
          END IF;

          IF werkplek_new = TRUE THEN
            update_msg := update_msg || ' ***Kamernummer:<' || kamernummer_old || '> wordt <' || kamernummer_new || '>';
          END IF;

        END IF;

        IF update_msg = '' OR update_msg is null THEN
          update_msg := '*UPDATE*!' || 'perslid_key = <' || to_char(perslid_key) || '>';
        END IF;

        IF update_record = 0 THEN

          errorMsg := ' (error : add person to group with prs_perslid_key = [' || to_char(perslid_key) || '])';

          INSERT INTO fac_gebruikersgroep(prs_perslid_key, fac_groep_key)
          VALUES (perslid_key, groep_key);

        END IF;

        update fip_perslid_sap
        set    fip_error = update_msg
        where  fip_perslid_sap_key = rec.fip_perslid_sap_key;

        -- Persoon is weer up2date. Moet deze nu "verwijderd"/"uit dienst genomen" worden?
        IF rec.UITDIENST = 'UD' THEN

          errorMsg := ' (error : bepalen of en hoeveel verplichtingen de te verwijderen persoon heeft met prs_perslid_key = [' || to_char(perslid_key) || '])';

          SELECT count(*)
          INTO   nCount
          FROM   prs_v_verplichting
          WHERE  prs_perslid_key = perslid_key;

          IF nCount = 0 THEN

            errorMsg := ' (error : de te verwijderen persoon heeft geen verplichtingen (meer) en kan verwijderd worden met prs_perslid_key = [' || to_char(perslid_key) || '])';

            update prs_perslid
            set    prs_perslid_verwijder = sysdate
            where  prs_perslid_key = perslid_key;

          ELSE

            errorMsg := ' (error : de te verwijderen persoon heeft wel verplichtingen en kan niet verwijderd worden met prs_perslid_key = [' || to_char(perslid_key) || '])';

            update prs_perslid
            set    prs_perslid_einddatum = sysdate
            where  prs_perslid_key = perslid_key;

          END IF;

        END IF;

        commit; -- Geen fouten opgetreden, rollback niet meer nodig ....

        -- Eventuele warnings loggen ...
        update fip_perslid_sap
        set    fip_error2 = warningmsg
        where  fip_perslid_sap_key = rec.fip_perslid_sap_key;

        commit; -- Logging opslaan!

      EXCEPTION WHEN OTHERS THEN
        BEGIN
          rollback; -- Eventueel verwijderde werkplek herstellen indien fout is opgestreden

          update fip_perslid_sap
          set    fip_error = importrow
          where  fip_perslid_sap_key = rec.fip_perslid_sap_key;

          update fip_perslid_sap
          set    fip_error2 = errorMsg
          where  fip_perslid_sap_key = rec.fip_perslid_sap_key;

          commit; -- Opslaan logging!!
        END;

      END;
    END LOOP;

  END IF;
  CLOSE c1;

  commit;
END;
/
