--
-- $Id$
--
-- Script containing customer specific configuration sql statements for VGLD

DEFINE thisfile = 'VGLD.SQL'
DEFINE dbuser   = '^VGLD'

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

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

CREATE OR REPLACE PROCEDURE vgld_import_prs (
   p_import_key IN NUMBER
)
IS
   c_fielddelimitor                VARCHAR2 (1)    := ';';
   -- LET OP: moet idem zijn als declaratie bij vgld_UPDATE_PRS
   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;
   v_pos                           NUMBER;
   -- De importvelden:
   v_prs_perslid_nr                VARCHAR2 (256);
   v_prs_perslid_voornaam          VARCHAR2 (256);
   v_prs_perslid_naam              VARCHAR2 (256);
   v_prs_perslid_tussenvoegsel     VARCHAR2 (256);
   v_prs_perslid_voorletters       VARCHAR2 (256);
   v_prs_afdeling_code             VARCHAR2 (256);
   v_prs_srtperslid_omschrijving   VARCHAR2 (256);
   v_prs_perslid_telefoonnr        VARCHAR2 (256);
   v_prs_perslid_mobiel            VARCHAR2 (256);
   v_prs_perslid_email             VARCHAR2 (256);
   v_prs_perslid_oslogin           VARCHAR2 (256);


   -- Overig:
   v_alg_locatie_code              VARCHAR2 (256);
   v_alg_gebouw_code               VARCHAR2 (256);


   CURSOR c1
   IS
      SELECT   *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM vgld_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, 02, 03, 04 - Naam van medewerkers in de 1e 4 kolommen: voornaam, voorletters, tussenvoegsels, achternaam.
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);

         -- 05 - Peroneelsnr
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);

         -- 06 - Afdelingscode
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_code);

         -- 07 - Functieomschrijving van medewerker
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);

         -- 08 - Email adres van medewerker
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);

         -- 09 - Mobiel van medewerker
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);

         -- 10 - Telnr van medewerker
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);

         -- 11 - Usernaam/login
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);

         -------------------------------------------------------------------------

         -- xx - Locatiecode werkplek van medewerker
         --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
         v_alg_locatie_code := NULL;

         -- xx - Gebouwcode werkplek van medewerker
         --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
         v_alg_gebouw_code := NULL;
         -------------------------------------------------------------------------



         --
         v_aanduiding :=
               '['
            || v_prs_perslid_nr
            || '|'
            || v_prs_perslid_naam
            || '] ';

         -- 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) = 'ROEPNAAM'
                AND UPPER (v_prs_perslid_naam) = 'ACHTERNAAM'
                AND UPPER (v_prs_perslid_nr) = 'PERSNR.'
                AND UPPER (v_prs_afdeling_code) = 'AFDNR.'
                AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
                AND UPPER (v_prs_perslid_email) = 'E-MAIL'
                AND UPPER (v_prs_perslid_mobiel) = 'MOBILE'
                AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOON'
                AND UPPER (v_prs_perslid_oslogin) = 'LOGIN'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            --
            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 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
                                 || ']'
                                );
            ELSE
               IF (v_prs_perslid_oslogin IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                     (p_import_key,
                      'E',
                      v_aanduiding || 'Usernaam/login onbekend',
                      'Usernaam/login is verplicht; regel wordt overgeslagen!'
                     );
               END IF;
            END IF;
            COMMIT;

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

            IF LENGTH (v_prs_perslid_email) > 200
            THEN
               v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
               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 personeelsnummer';
            v_prs_perslid_nr := TRIM (v_prs_perslid_nr);

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


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

            IF LENGTH (v_prs_perslid_tussenvoegsel) > 15
            THEN
               v_prs_perslid_tussenvoegsel :=
                                  SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15);
               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 voorletters';
            v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);

            IF LENGTH (v_prs_perslid_voorletters) > 10
            THEN
               v_prs_perslid_voorletters :=
                                    SUBSTR (v_prs_perslid_voorletters, 1, 10);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Voorletters te lang',
                                    'Voorletters worden afgebroken tot ['
                                 || v_prs_perslid_voorletters
                                 || ']'
                                );
               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
                                 || ']'
                                );
            END IF;
            COMMIT;





            v_errorhint := 'Ongeldige afdelingcode';
            v_prs_afdeling_code := TRIM (v_prs_afdeling_code);

            IF LENGTH (v_prs_afdeling_code) > 10
            THEN
               v_prs_afdeling_code := SUBSTR (v_prs_afdeling_code, 1, 10);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Afdelingscode te lang',
                                    'Afdelingscode wordt afgebroken tot ['
                                 || v_prs_afdeling_code
                                 || ']'
                                );
            ELSE
               IF (v_prs_afdeling_code IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                     (p_import_key,
                      'E',
                      v_aanduiding || 'Afdelingscode onbekend',
                      'Afdelingscode 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
                                 || ']'
                                );
            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 := 'Ongeldige plaats/locatiecode';
            v_alg_locatie_code := TRIM(v_alg_locatie_code);

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

            --
            v_errorhint := 'Ongeldige plaats/gebouwcode';
            v_alg_gebouw_code := TRIM(v_alg_gebouw_code);

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

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

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


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

            IF LENGTH (v_prs_perslid_telefoonnr) > 15
            THEN
               v_prs_perslid_telefoonnr :=
                                     SUBSTR (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;

            COMMIT;


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

                  INSERT INTO vgld_imp_prs
                          (prs_perslid_nr, prs_perslid_naam,
                           prs_perslid_tussenvoegsel,
                           prs_perslid_voorletters,
                           prs_perslid_voornaam,
                           prs_afdeling_code,
                           prs_srtperslid_omschrijving,
                           alg_locatie_code, alg_gebouw_code,
                           alg_verdieping_volgnr, alg_ruimte_nr,
                           prs_perslid_telefoonnr,
                           prs_perslid_mobiel,
                           prs_perslid_email,
                           prs_perslid_oslogin
                          )
                   VALUES (v_prs_perslid_nr, v_prs_perslid_naam,
                           v_prs_perslid_tussenvoegsel,
                           v_prs_perslid_voorletters,
                           v_prs_perslid_voornaam,
                           v_prs_afdeling_code,
                           v_prs_srtperslid_omschrijving,
                           v_alg_locatie_code, v_alg_gebouw_code,
                           NULL, NULL,
                           v_prs_perslid_telefoonnr,
                           v_prs_perslid_mobiel,
                           v_prs_perslid_email,
                           v_prs_perslid_oslogin
                          );
                  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;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!'
                       );
   ELSE
      fac.imp_writelog (p_import_key,
                        'S',
                           'Persoon: aantal ingelezen regels: '
                        || TO_CHAR (v_count_tot),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Persoon: aantal ongeldige importregels: '
                        || TO_CHAR (v_count_tot - v_count_import),
                        ''
                       );
   END IF;
   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 vgld_import_prs;
/

CREATE OR REPLACE PROCEDURE vgld_update_prs (
   p_import_key IN NUMBER
)
IS
   -- LET OP: moet idem zijn als declaratie bij VGLD_IMPORT_PRS
   c_persoon_inactief       VARCHAR2 (30)   := 'INACTIEF: ';
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
   c_max_delta_percentage   NUMBER (10)     := 20;
   -- 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_key_default_rol        NUMBER(10) := 1;

   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_srtperslid_key         NUMBER (10);
   v_oslogin                VARCHAR2 (30);
   v_wachtwoord             VARCHAR2 (30);
   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);

   -- Let op! Met eindatum zijn personen die niet meer in dienst zijn.
   -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
   CURSOR cdelprs
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL
         AND NOT EXISTS (
                SELECT 1
                  FROM vgld_imp_prs ip
                 WHERE ip.prs_perslid_nr = p.prs_perslid_nr);


   CURSOR csperslid
   IS
      SELECT prs_srtperslid_omschrijving
      FROM vgld_imp_prs
      GROUP BY prs_srtperslid_omschrijving;


   CURSOR cprsafd
   IS
      SELECT UPPER(prs_afdeling_code) prs_afdeling_code, MIN(prs_afdeling_naam) prs_afdeling_naam
      FROM vgld_imp_prs
      GROUP BY UPPER (prs_afdeling_code);

   CURSOR cperslid
   IS
      SELECT *
        FROM vgld_imp_prs;

   CURSOR cwp
   IS
      SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
        FROM vgld_imp_prs ip, prs_v_aanwezigperslid p
       WHERE ip.alg_locatie_code IS NOT NULL
         AND ip.alg_gebouw_code IS NOT NULL
         AND UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr);

   -- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek
   CURSOR cnowp
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL
         AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
         AND NOT EXISTS (SELECT 1
                           FROM prs_perslidwerkplek pw
                          WHERE pw.prs_perslid_key = p.prs_perslid_key);

   -- Alle aanwezige personen met personeelsnummer (ie. de import-doelgroep) niet in een groep
   CURSOR cnogroup
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL
         AND NOT EXISTS (SELECT 1
                           FROM fac_gebruikersgroep g
                          WHERE g.prs_perslid_key = p.prs_perslid_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_nr IS NOT NULL;

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

   IF (   (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >=
                                               (100 - c_max_delta_percentage
                                               )
          )
      )
   THEN
      -- Geldig importbestand wat betreft aantal personen
      FOR recdelprs IN cdelprs
      LOOP
         BEGIN
            -- Heeft persoon actuele/toekomstige verplichtingen?
            SELECT COUNT (*)
              INTO v_count
              FROM prs_perslid p, prs_v_verplichting_keys r
             WHERE p.prs_perslid_key = r.prs_perslid_key
               AND p.prs_perslid_key = recdelprs.prs_perslid_key;

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

               UPDATE prs_perslid
                  SET prs_perslid_verwijder = SYSDATE
                WHERE prs_perslid_key = recdelprs.prs_perslid_key;

               fac.imp_writelog (p_import_key,
                                 'I',
                                    'Persoon met nummer ['
                                 || recdelprs.prs_perslid_nr
                                 || '] en naam ['
                                 || recdelprs.prs_perslid_naam
                                 || ', '
                                 || recdelprs.prs_perslid_voornaam
                                 || '] is verwijderd',
                                 'Persoon is verwijderd'
                                );
               COMMIT;
            ELSE
               -- Staat persoon INACTIEF?
               SELECT COUNT (*)
                 INTO v_count
                 FROM prs_perslid p
                WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
                  AND p.prs_perslid_key = recdelprs.prs_perslid_key;

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

                  -- Persoon INACTIEF zetten (update naam + reset oslogin)
                  UPDATE prs_perslid
                     SET prs_perslid_naam =
                            SUBSTR (c_persoon_inactief || prs_perslid_naam,
                                    1,
                                    30
                                   ),
                         prs_perslid_oslogin = NULL
                   WHERE prs_perslid_key = recdelprs.prs_perslid_key;

                  fac.imp_writelog (p_import_key,
                                    'I',
                                       'Persoon met nummer ['
                                    || recdelprs.prs_perslid_nr
                                    || '] en naam ['
                                    || recdelprs.prs_perslid_naam
                                    || ', '
                                    || recdelprs.prs_perslid_voornaam
                                    || '] is INACTIEF gezet',
                                    'Persoon is INACTIEF gezet'
                                   );
               ELSE
                  v_errorhint := 'Fout bij INACTIEF maken persoon';

                  -- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet)
                  UPDATE prs_perslid
                     SET prs_perslid_oslogin = NULL
                   WHERE prs_perslid_naam LIKE c_persoon_inactief || '%'
                     AND prs_perslid_oslogin IS NOT NULL;

                  fac.imp_writelog (p_import_key,
                                    'I',
                                       'Persoon met nummer ['
                                    || recdelprs.prs_perslid_nr
                                    || '] en naam ['
                                    || recdelprs.prs_perslid_naam
                                    || ', '
                                    || recdelprs.prs_perslid_voornaam
                                    || '] is INACTIEF gemaakt',
                                    'Persoon is INACTIEF gemaakt'
                                   );
               END IF;
               COMMIT;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               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_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

      v_count_tot := 0;
      v_count_error := 0;

      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;

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

      COMMIT;

      v_count_tot := 0;
      v_count_error := 0;

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

            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 ['
               || recperslid.prs_afdeling_naam
               || ']';

            SELECT prs_afdeling_key
              INTO v_afdeling_key
              FROM prs_afdeling
             WHERE prs_afdeling_verwijder IS NULL
               AND UPPER (prs_afdeling_naam) = UPPER (recperslid.prs_afdeling_code);


            v_errorhint := 'Fout bij bepalen 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_nr) = UPPER (recperslid.prs_perslid_nr);


						IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij toevoegen persoon';
               -- Nieuwe persoon uit importbestand, wordt toegevoegd in Facilitor.
               INSERT INTO prs_perslid
                           (prs_perslid_module, prs_srtperslid_key,
                            prs_afdeling_key, prs_perslid_naam,
                            prs_perslid_voorletters,
                            prs_perslid_tussenvoegsel,
                            prs_perslid_voornaam,
                            prs_perslid_telefoonnr,
                            prs_perslid_mobiel,
                            prs_perslid_email,
                            prs_perslid_nr,
                            prs_perslid_oslogin
                           )
                    VALUES ('PRS', v_srtperslid_key,
                            v_afdeling_key, recperslid.prs_perslid_naam,
                            recperslid.prs_perslid_voorletters,
                            recperslid.prs_perslid_tussenvoegsel,
                            recperslid.prs_perslid_voornaam,
                            recperslid.prs_perslid_telefoonnr,
                            recperslid.prs_perslid_mobiel,
                            recperslid.prs_perslid_email,
                            recperslid.prs_perslid_nr,
                            recperslid.prs_perslid_oslogin
                           );
               COMMIT;
            ELSE

               v_errorhint := 'Fout bij wijzigen persoon';

               -- Functie, Afdeling altijd bijwerken
               -- Voorletters, Naam, Tussenvoegsels, Voornaam alleen indien gevuld wordt aangeboden, anders laten staan wat in DB stond.
               -- Telefoonnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
               -- E-mail: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
               -- Personeelsnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
               -- Login: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).

               UPDATE prs_perslid
                  SET prs_srtperslid_key = v_srtperslid_key,
                      prs_afdeling_key = v_afdeling_key,
                      prs_perslid_naam = COALESCE(recperslid.prs_perslid_naam,prs_perslid_naam),
                      prs_perslid_voorletters = COALESCE(recperslid.prs_perslid_voorletters,prs_perslid_voorletters),
                      prs_perslid_tussenvoegsel = COALESCE(recperslid.prs_perslid_tussenvoegsel,prs_perslid_tussenvoegsel),
                      prs_perslid_voornaam = COALESCE(recperslid.prs_perslid_voornaam,prs_perslid_voornaam),
                      -- VGLD#31908 prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr),
                      -- VGLD#31908 prs_perslid_mobiel = COALESCE (recperslid.prs_perslid_mobiel, prs_perslid_mobiel),
                      prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email),
                      prs_perslid_nr = COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr),
                      prs_perslid_oslogin = COALESCE (recperslid.prs_perslid_oslogin, prs_perslid_oslogin)
                  WHERE prs_perslid_key = v_perslid_key;
               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',
                           '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;

      FOR recwp IN cwp
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  recwp.prs_perslid_nr
               || '|'
               || recwp.prs_perslid_naam
               || '|'
               || recwp.prs_perslid_voornaam
               || '|'
               || recwp.alg_locatie_code
               || '|'
               || recwp.alg_gebouw_code
               || ' - ';
            v_errorhint := 'Fout bij bepalen persoon';

            SELECT prs_perslid_key
              INTO v_perslid_key
              FROM prs_v_aanwezigperslid
             WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr);

            v_errorhint := 'Fout bij bepalen locatie';

            SELECT alg_locatie_key
              INTO v_locatie_key
              FROM alg_v_aanweziglocatie
             WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code);

            v_errorhint := 'Fout bij bepalen gebouw';

            SELECT alg_gebouw_key
              INTO v_gebouw_key
              FROM alg_v_aanweziggebouw
             WHERE alg_locatie_key = v_locatie_key
               AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code);

            v_errorhint := 'Fout bij bepalen verdieping';

            SELECT alg_verdieping_key
              INTO v_verdieping_key
              FROM alg_v_aanwezigverdieping
             WHERE alg_gebouw_key = v_gebouw_key
               AND alg_verdieping_volgnr = (SELECT MIN (v.alg_verdieping_volgnr)
						                      FROM alg_verdieping v
					                         WHERE v.alg_gebouw_key = v_gebouw_key
								               AND v.alg_verdieping_volgnr >= 0);

            v_errorhint :=
                    'Fout bij bepalen of persoon in gebouw een werkplek heeft';

            SELECT COUNT (*)
              INTO v_count
              FROM prs_perslidwerkplek pw,
                   prs_werkplek wp,
                   alg_ruimte r,
                   alg_verdieping v
             WHERE pw.prs_perslid_key = v_perslid_key
               AND pw.prs_werkplek_key = wp.prs_werkplek_key
               AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
               AND r.alg_verdieping_key = v.alg_verdieping_key
               AND v.alg_gebouw_key = v_gebouw_key;

            -- v_count=0 -> persoon verhuist naar/krijgt wp in gebouw.
            IF (v_count = 0)
            THEN
               v_errorhint := 'Fout bij bepalen ruimte';

               SELECT COUNT (*)
                 INTO v_count
                 FROM alg_v_aanwezigruimte r
                WHERE r.alg_verdieping_key = v_verdieping_key
                  AND r.alg_ruimte_nr = c_ruimte_nr;

               -- v_count=0 -> ruimte '000' bestaat nog niet.
               IF (v_count = 0)
               THEN
                  v_errorhint := 'Fout bij toevoegen ruimte';

                  INSERT INTO alg_ruimte
                              (alg_verdieping_key, alg_srtruimte_key,
                               alg_ruimte_nr
                              )
                       VALUES (v_verdieping_key, 21,      -- facilitaire ruimte
                               c_ruimte_nr
                              );
                  COMMIT;
               END IF;

               v_errorhint := 'Fout bij bepalen ruimte';

               SELECT alg_ruimte_key
                 INTO v_ruimte_key
                 FROM alg_v_aanwezigruimte r
                WHERE r.alg_verdieping_key = v_verdieping_key
                  AND r.alg_ruimte_nr = c_ruimte_nr;

               v_errorhint := 'Fout bij bepalen vrije werkplek';

               SELECT COUNT (w.prs_werkplek_key)
                 INTO v_count
                 FROM prs_werkplek w
                WHERE w.prs_alg_ruimte_key = v_ruimte_key
                  AND NOT EXISTS (
                                SELECT 1
                                  FROM prs_perslidwerkplek pw
                                 WHERE pw.prs_werkplek_key =
                                                            w.prs_werkplek_key);

               IF (v_count > 0)
               THEN
                  SELECT MIN (w.prs_werkplek_key)
                    INTO v_wp_key
                    FROM prs_werkplek w
                   WHERE w.prs_alg_ruimte_key = v_ruimte_key
                     AND NOT EXISTS (
                                SELECT 1
                                  FROM prs_perslidwerkplek pw
                                 WHERE pw.prs_werkplek_key =
                                                            w.prs_werkplek_key);

                  v_errorhint :=
                                'Fout bij koppelen persoon aan vrije werkplek';

                  INSERT INTO prs_perslidwerkplek
                              (prs_perslid_key, prs_werkplek_key,
                               prs_perslidwerkplek_bezetting
                              )
                       VALUES (v_perslid_key, v_wp_key,
                               100
                              );
                  COMMIT;
               ELSE
                  v_errorhint := 'Fout bij bepalen nieuwe werkplek';

                  SELECT prs_s_prs_werkplek_key.NEXTVAL
                    INTO v_wp_key
                    FROM DUAL;

                  SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1
                    INTO v_wp_volgnr
                    FROM prs_werkplek w
                   WHERE w.prs_alg_ruimte_key = v_ruimte_key;

                  v_wp_oms := c_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);

                  v_errorhint := 'Fout bij aanmaken nieuwe werkplek';

                  INSERT INTO prs_werkplek
                              (prs_werkplek_key, prs_werkplek_module,
                               prs_werkplek_volgnr,
                               prs_werkplek_omschrijving, prs_alg_ruimte_key
                              )
                       VALUES (v_wp_key, 'PRR',
                               v_wp_volgnr,
                               v_wp_oms, v_ruimte_key
                              );

                  v_errorhint :=
                               'Fout bij koppelen persoon aan nieuwe werkplek';

                  INSERT INTO prs_perslidwerkplek
                              (prs_perslid_key, prs_werkplek_key,
                               prs_perslidwerkplek_bezetting
                              )
                       VALUES (v_perslid_key, v_wp_key,
                               100
                              );
                  COMMIT;
               END IF;
            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',
                           'Werkplek: verwerkte regels zonder foutmelding: '
                        || TO_CHAR (v_count_tot - v_count_error),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Werkplek: verwerkte regels met foutmelding: '
                        || TO_CHAR (v_count_error),
                        ''
                       );
      COMMIT;

      FOR recnowp IN cnowp
      LOOP
         BEGIN
            fac.imp_writelog (p_import_key,
                              'I',
                                 'Persoon met nummer ['
                              || recnowp.prs_perslid_nr
                              || '] en naam ['
                              || recnowp.prs_perslid_naam
                              || ', '
                              || recnowp.prs_perslid_voornaam
                              || '] heeft geen werkplek',
                              'Geen werkplek'
                             );
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               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_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;

			-- Iedereen krijgt _default-rol die nog geen groep heeft.
      FOR recnogroup IN cnogroup
      LOOP
         BEGIN
            v_aanduiding :=
                  recnogroup.prs_perslid_nr
               || '|'
               || recnogroup.prs_perslid_naam
               || '|'
               || recnogroup.prs_perslid_voornaam
               || ' - ';
            v_errorhint := 'Fout bij bepalen groep met key [' || c_key_default_rol || ']';

						SELECT fac_groep_upper
              INTO v_groep_defaultnaam
              FROM fac_groep
             WHERE fac_groep_key = c_key_default_rol;


            v_errorhint :=
               'Fout bij koppelen persoon aan groep met key [' || c_key_default_rol || ']';

            INSERT INTO fac_gebruikersgroep
                        (fac_groep_key, prs_perslid_key
                        )
                 VALUES (c_key_default_rol, recnogroup.prs_perslid_key
                        );
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               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_errormsg,
                                 v_errorhint
                                );
               COMMIT;
         END;
      END LOOP;


   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;

-- VGLD#51449 iedereen mandateren voor alle kostenplaatsen
INSERT INTO prs_perslidkostenplaats (prs_perslid_key,
                                     prs_kostenplaats_key,
                                     prs_perslidkostenplaats_boeken,
                                     prs_perslidkostenplaats_inzage)
   SELECT p.prs_perslid_key,
          NULL,
          1,
          0
     FROM prs_v_aanwezigperslid p
    WHERE NOT EXISTS (SELECT 1
                        FROM prs_perslidkostenplaats
                       WHERE prs_perslid_key = p.prs_perslid_key);

END vgld_update_prs;
/





------
------ FACTUUREXPORT / KOPPELING EXACT
------

-- View waarin bij de factuur met fin_factuur_key het bijbehorende factuurbestand (PDF) geldt.
CREATE OR REPLACE VIEW vgld_v_factuur_bestand (fin_factuur_key, fin_factuur_bestand)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 1;

-- View waarin bij de factuur met fin_factuur_key het bijbehorende betaalreferentie of betaalkenmerk geldt.
CREATE OR REPLACE VIEW vgld_v_factuur_betaalref (fin_factuur_key, fin_factuur_betaalref)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 2;

-- View waarin bij de factuur met fin_factuur_key de omschrijving van de kopregel (naar Exact) wordt bepaald.
CREATE OR REPLACE VIEW vgld_v_factuur_omschr_kopregel (fin_factuur_key, fin_factuur_omschr_kopregel)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 81;

