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

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

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

-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE aait_select_daily_task (p_applname   IN   VARCHAR2, p_applrun    IN   VARCHAR2)
AS
BEGIN
   aaxx_daily_task (p_applname, p_applrun);
END;
/

-- budgettracker overrules
CREATE OR REPLACE VIEW aait_v_export_budget_tracker   (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_budget_tracker;


-- export overrules
-- exact
CREATE OR REPLACE VIEW aait_v_export_exact (RESULT, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
     FROM fac_rapport
    WHERE fac_rapport_node = 'EXACT';

CREATE OR REPLACE PROCEDURE aait_select_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  -- Bij AAIT wordt in de opdracht bepaald op welke grootboekrekening (lees: kostensoort) de kosten geboekt
  -- moeten worden. Dit wordt vastgelegd in srtkenmerk met key 201. Dit is een lijst met kostensoorten. Voor het
  -- exporteren van de kosten wordt de kostensoort_key in de factuur gelijk gemaakt aan de kostensoort bij de
  -- opdracht.
  UPDATE fin_factuur f
     SET prs_kostensoort_key = COALESCE((SELECT fac.safe_to_number(mld_kenmerkopdr_waarde)
                                  FROM mld_kenmerk k, mld_kenmerkopdr ko, mld_opdr o
                                 WHERE f.mld_opdr_key = o.mld_opdr_key
                                   AND o.mld_opdr_key = ko.mld_opdr_key
                                   AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                                   AND k.mld_srtkenmerk_key = 201), prs_kostensoort_key)   -- srtkenmerk Grootboekrekening/Kostensoort
   WHERE EXISTS (SELECT fg.fin_factuur_key
                   FROM aaxx_v_factuur_gegevens fg, mld_kenmerkopdr ko, mld_kenmerk k
                  WHERE fg.fin_factuur_key = f.fin_factuur_key
                    AND fg.mld_opdr_key = ko.mld_opdr_key
                    AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                    AND k.mld_srtkenmerk_key = 201
                    AND fg.fin_factuur_statuses_key = 6);
  aaxx_select_exact_xml (p_applname, p_applrun);
END;
/


CREATE OR REPLACE PROCEDURE aait_export_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact (p_applname, p_applrun, p_filedir, p_filename);
END;
/


CREATE OR REPLACE VIEW aait_v_export_verwerk_exact    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_verwerk_exact;
CREATE OR REPLACE PROCEDURE aait_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact(p_applname, p_applrun, p_filedir, p_filename);
END;
/

CREATE OR REPLACE PROCEDURE aait_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact(p_applname, p_applrun, p_filedir, p_filename);
END;
/

-- bundel catering
CREATE OR REPLACE VIEW aait_v_export_bundel_catering    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_bundel_catering;
CREATE OR REPLACE PROCEDURE aait_export_bundel_catering (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_bundel_catering(p_applname, p_applrun, p_filedir, p_filename);
END;
/

-- exact verkoop
CREATE OR REPLACE VIEW aait_v_export_exact_verkoop    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aait_select_exact_verkoop (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_verkoop(p_applname, p_applrun, to_char(sysdate, 'yyyy'));
END;
/
CREATE OR REPLACE PROCEDURE aait_export_exact_verkoop (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact_verkoop(p_applname, p_applrun, p_filedir, p_filename, to_char(sysdate, 'yyyy'));
END;
/

-- exact verkoop over het vorige jaar
CREATE OR REPLACE VIEW aait_v_export_exact_verkoop_vj    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aait_select_exact_verkoop_vj (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_verkoop(p_applname, p_applrun, to_char(to_number(to_char(sysdate, 'yyyy'))-1));
END;
/
CREATE OR REPLACE PROCEDURE aait_export_exact_verkoop_vj (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact_verkoop(p_applname, p_applrun, p_filedir, p_filename, to_char(to_number(to_char(sysdate, 'yyyy'))-1));
END;
/

-- exact projecturen (XML), opgesplitst naar boekhouding (eerste 3 digits kostenplaats)
CREATE OR REPLACE VIEW aait_v_export_exact_uren001 (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = SUBSTR ('EXACT_UREN001', 1, 12);

CREATE OR REPLACE VIEW aait_v_export_exact_uren007 (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = SUBSTR ('EXACT_UREN007', 1, 12);

CREATE OR REPLACE VIEW aait_v_export_exact_uren012 (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = SUBSTR ('EXACT_UREN012', 1, 12);

CREATE OR REPLACE VIEW aait_v_export_exact_uren300 (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = SUBSTR ('EXACT_UREN300', 1, 12);

-- Exportregels (XML-structuur) in fac_rapport
CREATE OR REPLACE PROCEDURE aait_select_exact_uren001 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_uren_xml(p_applname, p_applrun, '001');
END;
/

CREATE OR REPLACE PROCEDURE aait_select_exact_uren007 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_uren_xml(p_applname, p_applrun, '007');
END;
/

CREATE OR REPLACE PROCEDURE aait_select_exact_uren012 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_uren_xml(p_applname, p_applrun, '012');
END;
/

CREATE OR REPLACE PROCEDURE aait_select_exact_uren300 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_uren_xml(p_applname, p_applrun, '300');
END;
/

-- verwerk exact projecturen (XML)
CREATE OR REPLACE PROCEDURE aait_export_vw_exact_uren001 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact_uren(p_applname, p_applrun, p_filedir, p_filename, '001');
END;
/

CREATE OR REPLACE PROCEDURE aait_export_vw_exact_uren007 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact_uren(p_applname, p_applrun, p_filedir, p_filename, '007');
END;
/

CREATE OR REPLACE PROCEDURE aait_export_vw_exact_uren012 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact_uren(p_applname, p_applrun, p_filedir, p_filename, '012');
END;
/

CREATE OR REPLACE PROCEDURE aait_export_vw_exact_uren300 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact_uren(p_applname, p_applrun, p_filedir, p_filename, '300');
END;
/

--------------------------------
-- import contractorders
--------------------------------
CREATE OR REPLACE PROCEDURE aait_import_contract (p_import_key IN NUMBER) IS
BEGIN
    aaxx_import_contract (p_import_key);
END aait_import_contract;
/

CREATE OR REPLACE PROCEDURE aait_update_contract (p_import_key IN NUMBER)
AS
BEGIN
    aaxx_update_contract (p_import_key);
END aait_update_contract;
/

CREATE OR REPLACE PROCEDURE aait_import_ruimte (p_import_key IN NUMBER)
AS
BEGIN
  aaxx_import_ruimte(p_import_key);
END;
/

CREATE OR REPLACE PROCEDURE aait_update_ruimte (p_import_key IN NUMBER)
AS
BEGIN
  aaxx_update_ruimte(p_import_key);
END;
/


-- personen import koppeling
CREATE OR REPLACE PROCEDURE aait_import_perslid_mut (p_import_key IN NUMBER)
AS
   v_afdelingscode       VARCHAR2(100);
   v_persoonachternaam   VARCHAR2(100);
   v_tussenvoegsel       VARCHAR2(100);
   v_voorletters         VARCHAR2(100);
   v_voornaam            VARCHAR2(100);
   v_titel               VARCHAR2(100);
   v_telefoonnummer      VARCHAR2(100);
   v_mobiel              VARCHAR2(100);
   v_email               VARCHAR2(100);
   v_functie             VARCHAR2(100);
   v_loginnaam           VARCHAR2(100);
   v_personeelsnummer    VARCHAR2(100);
   v_dienstverband       VARCHAR2(100);
   v_uurloon             VARCHAR2(100);
   v_kostenplaats        VARCHAR2(100);
   v_header              VARCHAR2(1000);
   v_newline             VARCHAR2(1000);
   header_is_valid       NUMBER := 0;

   v_old_login           VARCHAR2 (30);
   c_delim               VARCHAR2 (1) := ';';

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

   -- cursor om de tussenvoegsels goed in te kunnen vullen. Deze staan nu achter de achternaam.
   CURSOR c
   IS
        SELECT   fac_usrdata_omschr, loginnaam
          FROM   aait_imp_perslid p, fac_usrdata u
         WHERE   UPPER(p.persoonachternaam) LIKE UPPER(u.fac_usrdata_omschr) || ' ' || '%'
           AND   fac_usrtab_key = 201
      ORDER BY   p.loginnaam, LENGTH (fac_usrdata_omschr) DESC;

BEGIN
   v_old_login := 'QueQeLeQue';

   -- Eerst opruiming
   DELETE FROM   aait_imp_perslid
         WHERE   fac_import_key <> p_import_key;

   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;

         -- Lees alle veldwaarden
         v_header := v_newline;
         fac.imp_getfield (v_newline, c_delim, v_afdelingscode);
         fac.imp_getfield (v_newline, c_delim, v_persoonachternaam);
         fac.imp_getfield (v_newline, c_delim, v_tussenvoegsel);
         fac.imp_getfield (v_newline, c_delim, v_voorletters);
         fac.imp_getfield (v_newline, c_delim, v_voornaam);
         fac.imp_getfield (v_newline, c_delim, v_titel);
         fac.imp_getfield (v_newline, c_delim, v_telefoonnummer);
         fac.imp_getfield (v_newline, c_delim, v_mobiel);
         fac.imp_getfield (v_newline, c_delim, v_email);
         fac.imp_getfield (v_newline, c_delim, v_functie);
         fac.imp_getfield (v_newline, c_delim, v_personeelsnummer);
         fac.imp_getfield (v_newline, c_delim, v_loginnaam);
         fac.imp_getfield (v_newline, c_delim, v_dienstverband);
         fac.imp_getfield (v_newline, c_delim, v_uurloon);
         fac.imp_getfield (v_newline, c_delim, v_kostenplaats);

         IF (header_is_valid = 0)
         THEN
            IF LOWER (TRIM (v_header)) = 'afdelingscode;persoonachternaam;tussenvoegsel;voorletters;voornaam;titel aanhef;telefoonnummer;mobiel;email;functie;personeelsnummer;loginnaam;dienstverband;uurloon;kostenplaats'
               OR LOWER (TRIM (v_header)) = '"afdelingscode";"persoonachternaam";"tussenvoegsel";"voorletters";"voornaam";"titel aanhef";"telefoonnummer";"mobiel";"email";"functie";"personeelsnummer";"loginnaam";"dienstverband";"uurloon";"kostenplaats"'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            INSERT INTO aait_imp_perslid (
              afdelingscode,
              persoonachternaam,
              tussenvoegsel,
              voorletters,
              voornaam,
              titel,
              telefoonnummer,
              mobiel,
              email,
              functie,
              loginnaam,
              personeelsnummer,
              dienstverband,
              uurloon,
              kostenplaats,
              fac_import_key)
            VALUES (
              v_afdelingscode,
              v_persoonachternaam,
              v_tussenvoegsel,
              v_voorletters,
              v_voornaam,
              v_titel,
              DECODE(v_telefoonnummer, 'N/A', NULL, v_telefoonnummer),
              v_mobiel,
              DECODE(v_email, 'N/A', NULL, v_email),
              v_functie,
              v_loginnaam,
              v_personeelsnummer,
              v_dienstverband,
              v_uurloon,
              to_char(fac.safe_to_number(v_kostenplaats), '00000000'),
              p_import_key);
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (
         p_import_key,
         'E',
         'Ongeldige header',
         'Controleer het importbestand.'
      );
   ELSE
      -- splits de achternaam in tussenvoegsels en achternaam.
      FOR rec IN c
      LOOP
         BEGIN
            IF rec.loginnaam <> v_old_login
            THEN
               DBMS_OUTPUT.put_line (
                  rec.loginnaam || '-' || rec.fac_usrdata_omschr);
               v_old_login := rec.loginnaam;

               UPDATE aait_imp_perslid p
                  SET tussenvoegsel = rec.fac_usrdata_omschr,
                      persoonachternaam =
                         TRIM(SUBSTR (persoonachternaam,
                                      LENGTH (rec.fac_usrdata_omschr) + 1))
                WHERE p.loginnaam = rec.loginnaam;
            END IF;
         END;
      END LOOP;

      DELETE fac_imp_perslid;

      INSERT INTO fac_imp_perslid (
         prs_afdeling_naam,
         prs_perslid_naam,
         prs_perslid_tussenvoegsel,
         prs_perslid_voorletters,
         prs_perslid_voornaam,
         prs_perslid_titel,
         prs_perslid_telefoonnr,
         prs_perslid_mobiel,
         prs_perslid_email,
         prs_srtperslid_omschrijving,
         prs_perslid_oslogin,
         prs_perslid_nr)
      SELECT substr(afdelingscode, 1, 10),
             substr(persoonachternaam, 1, 60),
             substr(tussenvoegsel, 1, 15),
             substr(voorletters, 1, 10),
             substr(voornaam, 1, 30),
             substr(titel, 1, 15),
             substr(telefoonnummer, 1, 15),
             substr(mobiel, 1, 15),
             substr(email, 1, 50),
             substr(functie, 1, 60),
             substr(loginnaam, 1, 30),
             substr(personeelsnummer, 1, 16)
        FROM aait_imp_perslid
       WHERE fac_import_key = p_import_key;
   END IF;


END aait_import_perslid_mut;
/


CREATE OR REPLACE PROCEDURE aait_update_perslid_mut (
   p_import_key IN NUMBER
) IS

CURSOR c_del
IS
SELECT prs_perslid_key,
       prs_perslid_naam,
       prs_perslid_oslogin,
       prs_perslid_oslogin2,
       prs_perslid_login,
       (SELECT COUNT ( * )
          FROM prs_v_verplichting v
         WHERE v.prs_perslid_key = p.prs_perslid_key)
          verplichtingen
  FROM prs_perslid p
 WHERE NOT EXISTS
          (SELECT prs_perslid_key
             FROM fac_imp_perslid i
            WHERE p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin)
                  OR p.prs_perslid_oslogin2 = UPPER (i.prs_perslid_oslogin))
       AND prs_perslid_verwijder IS NULL
       AND (prs_perslid_oslogin NOT LIKE '/_%' ESCAPE ('/')
            OR prs_perslid_oslogin IS NULL);


-- cursor om extra velden toe te voegen die niet in de generiek import staan
CURSOR c_extra
IS
   SELECT p.prs_perslid_key, prs_perslid_naam_full, kostenplaats, dienstverband, uurloon
     FROM aait_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames pf
    WHERE UPPER(i.loginnaam) = p.prs_perslid_oslogin
      AND p.prs_perslid_key = pf.prs_perslid_key;

v_perslid_key     NUMBER;
v_perslid_nr      VARCHAR2(100);
v_kostenplaats_nr VARCHAR2(100);
v_fac_groep_key   NUMBER;
v_count           NUMBER;
v_errormsg        VARCHAR2 (1000);
oracle_err_num    NUMBER;
oracle_err_mes    VARCHAR2 (200);
v_aanduiding      VARCHAR2 (200);
BEGIN

   SELECT count(*)
     INTO v_count
     FROM fac_imp_perslid;

   IF v_count > 100 THEN

     BEGIN
        SELECT fac_groep_key
          INTO v_fac_groep_key
          FROM fac_groep
         WHERE UPPER (fac_groep_omschrijving) = 'HEYDAY MEDEWERKER';
     EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
           INSERT INTO fac_groep (fac_groep_omschrijving)
               VALUES ('HEYDAY Medewerker')
            RETURNING fac_groep_key
                 INTO v_fac_groep_key;
     END;

  	 -- generic update
     aaxx.fac_gen_update_perslid (p_import_key, 'LOGIN', 0, '');

     -- extra velden toevoegen aan de persoon
     FOR rec IN c_extra
     LOOP
        BEGIN
           v_aanduiding :=    rec.prs_perslid_naam_full||' ('
                           || rec.kostenplaats||', '||rec.dienstverband||', '||rec.uurloon||')';
           UPDATE prs_perslid p
              SET prs_perslid_uurloon = fac.safe_to_number(replace(rec.uurloon,',','.')),
                  prs_perslid_dienstverband = fac.safe_to_number(replace(rec.dienstverband, ',','.'))
            WHERE p.prs_perslid_key = rec.prs_perslid_key;

           aaxx.set_prs_kenmerk (p_import_key, 'P', 2, rec.prs_perslid_key, rec.kostenplaats);

           -- voeg de persoon toe aan de groep AAFM-projecturen als deze al niet tot de groep behoort.
           INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
           SELECT g.fac_groep_key, p.prs_perslid_key
             FROM prs_perslid p, fac_groep g
            WHERE p.prs_perslid_key = rec.prs_perslid_key
              AND g.fac_groep_key = v_fac_groep_key
              AND NOT EXISTS (
                  SELECT fac_gebruikersgroep_key
                    FROM fac_gebruikersgroep gg
                   WHERE gg.fac_groep_key = g.fac_groep_key
                     AND gg.prs_perslid_key = p.prs_perslid_key);
        EXCEPTION
           WHEN OTHERS
           THEN
              oracle_err_num := SQLCODE;
              oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
              v_errormsg :=
                    v_errormsg
                 || ' ORACLE (error '
                 || oracle_err_num
                 || '/'
                 || oracle_err_mes
                 || ')';
              fac.imp_writelog (
                 p_import_key,
                 'E',
                 v_aanduiding || v_errormsg,
                 'Fout bij bijwerken persoon.'
              );
        END;
     END LOOP;



     FOR rec IN c_del
     LOOP
        BEGIN
           v_aanduiding :=    rec.prs_perslid_naam||' ('
                           || rec.prs_perslid_oslogin||'/'||rec.prs_perslid_oslogin2||')';

           UPDATE prs_perslid p
              SET prs_perslid_oslogin = NULL,
                  prs_perslid_oslogin2 = NULL
            WHERE p.prs_perslid_key = rec.prs_perslid_key;

           DELETE fac_gebruikersgroep
            WHERE prs_perslid_key = rec.prs_perslid_key
              AND fac_groep_key = v_fac_groep_key;

           IF rec.verplichtingen = 0 THEN
              UPDATE prs_perslid p
                 SET prs_perslid_verwijder = sysdate
               WHERE p.prs_perslid_key = rec.prs_perslid_key;
           ELSE
              UPDATE prs_perslid p
                 SET prs_perslid_naam = substr('Inactief ' || prs_perslid_naam, 1,60)
               WHERE p.prs_perslid_key = rec.prs_perslid_key
                 AND p.prs_perslid_naam not like 'Inactief%';
           END IF;
        EXCEPTION
           WHEN OTHERS
           THEN
              oracle_err_num := SQLCODE;
              oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
              v_errormsg :=
                    v_errormsg
                 || ' ORACLE (error '
                 || oracle_err_num
                 || '/'
                 || oracle_err_mes
                 || ')';
              fac.imp_writelog (
                 p_import_key,
                 'E',
                 v_aanduiding || v_errormsg,
                 'Fout bij verwijderen persoon.'
              );
        END;
     END LOOP;

     -- Plaats de key van de personen in het importbestand. De prs_perslid_key vanuit de AAIT
     -- omgeving wordt als sleutel in de andere omgevingingen gebruikt.
     -- Hetzelfde met de APIKEY. Die is niet voor de syncronisatie gebruiken omdat hij niet
     -- (altijd) is ingevuld (niet bij verwijderder personen bijvoorbeeld)
     UPDATE aait_imp_perslid i
        SET prs_perslid_key =
               (SELECT prs_perslid_key
                  FROM prs_perslid p
                 WHERE p.prs_perslid_oslogin = UPPER(loginnaam)),
            prs_perslid_apikey =
               (SELECT prs_perslid_apikey
                  FROM prs_perslid p
                 WHERE p.prs_perslid_oslogin = UPPER(loginnaam)),
            uurloon_intern =
               (SELECT prs_kenmerklink_waarde
                  FROM prs_perslid p, prs_kenmerklink kl
                 WHERE p.prs_perslid_key = kl.prs_link_key
                   AND kl.prs_kenmerk_key = 6               -- Uurloon intern
                   AND p.prs_perslid_oslogin = UPPER(loginnaam)),
            distributie =
               (SELECT prs_kenmerklink_waarde
                  FROM prs_perslid p, prs_kenmerklink kl
                 WHERE p.prs_perslid_key = kl.prs_link_key
                   AND kl.prs_kenmerk_key = 1080               -- Distributie
                   AND p.prs_perslid_oslogin = UPPER(loginnaam));
   END IF;

END aait_update_perslid_mut;
/

-- Andere account mogen ook gebruik maken van deze data
-- Er is globaal gedaan:
-- GRANT SELECT ON aait_imp_perslid TO PUBLIC;

--  AAIT#24873: Rapportage bezoekers op scherm
-- kenmerk key 1000: afspraak is prive (dus niet op infobord)
CREATE OR REPLACE VIEW aait_v_rap_infobord
AS
SELECT * FROM aaxx_v_rap_infobord;

-- AAIT#30008:OVERRULE van de defaultview gebruikt voor het infobord (fac_usrrap met key 12)
-- zonder "offset > -60"
CREATE OR REPLACE VIEW aait_v_rap_infobordframe
(
    tijd,
    kamer,
    omschrijving,
    voorzitter,
    hide_f_alg_locatie_key,
    hide_f_alg_gebouw_key,
    hide_f_alg_verdieping_key
)
AS
    SELECT tijd_van || '-' || tijd_tot,
           ruimte,
           omschrijving,
           gastheer,
           alg_locatie_key,
           alg_gebouw_key,
           alg_verdieping_key
      FROM res_v_rap_infobord
     WHERE (status = 'Definitief' OR status = 'Optie') AND aktief <> 'passed';


CREATE OR REPLACE VIEW aait_v_rap_bezoekers
AS
SELECT * FROM aaxx_v_rap_infobord;


-- view om temperatuurgegevens in de ruimte te plaatsen
-- ins_srtdeel_key = 1781                            -- temp sensoren
CREATE OR REPLACE VIEW aait_v_label_temp
(
   alg_ruimte_key,
   waarde
)
AS
     SELECT r.alg_ruimte_key,
            alg_ruimte_nr
            || DECODE (
                  MAX (ins_deel_state),
                  NULL,
                  NULL,
                  '[br]'
                  || MAX(fac.safe_to_number (
                            REPLACE (ins_deel_state, ',', '.')))
                  || CHR (176)
                  || 'C')
       FROM (SELECT ins_alg_ruimte_key, ins_deel_state
               FROM ins_deel
              WHERE ins_srtdeel_key = 1781) d, alg_ruimte r
      WHERE r.alg_ruimte_key = d.ins_alg_ruimte_key(+)
   GROUP BY r.alg_ruimte_key, r.alg_ruimte_nr;

--
-- WP SENSOREN
--

-- als we ruimte informatie gecombineerd met object informatie willen laten zien hebben we ook een dummy ins_deel_key nodig
CREATE OR REPLACE VIEW aait_v_thema_srtruimtesensor
(
   alg_ruimte_key,
   waarde,
   ins_deel_key
)
AS
   SELECT alg_ruimte_key,
          waarde,
          (SELECT MAX (ins_deel_key)
             FROM ins_deel d
            WHERE ins_alg_ruimte_key = alg_ruimte_key
              AND d.ins_srtdeel_key = 1521)
             dummy_sensor
     FROM cad_v_thema_srtruimtesensor;

CREATE OR REPLACE VIEW aait_v_thema_wp_sensor
(
   ins_deel_key,
   alg_ruimte_key,
   waarde
)
AS
   SELECT ins_deel_key,
          ins_alg_ruimte_key,
          DECODE (ins_deel_state,
                  1, '01',
                  DECODE (rrd.res_rsv_deel_key, NULL, '10', '02'))
     FROM ins_deel d,
          res_deel rd,
          (SELECT res_rsv_deel_key, res_deel_key
             FROM res_rsv_deel
            WHERE SYSDATE BETWEEN res_rsv_deel_van AND res_rsv_deel_tot) rrd
    WHERE ins_discipline_key = 1402
      AND d.ins_deel_key = rd.res_ins_deel_key(+)
      AND rd.res_deel_key = rrd.res_deel_key(+);

-- toon bij werkplek objecten geen label info
CREATE OR REPLACE VIEW aait_v_label_ins_empty
(
   alg_ruimte_key,
   waarde,
   ins_deel_key
)
AS
   SELECT alg_ruimte_key, NULL waarde, ins_deel_key
     FROM aait_v_thema_wp_sensor;


CREATE OR REPLACE VIEW AAIT_V_RAP_FACTUUR_GOEDKEURING
(
   FCLT_D_DATUM_GOEDKEURING,
   APPROVER,
   FIN_FACTUUR_KEY,
   FIN_FACTUUR_NR,
   PRS_BEDRIJF_NAAM,
   PRS_BEDRIJF_BEZOEK_ADRES,
   PRS_BEDRIJF_TELEFOON,
   PRS_BEDRIJF_FAX,
   FIN_FACTUUR_DATUM,
   FIN_FACTUUR_AANMAAK,
   FIN_FACTUUR_TOTAAL,
   FIN_FACTUUR_BTW,
   MODULE,
   ORDERNUMMER,
   ORDERDATUM,
   OMSCHRIJVING,
   ORDERSTATUS,
   ORDERBEDRAG,
   PRS_KOSTENSOORT_OPMERKING,
   PRS_KOSTENSOORT_OMS,
   PRS_KOSTENPLAATS_NR,
   PRS_KOSTENPLAATS_OMSCHRIJVING,
   CALLER
)
AS
   SELECT TO_CHAR (fac.gettrackingdate ('FINFOK', g.fin_factuur_key),
                   'dd-mm-yyyy')
             fclt_d_datum_acc,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all
            WHERE prs_perslid_key =
                     fac.gettrackinguserkey ('FINFOK', f.fin_factuur_key))
             approver,
          g.fin_factuur_key,
          g.fin_factuur_nr,
          prs_bedrijf_naam,
          prs_bedrijf_bezoek_adres,
          prs_bedrijf_telefoon,
          prs_bedrijf_fax,
          TO_CHAR (g.fin_factuur_datum, 'dd-mm-yyyy'),
          TO_CHAR (fac.gettrackingdate ('FINNEW', g.fin_factuur_key),
                   'dd-mm-yyyy')
             fin_factuur_aanmaak,
          fin_factuur_totaal,
          fin_factuur_totaal + fin_factuur_totaal_btw,
          module,
          ordernummer,
          TO_CHAR (orderdatum, 'dd-mm-yyyy'),
          omschrijving,
          orderstatus,
          orderbedrag,
          prs_kostensoort_opmerking,
          ks.prs_kostensoort_oms,
          prs_kostenplaats_nr,
          prs_kostenplaats_omschrijving,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all
            WHERE prs_perslid_key = caller)
     FROM aaxx_v_factuur_gegevens g,
          prs_bedrijf b,
          fin_factuur f,
          (  SELECT 'BES' module,
                    bo.bes_bestelopdr_key,
                    NULL mld_opdr_key,
                    NULL cnt_contract_key,
                    bo.bes_bestelopdr_id ordernummer,
                    bes_bestelopdr_datum orderdatum,
                    bes.bestelopdr_tooltip (bo.bes_bestelopdr_key) omschrijving,
                    bes_bestelopdrstatuses_omschr orderstatus,
                    SUM (bi.bes_bestelling_item_brutoprijs) orderbedrag,
                    b.prs_perslid_key caller
               FROM bes_bestelopdr bo,
                    bes_bestelopdr_item boi,
                    bes_bestelling_item bi,
                    bes_bestelling b,
                    bes_bestelopdrstatuses s
              WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                    AND boi.bes_bestelopdr_item_key =
                          bi.bes_bestelopdr_item_key
                    AND bi.bes_bestelling_key = b.bes_bestelling_key
                    AND bo.bes_bestelopdr_status = s.bes_bestelopdrstatuses_key
           GROUP BY bo.bes_bestelopdr_key,
                    bo.bes_bestelopdr_id,
                    bes_bestelopdr_datum,
                    bes_bestelopdrstatuses_omschr,
                    b.prs_perslid_key
           UNION ALL
           SELECT 'MLD',
                  NULL,
                  mld_opdr_key,
                  NULL,
                     ins_srtdiscipline_prefix
                  || o.mld_melding_key
                  || '/'
                  || mld_opdr_bedrijfopdr_volgnr,
                  mld_opdr_datumbegin,
                  mld_opdr_omschrijving,
                  mld_statusopdr_omschrijving,
                  mld_opdr_kosten,
                  m.prs_perslid_key
             FROM mld_opdr o,
                  mld_melding m,
                  mld_stdmelding std,
                  mld_statusopdr s,
                  ins_tab_discipline d,
                  ins_srtdiscipline sd
            WHERE     o.mld_melding_key = m.mld_melding_key
                  AND o.mld_statusopdr_key = s.mld_statusopdr_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
                  AND sd.ins_srtdiscipline_prefix = 'IT'
           UNION ALL
           SELECT 'CNT',
                  NULL,
                  NULL,
                  cnt_contract_key,
                     cnt_contract_nummer_intern
                  || '.'
                  || COALESCE (cnt_contract_versie, '0'),
                  cnt_contract_looptijd_van,
                  cnt_contract_document,
                  DECODE (
                     SIGN (cnt_contract_looptijd_van - SYSDATE),
                     1,
                     'Toekomst',
                     -1,
                     DECODE (SIGN (cnt_contract_looptijd_tot - SYSDATE),
                             1, 'Actueel',
                             -1, 'Verlopen')),
                  cnt_contract_termijnkosten,
                  prs_perslid_key_beh
             FROM cnt_contract c,
                  prs_v_afdeling_boom a
            WHERE c.prs_afdeling_key_eig = a.prs_afdeling_key
              AND a.prs_afdeling_key1 = 173) order_geg,  -- STAFF afdeling
          prs_kostenplaats k,
          prs_kostensoort ks
    WHERE (   g.mld_opdr_key = order_geg.mld_opdr_key
           OR g.cnt_contract_key = order_geg.cnt_contract_key
           OR g.bes_bestelopdr_key = order_geg.bes_bestelopdr_key)
          AND g.prs_bedrijf_key = b.prs_bedrijf_key
          AND g.fin_factuur_key = f.fin_factuur_key
          AND g.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND g.prs_kostensoort_key = ks.prs_kostensoort_key
          AND f.fin_factuur_statuses_key IN (6, 7);

CREATE OR REPLACE VIEW aait_v_noti_ordreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
     SELECT 'CUST01',
            '',
            prs.getkpverantwoordelijke (o.prs_kostenplaats_key,
                                        2,
                                        m.prs_perslid_key)
               budgethouder,
               'REMINDER: '
            || COUNT (o.mld_opdr_key)
            || ' Service Request'
            || DECODE (COUNT (o.mld_opdr_key), 1, '', 's'),
            MIN (o.mld_opdr_key), -- Dummy key, althans een willekeurige; nog testen of dit werkt???
            NULL,
            NULL,
            NULL
       FROM mld_opdr o, mld_melding m
      WHERE o.mld_statusopdr_key = 3 AND o.mld_melding_key = m.mld_melding_key
   GROUP BY prs.getkpverantwoordelijke (o.prs_kostenplaats_key,
                                        2,
                                        m.prs_perslid_key);

CREATE OR REPLACE VIEW AAIT_V_NOTI_FINREMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   PAR1,
   PAR2,
   XKEY
)
AS
     SELECT 'FININF',
            '',
            546,  -- Mr. Hartley
               'Fiatteringsverzoek voor '
            || COUNT (f.fin_factuur_key)
            || DECODE (COUNT (f.fin_factuur_key), 1, ' factuur.', ' facturen.'),
            MIN (f.fin_factuur_key), -- Dummy key, althans een willekeurige; FSN#19425
            NULL,
            NULL,
            NULL
       FROM fin_factuur f
      WHERE f.fin_factuur_statuses_key =
               DECODE (TO_CHAR (SYSDATE, 'D'), 1, 99, 7, 99, 2) -- notificatie niet versturen in het weekend
        AND f.fin_factuur_verwijder IS NULL
   GROUP BY fin_factuur_statuses_key;


CREATE OR REPLACE VIEW aait_v_kostensoort (
   prs_kostensoort_key,
   prs_kostensoort_omschrijving
   )
AS
   SELECT prs_kostensoort_key,
          prs_kostensoort_oms || '-' || prs_kostensoort_opmerking
   FROM prs_kostensoort;


CREATE OR REPLACE VIEW aait_v_mobile_phones (
   ins_srtdeel_key,
   ins_srtdeel_omschrijving
   )
AS
   SELECT ins_srtdeel_key, ins_srtdeel_omschrijving
   FROM ins_srtdeel
   WHERE ins_srtdeel_code_upper = 'MO' AND ins_srtdeel_verwijder IS NULL
   ORDER BY ins_srtdeel_omschrijving;

CREATE OR REPLACE VIEW aait_v_laptops (
   ins_srtdeel_key,
   ins_srtdeel_omschrijving
   )
AS
   SELECT ins_srtdeel_key, ins_srtdeel_omschrijving
   FROM ins_srtdeel
   WHERE ins_srtdeel_code_upper = 'LP' AND ins_srtdeel_verwijder IS NULL
   ORDER BY ins_srtdeel_omschrijving;


CREATE OR REPLACE VIEW aait_v_rap_order_corrections
(
   fclt_3d_user_key,
   melding,
   status,
   datum,
   omschrijving
)
AS
   SELECT gg.prs_perslid_key,
          m.mld_melding_key,
          s.mld_statuses_omschrijving,
          m.mld_melding_datum,
          m.mld_melding_omschrijving
     FROM mld_melding m,
          mld_statuses s,
          mld_stdmelding std,
          fac_groep gr,
          fac_functie f,
          fac_groeprechten g,
          fac_gebruikersgroep gg,
          alg_v_allonroerendgoed aog,
          prs_v_perslidwerkplek_gegevens pwg
    WHERE     std.mld_ins_discipline_key = 441            -- order corrections
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND m.mld_melding_status = s.mld_statuses_key
          AND g.fac_functie_key = f.fac_functie_key
          AND f.fac_functie_code = 'WEB_MLDBO3'
          AND g.ins_discipline_key = std.mld_ins_discipline_key
          AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
          AND pwg.alg_gebouw_key = aog.alg_gebouw_key
          AND pwg.prs_perslid_key = gg.prs_perslid_key
          AND g.fac_groep_key = gg.fac_groep_key
          AND gg.fac_groep_key = gr.fac_groep_key
          AND gr.fac_groep_omschrijving <> '_Admin'
          AND m.mld_melding_status IN (2, 3)          -- ingevoerd en ingezien
   UNION ALL
   SELECT gg.prs_perslid_key,
          m.mld_melding_key,
          s.mld_statuses_omschrijving,
          m.mld_melding_datum,
          m.mld_melding_omschrijving
     FROM mld_melding m,
          mld_stdmelding std,
          mld_statuses s,
          fac_groep gr,
          fac_functie f,
          fac_groeprechten g,
          fac_gebruikersgroep gg,
          alg_v_allonroerendgoed aog,
          prs_v_perslidwerkplek_gegevens pwg
    WHERE     std.mld_ins_discipline_key = 441            -- order corrections
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND m.mld_melding_status = s.mld_statuses_key
          AND g.fac_functie_key = f.fac_functie_key
          AND f.fac_functie_code = 'WEB_MLDBO2'
          AND g.ins_discipline_key = std.mld_ins_discipline_key
          AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
          AND pwg.alg_gebouw_key = aog.alg_gebouw_key
          AND pwg.prs_perslid_key = gg.prs_perslid_key
          AND g.fac_groep_key = gg.fac_groep_key
          AND gg.fac_groep_key = gr.fac_groep_key
          AND gr.fac_groep_omschrijving <> '_Admin'
          AND m.mld_melding_status IN (4);
                                       -- geaccepteerd


CREATE OR REPLACE VIEW aait_v_noti_ordercorr (
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
   )
AS
   SELECT 'FACUSR',
          '',
          fclt_3d_user_key,
             'Facilitor: There are ' || count(*) || ' Order Correction Request(s) assigned to you.',
          341,  -- key van rapport aait_v_rap_order_corrections
          '',
          '',
          NULL
   FROM aait_v_rap_order_corrections
   GROUP BY fclt_3d_user_key;

CREATE OR REPLACE VIEW aait_v_noti_bes_accept (
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
   )
AS
   SELECT DISTINCT 'BESAP1',
          '',
          546,
          '',
          b.bes_bestelling_key,
          '',
          '',
          NULL
  FROM fac_v_webgebruiker g,
       bes_discipline bd,
       bes_bestelling b,
       bes_bestelling_item bi,
       bes_srtdeel sd,
       bes_srtgroep sg,
       (  SELECT fac_tracking_refkey,
                 MAX (fac_tracking_datum) fac_tracking_datum
            FROM fac_tracking t, fac_srtnotificatie sn
           WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                 AND fac_srtnotificatie_code <> 'BESMAI'
                 AND fac_srtnotificatie_xmlnode = 'bestelling'
        GROUP BY fac_tracking_refkey) tr
 WHERE     g.prs_perslid_key = 546   -- Derek Hartley
       AND bd.ins_discipline_key = g.ins_discipline_key
       AND b.bes_bestelling_key = bi.bes_bestelling_key
       AND bi.bes_srtdeel_key = sd.bes_srtdeel_key  -- 5.1.0
       AND sd.bes_srtgroep_key = sg.bes_srtgroep_key    -- 5.1.0
       AND sg.ins_discipline_key = g.ins_discipline_key
       AND b.bes_bestelling_status = 3   -- gefiatteerd
       AND tr.fac_tracking_refkey = b.bes_bestelling_key
       AND tr.fac_tracking_datum > sysdate -1;


CREATE OR REPLACE PROCEDURE aait_select_status_com4 (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2)
AS
   -- Cursor loopt - in volgorde! - over alle kenmerken
   CURSOR c
   IS
        SELECT ko.mld_kenmerkopdr_key,
               ko.mld_kenmerkopdr_waarde,
               o.mld_melding_key,
               o.mld_opdr_key,
               o.mld_statusopdr_key
          FROM mld_kenmerkopdr ko,
               mld_kenmerk k,
               mld_srtkenmerk sk,
               mld_opdr o
         WHERE o.mld_opdr_key = ko.mld_opdr_key
           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_omschrijving = 'Classificatie uit import'
      ORDER BY mld_kenmerkopdr_aanmaak;

   v_errormsg         VARCHAR2 (1000);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_count            NUMBER (10);
   v_aanduiding       VARCHAR2 (200);
   v_soort_call       VARCHAR2 (100);
   v_categorie        VARCHAR2 (100);
   v_subcategorie     VARCHAR2 (100);
   v_msg_type         VARCHAR2 (100);                            -- AFM of UPD
   v_status           VARCHAR2 (100);
   v_statusregel      VARCHAR2 (200);
   v_api_user_key     prs_perslid.prs_perslid_key%TYPE;
   v_prefix           ins_srtdiscipline.ins_srtdiscipline_prefix%TYPE;
   v_vakgroep         ins_tab_discipline.ins_discipline_omschrijving%TYPE;
   v_stdmelding       mld_stdmelding.mld_stdmelding_omschrijving%TYPE;
   v_discipline_key   ins_tab_discipline.ins_discipline_key%TYPE;
   v_stdmelding_key   mld_stdmelding.mld_stdmelding_key%TYPE;
   v_track_info       fac_tracking.fac_tracking_oms%TYPE;
BEGIN
   SELECT prs_perslid_key
     INTO v_api_user_key
     FROM prs_perslid
    WHERE prs_perslid_naam = 'COM4 koppeling';

   -- Loop door alle geimporteerde opdrachtstatusberichten en verwerk deze.
   FOR rec IN c
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.mld_kenmerkopdr_waarde || '] ';
         v_statusregel := rec.mld_kenmerkopdr_waarde;

         fac.imp_getfield (v_statusregel, ';', v_soort_call);
         fac.imp_getfield (v_statusregel, ';', v_categorie);
         fac.imp_getfield (v_statusregel, ';', v_subcategorie);
         fac.imp_getfield (v_statusregel, ';', v_msg_type);      -- AFM of UPD
         fac.imp_getfield (v_statusregel, ';', v_status);

         -- Accepteer opdracht (als msg_type=UPD en nog niet al geaccepteerd)!
         IF (v_msg_type = 'UPD' AND rec.mld_statusopdr_key = 5)
         THEN
            v_errormsg := 'Fout bij accepteren opdracht.';

            mld.setopdrachtstatus (rec.mld_opdr_key, 8, v_api_user_key); -- api user

            COMMIT;
         END IF;

         -- Probeer de melding om te hangen naar de classificatie die COM4IT er aan toegekend heeft.
         BEGIN
            IF v_soort_call IS NOT NULL
           AND v_categorie IS NOT NULL
           AND v_subcategorie IS NOT NULL
            THEN
               v_errormsg := 'Bepalen huidige gegevens.';

               SELECT    'Melding '
                      || sd.ins_srtdiscipline_prefix
                      || m.mld_melding_key
                      || ' ('
                      || ins_discipline_omschrijving
                      || '/'
                      || mld_stdmelding_omschrijving
                      || ') is gewijzigd '
                      || CHR (10)
                      || 'Melding: '
                      || std.mld_stdmelding_omschrijving
                      || ' --> '
                 INTO v_track_info
                 FROM mld_stdmelding std,
                      ins_tab_discipline d,
                      ins_srtdiscipline sd,
                      mld_melding m
                WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
                  AND d.ins_discipline_key = std.mld_ins_discipline_key
                  AND std.mld_stdmelding_key = m.mld_stdmelding_key
                  AND m.mld_melding_key = rec.mld_melding_key;

               v_errormsg := 'Bepalen vakgroeptype.';

               CASE v_soort_call
                  WHEN 'Storing'
                  THEN
                     v_prefix := 'ST';
                  WHEN 'Change'
                  THEN
                     v_prefix := 'SA';
                  WHEN 'Informatieverzoek'
                  THEN
                     v_prefix := 'IV';
                  WHEN 'Klacht'
                  THEN
                     v_prefix := 'KL';
                  WHEN 'Wens'
                  THEN
                     v_prefix := 'SA';
                  WHEN 'Onderhoud'
                  THEN
                     v_prefix := 'SA';
                  WHEN 'Project'
                  THEN
                     v_prefix := 'PR';
                  WHEN 'Verkoop'
                  THEN
                     v_prefix := 'SA';
               END CASE;

               v_errormsg := 'Bepalen vakgroep.';

               IF INSTR (v_categorie, '-') = 2
              AND fac.safe_to_number (SUBSTR (v_categorie, 1, 1)) IS NOT NULL
               THEN
                  v_vakgroep := SUBSTR (v_categorie, 3);
               ELSE
                  v_vakgroep := v_categorie;
               END IF;

               v_errormsg := 'Bepalen stdmelding.';

               IF INSTR (v_subcategorie, '-') = 2
              AND fac.safe_to_number (SUBSTR (v_subcategorie, 1, 1)) IS NOT NULL
               THEN
                  v_stdmelding := SUBSTR (v_subcategorie, 3);
               ELSE
                  v_stdmelding := v_subcategorie;
               END IF;

               v_errormsg := 'Opzoeken vakgroep en stdmelding keys.';

               SELECT mld_ins_discipline_key, mld_stdmelding_key
                 INTO v_discipline_key, v_stdmelding_key
                 FROM mld_stdmelding std,
                      ins_tab_discipline d,
                      ins_srtdiscipline sd
                WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
                  AND d.ins_discipline_key = std.mld_ins_discipline_key
                  AND UPPER (sd.ins_srtdiscipline_prefix) = UPPER (v_prefix)
                  AND UPPER (d.ins_discipline_omschrijving) =
                         UPPER (v_vakgroep)
                  AND UPPER (std.mld_stdmelding_omschrijving) =
                         UPPER (v_stdmelding)
                  AND std.mld_stdmelding_verwijder IS NULL
                  AND d.ins_discipline_verwijder IS NULL
                  AND sd.ins_srtdiscipline_verwijder IS NULL;

               v_errormsg := 'Omhangen vakgroep en stdmelding keys.';

               UPDATE mld_melding
                  SET mld_stdmelding_key = v_stdmelding_key
                WHERE mld_melding_key = rec.mld_melding_key;

               INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                         fac_tracking_oms,
                                         fac_tracking_refkey,
                                         prs_perslid_key)
                   VALUES (28,
                           v_track_info || v_stdmelding,
                           rec.mld_melding_key,
                           v_api_user_key);

            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
               v_errormsg :=
                     v_errormsg
                  || ' ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.writelog (p_applname,
                             'W',
                             v_aanduiding || v_errormsg,
                             'Fout bij omhangen opdrachtstatusbericht.');

               INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                         fac_tracking_oms,
                                         fac_tracking_refkey,
                                         prs_perslid_key)
                   VALUES (28,
                           'Fout bij omhangen melding: ' || v_aanduiding,
                           rec.mld_melding_key,
                           v_api_user_key);
         END;

         -- Sluit opdracht (als msg_type=AFM); de bovenliggende melding wordt
         -- tevens gesloten als het de laatste opdracht is!
         -- Let op: het veld status kan vanuit COM4 de waarde Niet Opgelost meekrijgen. In dat
         -- geval gaan we niet afmelden.
         IF v_msg_type = 'AFM'
         THEN
            -- opdracht wordt tegenwoordig in de mld_opdrsoap al afgemeld. De melding moet
            -- nog wel afgemeld worden.
            IF rec.mld_statusopdr_key = 5 OR rec.mld_statusopdr_key = 8
            THEN
               v_errormsg := 'Fout bij sluiten opdracht.';
               mld.setopdrachtstatus (rec.mld_opdr_key, 6, v_api_user_key); -- api user
               COMMIT;
            END IF;

            IF v_status <> 'Niet opgelost'
            THEN
               v_errormsg := 'Fout bij sluiten melding.';

               SELECT COUNT ( * )
                 INTO v_count
                 FROM (SELECT m.mld_melding_key,
                              (SELECT COUNT ( * )
                                 FROM mld_opdr o
                                WHERE mld_melding_key = m.mld_melding_key)
                                 aanw_opdr,
                              (SELECT COUNT ( * )
                                 FROM mld_opdr o
                                WHERE mld_melding_key = m.mld_melding_key
                                  AND o.mld_statusopdr_key NOT IN
                                            (1, 2, 6, 7, 9))
                                 open_opdr
                         FROM mld_melding m
                        WHERE m.mld_melding_key = rec.mld_melding_key
                          AND m.mld_melding_status IN (4, 7)) niet_opgelost
                WHERE aanw_opdr > 0 AND open_opdr = 0;

               IF (v_count = 1)
               THEN
                  mld.setmeldingstatus (rec.mld_melding_key,
                                        5,
                                        v_api_user_key);           -- api_user
                  mld.mld_nextworkflowstep (rec.mld_melding_key, 1); -- Succes
                  COMMIT;
               END IF;
            ELSE
               BEGIN
                  mld.updatemeldingstatus (rec.mld_melding_key,
                                           0,
                                           v_api_user_key);
               END;
            END IF;
         END IF;

         -- pas de operking aan bij de melding. Nu we hier afmelden heeft de api geen mldbof rechten meer.
         UPDATE mld_melding
            SET mld_melding_opmerking =
                (SELECT mld_opdr_opmerking
                   FROM mld_opdr o
                  WHERE o.mld_opdr_key = rec.mld_opdr_key)
          WHERE mld_melding_key = rec.mld_melding_key;

         -- als we het werk gedaan hebben mogen we het kenmerk verwijderen.
         DELETE mld_kenmerkopdr WHERE mld_kenmerkopdr_key = rec.mld_kenmerkopdr_key;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.writelog (p_applname,
                          'E',
                          v_aanduiding || v_errormsg,
                          'Fout bij verwerken opdrachtstatusbericht.');
      END;
   END LOOP;

   COMMIT;
END;
/


-- export om opdrachten aan te maken bij meldingen met auto-order die onderdeel
-- uitmaken van een workflow. Bijkomend voordeel is dat deze functie ook de
-- opdrachten aanmaakt bij meldingen met auto-order waarbij abusievelijk geen
-- opdracht aangemaakt is.
CREATE OR REPLACE PROCEDURE aait_export_autoorder (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
CURSOR c
IS
  SELECT m.mld_melding_key,
         m.prs_kostenplaats_key,
         m.mld_melding_omschrijving,
         MAX (bdl.prs_bedrijf_key) prs_bedrijf_key,
         std.mld_typeopdr_key,
         m.mld_melding_einddatum,
         m.mld_melding_status
    FROM mld_melding m,
         mld_stdmelding std,
         prs_dienst d,
         prs_bedrijfdienstlocatie bdl
   WHERE     m.mld_melding_status IN (2, 3, 4) -- Ingevoerd, Ingezien, Geaccepteerd
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_stdmelding_autoorder = 1
         AND std.prs_dienst_key = bdl.prs_dienst_key
         AND mld_melding_datum > SYSDATE - 1 -- voorkom dat oude meldingen ineens verstuurd gaan worden
         AND mld_melding_datum < SYSDATE - (1/96)  -- voorkom dat meldingen die nog bezig zijn met aanmaken al aangepast worden.
         AND std.mld_typeopdr_key IS NOT NULL
         AND NOT EXISTS (SELECT mld_melding_key
                           FROM mld_opdr o
                          WHERE mld_melding_key = m.mld_melding_key)
GROUP BY mld_melding_key,
         prs_kostenplaats_key,
         mld_melding_omschrijving,
         mld_typeopdr_key,
         mld_melding_einddatum,
         mld_melding_status;

CURSOR c_flex (c_melding_key NUMBER)
IS
  SELECT sk.mld_srtkenmerk_kenmerktype,
         sk.mld_srtkenmerk_omschrijving,
         DECODE (
            sk.mld_srtkenmerk_kenmerktype,
            'S',
            fac.getdomeinwaarde (sk.fac_kenmerkdomein_key,
                                 mld_kenmerkmelding_waarde),
            'R',
            fac.getdomeinwaarde (sk.fac_kenmerkdomein_key,
                                 mld_kenmerkmelding_waarde),
            mld_kenmerkmelding_waarde) waarde
    FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk
   WHERE mld_melding_key = c_melding_key
     AND km.mld_kenmerk_key = k.mld_kenmerk_key
     AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
   ORDER BY k.mld_kenmerk_volgnummer;

  v_opdr_key                     NUMBER;
  v_notificatie_code             VARCHAR2(20);
  v_mld_opdr_bedrijfopdr_volgnr  NUMBER;
  v_melding_omschrijving         VARCHAR2(4000);
BEGIN


	FOR rec IN c
  LOOP
     BEGIN
        -- eerst even de status naar geaccepteerd zetten.
        IF rec.mld_melding_status <> 4 THEN
           MLD.setmeldingstatus (rec.mld_melding_key, 4, 4);            -- Geaccepteerd, Facilitor
        END IF;

        v_melding_omschrijving := NULL;
        FOR rec_flex IN c_flex(rec.mld_melding_key)
        LOOP
           BEGIN
              v_melding_omschrijving := v_melding_omschrijving || rec_flex.mld_srtkenmerk_omschrijving || ': ' || rec_flex.waarde || chr(10);
           END;
        END LOOP;

        v_mld_opdr_bedrijfopdr_volgnr := mld.BepaalOpdrMeldingVolgnr (rec.mld_melding_key);

        INSERT INTO mld_opdr (mld_melding_key
		                        , prs_kostenplaats_key
		                        , mld_typeopdr_key
		                        , prs_perslid_key
		                        , mld_uitvoerende_keys
		                        , mld_opdr_datumbegin
		                        , mld_opdr_einddatum
		                        , mld_opdr_module
		                        , mld_opdr_omschrijving
		                        , mld_opdr_bedrijfopdr_volgnr
		                        , mld_opdr_teverzenden)
		    VALUES ( rec.mld_melding_key
		           , rec.prs_kostenplaats_key
               , rec.mld_typeopdr_key
               , 4    -- facilitor
               , rec.prs_bedrijf_key
               , SYSDATE
               , rec.mld_melding_einddatum
               , 'MLD'
               , v_melding_omschrijving || rec.mld_melding_omschrijving
               , v_mld_opdr_bedrijfopdr_volgnr
               , 1)
         RETURNING mld_opdr_key INTO v_opdr_key;

         MLD.setopdrachtstatus(v_opdr_key , 5, 4);  -- uitgegeven, Facilitor

         SELECT DECODE (u.type, 'P', 'ORDMLI', 'ORDMLE')
           INTO v_notificatie_code
           FROM mld_v_uitvoerende u
          WHERE u.mld_uitvoerende_key = rec.prs_bedrijf_key;

         FAC.trackaction(v_notificatie_code, v_opdr_key, 4, NULL, NULL);

         -- update melding status
         MLD.updatemeldingstatus (rec.mld_melding_key, 0, 4); -- facilitor

     EXCEPTION
        WHEN OTHERS
        THEN
           fac.writelog (p_applname
                           , 'E'
                           , 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'
                           , 'Fout bij aanmaken opdracht: ' || rec.mld_melding_key);

     END;
  END LOOP;
END aait_export_autoorder;
/


-- packages tbv rapportages
CREATE OR REPLACE PACKAGE AAIT_RAP
AS
   -- PACKAGES voor de Connexxion specifieke rapportages
   TYPE t_cursor IS REF CURSOR;

   PROCEDURE afmeld_user (user_key      IN     NUMBER,
                          p_datum_van   IN     VARCHAR2,
                          p_datum_tot   IN     VARCHAR2,
                          p_cursor         OUT t_cursor);
END;
/

CREATE OR REPLACE PACKAGE BODY AAIT_RAP
AS
   --
   --Rapportages
   --
   PROCEDURE afmeld_user (user_key      IN     NUMBER,
                          p_datum_van   IN     VARCHAR2, -- Let wel: formaat '13-05-2005'
                          p_datum_tot   IN     VARCHAR2,
                          p_cursor         OUT t_cursor)
   AS
      v_datum_van        DATE;
      v_datum_tot        DATE;
      v_alg_level_read   NUMBER;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT prs_perslid_naam_full,
                  d.ins_discipline_omschrijving,
                  COUNT (mld_melding_key)
             FROM fac_tracking t,
                  prs_v_perslid_fullnames_all pf,
                  mld_melding m,
                  mld_stdmelding std,
                  ins_tab_discipline d
            WHERE     fac_srtnotificatie_key = 22                     --mldafm
                  AND t.prs_perslid_key = pf.prs_perslid_key
                  AND fac_tracking_refkey = m.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 = 22              -- IT helpdesk
                  AND fac_tracking_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY prs_perslid_naam_full, ins_discipline_omschrijving;
   END;
END;
/

CREATE OR REPLACE VIEW aait_v_graph_citrix_melding
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_URL,
   FCLT_3D_DISCIPLINE_KEY
)
AS
     SELECT mld_stdmelding_omschrijving,
            COUNT (mld_stdmelding_omschrijving) aantal,
            'appl/mld/mld_search.asp?urole=fo&autosearch=1&stdm_str=',
            std.mld_stdmelding_key
       FROM mld_melding m, mld_stdmelding std
      WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
            AND std.mld_ins_discipline_key = 421              -- Citrix (AAFM)
            AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
   GROUP BY std.mld_stdmelding_key, mld_stdmelding_omschrijving;

CREATE OR REPLACE VIEW aait_v_afdelingniv12
(
   prs_afdeling_key,
   omschrijving
)
AS
   SELECT   a1.prs_afdeling_key,
               a1.prs_afdeling_naam
            || ' ['
            || a1.prs_afdeling_omschrijving
            || ']'
     FROM   PRS_AFDELING a1
    WHERE   a1.prs_afdeling_parentkey IS NULL
            AND a1.prs_afdeling_verwijder IS NULL
   UNION ALL
   SELECT   a2.prs_afdeling_key,
               a2.prs_afdeling_naam
            || ' ['
            || a2.prs_afdeling_omschrijving
            || ']'
     FROM   PRS_AFDELING a1, PRS_AFDELING a2
    WHERE       a2.prs_afdeling_parentkey = a1.prs_afdeling_key
            AND a1.prs_afdeling_parentkey IS NULL
            AND a2.prs_afdeling_verwijder IS NULL;


-- AAIT#26399: Overkoepelende view over alle dekkingstabellen!
-- Let Op. Het account moet ook toegevoegd worden aan het bestand cust/AAIT/export/gen_export_exact_dekking.bat
CREATE OR REPLACE VIEW aait_v_exp_uren_dekking
AS
   SELECT 'AAAH' afn_account, r.* FROM AAAH.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAAR' afn_account, r.* FROM AAAR.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AADB' afn_account, r.* FROM AADB.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AADO' afn_account, r.* FROM AADO.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AADS' afn_account, r.* FROM AADS.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAES' afn_account, r.* FROM AAES.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAGN' afn_account, r.* FROM AAGN.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAHB' afn_account, r.* FROM AAHB.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAIT' afn_account, r.* FROM AAIT.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAPM' afn_account, r.* FROM AAPM.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AARW' afn_account, r.* FROM AARW.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AASA' afn_account, r.* FROM AASA.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'AAVG' afn_account, r.* FROM AAVG.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'EXPO' afn_account, r.* FROM EXPO.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'INLO' afn_account, r.* FROM INLO.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'NMMS' afn_account, r.* FROM NMMS.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'RABO' afn_account, r.* FROM RABO.aaxx_exp_uren_dekking r
   UNION ALL
   SELECT 'SMKA' afn_account, r.* FROM SMKA.aaxx_exp_uren_dekking r;

-- Exportregels (XML-structuur) in fac_rapport
CREATE OR REPLACE PROCEDURE aait_select_uren_dekking_xml (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_account    IN VARCHAR2
)
AS
   CURSOR c
   IS
      WITH lastexp
             AS (SELECT   fac_usrdata_vervaldatum
                   FROM   fac_usrdata
                  WHERE       fac_usrtab_key = 16          -- Last dekking-exp
                          AND fac_usrdata_verwijder IS NULL
                          AND fac_usrdata_code = p_account
                 UNION ALL
                 SELECT   TO_DATE ('01-09-2013', 'dd-mm-yyyy')
                             fac_usrdata_vervaldatum -- Eind september gestart
                   FROM   DUAL
                  WHERE   NOT EXISTS
                             (SELECT   1
                                FROM   fac_usrdata
                               WHERE       fac_usrtab_key = 16
                                       AND fac_usrdata_verwijder IS NULL
                                       AND fac_usrdata_code = p_account))
      SELECT   r.*,
               DECODE (r.projecttype,
                       '5130976', '5130977',
                       '5101200', '4130977',
                       '4130976', '5130977',
                       '4370901', '5130994',
                       '4370904', '4130994',
                       '0100024', '5130995',
                       '4130990', '5130991',
                       NULL)
                  coveringcode
        FROM   aait_v_exp_uren_dekking r, lastexp
       WHERE   UPPER (r.lev_account) = UPPER (p_account)
               AND r.aanmaak > lastexp.fac_usrdata_vervaldatum;

   v_bestand       VARCHAR2 (12);
   v_order_count   NUMBER;
   v_amount_sum    NUMBER (10, 2);
BEGIN
   -- Altijd opruiming "buffer"-tabel ter voorkoming opnieuw exporteren van
   -- hetzelfde bestand!
   v_bestand := 'UREN_DEKKING';                  --SUBSTR (p_applname, 1, 12);
   DELETE   fac_rapport
    WHERE   fac_rapport_node = v_bestand;

   v_order_count := 0;
   v_amount_sum := 0;

   -- Opruiming log (een maand later)!
   DELETE FROM   imp_log
         WHERE   imp_log_applicatie = p_applname;

   -- header
   aaxx_add_xml_row (v_bestand, '<?xml version="1.0" encoding="windows-1252"?>');
   aaxx_add_xml_row (v_bestand, '<eExact>');
   aaxx_add_xml_row (v_bestand, '<GLEntries>');

   FOR rec IN c
   LOOP
      BEGIN
         aaxx_add_xml_row (v_bestand, '<GLEntry>');
            aaxx_add_xml_row (v_bestand, '<Journal code="24" type="M"/>');
            aaxx_add_xml_row (v_bestand, '<FinEntryLine>');
               aaxx_add_xml_element (v_bestand, 'Date', TO_CHAR(rec.mld_opdr_uren_datum, 'yyyy-mm-dd') );

               --aaxx_add_xml_row (v_bestand, '<GLAccount code="' || rec.projecttype_code || '"/>');
               --aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               --aaxx_add_xml_row (v_bestand, '<Costcenter code="' || rec.prs_kostenplaats_nr || '"/>');
               --aaxx_add_xml_row (v_bestand, '<Resource number="'|| rec.aafm_perslid_nr ||'"/>');
               --aaxx_add_xml_row (v_bestand, '<Project code="' || rec.meldingnr || '" type="I" status="A">');
               --   aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               --aaxx_add_xml_row (v_bestand, '</Project>');
               aaxx_add_xml_row (v_bestand, '<GLAccount code="'||rec.rek_courant||'"/>');
               aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               aaxx_add_xml_row (v_bestand, '<Costcenter code="' || rec.kostenplaats || '"/>');
               aaxx_add_xml_row (v_bestand, '<Resource number="'|| rec.perslid_nr ||'"/>');
               aaxx_add_xml_row (v_bestand, '<Project code="' || rec.projectcode || '" type="I" status="A">');
                  aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               aaxx_add_xml_row (v_bestand, '</Project>');

               aaxx_add_xml_element (v_bestand, 'Quantity', TO_CHAR(rec.uren_besteed) );
               aaxx_add_xml_row (v_bestand, '<Amount>');
                  aaxx_add_xml_row (v_bestand, '<Currency code="EUR"/>');
                  aaxx_add_xml_element (v_bestand, 'Debit', TO_CHAR(rec.uren_besteed*rec.uurtarief) );
                  aaxx_add_xml_element (v_bestand, 'Credit', '0');
               aaxx_add_xml_row (v_bestand, '</Amount>');
               aaxx_add_xml_row (v_bestand, '<FinReferences>');
                  aaxx_add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
               aaxx_add_xml_row (v_bestand, '</FinReferences>');
            aaxx_add_xml_row (v_bestand, '</FinEntryLine>');
            IF rec.uurtarief IS NULL
            THEN
               fac.writelog (p_applname, 'W', 'Geen uurtarief voor persoon nr ' || rec.perslid_nr, '');
            END IF;
            v_amount_sum := v_amount_sum + rec.uren_besteed * COALESCE(rec.uurtarief, 0);
            aaxx_add_xml_row (v_bestand, '<FinEntryLine>');

               --aaxx_add_xml_row (v_bestand, '<GLAccount code="'||rec.rek_courant||'"/>');
               --aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               --aaxx_add_xml_row (v_bestand, '<Costcenter code="' || coalesce(rec.projectkpn_opdr, rec.projectkpn_perslid) || '"/>');
               --aaxx_add_xml_row (v_bestand, '<Resource number="'|| rec.aafm_perslid_nr ||'"/>');
               --aaxx_add_xml_row (v_bestand, '<Project code="' || rec.meldingnr || '" type="I" status="A">');
               --   aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               --aaxx_add_xml_row (v_bestand, '</Project>');
               aaxx_add_xml_row (v_bestand, '<GLAccount code="' || rec.coveringcode || '"/>');
               aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               aaxx_add_xml_row (v_bestand, '<Costcenter code="' || rec.kostenplaats || '"/>');
               aaxx_add_xml_row (v_bestand, '<Resource number="'|| rec.perslid_nr ||'"/>');
               aaxx_add_xml_row (v_bestand, '<Project code="' || rec.projectcode || '" type="I" status="A">');
               aaxx_add_xml_element (v_bestand, 'Description', rec.projectnaam);
               aaxx_add_xml_row (v_bestand, '</Project>');

               aaxx_add_xml_element (v_bestand, 'Quantity', '-'||TO_CHAR(rec.uren_besteed) );
               aaxx_add_xml_row (v_bestand, '<Amount>');
                  aaxx_add_xml_row (v_bestand, '<Currency code="EUR"/>');
                  aaxx_add_xml_element (v_bestand, 'Debit', '0');
                  aaxx_add_xml_element (v_bestand, 'Credit', TO_CHAR(rec.uren_besteed*rec.uurtarief) );
               aaxx_add_xml_row (v_bestand, '</Amount>');
               aaxx_add_xml_row (v_bestand, '<FinReferences>');
                  --aaxx_add_xml_element (v_bestand, 'DocumentDate', SYSDATE);
                  aaxx_add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
               aaxx_add_xml_row (v_bestand, '</FinReferences>');
            aaxx_add_xml_row (v_bestand, '</FinEntryLine>');
         aaxx_add_xml_row (v_bestand, '</GLEntry>');
      END;

      v_order_count := v_order_count + 1;
   END LOOP;

   aaxx_add_xml_row (v_bestand, '</GLEntries>');
   aaxx_add_xml_row (v_bestand, '</eExact>');
   fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum, '');
EXCEPTION
   WHEN OTHERS
   THEN
      fac.writelog (
         p_applname,
         'E',
         'Proces UREN_DEKKING-export afgebroken!',
         'ORACLE (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 200) || ')'
      );
END;
/

-- AAIT#26399: Registreer tijdstip waarop laatste 'uren_dekking'-export voor
--             account succesvol is afgehandeld middels entry in eigen tabel
--             waarvoor de Vervaldatum dan op SYSDATE wordt gezet!
CREATE OR REPLACE PROCEDURE aait_upsert_last_dekking_exp (
   p_account   IN VARCHAR2
)
AS
   v_count   NUMBER;
BEGIN
   SELECT   COUNT ( * )
     INTO   v_count
     FROM   fac_usrdata
    WHERE       fac_usrtab_key = 16                        -- Last dekking-exp
            AND fac_usrdata_verwijder IS NULL
            AND fac_usrdata_code = p_account;

   IF (v_count = 0)
   THEN
      INSERT INTO fac_usrdata (fac_usrtab_key,
                               fac_usrdata_code,
                               fac_usrdata_omschr,
                               fac_usrdata_volgnr,
                               fac_usrdata_vervaldatum,
                               fac_usrdata_prijs)
        VALUES   (16,                                      -- Last dekking-exp
                  p_account,
                  p_account,
                  NULL,
                  SYSDATE,
                  NULL);
   ELSE                                                        -- v_count = 1!
      UPDATE   fac_usrdata
         SET   fac_usrdata_vervaldatum = SYSDATE
       WHERE       fac_usrtab_key = 16                     -- Last dekking-exp
               AND fac_usrdata_verwijder IS NULL
               AND fac_usrdata_code = p_account;
   END IF;
END;
/

-- AAIT#26399: Exact export uren-dekkingsregels (XML); 1-voor-1 per account!
CREATE OR REPLACE VIEW aait_v_export_aaah_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aaah_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Alliance'); -- AAAH
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aaah_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Alliance'); -- AAAH
END;
/
CREATE OR REPLACE VIEW aait_v_export_aaar_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aaar_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Arcadis'); -- AAAR
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aaar_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Arcadis'); -- AAAR
END;
/
CREATE OR REPLACE VIEW aait_v_export_aadb_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aadb_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'DBS'); -- AADB
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aadb_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('DBS'); -- AADB
END;
/
CREATE OR REPLACE VIEW aait_v_export_aado_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aado_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'DOW'); -- AADO
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aado_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('DOW'); -- AADO
END;
/
CREATE OR REPLACE VIEW aait_v_export_aads_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aads_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'DSM'); -- AADS
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aads_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('DSM'); -- AADS
END;
/
CREATE OR REPLACE VIEW aait_v_export_aaes_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aaes_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Essent'); -- AAES
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aaes_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Essent'); -- AAES
END;
/
CREATE OR REPLACE VIEW aait_v_export_aagn_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aagn_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Gemeente Nijmegen'); -- AAGN
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aagn_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Gemeente Nijmegen'); -- AAGN
END;
/

