
-- $Id$
--
-- Script containing customer specific db-configuration for PCHD.

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

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
SET DEFINE OFF

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

CREATE OR REPLACE VIEW pchd_v_imp_prs_perslid_sync
(
   prs_afdeling_naam,
   prs_perslid_naam,
   prs_perslid_tussenvoegsel,
   prs_perslid_voorletters,
   prs_perslid_voornaam,
   prs_perslid_titel,
   prs_perslid_telefoonnr,
   prs_perslid_mobiel,
   prs_perslid_email,
   prs_perslid_apikey,
   prs_srtperslid_omschrijving,
   prs_perslid_nr,
   prs_perslid_oslogin,
   prs_perslid_oslogin2,
   prs_perslid_geslacht,
   prs_perslid_dienstverband
)
AS
   SELECT pg.prs_afdeling_naam,
          p.prs_perslid_naam,
          p.prs_perslid_tussenvoegsel,
          p.prs_perslid_voorletters,
          p.prs_perslid_voornaam,
          p.prs_perslid_titel,
          p.prs_perslid_telefoonnr,
          p.prs_perslid_mobiel,
          p.prs_perslid_email,
          p.prs_perslid_apikey,
          pg.prs_srtperslid_omschrijving,
          p.prs_perslid_nr,
          p.prs_perslid_oslogin,
          p.prs_perslid_oslogin2,
          p.prs_perslid_geslacht,
          p.prs_perslid_dienstverband
     FROM prs_v_perslid_gegevens pg, prs_perslid p, prs_v_afdeling a
    WHERE p.prs_perslid_key = pg.prs_perslid_key
      AND p.prs_afdeling_key = a.prs_afdeling_key
      AND a.prs_bedrijf_key = fac.getsetting ('xd_primary_bedrijfkey');


CREATE OR REPLACE VIEW pchd_v_opdrachtenfacturatie
(
   maand,
   district,
   locatie,
   vakgroeptype,
   vakgroep,
   aantal_opdrachten,
   totale_kosten_opdrachten,
   reeds_gefactureerd,
   nog_te_verwachten_kosten
)
AS
     SELECT TO_CHAR (mo.mld_opdr_datumbegin, 'YYYY-MM'),
            d.alg_district_omschrijving,
			l.alg_locatie_omschrijving,
            insr.ins_srtdiscipline_omschrijving,
            md.ins_discipline_omschrijving,
            COUNT (mo.mld_opdr_key),
            SUM (mo.mld_opdr_kosten),
            SUM (ff.fin_factuur_totaal),
            SUM (mo.mld_opdr_kosten) - SUM (ff.fin_factuur_totaal)
       FROM ins_srtdiscipline insr,
            mld_discipline md,
            mld_opdr mo,
            mld_melding mm,
            mld_stdmelding mstd,
            fin_factuur ff,
            alg_locatie l,
			alg_district d
      WHERE insr.ins_srtdiscipline_key = md.ins_srtdiscipline_key
            AND md.ins_discipline_key = mstd.mld_ins_discipline_key
            AND mm.mld_stdmelding_key = mstd.mld_stdmelding_key
            AND mm.mld_melding_key = mo.mld_melding_key
            AND mo.mld_opdr_key = ff.mld_opdr_key
            AND l.alg_locatie_key = mm.mld_alg_locatie_key
			and d.alg_district_key = l.alg_district_key
            AND ff.fin_factuur_verwijder IS NULL
            AND ff.fin_factuur_statuses_key IN (6, 7) -- Ingevoerd, Incompleet, Akkoord, Verwerkt
            AND mo.mld_statusopdr_key NOT IN (1, 2)
   GROUP BY TO_CHAR (mo.mld_opdr_datumbegin, 'YYYY-MM'),
            l.alg_locatie_omschrijving,
            insr.ins_srtdiscipline_omschrijving,
            md.ins_discipline_omschrijving,
			d.alg_district_omschrijving;



--View om te zien welke kostenplaatsen er aan een locatie gekoppeld zijn.
--PCHD#55359
CREATE OR REPLACE  VIEW PCHD_V_RAP_KOSTENPLAATS_LOC
(
locatie_omschrijving,
kostenplaats_key,
kostenplaats_omschrijving
)
AS
SELECT  DISTINCT  l.alg_locatie_omschrijving , prsa.prs_kostenplaats_key, kost.prs_kostenplaats_omschrijving
  FROM alg_locatie         l,
       alg_gebouw          g,
       alg_verdieping      v,
       alg_ruimte          r,
       prs_ruimteafdeling  ra,
       prs_afdeling        prsa,
       prs_kostenplaats    kost
       WHERE  g.alg_locatie_key = l.alg_locatie_key(+)
       AND v.alg_gebouw_key (+) = g.alg_gebouw_key
       AND r.alg_verdieping_key(+) = v.alg_verdieping_key
       AND r.ALG_RUIMTE_KEY   = ra.ALG_RUIMTE_KEY (+)
       AND prsa.PRS_AFDELING_KEY = ra.PRS_AFDELING_KEY
       AND prsa.prs_kostenplaats_key = kost.prs_kostenplaats_key;



-- draft versie van PPI rapportage voor truckparking
CREATE OR REPLACE VIEW pchd_v_rap_mld_truckparking
(
   hide_f_ts,
   fclt_d_datum,
   tijd,
   fclt_f_locatie,
   vakgroep,
   melding,
   melder,
   omschrijving,
   afhandeling,
   datum_tijd_tht,
   datum_tijd_afgemeld,
   telaat
)
AS
   SELECT TO_CHAR (mld_melding_datum, 'yyyymmddhh24mi'),
          TO_CHAR (mld_melding_datum, 'dd-mm-yyyy'),
          TO_CHAR (mld_melding_datum, 'hh24:mi'),
          alg_locatie_omschrijving,
          ins_discipline_omschrijving,
          mld_stdmelding_omschrijving,
          pf.prs_perslid_naam_full,
          mld_melding_omschrijving,
          mld_melding_opmerking,
          TO_CHAR (mld_melding_einddatum_std, 'dd-mm-yyyy hh24:mi'),
          TO_CHAR (
             COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                       mld.getmeldingstatusdate (m.mld_melding_key, 1),
                       NULL),
             'dd-mm-yyyy hh24:mi'),
          DECODE (
             SIGN(mld_melding_einddatum_std
                  - COALESCE (
                       COALESCE (
                          mld.getmeldingstatusdate (m.mld_melding_key, 5),
                          mld.getmeldingstatusdate (m.mld_melding_key, 1)),
                       SYSDATE)),
             -1,
             'Ja')
     FROM mld_melding m,
          mld_stdmelding std,
          ins_tab_discipline d,
          prs_v_perslid_fullnames_all pf,
          alg_locatie l
    WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
      AND std.mld_ins_discipline_key = d.ins_discipline_key
      AND m.prs_perslid_key = pf.prs_perslid_key
      AND m.mld_alg_locatie_key = l.alg_locatie_key
      AND d.ins_srtdiscipline_key = 61;

--PCHD#53705 - Import personen vanuit AD VolkerWessels
CREATE OR REPLACE PROCEDURE pchd_import_perslid (p_import_key IN NUMBER)
IS
   c_fielddelimitor                VARCHAR2 (1)    := ';';
   v_newline                       VARCHAR2 (1000);             -- Input line
   v_aanduiding                    VARCHAR2 (200);
   v_errorhint                     VARCHAR2 (1000);
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER := 0;
   v_ongeldig                      NUMBER (1);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_count                         NUMBER;
   -- De importvelden:
   v_prs_perslid_voornaam              VARCHAR2 (256);
   v_prs_perslid_naam          VARCHAR2 (256);
   v_prs_perslid_tussenvoegsel     VARCHAR2 (256);
   v_prs_perslid_oslogin           VARCHAR2 (256);
   v_prs_perslid_oslogin2           VARCHAR2 (256);
   v_prs_perslid_wm           VARCHAR2 (256);
   v_prs_perslid_organisation           VARCHAR2 (256);
   v_prs_perslid_companycode           VARCHAR2 (256);
   v_prs_afdeling_naam             VARCHAR2 (256);
   v_prs_perslid_costcarrier           VARCHAR2 (256);
   v_prs_srtperslid_omschrijving   VARCHAR2 (256);
   v_prs_perslid_managedby           VARCHAR2 (256);
   v_prs_perslid_email           VARCHAR2 (256);
   v_prs_perslid_telefoonnr        VARCHAR2 (256);
   v_prs_perslid_mobiel             VARCHAR2 (256);
   v_prs_perslid_vestigingsnaam           VARCHAR2 (256);
   v_prs_perslid_vestigingsnummer           VARCHAR2 (256);
   -- Overig:

   CURSOR c1
   IS
      SELECT   *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM pchd_imp_prs;

   COMMIT;

   v_count_tot := 0;
   v_count_import := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_aanduiding := '';
         v_errorhint := 'Fout bij opvragen te importeren rij';
         v_ongeldig := 0;
         -- Lees alle veldwaarden

         -- 01
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
         -- 02
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
         -- 03
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
         -- 04
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
         -- 05
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_wm);
         -- 06
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_organisation);
         -- 07
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_companycode);
         -- 08
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
         -- 09
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_costcarrier);
         -- 10
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
         -- 11
         --fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_managedby);
         -- 12
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
         -- 13
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
         -- 14
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
         -- 15
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_vestigingsnaam);
         -- 16
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_vestigingsnummer);


         --
         v_aanduiding :=
               '['
            || v_prs_perslid_oslogin
            || '|'
            || v_prs_perslid_naam
            || '|'
            || v_prs_perslid_tussenvoegsel
            || '|'
            || v_prs_perslid_voornaam
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF      UPPER (v_prs_perslid_voornaam) = 'FIRSTNAME'
               AND UPPER (v_prs_perslid_naam) = 'LASTNAME'
               AND UPPER (v_prs_perslid_tussenvoegsel) = 'MIDDLENAME'
               AND UPPER (v_prs_perslid_oslogin) = 'USERNAME'
               AND UPPER (v_prs_perslid_wm) = 'WM'
               AND UPPER (v_prs_perslid_organisation) = 'ORGANISATION'
               AND UPPER (v_prs_perslid_companycode) = 'COMPANYCODE'
               AND UPPER (v_prs_afdeling_naam) = 'DEPARTMENT'
               AND UPPER (v_prs_perslid_costcarrier) = 'COSTCARRIER'
               AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTION'
               --AND UPPER (v_prs_perslid_managedby) = 'MANAGEDBY'
               AND UPPER (v_prs_perslid_email) = 'EMAIL'
               AND UPPER (v_prs_perslid_telefoonnr) = 'PHONENUMBER'
               AND UPPER (v_prs_perslid_mobiel) = 'MOBILENUMBER'
               AND UPPER (v_prs_perslid_vestigingsnaam) = 'VESTIGINGSNAAM'
               AND UPPER (v_prs_perslid_vestigingsnummer) = 'VESTIGINGSNUMMER'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE

            --

            v_errorhint := 'Ongeldige naam';
            v_prs_perslid_naam := TRIM (v_prs_perslid_naam);

            IF LENGTH (v_prs_perslid_naam) > 30
            THEN
               v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Naam te lang',
                                    'Naam wordt afgebroken tot ['
                                 || v_prs_perslid_naam
                                 || ']'
                                );
            ELSE
               IF (v_prs_perslid_naam IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                              (p_import_key,
                               'E',
                               v_aanduiding || 'Naam onbekend',
                               'Naam is verplicht; regel wordt overgeslagen!'
                              );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldig tussenvoegsel';
            v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);

            IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
            THEN
               v_prs_perslid_tussenvoegsel :=
                                  SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Tussenvoegsel te lang',
                                    'Tussenvoegsel wordt afgebroken tot ['
                                 || v_prs_perslid_tussenvoegsel
                                 || ']'
                                );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige voornaam';
            v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);

            IF LENGTH (v_prs_perslid_voornaam) > 30
            THEN
               v_prs_perslid_voornaam :=
                                       SUBSTR (v_prs_perslid_voornaam, 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Voornaam is te lang',
                                    'Voornaam wordt afgebroken tot ['
                                 || v_prs_perslid_voornaam
                                 || ']'
                                );
            ELSE
               IF (v_prs_perslid_voornaam IS NULL)
               THEN
                  v_prs_perslid_voornaam := '-';
                  fac.imp_writelog
                          (p_import_key,
                           'W',
                           v_aanduiding || 'Voornaam onbekend',
                           'Voornaam wordt gezet op [-]'
                          );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldige bedrijfsnaam';
            v_prs_perslid_wm := TRIM (v_prs_perslid_wm);

            IF LENGTH (v_prs_perslid_wm) > 60
            THEN
               v_prs_perslid_wm := SUBSTR (v_prs_perslid_wm, 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Bedrijfsnaam te lang',
                                    'Bedrijfsnaam wordt afgebroken tot ['
                                 || v_prs_perslid_wm
                                 || ']'
                                );
                v_ongeldig :=1;
            ELSE
               IF (v_prs_perslid_wm IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                     (p_import_key,
                      'E',
                      v_aanduiding || 'Bedrijfsnaam onbekend',
                      'Bedrijfsnaam is verplicht; regel wordt overgeslagen!'
                     );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldige organisatienaam';
            v_prs_perslid_organisation := TRIM (v_prs_perslid_organisation);

            IF LENGTH (v_prs_perslid_organisation) > 60
            THEN
               v_prs_perslid_organisation := SUBSTR (v_prs_perslid_organisation, 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Organisatienaam te lang',
                                    'Organisatienaam wordt afgebroken tot ['
                                 || v_prs_perslid_organisation
                                 || ']'
                                );
                v_ongeldig :=1;
            ELSE
               IF (v_prs_afdeling_naam IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                     (p_import_key,
                      'E',
                      v_aanduiding || 'Organisatienaam onbekend',
                      'Organisatienaam is verplicht; regel wordt overgeslagen!'
                     );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldige afdelingsnaam ';
            v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);

            IF LENGTH (v_prs_afdeling_naam) > 60
            THEN
               v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Afdelingsnaam  te lang',
                                    'Afdelingsnaam wordt afgebroken tot ['
                                 || v_prs_afdeling_naam
                                 || ']'
                                );
                v_ongeldig :=1;
            ELSE
               IF (v_prs_afdeling_naam IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                     (p_import_key,
                      'E',
                      v_aanduiding || 'Afdelingsnaam onbekend',
                      'Afdelingsnaam is verplicht; regel wordt overgeslagen!'
                     );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldige functie';
            v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);

            IF LENGTH (v_prs_srtperslid_omschrijving) >60
            THEN
               v_prs_srtperslid_omschrijving :=
                                SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Functie te lang',
                                    'Functie wordt afgebroken tot ['
                                 || v_prs_srtperslid_omschrijving
                                 || ']'
                                );
                v_ongeldig :=1;
            ELSE
               IF (v_prs_srtperslid_omschrijving IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                           (p_import_key,
                            'E',
                            v_aanduiding || 'Functie onbekend',
                            'Functie is verplicht; regel wordt overgeslagen!'
                           );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldig telefoonnummer';
            v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);

            IF LENGTH (REPLACE(v_prs_perslid_telefoonnr,' ','')) > 15
            THEN
               v_prs_perslid_telefoonnr :=
                                     SUBSTR (REPLACE(v_prs_perslid_telefoonnr,' ',''), 1, 15);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Telefoonnummer te lang',
                                    'Telefoonnummer wordt afgebroken tot ['
                                 || v_prs_perslid_telefoonnr
                                 || ']'
                                );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig mobiel nr';
            v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);

            IF LENGTH (REPLACE(v_prs_perslid_mobiel,' ','')) > 15
            THEN
               v_prs_perslid_telefoonnr :=
                                     SUBSTR (REPLACE(v_prs_perslid_mobiel,' ',''), 1, 15);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Mobiel te lang',
                                    'Mobiel wordt afgebroken tot ['
                                 || v_prs_perslid_mobiel
                                 || ']'
                                );
               COMMIT;
            END IF;


            --
            v_errorhint := 'Ongeldig e-mailadres';
            v_prs_perslid_email := TRIM (v_prs_perslid_email);

            IF LENGTH (v_prs_perslid_email) > 50
            THEN
               v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'E-mailadres te lang',
                                    'E-mailadres wordt afgebroken tot ['
                                 || v_prs_perslid_email
                                 || ']'
                                );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig loginnaam';
            v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);

            IF LENGTH (v_prs_perslid_oslogin) > 30
            THEN
               v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Loginnaam te lang',
                                    'Loginnaam wordt afgebroken tot ['
                                 || v_prs_perslid_oslogin
                                 || ']'
                                );
                v_ongeldig :=1;
               COMMIT;
            END IF;

--            IF LENGTH (v_prs_perslid_managedby) > 256
--            THEN
--               v_prs_perslid_managedby :=
--                                       SUBSTR (v_prs_perslid_managedby, 1, 256);
--               fac.imp_writelog (p_import_key,
--                                 'W',
--                                 v_aanduiding || 'Managed by is te lang',
--                                    'Managed by wordt afgebroken tot ['
--                                 || v_prs_perslid_managedby
--                                 || ']'
--                                );
--               COMMIT;
--               END IF;


            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errorhint :=
                      'Fout bij toevoegen regel aan importtabel pchd_imp_prs';

                  INSERT INTO pchd_imp_prs
                          (prs_perslid_naam,
                           prs_perslid_tussenvoegsel,
                           prs_perslid_voornaam,
                           prs_afdeling_naam,
                           prs_srtperslid_omschrijving,
                           prs_perslid_telefoonnr,
                           prs_perslid_mobiel,
                           prs_perslid_oslogin,
                           prs_perslid_email,
                           prs_perslid_wm,
                           prs_perslid_organisation,
                           prs_perslid_companycode,
                           prs_perslid_costcarrier,
                           --prs_perslid_managedby,
                           prs_perslid_vestigingsnaam,
                           prs_perslid_vestigingsnummer
                          )
                   VALUES
                          (v_prs_perslid_naam,
                           v_prs_perslid_tussenvoegsel,
                           v_prs_perslid_voornaam,
                           v_prs_afdeling_naam,
                           v_prs_srtperslid_omschrijving,
                           REPLACE(v_prs_perslid_telefoonnr,' ',''),
                           REPLACE(v_prs_perslid_mobiel,' ',''),
                           v_prs_perslid_oslogin,
                           v_prs_perslid_email,
                           v_prs_perslid_wm,
                           v_prs_perslid_organisation,
                           v_prs_perslid_companycode,
                           v_prs_perslid_costcarrier,
                           v_prs_perslid_vestigingsnaam,
                           v_prs_perslid_vestigingsnummer
                           );
                  COMMIT;
                  v_count_import := v_count_import + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           v_errorhint
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog
                             (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Ingelezen regel kan niet worden weggeschreven!'
                             );
                     COMMIT;
               END;
            END IF;
         END IF;
      END;
   END LOOP;
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
           'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        v_errorhint
                       );
      COMMIT;
END pchd_import_perslid;
/

CREATE OR REPLACE PROCEDURE pchd_update_perslid (p_import_key IN NUMBER)
IS
   -- LET OP: moet idem zijn als declaratie bij pchd_IMPORT_PERSLID
   c_persoon_inactief       VARCHAR2 (30)   := 'INACTIEF: ';
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
   c_max_delta_percentage   NUMBER (10)     := 1000;
   -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
   c_ruimte_nr              VARCHAR2 (10)   := '000';
   -- Groep waar personen in geplaatst worden (indien nog geen groep)
   c_groep_upper            VARCHAR2 (30)   := '_default VWInfra';
   c_key_default_rol        NUMBER(10) := 661;          --781 is Key voor autorisatiegroep  _default VWInfra in ACCEPTATIE!! In productie is dit 661 (in branch 621)
   v_aanduiding             VARCHAR2 (200);
   v_errorhint              VARCHAR2 (1000);
   v_errormsg               VARCHAR2 (1000);
   oracle_err_num           NUMBER;
   oracle_err_mes           VARCHAR2 (200);
   v_count_prs_actual       NUMBER (10);
   v_count_prs_import       NUMBER (10);          -- Matching actual persons!
   v_count_tot              NUMBER (10);
   v_count_error            NUMBER (10);
   v_count                  NUMBER (10);
   --
   v_perslid_key            NUMBER (10);
   v_afdeling_key           NUMBER (10);
   v_afdeling_parentkey     NUMBER (10);
   v_bedrijf_key            NUMBER (10);
   v_kostenplaats_key       NUMBER (10);
   v_srtperslid_key         NUMBER (10);
   v_locatie_key            NUMBER (10);
   v_gebouw_key             NUMBER (10);
   v_verdieping_key         NUMBER (10);
   v_ruimte_key             NUMBER (10);
   v_wp_key                 NUMBER (10);
   v_wp_volgnr              NUMBER (3);
   v_wp_oms                 VARCHAR2 (30);
   v_groep_defaultnaam      VARCHAR2 (30);
   v_prs_bedrijf_key      VARCHAR2 (30);
   v_prs_afdeling_key       VARCHAR2 (30);
   v_prs_company_key      VARCHAR2 (30);
   v_prs_perslid_costcarrier       VARCHAR2 (30);
   v_prs_perslid_managedby       VARCHAR2 (30);
   v_prs_perslid_oslogin       VARCHAR2 (30);
   v_prs_perslid_oslogin2       VARCHAR2 (30);

   -- Bepalen alle personen die in aanmerking komen om verwijderd te worden (INACTIEF)!
   CURSOR cdelprs
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_oslogin IS NOT NULL
         AND SUBSTR(p.prs_perslid_oslogin,1,1) <> '_'
         AND EXISTS (
                SELECT 1
                FROM prs_kenmerklink km
                WHERE km.prs_link_key = p.prs_perslid_key
                AND km.prs_kenmerk_key = 1041                                                           -- Key voor Kenmerk 'Import personen uit AD'. In ACCEPTATIEOMGEVING BRANCH: 1040 / In PRODUCTIEOMGEVING: 1041
                AND km.prs_kenmerklink_waarde =  '1461')                                              -- Key voor waarde "Ja" bij kenmerk 'Import personen uit AD'.)
         AND NOT EXISTS (
                SELECT 1
                  FROM pchd_imp_prs ip
                 WHERE UPPER(ip.prs_perslid_oslogin) = UPPER(p.prs_perslid_oslogin));

   --Bepalen alle functie omschrijvingen in het import bestand.
   CURSOR csperslid
   IS
      SELECT UPPER(prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
      FROM pchd_imp_prs
      GROUP BY UPPER (prs_srtperslid_omschrijving);

   --Bepalen alle wm (werkmaatschappijen) in het import bestand.
   CURSOR cwm
   IS
      SELECT UPPER(prs_perslid_wm) prs_perslid_wm
      FROM pchd_imp_prs
      GROUP BY UPPER (prs_perslid_wm);

   --Bepalen alle organisaties in het import bestand.
   CURSOR corg
   IS
      SELECT UPPER (prs_perslid_organisation) prs_perslid_organisation, UPPER (prs_perslid_companycode) prs_perslid_companycode, UPPER (prs_perslid_wm) prs_perslid_wm
      FROM pchd_imp_prs
      GROUP BY UPPER (prs_perslid_organisation), UPPER (prs_perslid_companycode), UPPER (prs_perslid_wm);

   --Bepalen alle afdeling omschrijvingen in het import bestand.
   CURSOR cdep
   IS
      SELECT UPPER(prs_afdeling_naam) prs_afdeling_naam, UPPER (prs_perslid_organisation) prs_perslid_organisation, UPPER (prs_perslid_wm) prs_perslid_wm
      FROM pchd_imp_prs
      GROUP BY UPPER(prs_afdeling_naam), UPPER (prs_perslid_organisation), UPPER (prs_perslid_wm);

   CURSOR cperslid
   IS
      SELECT *
        FROM pchd_imp_prs;

    CURSOR cwerkplek
    IS
  SELECT p.prs_perslid_key,
         i.prs_perslid_oslogin,
         MIN (rg_nvt.alg_ruimte_key) alg_ruimte_key,
         alg_gebouw_key
    FROM prs_ruimteafdeling   ra,
         pchd_imp_prs         i,
         prs_perslid          p,
         prs_afdeling         a,
         prs_afdeling         bu,
         alg_v_ruimte_gegevens rg_nvt
   WHERE     UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
         AND p.prs_afdeling_key = a.prs_afdeling_key
         AND bu.prs_afdeling_key = ra.prs_afdeling_key
         AND rg_nvt.alg_ruimte_key = ra.alg_ruimte_key
         AND UPPER (rg_nvt.alg_ruimte_nr) = 'N.V.T.'
         AND bu.prs_afdeling_key = a.prs_afdeling_parentkey
         AND NOT EXISTS
                 (SELECT prs_perslidwerkplek_key
                    FROM prs_v_perslidwerkplek_gegevens pwpg
                   WHERE     pwpg.prs_perslid_key = p.prs_perslid_key
                         AND pwpg.alg_gebouw_key = rg_nvt.alg_gebouw_key)
GROUP BY p.prs_perslid_key, i.prs_perslid_oslogin, rg_nvt.alg_gebouw_key;


BEGIN
   SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
     INTO v_count_prs_actual
     FROM prs_perslid
    WHERE prs_perslid_verwijder IS NULL AND prs_perslid_oslogin IS NOT NULL;

   SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
     INTO v_count_prs_import
     FROM prs_perslid p, pchd_imp_prs ip
    WHERE p.prs_perslid_oslogin IS NOT NULL
      AND p.prs_perslid_verwijder IS NULL
      AND p.prs_perslid_oslogin = ip.prs_perslid_oslogin;

   IF (   (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >=
                                               (100 - c_max_delta_percentage
                                               )
          )
      )
   THEN
      -- Geldig importbestand wat betreft aantal personen

      -- Personen verwijderen/inactiefmaken
      FOR recdelprs IN cdelprs
      LOOP
         BEGIN
            PRS.delete_perslid(p_import_key, recdelprs.prs_perslid_key);
         END;
      END LOOP;

      v_count_tot := 0;
      v_count_error := 0;

      -- Toevoegen functies
      FOR recsperslid IN csperslid
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding := recsperslid.prs_srtperslid_omschrijving || ' - ';
            v_errorhint := 'Fout bij bepalen functie';

            SELECT COUNT (*)
              INTO v_count
              FROM prs_srtperslid
             WHERE UPPER (prs_srtperslid_omschrijving) =
                               UPPER (recsperslid.prs_srtperslid_omschrijving)
               AND prs_srtperslid_verwijder IS NULL;

            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen functie';

               INSERT INTO prs_srtperslid
                           (prs_srtperslid_omschrijving
                           )
                    VALUES (recsperslid.prs_srtperslid_omschrijving
                           );
               COMMIT;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      v_count_tot := 0;
      v_count_error := 0;

      -- Toevoegen bedrijf (wm: werkmaatschappij)
      FOR recwm IN cwm
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding := recwm.prs_perslid_wm || ' - ';
            v_errorhint := 'Fout bij bepalen bedrijf (wm)';

            SELECT COUNT (*)
              INTO v_count
              FROM prs_bedrijf
             WHERE UPPER (prs_bedrijf_naam) =
                               UPPER (recwm.prs_perslid_wm)
               AND prs_bedrijf_verwijder IS NULL;

            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen bedrijf (wm)';

               INSERT INTO prs_bedrijf
                           (prs_bedrijf_naam,
                           prs_bedrijf_intern)
                    VALUES (recwm.prs_perslid_wm,
                           1);
               COMMIT;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                           'Bedrijf: verwerkte regels zonder foutmelding: '
                        || TO_CHAR (v_count_tot - v_count_error),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Bedrijf: verwerkte regels met foutmelding: '
                        || TO_CHAR (v_count_error),
                        ''
                       );
      COMMIT;

      v_count_tot := 0;
      v_count_error := 0;

      -- Toevoegen Organisatie

      FOR recorg IN corg
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding := recorg.prs_perslid_organisation || ' - ' || recorg.prs_perslid_wm || ' - ' ;
            v_errorhint := 'Fout bij bepalen organisatie';

            -- Zoek bedrijf
            v_errorhint := 'Zoek werkmaatschappij';
            SELECT prs_bedrijf_key
              INTO v_bedrijf_key
              FROM prs_bedrijf pb
             WHERE UPPER (pb.prs_bedrijf_naam) = UPPER (recorg.prs_perslid_wm)
               AND pb.prs_bedrijf_verwijder IS NULL
               AND pb.prs_bedrijf_intern = 1;

            SELECT COUNT (*)
              INTO v_count
              FROM prs_afdeling
             WHERE UPPER (prs_afdeling_omschrijving) =
                               UPPER (recorg.prs_perslid_organisation)
               AND prs_bedrijf_key = v_bedrijf_key
               AND prs_afdeling_verwijder IS NULL;

            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen organisatie';
               SELECT prs_s_prs_afdeling_key.nextval
                 INTO v_afdeling_key
                 FROM DUAL;

               INSERT INTO prs_afdeling
                           (prs_bedrijf_key,
                           prs_afdeling_key,
                           prs_afdeling_naam,
                           prs_afdeling_omschrijving
                           )
                    VALUES (v_bedrijf_key,
                            v_afdeling_key,
                            recorg.prs_perslid_wm || v_afdeling_key,
                            recorg.prs_perslid_organisation
                            );
               COMMIT;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                           'Organisatie: verwerkte regels zonder foutmelding: '
                        || TO_CHAR (v_count_tot - v_count_error),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Organisatie: verwerkte regels met foutmelding: '
                        || TO_CHAR (v_count_error),
                        ''
                       );
      COMMIT;

      v_count_tot := 0;
      v_count_error := 0;

      -- Toevoegen afdeling
      FOR recdep IN cdep
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding := recdep.prs_afdeling_naam || ' - ' || recdep.prs_perslid_organisation || ' - ' || recdep.prs_perslid_wm || ' - ';
            v_errorhint := 'Fout bij bepalen afdeling';

            -- Kijken of de waarde uit de import al voorkomt. Er wordt gecontroleerd op unieke voorkomende afdelingomschrijvingen.
            -- ??De import is er dus niet op toegerust om meerdere afdelingen te hebben met zelfde omschrijving maar ondere verschillende moeder-afdelingen.
            v_errorhint := 'Zoek bovenliggende afdeling';
            SELECT prs_afdeling_key, prs_kostenplaats_key
              INTO v_afdeling_parentkey, v_kostenplaats_key
              FROM prs_afdeling pa, prs_bedrijf pb
             WHERE UPPER (pa.prs_afdeling_omschrijving) = UPPER (recdep.prs_perslid_organisation)
               AND pa.prs_afdeling_verwijder IS NULL
               AND pa.prs_bedrijf_key = pb.prs_bedrijf_key
               AND pb.prs_bedrijf_naam = recdep.prs_perslid_wm;

            SELECT COUNT (*), MAX(prs_afdeling_key)
              INTO v_count, v_afdeling_key
              FROM prs_afdeling
              WHERE UPPER (prs_afdeling_omschrijving) =
                               UPPER (recdep.prs_afdeling_naam)
               AND prs_afdeling_parentkey = v_afdeling_parentkey
               AND prs_afdeling_verwijder IS NULL;

            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen afdeling';
               SELECT prs_s_prs_afdeling_key.nextval
                 INTO v_afdeling_key
                 FROM DUAL;

               INSERT INTO prs_afdeling
                           (prs_afdeling_parentkey,
                           prs_afdeling_key,
                           prs_afdeling_naam,
                           prs_kostenplaats_key,
                           prs_afdeling_omschrijving
                           )
                    VALUES (v_afdeling_parentkey,
                            v_afdeling_key,
                            recdep.prs_perslid_wm || v_afdeling_key,
                            v_kostenplaats_key,
                            recdep.prs_afdeling_naam
                            );
            ELSIF v_count = 1
            THEN
               UPDATE prs_afdeling
                  SET prs_kostenplaats_key = v_kostenplaats_key
                WHERE prs_afdeling_key = v_afdeling_key;
            END IF;
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                           'Afdeling: verwerkte regels zonder foutmelding: '
                        || TO_CHAR (v_count_tot - v_count_error),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Afdeling: verwerkte regels met foutmelding: '
                        || TO_CHAR (v_count_error),
                        ''
                       );
      COMMIT;

      v_count_tot := 0;
      v_count_error := 0;

      -- Toevoegen personen
      FOR recperslid IN cperslid
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  recperslid.prs_perslid_oslogin
               || '|'
               || recperslid.prs_perslid_naam
               || '|'
               || recperslid.prs_perslid_voornaam
               || ' - ';
            v_errorhint :=
                  'Fout bij bepalen functie ['
               || recperslid.prs_srtperslid_omschrijving
               || ']';

            -- Zoek functie-KEY behorend bij de functie van de persoon
            SELECT prs_srtperslid_key
              INTO v_srtperslid_key
              FROM prs_srtperslid
             WHERE prs_srtperslid_verwijder IS NULL
               AND UPPER (prs_srtperslid_omschrijving) =
                                UPPER (recperslid.prs_srtperslid_omschrijving);

            v_errorhint :=
                  'Fout bij bepalen afdeling persoon ['
               || recperslid.prs_afdeling_naam || '-' || recperslid.prs_perslid_organisation || '-' || recperslid.prs_perslid_wm
               || ']';

            -- Zoek afdeling-KEY behorend bij de afdeling van de persoon
            SELECT a2.prs_afdeling_key
              INTO v_afdeling_key
              FROM prs_bedrijf b, prs_afdeling a1, prs_afdeling a2
             WHERE b.prs_bedrijf_verwijder IS NULL
               AND b.prs_bedrijf_naam = recperslid.prs_perslid_wm
               AND b.prs_bedrijf_key = a1.prs_bedrijf_key
               AND a1.prs_afdeling_verwijder IS NULL
               AND UPPER (a1.prs_afdeling_omschrijving) = UPPER (recperslid.prs_perslid_organisation)
               AND a1.prs_afdeling_key = a2.prs_afdeling_parentkey
               AND a2.prs_afdeling_verwijder IS NULL
               AND UPPER (a2.prs_afdeling_omschrijving) = UPPER (recperslid.prs_afdeling_naam);

            v_errorhint := 'Fout bij bepalen persoon';

            -- Zoek perslid-KEY, behorend bij bestaand persoon, voor het updaten van de juiste persoon
            SELECT COUNT (*), MAX(prs_perslid_key)
              INTO v_count, v_perslid_key
              FROM prs_perslid
             WHERE prs_perslid_verwijder IS NULL
               AND UPPER (prs_perslid_oslogin) = UPPER (recperslid.prs_perslid_oslogin);

            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen persoon';

               INSERT INTO prs_perslid
                           (prs_perslid_module,
                            prs_srtperslid_key,
                            prs_afdeling_key,
                            prs_perslid_voornaam,
                            prs_perslid_naam,
                            prs_perslid_tussenvoegsel,
                            prs_perslid_oslogin,
                            prs_perslid_email,
                            prs_perslid_telefoonnr,
                            prs_perslid_mobiel
                           )
                    VALUES ('PRS',
                            v_srtperslid_key,
                            v_afdeling_key,
                            recperslid.prs_perslid_voornaam,
                            recperslid.prs_perslid_naam,
                            recperslid.prs_perslid_tussenvoegsel,
                            recperslid.prs_perslid_oslogin,
                            recperslid.prs_perslid_email,
                            recperslid.prs_perslid_telefoonnr,
                            recperslid.prs_perslid_mobiel
                           ) RETURNING prs_perslid_key INTO v_perslid_key;

               v_errorhint := 'Fout bij bepalen loginnaam';
            ELSIF v_count = 1
            THEN
               v_errorhint := 'Fout bij wijzigen persoon';
               BEGIN
                   UPDATE prs_perslid p
                      SET p.prs_srtperslid_key = v_srtperslid_key,
                          p.prs_afdeling_key = v_afdeling_key,
                          p.prs_perslid_voornaam = recperslid.prs_perslid_voornaam,
                          p.prs_perslid_naam = recperslid.prs_perslid_naam,
                          p.prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel,
                          p.prs_perslid_oslogin =  recperslid.prs_perslid_oslogin,
                          p.prs_perslid_telefoonnr = recperslid.prs_perslid_telefoonnr,
                          p.prs_perslid_mobiel = recperslid.prs_perslid_mobiel,
                          p.prs_perslid_email = recperslid.prs_perslid_email
                      WHERE p.prs_perslid_key = v_perslid_key;
                    END;
            ELSIF v_count > 1
            THEN
               fac.imp_writelog (p_import_key,
                                 'E',
                                    v_aanduiding
                                 || ' kan persoon niet 1-duidig bepalen',
                                 v_errorhint
                                );
            END IF;

            IF v_count < 2
            THEN
              v_errorhint := 'Fout bij toevoegen kenmerk import personen uit AD';

              -- Toevoegen kenmerk "Import personen uit AD'
              -- Key voor Kenmerk 'Import personen uit AD': 1041
              -- Waarde "Ja" voor Kenmerk 'Import personen uit AD'.
              PRS.upsertkenmerk (1041, v_perslid_key, '1461');


              v_errorhint := 'Fout bij toevoegen kenmerk Costcarrier';
              -- Toevoegen kenmerk "Costcarrier'
              -- Key voor Kenmerk 'Costcarrier': 1060
              PRS.upsertkenmerk (1060, v_perslid_key, recperslid.prs_perslid_costcarrier);

              -- Toevoegen kenmerk "Company code'
              -- Key voor Kenmerk 'Costcarrier': 1080
              PRS.upsertkenmerk (1080, v_perslid_key, recperslid.prs_perslid_companycode);

            END IF;


            EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                           'Persoon: verwerkte regels zonder foutmelding: '
                        || TO_CHAR (v_count_tot - v_count_error),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Persoon: verwerkte regels met foutmelding: '
                        || TO_CHAR (v_count_error),
                        ''
                       );
      COMMIT;

      v_count_tot := 0;
      v_count_error := 0;

            -- Iedereen krijgt _default-rol die nog geen groep heeft.
         INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
             SELECT prs_perslid_key, 661
               FROM prs_perslid p, pchd_imp_prs i
              WHERE     UPPER (i.prs_perslid_oslogin) = p.prs_perslid_oslogin
                    AND NOT EXISTS
                            (SELECT gg.prs_perslid_key
                               FROM fac_gebruikersgroep gg, fac_groep g
                              WHERE     gg.prs_perslid_key = p.prs_perslid_key
                                    AND gg.fac_groep_key = g.fac_groep_key
                                    AND fac_groep_omschrijving = c_groep_upper);



   ELSE
      fac.imp_writelog
         (p_import_key,
          'E',
          'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
             '- max. verschilpercentage = ['
          || TO_CHAR (c_max_delta_percentage)
          || '%] <br> '
          || '- #personen importbestand = ['
          || TO_CHAR (v_count_prs_import)
          || '] <br> '
          || '- #personen Facilitor = ['
          || TO_CHAR (v_count_prs_actual)
          || ']'
         );
      COMMIT;
   END IF;                  -- Geldig importbestand wat betreft aantal inserts
   COMMIT;

  FOR recwerkplek IN cwerkplek
  LOOP
     BEGIN
       -- Maximaal ��n werkplek per gebouw
       prs.movetoruimte (recwerkplek.prs_perslid_key, recwerkplek.alg_ruimte_key, 'G', 0);
     END;
  END LOOP;
  COMMIT;

END pchd_update_perslid;
/

CREATE OR REPLACE VIEW pchd_v_rap_catresbasis
(
   resnr,
   locatie,
   gebouw,
   ruimte,
   contactp,
   kostenpl,
   datum,
   van,
   tot,
   artikel,
   aantal,
   levering,
   dieet,
   wensen
)
AS
     SELECT resnr_volgnr,
            alg_locatie_omschrijving,
            alg_gebouw_omschrijving,
            res_ruimte_nr,
            prs_perslid_naam_full,
            kostenplaats,
            datum,
            van,
            tot,
            soort_catering,
            aantal,
            res_rsv_artikel_levering,
            kmdieet,
            kmwens
       FROM (SELECT rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
                       AS resnr_volgnr,
                    rg.alg_locatie_omschrijving,
                    rg.alg_gebouw_omschrijving,
                    COALESCE (
                       (SELECT rru.res_ruimte_nr
                          FROM res_ruimte rru
                          WHERE r2a.res_ruimte_key = rru.res_ruimte_key),
                       rg.alg_ruimte_nr || ' ' || rg.alg_ruimte_omschrijving)
                       AS res_ruimte_nr,
                    pf.prs_perslid_naam_full,
                    (SELECT MAX (kmw.res_kenmerkreservering_waarde)
                       FROM res_kenmerkwaarde kmw,
                            res_kenmerk km,
                            res_srtkenmerk sk
                      WHERE     kmw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                            AND km.res_kenmerk_key = kmw.res_kenmerk_key
                            AND sk.res_srtkenmerk_key = km.res_srtkenmerk_key
                            AND sk.res_srtkenmerk_key = 2)
                       kostenplaats, -- Kenmerksoort: Kostenplaats binnen werkmaatschappij'
                    TRUNC (rr.res_rsv_ruimte_van) datum,
                    TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI') van,
                    TO_CHAR (rr.res_rsv_ruimte_tot, 'HH24:MI') tot,
                    rart.res_artikel_omschrijving soort_catering,
                    ra.res_rsv_artikel_aantal aantal,
                    ra.res_rsv_artikel_levering,
                    (SELECT MAX (rkmw.res_kenmerkreservering_waarde)
                       FROM res_kenmerkwaarde rkmw,
                            res_kenmerk rkm,
                            res_srtkenmerk rsk
                      WHERE     rsk.res_srtkenmerk_key = rkm.res_srtkenmerk_key
                            AND rkm.res_kenmerk_key = rkmw.res_kenmerk_key
                            AND rkmw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                            AND rsk.res_srtkenmerk_key = 21) -- Kenmerksoort 'Dieetwensen / allergieen'
                       kmdieet,
                    (SELECT MAX (rkmw.res_kenmerkreservering_waarde)
                       FROM res_kenmerkwaarde rkmw,
                            res_kenmerk rkm,
                            res_srtkenmerk rsk
                      WHERE     rsk.res_srtkenmerk_key = rkm.res_srtkenmerk_key
                            AND rkm.res_kenmerk_key = rkmw.res_kenmerk_key
                            AND rkmw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                            AND rsk.res_srtkenmerk_key = 41) -- Kenmerksoort 'Aanvullende wensen lunch'
                       kmwens
               FROM res_rsv_ruimte rr,
                    res_rsv_artikel ra,
                    res_artikel rart,
                    alg_v_ruimte_gegevens rg,
                    prs_v_perslid_fullnames_all pf,
                    (SELECT rr2.res_rsv_ruimte_key,
                            rr2.res_reservering_key,
                            COALESCE (rr2.alg_ruimte_key, r2r.alg_ruimte_key)
                               alg_ruimte_key,
                            res_ruimte_key
                       FROM res_v_rsv_ruimte_2_alg_ruimte r2r, res_rsv_ruimte rr2
                      WHERE r2r.res_rsv_ruimte_key(+) = rr2.res_rsv_ruimte_key
                            AND res_alg_ruimte_verwijder IS NULL) r2a
              WHERE     rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
                    AND rr.res_rsv_ruimte_verwijder IS NULL
                    AND r2a.alg_ruimte_key = rg.alg_ruimte_key
                    AND r2a.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                    AND rr.res_rsv_ruimte_contact_key = pf.prs_perslid_key
                    AND ra.res_artikel_key = rart.res_artikel_key
                    AND ra.res_rsv_artikel_verwijder IS NULL
                    AND rart.res_discipline_key = 743 -- Discipline / Catalogus "Lunch"
                    AND rr.res_status_fo_key <= 5)
   GROUP BY resnr_volgnr,
            alg_locatie_omschrijving,
            alg_gebouw_omschrijving,
            res_ruimte_nr,
            prs_perslid_naam_full,
            kostenplaats,
            datum,
            van,
            tot,
            soort_catering,
            aantal,
            res_rsv_artikel_levering,
            kmdieet,
            kmwens;

-- Levert de catering voor morgen
CREATE OR REPLACE FORCE VIEW pchd_v_rap_catres1
AS
   SELECT resnr,
          locatie,
          gebouw,
          ruimte,
          contactp,
          kostenpl,
          datum,
          van,
          tot,
          artikel,
          aantal,
          dieet,
          wensen
     FROM pchd_v_rap_catresbasis
    WHERE TRUNC (levering) = TRUNC (fac.datumtijdplusuitvoertijd (SYSDATE,
                                                                  1,
                                                                  'D',
                                                                  0,
                                                                  24,
                                                                  1))
          AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7);


-- Levert de catering lijst voor vandaag
CREATE OR REPLACE FORCE VIEW pchd_v_rap_catres2
AS
   SELECT resnr,
          locatie,
          gebouw,
          ruimte,
          contactp,
          kostenpl,
          datum,
          van,
          tot,
          artikel,
          aantal,
          dieet,
          wensen
     FROM pchd_v_rap_catresbasis
    WHERE fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
          AND TRUNC (levering) = TRUNC (SYSDATE);

CREATE OR REPLACE VIEW pchd_v_noti_catres1
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT
          'CUST01' AS code,
          NULL,
          10481,                   -- Persoon "Verhoef B.V.", voor de emailadressen
          'Cateringreserveringen',
          (SELECT fac_usrrap_key
             FROM fac_usrrap
            WHERE UPPER(fac_usrrap_view_name) = 'PCHD_V_RAP_CATRES1')
             rapportnr,
          NULL
     FROM DUAL
     WHERE fac.iswerkdag (SYSDATE) = 1;
	 
CREATE OR REPLACE VIEW pchd_v_rap_schoonm_basis
(
   resnr,
   ruimte,
   locatie,
   van,
   tot,
   status,
   personen,
   gastheer_gastvrouw,
   aanvrager,
   omschrijving
)
AS
  SELECT r.nummer,
         r.ruimte,
         r.locatie,
         r.van,
         r.tot,
         r.status,
         r.bezoekers,
         r.gastheer,
         r.contact,
         r.res_omschrijving
    FROM res_v_udr_reservering r
   WHERE r.reserveerbare_ruimte = 'Ja' AND r.locatie = 'VIA01'
ORDER BY r.tot ASC;


CREATE OR REPLACE VIEW pchd_v_rap_schoonm_today
(
   resnr,
   ruimte,
   locatie,
   van,
   tot,
   status,
   personen,
   gastheer_gastvrouw,
   aanvrager,
   omschrijving
)
AS
   SELECT resnr,
          ruimte,
          locatie,
          van,
          tot,
          status,
          personen,
          gastheer_gastvrouw,
          aanvrager,
          omschrijving
     FROM pchd_v_rap_schoonm_basis
    WHERE fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
          AND TRUNC (van) = TRUNC (SYSDATE);

		  
CREATE OR REPLACE VIEW pchd_v_noti_schoonmaak
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT
          'CUST03' AS code,
          NULL,
          16161,     -- Persoon "_Schoonmaak_Van_Vliet", voor de emailadressen
          'Schoonmaken gereserveerde ruimte',
          (SELECT fac_usrrap_key
             FROM fac_usrrap
            WHERE UPPER (fac_usrrap_view_name) = 'PCHD_V_RAP_SCHOONM_TODAY')
             rapportnr,
          NULL
     FROM DUAL
    WHERE fac.iswerkdag (SYSDATE) = 1;
	
		  
CREATE OR REPLACE  VIEW PCHD_V_CNTR_CNTRREF
(
    CONTRACT_KEY,
    CONTRACT_NUMMER,
    VERWIJDER_DATUM
)
AS
  SELECT cnt.cnt_contract_key,
           cnt.cnt_contract_nummer_intern || case when cnt.cnt_contract_versie IS NULL OR cnt.cnt_contract_versie = ''THEN '' ELSE '.'||cnt.cnt_contract_versie END ||   ' - ' || cdisc.INS_DISCIPLINE_OMSCHRIJVING  ,
           cnt.CNT_CONTRACT_VERWIJDER
      FROM cnt_contract cnt, cnt_discipline cdisc
     WHERE cnt.INS_DISCIPLINE_KEY = cdisc.INS_DISCIPLINE_KEY;


CREATE OR REPLACE VIEW pchd_v_noti_catres2
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT
          'CUST02' AS code,
          NULL,
          10481,                   -- Persoon "Verhoef B.V.", voor de emailadressen
          'Cateringreserveringen',
          (SELECT fac_usrrap_key
             FROM fac_usrrap
            WHERE UPPER(fac_usrrap_view_name) = 'PCHD_V_RAP_CATRES2')
             rapportnr,
          NULL
     FROM DUAL
     WHERE fac.iswerkdag (SYSDATE) = 1;



-- PCHD#55492 VIEW om referentievelden naar meldingen te kunnen maken.
CREATE OR REPLACE VIEW pchd_v_mld_mldref
(
    MELDING_KEY,
    MELDING_NUMMER
)
AS
SELECT m.mld_melding_key,
              srt.INS_SRTDISCIPLINE_PREFIX
           || m.mld_melding_key
           || ' - '
           || sm.MLD_STDMELDING_OMSCHRIJVING
      FROM mld_melding m, ins_srtdiscipline srt, mld_stdmelding sm, mld_discipline d
     WHERE     m.MLD_STDMELDING_KEY = sm.MLD_STDMELDING_KEY AND
               sm.MLD_INS_DISCIPLINE_KEY = d.INS_DISCIPLINE_KEY
           AND d.INS_SRTDISCIPLINE_KEY = srt.INS_SRTDISCIPLINE_KEY;



--Rapport tbv controle welke werkplekken extra zijn aangemaakt tav cursor in import.
--Deze werkplekken kunnen mogelijk verwijderd worden.
--De select in de NOT EXIST is de cursor van de import, met filter op prs_key en ruimte_key tav de werkplekken. Bovendien controle op omschrijving van bu en wm tov de import-gegevens.
CREATE OR REPLACE VIEW pchd_v_rap_extrawerkplekken
AS
 SELECT pwp.prs_perslidwerkplek_key,
          p.prs_perslid_key,
          p.prs_perslid_naam,
          p.prs_perslid_oslogin,
          og.alg_plaatsaanduiding,
          d.alg_district_omschrijving,
          l.alg_locatie_omschrijving,
          og.alg_verdieping_omschrijving,
          og.alg_gebouw_naam,
          og.alg_ruimte_nr
     FROM prs_perslidwerkplek pwp,
          prs_werkplek wp,
          prs_perslid p,
          pchd_imp_prs i,
          alg_v_allonrgoed_gegevens og,
          alg_locatie l,
          alg_district d
    WHERE     pwp.prs_werkplek_key = wp.prs_werkplek_key
          AND pwp.prs_perslid_key = p.prs_perslid_key
          AND p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin)
          AND wp.prs_alg_ruimte_key = og.alg_ruimte_key
          AND og.alg_locatie_key = l.alg_locatie_key
          AND l.alg_district_key = d.alg_district_key
          AND NOT EXISTS
                (SELECT p.prs_perslid_key,
                        i.prs_perslid_oslogin,
                        ra.alg_ruimte_key,
                        g.alg_gebouw_omschrijving
                   FROM alg_ruimte ir,
                        alg_verdieping v,
                        alg_gebouw g,
                        alg_locatie l,
                        pchd_imp_prs ii,
                        prs_perslid ip,
                        prs_afdeling a,
                        prs_ruimteafdeling ra
                  WHERE     ir.alg_verdieping_key = v.alg_verdieping_key
                        AND v.alg_gebouw_key = g.alg_gebouw_key
                        AND g.alg_locatie_key = l.alg_locatie_key
                        AND UPPER (a.prs_afdeling_omschrijving) =
                              UPPER (ii.prs_perslid_organisation)
                        AND UPPER (ii.prs_perslid_wm) =
                               (SELECT b.prs_bedrijf_naam_upper
                                            FROM prs_bedrijf b, prs_v_afdeling ba
                                            WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key
                                            AND ba.prs_afdeling_key = a.prs_afdeling_key)
                        AND UPPER (ip.prs_perslid_oslogin) =
                              UPPER (ii.prs_perslid_oslogin)
                        AND ra.prs_afdeling_key = a.prs_afdeling_key
                        AND ra.prs_ruimteafdeling_verwijder IS NULL
                        AND ra.alg_ruimte_key = ir.alg_ruimte_key
                        AND UPPER (ir.alg_ruimte_nr) = 'N.V.T.'
                        AND ip.prs_perslid_key = p.prs_perslid_key
                        AND ir.alg_ruimte_key = wp.prs_alg_ruimte_key);


-- Koppeling om crediteurgegevens vanuit PCHD te verspreiden over de andere PCH omgevingen.
CREATE OR REPLACE VIEW pchd_v_export_bedrijf_gegevens
AS
SELECT 'prs_bedrijf_key;prs_bedrijf_naam;prs_bedrijf_post_adres;prs_bedrijf_post_postcode;prs_bedrijf_post_plaats;prs_bedrijf_post_land;prs_bedrijf_bezoek_adres;prs_bedrijf_bezoek_postcode;prs_bedrijf_bezoek_plaats;prs_bedrijf_bezoek_land;prs_bedrijf_telefoon;prs_bedrijf_fax;prs_bedrijf_telefoon2;prs_bedrijf_contact_persoon;prs_bedrijf_contact_telefoon;prs_bedrijf_contact_fax;prs_bedrijf_opmerking;prs_bedrijf_opmerking2;prs_bedrijf_uurloon;prs_leverancier_nr;prs_overeenkomst_nr;prs_overeenkomst_datum;prs_bedrijf_email;prs_bedrijf_order_confirm;prs_bedrijf_image_loc;prs_bedrijf_details_loc;prs_bedrijf_xmldetails_loc;prs_bedrijf_xmlcatalogus_loc;prs_bedrijf_bes_limiet;prs_bedrijf_bes_kosten;prs_bedrijf_aanmaak;prs_bedrijf_verwijder;prs_bedrijf_leverancier;prs_bedrijf_uitvoerende;prs_bedrijf_contract;prs_bedrijf_intern;prs_bedrijf_huurder;prs_bedrijf_bezoeker;prs_bedrijf_ingids;prs_bedrijf_bes_factor;prs_relatietype_omschrijving;prs_bedrijfadres_key;prs_bedrijfadres_type;mld_typeopdr_omschrijving;prs_bedrijfadres_url;prs_bedrijfadres_ordermode;prs_bedrijfadres_certificate;prs_bedrijfadres_xsl;prs_bedrijfadres_ext;prs_bedrijfadres_username;prs_bedrijfadres_password;prs_bedrijfadres_attachfile;prs_bedrijfadres_flexfiles;prs_bedrijfadres_encoding;prs_bedrijfadres_authmethod;prs_bedrijfadres_soapversion;prs_bedrijfadres_soapaction;bedrijfadres_lockuser_naam;prs_bedrijfadres_locksecret;prs_bedrijfadres_lockexpire' result,
       -1 result_order
       FROM DUAL
UNION ALL
SELECT '"' || b.prs_bedrijf_key || '";"' ||
       b.prs_bedrijf_naam || '";"' ||
       b.prs_bedrijf_post_adres || '";"' ||
       b.prs_bedrijf_post_postcode || '";"' ||
       b.prs_bedrijf_post_plaats || '";"' ||
       b.prs_bedrijf_post_land || '";"' ||
       b.prs_bedrijf_bezoek_adres || '";"' ||
       b.prs_bedrijf_bezoek_postcode || '";"' ||
       b.prs_bedrijf_bezoek_plaats || '";"' ||
       b.prs_bedrijf_bezoek_land || '";"' ||
       b.prs_bedrijf_telefoon || '";"' ||
       b.prs_bedrijf_fax || '";"' ||
       b.prs_bedrijf_telefoon2 || '";"' ||
       b.prs_bedrijf_contact_persoon || '";"' ||
       b.prs_bedrijf_contact_telefoon || '";"' ||
       b.prs_bedrijf_contact_fax || '";"' ||
       b.prs_bedrijf_opmerking || '";"' ||
       b.prs_bedrijf_opmerking2 || '";"' ||
       b.prs_bedrijf_uurloon || '";"' ||
       b.prs_leverancier_nr || '";"' ||
       b.prs_overeenkomst_nr || '";"' ||
       TO_CHAR(b.prs_overeenkomst_datum, 'yyyy-mm-dd hh24:mi:ss') || '";"' ||
       b.prs_bedrijf_email || '";"' ||
       b.prs_bedrijf_order_confirm || '";"' ||
       b.prs_bedrijf_image_loc || '";"' ||
       b.prs_bedrijf_details_loc || '";"' ||
       b.prs_bedrijf_xmldetails_loc || '";"' ||
       b.prs_bedrijf_xmlcatalogus_loc || '";"' ||
       b.prs_bedrijf_bes_limiet || '";"' ||
       b.prs_bedrijf_bes_kosten || '";"' ||
       TO_CHAR(b.prs_bedrijf_aanmaak, 'yyyy-mm-dd hh24:mi:ss') || '";"' ||
       TO_CHAR(b.prs_bedrijf_verwijder, 'yyyy-mm-dd hh24:mi:ss') || '";"' ||
       b.prs_bedrijf_leverancier || '";"' ||
       b.prs_bedrijf_uitvoerende || '";"' ||
       b.prs_bedrijf_contract || '";"' ||
       b.prs_bedrijf_intern || '";"' ||
       b.prs_bedrijf_huurder || '";"' ||
       b.prs_bedrijf_bezoeker || '";"' ||
       b.prs_bedrijf_ingids || '";"' ||
       b.prs_bedrijf_bes_factor || '";"' ||
       rt.prs_relatietype_omschrijving || '";"' ||
       ba.prs_bedrijfadres_key || '";"' ||
       ba.prs_bedrijfadres_type || '";"' ||
       ot.mld_typeopdr_omschrijving || '";"' ||
       ba.prs_bedrijfadres_url || '";"' ||
       ba.prs_bedrijfadres_ordermode || '";"' ||
       ba.prs_bedrijfadres_certificate || '";"' ||
       ba.prs_bedrijfadres_xsl || '";"' ||
       ba.prs_bedrijfadres_ext || '";"' ||
       ba.prs_bedrijfadres_username || '";"' ||
       ba.prs_bedrijfadres_password || '";"' ||
       ba.prs_bedrijfadres_attachfile || '";"' ||
       ba.prs_bedrijfadres_flexfiles || '";"' ||
       ba.prs_bedrijfadres_encoding || '";"' ||
       ba.prs_bedrijfadres_authmethod || '";"' ||
       ba.prs_bedrijfadres_soapversion || '";"' ||
       ba.prs_bedrijfadres_soapaction || '";"' ||
       lu.prs_perslid_naam || '";"' ||
       ba.prs_bedrijfadres_locksecret || '";"' ||
       ba.prs_bedrijfadres_lockexpire || '";' result,
       b.prs_bedrijf_key result_order
  FROM prs_bedrijf       b,
       prs_relatietype   rt,
       prs_bedrijfadres  ba,
       prs_kenmerklink   kl,
       prs_perslid       lu,
       mld_typeopdr      ot
 WHERE     b.prs_bedrijf_key = ba.prs_bedrijf_key
       AND b.prs_relatietype_key = rt.prs_relatietype_key(+)
       AND ba.prs_bedrijfadres_lockuser_key = lu.prs_perslid_key(+)
       AND ba.mld_typeopdr_key = ot.mld_typeopdr_key(+)
       AND kl.prs_kenmerk_key = 1020
       AND kl.prs_link_key = b.prs_bedrijf_key
       AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = 1;

CREATE OR REPLACE VIEW pchd_v_rap_offerteopdr
(
   melding_key,
   vakgroep,
   melding,
   opdracht_type,
   opdracht_nummer,
   opdracht_status,
   opdracht_locatie_code,
   opdracht_gebouw,
   opdracht_verdieping,
   opdracht_ruimtenr,
   opdracht_datum,
   opdracht_verstrektdatum,
   opdracht_afgemeld,
   opdracht_omschrijving,
   opdracht_opmerking,
   opdracht_kosten,
   opdracht_uitvoerende,
   opdracht_uitvoerende_contact,
   opdracht_behandelaar,
   bijlage,
   opdracht_na_offerte
)
AS
   SELECT mo.melding_key,
          mo.productgroep,
          mo.subproductgroep,
          mo.opdracht_type,
          mo.opdracht_nummer,
          mo.opdracht_status,
          mo.opdracht_locatie_code,
          mo.opdracht_gebouw,
          mo.opdracht_verdieping,
          mo.opdracht_ruimtenr,
          TRUNC (mo.opdracht_datum) AS opdracht_datum,
          TRUNC (mo.opdracht_verstrektdatum) AS opdracht_verstrektdatum,
          mo.opdracht_afgemeld,
          mo.opdracht_omschrijving,
          mo.opdracht_opmerking,
          mo.opdracht_kosten,
          mo.opdracht_uitvoerende,
          mo.opdracht_uitvoerende_contact,
          mo.opdracht_behandelaar,
          (SELECT mld_kenmerkopdr_waarde
             FROM mld_kenmerkopdr kmo
            WHERE kmo.mld_opdr_key = mo.opdracht_key AND mld_kenmerk_key = 82)
             AS bijlage,
          CASE
             WHEN (SELECT COUNT (opdracht_key)
                     FROM mld_v_udr_opdracht o
                    WHERE o.melding_key = mo.melding_key
                          AND SUBSTR (opdracht_type, 1, 7) = 'Offerte') > 0
             THEN
                'Opdracht_na_offerte'
             ELSE
                ''
          END
             AS opdracht_na_offerte
     FROM mld_v_udr_meldingopdracht mo;

CREATE OR REPLACE VIEW prs_v_contactpersoon_fullnames
(
   prs_contactpersoon_key,
   prs_cp_naam_full,
   prs_cp_naam_friendly,
   prs_cp_naam_full_comp,
   prs_cp_naam_friendly_comp,
   prs_perslid_key
)
AS
   SELECT p.prs_contactpersoon_key,
          p.prs_contactpersoon_naam
          || DECODE (p.prs_contactpersoon_voorletters,
                     NULL, '',
                     ', ' || p.prs_contactpersoon_voorletters)
          || DECODE (p.prs_contactpersoon_tussenv,
                     NULL, '',
                     ' ' || p.prs_contactpersoon_tussenv)
          || DECODE (p.prs_contactpersoon_voornaam,
                     NULL, '',
                     ' (' || p.prs_contactpersoon_voornaam || ')')
             prs_cp_naam_full,
          DECODE (p.prs_contactpersoon_voornaam,
                  NULL, '',
                  p.prs_contactpersoon_voornaam || ' ')
          || DECODE (p.prs_contactpersoon_tussenv,
                     NULL, '',
                     p.prs_contactpersoon_tussenv || ' ')
          || p.prs_contactpersoon_naam
             prs_cp_naam_friendly,
          p.prs_contactpersoon_naam
          || DECODE (p.prs_contactpersoon_voorletters,
                     NULL, '',
                     ', ' || p.prs_contactpersoon_voorletters)
          || DECODE (p.prs_contactpersoon_tussenv,
                     NULL, '',
                     ' ' || p.prs_contactpersoon_tussenv)
          || DECODE (p.prs_contactpersoon_voornaam,
                     NULL, '',
                     ' (' || p.prs_contactpersoon_voornaam || ')')
          || DECODE (b.prs_bedrijf_naam,
                     NULL, '',
                     ' [' || b.prs_bedrijf_naam || ']')
             prs_cp_naam_full_comp,
          DECODE (p.prs_contactpersoon_voornaam,
                  NULL, '',
                  p.prs_contactpersoon_voornaam || ' ')
          || DECODE (p.prs_contactpersoon_tussenv,
                     NULL, '',
                     p.prs_contactpersoon_tussenv || ' ')
          || p.prs_contactpersoon_naam
          || DECODE (b.prs_bedrijf_naam,
                     NULL, '',
                     ' [' || b.prs_bedrijf_naam || ']')
             prs_cp_naam_friendly_comp,
          p.prs_perslid_key
     FROM prs_contactpersoon p, prs_bedrijf b
    WHERE b.prs_bedrijf_key = p.prs_bedrijf_key;

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