-- View waarin bij de factuur met fin_factuur_key de omschrijving van de kopregel (naar Exact) wordt bepaald.
CREATE OR REPLACE VIEW vgld_v_factuurregel_datum (fin_factuurregel_key, fin_factuurregel_datum)
AS
SELECT kfr.fin_factuurregel_key, kfr.fin_kenmerkfactregel_waarde
FROM fin_kenmerkfactregel kfr
WHERE kfr.fin_kenmerkfactregel_verwijder IS NULL
AND fin_kenmerk_key = 82;


-- view tbv export naar exact
CREATE OR REPLACE VIEW vgld_v_factuur_mldcnt_gegevens (
   fin_factuur_key,
   opdracht_id,
   fin_factuur_datum,
   fin_factuur_boekmaand,
   fin_factuur_nr,
   fin_factuur_bestand,
   prs_bedrijf_key,
   fin_factuurregel_totaal,
   fin_factuurregel_btw,
   fin_factuurregel_btw_perc,
   fin_btwtabelwaarde_btwcode,
   fin_factuurregel_nr,
   fin_factuurregel_omschrijving,
   fin_factuurregel_datum,
   fin_factuur_debiteur_nr,
   fin_factuur_betaalref,
   fin_factuur_omschr_kopregel,
   project_nummer,
   prs_kostensoort_oms,
   prs_kostensoort_doorbelasten,
   prs_kostenplaats_nr,
   bes_opdr_key,
   mld_opdr_key,
   cnt_contract_key,
   fin_factuur_statuses_key
   )
AS
   SELECT DISTINCT f.fin_factuur_key,
          COALESCE (TO_CHAR (cnt_contract_nummer),
                    (SELECT    sd.ins_srtdiscipline_prefix
                            || m.mld_melding_key
                            || '/'
                            || o.mld_opdr_bedrijfopdr_volgnr
                     FROM mld_melding m,
                          mld_stdmelding std,
                          ins_tab_discipline d,
                          ins_srtdiscipline sd
                     WHERE m.mld_melding_key = o.mld_melding_key
                           AND m.mld_stdmelding_key = std.mld_stdmelding_key
                           AND std.mld_ins_discipline_key = d.ins_discipline_key
                           AND d.ins_srtdiscipline_key =
                                 sd.ins_srtdiscipline_key)
          )
             opdracht_id,
          f.fin_factuur_datum,
          f.fin_factuur_boekmaand,
          f.fin_factuur_nr,
          fb.fin_factuur_bestand,
          COALESCE (b_c.prs_bedrijf_key, b_o.prs_bedrijf_key) prs_bedrijf_key,
          fr.fin_factuurregel_totaal,
          fr.fin_factuurregel_btw,
          btw.fin_btwtabelwaarde_perc,
          btw.fin_btwtabelwaarde_code,
          fr.fin_factuurregel_nr,
          fr.fin_factuurregel_omschrijving,
          frd.fin_factuurregel_datum,
          f.fin_factuur_debiteur_nr,
          fbr.fin_factuur_betaalref,
          fok.fin_factuur_omschr_kopregel,
          NULL projectnummer,
          COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
          DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
          COALESCE (kp_c.prs_kostenplaats_nr, kp_o.prs_kostenplaats_nr) prs_kostenplaats_nr,
          NULL bes_opdr_key,
          o.mld_opdr_key,
          c.cnt_contract_key,
          f.fin_factuur_statuses_key
   FROM fin_factuur f,
        vgld_v_factuur_bestand fb,
        vgld_v_factuur_betaalref fbr,
        vgld_v_factuur_omschr_kopregel fok,
        fin_factuurregel fr,
        vgld_v_factuurregel_datum frd,
        fin_btwtabelwaarde btw,
        mld_opdr o,
        mld_typeopdr ot,
        cnt_contract c,
        prs_bedrijf b_o,
        prs_bedrijf b_c,
        prs_kostensoort ks,
        prs_kostensoort ks_regel,
        prs_kostenplaats kp_c,
        prs_kostenplaats kp_o
   WHERE f.fin_factuur_key = fr.fin_factuur_key
   AND fr.fin_factuurregel_key = frd.fin_factuurregel_key(+)
   AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
   AND f.fin_factuur_key = fb.fin_factuur_key(+)
   AND f.fin_factuur_key = fbr.fin_factuur_key(+)
   AND f.fin_factuur_key = fok.fin_factuur_key(+)
   AND f.bes_bestelopdr_key is null
   AND f.mld_opdr_key = o.mld_opdr_key(+)
   AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key (+)
   AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
   AND f.cnt_contract_key = c.cnt_contract_key(+)
   AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
   AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
   AND c.prs_kostenplaats_key = kp_c.prs_kostenplaats_key (+)
   AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
   AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+);


CREATE OR REPLACE VIEW vgld_v_factuur_bes_gegevens (
   fin_factuur_key,
   opdracht_id,
   fin_factuur_datum,
   fin_factuur_boekmaand,
   fin_factuur_nr,
   fin_factuur_bestand,
   prs_bedrijf_key,
   fin_factuurregel_totaal,
   fin_factuurregel_btw,
   fin_factuurregel_btw_perc,
   fin_btwtabelwaarde_btwcode,
   fin_factuurregel_nr,
   fin_factuurregel_omschrijving,
   fin_factuurregel_datum,
   fin_factuur_debiteur_nr,
   fin_factuur_betaalref,
   fin_factuur_omschr_kopregel,
   project_nummer,
   prs_kostensoort_oms,
   prs_kostensoort_doorbelasten,
   prs_kostenplaats_nr,
   bes_opdr_key,
   mld_opdr_key,
   cnt_contract_key,
   fin_factuur_statuses_key
   )
AS
   SELECT DISTINCT f.fin_factuur_key,
          TO_CHAR (bo.bes_bestelopdr_id) opdracht_id,
          f.fin_factuur_datum,
          f.fin_factuur_boekmaand,
          f.fin_factuur_nr,
          fb.fin_factuur_bestand,
          b.prs_bedrijf_key,
          fr.fin_factuurregel_totaal,
          fr.fin_factuurregel_btw,
          btw.fin_btwtabelwaarde_perc,
          btw.fin_btwtabelwaarde_code,
          fr.fin_factuurregel_nr,
          fr.fin_factuurregel_omschrijving,
          frd.fin_factuurregel_datum,
          f.fin_factuur_debiteur_nr,
          fbr.fin_factuur_betaalref,
          fok.fin_factuur_omschr_kopregel,
          NULL projectnummer,
          COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
          DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
          kp.prs_kostenplaats_nr,
          bo.bes_bestelopdr_key bes_opdr_key,
          NULL mld_opdr_key,
          NULL cnt_contract_key,
          f.fin_factuur_statuses_key
		 FROM  bes_bestelopdr bo,
           prs_bedrijf b,
           bes_bestelling bes,
           bes_bestelopdr_item boi,
           bes_bestelling_item bi,
           fin_factuur f,
           vgld_v_factuur_bestand fb,
           vgld_v_factuur_betaalref fbr,
           vgld_v_factuur_omschr_kopregel fok,
           fin_factuurregel fr,
           vgld_v_factuurregel_datum frd,
           fin_btwtabelwaarde btw,
           prs_kostensoort ks,
           prs_kostensoort ks_regel,
           prs_kostenplaats kp
      WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
        AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
        AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
        AND bes.bes_bestelling_key = bi.bes_bestelling_key
        AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key
        AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
        AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
        AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
        AND f.fin_factuur_key = fr.fin_factuur_key
        AND fr.fin_factuurregel_key = frd.fin_factuurregel_key(+)
        AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
        AND f.fin_factuur_key = fb.fin_factuur_key(+)
        AND f.fin_factuur_key = fbr.fin_factuur_key(+)
        AND f.fin_factuur_key = fok.fin_factuur_key(+);


CREATE OR REPLACE VIEW vgld_v_factuur_geg
AS
SELECT * from vgld_v_factuur_mldcnt_gegevens
UNION
SELECT * from vgld_v_factuur_bes_gegevens;


CREATE OR REPLACE VIEW vgld_v_factuur_geg_akkoord
AS
SELECT * from vgld_v_factuur_mldcnt_gegevens
WHERE fin_factuur_statuses_key = 6
UNION
SELECT * from vgld_v_factuur_bes_gegevens
WHERE fin_factuur_statuses_key = 6;



-- De OUDE ascii-rapportage van het exportbestand die voor Exact zou worden gegenereerd.
CREATE OR REPLACE VIEW vgld_v_rap_exact
(regelnummer,dagb_type, dagbknr, periode, bkjcode, bkstnr, oms25, datum, empty9, debnr,
                   crdnr, empty12, bedrag, drbk_in_val, valcode, koers, kredbep, bdrkredbep, vervdatfak, vervdatkrd,
                   empty21, empty22, weeknummer, betaalref, betwijze, grek_bdr, empty27, empty28, empty29, empty30,
                   empty31, transsubtype, empty33, empty34, empty35, empty36, empty37, empty38, projectnr, field40)
AS
   SELECT regelnummer,dagb_type, dagbknr, periode, bkjcode, bkstnr, oms25, datum, empty9, debnr,
   				crdnr, empty12, bedrag, drbk_in_val, valcode, koers, kredbep, bdrkredbep, vervdatfak, vervdatkrd,
   				empty21, empty22, weeknummer, betaalref, betwijze, grek_bdr, empty27, empty28, empty29, empty30,
   				empty31, transsubtype, empty33, empty34, empty35, empty36, empty37, empty38, projectnr, '!'
   FROM (SELECT 0 regelnummer,
                'I' dagb_type,
                '42' dagbknr,
                '' periode,
                '' bkjcode,
                TO_CHAR (fin_factuur_key) bkstnr,
                opdracht_id oms25,
                TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum,
                '' empty9,
                '' debnr,
                (SELECT prs_leverancier_nr
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
                   crdnr,
                '' empty12,
                REPLACE (TO_CHAR (bedrag), ',', '.') bedrag,
                '' drbk_in_val,
                '' valcode,
                '' koers,
                '' kredbep,
                '' bdrkredbep,
                '' vervdatfak,
                '' vervdatkrd,
                '' empty21,
                '' empty22,
                '' weeknummer,
                COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalref,
                '' betwijze,
                '' grek_bdr,
                '' empty27,
                '' empty28,
                '' empty29,
                '' empty30,
                '' empty31,
                '' transsubtype,
                '' empty33,
                '' empty34,
                '' empty35,
                '' empty36,
                '' empty37,
                '' empty38,
                '' projectnr,
                '!' empty40
         FROM (SELECT fin_factuur_key,
                      opdracht_id,
                      fin_factuur_datum,
                      fin_factuur_nr,
                      prs_bedrijf_key,
                      fin_factuur_debiteur_nr,
                      fin_factuur_betaalref,
                      SUM (fin_factuurregel_totaal + fin_factuurregel_btw)
                         bedrag
               FROM vgld_v_factuur_geg_akkoord
               GROUP BY fin_factuur_key,
                        opdracht_id,
                        fin_factuur_datum,
                        fin_factuur_nr,
                        prs_bedrijf_key,
                        fin_factuur_debiteur_nr,
                        fin_factuur_betaalref) fg
         UNION ALL
         SELECT fin_factuurregel_nr regelnummer,
                'I' dagb_type,
                '42' dagbknr,
                '' periode,
                '' bkjcode,
                TO_CHAR (fin_factuur_key) boekstuknummer,
                COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) oms25,
                TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum,
                prs_kostensoort_oms reknr,
                '' debnr,
                (SELECT prs_leverancier_nr
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
                   crdnr,
                '' empty12,
                REPLACE (TO_CHAR (fin_factuurregel_totaal), ',', '.') bedrag,
                '' drbk_in_val,
                '' val_code,
                '' koers,
                '' kredbep,
                '' bdrkredbep,
                '' vervdatfak,
                '' vervdatkrd,
                fin_btwtabelwaarde_btwcode btw_code,
                REPLACE (TO_CHAR (fin_factuurregel_btw), ',', '.') btw_bdr,
                '' weeknummer,
                '' empty24,
                '' empty25,
                '' empty26,
                prs_kostenplaats_nr kstplcode,
                '' kstdrcode,
                '' empty29,
                '' empty30,
                '' empty31,
                '' transsubtype,
                '' empty33,
                '' empty34,
                '' emtpy35,
                '' empty36,
                '' empty37,
                '' empty38,
                project_nummer projectnr,
                '!' empty40
         FROM vgld_v_factuur_geg_akkoord fg);






-- Alle waarden (zijn evt meer records) uit eigen tabel '$SYSTEM' waarvan de waarde_code met een
-- zekere prefix begint (volgens de systeem-setting PREFIX_FCLT_FACTUUR_XML_HEADER), komen in de header vd xml terecht.
CREATE OR REPLACE VIEW vgld_v_fclt_factuur_header (
   result,
   result_order
   )
AS
SELECT '<' || fac_usrdata_code || '>' || fac_usrdata_omschr || '</' || fac_usrdata_code || '>', 1
FROM fac_usrdata
WHERE  fac_usrtab_key = 21
AND fac_usrdata_verwijder is null;

CREATE OR REPLACE VIEW vgld_v_fclt_factuur_body (
   result,
   result_order
   )
AS
   SELECT DECODE(regelnummer,0,'<fin_factuur>','<fin_factuurregel>')
       || '<fin_factuur_key>'                || fin_factuur_key                           || '</fin_factuur_key>'
       || '<fin_factuur_nr>'                 || xml.char_to_html(fin_factuur_nr)          || '</fin_factuur_nr>'
       || '<fin_factuur_bestand>'            || xml.char_to_html(fin_factuur_bestand)     || '</fin_factuur_bestand>'
       || '<fin_factuur_debiteur_nr>'        || xml.char_to_html(fin_factuur_debiteur_nr) || '</fin_factuur_debiteur_nr>'
       || '<fin_factuur_omschr_kopregel>'    || xml.char_to_html(fin_factuur_omschr_kopregel) || '</fin_factuur_omschr_kopregel>'
       || '<bes_mld_cnt_opdracht_id>'        || xml.char_to_html(bes_mld_cnt_opdracht_id) || '</bes_mld_cnt_opdracht_id>'
       || '<fin_factuur_datum>'              || datum                                     || '</fin_factuur_datum>'
       || '<fin_factuur_boekmaand>'          || fin_factuur_boekmaand                     || '</fin_factuur_boekmaand>'
       || '<prs_kostensoort_oms>'            || xml.char_to_html(grootboekrekening)       || '</prs_kostensoort_oms>'
       || '<prs_kostensoort_doorbelasten>'   || xml.char_to_html(kostensoort_doorbelasten)|| '</prs_kostensoort_doorbelasten>'
       || '<prs_betaal_referentie>'          || xml.char_to_html(betaalreferentie)        || '</prs_betaal_referentie>'
       || '<prs_leverancier_nr>'             || xml.char_to_html(crediteur_nr)            || '</prs_leverancier_nr>'
       || '<prs_bedrijf_naam>'               || xml.char_to_html(crediteur_naam)          || '</prs_bedrijf_naam>'
       || '<fin_factuur_totaal_exbtw>'       || fin_factuur_totaal_exbtw                  || '</fin_factuur_totaal_exbtw>'
       || '<fin_factuur_totaal_incbtw>'      || fin_factuur_totaal_incbtw                 || '</fin_factuur_totaal_incbtw>'
       || '<fin_factuurregel_omschrijving>'  || xml.char_to_html(fin_factuurregel_omschrijving)  || '</fin_factuurregel_omschrijving>'
       || '<fin_factuurregel_datum>'         || xml.char_to_html(fin_factuurregel_datum)  || '</fin_factuurregel_datum>'
       || '<fin_factuurregel_totaal>'        || fin_factuurregel_totaal                   || '</fin_factuurregel_totaal>'
       || '<fin_factuurregel_btw_perc>'      || btw_percentage                            || '</fin_factuurregel_btw_perc>'
       || '<fin_factuurregel_btw_perc_code>' || xml.char_to_html(btw_code)                || '</fin_factuurregel_btw_perc_code>'
       || '<fin_factuurregel_btw_bedrag>'    || btw_bedrag                                || '</fin_factuurregel_btw_bedrag>'
       || '<prs_kostenplaats_nr>'            || xml.char_to_html(prs_kostenplaats_nr)     || '</prs_kostenplaats_nr>'
       || DECODE(regelnummer, 0, '', DECODE(max_factuur_regelnr - regelnummer,0,'</fin_factuurregel></fin_factuur>','</fin_factuurregel>'))
          ,
          (1000000 + fin_factuur_key) * 10000 + regelnummer
   FROM (SELECT 0 regelnummer,
                aant_factuur_regels,
                max_factuur_regelnr,
                fin_factuur_key,
                fin_factuur_nr,
                fin_factuur_bestand,
                fin_factuur_debiteur_nr,
                fin_factuur_omschr_kopregel,
                opdracht_id bes_mld_cnt_opdracht_id,
                TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum,
                fin_factuur_boekmaand,
                '' grootboekrekening,
                '' kostensoort_doorbelasten,
                betaalreferentie,
                (SELECT prs_leverancier_nr
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_nr,
                 (SELECT prs_bedrijf_naam
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_naam,
                REPLACE (TO_CHAR (ROUND(bedrag_exbtw,2)), ',', '.') fin_factuur_totaal_exbtw,
                REPLACE (TO_CHAR (ROUND(bedrag_incbtw,2)), ',', '.') fin_factuur_totaal_incbtw,
                '' fin_factuurregel_omschrijving,
                '' fin_factuurregel_datum,
                '' fin_factuurregel_totaal,
                '' btw_percentage,
                '' btw_code,
                '' btw_bedrag,
                '' prs_kostenplaats_nr
         FROM (SELECT fin_factuur_key,
                      opdracht_id,
                      fin_factuur_datum,
                      fin_factuur_boekmaand,
                      fin_factuur_nr,
                      fin_factuur_bestand,
                      prs_bedrijf_key,
                      fin_factuur_debiteur_nr,
                      COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalreferentie,
                      fin_factuur_omschr_kopregel,
                      COUNT(fin_factuur_key) AS aant_factuur_regels,
                      MAX (fin_factuurregel_nr) AS max_factuur_regelnr,
                      SUM (fin_factuurregel_totaal) bedrag_exbtw,
                      SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incbtw
               FROM vgld_v_factuur_geg_akkoord
               GROUP BY fin_factuur_key,
                        opdracht_id,
                        fin_factuur_datum,
                        fin_factuur_boekmaand,
                        fin_factuur_nr,
                        fin_factuur_bestand,
                        prs_bedrijf_key,
                        fin_factuur_debiteur_nr,
                        fin_factuur_betaalref,
                        fin_factuur_omschr_kopregel) fg
         UNION ALL
         SELECT fin_factuurregel_nr regelnummer,
                (SELECT COUNT(fin_factuur_key)
                 FROM vgld_v_factuur_geg_akkoord fc
                 WHERE fc.fin_factuur_key = fg.fin_factuur_key
                 GROUP BY fin_factuur_key,
                        opdracht_id,
                        fin_factuur_datum,
                        fin_factuur_nr,
                        prs_bedrijf_key,
                        fin_factuur_debiteur_nr) AS aant_factuur_regels,
                (SELECT MAX(fin_factuurregel_nr)
                 FROM vgld_v_factuur_geg_akkoord fc
                 WHERE fc.fin_factuur_key = fg.fin_factuur_key
                 GROUP BY fin_factuur_key,
                        opdracht_id,
                        fin_factuur_datum,
                        fin_factuur_nr,
                        prs_bedrijf_key,
                        fin_factuur_debiteur_nr) AS max_factuur_regelnr,
                fin_factuur_key,
                fin_factuur_nr,
                '' fin_factuur_bestand,
                fin_factuur_debiteur_nr,
                '' fin_factuur_omschr_kopregel,
                '' bes_mld_cnt_opdracht_id,
                TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum,
                fin_factuur_boekmaand,
                prs_kostensoort_oms grootboekrekening,
                TO_CHAR(prs_kostensoort_doorbelasten) kostensoort_doorbelasten,
                COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalreferentie,
                (SELECT prs_leverancier_nr
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_nr,
                 (SELECT prs_bedrijf_naam
                 FROM prs_bedrijf b
                 WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_naam,
                 '' fin_factuur_totaal_exbtw,
                '' fin_factuur_totaal_incbtw,
                fin_factuurregel_omschrijving,
                fin_factuurregel_datum,
                REPLACE (TO_CHAR (ROUND(fin_factuurregel_totaal,2)), ',', '.') fin_factuurregel_totaal,
                TO_CHAR(fin_factuurregel_btw_perc)  btw_percentage,
                fin_btwtabelwaarde_btwcode btw_code,
                REPLACE (TO_CHAR (ROUND(fin_factuurregel_btw,2)), ',', '.') btw_bedrag,
                prs_kostenplaats_nr
         FROM vgld_v_factuur_geg_akkoord fg
         ORDER BY fin_factuur_key, regelnummer);




CREATE OR REPLACE VIEW vgld_v_export_fclt_factuur (
   result,
   result_order
   )
AS
SELECT '<xml>',0 FROM DUAL
UNION
SELECT result, result_order FROM vgld_v_fclt_factuur_header
UNION
SELECT result, result_order FROM vgld_v_fclt_factuur_body
UNION
SELECT '</xml>',99999999999999999999 FROM DUAL;



CREATE OR REPLACE PROCEDURE vgld_export_fclt_factuur (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS

   -- In cursor cfactuur alle facturen die worden geexporteerd...
    CURSOR cfactuur
    IS
        SELECT fin_factuur_key
        FROM vgld_v_factuur_geg_akkoord
        GROUP BY fin_factuur_key;

BEGIN
  -- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT...
  FOR cfact IN cfactuur
  LOOP
      -- Zowel de factuur in tracking zetten als de status op verwerkt (=7) zetten
      fin.setfactuurstatus (cfact.fin_factuur_key, 7, NULL);
  END LOOP;
END;
/



CREATE OR REPLACE VIEW vgld_v_export_undo_exact (
   result,
   result_order
   )
AS
SELECT REPLACE(REPLACE(f.fin_factuur_key
       || ';'
       || opdracht_id
       || ';'
       || fin_factuur_datum
       || ';'
       || fin_factuur_nr
       || ';'
       || prs_bedrijf_key
       || ';'
       || fin_factuurregel_totaal
       || ';'
       || fin_factuurregel_btw
       || ';'
       || fin_factuurregel_nr
       || ';'
       || fin_factuur_debiteur_nr
       || ';'
       || project_nummer
       || ';'
       || prs_kostensoort_oms
       || ';'
       || bes_opdr_key
       || ';'
       || mld_opdr_key
       || ';'
       || cnt_contract_key
      ,CHR (13), ''), CHR (10), '<ret>'), f.fin_factuur_key
 FROM vgld_v_factuur_geg f, fac_tracking t, fac_srtnotificatie sn
 WHERE sn.fac_srtnotificatie_code ='FINVER'
 AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
 AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
                              FROM fac_tracking t1
                              WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
 AND f.fin_factuur_key = t.fac_tracking_refkey
 AND f.fin_factuur_statuses_key = 7;



CREATE OR REPLACE PROCEDURE vgld_select_undo_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
  v_errormsg       VARCHAR (200);
BEGIN
  v_errormsg := 'Geen akties';

END;
/

-- Procedure om alle geexporteerde facturen naar status verwerkt te zetten.
CREATE OR REPLACE PROCEDURE vgld_export_undo_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   CURSOR cfactuur
    IS
      SELECT DISTINCT f.fin_factuur_key
      FROM fac_tracking t, fac_srtnotificatie sn, fin_factuur f
      WHERE sn.fac_srtnotificatie_code ='FINVER'
      AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
      AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
                                   FROM fac_tracking t1
                                   WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
      AND f.fin_factuur_key = t.fac_tracking_refkey
      AND fin_factuur_statuses_key = 7;

   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
  v_errormsg := 'Geen akties';

  FOR cfact IN cfactuur
  LOOP
      -- Eerst de factuur in tracking zetten...
      -- Omdat van 7 naar 6 niet mag/geoorloofd is, lukt het niet via
      -- de reguliere functie fin.setfactuurstatus (cfact.fin_factuur_key, 6, NULL);

      -- Dan maar zelf en custom-made:
      fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
      UPDATE fin_factuur
      SET fin_factuur_statuses_key = 6
      WHERE fin_factuur_key = cfact.fin_factuur_key;

  END LOOP;
END;
/

-- RES: Dagoverzicht per vergaderzaal.
-- rrr.res_status_fo_key IN (1, 2)  -- Alleen Optie + Definitief!
-- res_srtactiviteit_key = 1      -- Ruimte (géén Voorz. + WP)!

CREATE OR REPLACE VIEW vgld_v_rap_res_infobord
(
   aktief,
   offset,
   fclt_f_jaar,
   fclt_f_maand,
   fclt_f_dag,
   dag,
   tijd_van,
   tijd_tot,
   reserv_ruimte,
   fclt_f_ruimte,
   fclt_f_dagoverzicht,
   activiteit,
   catalogus,
   aanvrager,
   gastheer,
   omschrijving,
   status,
   locatie_code,
   gebouw_code,
   verdieping_code,
   locatie_omschrijving,
   gebouw_omschrijving,
   verdieping_omschrijving,
   alg_locatie_key,
   alg_gebouw_key,
   alg_verdieping_key,
   alg_ruimte_key
)
AS
SELECT  (CASE
                WHEN rrr.res_rsv_ruimte_van > SYSDATE THEN 'expected'
                WHEN rrr.res_rsv_ruimte_tot < SYSDATE THEN 'passed'
                ELSE 'active'
             END)  aktief,
            TRUNC ( (SYSDATE - rrr.res_rsv_ruimte_van) * 24 * 60) offset,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy') fclt_f_jaar,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'mm') fclt_f_maand,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'dd') fclt_f_dag,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') dag,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') tijd_van,
            TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') tijd_tot,
            rrg.res_ruimte_nr ruimte,
            r.alg_ruimte_omschrijving,
            DECODE(RK.ALG_ONRGOEDKENMERK_WAARDE,'1', 'Ja', 'Nee'),
            A.RES_ACTIVITEIT_OMSCHRIJVING,
            rd.ins_discipline_omschrijving catalogus,
            aanvrager.prs_perslid_naam_full aanvrager,
            gastheer.prs_perslid_naam_full gastheer,
            rrr.res_rsv_ruimte_omschrijving omschrijving,
            sf.res_status_fo_omschrijving status,
            l.alg_locatie_code locatie_code,
            g.alg_gebouw_code gebouw_code,
            v.alg_verdieping_code verdieping_code,
            l.alg_locatie_omschrijving locatie_omschrijving,
            g.alg_gebouw_omschrijving gebouw_omschrijving,
            v.alg_verdieping_omschrijving verdieping_omschrijving,
            l.alg_locatie_key,
            g.alg_gebouw_key,
            v.alg_verdieping_key,
            r.alg_ruimte_key
     FROM   res_v_aanwezigrsv_ruimte rrr,
            res_ruimte_opstelling rro,
            res_v_res_ruimte_gegevens rrg,
            res_alg_ruimte rar,
            prs_v_perslid_fullnames aanvrager,
            prs_v_perslid_fullnames gastheer,
            alg_locatie l,
            alg_gebouw g,
            alg_verdieping v,
            alg_ruimte r,
           alg_onrgoedkenmerk rk,
            res_status_fo sf,
            res_activiteit a,
            res_discipline rd
    WHERE       rrr.res_status_fo_key IN (1, 2)
            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rrg.res_ruimte_key
            AND rrg.res_ruimte_key = RAR.RES_RUIMTE_KEY
            and RAR.ALG_RUIMTE_KEY = r.alg_ruimte_key
            AND rk.alg_onrgoed_key (+)=  r.alg_ruimte_key
            AND rk.alg_kenmerk_key (+) = 1000
            AND rk.alg_onrgoed_niveau (+) ='R'
            AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
            AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
            AND rrg.alg_locatie_key = l.alg_locatie_key
            AND rrg.alg_gebouw_key = g.alg_gebouw_key
            AND rrg.alg_verdieping_key = v.alg_verdieping_key
            AND rrr.res_status_fo_key = sf.res_status_fo_key
            AND rrr.res_activiteit_key = a.res_activiteit_key
            AND a.res_srtactiviteit_key = 1      -- Ruimte (géén Voorz. + WP)!
            AND rrg.res_discipline_key = rd.ins_discipline_key;





--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--       DELIXL E-INVOICING  --  DELIXL E-INVOICING  --  DELIXL E-INVOICING  --  DELIXL E-INVOICING  --  DELIXL E-INVOICING  --  DELIXL E-INVOICING  --  DELIXL E-INVOICING         --
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE vgld_post_fin_factuur_delixl (p_import_key IN NUMBER)
AS
   mb VARCHAR(50);
BEGIN
   mb := 'Dit is een dummy';
END;
/


CREATE OR REPLACE PROCEDURE vgld_import_fin_factuur_delixl (p_import_key IN NUMBER)
AS
    v_seq_of_columns VARCHAR(50);
BEGIN

--In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);document(8);debiteurnr(9);opmerking(10);btw_verlegd(11);betaalkenmerk(12)
--hulp voor pos      :  '1;2;3;4;5;6;7;8;9;0;1;2;3;14;15;16;7;8;9;0'
    v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;8;0;0;0;9;0;0;0;0';

      -- Variabelelijst
    -- v_leveranciernr: 1
    -- v_factuurnr: 2            (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
    -- v_factuurdatum: 3
    -- v_ordernr: 4              (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_locatie: 5
    -- v_afleverdatum: 6
    -- v_omschrijving: 7
    -- v_aantal: 8
    -- v_kostprijs: 9            (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_btw_bedrag: 10          (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
    -- v_btw: 11                 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
    -- v_docid: 12
    -- v_debiteur_nr: 13
    -- v_opmerking: 14
    -- v_btw_verlegd: 15         (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
    -- v_kenmerk1: 16
    -- v_kenmerk1: 17
    -- v_kenmerk1: 18
    -- v_kenmerk1: 19
    -- v_kenmerk1: 20
    -- v_boekmaand: 21

    fac_import_factuur_body(p_import_key, v_seq_of_columns);
    vgld_post_fin_factuur_delixl (p_import_key);
END;
/

--
-- CUST: post processing van:
   -- 1) Factuurregelnummers conform de bestelopdracht-regelnummers (want die krijgen we van DeliXML weer mee terug, en da's handig om te vergelijken indien dat nodig mocht zijn)
   --    Deze had wat mij betreft ook in standaard fac_update_factuur gemogen, echter daar ontbreekt de sortering daarop, en is de sortering DESC (had ASC gemogen).
   -- 2) voor verwerking van kenmerk 'kostensoort' (grootboekrekening)

CREATE OR REPLACE PROCEDURE vgld_post_update_factuur_deli (p_import_key IN NUMBER)
AS
    v_fac_usrtab_key            fac_usrtab.fac_usrtab_key%TYPE;
    v_fac_usrdata_omschr        fac_usrdata.fac_usrdata_omschr%TYPE;
    v_prs_kostensoort_key       prs_kostensoort.prs_kostensoort_key%TYPE;
    v_fin_kostensoort_key       prs_kostensoort.prs_kostensoort_key%TYPE;

    CURSOR cfactuurregel_kostensoort
    IS
        SELECT DISTINCT fin_factuur_key, factuurnr, fin_factuurregel_key, kenmerk1, fac_imp_file_index
        FROM fac_imp_factuur
        WHERE fac_import_key = p_import_key;
BEGIN

   -- In productie is de key van eigen tabel '$DeliXL' 101
   v_fac_usrtab_key := 101;


   -- De betaalreferentie wordt in kenmerk 1 van fac_imp_factuur gezet, dus alle fac_imp_factuur langsgaan en verwerken

   FOR rc IN cfactuurregel_kostensoort
   LOOP
        BEGIN
            UPDATE fin_factuurregel
            SET fin_factuurregel_nr = rc.fac_imp_file_index
            WHERE fin_factuurregel_key = rc.fin_factuurregel_key;

            -- Kostensoorten van DeliXL (KS-D) als volgt omgezet naar kostensoort van Vogellanden (KS-V):
            -- Stap a) uit VGLD#28993, via eigen tabel $DeliXL

            SELECT MAX(ud.fac_usrdata_omschr)
            INTO v_fac_usrdata_omschr
            FROM fac_usrdata ud
            WHERE fac_usrtab_key = v_fac_usrtab_key
            AND ud.fac_usrdata_verwijder IS NULL
            AND rc.kenmerk1 LIKE ud.fac_usrdata_code;

            IF v_fac_usrdata_omschr IS NULL
            THEN
                -- We hebben nog GEEN match gevonden in de eigen tabel '$DeliXL', verder op zoek naar de kostensoort:
                -- Stap b) uit VGLD#28993, voorloopnul van KS-D erachter gezet (b.v. 0123 wordt 1230)

                IF SUBSTR(rc.kenmerk1,1,1) = '0'
                THEN
                    -- 1e cijfer van kostensoort Deli is een 0, dus voorloopnul erachter zetten.
                    v_fac_usrdata_omschr := SUBSTR(rc.kenmerk1,2) || SUBSTR(rc.kenmerk1,1,1);
                END IF;
            END IF;

            IF v_fac_usrdata_omschr IS NOT NULL
            THEN
                -- Dan gaan we op zoek of de kostensoort volgens stap a) of stap b) wel bestaat.
                SELECT MAX(prs_kostensoort_key)
                INTO v_prs_kostensoort_key
                FROM prs_kostensoort
                WHERE prs_kostensoort_upper = UPPER(v_fac_usrdata_omschr);

                IF v_prs_kostensoort_key IS NOT NULL
                THEN
                    -- We hebben een geldige vertaling van kostensoort van Deli -> kostensoort Vogellanden.
                    -- Nu nog ff checken of deze kostensoort al bij factuur staat, want dan hoeven we dit op factuurregel niet te zetten (dan neemt die de kostensoort van factuur 'over')

                    SELECT COALESCE(f.prs_kostensoort_key,-1)
                    INTO v_fin_kostensoort_key
                    FROM fin_factuur f, fin_factuurregel fr
                    WHERE f.fin_factuur_key = fr.fin_factuur_key
                    AND fr.fin_factuurregel_key = rc.fin_factuurregel_key;

                    IF v_fin_kostensoort_key <> v_prs_kostensoort_key
                    THEN
                        -- De kostensoort is NIET dezelfde als bij factuur, dus we gaan hem op factuurregel nivo zetten.
                        UPDATE fin_factuurregel
                        SET prs_kostensoort_key = v_prs_kostensoort_key
                        WHERE fin_factuurregel_key = rc.fin_factuurregel_key;
                    END IF;
                END IF;
            END IF;

        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Van factuur met key ' || rc.fin_factuur_key || ' is de kostensoort niet verwerkt (regel ' || rc.fac_imp_file_index || ')',
                                'Factuurnr:' || rc.factuurnr  || ' / Kostensoort: ' || rc.kenmerk1
                                );
        END;
   END LOOP;
END;
/


CREATE OR REPLACE PROCEDURE vgld_update_fin_factuur_delixl (p_import_key IN NUMBER)
AS
BEGIN
   -- Standaard FCLT verwerk import facturen

   fac_update_factuur (p_import_key);
   -- CUST: post processing van:
   -- 1) Factuurregelnummers conform de bestelopdracht-regelnummers (want die krijgen we van DeliXML weer mee terug, en da's handig om te vergelijken indien dat nodig mocht zijn)
   -- 2) voor verwerking van kenmerk 'kostensoort' (grootboekrekening)
   vgld_post_update_factuur_deli(p_import_key);
END;
/



--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------	 		      OFFICE DEPOT E-INVOICING  --  OFFICE DEPOT E-INVOICING  --  OFFICE DEPOT E-INVOICING  --  OFFICE DEPOT E-INVOICING  --  OFFICE DEPOT E-INVOICING 							------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


CREATE OR REPLACE PROCEDURE vgld_import_fin_factuur_od (p_import_key IN NUMBER)
AS
    v_seq_of_columns VARCHAR(50);
BEGIN

--In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);document(8);debiteurnr(9);opmerking(10);btw_verlegd(11);betaalkenmerk(12)
--hulp voor pos      :  '1;2;3;4;5;6;7;8;9;0;1;2;3;14;15;16;7;8;9;0'
    v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;0;0;0;0;0;0;0;0;0';

      -- Variabelelijst
    -- v_leveranciernr: 1
    -- v_factuurnr: 2            (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
    -- v_factuurdatum: 3
    -- v_ordernr: 4              (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_locatie: 5
    -- v_afleverdatum: 6
    -- v_omschrijving: 7
    -- v_aantal: 8
    -- v_kostprijs: 9            (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_btw_bedrag: 10          (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
    -- v_btw: 11                 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
    -- v_docid: 12
    -- v_debiteur_nr: 13
    -- v_opmerking: 14
    -- v_btw_verlegd: 15         (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
    -- v_kenmerk1: 16
    -- v_kenmerk1: 17
    -- v_kenmerk1: 18
    -- v_kenmerk1: 19
    -- v_kenmerk1: 20
    -- v_boekmaand: 21

    fac_import_factuur_body(p_import_key, v_seq_of_columns);
END;
/


CREATE OR REPLACE PROCEDURE vgld_update_fin_factuur_od (p_import_key IN NUMBER)
AS
BEGIN
   -- Standaard FCLT verwerk import facturen
   fac_update_factuur (p_import_key);
END;
/



----------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Koppeling met Exact - CREDITEUREN


CREATE OR REPLACE PROCEDURE vgld_post_import_ext_bedrijf (p_import_key IN NUMBER)
AS
BEGIN
		-- VGLD stuurt geen LUC mee, afgesproken dat elke leverancier LUC gaat zijn (leverancier, uitvoerende en contractant).
		-- Daarom in deze post-import alle bedrijven in de import met p_import_key een LUC markeren.

		UPDATE fac_imp_ext_bedrijf
		SET prs_bedrijf_leverancier = 1,
				prs_bedrijf_uitvoerende = 1,
				prs_bedrijf_contract = 1;

		-- Alle @@ (deze worden in de XSL geplaatst) worden door CR/LF vervangen.
		UPDATE fac_imp_ext_bedrijf
		SET prs_bedrijf_opmerking = replace(prs_bedrijf_opmerking, '@@',CHR (10));

END;
/


CREATE OR REPLACE PROCEDURE vgld_import_extern_bedrijf (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_seq_of_columns VARCHAR(255);
BEGIN
		-- hulpje            1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;4
	 	v_seq_of_columns := '2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;4;0;0';
	 	fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
	 	vgld_post_import_ext_bedrijf (p_import_key);

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


CREATE OR REPLACE PROCEDURE vgld_update_extern_bedrijf (
   p_import_key IN NUMBER)
AS
   CURSOR ciban
   IS
      SELECT b.prs_bedrijf_key,
             i.prs_leverancier_nr,
             SUBSTR (i.prs_bedrijf_opmerking,
                     7,
                     INSTR (i.prs_bedrijf_opmerking, CHR (10)) - 7)
                AS importiban,
             (SELECT prs_kenmerklink_waarde
                FROM prs_kenmerklink
               WHERE prs_kenmerk_key = 1080             --Kenmerk Bankrekening
                     AND prs_link_key = b.prs_bedrijf_key)
                AS iban
        FROM fac_imp_ext_bedrijf i, prs_bedrijf b
       WHERE b.prs_leverancier_nr = i.prs_leverancier_nr
             AND b.prs_bedrijf_verwijder IS NULL;
BEGIN
   -- Parameter p_sync = 0 of 1:
   -- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd.
   -- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete
   fac_update_bedrijf_body (p_import_key, 1);

   --VGLD#55300: Ook kenmerk 'Bankrekening' vullen met IBAN nummer
   FOR reciban IN ciban
   LOOP
      BEGIN
         prs.upsertkenmerk (1080,
                            reciban.prs_bedrijf_key,
                            reciban.importiban);
      END;
   END LOOP;
END;
/

CREATE OR REPLACE VIEW vgld_v_rap_besstatuslist
AS
   SELECT bes_bestelling_key,
          TO_CHAR (bes_bestelling_key) bestelling,
          bes_bestellingstatuses_omschr status,
          DECODE (bes_bestelling_status,
                  2, 'Actief',
                  3, 'Actief',
                  4, 'Actief',
                  5, 'Actief',
                  'Gesloten')
             actief,
          b.prs_perslid_key,
          b.prs_perslid_key_voor,
          pf1.prs_perslid_naam_full besteller,
          pf2.prs_perslid_naam_full besteld_voor,
          bes_bestelling_datum aanvraagdatum,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft, fac_srtnotificatie sn
            WHERE     fac_tracking_refkey = b.bes_bestelling_key
                  AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
                  AND fac_srtnotificatie_xmlnode = 'bestelling'
                  AND fac_srtnotificatie_code = 'BESACP')
             facilitair_bedrijfsbureau,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft, fac_srtnotificatie sn
            WHERE     fac_tracking_refkey = b.bes_bestelling_key
                  AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
                  AND fac_srtnotificatie_xmlnode = 'bestelling'
                  AND fac_srtnotificatie_code = 'BESFIT')
             fiat_manager,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft, fac_srtnotificatie sn
            WHERE     fac_tracking_refkey = b.bes_bestelling_key
                  AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
                  AND fac_srtnotificatie_xmlnode = 'bestelling'
                  AND fac_srtnotificatie_code = 'BESBES')
             besteld,
          bes_bestelling_leverdatum plan_levdatum,
          (  SELECT MAX (bes_bestelopdr_item_ontvangen)
               FROM bes_bestelopdr bo,
                    bes_bestelopdr_item boi,
                    bes_bestelling_item bbi,
                    bes_bestelling b1
              WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                    AND bbi.bes_bestelopdr_item_key =
                          boi.bes_bestelopdr_item_key
                    AND b1.bes_bestelling_key = bbi.bes_bestelling_key
                    AND b1.bes_bestelling_status IN (6, 7, 9) -- Geleverd, Verwerkt, Ontvangen
                    AND b.bes_bestelling_key = b1.bes_bestelling_key
           GROUP BY b1.bes_bestelling_key)
             afgeleverd,
          bes_bestelling_opmerking opmerking,
          bes_bestelling_lev_opm lever_opemerking
     FROM bes_bestelling b,
          bes_bestellingstatuses bs,
          prs_v_perslid_fullnames_all pf1,
          prs_v_perslid_fullnames_all pf2
    WHERE     b.bes_bestelling_status = bs.bes_bestellingstatuses_key
          AND b.prs_perslid_key = pf1.prs_perslid_key
          AND b.prs_perslid_key_voor = pf2.prs_perslid_key
          AND fac_activiteit_key IS NULL;

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