CREATE OR REPLACE VIEW aait_v_export_aahb_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aahb_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Hudsons Bay'); -- AAHB
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aahb_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Hudsons Bay'); -- AAHB
END;
/


CREATE OR REPLACE VIEW aait_v_export_aait_dekking001 (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aait_dekking001 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Centraal'); -- AAIT/001=Centraal!
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aait_dekking001 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Centraal'); -- AAIT/001=Centraal!
END;
/
-- AAIT/007=Vervallen??? NIET!
CREATE OR REPLACE VIEW aait_v_export_aait_dekking012 (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aait_dekking012 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Project Management'); -- AAIT/012=Project Management!
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aait_dekking012 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Project Management'); -- AAIT/012=Project Management!
END;
/
CREATE OR REPLACE VIEW aait_v_export_aait_dekking300 (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aait_dekking300 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'AAFM International'); -- AAIT/300=AAFM International!
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aait_dekking300 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('AAFM International'); -- AAIT/300=AAFM International!
END;
/


CREATE OR REPLACE VIEW aait_v_export_aapm_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aapm_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Park Management'); -- AAPM
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aapm_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Park Management'); -- AAPM
END;
/
CREATE OR REPLACE VIEW aait_v_export_aarw_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aarw_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'RWS'); -- AARW
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aarw_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('RWS'); -- AARW
END;
/
CREATE OR REPLACE VIEW aait_v_export_aasa_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aasa_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Sabic'); -- AASA
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aasa_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Sabic'); -- AASA
END;
/
CREATE OR REPLACE VIEW aait_v_export_aavg_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_aavg_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Vlisco'); -- AAVG
END;
/
CREATE OR REPLACE PROCEDURE aait_export_aavg_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Vlisco'); -- AAVG
END;
/
CREATE OR REPLACE PROCEDURE aait_export_asms_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Asito'); -- ASMS; zie ik nergens???
END;
/
CREATE OR REPLACE VIEW aait_v_export_expo_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_expo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Segm.worksp.Diversen'); -- EXPO
END;
/
CREATE OR REPLACE PROCEDURE aait_export_expo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Segm.worksp.Diversen'); -- EXPO
END;
/
CREATE OR REPLACE VIEW aait_v_export_inlo_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_inlo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Industrie & Logistiek'); -- INLO
END;
/
CREATE OR REPLACE PROCEDURE aait_export_inlo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Industrie & Logistiek'); -- INLO
END;
/
CREATE OR REPLACE VIEW aait_v_export_nmms_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_nmms_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'NMM'); -- NMMS
END;
/
CREATE OR REPLACE PROCEDURE aait_export_nmms_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('NMM'); -- NMMS
END;
/
CREATE OR REPLACE VIEW aait_v_export_rabo_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_rabo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Rabobank'); -- RABO
END;
/
CREATE OR REPLACE PROCEDURE aait_export_rabo_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Rabobank'); -- RABO
END;
/
CREATE OR REPLACE VIEW aait_v_export_smka_dekking (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'UREN_DEKKING';
CREATE OR REPLACE PROCEDURE aait_select_smka_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
  aait_select_uren_dekking_xml(p_applname, p_applrun, 'Smurfit Kappa'); -- SMKA
END;
/
CREATE OR REPLACE PROCEDURE aait_export_smka_dekking (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2)
AS
BEGIN
  aait_upsert_last_dekking_exp ('Smurfit Kappa'); -- SMKA
END;
/



------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile
