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

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

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF

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

--
-- Personen import
--

CREATE OR REPLACE PROCEDURE apgr_import_prs (p_import_key IN NUMBER)
AS
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_errormsg                VARCHAR2 (400);
   v_errorhint               VARCHAR2 (400);
   v_newline                 FAC_IMP_FILE.FAC_IMP_FILE_LINE%TYPE;
   
   CURSOR c1
       IS
       SELECT l.alg_locatie_code,
                  pw.alg_gebouw_code,
                  pw.alg_verdieping_volgnr,
                  pw.alg_ruimte_nr,
                  p.prs_perslid_oslogin
             FROM prs_v_perslidwerkplek_gegevens pw,
                  prs_perslid p,
                  alg_locatie l,
                  fac_imp_perslid f
            WHERE p.prs_perslid_key = pw.prs_perslid_key
                  AND pw.alg_locatie_key = l.alg_locatie_key
                  AND UPPER (p.prs_perslid_oslogin) =
                        UPPER (f.prs_perslid_oslogin)
                  AND p.prs_perslid_verwijder IS NULL;
 
BEGIN
                  
   BEGIN
      SELECT fac_imp_file_line
        INTO v_newline
        FROM fac_imp_file
       WHERE fac_import_key = p_import_key
         AND fac_imp_file_index = 1;

      IF v_newline LIKE
                  CHR (TO_NUMBER ('EF', 'xx'))
               || CHR (TO_NUMBER ('BB', 'xx'))
               || CHR (TO_NUMBER ('BF', 'xx'))
               || '%'
      THEN
         -- EF BB BF aangetroffen
         fac.imp_writelog (p_import_key,
                           'W',
                           'Byte Order Mark aangetroffen',
                           'Bestand heeft onbehandeld UTF-8 formaat.'
                          );
         v_newline := SUBSTR (v_newline, 4);
      END IF;

      -- Verwijder de dubbele quotes
      v_newline := REPLACE (v_newline, '"');

      UPDATE fac_imp_file
         SET fac_imp_file_line = v_newline
       WHERE fac_import_key = p_import_key
         AND fac_imp_file_index = 1;


   EXCEPTION WHEN OTHERS
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Fout bij controle op Byte Order Mark',
                        ''
                       );
   END;


   v_errorhint := 'Generieke update';
   -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
   prs.import_perslid (p_import_key,
                       '0;0;0;0;0;0;8;11;0;6;' ||
                       '0;0;0;0;0;10;5;4;0;0;' ||
                       '1;9;0;0;0;0;3;0;0;0;'||
                       '0;0;0;0;0;0;0;0;0;0;'||
                       '0;0;0;0;0;0',
                       'title;Type;Group;mail;telephoneNumber;givenName;company;department;sAMAccountName;ipPhone;sn%'
                       );       
       
-- Handmatig ingelezen prs_perslid_nr behouden, deze staat niet in de AD export
UPDATE fac_imp_perslid
   SET prs_perslid_nr =
          (SELECT p.prs_perslid_nr
             FROM prs_v_perslid_gegevens p
            WHERE UPPER (fac_imp_perslid.prs_perslid_oslogin) =
                     UPPER (p.prs_perslid_oslogin));

-- De AD export kent geen plaatsgegevens, dus deze moeten behouden blijven uit de handmatige prs import

BEGIN
FOR rec in c1
LOOP                  
   UPDATE fac_imp_perslid
   SET
       alg_locatie_code = rec.alg_locatie_code,
       alg_gebouw_code = rec.alg_gebouw_code,
       alg_verdieping_volgnr = rec.alg_verdieping_volgnr,
       alg_ruimte_nr = rec.alg_ruimte_nr
   WHERE UPPER (prs_perslid_oslogin) = UPPER (rec.prs_perslid_oslogin);
END LOOP;
END;    
  COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END apgr_import_prs;
/

CREATE OR REPLACE PROCEDURE apgr_update_prs (
   p_import_key IN NUMBER
) IS
  -- Alle personen verwijderen die niet meer in import bestand voorkomen.
  CURSOR c_del
  IS
        SELECT p.prs_perslid_key
            FROM prs_v_aanwezigperslid p
           WHERE     (   p.prs_perslid_oslogin IS NULL
                      OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') -- ' tbv. opmaak
                 AND p.prs_perslid_oslogin2 IS NULL
                 AND NOT EXISTS
                         (SELECT 1
                            FROM fac_imp_perslid i
                           WHERE UPPER (i.prs_perslid_oslogin) =
                                 UPPER (p.prs_perslid_oslogin))
        ORDER BY 1;

  v_count           NUMBER;

BEGIN
    -- generic update

    SELECT count(*)
      INTO v_count
      FROM fac_imp_perslid;

    IF v_count < 150
    THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Het aantal te importeren personen is te klein ('
                        || TO_CHAR (v_count) || ')',
                        'Zie Specificatie'
      );
      RETURN;
    END IF;

  -- 'LOGIN' betekent dat op basis van OSLOGIN wordt gematched.
  -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
  prs.update_perslid (p_import_key, 'LOGIN', NULL);
  
  apgr_post_update_prs(p_import_key);

  -- Verwijder personen die niet meer in de import voorkomen.
  FOR rec IN c_del
  LOOP
     BEGIN
       prs.delete_perslid (p_import_key, rec.prs_perslid_key);
     END;
  END LOOP;

END apgr_update_prs;
/

CREATE OR REPLACE PROCEDURE apgr_post_update_prs (p_import_key IN NUMBER)
AS
 -- Persoon aan authorisatiegroep toevoegen als deze daar nog niet in zat.
                     
  CURSOR c_auth
  IS
   SELECT DISTINCT p.prs_perslid_key, f.fac_groep_key
     FROM prs_perslid p,
          fac_groep f,
          fac_imp_perslid i,
          fac_gebruikersgroep g
    WHERE UPPER (i.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin)
          AND UPPER (i.prs_kenmerk1) = f.fac_groep_upper
          AND p.prs_perslid_verwijder IS NULL
          AND NOT EXISTS
                (SELECT 'x'
                   FROM fac_gebruikersgroep
                  WHERE prs_perslid_key = p.prs_perslid_key
                        AND fac_groep_key = f.fac_groep_key);

  BEGIN
     FOR rec IN c_auth
     LOOP
        BEGIN
           INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
               VALUES (rec.prs_perslid_key, rec.fac_groep_key);
        END;
     END LOOP;
  END;
/

-- Import van statusupdates en kosten uit ESIS voor opdrachten van Explora EST
CREATE OR REPLACE PROCEDURE apgr_import_esis (p_import_key IN NUMBER)
AS
   c_delim           VARCHAR2 (1) := ';';
   v_newline         VARCHAR2 (1000);                            -- Input line
   v_errormsg        VARCHAR2 (1000);
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   v_aanduiding      VARCHAR2 (200);
   header_is_valid   NUMBER := 0;
   v_count_tot       NUMBER (10) := 0;
   v_count_import    NUMBER (10) := 0;
   v_ongeldig        NUMBER (1) := 0;
   -- De importvelden
   v_opdrachtnummer  VARCHAR2 (255);
   v_status          VARCHAR2 (255);
   v_updatedatum     VARCHAR2 (255);
   v_kosten          VARCHAR2 (10);
   
   
   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN

-- Eerst de importtable leeg maken.
   DELETE FROM apgr_imp_esis
         WHERE imp_log_run <> p_import_key;

   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren regel';
         v_aanduiding := '';
         v_ongeldig := 0;

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_opdrachtnummer);
         fac.imp_getfield (v_newline, c_delim, v_status);
         fac.imp_getfield (v_newline, c_delim, v_updatedatum);
         fac.imp_getfield (v_newline, c_delim, v_kosten);
         v_aanduiding :=
               '['
            || v_opdrachtnummer
            || '|'
            || v_status
            || '|'
            || v_updatedatum
            || '] ';

         -- 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 (TRIM (v_opdrachtnummer)) = 'OPDRACHTNUMMER'
               AND UPPER (TRIM (v_status)) = 'STATUS'
               AND UPPER (TRIM (v_updatedatum)) = 'UPDATEDATUM'
               AND UPPER (TRIM (v_kosten)) = 'KOSTEN'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Fout inlezen ticketnumber';
            v_opdrachtnummer := TRIM (v_opdrachtnummer);

            IF (v_opdrachtnummer IS NULL)
            THEN
               fac.imp_writelog (
                  p_import_key, 'W', v_aanduiding || v_errormsg,
                  'Opdrachtnummer ongeldig; regel wordt overgeslagen!');
               v_ongeldig := 1;
            END IF;

            --
            
            v_errormsg := 'Fout inlezen updatedatum';
            v_updatedatum := TRIM (v_updatedatum);

            IF (v_updatedatum IS NULL)
            THEN
               fac.imp_writelog (
                  p_import_key, 'W', v_aanduiding || v_errormsg,
                  'Updatedatum ongeldig; regel wordt overgeslagen!');
               v_ongeldig := 1;
            END IF;

            -- Insert geformatteerde import record
            IF (v_ongeldig = 0)
            THEN
               BEGIN
                  v_errormsg := 'Fout bij wegschrijven importregel';

                  INSERT INTO apgr_imp_esis       (imp_log_run,
                                                   opdrachtnummer,
                                                   status,
                                                   updatedatum,
                                                   kosten)
                      VALUES (p_import_key,
                              v_opdrachtnummer,
                              v_status,
                              fac.safe_to_date (v_updatedatum, 'dd-mm-yyyy hh24:mi:ss'),
                              fac.safe_to_number (v_kosten));

                  v_count_import := v_count_import + 1;
               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, '');
               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',
         'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
         '');
      fac.imp_writelog (
         p_import_key, 'S',
         'Inleesproces/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         '');
   END IF;

   DELETE FROM fac_imp_file
         WHERE fac_import_key = p_import_key;

   COMMIT;
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,
                        'Inleesproces updates uit ESIS afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE apgr_update_esis (p_import_key IN NUMBER)
AS
   -- Cursor loopt over alle ingelezen updateregels uit ESIS
   CURSOR c1
   IS
        SELECT opdrachtnummer,             -- Opdrachtnummer met of zonder prefix
               DECODE (fac.safe_to_number (SUBSTR (opdrachtnummer, 1, 1)),
                       NULL, TRIM (SUBSTR (opdrachtnummer, 2)),
                       opdrachtnummer)
               opdr_id,
               status,
               updatedatum,
               kosten
          FROM apgr_imp_esis
         WHERE imp_log_run = p_import_key
         ORDER BY 4, 2;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (200);
   v_count_tot      NUMBER (10);
   v_mld_key        NUMBER (10);
   v_opdr_key       NUMBER (10);
   v_opdr_status    NUMBER (10);
BEGIN
   -- Loop door alle ingelezen updateregels uit ESIS en verwerk deze.
   v_count_tot := 0;

   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.opdrachtnummer || ']';
         v_count_tot := v_count_tot + 1;
         v_mld_key := -1;
         v_opdr_key := -1;

         v_errormsg := 'Fout bepalen opdracht.';

         SELECT o.mld_melding_key, o.mld_opdr_key, so.mld_statusopdr_key
           INTO v_mld_key, v_opdr_key, v_opdr_status
           FROM mld_opdr o, mld_statusopdr so
          WHERE o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = rec.opdr_id
            AND UPPER (so.mld_statusopdr_omschrijving) = UPPER (rec.status);

         -- Alleen iets doen als melding/opdracht succesvol is bepaald.
         IF (v_mld_key > 0 AND v_opdr_key > 0)
         THEN
            -- Als er kosten zijn dan voeren we die op.
         IF (rec.kosten IS NOT NULL)
            THEN
            v_errormsg := 'Fout bijwerken kosten.';
            
            UPDATE mld_opdr
               SET mld_opdr_kosten = rec.kosten
             WHERE mld_opdr_key = v_opdr_key;
             
         END IF;
         
            -- Update opdrachtstatus
               v_errormsg := 'Fout verwerken opdrachtstatus.';

               MLD.setopdrachtstatus (v_opdr_key, v_opdr_status, NULL);

            COMMIT;
         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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg,
                              'Fout verwerken opdrachtupdates uit ESIS.');
      END;
   END LOOP;

   fac.imp_writelog (
      p_import_key, 'S',
         'Proces: '
      || TO_CHAR (v_count_tot)
      || ' opdrachtupdates uit ESIS verwerkt.',
      '');
   COMMIT;
END;
/
-- Vanaf hier rapportages

-- Deze voegt de FCLT_3D_GEBOUW_KEY toe aan de meldingen UDR
-- Zoals gerealiseerd in melding FSN#11071
CREATE OR REPLACE VIEW APGR_V_MELDING_GEBOUW
(
   MELDING_KEY,
   MELDINGNUMMER,
   MELDING_REGIO,
   MELDING_DISTRICT,
   MELDING_LOCATIECODE,
   MELDING_LOCATIE,
   MELDING_LOCATIEPLAATS,
   FCLT_3D_LOCATIE_KEY,
   MELDING_GEBOUWCODE,
   MELDING_GEBOUW,
   [REDACTED],
   MELDING_VERDIEPING,
   MELDING_RUIMTENR,
   MELDING_RUIMTE,
   MELDING_ORDERNR,
   KOSTENSOORTGROEP,
   KOSTENSOORT,
   KOSTENPLAATS,
   KOSTENPLAATS_OMS,
   MELDER,
   MELDER_KEY,
   AFDELING,
   AFDELING_OMSCHRIJVING,
   [REDACTED],
   BEDRIJF_KEY,
   INVOERDER,
   MELDBRON,
   SOORTMELDING,
   FCLT_3D_DISCIPLINE_KEY,
   PRODUCTGROEP,
   SUBPRODUCTGROEP,
   BEHANDELGROEP,
   BEHANDELAAR,
   BEHANDELAAR_KEY,
   SUBPRODUCTGROEPGROEP,
   [REDACTED],
   ACTIEVE_BEHANDELGROEP,
   ACTIEVE_BEHANDELAAR_KEY,
   ACTIEVE_BEHANDELAAR,
   MELDING_STATUS,
   SLA_NVT,
   SLA_WERKDGN,
   SLA_WERKUREN,
   SLA_RESPIJTDGN,
   SLA_RESPIJTUREN,
   SLA_ACCPTDGN,
   SLA_ACCPTUREN,
   PLAN_UITVOERTIJD_SLA,
   MELDING_DATUM,
   MELDING_EINDDATUM,
   MELDING_ACCEPTDATUM,
   MELDING_AFGEMELD,
   MELDING_ACCEPTED,
   DOORLOOPTIJD_WERKDGN,
   DOORLOOPTIJD_WERKUREN,
   ONDERWERP,
   VOMSCHRIJVING,
   MELDING_OPMERKING,
   PRIORITEIT,
   PRIORITEITTXT,
   RATING,
   RATING_OPMERKING,
   BOLLETJE,
   ACCEPT_SLA_DAGEN,
   ACCEPT_SLA_UREN,
   UITVOERING_SLA_DAGEN,
   UITVOERING_SLA_UREN,
   AFSPRAAK_SLA_DAGEN,
   AFSPRAAK_SLA_UREN,
   ACCEPT_SLA_OPTIJD,
   UITVOERING_SLA_OPTIJD,
   AFSPRAAK_SLA_OPTIJD,
   SELFSERVICE
)
AS
   SELECT mld_melding_key,
          meldingnummer,
          alg_regio_omschrijving,
          alg_district_omschrijving,
          locatie,
          locatie_omschrijving,
          locatie_plaats,
          alg_locatie_key,
          gebouw,
          gebouw_naam,
          gebouw_key,
          verdieping,
          ruimte,
          ruimte_omschrijving,
          melding_ordernr,
          kostensoortgroep,
          kostensoort,
          kostenplaats,
          kostenplaats_oms,
          melder,
          prs_perslid_key,
          afdeling,
          afdeling_omschrijving,
          afdeling_key,
          prs_bedrijf_key,
          invoerder,
          meldbron,
          soortmelding,
          stdm_ins_discipline_key,
          productgroep,
          subproductgroep,
          behandelgroep,
          behandelaar,
          behandelaar_key,
          subproductgroepgroep,
          mld_ins_discipline_key,
          actieve_behandelgroep,
          actieve_behandelaar_key,
          actieve_behandelaar,
          status,
          sla_nvt,
          sla_werkdgn,
          sla_werkuren,
          sla_respijtdgn,
          sla_respijturen,
          sla_accptdgn,
          sla_accpturen,
          plan_uitvoertijd_sla,
          datum,
          einddatum,
          acceptdatum,
          afgemeld,
          accepted,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkdgn,
          DECODE (x.t_doorlooptijd.eenheid,
                  'U', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkuren,
          onderwerp,
          omschrijving,
          opmerking,
          mld_melding_spoed prioriteit,
          DECODE (mld_melding_spoed,
                  3, lcl.l ('lcl_mld_urg_normaal'),
                  1, lcl.l ('lcl_mld_urg_kritiek'),
                  2, lcl.l ('lcl_mld_urg_hoog'),
                  4, lcl.l ('lcl_mld_urg_laag')),
          mld_melding_satisfaction,
          mld_melding_satisfaction_op,
          mld_melding_flag,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', acceptdatum - COALESCE (accepted, afgemeld),
                  NULL)
             accept_sla_dagen,
          CAST (
             DECODE (x.t_doorlooptijd.eenheid,
                     'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                     NULL) AS NUMBER (7, 2))
             accept_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D',
               mld.geteinddatum (mld_melding_key)
             - COALESCE (afgemeld, SYSDATE)
             + COALESCE (sla_respijtdgn, 0),
             NULL)
             uitvoering_sla_dagen,
          CAST (
             DECODE (
                x.t_doorlooptijd.eenheid,
                'U',
                ( (mld.geteinddatum (mld_melding_key)
                   - COALESCE (afgemeld, SYSDATE))
                 * 24)
                + COALESCE (sla_respijturen, 0),
                NULL) AS NUMBER (7, 2))
             uitvoering_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D',
               einddatum
             - COALESCE (afgemeld, SYSDATE)
             + COALESCE (sla_respijtdgn, 0),
             NULL)
             afspraak_sla_dagen,
          CAST (
             DECODE (
                x.t_doorlooptijd.eenheid,
                'U',
                ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24)
                + COALESCE (sla_respijtdgn, 0),
                NULL) AS NUMBER (7, 2))
             afspraak_sla_uren,
          CASE
             WHEN acceptdatum IS NULL
                  OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd.
                    DECODE (x.t_doorlooptijd.eenheid,
                            'D',
                            acceptdatum - COALESCE (accepted, afgemeld),
                            0)
                    + DECODE (
                         x.t_doorlooptijd.eenheid,
                         'U',
                         (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                         0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             accept_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (afgemeld, SYSDATE)
                     + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (afgemeld, SYSDATE))
                        * 24)
                       + COALESCE (sla_respijturen, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             uitvoering_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D',
                       einddatum
                     - COALESCE (afgemeld, SYSDATE)
                     + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U',
                       ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24)
                       + COALESCE (sla_respijtdgn, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             afspraak_sla_optijd,
          DECODE (invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no'))
             selfservice
     FROM (SELECT m.mld_melding_key,
                  m.prs_perslid_key,
                  sd.ins_srtdiscipline_prefix || m.mld_melding_key
                     meldingnummer,
                  alg_regio_omschrijving,
                  alg_district_omschrijving,
                  alg_locatie_code locatie,
                  alg_locatie_omschrijving locatie_omschrijving,
                  alg_locatie_plaats locatie_plaats,
                  l.alg_locatie_key,
                  og.alg_gebouw_code gebouw,
                  og.alg_gebouw_naam gebouw_naam,
                  og.alg_gebouw_key gebouw_key,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  og.alg_ruimte_omschrijving ruimte_omschrijving,
                  m.mld_melding_ordernr melding_ordernr,
                  (SELECT ksg.prs_kostensoortgrp_oms
                     FROM prs_kostensoortgrp ksg, prs_kostensoort ks
                    WHERE ksg.prs_kostensoortgrp_key =
                             ks.prs_kostensoortgrp_key
                          AND ks.prs_kostensoort_key =
                                (SELECT COALESCE (sm.prs_kostensoort_key,
                                                  disc.prs_kostensoort_key)
                                   FROM mld_stdmelding sm,
                                        mld_discipline disc
                                  WHERE sm.mld_ins_discipline_key =
                                           disc.ins_discipline_key
                                        AND sm.mld_stdmelding_key =
                                              s.mld_stdmelding_key))
                     kostensoortgroep,
                  (SELECT ks.prs_kostensoort_oms
                     FROM prs_kostensoort ks
                    WHERE ks.prs_kostensoort_key =
                             (SELECT COALESCE (sm.prs_kostensoort_key,
                                               disc.prs_kostensoort_key)
                                FROM mld_stdmelding sm, mld_discipline disc
                               WHERE sm.mld_ins_discipline_key =
                                        disc.ins_discipline_key
                                     AND sm.mld_stdmelding_key =
                                           s.mld_stdmelding_key))
                     kostensoort,
                  (SELECT k.prs_kostenplaats_nr
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats,
                  (SELECT k.prs_kostenplaats_omschrijving
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats_oms,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.prs_perslid_key)
                     melder,
                  (SELECT prs_afdeling_naam
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling,
                  (SELECT prs_afdeling_omschrijving
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_omschrijving,
                  (SELECT prs_afdeling_key
                     FROM prs_perslid pp
                    WHERE pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_key,
                  (SELECT prs_bedrijf_key
                     FROM prs_v_afdeling pva, prs_perslid pp
                    WHERE pva.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     prs_bedrijf_key,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key =
                             mld.getmeldinguser (m.mld_melding_key))
                     invoerder,
                  (SELECT mb.mld_meldbron_omschrijving
                     FROM mld_meldbron mb
                    WHERE mb.mld_meldbron_key = m.mld_meldbron_key)
                     meldbron,
                  m.mld_meldbron_key,
                  sd.ins_srtdiscipline_key ins_srtdiscipline_key,
                  sd.ins_srtdiscipline_omschrijving soortmelding,
                  md.ins_discipline_key stdm_ins_discipline_key,
                  md.ins_discipline_omschrijving productgroep,
                  s.mld_stdmelding_omschrijving subproductgroep,
                  smg.mld_stdmeldinggroep_naam subproductgroepgroep,
                  mbg.mld_behandelgroep_naam behandelgroep,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key)
                     behandelaar,
                  m.mld_melding_behandelaar_key behandelaar_key,
                  m.mld_ins_discipline_key mld_ins_discipline_key,
                  (SELECT md2.ins_discipline_omschrijving
                     FROM mld_discipline md2
                    WHERE md2.ins_discipline_key = m.mld_ins_discipline_key)
                     actieve_behandelgroep,
                  m.mld_melding_behandelaar2_key actieve_behandelaar_key,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.[REDACTED])
                     actieve_behandelaar,
                  (SELECT mld_statuses_omschrijving
                     FROM mld_statuses sta
                    WHERE sta.mld_statuses_key = m.mld_melding_status)
                     status,
                  CASE
                     WHEN m.mld_melding_einddatum >
                             COALESCE (
                                fac.gettrackingdate ('MLDAFM',
                                                     m.mld_melding_key),
                                fac.gettrackingdate ('MLDREJ',
                                                     m.mld_melding_key),
                                SYSDATE)
                     THEN
                        1
                     ELSE
                        0
                  END
                     plan_uitvoertijd_sla,
                  CASE
                     WHEN m.mld_melding_indult = 1
                          OR s.mld_stdmelding_slabewaken = 0
                     THEN
                        1
                     ELSE
                        0
                  END
                     sla_nvt,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'D', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkdgn,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'U', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkuren,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijtdgn,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijturen,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'D', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accptdgn,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'U', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accpturen,
                  m.mld_melding_datum datum,
                  CASE
                     WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE (NULL)
                     ELSE m.mld_melding_einddatum
                  END
                     einddatum,
                  mld.getacceptdatum (m.mld_melding_datum,
                                      m.mld_stdmelding_key,
                                      og.alg_onroerendgoed_keys)
                     acceptdatum,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     afgemeld,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     accepted,
                  mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd,
                  m.mld_melding_onderwerp onderwerp,
                  m.mld_melding_omschrijving omschrijving,
                  m.mld_melding_opmerking opmerking,
                  m.mld_melding_spoed,
                  m.mld_melding_satisfaction,
                  m.mld_melding_satisfaction_op,
                  m.mld_melding_flag
             FROM mld_melding m,
                  mld_stdmelding s,
                  alg_locatie l,
                  alg_district d,
                  alg_regio r,
                  alg_v_allonrgoed_gegevens og,
                  mld_discipline md,
                  mld_disc_params mdp,
                  mld_behandelgroep mbg,
                  ins_srtdiscipline sd,
                  mld_stdmeldinggroep smg
            WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
                  AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                  AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
                  AND md.ins_discipline_key = s.mld_ins_discipline_key
                  AND md.ins_discipline_key = mdp.mld_ins_discipline_key
                  AND s.mld_stdmeldinggroep_key =
                        smg.mld_stdmeldinggroep_key(+)
                  AND mdp.mld_behandelgroep_key =
                        mbg.mld_behandelgroep_key(+)
                  AND l.alg_district_key = d.alg_district_key(+)
                  AND d.alg_regio_key = r.alg_regio_key(+)
                  AND m.mld_alg_onroerendgoed_keys =
                        og.alg_onroerendgoed_keys(+)
                  AND m.fac_activiteit_key IS NULL
                  AND m.mld_melding_datum >=
                        TO_DATE ('01-01-2010', 'DD-MM-YYYY')) x;
                        
-- Ook voorzien van FCLT_3D_GEBOUW_KEY
CREATE OR REPLACE VIEW APGR_V_INS_GEBOUW
(
   DEEL_KEY,
   DISCIPLINE,
   SOORT,
   GROEP,
   SOORTCODE,
   OMSCHRIJVING,
   PLAATSEIGENAAR,
   PLAATSEIGENAARTYPE,
   PLAATSAANDUIDING,
   EIGENAAR,
   OPMERKING,
   REGIO,
   DISTRICT,
   LOCATIE_CODE,
   LOCATIE_OMSCHRIJVING,
   LOCATIE_PLAATS,
   GEBOUWCODE,
   GEBOUW,
   TERREINSECTORCODE,
   TERREINSECTOR,
   VERDIEPINGCODE,
   RUIMTENR,
   WERKPLEKVOLGNR,
   WERKPLEK,
   UITLEENBAAR,
   UITGELEEND,
   RES_OPMERKING,
   BEHEERDER,
   VERVALDATUM,
   ACTIEF,
   AANTAL,
   STATE,
   STATEDATE,
   [REDACTED],
   [REDACTED],
   [REDACTED],
   [REDACTED]
)
AS
   SELECT ii.ins_deel_key,
          lcl.x ('ins_discipline_omschrijving',
                 id.ins_discipline_key,
                 id.ins_discipline_omschrijving),
          lcl.x ('ins_srtdeel_omschrijving',
                 s.ins_srtdeel_key,
                 s.ins_srtdeel_omschrijving),
          lcl.x ('ins_srtgroep_omschrijving',
                 sg.ins_srtgroep_key,
                 sg.ins_srtgroep_omschrijving),
          s.ins_srtdeel_code,
          ii.ins_deel_omschrijving,
          COALESCE (ii.plaats, ii.eigenaar),
          ii.ins_alg_ruimte_type,
          ii.plaats,
          ii.eigenaar,
          ii.ins_deel_opmerking,
          ii.regio,
          ii.district,
          ii.locatie_code,
          ii.locatie_omschrijving,
          ii.locatie_plaats,
          ii.alg_gebouw_code,
          ii.alg_gebouw_omschrijving,
          ii.alg_terreinsector_code,
          ii.alg_terreinsector_omschrijving,
          ii.alg_verdieping_code,
          ii.alg_ruimte_nr,
          ii.prs_werkplek_volgnr,
          ii.prs_werkplek_omschrijving,
          DECODE (s.ins_srtdeel_uitleenbaar,
                  1, lcl.l ('lcl_yes'),
                  lcl.l ('lcl_no')),
          DECODE (ii.ins_alg_ruimte_key_org,
                  NULL, lcl.l ('lcl_no'),
                  lcl.l ('lcl_yes')),
          ii.res_deel_opmerking,
          pf.prs_perslid_naam_full,
          ii.ins_deel_vervaldatum,
          DECODE (ii.ins_deel_actief, 1, lcl.l ('lcl_yes'), lcl.l ('lcl_no')),
          ii.ins_deel_aantal,
          ii.ins_deel_state,
          ii.ins_deel_statedate,
          sg.ins_discipline_key,
          ii.ins_alg_ruimte_key,
          ii.alg_locatie_key,
          ii.alg_gebouw_key
     FROM (SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  (SELECT d.prs_afdeling_omschrijving
                     FROM prs_v_afdeling d
                    WHERE prs_afdeling_key = i.ins_alg_ruimte_key)
                     eigenaar,
                  i.ins_discipline_key,
                  i.ins_alg_ruimte_key,
                  NULL alg_locatie_key,
                  NULL alg_gebouw_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_v_afdeling_boom d,
                  prs_bedrijf b
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = d.prs_afdeling_key
                  AND i.ins_alg_ruimte_type = 'A'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  pf.prs_perslid_naam_full eigenaar,
                  i.ins_discipline_key,
                  p.prs_afdeling_key,
                  NULL alg_locatie_key,
                  NULL alg_gebouw_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_perslid p,
                  prs_v_perslid_fullnames_all pf,
                  prs_v_afdeling_boom d
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = p.prs_perslid_key
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND p.prs_afdeling_key = d.prs_afdeling_key
                  AND i.ins_alg_ruimte_type = 'P'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  c.prs_contactpersoon_naam eigenaar,
                  NULL discipline_key,
                  NULL,
                  NULL alg_locatie_key,
                  NULL alg_gebouw_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_contactpersoon c
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = c.prs_contactpersoon_key
                  AND i.ins_alg_ruimte_type = 'C'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  o.alg_plaatsaanduiding,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  re.alg_regio_omschrijving,
                  di.alg_district_omschrijving,
                  l.alg_locatie_code locatie_code,
                  l.alg_locatie_omschrijving locatie_omschrijving,
                  l.alg_locatie_plaats locatie_plaats,
                  o.alg_gebouw_code,
                  o.alg_gebouw_omschrijving,
                  o.alg_terreinsector_code,
                  o.alg_terreinsector_omschrijving,
                  o.alg_verdieping_code,
                  o.alg_ruimte_nr,
                  o.prs_werkplek_volgnr,
                  o.prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  NULL eigenaar,
                  i.ins_discipline_key,
                  NULL,
                  l.alg_locatie_key,
                  o.alg_gebouw_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  ins_v_alg_overzicht o,
                  alg_locatie l,
                  alg_district di,
                  alg_regio re,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_parent_key IS NULL
                  AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
                  AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
                  AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
                  AND o.alg_locatie_key = i.ins_alg_locatie_key
                  AND i.ins_alg_locatie_key = l.alg_locatie_key
                  AND l.alg_district_key = di.alg_district_key
                  AND di.alg_regio_key = re.alg_regio_key) ii,
          ins_srtdeel s,
          ins_srtgroep sg,
          ins_discipline id,
          prs_v_perslid_fullnames pf
    WHERE     sg.ins_srtgroep_key = s.ins_srtgroep_key
          AND id.ins_discipline_key = sg.ins_discipline_key
          AND ii.prs_perslid_key_beh = pf.prs_perslid_key(+)
          AND s.ins_srtdeel_key = ii.ins_srtdeel_key;

-- Hier hetzelfde, ook FCLT_3D_GEBOUW_KEY
CREATE OR REPLACE VIEW APGR_V_INSDEELMELDING_GEBOUW
(
   DEEL_KEY,
   DISCIPLINE,
   SOORT,
   GROEP,
   SOORTCODE,
   OMSCHRIJVING,
   PLAATSEIGENAAR,
   PLAATSEIGENAARTYPE,
   PLAATSAANDUIDING,
   EIGENAAR,
   OPMERKING,
   REGIO,
   DISTRICT,
   LOCATIE_CODE,
   LOCATIE_OMSCHRIJVING,
   LOCATIE_PLAATS,
   GEBOUWCODE,
   GEBOUW,
   TERREINSECTORCODE,
   TERREINSECTOR,
   VERDIEPINGCODE,
   RUIMTENR,
   WERKPLEKVOLGNR,
   WERKPLEK,
   UITLEENBAAR,
   UITGELEEND,
   RES_OPMERKING,
   BEHEERDER,
   VERVALDATUM,
   ACTIEF,
   AANTAL,
   STATE,
   STATEDATE,
   [REDACTED],
   [REDACTED],
   [REDACTED],
   [REDACTED],
   MELDING_KEY,
   MELDINGNUMMER,
   MELDING_DISTRICT,
   MELDING_LOCATIECODE,
   MELDING_LOCATIE,
   MELDING_LOCATIEPLAATS,
   MELDING_GEBOUWCODE,
   MELDING_GEBOUW,
   MELDING_VERDIEPING,
   MELDING_RUIMTENR,
   MELDING_RUIMTE,
   MELDING_ORDERNR,
   KOSTENSOORTGROEP,
   KOSTENSOORT,
   KOSTENPLAATS,
   KOSTENPLAATS_OMS,
   MELDER,
   MELDER_KEY,
   AFDELING,
   AFDELING_OMSCHRIJVING,
   BEDRIJF_KEY,
   INVOERDER,
   MELDBRON,
   SOORTMELDING,
   PRODUCTGROEP,
   SUBPRODUCTGROEP,
   BEHANDELGROEP,
   BEHANDELAAR,
   BEHANDELAAR_KEY,
   SUBPRODUCTGROEPGROEP,
   MELDING_STATUS,
   SLA_NVT,
   SLA_WERKDGN,
   SLA_WERKUREN,
   SLA_RESPIJTDGN,
   SLA_RESPIJTUREN,
   SLA_ACCPTDGN,
   SLA_ACCPTUREN,
   PLAN_UITVOERTIJD_SLA,
   MELDING_DATUM,
   MELDING_EINDDATUM,
   MELDING_ACCEPTDATUM,
   MELDING_AFGEMELD,
   MELDING_ACCEPTED,
   DOORLOOPTIJD_WERKDGN,
   DOORLOOPTIJD_WERKUREN,
   ONDERWERP,
   VOMSCHRIJVING,
   MELDING_OPMERKING,
   PRIORITEIT,
   PRIORITEITTXT,
   RATING,
   RATING_OPMERKING,
   BOLLETJE,
   ACCEPT_SLA_DAGEN,
   ACCEPT_SLA_UREN,
   UITVOERING_SLA_DAGEN,
   UITVOERING_SLA_UREN,
   AFSPRAAK_SLA_DAGEN,
   AFSPRAAK_SLA_UREN,
   ACCEPT_SLA_OPTIJD,
   UITVOERING_SLA_OPTIJD,
   AFSPRAAK_SLA_OPTIJD,
   SELFSERVICE
)
AS
   SELECT d.deel_key,
          d.discipline,
          d.soort,
          d.groep,
          d.soortcode,
          d.omschrijving,
          d.plaatseigenaar,
          d.plaatseigenaartype,
          d.plaatsaanduiding,
          d.eigenaar,
          d.opmerking,
          d.regio,
          d.district,
          d.locatie_code,
          d.locatie_omschrijving,
          d.locatie_plaats,
          d.gebouwcode,
          d.gebouw,
          d.terreinsectorcode,
          d.terreinsector,
          d.verdiepingcode,
          d.ruimtenr,
          d.werkplekvolgnr,
          d.werkplek,
          d.uitleenbaar,
          d.uitgeleend,
          d.res_opmerking,
          d.beheerder,
          d.vervaldatum,
          d.actief,
          d.aantal,
          d.state,
          d.statedate,
          d.fclt_3d_discipline_key,
          d.fclt_3d_afdeling_key,
          d.fclt_3d_locatie_key,
          d.fclt_3d_gebouw_key,
          m.melding_key,
          m.meldingnummer,
          m.melding_district,
          m.melding_locatiecode,
          m.melding_locatie,
          m.melding_locatieplaats,
          m.melding_gebouwcode,
          m.melding_gebouw,
          m.melding_verdieping,
          m.melding_ruimtenr,
          m.melding_ruimte,
          m.melding_ordernr,
          m.kostensoortgroep,
          m.kostensoort,
          m.kostenplaats,
          m.kostenplaats_oms,
          m.melder,
          m.melder_key,
          m.afdeling,
          m.afdeling_omschrijving,
          m.bedrijf_key,
          m.invoerder,
          m.meldbron,
          m.soortmelding,
          m.productgroep,
          m.subproductgroep,
          m.behandelgroep,
          m.behandelaar,
          m.behandelaar_key,
          m.subproductgroepgroep,
          m.melding_status,
          m.sla_nvt,
          m.sla_werkdgn,
          m.sla_werkuren,
          m.sla_respijtdgn,
          m.sla_respijturen,
          m.sla_accptdgn,
          m.sla_accpturen,
          m.plan_uitvoertijd_sla,
          m.melding_datum,
          m.melding_einddatum,
          m.melding_acceptdatum,
          m.melding_afgemeld,
          m.melding_accepted,
          m.doorlooptijd_werkdgn,
          m.doorlooptijd_werkuren,
          m.onderwerp,
          m.vomschrijving,
          m.melding_opmerking,
          m.prioriteit,
          m.prioriteittxt,
          m.rating,
          m.rating_opmerking,
          m.bolletje,
          m.accept_sla_dagen,
          m.accept_sla_uren,
          m.uitvoering_sla_dagen,
          m.uitvoering_sla_uren,
          m.afspraak_sla_dagen,
          m.afspraak_sla_uren,
          m.accept_sla_optijd,
          m.uitvoering_sla_optijd,
          m.afspraak_sla_optijd,
          m.selfservice
     FROM apgr_v_ins_gebouw d, mld_v_udr_melding m, mld_melding_object mo
    WHERE mo.mld_melding_key = m.melding_key AND mo.ins_deel_key = d.deel_key;

-- En de laatste FCLT_3D_GEBOUW_KEY
CREATE OR REPLACE VIEW APGR_V_INSKENMERK_GEBOUW
(
   DEEL_KEY,
   DISCIPLINE,
   SOORT,
   GROEP,
   SOORTCODE,
   OMSCHRIJVING,
   PLAATSEIGENAAR,
   PLAATSEIGENAARTYPE,
   PLAATSAANDUIDING,
   EIGENAAR,
   OPMERKING,
   REGIO,
   DISTRICT,
   LOCATIE_CODE,
   LOCATIE_OMSCHRIJVING,
   LOCATIE_PLAATS,
   GEBOUWCODE,
   GEBOUW,
   TERREINSECTORCODE,
   TERREINSECTOR,
   VERDIEPINGCODE,
   RUIMTENR,
   WERKPLEKVOLGNR,
   WERKPLEK,
   UITLEENBAAR,
   UITGELEEND,
   RES_OPMERKING,
   BEHEERDER,
   VERVALDATUM,
   ACTIEF,
   AANTAL,
   STATE,
   STATEDATE,
   [REDACTED],
   [REDACTED],
   [REDACTED],
   [REDACTED],
   KENMERK,
   WAARDE_C,
   WAARDE_N,
   WAARDE_D
)
AS
   SELECT m."DEEL_KEY",
          m."DISCIPLINE",
          m."SOORT",
          m."GROEP",
          m."SOORTCODE",
          m."OMSCHRIJVING",
          m."PLAATSEIGENAAR",
          m."PLAATSEIGENAARTYPE",
          m."PLAATSAANDUIDING",
          m."EIGENAAR",
          m."OPMERKING",
          m."REGIO",
          m."DISTRICT",
          m."LOCATIE_CODE",
          m."LOCATIE_OMSCHRIJVING",
          m."LOCATIE_PLAATS",
          m."GEBOUWCODE",
          m."GEBOUW",
          m."TERREINSECTORCODE",
          m."TERREINSECTOR",
          m."VERDIEPINGCODE",
          m."RUIMTENR",
          m."WERKPLEKVOLGNR",
          m."WERKPLEK",
          m."UITLEENBAAR",
          m."UITGELEEND",
          m."RES_OPMERKING",
          m."BEHEERDER",
          m."VERVALDATUM",
          m."ACTIEF",
          m."AANTAL",
          m."STATE",
          m."STATEDATE",
          m."FCLT_3D_DISCIPLINE_KEY",
          m."FCLT_3D_AFDELING_KEY",
          m."FCLT_3D_LOCATIE_KEY",
          m."FCLT_3D_GEBOUW_KEY",
          lcl.x ('skm.ins_srtkenmerk_omschrijving',
                 skm.ins_srtkenmerk_key,
                 ins_srtkenmerk_omschrijving)
             kenmerk,
          CASE
             WHEN skm.ins_srtkenmerk_kenmerktype = 'R'
                  OR skm.ins_srtkenmerk_kenmerktype = 'S'
             THEN
                flx.getdomeinwaarde (skm.fac_kenmerkdomein_key,
                                     km.ins_kenmerkdeel_waarde)
             WHEN skm.ins_srtkenmerk_kenmerktype = 'C'
                  OR skm.ins_srtkenmerk_kenmerktype = 'F'
             THEN
                km.ins_kenmerkdeel_waarde
             ELSE
                NULL
          END
             waarde_c,
          CASE
             WHEN skm.ins_srtkenmerk_kenmerktype = 'N'
                  OR skm.ins_srtkenmerk_kenmerktype = 'B'
             THEN
                TO_NUMBER (km.ins_kenmerkdeel_waarde)
             ELSE
                TO_NUMBER (NULL)
          END
             waarde_n,
          CASE
             WHEN skm.ins_srtkenmerk_kenmerktype = 'D'
             THEN
                TO_DATE (km.ins_kenmerkdeel_waarde, 'DD-MM-YYYY')
             ELSE
                TO_DATE (NULL)
          END
             waarde_d
     FROM apgr_v_ins_gebouw M,
          ins_kenmerkdeel km,
          ins_kenmerk K,
          ins_srtkenmerk skm
    WHERE     km.ins_deel_key = m.deel_key
          AND km.ins_kenmerkdeel_verwijder IS NULL
          AND k.ins_kenmerk_verwijder IS NULL
          AND skm.ins_srtkenmerk_verwijder IS NULL
          AND km.ins_kenmerk_key = k.ins_kenmerk_key(+)
          AND k.ins_srtkenmerk_key = skm.ins_srtkenmerk_key(+);
          
-- Melding doorlooptijden statistiek
CREATE OR REPLACE VIEW apgr_v_rap_mldstats
AS
     SELECT MAX (actiedatum) laatste_actie,
            TRUNC (SYSDATE) - TRUNC (MAX (actiedatum)) dagen_stil,
            p.prs_perslid_naam_full melder,
            m.mld_melding_key,
            sr.ins_srtdiscipline_prefix || m.mld_melding_key meldingnr,
            m.mld_melding_datum geregistreerd,
            st.mld_statuses_omschrijving,
            sr.ins_srtdiscipline_omschrijving vakgroeptype,
            md.ins_discipline_omschrijving vakgroep,
            mld_stdmelding_omschrijving melding,
            mld_melding_onderwerp,
            pb.prs_perslid_naam_full behandelaar,
            bhg.ins_discipline_omschrijving behandelteam,
            abh.prs_perslid_naam_full actieve_behandelaar,
            m.mld_melding_behandelaar2_key actieve_behandelaar_key,
            a.prs_afdeling_omschrijving afdeling,
            DECODE (BITAND (m.mld_melding_actiecode, 1),
                    1, 'Behandelaar',
                    'Melder')
               actie_bij,
            CASE
               WHEN mld_melding_flag > 0
               THEN
                  lcl.l ('lcl_mld_flag' || mld_melding_flag)
            END
               actiestatus
       FROM mld_melding m,
            mld_statuses st,
            mld_stdmelding ms,
            mld_discipline md,
            ins_srtdiscipline sr,
            prs_v_perslid_fullnames pb,
            prs_v_perslid_fullnames p,
            mld_discipline bhg,
            prs_v_perslid_fullnames abh,
            prs_afdeling a,
            (SELECT n.mld_melding_key, n.mld_melding_note_aanmaak actiedatum
               FROM mld_melding_note n
             UNION ALL
             SELECT fac_tracking_refkey, tr.fac_tracking_datum
               FROM fac_tracking tr, fac_srtnotificatie str
              WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                    AND str.fac_srtnotificatie_xmlnode IN ('melding')) d
      WHERE     m.mld_melding_key = d.mld_melding_key
            AND m.mld_melding_status = st.mld_statuses_key
            AND ms.mld_stdmelding_key = m.mld_stdmelding_key
            AND md.ins_discipline_key = ms.mld_ins_discipline_key
            AND md.ins_srtdiscipline_key = sr.ins_srtdiscipline_key
            AND sr.ins_srtdiscipline_module = 'MLD'
            AND mld_melding_behandelaar_key = pb.prs_perslid_key(+)
            AND m.prs_perslid_key = p.prs_perslid_key
            AND mld_melding_status NOT IN (1, 5, 6)
            AND fac_activiteit_key IS NULL
            AND m.mld_ins_discipline_key = bhg.ins_discipline_key(+)
            AND m.mld_melding_behandelaar2_key = abh.prs_perslid_key(+)
            AND m.prs_afdeling_key = a.prs_afdeling_key(+)
   GROUP BY m.mld_melding_key,
            m.prs_kostenplaats_key,
            p.prs_perslid_naam_full,
            m.prs_perslid_key,
            mld_melding_datum,
            st.mld_statuses_omschrijving,
            md.ins_discipline_omschrijving,
            bhg.ins_discipline_omschrijving,
            mld_stdmelding_omschrijving,
            sr.ins_srtdiscipline_omschrijving,
            sr.ins_srtdiscipline_prefix,
            mld_melding_onderwerp,
            pb.prs_perslid_naam_full,
            abh.prs_perslid_naam_full,
            m.mld_melding_behandelaar2_key,
            mld_melding_flag,
            m.mld_melding_actiecode,
            a.prs_afdeling_naam,
            a.prs_afdeling_omschrijving;
            
CREATE OR REPLACE VIEW apgr_v_ins_qrc_mld
AS
   SELECT i.ins_deel_omschrijving hide_f_sort,
          l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
             fclt_f_locatie,
          o.alg_gebouw_omschrijving fclt_f_gebouw,
          o.alg_plaatsaanduiding fclt_f_plaats,
          d.ins_discipline_omschrijving fclt_f_discipline,
          g.ins_srtgroep_omschrijving fclt_f_objectgroep,
          s.ins_srtdeel_omschrijving fclt_f_objectsoort,
          i.ins_deel_omschrijving fclt_f_identificatie,
          i.ins_deel_key,
          s.ins_srtdeel_key,
          o.alg_gebouw_code,
          o.alg_verdieping_code,
          i.ins_discipline_key fclt_3d_discipline_key,
          l.alg_locatie_key fclt_3d_locatie_key,
          i.ins_alg_ruimte_type,
          i.ins_alg_ruimte_key,
          CASE
             WHEN d.ins_discipline_key = 61 -- ICT
             THEN
                (SELECT k.ins_kenmerkdeel_waarde
                   FROM ins_kenmerkdeel k
                  WHERE k.ins_deel_key = i.ins_deel_key
                        AND k.ins_kenmerk_key = 1)
             ELSE
                NULL
          END
             serienummer,
          b.fac_bookmark_id hide_f_bookmark_id
     FROM ins_deel i,
          ins_v_alg_overzicht o,
          ins_srtdeel s,
          ins_srtgroep g,
          ins_discipline d,
          alg_locatie l,
          fac_bookmark b
    WHERE b.fac_bookmark_naam = 'QRC_MELDING'
          AND (b.fac_bookmark_expire IS NULL
               OR b.fac_bookmark_expire > SYSDATE)
          AND ins_deel_verwijder IS NULL
          AND i.ins_deel_module = 'INS'
          AND i.ins_deel_parent_key IS NULL
          AND s.ins_srtdeel_key = i.ins_srtdeel_key
          AND g.ins_srtgroep_key = s.ins_srtgroep_key
          AND d.ins_discipline_key = g.ins_discipline_key
          AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
          AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
          AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND o.alg_locatie_key = i.ins_alg_locatie_key
          AND i.ins_alg_locatie_key = l.alg_locatie_key;
          
-- En dan nu de export naar Simac Palette (opdr en bes).

CREATE OR REPLACE VIEW apgr_v_rap_opdrsimac
(
   opdrachtnummer,
   opdrachtdatum,
   melder,
   locatie,
   kostenplaats,
   leveranciernr,
   rekeningnummer,
   opdr_onderwerp,
   opdr_omschr,
   linenr, -- voor opdr atijd 1
   item, -- vakgroep van de melding?
   omschrijving, -- opdrachtafhandeling
   kosten -- prijs
)
AS
   SELECT DISTINCT
             i.ins_srtdiscipline_prefix
          || TO_CHAR (m.mld_melding_key)
          || '/'
          || o.mld_opdr_bedrijfopdr_volgnr,
          TO_CHAR (o.mld_opdr_datumbegin, 'YYYY-MM-DD'),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = m.prs_perslid_key),
          al.alg_locatie_omschrijving,
          pk.prs_kostenplaats_nr,
          b.prs_leverancier_nr,
          b.prs_bedrijf_opmerking,
          m.mld_melding_onderwerp,
          TO_CHAR(SUBSTR(m.mld_melding_omschrijving,1,4000)),
          '1',
             i.ins_srtdiscipline_omschrijving
          || ' '
          || std.mld_stdmelding_omschrijving,
          o.mld_opdr_opmerking,
          COALESCE (o.mld_opdr_kosten, 500)
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding std,
          prs_bedrijf b,
          ins_srtdiscipline i,
          mld_discipline md,
          mld_kenmerkopdr mk,
          prs_kostenplaats pk,
          alg_locatie al,
          (  SELECT fac_tracking_refkey key, MAX (fac_tracking_datum) datum
               FROM fac_tracking
              WHERE fac_srtnotificatie_key = 71
           GROUP BY fac_tracking_refkey) track
    WHERE     o.mld_melding_key = m.mld_melding_key(+)
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = i.ins_srtdiscipline_key
          AND o.mld_opdr_key = mk.mld_opdr_key
          AND o.prs_kostenplaats_key = pk.prs_kostenplaats_key
          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
          AND m.mld_alg_locatie_key = al.alg_locatie_key
          AND mk.mld_kenmerk_key = 362
          AND mk.mld_kenmerkopdr_waarde = '401'
          AND o.mld_statusopdr_key = 6
          AND o.mld_opdr_key = track.key
          AND TRUNC (track.datum) = TRUNC (SYSDATE - 1);
          
CREATE OR REPLACE VIEW apgr_v_rap_bessimac
(
bestelopdrnummer,
besteldatum,
kostenplaats,
status,
besteller,
adres,
leveranciernr,
rekeningnummer,
bestelregel,
artikel,
eenheid,
artikelnummer,
aantal,
artikelprijs,
besteld_voor,
bestelopdr_key
)
AS
SELECT 
         bo.bes_bestelopdr_id bestelopdrnummer,
         TO_CHAR (bo.bes_bestelopdr_datum, 'YYYY-MM-DD') besteldatum,
         pk.prs_kostenplaats_nr,
         bs.bes_bestelopdrstatuses_omschr
            status,
         (SELECT prs_perslid_naam_full
            FROM prs_v_perslid_fullnames_all pf
           WHERE pf.prs_perslid_key = b.prs_perslid_key)
            besteller,
         ma.mld_adres_naam,
         pb.prs_leverancier_nr,
         pb.prs_bedrijf_opmerking,
         boi.bes_bestelopdr_item_posnr bestelregel,
         boi.bes_bestelopdr_item_omschrijv artikel,
         bs.bes_srtdeel_eenheid eenheid,
         bs.bes_srtdeel_nr artikelnummer,
         boi.bes_bestelopdr_item_aantal aantal,
         boi.bes_bestelopdr_item_prijs artikelprijs,
         (SELECT prs_perslid_naam_full
            FROM prs_v_perslid_fullnames_all pf
           WHERE pf.prs_perslid_key = b.prs_perslid_key_voor)
            besteld_voor,
         bo.bes_bestelopdr_key
    FROM bes_bestelling b,
         bes_bestelling_item bi,
         bes_bestelopdr_item boi,
         bes_bestelopdrstatuses bs,
         bes_bestelopdr bo,
         bes_srtdeel bs,
         prs_bedrijf pb,
         prs_kostenplaats pk,
         mld_adres ma,
          (  SELECT fac_tracking_refkey key, MAX (fac_tracking_datum) datum
               FROM fac_tracking
              WHERE fac_srtnotificatie_key = 20
           GROUP BY fac_tracking_refkey) track
   WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
         AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
         AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
         AND bo.bes_bestelopdr_key IS NOT NULL
         AND bo.bes_bestelopdr_status = bs.bes_bestelopdrstatuses_key
         AND bo.prs_bedrijf_key = pb.prs_bedrijf_key
         AND bi.bes_srtdeel_key = bs.bes_srtdeel_key
         AND b.prs_kostenplaats_key = pk.prs_kostenplaats_key
         AND b.mld_adres_key_lev = ma.mld_adres_key
         AND bo.bes_bestelopdr_status = 6
         AND bo.bes_bestelopdr_key = track.key
         AND TRUNC (track.datum) = TRUNC (SYSDATE - 1)
         ORDER BY bo.bes_bestelopdr_id, boi.bes_bestelopdr_item_posnr;
         
CREATE OR REPLACE VIEW apgr_v_export_opdr_xml
(
   result,
   result_order
)
AS
   SELECT '<?xml version="1.0" encoding="iso-8859-1"?>', 0 FROM DUAL
   UNION ALL
   SELECT '<PurchaseOrderCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',
          1
     FROM DUAL
   UNION ALL
   SELECT    '<PurchaseOrderItem>'
          || '<Company>20008200</Company>'
          || '<PurchaseOrderNo>' || ao.opdrachtnummer || '</PurchaseOrderNo>'
          || '<Status/>'
          || '<PurchaseDate>' || ao.opdrachtdatum || '</PurchaseDate>'
          || '<Supplier>' || ao.leveranciernr || '</Supplier>'
          || '<SupplierPurchaseOrderNo/>'
          || '<Currency>EUR</Currency>'
          || '<ResponsiblePurchaseOrderEmail/>'
          || '<Reference1/>'
          || '<Reference2/>'
          || '<PlannedDeliveryDate/>'
          || '<PlannedPaymentDueDate/>'
          || '<HeaderText>' || ao.opdrachtnummer || ': ' || ao.opdr_onderwerp || '</HeaderText>'
          || '<Note>' || ao.opdr_omschr || '</Note>'
          || '<InvoiceSeries/>'
          || '<InvoiceNo/>'
          || '<Remove/>'
          || '<Group1>' || ao.melder || '</Group1>'
          || '<Group2>' || ao.locatie || '</Group2>'
          || '<Group3/>'
          || '<AutoDelivery>1</AutoDelivery>'
          || '<PurchaseOrderMatchType>1</PurchaseOrderMatchType>'
          || '<ValidTo/>'
          || '<PurchaseOrderLine>'   -- Orderregel
          || '<Company>20008200</Company>'  -- Nummer van A-Point Groep
          || '<PurchaseOrderNo>' || ao.opdrachtnummer || '</PurchaseOrderNo>'
          || '<LineNo>' || ao.linenr || '</LineNo>'
          || '<FullyDelivered>0</FullyDelivered>'
          || '<FullyInvoiced/>'
          || '<YourReference/>'
          || '<GoodsLabel/>'
          || '<Item>' || ao.item || '</Item>'
          || '<Description>' || ao.omschrijving || '</Description>'
          || '<Attribute/>'
          || '<Number>1</Number>'
          || '<Unit></Unit>'
          || '<Price>' || ao.kosten || '</Price>'
          || '<Amount>' || ao.kosten || '</Amount>'
          || '<Discount>0</Discount>'
          || '<InvoicedNumber/>'
          || '<InvoicedPrice/>'
          || '<InvoicedAmount/>'
          || '<SupplierItem></SupplierItem>'
          || '<PlannedDeliveryDate/>'
          || '<Note/>'
          || '<Remove/>'
          || '<Group1/>'
          || '<Group2/>'
          || '<Group3/>'
          || '<PurchaseOrderLineAccountCoding>'  -- Financiele gegevens van orderregel
          || '<Company>20008200</Company>'
          || '<PurchaseOrderNo/>'
          || '<LineNo/>'
          || '<AccountCodingNo>01</AccountCodingNo>' -- Per orderregel, max 128
          || '<Account>' || ao.rekeningnummer || '</Account>' -- reknr. staat in opmerking veld bij leverancier
          || '<Object1>' || ao.kostenplaats || '</Object1>' 
          || '<Object2/>'
          || '<Object3/>'
          || '<Object4/>'
          || '<Object5/>'
          || '<Object6/>'
          || '<Object7/>'
          || '<Object8/>'
          || '<VatCode/>'
          || '<AllocationsAccount/>'
          || '<AllocateFromDate/>'
          || '<AllocateToDate/>'
          || '<AccountOutstandingAmountExceed/>'
          || '<AccountOutstandingAmountBelow/>'
          || '<ForwardInvoice/>'
          || '<AssetType/>'
          || '<AssetName/>'
          || '<AssetDescription/>'
          || '<AssetDate/>'
          || '<OwnerAsset/>'
          || '<Percentage>100</Percentage>' -- ALTIJD 100 procent
          || '<Note/>'
          || '<Group1/>'
          || '<Group2/>'
          || '<Group3/>'
          || '</PurchaseOrderLineAccountCoding>'
          || '</PurchaseOrderLine>'
          || '</PurchaseOrderItem>',
          2
     FROM apgr_v_rap_opdrsimac ao
         UNION ALL
    SELECT '</PurchaseOrderCollection>', 3 FROM DUAL;
    
CREATE OR REPLACE VIEW apgr_v_export_bes_xml
(
   result,
   result_order
)
AS
   SELECT '<?xml version="1.0" encoding="iso-8859-1"?>', 0 FROM DUAL
   UNION ALL
   SELECT '<PurchaseOrderCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">',
          1
     FROM DUAL
   UNION ALL
   SELECT    '<PurchaseOrderItem>'
          || '<Company>20008200</Company>'
          || '<PurchaseOrderNo>' || ab.bestelopdrnummer || '</PurchaseOrderNo>'
          || '<Status/>'
          || '<PurchaseDate>' || ab.besteldatum || '</PurchaseDate>'
          || '<Supplier>' || ab.leveranciernr || '</Supplier>'
          || '<SupplierPurchaseOrderNo/>'
          || '<Currency>EUR</Currency>'
          || '<ResponsiblePurchaseOrderEmail/>'
          || '<Reference1/>'
          || '<Reference2/>'
          || '<PlannedDeliveryDate/>'
          || '<PlannedPaymentDueDate/>'
          || '<HeaderText>Bestelling: ' || ab.bestelopdrnummer || '</HeaderText>'
          || '<Note/>'
          || '<InvoiceSeries/>'
          || '<InvoiceNo/>'
          || '<Remove/>'
          || '<Group1>' || ab.besteller || '</Group1>'
          || '<Group2>' || ab.adres || '</Group2>'
          || '<Group3/>'
          || '<AutoDelivery>1</AutoDelivery>'
          || '<PurchaseOrderMatchType>1</PurchaseOrderMatchType>'
          || '<ValidTo/>'
          || '<PurchaseOrderLine>'   -- Orderregel
          || '<Company>20008200</Company>'  -- Nummer van A-Point Groep
          || '<PurchaseOrderNo>' || ab.bestelopdrnummer || '</PurchaseOrderNo>'
          || '<LineNo>' || ab.bestelregel || '</LineNo>'
          || '<FullyDelivered>0</FullyDelivered>'
          || '<FullyInvoiced/>'
          || '<YourReference/>'
          || '<GoodsLabel/>'
          || '<Item>' || ab.artikel || '</Item>'
          || '<Description/>'
          || '<Attribute/>'
          || '<Number>' || ab.aantal || '</Number>'
          || '<Unit>' || ab.eenheid || '</Unit>'
          || '<Price>' || ab.artikelprijs || '</Price>'
          || '<Amount>' || ab.aantal * ab.artikelprijs ||'</Amount>'
          || '<Discount>0</Discount>'
          || '<InvoicedNumber/>'
          || '<InvoicedPrice/>'
          || '<InvoicedAmount/>'
          || '<SupplierItem>' || ab.artikelnummer || '</SupplierItem>'
          || '<PlannedDeliveryDate/>'
          || '<Note/>'
          || '<Remove/>'
          || '<Group1/>'
          || '<Group2/>'
          || '<Group3/>'
          || '<PurchaseOrderLineAccountCoding>'  -- Financiele gegevens van orderregel
          || '<Company>20008200</Company>'
          || '<PurchaseOrderNo/>'
          || '<LineNo/>'
          || '<AccountCodingNo>' || ab.bestelregel || '</AccountCodingNo>' -- Per orderregel, max 128
          || '<Account>' || ab.rekeningnummer || '</Account>' -- reknr. moet nog als SQL worden opgenomen (kenmerk van bestelling / opdracht?)
          || '<Object1>' || ab.kostenplaats || '</Object1>' 
          || '<Object2/>'
          || '<Object3/>'
          || '<Object4/>'
          || '<Object5/>'
          || '<Object6/>'
          || '<Object7/>'
          || '<Object8/>'
          || '<VatCode/>'
          || '<AllocationsAccount/>'
          || '<AllocateFromDate/>'
          || '<AllocateToDate/>'
          || '<AccountOutstandingAmountExceed/>'
          || '<AccountOutstandingAmountBelow/>'
          || '<ForwardInvoice/>'
          || '<AssetType/>'
          || '<AssetName/>'
          || '<AssetDescription/>'
          || '<AssetDate/>'
          || '<OwnerAsset/>'
          || '<Percentage>100</Percentage>' -- ALTIJD 100 procent
          || '<Note/>'
          || '<Group1/>'
          || '<Group2/>'
          || '<Group3/>'
          || '</PurchaseOrderLineAccountCoding>'
          || '</PurchaseOrderLine>'
          || '</PurchaseOrderItem>',
          2
     FROM apgr_v_rap_bessimac ab
         UNION ALL
    SELECT '</PurchaseOrderCollection>', 3 FROM DUAL;
    
-- Views t.b.v. koppeling met EST ESIS       
CREATE OR REPLACE VIEW apgr_v_rap_opdrest
(
   opdr_key,
   vestiging_id,
   machine_code,
   onderwerp,
   omschrijving,
   melder,
   melder_mobiel,
   opdrachtnummer,
   opdrachtdatum
)
AS
   SELECT o.mld_opdr_key,
          (SELECT ak.alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk ak
            WHERE ak.alg_kenmerk_key = 1000
                  AND ak.alg_onrgoed_key = og.alg_gebouw_key)
             vestiging_id,
           (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel
            WHERE ins_deel_key = ob.ins_deel_key AND ins_kenmerk_key = 32)  
                  ||  ' / ' ||
          (SELECT ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel
            WHERE ins_deel_key = ob.ins_deel_key AND ins_kenmerk_key = 31)
             machine_code,
          o.mld_opdr_omschrijving,
          o.mld_opdr_opmerking,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = m.prs_perslid_key)
             melder,
          (SELECT p.prs_perslid_mobiel
             FROM prs_perslid p
            WHERE p.prs_perslid_key = m.prs_perslid_key)
             mobiel,
             i.ins_srtdiscipline_prefix
          || TO_CHAR (m.mld_melding_key)
          || '/'
          || o.mld_opdr_bedrijfopdr_volgnr
             opdrnr,
          o.mld_opdr_datumbegin
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding std,
          prs_bedrijf b,
          ins_srtdiscipline i,
          mld_discipline md,
          alg_locatie al,
          ins_deel ob,
          mld_melding_object mmo,
          alg_v_allonrgoed_gegevens og,
          (  SELECT MAX (fac_tracking_refkey) key,
                    MAX (fac_tracking_datum) datum
               FROM fac_tracking
              WHERE fac_srtnotificatie_key = 70 -- Toegekend (nog voor ORDVER)
           GROUP BY fac_tracking_refkey) track
    WHERE     o.mld_melding_key = m.mld_melding_key(+)
          AND m.mld_melding_key = mmo.mld_melding_key(+)
          AND ob.ins_deel_key = mmo.ins_deel_key
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = i.ins_srtdiscipline_key
          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
          AND m.mld_alg_locatie_key = al.alg_locatie_key
          AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
          AND b.prs_bedrijf_key = 525                           -- Explora EST
          AND o.mld_opdr_key = track.key
          AND track.datum > SYSDATE - INTERVAL '15' MINUTE;
          
CREATE OR REPLACE VIEW apgr_v_export_est_xml
(
   result,
   result_order,
   ticket
)
AS
   SELECT '<esisexplora_explora xmlns:tabel="ticket">',
          0,
             '910051_'
          || TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
          || ' '
          || o.opdr_key
     FROM apgr_v_rap_opdrest o
   UNION ALL
   SELECT    '<ticket>'
          || '<sync_key>d5640150-3f58-11e9-af79-080027f683cc</sync_key>'
          || '<ticket_origin>3</ticket_origin>'
          || '<ticket_soort>0</ticket_soort>'
          || '<ticket_type>0</ticket_type>'
          || '<ticket_status>0</ticket_status>'
          || '<klanten_id>'
          || o.vestiging_id
          || '</klanten_id>'
          || '<machiene_klanten_referentie>'
          || o.machine_code
          || '</machiene_klanten_referentie>'
          || '<ticket_melding>'
          || o.onderwerp
          || '. '
          || o.omschrijving
          || '</ticket_melding>'
          || '<ticket_contactpersoon>'
          || o.melder
          || '</ticket_contactpersoon>'
          || '<ticket_telefoonnummer>'
          || o.melder_mobiel
          || '</ticket_telefoonnummer>'
          || '<ticket_opdrachtnummer>'
          || o.opdrachtnummer
          || '</ticket_opdrachtnummer>'
          || '<ticket_datum>'
          || o.opdrachtdatum
          || '</ticket_datum>'
          || '</ticket>',
          1,
             '910051_'
          || TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
          || ' '
          || o.opdr_key
     FROM apgr_v_rap_opdrest o
   UNION ALL
   SELECT '</esisexplora_explora>',
          2,
             '910051_'
          || TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
          || ' '
          || o.opdr_key
     FROM apgr_v_rap_opdrest o;
    
-- Procedure voor het inserten van tracking bij versturen XML naar ESIS.
CREATE OR REPLACE PROCEDURE apgr_export_esis      (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
   CURSOR c1
   IS
      SELECT opdr_key,
             vestiging_id,
             machine_code,
             onderwerp,
             omschrijving,
             melder,
             melder_mobiel,
             opdrachtnummer,
             opdrachtdatum
        FROM apgr_v_rap_opdrest;
BEGIN
   FOR rec IN c1
   LOOP
      INSERT INTO fac_tracking (fac_tracking_datum,
                                fac_srtnotificatie_key,
                                fac_tracking_refkey,
                                fac_tracking_oms,
                                prs_perslid_key)
          VALUES (SYSDATE,
                  85,
                  rec.opdr_key,
                  'Opdracht verzonden via koppeling ESIS.',
                  3);
   END LOOP;
END;
/

-- En nu de CUST notificaties

-- Mail naar geselecteerd directielid voor nieuwe medewerker
CREATE OR REPLACE VIEW APGR_V_NOTI_NMDW
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XSENDER,
   XEMAIL,
   XMOBILE
)
AS
   SELECT 'CUST01',
          NULL,
          mkm.mld_kenmerkmelding_waarde,
          'Er staat een melding voor u klaar voor het goedkeuren van een nieuwe medewerker ('
           || 'A/'
           || m.mld_melding_key
          || ')',
          m.mld_melding_key,
          NULL,
          NULL,
          NULL,
          NULL
     FROM mld_melding m, mld_kenmerkmelding mkm, mld_kenmerk mk, fac_tracking t
    WHERE     m.mld_stdmelding_key = 341
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_melding_key = m.mld_melding_key
          AND mk.mld_srtkenmerk_key = 221
          AND t.fac_tracking_refkey = m.mld_melding_key
          AND t.fac_srtnotificatie_key =
            (SELECT fac_srtnotificatie_key
               FROM fac_srtnotificatie
              WHERE fac_srtnotificatie_code = 'MLDNEW')
          AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                                 - fac_notificatie_job_interval
                                                     / 24
                                              FROM fac_notificatie_job
                                             WHERE UPPER(fac_notificatie_job_view) =
                                                      'APGR_V_NOTI_NMDW')
                                       AND  (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE UPPER(fac_notificatie_job_view) =
                                                       'APGR_V_NOTI_NMDW');
                                                       
-- Mail naar mailbox van HRM voor goedkeuren nieuwe medewerker aanvraag
-- Flag 1 instellen voor XEMAIL!
CREATE OR REPLACE VIEW APGR_V_NOTI_GOEDHRM
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XEMAIL,
   XMOBILE
)
AS
   SELECT 'CUST02',
          NULL,
          NULL,
          'Er staat een melding nieuwe medewerker klaar ter goedkeuring voor HR ('
           || 'A/'
           || m.mld_melding_key
           || ')',
          m.mld_melding_key,
          NULL,
          'HRM@a-point.nl',
          NULL
     FROM mld_melding m,
     fac_tracking t
     WHERE m.mld_stdmelding_key = 301
     AND m.mld_melding_key = t.fac_tracking_refkey
     AND t.fac_srtnotificatie_key =
            (SELECT fac_srtnotificatie_key
               FROM fac_srtnotificatie
              WHERE fac_srtnotificatie_code = 'MLDNEW')
     AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                                 - fac_notificatie_job_interval
                                                     / 24
                                              FROM fac_notificatie_job
                                             WHERE UPPER(fac_notificatie_job_view) =
                                                      'APGR_V_NOTI_GOEDHRM')
                                       AND  (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE UPPER(fac_notificatie_job_view) =
                                                       'APGR_V_NOTI_GOEDHRM');
    

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