--
-- $Id$
--
-- Script containing customer specific db-configuration for BLCC.
DEFINE thisfile = 'BLCC.SQL'
DEFINE dbuser   = '^BLCC'

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

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

CREATE OR REPLACE PACKAGE BLCC
IS
   PROCEDURE mld_after_insert (p_melding_key IN NUMBER);
   PROCEDURE freezeopdrachten (p_kpn IN VARCHAR2);
END;
/

CREATE OR REPLACE PACKAGE BODY BLCC
IS
   -- Procedure om bij aanmaken van de melding te kijken of er al een oudere
   -- melding is met dezelfde externe referentie (zonder volgnummer).
   PROCEDURE mld_after_insert (p_melding_key IN NUMBER)
   AS
      v_melding_key   NUMBER;
   BEGIN
      SELECT (SELECT MIN (m2.mld_melding_key)
                FROM mld_melding m2
               WHERE SUBSTR (m2.mld_melding_externnr, 1, INSTR (m2.mld_melding_externnr, '/')) =
                        SUBSTR (m1.mld_melding_externnr, 1, INSTR (m1.mld_melding_externnr, '/'))
                     AND m1.mld_melding_key > m2.mld_melding_key)
                refe
        INTO v_melding_key
        FROM mld_melding m1
       WHERE m1.mld_melding_externnr IS NOT NULL
             AND m1.mld_melding_status = 2
             AND m1.mld_melding_key = p_melding_key;

      IF v_melding_key IS NOT NULL
      THEN
         DBMS_OUTPUT.put_line ('Melding update ' || p_melding_key || '-' || v_melding_key);

         UPDATE mld_melding
            SET mld_melding_omschrijving =
                      'Startmelding met zelfde extern nummer: melding '
                   || v_melding_key
                   || CHR (13)
                   || CHR (10)
                   || SUBSTR (mld_melding_omschrijving, 1, 3920)
          WHERE mld_melding_key = p_melding_key
                AND COALESCE (mld_melding_opmerking, 'QueQeLeQue') NOT LIKE
                      'Startmelding met zelfde extern nummer: melding %'
                AND COALESCE (mld_melding_omschrijving, 'QueQeLeQue') NOT LIKE
                      'Startmelding met zelfde extern nummer: melding %';
      END IF;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         RETURN;
   END;

   PROCEDURE freezeopdrachten (p_kpn IN VARCHAR2)
   AS
      -- Cursor loopt over alle opdrachten op Kostenplaats 'p_kpn' die zijn
      -- afgerond; deze worden verwerkt en vannacht doorgezet naar ProQuro!
      CURSOR c1
      IS
           SELECT mld_opdr_key
             FROM mld_opdr o, prs_kostenplaats kp, prs_kostenplaatsgrp kpg
            WHERE o.mld_typeopdr_key = 101                               -- WO
                  AND o.mld_statusopdr_key = 9                           -- KV
                  --AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm')
                  AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
                  AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
                  AND COALESCE (kpg.prs_kostenplaatsgrp_nr, SUBSTR (kp.prs_kostenplaats_nr, 1, 5)) = p_kpn
         ORDER BY 1;

      c_applname       VARCHAR2 (50) := 'FREEZE_OPDR';
      v_errormsg       VARCHAR2 (1000);
      oracle_err_num   NUMBER;
      oracle_err_mes   VARCHAR2 (200);
      v_count          NUMBER (10);
      v_count_upd      NUMBER (10);
      v_bedrijf_naam   VARCHAR2 (30);
   BEGIN
      v_count_upd := 0;

      v_errormsg := 'Fout bijwerken opdrachtstatus.';

      -- Opdrachten op Kostenplaats 'p_kpn' verwerken en zodoende markeren om
      -- vannacht door te zetten via PROQURO-export!
      FOR rec IN c1
      LOOP
         MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 4);
         v_count_upd := v_count_upd + 1;
         COMMIT;
      END LOOP;

      fac.writelog (c_applname, 'S', 'Proces: ' || TO_CHAR (v_count_upd) || ' opdrachten bevroren', '');
      COMMIT;
   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 (c_applname, 'E', v_errormsg, '');
         COMMIT;
   END freezeopdrachten;
END;
/

CREATE OR REPLACE VIEW blcc_v_rap_import_log
(
   fclt_f_applicatie,
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT COALESCE (fac_import_app_code, imp_log_applicatie),
          TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'),
          imp_log_status,
          imp_log_omschrijving,
          imp_log_hint
     FROM imp_log il1, fac_import fi1, fac_import_app fia1
    WHERE il1.fac_import_key = fi1.fac_import_key(+)
          AND fi1.fac_import_app_key = fia1.fac_import_app_key(+)
          AND NOT EXISTS
                (SELECT 1
                   FROM imp_log il2, fac_import fi2
                  WHERE     il2.fac_import_key = fi2.fac_import_key
                        AND fi2.fac_import_app_key = fi1.fac_import_app_key
                        AND il2.fac_import_key > il1.fac_import_key);

-- BLCC#55646: De Afgemelde Kostenraming-opdrachten <= Mandaat van Leverancier
--             automatisch Afronden=Goedkeuren én aanmaken Workorder.
CREATE OR REPLACE PROCEDURE blcc_select_raming2wo (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2)
AS
   CURSOR c1
   IS
        SELECT '[' || TO_CHAR (o.mld_melding_key) || '|' || TO_CHAR (o.mld_opdr_key) || '] '
                  aanduiding,
               o.mld_melding_key,
               o.mld_opdr_key,
               o.mld_uitvoerende_keys,
               o.prs_contactpersoon_key,
               o.mld_opdr_omschrijving,
               o.prs_kostenplaats_key,
               o.mld_opdr_kosten
          FROM mld_opdr o, prs_bedrijf b, prs_v_aanwezigkenmerklink kl
         WHERE o.mld_typeopdr_key = 1261                       -- Kostenraming
               AND o.mld_statusopdr_key = 6                        -- Afgemeld
               AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               AND b.prs_bedrijf_key = kl.prs_link_key
               AND kl.prs_kenmerklink_niveau = 'B'
               AND kl.prs_kenmerk_key = 1140                        -- Mandaat
               AND o.mld_opdr_kosten <= fac.safe_to_number (kl.prs_kenmerklink_waarde)
               AND NOT EXISTS             -- Geen andere lopende Kostenraming!
                     (SELECT 1
                        FROM mld_opdr
                       WHERE mld_melding_key = o.mld_melding_key
                             AND mld_opdr_key != o.mld_opdr_key
                             AND mld_typeopdr_key = 1261       -- Kostenraming
                             AND mld_statusopdr_key IN (3, 4, 5, 6, 8, 10))
      ORDER BY 1;

   v_errormsg           VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_opdr_dagen         NUMBER (3);
   v_kostenplaats_nr    VARCHAR2 (30);
   v_budgethouder_key   NUMBER (10);
   v_opdr_key           NUMBER (10);
   v_srtnoti_oms        VARCHAR2 (4000);
   v_count_tot          NUMBER (10) := 0;
   v_count_upd          NUMBER (10) := 0;
BEGIN
   -- Eerst opruiming
   DELETE FROM imp_log
         WHERE imp_log_applicatie = p_applname
               AND imp_log_datum < TRUNC (SYSDATE - 7, 'iw');

   FOR rec IN c1
   LOOP
      BEGIN
         v_count_tot := v_count_tot + 1;

         v_errormsg := 'Fout afronden Kostenraming.';
         MLD.setopdrachtstatus (rec.mld_opdr_key, 9, 4);           -- Afronden
         MLD.updatemeldingstatus (rec.mld_melding_key, 0, 4);

         v_errormsg := 'Fout bepalen uitvoertijd.';
         SELECT sm.mld_stdmelding_t_uitvoertijd.tijdsduur
           INTO v_opdr_dagen
           FROM mld_melding m, mld_stdmelding sm, ins_tab_discipline td, mld_disc_params dp
          WHERE m.mld_melding_key = rec.mld_melding_key
                AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                AND sm.mld_ins_discipline_key = td.ins_discipline_key
                AND td.ins_discipline_key = dp.mld_ins_discipline_key;

         v_errormsg := 'Fout bepalen kostenplaats.';
         SELECT prs_kostenplaats_nr
           INTO v_kostenplaats_nr
           FROM prs_kostenplaats
          WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key;

         v_errormsg := 'Fout bepalen budgethouder.';

         v_budgethouder_key := prs.getkpverantwoordelijke (rec.prs_kostenplaats_key, 2, -1);

         IF (v_budgethouder_key = -1)
         THEN
            fac.writelog (p_applname, 'E', rec.aanduiding || 'Budgethouder ongedefinieerd.', '');
            COMMIT;
         END IF;

         --SELECT COUNT(*) cnt FROM prs_bedrijfdienstlocatie bdl WHERE bdl.prs_bdl_t_uitvoertijd.tijdsduur IS NOT NULL
         --SELECT b.prs_bedrijf_t_uitvoertijd.tijdsduur tijdsduur , b.prs_bedrijf_t_uitvoertijd.eenheid eenheid FROM prs_bedrijf b WHERE b.prs_bedrijf_key=192
         --SELECT m.mld_melding_t_uitvoertijd.tijdsduur tijdsduur , m.mld_melding_t_uitvoertijd.eenheid eenheid FROM mld_melding m WHERE m.mld_melding_key=21055

         v_errormsg := 'Fout toevoegen Workorder.';
         INSERT INTO mld_opdr (mld_opdr_datumbegin,
                               mld_opdr_einddatum,
                               mld_uitvoerende_keys,
                               prs_contactpersoon_key,
                               mld_typeopdr_key,
                               prs_perslid_key,
                               mld_opdr_omschrijving,
                               mld_opdr_materiaal,
                               mld_opdr_uren,
                               mld_opdr_uurloon,
                               mld_opdr_kosten,
                               prs_kostenplaats_key,
                               mld_melding_key,
                               mld_opdr_module,
                               mld_opdr_bedrijfopdr_volgnr,
                               mld_opdr_teverzenden,
                               mld_opdr_contactpersoon)
             VALUES (SYSDATE,
                     FAC.datumtijdplusuitvoertijd (SYSDATE, COALESCE (v_opdr_dagen, 0), 'DAGEN'),
                     rec.mld_uitvoerende_keys,
                     rec.prs_contactpersoon_key,
                     101,                                         -- Workorder
                     4,                                           -- Facilitor
                     rec.mld_opdr_omschrijving,
                     rec.mld_opdr_kosten,
                     0,
                     0,
                     rec.mld_opdr_kosten,
                     rec.prs_kostenplaats_key,
                     rec.mld_melding_key,
                     'MLD',
                     MLD.bepaalopdrmeldingvolgnr (rec.mld_melding_key),
                     1,
                     NULL)
          RETURNING mld_opdr_key
               INTO v_opdr_key;

         v_errormsg := 'Fout kopieren kenmerkvelden.';
         --TODO

         -- Automatisch aangemaakte Workorders (uit Kostenramingen) nooit Ter
         -- goedkeuring (want onder Mandaat van Leverancier), maar direct Ter
         -- fiattering of Toegekend (afhankelijk van 50900-kostenplaats).
         -- TODO: Of toch inbouwen goedkeuring indien noodzakelijk?
         IF v_kostenplaats_nr LIKE '50900%'
         THEN
            -- Ongeacht kosten ALTIJD 'Ter fiattering' (of budgethouder wel of
            -- niet bestaat doet er niet toe)!
            v_errormsg := 'Fout ter fiat Workorder.';
            MLD.setopdrachtstatus (v_opdr_key, 3, 4);        -- Ter fiattering

            -- Notificeren als budgethouder bekend!
            IF (v_budgethouder_key != -1)
            THEN
               v_errormsg := 'Fout bepalen MLDAP1-omschrijving.';

               SELECT lcl.x ('fac_srtnotificatie_oms', fac_srtnotificatie_key, fac_srtnotificatie_oms)
                 INTO v_srtnoti_oms
                 FROM fac_srtnotificatie
                WHERE fac_srtnotificatie_code = 'MLDAP1';

               fac.putnotificationsrtprio (
                  NULL,
                  v_budgethouder_key,
                  'MLDAP1',
                  v_opdr_key,
                  mld.opdrsprintf (v_srtnoti_oms, v_opdr_key),
                  NULL,
                  NULL,
                  NULL,
                  NULL,
                  2,
                  NULL);
            END IF;
         ELSE
            v_errormsg := 'Fout toekennen Workorder.';
            MLD.setopdrachtstatus (v_opdr_key, 5, 4);             -- Toegekend
         END IF;

         v_errormsg := 'Fout bijwerken meldingstatus.';
         MLD.updatemeldingstatus (rec.mld_melding_key, 0, 4);     -- Facilitor

         v_count_upd := v_count_upd + 1;
         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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'Kostenraming2Workorder');
            COMMIT;
      END;
   END LOOP;

   fac.writelog (p_applname, 'S', 'Proces: ' || TO_CHAR (v_count_upd) || ' van ' || TO_CHAR (v_count_tot) || ' Workorders uitgegeven', '');
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.writelog (p_applname, 'E', v_errormsg, 'RAMING2WO-export afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE blcc_add_xml_row (p_bestand   IN VARCHAR2,
                                              p_regel     IN VARCHAR2)
AS
   v_index   NUMBER;
BEGIN
   SELECT COALESCE (MAX (fac_rapport_volgnr), 0) + 1
     INTO v_index
     FROM fac_rapport
    WHERE fac_rapport_node = p_bestand;

   INSERT INTO fac_rapport (fac_rapport_node,
                            fac_rapport_volgnr,
                            fac_rapport_regel)
       VALUES (p_bestand, v_index, p_regel);
END;
/

CREATE OR REPLACE PROCEDURE blcc_add_xml_element (p_bestand   IN VARCHAR2,
                                                  p_tag       IN VARCHAR2,
                                                  p_value     IN VARCHAR2)
AS
BEGIN
   blcc_add_xml_row (
      p_bestand,
         '<'
      || p_tag
      || '>'
      || xml.char_to_html (p_value)
      || '</'
      || p_tag
      || '>');
END;
/

CREATE OR REPLACE VIEW blcc_v_export_proquro (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
     FROM fac_rapport
    WHERE fac_rapport_node = 'PROQURO';

CREATE OR REPLACE PROCEDURE blcc_select_proquro (p_applname   IN VARCHAR2,
                                                 p_applrun    IN VARCHAR2)
AS
   -- Markeren te exporteren opdracht-verplichtingen (via ordernr)!
   -- BLCC#55646: Per 2019-05 deprecated, want markeren gebeurt door Verwerken
   --             opdrachten via BLCC.freezeopdrachten()!
   --CURSOR c1
   --IS
   --     SELECT '[' || TO_CHAR (o.mld_melding_key) || '|' || TO_CHAR (o.mld_opdr_key) || '] '
   --               aanduiding,
   --            o.mld_opdr_key
   --       FROM mld_opdr o
   --      WHERE o.mld_typeopdr_key != 103                        -- Geen RFQs
   --            AND o.mld_statusopdr_key = 9                      -- Afgerond
   --            AND o.mld_opdr_ordernr IS NULL -- Geen ordernr, dus bijwerken
   --   ORDER BY 1;

   -- Wegschrijven te exporteren verplichting-regels (= factuur naar ProQuro).
   -- BLCC#38809: SCC uitsluiten (alleen regels als volgnr 1000 t/m 2999)!
   -- Per oktober-doorbelasting alleen nog maar catalogi meenemen die zijn
   -- gekoppeld aan een bedrijf (voor de locatie CAMPUS).
   -- BLCC#52390: Per februari catering-verplichtingen niet meer exporteren!
   -- BLCC#55646: Per 2019-06 Verwerkte ipv. Afgeronde opdrachten exporteren
   --             en markeren als doorgezet naar ProQuro!
   CURSOR c3
   IS                      -- Regel per Afgeronde mld_opdr zojuist gemarkeerd!
        SELECT o.mld_opdr_key,
               sd.ins_srtdiscipline_prefix
               || TO_CHAR (o.mld_melding_key)
               || '/'
               || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
                  externalid,
               p.prs_perslid_nr,                   -- AdministrationExternalId
               --kp.prs_kostenplaats_nr costcentre,      -- CostcentreExternalId
               SUBSTR (kp.prs_kostenplaats_nr, 1, 5) costcentre, -- CostcentreExternalId
               b.prs_leverancier_nr,
               'FACILITOR Ref.nr. '
               || sd.ins_srtdiscipline_prefix
               || TO_CHAR (o.mld_melding_key)
               || '/'
               || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
               || ' ('
               || td.ins_discipline_omschrijving
               || '-'
               || sm.mld_stdmelding_omschrijving
               || ')'
                  omschrijving,
               o.mld_opdr_kosten price,
               TO_CHAR (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), 'yyyy-mm-dd')
                  deliverydate,
               COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms)
                  costtype,                              -- CostTypeExternalId
               DECODE (aog.alg_gebouw_code,
                       NULL, 'C-0000-000-00',
                       '122-001N', 'C-0122-001-01',
                       '122-00TW', 'C-0122-000-00',
                       '122-03B',  'C-0122-003-01',
                       '122-32A',  'C-0122-032-01',
                       '122-93A',  'C-0122-093-01',
                       '122-93B',  'C-0122-093-02', -- ???
                       '122-93C',  'C-0122-093-03',
                       '122-93D',  'C-0122-093-04',
                       '122-93E',  'C-0122-093-05', -- ???
                       '122-94A',  'C-0122-094-01',
                       '122-94B',  'C-0122-094-02',
                       '124-037Itter', 'C-0122-037-00',
                       'C-0' || aog.alg_gebouw_code || '-00')
                  costproject                         -- CostProjectExternalId
          FROM mld_opdr o,
               mld_melding m,
               alg_v_allonrgoed_gegevens aog,
               mld_stdmelding sm,
               ins_tab_discipline td,
               ins_srtdiscipline sd,
               prs_kostensoort ksm,
               prs_kostensoort ksv,
               prs_kostenplaats kp,
               prs_bedrijf b,
               prs_perslid p
         WHERE --SUBSTR (o.mld_opdr_ordernr, 1, 10) = TO_CHAR (SYSDATE, 'yyyy-mm-dd')
               o.mld_typeopdr_key = 101                                  -- WO
               AND o.mld_statusopdr_key = 7                        -- Verwerkt
               AND TO_CHAR (fac.gettrackingdate ('ORDVER', o.mld_opdr_key), 'yyyy-mm-dd') >= '2019-06-01' -- xTODO:2019-06-01/Per 2019-06 nieuwe werkwijze!
               AND o.mld_opdr_ordernr IS NULL   -- Nog niet doorgezet Proquro!
               AND NOT EXISTS                   -- Nog niet doorgezet Proquro!
                     (SELECT 1
                        FROM mld_v_aanwezigkenmerkopdr
                       WHERE mld_kenmerk_key = 581 AND mld_opdr_key = o.mld_opdr_key)
               AND o.mld_opdr_kosten > 0
               AND o.mld_melding_key = m.mld_melding_key
               AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
               AND m.mld_stdmelding_key = sm.mld_stdmelding_key
               AND sm.mld_ins_discipline_key = td.ins_discipline_key
               AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
               AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
               AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
               AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
               AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               AND p.prs_perslid_key(+) = 101
      ORDER BY 1;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_bestand        VARCHAR2 (12);
   v_order_count    NUMBER;
   v_amount_sum     NUMBER (10, 2);
BEGIN
   v_bestand := SUBSTR (p_applname, 1, 12);

   -- Eerst opruiming
   DELETE FROM imp_log
         WHERE imp_log_applicatie = p_applname;

   DELETE FROM fac_rapport
         WHERE fac_rapport_node = v_bestand;

   -- BLCC#55646: Per 2019-05 deprecated, want markeren gebeurt door Verwerken
   --             opdrachten via BLCC.freezeopdrachten()!
   --FOR rec IN c1
   --LOOP
   --   BEGIN
   --      v_errormsg := 'Fout bijwerken mld_opdr';

   --      UPDATE mld_opdr
   --         SET mld_opdr_ordernr = TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss')
   --       WHERE mld_opdr_key = rec.mld_opdr_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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'Opdracht-verplichtingen');
   --         COMMIT;
   --   END;
   --END LOOP;
   --COMMIT;

   v_order_count := 0;
   v_amount_sum := 0;
   FOR rec IN c3
   LOOP
      BEGIN
         v_order_count := v_order_count + 1;
         v_amount_sum := v_amount_sum + rec.price;
      END;
   END LOOP;

   IF v_order_count > 0
   THEN
    -- Begin-tag splitsen ter voorkoming auto-detectie utf-8 door UltraEdit!
    blcc_add_xml_row (v_bestand, '<?xml version="1.0" encoding="utf-' || '8"?>');
    blcc_add_xml_row (v_bestand, '<Orders>');
    FOR rec IN c3
    LOOP
      BEGIN
         --blcc_add_xml_row (v_bestand, '<AddOrder>');
         blcc_add_xml_row (v_bestand, '<Order>');
           --blcc_add_xml_element (v_bestand, 'securityKey', 'xxx');
           --blcc_add_xml_row (v_bestand, '<parms>');
             blcc_add_xml_element (v_bestand, 'ExternalId', rec.externalid);
             blcc_add_xml_element (v_bestand, 'AdministrationExternalId', rec.prs_perslid_nr); -- Personeelsnummer van API-user
             blcc_add_xml_element (v_bestand, 'OrderTypeId', '9'); -- Hard op '9'
             blcc_add_xml_element (v_bestand, 'ProcessExternalId', '7'); -- Hard op '7'
             blcc_add_xml_element (v_bestand, 'CostcentreExternalId', rec.costcentre); -- Kostenplaats van opdracht
             blcc_add_xml_element (v_bestand, 'ProductgroupExternalId', '1'); -- Hard op '1'
             blcc_add_xml_element (v_bestand, 'SupplierExternalId', rec.prs_leverancier_nr);
             blcc_add_xml_element (v_bestand, 'ProForma', 'False'); -- Hard op 'False'
             blcc_add_xml_row (v_bestand, '<OrderLines>');
               blcc_add_xml_row (v_bestand, '<OrderLine>');
                 blcc_add_xml_element (v_bestand, 'LineId', '1'); -- Hard op '1'
                 --blcc_add_xml_element (v_bestand, 'ArticleSupplierExternalId', '');
                 blcc_add_xml_element (v_bestand, 'ProductName', rec.omschrijving);
                 blcc_add_xml_element (v_bestand, 'Quantity', '1'); -- Hard op '1'
                 blcc_add_xml_element (v_bestand, 'Price', TO_CHAR (rec.price));
                 blcc_add_xml_element (v_bestand, 'CurrencyExternalId', 'EUR'); -- Hard op 'EUR'
                 blcc_add_xml_element (v_bestand, 'OrderUnitExternalId', 'Stuks'); -- Hard op 'Stuks'
                 blcc_add_xml_element (v_bestand, 'VatExternalId', 'IH'); -- Hard op 'IH'
                 blcc_add_xml_element (v_bestand, 'DeliveryDate', rec.deliverydate); -- ORDAFM of laatste dag van maand voor RES
                 blcc_add_xml_element (v_bestand, 'CostTypeExternalId', rec.costtype); -- Kostensoort uit soortmelding
                 blcc_add_xml_element (v_bestand, 'CostProjectExternalId', rec.costproject); -- Transformatie van MLD-Gebouwcode
               blcc_add_xml_row (v_bestand, '</OrderLine>');
             blcc_add_xml_row (v_bestand, '</OrderLines>');
           --blcc_add_xml_row (v_bestand, '</parms>');
         --blcc_add_xml_row (v_bestand, '</AddOrder>');
         blcc_add_xml_row (v_bestand, '</Order>');

         -- Markeren als 'Doorgezet naar ProQuro'!
         v_errormsg := 'Fout markeren doorzetten ProQuro';

         UPDATE mld_opdr
            SET mld_opdr_ordernr = TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss')
          WHERE mld_opdr_key = rec.mld_opdr_key;

         INSERT INTO mld_kenmerkopdr (mld_opdr_key,
                                      mld_kenmerk_key,
                                      mld_kenmerkopdr_waarde)
            VALUES (rec.mld_opdr_key,
                    581,                             -- Doorgezet naar Proquro
                    TO_CHAR (SYSDATE, 'dd-mm-yyyy'));
      END;
    END LOOP;
    blcc_add_xml_row (v_bestand, '</Orders>');
   END IF;

   fac.writelog (p_applname, 'S', 'ProQuro export/#regels: ' || TO_CHAR (v_order_count), TO_CHAR (v_amount_sum));
END;
/

-- BLCC#53426: Kosten voortaan splitsen naar BTW (VH/VL)!
/* Formatted on 5-1-2016 18:32:28 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW blcc_v_rap_cat_frozenplus
(
   fclt_x_verwerkt,
   fclt_f_debiteur,
   fclt_f_organisatie,
   locatie,
   ruimte,
   datum,
   tijd,
   resnr,
   activiteit,
   omschrijving,
   artikelnr,
   artikelomschrijving,
   aantal,
   stuksprijs,
   kosten,
   btw,
   fclt_f_besteller,
   costcenter,
   hide_f_kostenplaats
)
AS
   SELECT TO_CHAR (x.res_rsv_artikel_verwerkt, 'dd-mm-yyyy'),      -- Verwerkt
          COALESCE (x.prs_kenmerklink_waarde, '???') deb_nr,
          (SELECT prs_afdeling_omschrijving
             FROM prs_afdeling
            WHERE prs_afdeling_key = x.prs_afdeling_key)
             deb_oms,
          DECODE (x.alg_ruimte_key, NULL, 'Onbekend', rg.alg_gebouw_upper || '-' || rg.alg_verdieping_code || '-' || rg.alg_ruimte_nr)
             afleveradres,
          COALESCE (rr.res_ruimte_omschrijving, rg.alg_ruimte_omschrijving) ruimte,
          TO_CHAR (x.res_rsv_artikel_levering, 'dd-mm-yyyy') datum,
          TO_CHAR (x.res_rsv_artikel_levering, 'hh24:mi') tijd,
          x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr resnr,
          x.res_activiteit_omschrijving activiteit,
          x.res_rsv_ruimte_omschrijving omschrijving,
          x.res_artikel_nr,
          x.res_artikel_omschrijving,
          x.res_rsv_artikel_aantal,
          ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             stuksprijs,
          x.res_rsv_artikel_aantal * ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             regeltotaal,
          x.btw,
          x.prs_perslid_naam_full,
          (SELECT MAX (kw.res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          x.prs_kostenplaats_nr || '-' || x.prs_kostenplaats_omschrijving
     FROM (SELECT rra.res_rsv_artikel_verwerkt,
                  COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key)
                     res_ruimte_key,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key)
                     alg_ruimte_key,
                  rra.res_rsv_artikel_levering,
                  rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  act.res_activiteit_omschrijving,
                  rrr.res_rsv_ruimte_omschrijving,
                  rra.res_artikel_nr,
                  rra.res_artikel_omschrijving,
                  rra.res_rsv_artikel_aantal,
                  rra.res_rsv_artikel_prijs,
                  rra.res_artikel_prijs,
                  rra.btw,
                  COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) prs_afdeling_key,
                  kl.prs_kenmerklink_waarde,
                  pf.prs_perslid_naam_full,
                  k.prs_kostenplaats_nr,
                  k.prs_kostenplaats_omschrijving
             FROM res_rsv_ruimte rrr,
                  res_activiteit act,
                  --res_rsv_artikel rra,
                  --res_artikel ra,
                  (SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          rra.res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_prijs,
                          DECODE (
                             COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                             NULL, 'VH',
                             21, 'VH',
                             'VL') btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key = 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NOT NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key NOT IN (821, 822)
                   UNION ALL
                   SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          0.75 * ra.res_artikel_prijs res_artikel_prijs,
                          'VL' btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key = 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NOT NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (821, 822)
                   UNION ALL
                   SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          0.25 * ra.res_artikel_prijs res_artikel_prijs,
                          'VH' btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key = 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NOT NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (821, 822)) rra,
                  res_ruimte_opstelling rro,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NULL
                   GROUP BY res_ruimte_key) rar1,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NOT NULL
                   GROUP BY res_ruimte_key) rar2,
                  alg_v_allonroerendgoed aog,
                  prs_perslid p,
                  prs_v_afdeling_boom ab,
                  prs_kenmerklink kl,
                  prs_v_perslid_fullnames_all pf,
                  prs_kostenplaats k
            WHERE rrr.res_activiteit_key = act.res_activiteit_key
                  AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                  --AND rra.res_rsv_artikel_verwijder IS NULL
                  --AND rra.res_status_bo_key = 6
                  --AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                  --AND rra.res_artikel_key = ra.res_artikel_key
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                  AND aog.alg_locatie_key = 1                        -- CAMPUS
                  AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                  AND kl.prs_kenmerklink_niveau(+) = 'A'
                  AND kl.prs_kenmerk_key(+) = 1001           -- Debiteurnummer
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN res_ruimte rr
             ON x.res_ruimte_key = rr.res_ruimte_key
          LEFT JOIN alg_v_ruimte_gegevens_all rg
             ON x.alg_ruimte_key = rg.alg_ruimte_key
   UNION ALL
   SELECT TO_CHAR (x.res_rsv_artikel_levering, 'yyyy-mm') || '*',    -- Lopend
          COALESCE (x.prs_kenmerklink_waarde, '???') deb_nr,
          (SELECT prs_afdeling_omschrijving
             FROM prs_afdeling
            WHERE prs_afdeling_key = x.prs_afdeling_key)
             deb_oms,
          DECODE (x.alg_ruimte_key, NULL, 'Onbekend', rg.alg_gebouw_upper || '-' || rg.alg_verdieping_code || '-' || rg.alg_ruimte_nr)
             afleveradres,
          COALESCE (rr.res_ruimte_nr, rg.alg_ruimte_omschrijving) ruimte,
          TO_CHAR (x.res_rsv_artikel_levering, 'dd-mm-yyyy') datum,
          TO_CHAR (x.res_rsv_artikel_levering, 'hh24:mi') tijd,
          x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr resnr,
          x.res_activiteit_omschrijving activiteit,
          x.res_rsv_ruimte_omschrijving omschrijving,
          x.res_artikel_nr,
          x.res_artikel_omschrijving,
          x.res_rsv_artikel_aantal,
          --ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
          --   stuksprijs,
          --x.res_rsv_artikel_aantal * ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
          --   regeltotaal,
          ROUND (COALESCE (x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal, x.res_artikel_prijs), 5)
             stuksprijs,
          ROUND (COALESCE (x.res_rsv_artikel_prijs, x.res_rsv_artikel_aantal * x.res_artikel_prijs), 5)
             regeltotaal,
          x.btw,
          x.prs_perslid_naam_full,
          (SELECT MAX (kw.res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          x.prs_kostenplaats_nr || '-' || x.prs_kostenplaats_omschrijving
     FROM (SELECT rra.res_rsv_artikel_verwerkt,
                  COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key)
                     res_ruimte_key,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key)
                     alg_ruimte_key,
                  rra.res_rsv_artikel_levering,
                  rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  act.res_activiteit_omschrijving,
                  rrr.res_rsv_ruimte_omschrijving,
                  rra.res_artikel_nr,
                  rra.res_artikel_omschrijving,
                  rra.res_rsv_artikel_aantal,
                  rra.res_rsv_artikel_prijs,
                  rra.res_artikel_prijs,
                  rra.btw,
                  COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) prs_afdeling_key,
                  kl.prs_kenmerklink_waarde,
                  pf.prs_perslid_naam_full,
                  k.prs_kostenplaats_nr,
                  k.prs_kostenplaats_omschrijving
             FROM res_rsv_ruimte rrr,
                  res_activiteit act,
                  --res_rsv_artikel rra,
                  --res_artikel ra,
                  (SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          rra.res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_prijs,
                          DECODE (
                             COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                             NULL, 'VH',
                             21, 'VH',
                             'VL') btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key != 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20170901', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key NOT IN (821, 822)
                   UNION ALL
                   SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          0.75 * ra.res_artikel_prijs res_artikel_prijs,
                          'VL' btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key != 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20170901', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (821, 822)
                   UNION ALL
                   SELECT rra.res_rsv_ruimte_key,
                          rra.res_rsv_artikel_verwerkt,
                          rra.res_rsv_artikel_levering,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          rra.res_rsv_artikel_aantal,
                          0.25 * ra.res_artikel_prijs res_artikel_prijs,
                          'VH' btw,
                          ra.res_discipline_key
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_status_bo_key != 6
                          AND rra.res_rsv_artikel_levering > TO_DATE ('20170901', 'yyyymmdd')
                          AND rra.res_rsv_artikel_levering < SYSDATE
                          AND rra.res_rsv_artikel_verwerkt IS NULL
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (821, 822)) rra,
                  res_ruimte_opstelling rro,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NULL
                   GROUP BY res_ruimte_key) rar1,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NOT NULL
                   GROUP BY res_ruimte_key) rar2,
                  alg_v_allonroerendgoed aog,
                  prs_perslid p,
                  prs_v_afdeling_boom ab,
                  prs_kenmerklink kl,
                  prs_v_perslid_fullnames_all pf,
                  prs_kostenplaats k
            WHERE rrr.res_activiteit_key = act.res_activiteit_key
                  AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                  --AND rra.res_rsv_artikel_verwijder IS NULL
                  --AND rra.res_status_bo_key != 6
                  --AND rra.res_rsv_artikel_levering > TO_DATE ('20170901', 'yyyymmdd')
                  --AND rra.res_rsv_artikel_levering < SYSDATE
                  --AND rra.res_artikel_key = ra.res_artikel_key
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                  AND aog.alg_locatie_key = 1                        -- CAMPUS
                  AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                  AND kl.prs_kenmerklink_niveau(+) = 'A'
                  AND kl.prs_kenmerk_key(+) = 1001           -- Debiteurnummer
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN res_ruimte rr
             ON x.res_ruimte_key = rr.res_ruimte_key
          LEFT JOIN alg_v_ruimte_gegevens_all rg
             ON x.alg_ruimte_key = rg.alg_ruimte_key;

CREATE OR REPLACE VIEW blcc_v_rap_cat_frozen
(
   fclt_f_exportjob,
   fclt_f_bedrijf,
   afleveradres,
   fclt_f_afleverdatum,
   tijdstip,
   bestelnummer,
   fclt_f_artikelnummer,
   artikelomschrijving,
   interne_artikelprijs,
   aantal,
   kosten,
   btw_laag_oud,
   btw_hoog_oud,
   btw_laag,
   btw_hoog,
   fclt_f_besteller,
   costcenter,
   afdeling,
   fclt_3d_afdeling_key
)
AS
   SELECT TO_CHAR (x.res_rsv_artikel_verwerkt, 'yyyy-mm-dd') verwerkt,
          COALESCE (x.prs_bedrijf_naam,
                    DECODE (FLOOR (x.ins_discipline_volgnr / 1000),
                            1, 'Sodexo BV',              -- BCC t/m 27-08-2016
                            3, 'Verde',      -- SSC (in 2016 per abuis RESVER)
                            '???'))
             bedrijf,
          DECODE (
             x.alg_ruimte_key,
             NULL, 'Onbekend',
                rg.alg_locatie_code
             || '-'
             || rg.alg_gebouw_upper
             || '-'
             || rg.alg_verdieping_code
             || '-'
             || rg.alg_ruimte_nr
             || ' ('
             || rg.alg_ruimte_omschrijving
             || ')')
             afleveradres,
          TO_CHAR (x.res_rsv_artikel_levering, 'dd-mm-yyyy') datum,
          TO_CHAR (x.res_rsv_artikel_levering, 'hh24:mi') tijd,
          x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr bestelnr,
          x.res_artikel_nr,
          x.res_artikel_omschrijving,
          ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5) interneprijs,
          x.res_rsv_artikel_aantal,
          ROUND (x.res_rsv_artikel_prijs, 5) regeltotaal,
          x.btw_laag_oud,
          x.btw_hoog_oud,
          x.btw_laag,
          x.btw_hoog,
          x.prs_perslid_naam_full,
          (SELECT MAX (kw.res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          x.prs_kostenplaats_nr || '-' || x.prs_kostenplaats_omschrijving afd,
          COALESCE (x.prs_afdeling_key,
                    DECODE (FLOOR (x.ins_discipline_volgnr / 1000),
                            1, 225,               -- BCC t/m 27-08-2016/Sodexo
                            3, 621,    -- SSC/Verde (in 2016 per abuis RESVER)
                            -1))
             afdeling_key
     FROM    (SELECT rra.res_rsv_artikel_verwerkt,
                     COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) alg_ruimte_key,
                     rra.res_rsv_artikel_levering,
                     rrr.res_rsv_ruimte_key,
                     rrr.res_reservering_key,
                     rrr.res_rsv_ruimte_volgnr,
                     td.ins_discipline_volgnr, -- Ter bepaling leverancier/DEPRECATED!
                     b.prs_bedrijf_naam,
                     a.prs_afdeling_key,
                     rra.res_artikel_nr,
                     rra.res_artikel_omschrijving,
                     rra.res_rsv_artikel_prijs,
                     rra.res_rsv_artikel_aantal,
                     rra.btw_laag_oud,
                     rra.btw_hoog_oud,
                     rra.btw_laag,
                     rra.btw_hoog,
                     pf.prs_perslid_naam_full,
                     k.prs_kostenplaats_nr,
                     k.prs_kostenplaats_omschrijving
                FROM res_rsv_ruimte rrr,
                     (SELECT rra.res_rsv_ruimte_key,
                             rra.res_rsv_artikel_verwerkt,
                             rra.res_rsv_artikel_levering,
                             ra.res_artikel_nr,
                             ra.res_artikel_omschrijving,
                             rra.res_rsv_artikel_prijs,
                             rra.res_rsv_artikel_aantal,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                NULL, TO_NUMBER (NULL),
                                21, TO_NUMBER (NULL),
                                ROUND ((rra.res_rsv_artikel_prijs / 100) * 6, 5)) btw_laag_oud,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                NULL, TO_NUMBER (NULL),
                                6, TO_NUMBER (NULL),
                                ROUND ((rra.res_rsv_artikel_prijs / 100) * 21, 5)) btw_hoog_oud,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                NULL, TO_NUMBER (NULL),
                                21, TO_NUMBER (NULL),
                                ROUND ((rra.res_rsv_artikel_prijs / 100) * rra.res_rsv_artikel_btw, 5)) btw_laag,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                NULL, TO_NUMBER (NULL),
                                21, ROUND ((rra.res_rsv_artikel_prijs / 100) * rra.res_rsv_artikel_btw, 5),
                                TO_NUMBER (NULL)) btw_hoog,
                             ra.res_discipline_key
                        FROM res_rsv_artikel rra, res_artikel ra
                       WHERE rra.res_status_bo_key = 6
                             --AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                             AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
                             AND rra.res_artikel_key = ra.res_artikel_key
                             AND ra.res_discipline_key NOT IN (821, 822)
                      UNION ALL
                      SELECT rra.res_rsv_ruimte_key,
                             rra.res_rsv_artikel_verwerkt,
                             rra.res_rsv_artikel_levering,
                             ra.res_artikel_nr,
                             ra.res_artikel_omschrijving,
                             rra.res_rsv_artikel_prijs,
                             rra.res_rsv_artikel_aantal,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                21, TO_NUMBER (NULL),
                                ROUND ((0.75 * rra.res_rsv_artikel_prijs / 100) * 6, 5)) btw_laag_oud,
                             DECODE (
                                rra.res_rsv_artikel_btw,
                                6, TO_NUMBER (NULL),
                                ROUND ((0.25 * rra.res_rsv_artikel_prijs / 100) * 21, 5)) btw_hoog_oud,
                             CASE
                                WHEN rra.res_rsv_artikel_levering < TO_DATE ('20190101', 'yyyymmdd')
                                THEN
                                   ROUND ((0.75 * rra.res_rsv_artikel_prijs / 100) * 6, 5)
                                ELSE
                                   ROUND ((0.75 * rra.res_rsv_artikel_prijs / 100) * 9, 5)
                             END
                                btw_laag,
                             ROUND ((0.25 * rra.res_rsv_artikel_prijs / 100) * 21, 5)
                                btw_hoog,
                             ra.res_discipline_key
                        FROM res_rsv_artikel rra, res_artikel ra
                       WHERE rra.res_status_bo_key = 6
                             --AND rra.res_rsv_artikel_levering > TO_DATE ('20151001', 'yyyymmdd')
                             AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
                             AND rra.res_artikel_key = ra.res_artikel_key
                             AND ra.res_discipline_key IN (821, 822)) rra,
                     res_discipline td,
                     res_disc_params dp,
                     prs_bedrijf b,
                     prs_afdeling a,
                     res_ruimte_opstelling rro,
                     (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                          FROM res_alg_ruimte
                         WHERE res_alg_ruimte_verwijder IS NULL
                      GROUP BY res_ruimte_key) rar1,
                     (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                          FROM res_alg_ruimte
                         WHERE res_alg_ruimte_verwijder IS NOT NULL
                      GROUP BY res_ruimte_key) rar2,
                     alg_v_allonroerendgoed aog,
                     prs_v_perslid_fullnames_all pf,
                     prs_kostenplaats k
               WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                     AND rra.res_discipline_key = td.ins_discipline_key
                     AND td.ins_discipline_key = dp.res_ins_discipline_key
                     AND dp.prs_bedrijf_key = b.prs_bedrijf_key(+)
                     AND a.prs_afdeling_parentkey IS NULL
                     AND b.prs_leverancier_nr = a.prs_afdeling_naam(+)
                     AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                     AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                     AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                     AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                     AND aog.alg_locatie_key = 1                        -- CAMPUS
                     AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
                     AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN
             alg_v_ruimte_gegevens_all rg
          ON x.alg_ruimte_key = rg.alg_ruimte_key;

-- BLCC#52390: Per februari catering-doorbelasting splitsen naar BTW (VH/VL)!
-- BLCC#53262: Per ADDD-facturatie deprecated en tzt. verwijderen, toch!?
/* Formatted on 17-9-2015 10:40:20 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW blcc_v_rap_tf_frozen
(
   fclt_x_maand,
   fclt_x_debiteur,
   factuurtype,
   debiteur,
   nummer,
   factuurdatum,
   vervaldatum,
   kop,
   voet,
   valuta,
   aantal,
   artikel,
   subartikel,
   omschrijving,
   artikelprijs_excl,
   artikelprijs_incl,
   btw,
   grootboek,
   vrij_tekstveld_1,
   vrij_tekstveld_2,
   vrij_tekstveld_3
)
AS
   SELECT TO_CHAR (TRUNC (t.fac_tracking_datum, 'mm') - 1, 'yyyy-mm'),
          (SELECT prs_afdeling_omschrijving || ' [' || kl.prs_kenmerklink_waarde || ']'
             FROM prs_afdeling
            WHERE prs_afdeling_key = kl.prs_link_key)
             debiteur_oms,
          'FACTUUR',
          kl.prs_kenmerklink_waarde,
          NULL,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy'),
          NULL,
          NULL,
          NULL,
          'EUR',
          1,
          0,                                               -- Eenmalig artikel
          NULL,
             sd.ins_srtdiscipline_prefix
          || TO_CHAR (o.mld_melding_key)
          || '/'
          || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
          || ' ['
          || td.ins_discipline_omschrijving
          || '/'
          || sm.mld_stdmelding_omschrijving
          || ']'
          || DECODE (km.mld_kenmerkmelding_waarde, NULL, '', ' (=' || km.mld_kenmerkmelding_waarde || ')'),
          ROUND (o.mld_opdr_kosten * 1.065, 2),         -- Management fee 6,5%
          NULL,
          'VH',
          COALESCE (ksm.prs_kostensoort_refcode, ksv.prs_kostensoort_refcode),
          km.mld_kenmerkmelding_waarde,
          NULL,
          NULL
     FROM mld_opdr o,
          fac_tracking t,
          mld_melding m,
          (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde
             FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k
            WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 281) km,      -- Refnr. aanvrager
          prs_perslid p,
          prs_v_afdeling_boom ab,
          prs_kenmerklink kl,
          alg_v_allonrgoed_gegevens og,
          mld_stdmelding sm,
          ins_tab_discipline td,
          ins_srtdiscipline sd,
          prs_kostensoort ksm,
          prs_kostensoort ksv,
          prs_kostenplaats kp,
          prs_bedrijf b
    WHERE o.mld_opdr_ordernr IS NOT NULL                -- Zou zo moeten zijn!
          AND o.mld_statusopdr_key = 7                  -- Zou zo moeten zijn!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = 66                          -- ORDVER
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_key = km.mld_melding_key(+)
          AND m.prs_perslid_key_voor = p.prs_perslid_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
          AND kl.prs_kenmerklink_niveau(+) = 'A'
          AND kl.prs_kenmerk_key(+) = 1001                   -- Debiteurnummer
          AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
          AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
          AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
          --AND kp.prs_kostenplaats_upper LIKE '50900%'
          AND SUBSTR (kp.prs_kostenplaats_upper, 1, 5) = '50900'
          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
   UNION ALL       -- "Normale" catering gegroepeerd per debiteur/kostensoort!
     SELECT TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm'),
            debiteur_oms,
            'FACTUUR',
            debiteur,
            NULL,
            TO_CHAR (TRUNC (resver, 'mm') - 1, 'dd-mm-yyyy'),
            NULL,
            NULL,
            NULL,
            'EUR',
            1,
            0,                                             -- Eenmalig artikel
            NULL,
            'Cateringkosten ' || TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm') || '/' || btw,
            SUM (verw_prijs),
            NULL,
            --'VH',
            btw,
            prs_kostensoort_refcode,
            NULL,
            NULL,
            NULL
       FROM (SELECT rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                       resid,
                    kl.prs_kenmerklink_waarde debiteur,
                    (SELECT prs_afdeling_omschrijving || ' [' || kl.prs_kenmerklink_waarde || ']'
                       FROM prs_afdeling
                      WHERE prs_afdeling_key = kl.prs_link_key)
                       debiteur_oms,
                    ks.prs_kostensoort_refcode,
                    --LTRIM (rra.res_artikel_omschrijving) || ' (' || COALESCE (rra.res_artikel_eenheid, '') || ')'
                    --   res_voorziening,
                    rra.res_rsv_artikel_verwerkt resver,
                    rra.res_rsv_artikel_prijs verw_prijs,
                    --rra.res_rsv_artikel_aantal * rra.res_artikel_prijs prijs,
                    rra.btw
               FROM res_rsv_ruimte rrr,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    (SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            rra.res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --ra.res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            rra.res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --ra.res_artikel_prijs,
                            DECODE (
                               COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                               NULL, 'VH',
                               21, 'VH',
                               'VL') btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key NOT IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --0.75 * ra.res_artikel_prijs res_artikel_prijs,
                            'VL' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --0.25 * ra.res_artikel_prijs res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)) rra,
                    res_discipline rd,
                    prs_kostensoort ks
              WHERE rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                    AND rra.res_discipline_key = rd.ins_discipline_key
                    --AND ks.prs_kostensoort_doorbelasten(+) = 1
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND (rra.res_rsv_artikel_verwerkt < TO_DATE ('20171001', 'yyyymmdd')
                         OR (rrr.res_activiteit_key != 130 AND rra.res_rsv_artikel_verwerkt > TO_DATE ('20171001', 'yyyymmdd'))))
   GROUP BY TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm'),
            debiteur_oms,
            debiteur,
            TO_CHAR (TRUNC (resver, 'mm') - 1, 'dd-mm-yyyy'),
            'Cateringkosten ' || TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm') || '/' || btw,
            btw,
            prs_kostensoort_refcode
   UNION ALL -- Ruimte+Catering gegroepeerd per evenement/debiteur/kostensoort
     SELECT TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm'),
            debiteur_oms,
            'FACTUUR',
            debiteur,
            NULL,
            TO_CHAR (TRUNC (resver, 'mm') - 1, 'dd-mm-yyyy'),
            NULL,
            NULL,
            NULL,
            'EUR',
            1,
            0,                                             -- Eenmalig artikel
            NULL,
            'Evenementkosten ' || res_id || ' - ' || res_voorziening || '/' || btw,
            SUM (verw_prijs),
            NULL,
            --'VH',
            btw,
            prs_kostensoort_refcode,
            MIN (res_kenmerkreservering_waarde),
            NULL,
            NULL
       FROM (SELECT rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                       res_id,
                    kl.prs_kenmerklink_waarde debiteur,
                    (SELECT prs_afdeling_omschrijving || ' [' || kl.prs_kenmerklink_waarde || ']'
                       FROM prs_afdeling
                      WHERE prs_afdeling_key = kl.prs_link_key)
                       debiteur_oms,
                    ks.prs_kostensoort_refcode,
                    'Ruimte ' || rr.res_ruimte_nr res_voorziening,
                    fac.gettrackingdate ('RESVER', rrr.res_rsv_ruimte_key) resver,
                    COALESCE (rrr.res_rsv_ruimte_prijs, 0) - COALESCE (rrr.res_rsv_ruimte_korting, 0) verw_prijs,
                    'VH' btw,                                      -- Hard 21%
                    kw.res_kenmerkreservering_waarde
               FROM res_rsv_ruimte rrr,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    res_ruimte rr,
                    res_discipline rd,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                        AND k.res_srtkenmerk_key = 1) kw   -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key = 130                  -- Evenement
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key -- Alleen Ruimte-reserveringen!
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_status_bo_key = 6                        -- AV
                    AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                    AND rr.res_discipline_key = rd.ins_discipline_key
                    --AND ks.prs_kostensoort_doorbelasten(+) = 1
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)
             UNION ALL
             SELECT rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                       resid,
                    kl.prs_kenmerklink_waarde debiteur,
                    (SELECT prs_afdeling_omschrijving || ' [' || kl.prs_kenmerklink_waarde || ']'
                       FROM prs_afdeling
                      WHERE prs_afdeling_key = kl.prs_link_key)
                       debiteur_oms,
                    ks.prs_kostensoort_refcode,
                    rd.ins_discipline_omschrijving res_voorziening,
                    rra.res_rsv_artikel_verwerkt resver,
                    rra.res_rsv_artikel_prijs verw_prijs,
                    rra.btw,
                    kw.res_kenmerkreservering_waarde
               FROM res_rsv_ruimte rrr,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    (SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            rra.res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --ra.res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            rra.res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --ra.res_artikel_prijs,
                            DECODE (
                               COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                               NULL, 'VH',
                               21, 'VH',
                               'VL') btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key NOT IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --0.75 * ra.res_artikel_prijs res_artikel_prijs,
                            'VL' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_verwerkt,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid,
                            0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            --rra.res_rsv_artikel_aantal,
                            --0.25 * ra.res_artikel_prijs res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_status_bo_key = 6                    -- AV
                            AND rra.res_rsv_artikel_verwerkt >= TO_DATE ('20180301', 'yyyymmdd')
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)) rra,
                    res_discipline rd,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                        AND k.res_srtkenmerk_key = 1) kw   -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key = 130                  -- Evenement
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                    AND rra.res_discipline_key = rd.ins_discipline_key
                    --AND ks.prs_kostensoort_doorbelasten(+) = 1
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)
                    AND rra.res_rsv_artikel_verwerkt > TO_DATE ('20171001', 'yyyymmdd'))
   GROUP BY TO_CHAR (TRUNC (resver, 'mm') - 1, 'yyyy-mm'),
            debiteur_oms,
            debiteur,
            TO_CHAR (TRUNC (resver, 'mm') - 1, 'dd-mm-yyyy'),
            'Evenementkosten ' || res_id || ' - ' || res_voorziening || '/' || btw,
            btw,
            prs_kostensoort_refcode;

-- BLCC#53262: Facturatie additionele diensten!
CREATE OR REPLACE VIEW blcc_v_addd_actual
AS
   WITH lopendeperiode AS (SELECT TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'yyyymm') maand
                             FROM dual)             -- Alleen tbv. RES-kosten!
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            --TRIM (COALESCE (x.cnt_contract_nummer, '-')) po_nr,
            TRIM (COALESCE (x.res_kenmerkreservering_waarde, x.cnt_contract_nummer, '-')) po_nr,
            x.cnt_contract_nummer_intern || '.' || COALESCE (x.cnt_contract_versie, '0') contract_id,
            '1' || TO_CHAR (x.reslev, 'yyyymmdd') || SUBSTR ('0000' || TO_CHAR (res_rsv_ruimte_key), -7) || TO_CHAR (volgnr) || x.prs_kostensoort_refcode || x.res_voorziening sortering,
            'Crossing campus (banqueting)' regel,
            'V' || x.res_id regel_id,
            TO_CHAR (x.aantal) || 'x ' || x.res_voorziening regel_oms,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            'reservering' xmlnode,
            x.res_rsv_ruimte_key refkey,
            x.prs_bedrijf_key, x.prs_bedrijf_naam prs_debiteur_naam, TRIM (x.debiteur_nr) debiteur_nr,
            x.btw_nr,
            NULL contactpersoon, --x.contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_perslid_naam_full aanvrager,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            DECODE (x.btw_vl, '1', 'V', DECODE (x.btw, 'VL', 'L', 'H')) fin_btwtabelwaarde_code,
            DECODE (x.btw_vl, '1', 'Verlegd', DECODE (x.btw, 'VL', 'Laag', 'Hoog')) fin_btwtabelwaarde_oms,
            --DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', 6, 21)) fin_btwtabelwaarde_perc,
            DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 6, 9), 21)) fin_btwtabelwaarde_perc, -- Bah!
            DECODE (x.btw_vl, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            SUM (COALESCE (verw_prijs, prijs, 0)) mndnet,         -- Netto bedrag
            --SUM (ROUND (DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', 0.06, 0.21)) * COALESCE (verw_prijs, prijs, 0), 2)) mndbtw, -- BTW bedrag
            SUM (ROUND (DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 0.06, 0.09), 0.21)) * COALESCE (verw_prijs, prijs, 0), 2)) mndbtw, -- BTW bedrag
            x.prs_kostensoort_refcode grtboekrek,
            x.prs_kostensoort_altcode grtboekrek_oms,
            TO_NUMBER (NULL) mld_melding_key           -- Correctiemelding-key
       FROM (SELECT rrr.res_rsv_ruimte_key,
                    rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr res_id,
                    kl.prs_kenmerklink_waarde debiteur_nr,
                    ks.prs_kostensoort_refcode,
                    ks.prs_kostensoort_altcode,
                    0 volgnr,
                    rra.res_rsv_artikel_aantal aantal,
                    LTRIM (rra.res_artikel_omschrijving) || ' [' || TO_CHAR (res_rsv_artikel_levering, 'dd-mm-yyyy') || ']' res_voorziening,
                    rra.res_rsv_artikel_levering reslev,
                    rra.res_rsv_artikel_prijs verw_prijs,
                    rra.res_rsv_artikel_aantal * rra.res_artikel_prijs prijs,
                    rra.btw,
                    c.cnt_contract_nummer,
                    c.cnt_contract_nummer_intern,
                    c.cnt_contract_versie,
                    c.ins_discipline_key,
                    h.prs_bedrijf_key,
                    h.prs_bedrijf_naam,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_adres, h.prs_bedrijf_post_adres) adres,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_postcode, h.prs_bedrijf_post_postcode) postcode,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_plaats, h.prs_bedrijf_post_plaats) plaats,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_land, h.prs_bedrijf_post_land) land,
                    btwnr.prs_kenmerklink_waarde btw_nr,
                    btwvl.prs_kenmerklink_waarde btw_vl,
                    cp.contactpersoon,
                    pf.prs_perslid_naam_full,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    kw.res_kenmerkreservering_waarde,
                    lp.maand
               FROM lopendeperiode lp,
                    res_rsv_ruimte rrr,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    cnt_v_aanwezigcontract c,
                    prs_v_aanwezigbedrijf h,
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
                    (  SELECT prs_bedrijf_key, MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam))) contactpersoon
                         FROM prs_contactpersoon
                        WHERE prs_contactpersoon_verwijder IS NULL AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
                     GROUP BY prs_bedrijf_key) cp,
                    prs_v_perslid_fullnames_all pf,
                    (SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            rra.res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            ra.res_artikel_prijs,
                            DECODE (COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                                    NULL, 'VH',
                                    21, 'VH',
                                    'VL') btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key NOT IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            0.75 * ra.res_artikel_prijs res_artikel_prijs,
                            'VL' btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            0.25 * ra.res_artikel_prijs res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)) rra,
                    res_discipline rd,
                    --res_disc_params dp,
                    --prs_bedrijf b,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 1) kw -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key != 130      -- Anders dan Evenement
                    AND rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND ab.prs_bedrijf_key = 22     -- Huurder Chemelot Campus
                    AND ab.prs_afdeling_key1 = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    AND ab.prs_afdeling_key1 = c.prs_afdeling_key_eig
                    AND c.ins_discipline_key = 1841
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.cnt_prs_bedrijf_key = h.prs_bedrijf_key
                    AND h.prs_bedrijf_key = btwnr.prs_link_key(+)
                    AND h.prs_bedrijf_key = btwvl.prs_link_key(+)
                    AND h.prs_bedrijf_key = cp.prs_bedrijf_key(+)
                    AND p.prs_perslid_key = pf.prs_perslid_key
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
                    AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                    AND rra.res_discipline_key = rd.ins_discipline_key
                    --AND rd.ins_discipline_key = dp.res_ins_discipline_key
                    --AND dp.prs_bedrijf_key = b.prs_bedrijf_key
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)) x
   GROUP BY '*CONCEPT*',
            --TRIM (COALESCE (x.cnt_contract_nummer, '-')),
            TRIM (COALESCE (x.res_kenmerkreservering_waarde, x.cnt_contract_nummer, '-')),
            x.cnt_contract_nummer_intern || '.' || COALESCE (x.cnt_contract_versie, '0'),
            '1' || TO_CHAR (x.reslev, 'yyyymmdd') || SUBSTR ('0000' || TO_CHAR (res_rsv_ruimte_key), -7) || TO_CHAR (volgnr) || x.prs_kostensoort_refcode || x.res_voorziening,
            'Crossing campus (banqueting)',
            'V' || x.res_id,
            TO_CHAR (x.aantal) || 'x ' || x.res_voorziening,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy'), TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy'),
            'reservering',
            x.res_rsv_ruimte_key,
            x.prs_bedrijf_key, x.prs_bedrijf_naam, TRIM (x.debiteur_nr),
            x.btw_nr,
            NULL, --x.contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_perslid_naam_full,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            DECODE (x.btw_vl, '1', 'V', DECODE (x.btw, 'VL', 'L', 'H')),
            DECODE (x.btw_vl, '1', 'Verlegd', DECODE (x.btw, 'VL', 'Laag', 'Hoog')),
            DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 6, 9), 21)),
            DECODE (x.btw_vl, '1', 1, TO_NUMBER (NULL)) ,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy'),
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy'),
            x.prs_kostensoort_refcode,
            x.prs_kostensoort_altcode,
            TO_NUMBER (NULL)
   UNION ALL
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            TRIM (COALESCE (x.res_kenmerkreservering_waarde, '-')) po_nr,
            NULL contract_id,
            '2' || TO_CHAR (x.reslev, 'yyyymmdd') || SUBSTR ('0000' || TO_CHAR (res_rsv_ruimte_key), -7) || TO_CHAR (volgnr) || x.prs_kostensoort_refcode || x.res_voorziening sortering,
            'Event ' || x.res_id regel,
            'E' || x.res_id regel_id,
            DECODE (x.volgnr, 0, x.res_voorziening || ' [' || TO_CHAR (ROUND (x.aantal, 2)) || ' uur]', 2, TO_CHAR (x.aantal) || 'x ' || x.res_voorziening, x.res_voorziening) regel_oms,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            'reservering' xmlnode,
            x.res_rsv_ruimte_key refkey,
            x.prs_bedrijf_key, x.prs_bedrijf_naam prs_debiteur_naam, TRIM (x.debiteur_nr) debiteur_nr,
            x.btw_nr,
            NULL contactpersoon, --x.contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_perslid_naam_full aanvrager,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            DECODE (x.btw_vl, '1', 'V', DECODE (x.btw, 'VL', 'L', 'H')) fin_btwtabelwaarde_code,
            DECODE (x.btw_vl, '1', 'Verlegd', DECODE (x.btw, 'VL', 'Laag', 'Hoog')) fin_btwtabelwaarde_oms,
            --DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', 6, 21)) fin_btwtabelwaarde_perc,
            DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 6, 9), 21)) fin_btwtabelwaarde_perc, -- Bah!
            DECODE (x.btw_vl, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            SUM (COALESCE (verw_prijs, prijs, 0)) mndnet,      -- Netto bedrag
            --SUM (ROUND (DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', 0.06, 0.21)) * COALESCE (verw_prijs, prijs, 0), 2)) mndbtw, -- BTW bedrag
            SUM (ROUND (DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 0.06, 0.09), 0.21)) * COALESCE (verw_prijs, prijs, 0), 2)) mndbtw, -- BTW bedrag
            x.prs_kostensoort_refcode grtboekrek,
            x.prs_kostensoort_altcode grtboekrek_oms,
            TO_NUMBER (NULL) mld_melding_key           -- Correctiemelding-key
       FROM (SELECT rrr.res_rsv_ruimte_key,                    -- Ruimte-regel
                    rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr res_id,
                    kl.prs_kenmerklink_waarde debiteur_nr,
                    ks.prs_kostensoort_refcode,
                    ks.prs_kostensoort_altcode,
                    0 volgnr,
                    (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24 aantal, -- Duur in uren
                    rr.res_ruimte_nr || ' [' || TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') || ']' res_voorziening,
                    rrr.res_rsv_ruimte_van reslev,
                    rrr.res_rsv_ruimte_prijs verw_prijs,
                    res.getruimteprijs (rrr.res_rsv_ruimte_key) prijs,
                    'VH' btw,                                      -- Hard 21%
                    NULL, --c.cnt_contract_key,
                    NULL, --c.cnt_contract_nummer,
                    NULL, --c.ins_discipline_key,
                    h.prs_bedrijf_key,
                    h.prs_bedrijf_naam,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_adres, h.prs_bedrijf_post_adres) adres,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_postcode, h.prs_bedrijf_post_postcode) postcode,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_plaats, h.prs_bedrijf_post_plaats) plaats,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_land, h.prs_bedrijf_post_land) land,
                    btwnr.prs_kenmerklink_waarde btw_nr,
                    btwvl.prs_kenmerklink_waarde btw_vl,
                    cp.contactpersoon,
                    pf.prs_perslid_naam_full,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    kw.res_kenmerkreservering_waarde,
                    lp.maand
               FROM lopendeperiode lp,
                    res_v_aanwezigrsv_ruimte rrr,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    --cnt_v_aanwezigcontract c,
                    prs_v_aanwezigbedrijf h,
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
                    (  SELECT prs_bedrijf_key, MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam))) contactpersoon
                         FROM prs_contactpersoon
                        WHERE prs_contactpersoon_verwijder IS NULL AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
                     GROUP BY prs_bedrijf_key) cp,
                    prs_v_perslid_fullnames_all pf,
                    res_ruimte rr,
                    res_discipline rd,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                        AND k.res_srtkenmerk_key = 1) kw   -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key = 130                  -- Evenement
                    AND rrr.res_rsv_ruimte_van > TO_DATE ('20180501', 'yyyymmdd')
                    AND rrr.res_rsv_ruimte_van < TRUNC (SYSDATE, 'mm')
                    AND rrr.res_status_bo_key != 6                       -- AV
                    AND rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key -- Alleen Ruimte-reserveringen!
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND ab.prs_bedrijf_key = 22     -- Huurder Chemelot Campus
                    AND ab.prs_afdeling_key1 = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    --AND ab.prs_afdeling_key1 = c.prs_afdeling_key_eig
                    --AND c.ins_discipline_key = 1841
                    --AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    --AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    --AND c.cnt_contract_status = 0             -- NIET Gesloten
                    --AND c.cnt_prs_bedrijf_key = h.prs_bedrijf_key
                    AND kl.prs_kenmerklink_waarde = h.prs_overeenkomst_nr
                    AND h.prs_bedrijf_key = btwnr.prs_link_key(+)
                    AND h.prs_bedrijf_key = btwvl.prs_link_key(+)
                    AND h.prs_bedrijf_key = cp.prs_bedrijf_key(+)
                    AND p.prs_perslid_key = pf.prs_perslid_key
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
                    AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                    AND rr.res_discipline_key = rd.ins_discipline_key
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)
             UNION ALL                                        -- Korting-regel
             SELECT rrr.res_rsv_ruimte_key,
                    rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr res_id,
                    kl.prs_kenmerklink_waarde debiteur_nr,
                    ks.prs_kostensoort_refcode,
                    ks.prs_kostensoort_altcode,
                    1 volgnr,
                    1 aantal,
                    'Korting' || ' [' || TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') || ']' res_voorziening,
                    rrr.res_rsv_ruimte_van reslev,
                    -1 * COALESCE (rrr.res_rsv_ruimte_korting, 0) verw_prijs,
                    -1 * COALESCE (rrr.res_rsv_ruimte_korting, 0) prijs,
                    'VH' btw,                                      -- Hard 21%
                    NULL, --c.cnt_contract_key,
                    NULL, --c.cnt_contract_nummer,
                    NULL, --c.ins_discipline_key,
                    h.prs_bedrijf_key,
                    h.prs_bedrijf_naam,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_adres, h.prs_bedrijf_post_adres) adres,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_postcode, h.prs_bedrijf_post_postcode) postcode,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_plaats, h.prs_bedrijf_post_plaats) plaats,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_land, h.prs_bedrijf_post_land) land,
                    btwnr.prs_kenmerklink_waarde btw_nr,
                    btwvl.prs_kenmerklink_waarde btw_vl,
                    cp.contactpersoon,
                    pf.prs_perslid_naam_full,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    kw.res_kenmerkreservering_waarde,
                    lp.maand
               FROM lopendeperiode lp,
                    res_v_aanwezigrsv_ruimte rrr,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    --cnt_v_aanwezigcontract c,
                    prs_v_aanwezigbedrijf h,
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
                    (  SELECT prs_bedrijf_key, MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam))) contactpersoon
                         FROM prs_contactpersoon
                        WHERE prs_contactpersoon_verwijder IS NULL AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
                     GROUP BY prs_bedrijf_key) cp,
                    prs_v_perslid_fullnames_all pf,
                    res_ruimte rr,
                    res_discipline rd,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                        AND k.res_srtkenmerk_key = 1) kw   -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key = 130                  -- Evenement
                    AND rrr.res_rsv_ruimte_van > TO_DATE ('20180501', 'yyyymmdd')
                    AND rrr.res_rsv_ruimte_van < TRUNC (SYSDATE, 'mm')
                    AND rrr.res_status_bo_key != 6                       -- AV
                    AND rrr.res_rsv_ruimte_dirtlevel = 0
                    AND COALESCE (rrr.res_rsv_ruimte_korting, 0) != 0
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key -- Alleen Ruimte-reserveringen!
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND ab.prs_bedrijf_key = 22     -- Huurder Chemelot Campus
                    AND ab.prs_afdeling_key1 = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    --AND ab.prs_afdeling_key1 = c.prs_afdeling_key_eig
                    --AND c.ins_discipline_key = 1841
                    --AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    --AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    --AND c.cnt_contract_status = 0             -- NIET Gesloten
                    --AND c.cnt_prs_bedrijf_key = h.prs_bedrijf_key
                    AND kl.prs_kenmerklink_waarde = h.prs_overeenkomst_nr
                    AND h.prs_bedrijf_key = btwnr.prs_link_key(+)
                    AND h.prs_bedrijf_key = btwvl.prs_link_key(+)
                    AND h.prs_bedrijf_key = cp.prs_bedrijf_key(+)
                    AND p.prs_perslid_key = pf.prs_perslid_key
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
                    AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                    AND rr.res_discipline_key = rd.ins_discipline_key
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)
             UNION ALL                                      -- Catering-regels
             SELECT rrr.res_rsv_ruimte_key,
                    rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr res_id,
                    kl.prs_kenmerklink_waarde debiteur_nr,
                    ks.prs_kostensoort_refcode,
                    ks.prs_kostensoort_altcode,
                    2 volgnr,
                    rra.res_rsv_artikel_aantal aantal,
                    LTRIM (rra.res_artikel_omschrijving) || ' [' || TO_CHAR (res_rsv_artikel_levering, 'dd-mm-yyyy') || ']' res_voorziening,
                    rra.res_rsv_artikel_levering reslev,
                    rra.res_rsv_artikel_prijs verw_prijs,
                    rra.res_rsv_artikel_aantal * rra.res_artikel_prijs prijs,
                    rra.btw,
                    NULL, --c.cnt_contract_key,
                    NULL, --c.cnt_contract_nummer,
                    NULL, --c.ins_discipline_key,
                    h.prs_bedrijf_key,
                    h.prs_bedrijf_naam,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_adres, h.prs_bedrijf_post_adres) adres,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_postcode, h.prs_bedrijf_post_postcode) postcode,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_plaats, h.prs_bedrijf_post_plaats) plaats,
                    DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_land, h.prs_bedrijf_post_land) land,
                    btwnr.prs_kenmerklink_waarde btw_nr,
                    btwvl.prs_kenmerklink_waarde btw_vl,
                    cp.contactpersoon,
                    pf.prs_perslid_naam_full,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    kw.res_kenmerkreservering_waarde,
                    lp.maand
               FROM lopendeperiode lp,
                    res_rsv_ruimte rrr,
                    res_ruimte_opstelling rro,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar1,
                    (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                    alg_v_allonroerendgoed aog,
                    prs_perslid p,
                    prs_v_afdeling_boom ab,
                    prs_kenmerklink kl,
                    --cnt_v_aanwezigcontract c,
                    prs_v_aanwezigbedrijf h,
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
                    (SELECT prs_link_key, prs_kenmerklink_waarde
                       FROM prs_kenmerklink
                      WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
                    (  SELECT prs_bedrijf_key, MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam))) contactpersoon
                         FROM prs_contactpersoon
                        WHERE prs_contactpersoon_verwijder IS NULL AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
                     GROUP BY prs_bedrijf_key) cp,
                    prs_v_perslid_fullnames_all pf,
                    (SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            rra.res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            ra.res_artikel_prijs,
                            DECODE (COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw),
                                    NULL, 'VH',
                                    21, 'VH',
                                    'VL') btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key NOT IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            0.75 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            0.75 * ra.res_artikel_prijs res_artikel_prijs,
                            'VL' btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            0.25 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                            rra.res_rsv_artikel_aantal,
                            0.25 * ra.res_artikel_prijs res_artikel_prijs,
                            'VH' btw,
                            ra.res_discipline_key,
                            ra.res_artikel_omschrijving,
                            ra.res_artikel_eenheid
                       FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_levering > TO_DATE ('20180501', 'yyyymmdd')
                            AND rra.res_rsv_artikel_levering < TRUNC (SYSDATE, 'mm')
                            AND rra.res_rsv_artikel_verwerkt IS NULL
                            AND rra.res_rsv_artikel_dirtlevel = 0
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key IN (821, 822)) rra,
                    res_discipline rd,
                    --res_disc_params dp,
                    --prs_bedrijf b,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg,
                    prs_kostensoort ks,
                    (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde
                       FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                      WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 1) kw -- Refnr. aanvrager
              WHERE rrr.res_activiteit_key = 130                  -- Evenement
                    AND rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                    AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                    AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                    AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                    AND aog.alg_locatie_key = 1                      -- CAMPUS
                    AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                    AND p.prs_afdeling_key = ab.prs_afdeling_key
                    AND ab.prs_bedrijf_key = 22     -- Huurder Chemelot Campus
                    AND ab.prs_afdeling_key1 = kl.prs_link_key(+)
                    AND kl.prs_kenmerklink_niveau(+) = 'A'
                    AND kl.prs_kenmerk_key(+) = 1001         -- Debiteurnummer
                    --AND ab.prs_afdeling_key1 = c.prs_afdeling_key_eig
                    --AND c.ins_discipline_key = 1841
                    --AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    --AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    --AND c.cnt_contract_status = 0             -- NIET Gesloten
                    --AND c.cnt_prs_bedrijf_key = h.prs_bedrijf_key
                    AND kl.prs_kenmerklink_waarde = h.prs_overeenkomst_nr
                    AND h.prs_bedrijf_key = btwnr.prs_link_key(+)
                    AND h.prs_bedrijf_key = btwvl.prs_link_key(+)
                    AND h.prs_bedrijf_key = cp.prs_bedrijf_key(+)
                    AND p.prs_perslid_key = pf.prs_perslid_key
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
                    AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                    AND rra.res_discipline_key = rd.ins_discipline_key
                    --AND rd.ins_discipline_key = dp.res_ins_discipline_key
                    --AND dp.prs_bedrijf_key = b.prs_bedrijf_key
                    AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key(+)) x
   GROUP BY '*CONCEPT*',
            TRIM (COALESCE (x.res_kenmerkreservering_waarde, '-')),
            NULL,
            '2' || TO_CHAR (x.reslev, 'yyyymmdd') || SUBSTR ('0000' || TO_CHAR (res_rsv_ruimte_key), -7) || TO_CHAR (volgnr) || x.prs_kostensoort_refcode || x.res_voorziening,
            'Event ' || x.res_id,
            'E' || x.res_id,
            DECODE (x.volgnr, 0, x.res_voorziening || ' [' || TO_CHAR (ROUND (x.aantal, 2)) || ' uur]', 2, TO_CHAR (x.aantal) || 'x ' || x.res_voorziening, x.res_voorziening),
            TO_CHAR (SYSDATE, 'dd-mm-yyyy'), TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy'),
            'reservering',
            x.res_rsv_ruimte_key,
            x.prs_bedrijf_key, x.prs_bedrijf_naam, TRIM (x.debiteur_nr),
            x.btw_nr,
            NULL, --x.contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_perslid_naam_full,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            DECODE (x.btw_vl, '1', 'V', DECODE (x.btw, 'VL', 'L', 'H')),
            DECODE (x.btw_vl, '1', 'Verlegd', DECODE (x.btw, 'VL', 'Laag', 'Hoog')),
            DECODE (x.btw_vl, '1', 0, DECODE (x.btw, 'VL', DECODE (TO_CHAR (x.reslev, 'yyyy'), '2018', 6, 9), 21)),
            DECODE (x.btw_vl, '1', 1, TO_NUMBER (NULL)) ,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy'),
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy'),
            x.prs_kostensoort_refcode,
            x.prs_kostensoort_altcode,
            TO_NUMBER (NULL)
   UNION ALL
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            TRIM (COALESCE (km.mld_kenmerkmelding_waarde, c.cnt_contract_nummer, '-')) po_nr,
            c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contract_id,
            '3' || SUBSTR ('0000' || TO_CHAR (o.mld_melding_key), -7) || '/' || SUBSTR ('00' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr), -3) sortering,
            'Klantwens ' || sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) regel,
            sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) regel_id,
            --td.ins_discipline_omschrijving || '/' || sm.mld_stdmelding_omschrijving regel_oms,
            DECODE (m.mld_melding_onderwerp, NULL, '', 'Subject: ' || TRIM (m.mld_melding_onderwerp) || CHR (13) || CHR (10)) || 'Description: ' || COALESCE (SUBSTR (TRIM (m.mld_melding_omschrijving), 1, 2000), '-')
               regel_oms,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            'opdracht' xmlnode,
            o.mld_opdr_key refkey,
            h.prs_bedrijf_key, h.prs_bedrijf_naam prs_debiteur_naam, TRIM (kl.prs_kenmerklink_waarde) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            NULL contactpersoon, --cp.contactpersoon,
            DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_adres, h.prs_bedrijf_post_adres) adres,
            DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_postcode, h.prs_bedrijf_post_postcode) postcode,
            DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_plaats, h.prs_bedrijf_post_plaats) plaats,
            DECODE (h.prs_bedrijf_post_adres, NULL, h.prs_bedrijf_bezoek_land, h.prs_bedrijf_post_land) land,
            pf.prs_perslid_naam_full aanvrager,
            kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', 'H') fin_btwtabelwaarde_code,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', 'Hoog') fin_btwtabelwaarde_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, 21) fin_btwtabelwaarde_perc,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            --lp.maand,
            --TO_CHAR (TO_DATE (lp.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            --TO_CHAR (LAST_DAY (TO_DATE (lp.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (SYSDATE, 'yyyymm') maand,
            TO_CHAR (TRUNC (SYSDATE, 'mm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (SYSDATE), 'dd-mm-yyyy') mndeinde,
            ROUND (COALESCE (o.mld_opdr_kosten, 0), 2) mndnet, -- Netto bedrag
            ROUND (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, 0.21) * COALESCE (o.mld_opdr_kosten, 0), 2) mndbtw, -- BTW bedrag
            COALESCE (ksm.prs_kostensoort_refcode, ksv.prs_kostensoort_refcode) grtboekrek,
            COALESCE (ksm.prs_kostensoort_altcode, ksv.prs_kostensoort_altcode) grtboekrek_oms,
            TO_NUMBER (NULL) mld_melding_key           -- Correctiemelding-key
       FROM --lopendeperiode lp,
            mld_opdr o,
            mld_melding m,
            (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde
               FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k
              WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 281) km, -- Refnr. aanvrager
            prs_perslid p,
            prs_v_afdeling_boom ab,
            prs_kenmerklink kl,
            cnt_v_aanwezigcontract c,
            prs_v_aanwezigbedrijf h,
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
            (  SELECT prs_bedrijf_key, MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam))) contactpersoon
                 FROM prs_contactpersoon
                WHERE prs_contactpersoon_verwijder IS NULL AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
             GROUP BY prs_bedrijf_key) cp,
            prs_v_perslid_fullnames_all pf,
            alg_v_allonrgoed_gegevens og,
            mld_stdmelding sm,
            ins_tab_discipline td,
            ins_srtdiscipline sd,
            prs_kostenplaats kp,
            prs_kostenplaatsgrp kpg,
            prs_kostensoort ksm,
            prs_kostensoort ksv
      WHERE o.mld_typeopdr_key = 101                                     -- WO
            --AND o.mld_statusopdr_key = 9                           -- Afgerond
            AND o.mld_statusopdr_key = 7                           -- Verwerkt
            --AND o.mld_opdr_ordernr <= TO_CHAR (SYSDATE, 'yyyy-mm') || '-01' -- Oude werkwijze (maandelijks)
            AND TO_CHAR (fac.gettrackingdate ('ORDVER', o.mld_opdr_key), 'yyyy-mm-dd') >= '2019-06-01' -- xTODO:2019-06-01/Per 2019-06 nieuwe werkwijze!
            --AND TO_CHAR (fac.gettrackingdate ('ORDVER', o.mld_opdr_key), 'yyyy-mm-dd') <= TO_CHAR (SYSDATE, 'yyyy-mm-dd') -- Doorgezet ProQuro/dagelijks
            AND TO_CHAR (fac.gettrackingdate ('ORDVER', o.mld_opdr_key), 'yyyy-mm-dd') <= TO_CHAR (TRUNC (SYSDATE, 'iw') + 3, 'yyyy-mm-dd') -- xTODO:3/Doorgezet ProQuro/wekelijks van woensdag op donderdag
            AND NOT EXISTS                           -- Nog niet gefactureerd!
                  (SELECT 1
                     FROM fin_verkoopfactuur
                    WHERE fin_verkoopfactuur_xmlnode = 'opdracht' AND fin_verkoopfactuur_refkey = o.mld_opdr_key)
            AND COALESCE (o.mld_opdr_kosten, 0) != 0
            AND o.mld_melding_key = m.mld_melding_key
            AND m.mld_melding_key = km.mld_melding_key(+)
            AND m.prs_perslid_key_voor = p.prs_perslid_key
            AND p.prs_afdeling_key = ab.prs_afdeling_key
            AND ab.prs_bedrijf_key = 22             -- Huurder Chemelot Campus
            AND ab.prs_afdeling_key1 = kl.prs_link_key(+)
            AND kl.prs_kenmerklink_niveau(+) = 'A'
            AND kl.prs_kenmerk_key(+) = 1001                 -- Debiteurnummer
            AND ab.prs_afdeling_key1 = c.prs_afdeling_key_eig
            AND c.ins_discipline_key = 1842
            --AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
            --AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
            AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TRUNC (SYSDATE, 'mm')) -- Van-datum < einde te factureren maand
            AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
            AND c.cnt_contract_status = 0                     -- NIET Gesloten
            AND c.cnt_prs_bedrijf_key = h.prs_bedrijf_key
            AND h.prs_bedrijf_key = btwnr.prs_link_key(+)
            AND h.prs_bedrijf_key = btwvl.prs_link_key(+)
            AND h.prs_bedrijf_key = cp.prs_bedrijf_key(+)
            AND p.prs_perslid_key = pf.prs_perslid_key
            AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = td.ins_discipline_key
            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND SUBSTR (kp.prs_kostenplaats_upper, 1, 5) = '50900'
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
            AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
            AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+);


CREATE OR REPLACE VIEW blcc_v_addd_frozen
AS
     SELECT vf.fin_verkoopfactuur_id,
            vf.fin_verkoopfactuur_c1 po_nr,
            vf.fin_verkoopfactuur_c2 contract_id,
            vf.fin_verkoopfactuur_c3 sortering,
            SUBSTR (vf.fin_verkoopfactuur_omschr, 1, INSTR (vf.fin_verkoopfactuur_omschr, '=') - 1) regel,
            SUBSTR (vf.fin_verkoopfactuur_omschr, INSTR (vf.fin_verkoopfactuur_omschr, '=') + 1) regel_id,
            vf.fin_verkoopfactuur_c8 regel_oms,
            TO_CHAR (vf.fin_verkoopfactuur_datum, 'dd-mm-yyyy') factuurdatum, TO_CHAR (vf.fin_verkoopfactuur_d1, 'dd-mm-yyyy') vervaldatum,
            vf.fin_verkoopfactuur_xmlnode xmlnode,
            vf.fin_verkoopfactuur_refkey refkey,
            vf.prs_bedrijf_key, vf.prs_debiteur_naam,
            SUBSTR (vf.fin_verkoopfactuur_c7, 1, INSTR (vf.fin_verkoopfactuur_c7, '=') - 1) debiteur_nr,
            SUBSTR (vf.fin_verkoopfactuur_c7, INSTR (vf.fin_verkoopfactuur_c7, '=') + 1) btw_nr,
            --vf.fin_verkoopfactuur_c4 contactpersoon,
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land, -- Niet historisch bewaard!
            vf.fin_verkoopfactuur_c5 aanvrager,
            vf.prs_kostenplaats_key, vf.prs_kostenplaats_nr, vf.prs_kostenplaats_omschrijving, vf.prs_kostenplaatsgrp_oms,
            vf.fin_btwtabelwaarde_code,
            vf.fin_btwtabelwaarde_oms,
            vf.fin_btwtabelwaarde_perc,
            vf.fin_btwtabelwaarde_verlegd,
            vf.fin_verkoopfactuur_maand maand,
            TO_CHAR (vf.fin_verkoopfactuur_d2, 'dd-mm-yyyy') mndbegin,
            TO_CHAR (vf.fin_verkoopfactuur_d3, 'dd-mm-yyyy') mndeinde,
            vf.fin_verkoopfactuur_bedrag mndnet,               -- Netto bedrag
            vf.fin_verkoopfactuur_btw mndbtw,                    -- BTW bedrag
            vf.prs_kostensoort_refcode grtboekrek,
            vf.prs_kostensoort_oms grtboekrek_oms,
            vf.fin_verkoopfactuur_n1 mld_melding_key
       FROM fin_verkoopfactuur vf, prs_bedrijf b
      WHERE (SUBSTR (vf.fin_verkoopfactuur_id, 5, 1) = '2' OR SUBSTR (vf.fin_verkoopfactuur_id, 1, 1) = '3') -- Of andere conditie?
            AND vf.prs_bedrijf_key = b.prs_bedrijf_key
   ORDER BY vf.prs_bedrijf_key, 1, 2, 3, 4;

CREATE OR REPLACE VIEW blcc_v_rap_export_addd
(
   hide_f_sortering,
   fclt_x_maand,
   code,
   valuta,
   factuurdatum,
   periode,
   factuurnummer,
   vervaldatum,
   nummer,
   grtboekrek,
   rel_kpl,
   prj_activa,
   bedrag,
   debitcredit,
   omschrijving,
   btwcode
)
AS
   SELECT ROWNUM,
          REPLACE (periode, '/', '-') periode,
          code,
          valuta,
          factuurdatum,
          periode,
          factuurnummer,
          vervaldatum,
          nummer,
          grtboekrek,
          rel_kpl,
          prj_activa,
          bedrag,
          debitcredit,
          omschrijving,
          btwcode
     FROM (SELECT fin_verkoopfactuur_id || '0000' || debiteur_nr sortering,
                  'VRK' code,                                 -- Hard op 'VRK'
                  'EUR' valuta,                               -- Hard op 'EUR'
                  factuurdatum,
                  --SUBSTR (maand, 1, 4) || '/' || SUBSTR (maand, -2) periode,
                  SUBSTR (factuurdatum, 7, 4) || '/' || SUBSTR (factuurdatum, 4, 2) periode,
                  fin_verkoopfactuur_id factuurnummer,       -- Boekstuknummer
                  vervaldatum,
                  '1' nummer,                                   -- Hard op '1'
                  '1300' grtboekrek,                         -- Hard op '1300'
                  debiteur_nr rel_kpl,
                  NULL prj_activa,                             -- Hard op NULL
                  netsum + btwsum + (0.065 * netsum) + (0.21 * 0.065 * netsum) bedrag, -- Totaalbedrag incl. BTW gegroepeerd over andere kolommen!
                  'debit' debitcredit,
                  'Total' omschrijving,                     -- Hard op 'Total'
                  NULL btwcode                                 -- Hard op NULL
             FROM (  SELECT fin_verkoopfactuur_id, debiteur_nr, factuurdatum, maand, vervaldatum,
                            SUM (mndnet) netsum, SUM (mndbtw) btwsum
                       FROM blcc_v_addd_frozen
                      --WHERE maand >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy') || '01'
                   GROUP BY fin_verkoopfactuur_id, debiteur_nr, factuurdatum, maand, vervaldatum)
           UNION ALL
             SELECT fin_verkoopfactuur_id || debiteur_nr || DECODE (grtboekrek, '812x', DECODE (fin_btwtabelwaarde_code, 'H', '8120', '8121'), grtboekrek) sortering,
                    'VRK' code,                               -- Hard op 'VRK'
                    'EUR' valuta,                             -- Hard op 'EUR'
                    factuurdatum,
                    --SUBSTR (maand, 1, 4) || '/' || SUBSTR (maand, -2) periode,
                    SUBSTR (factuurdatum, 7, 4) || '/' || SUBSTR (factuurdatum, 4, 2) periode,
                    fin_verkoopfactuur_id factuurnummer,     -- Boekstuknummer
                    vervaldatum,
                    '1' nummer,                                 -- Hard op '1'
                    DECODE (grtboekrek, '812x', DECODE (fin_btwtabelwaarde_code, 'H', '8120', '8121'), grtboekrek) grtboekrek,
                    --prs_kostenplaats_nr rel_kpl,
                    --DECODE (SUBSTR (prs_kostenplaats_nr, 1, 5), '50900', '50900', prs_kostenplaats_nr) rel_kpl,
                    '50900',
                    NULL prj_activa,                           -- Hard op NULL
                    SUM (mndnet) bedrag, -- Totaalbedrag excl. BTW gegroepeerd over andere kolommen!
                    'credit' debitcredit, -- TODO: Altijd 'credit' (ook negatieve bedragen)???
                    DECODE (grtboekrek, '812x', grtboekrek_oms || DECODE (fin_btwtabelwaarde_code, 'H', ' high', ' low'), '8130', regel, grtboekrek_oms) omschrijving,
                    DECODE (fin_btwtabelwaarde_code, 'H', 'VH', 'L', 'VL', 'V', 'VBINEU_VERL', 'VN') btwcode
               FROM blcc_v_addd_frozen
              --WHERE maand >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy') || '01'
           GROUP BY fin_verkoopfactuur_id || debiteur_nr || DECODE (grtboekrek, '812x', DECODE (fin_btwtabelwaarde_code, 'H', '8120', '8121'), grtboekrek),
                    'VRK',
                    'EUR',
                    factuurdatum,
                    SUBSTR (factuurdatum, 7, 4) || '/' || SUBSTR (factuurdatum, 4, 2),
                    fin_verkoopfactuur_id,
                    vervaldatum,
                    '1',
                    DECODE (grtboekrek, '812x', DECODE (fin_btwtabelwaarde_code, 'H', '8120', '8121'), grtboekrek),
                    --prs_kostenplaats_nr rel_kpl,
                    --DECODE (SUBSTR (prs_kostenplaats_nr, 1, 5), '50900', '50900', prs_kostenplaats_nr),
                    '50900',
                    NULL,
                    'credit',
                    DECODE (grtboekrek, '812x', grtboekrek_oms || DECODE (fin_btwtabelwaarde_code, 'H', ' high', ' low'), '8130', regel, grtboekrek_oms),
                    DECODE (fin_btwtabelwaarde_code, 'H', 'VH', 'L', 'VL', 'V', 'VBINEU_VERL', 'VN')
           UNION ALL
             SELECT fin_verkoopfactuur_id || debiteur_nr || '8136' sortering,
                    'VRK' code,                               -- Hard op 'VRK'
                    'EUR' valuta,                             -- Hard op 'EUR'
                    factuurdatum,
                    --SUBSTR (maand, 1, 4) || '/' || SUBSTR (maand, -2) periode,
                    SUBSTR (factuurdatum, 7, 4) || '/' || SUBSTR (factuurdatum, 4, 2) periode,
                    fin_verkoopfactuur_id factuurnummer,     -- Boekstuknummer
                    vervaldatum,
                    '1' nummer,                                 -- Hard op '1'
                    '8136',                                    -- Handling fee
                    --prs_kostenplaats_nr rel_kpl,
                    --DECODE (SUBSTR (prs_kostenplaats_nr, 1, 5), '50900', '50900', prs_kostenplaats_nr) rel_kpl,
                    '50900',
                    NULL prj_activa,                           -- Hard op NULL
                    SUM (0.065 * mndnet) bedrag, -- Totaalbedrag excl. BTW gegroepeerd over andere kolommen!
                    'credit' debitcredit, -- TODO: Altijd 'credit' (ook negatieve bedragen)???
                    'Handling fee' omschrijving,
                    'VH' btwcode
               FROM blcc_v_addd_frozen
              --WHERE maand >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy') || '01'
           GROUP BY fin_verkoopfactuur_id || debiteur_nr || '8136',
                    'VRK',
                    'EUR',
                    factuurdatum,
                    SUBSTR (factuurdatum, 7, 4) || '/' || SUBSTR (factuurdatum, 4, 2),
                    fin_verkoopfactuur_id,
                    vervaldatum,
                    '1',
                    '8136',
                    --prs_kostenplaats_nr,
                    --DECODE (SUBSTR (prs_kostenplaats_nr, 1, 5), '50900', '50900', prs_kostenplaats_nr),
                    '50900',
                    NULL,
                    'credit',
                    'Handling fee',
                    'VH'
           ORDER BY 1);

CREATE OR REPLACE VIEW blcc_v_export_addd
(
   result,
   result_order
)
AS -- View bevat alleen inhoud op dag na woensdag (Klantwensen) of op dag na 10e werkdag van maand (RES)!
   SELECT    'code'
          || ';valuta'
          || ';factuurdatum'
          || ';periode'
          || ';factuurnummer'
          || ';vervaldatum'
          || ';nummer'
          || ';grtboekrek'
          || ';rel/kpl'
          || ';prj/activa'
          || ';bedrag'
          || ';debitcredit'
          || ';omschrijving'
          || ';btwcode',
          0
     FROM DUAL
    WHERE (TO_CHAR (SYSDATE, 'd') = '5'          -- xTODO:5/Nacht na woensdag!
           OR (FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 10 -- Nacht na 10e werkdag!
               AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
               AND NOT EXISTS
                     (SELECT 1
                        FROM mld_vrije_dagen
                       WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1))))
   UNION ALL
   SELECT    code
          || ';'
          || valuta
          || ';'
          || factuurdatum
          || ';'
          || periode
          || ';'
          || factuurnummer
          || ';'
          || vervaldatum
          || ';'
          || nummer
          || ';'
          || grtboekrek
          || ';'
          || rel_kpl
          || ';'
          || prj_activa
          || ';'
          || bedrag
          || ';'
          || debitcredit
          || ';'
          || omschrijving
          || ';'
          || btwcode,
          ROWNUM
     FROM blcc_v_rap_export_addd
    WHERE --fclt_x_maand = TO_CHAR (SYSDATE, 'yyyy-mm')
          (TO_CHAR (SYSDATE, 'd') = '5'          -- xTODO:5/Nacht na woensdag!
           OR (FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 10 -- Nacht na 10e werkdag!
               AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
               AND NOT EXISTS
                     (SELECT 1
                        FROM mld_vrije_dagen
                       WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1))))
          AND factuurdatum = TO_CHAR (SYSDATE, 'dd-mm-yyyy')
   ORDER BY 2;

CREATE OR REPLACE PROCEDURE blcc_select_addd (p_applname   IN VARCHAR2,
                                              p_applrun    IN VARCHAR2)
AS
   -- BLCC#55646: Per 2019-06 factureer/bevries maandelijks alle RES-kosten en
   --             wekelijks de Klantwens-kosten
   --             NB. Voorheen gebeurde alles maandelijks en voor ADDD-export
   --                 zijn correctie-meldingen nooit geintroduceerd.
   CURSOR c1a                                                    -- RES-kosten
   IS
        SELECT '[' || v.regel_id || '|' || v.prs_debiteur_naam || '] ' aanduiding,
               v.*, m.mld_melding_status
          FROM (SELECT * FROM blcc_v_addd_actual WHERE xmlnode = 'reservering') v
               LEFT JOIN mld_melding m                -- Nooit geintroduceerd!
                  ON v.mld_melding_key = m.mld_melding_key
      ORDER BY v.prs_bedrijf_key, v.po_nr, v.sortering;

   CURSOR c1b                                              -- Klantwens-kosten
   IS
        SELECT '[' || v.regel_id || '|' || v.prs_debiteur_naam || '] ' aanduiding,
               v.*, m.mld_melding_status
          FROM (SELECT * FROM blcc_v_addd_actual WHERE xmlnode = 'opdracht') v
               LEFT JOIN mld_melding m                -- Nooit geintroduceerd!
                  ON v.mld_melding_key = m.mld_melding_key
      ORDER BY v.prs_bedrijf_key, v.po_nr, v.sortering;

   -- Verstuur verkoopfactuur naar huurder.
   CURSOR c2
   IS
        SELECT DISTINCT '[' || vf.fin_verkoopfactuur_id || '|' || vf.fin_verkoopfactuur_maand || '|' || vf.prs_debiteur_naam || '] ' aanduiding,
               vf.fin_verkoopfactuur_xmlnode,
               vf.fin_verkoopfactuur_id, vf.fin_verkoopfactuur_maand, vf.prs_debiteur_naam,
               vfk.fin_verkoopfactuurkop_key, vfk.fin_verkoopfactuurkop_id,
               b.prs_bedrijf_email
          FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk, prs_bedrijf b
         WHERE SUBSTR (vf.fin_verkoopfactuur_id, 1, 1) = '3' -- vf.fin_verkoopfactuur_xmlnode != 'contract'
               --AND vf.fin_verkoopfactuur_maand = TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'yyyymm')
               AND vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key
               AND vf.prs_bedrijf_key = b.prs_bedrijf_key
               AND vf.fin_verkoopfactuur_aanmaak > TRUNC (SYSDATE) -- Zojuist/vannacht aangemaakt en dus nog niet gefactureerd(/genotificeerd)!
      ORDER BY vf.fin_verkoopfactuur_id;

   -- Verwerk reserveringen (in juiste volgorde)!
   CURSOR c3
   IS
        SELECT DISTINCT '[' || TO_CHAR (rra.res_rsv_ruimte_key) || '|' || TO_CHAR (rra.res_rsv_artikel_key) || '] ' aanduiding,
               rra.res_rsv_ruimte_key,
               rra.res_rsv_artikel_key,
               rra.res_status_bo_key,
               rra.res_artikel_key
          FROM fin_verkoopfactuur vf, res_v_aanwezigrsv_artikel rra
         WHERE SUBSTR (vf.fin_verkoopfactuur_id, 1, 1) = '3' -- vf.fin_verkoopfactuur_xmlnode != 'contract'
               AND vf.fin_verkoopfactuur_maand = TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'yyyymm')
               AND vf.fin_verkoopfactuur_xmlnode = 'reservering'
               AND vf.fin_verkoopfactuur_refkey = rra.res_rsv_ruimte_key
        UNION ALL
        SELECT DISTINCT '[' || TO_CHAR (rrr.res_rsv_ruimte_key) || '] ' aanduiding,
               rrr.res_rsv_ruimte_key,
               NULL res_rsv_artikel_key,
               rrr.res_status_bo_key,
               NULL res_artikel_key
          FROM fin_verkoopfactuur vf, res_v_aanwezigrsv_ruimte rrr
         WHERE SUBSTR (vf.fin_verkoopfactuur_id, 1, 1) = '3' -- vf.fin_verkoopfactuur_xmlnode != 'contract'
               AND vf.fin_verkoopfactuur_maand = TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'yyyymm')
               AND vf.fin_verkoopfactuur_xmlnode = 'reservering'
               AND vf.fin_verkoopfactuur_refkey = rrr.res_rsv_ruimte_key
      ORDER BY 3, 2;

   v_errormsg                VARCHAR2 (1000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_holiday                 NUMBER;
   v_fact_count              NUMBER;
   v_amount_sum              NUMBER (10, 2);
   v_old_bedrijf_key         NUMBER (10);
   v_old_po_nr               VARCHAR2 (50);
   v_factuur_id              VARCHAR2 (30);
   v_factkop_id              VARCHAR2 (30);
   v_verkoopfactuurkop_key   NUMBER (10);
   v_count                   NUMBER;
   v_prijs                   NUMBER (9, 2);
BEGIN
   -- Eerst opruiming
   DELETE FROM imp_log
         WHERE imp_log_applicatie = p_applname;

   SELECT COUNT ( * )
     INTO v_holiday
     FROM mld_vrije_dagen
    WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1);

   -- LET OP: ADDD-export draait dagelijks na middernacht (begin van dag).
   -- De RES-verkoop wordt maandelijks alleen in nacht na 10e werkdag van de
   -- maand gefactureerd icm. het doorzetten naar Twinfield.
   -- IF 10e werkdag van maand (én geen weekend én geen vrije dag)!
   -- count_work_days (d1,d2) bepaalt het #werkdagen van d1 tot d2 (als d1=d2,
   -- dan return 0); daarom bepalen tov. laatste dag van vorige maand!
   IF (FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 10 -- Nacht na 10e werkdag!
       AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
       AND v_holiday = 0)
   THEN
      v_fact_count := 0;
      v_amount_sum := 0;
      v_old_bedrijf_key := -1;
      v_old_po_nr := '';

      -- Factureer/bevries kosten van additionele diensten en verwerk=AV alle
      -- eventuele correctiemeldingen.
      FOR rec IN c1a
      LOOP
         BEGIN
            IF rec.mndnet != 0 AND (rec.prs_bedrijf_key != v_old_bedrijf_key OR rec.po_nr != v_old_po_nr)
            THEN
               -- BLCC#56148: Per feb. 2019 nieuwe sequence/BCC-verkoopboek en
               --             altijd doorlopende boekstuknummers beginnend met
               --             een '3'!
               --SELECT fac_s_user02.NEXTVAL - v_year_offset INTO v_count FROM DUAL;
               SELECT fac_s_user03.NEXTVAL INTO v_count FROM DUAL;

               v_factuur_id := '3' || SUBSTR ('00000000' || TO_CHAR (v_count), -8);
               v_factkop_id := v_factuur_id || '_' || SUBSTR (rec.maand, 1, 4) || '-' || SUBSTR (rec.maand, -2) || '_' || rec.debiteur_nr;

               INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
                   VALUES (v_factkop_id)
                RETURNING fin_verkoopfactuurkop_key
                     INTO v_verkoopfactuurkop_key;
               COMMIT;

               v_old_bedrijf_key := rec.prs_bedrijf_key;
               v_old_po_nr := rec.po_nr;
            END IF;

            IF rec.mndnet != 0
            THEN
               v_errormsg := 'Fout toevoegen verkoopfactuur';

               INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
                                               fin_verkoopfactuur_id,
                                               fin_verkoopfactuur_datum,
                                               fin_verkoopfactuur_omschr,
                                               fin_verkoopfactuur_xmlnode,
                                               fin_verkoopfactuur_refkey,
                                               prs_kostenplaats_key,
                                               prs_kostenplaats_nr,
                                               prs_kostenplaats_omschrijving,
                                               prs_kostenplaatsgrp_oms,
                                               prs_kostensoort_oms,
                                               prs_kostensoort_opmerking,
                                               prs_kostensoort_refcode,
                                               prs_bedrijf_key,
                                               prs_debiteur_naam,
                                               prs_kostensoortgrp_oms,
                                               fin_verkoopfactuur_bedrag,
                                               fin_verkoopfactuur_btw,
                                               fin_btwtabelwaarde_code,
                                               fin_btwtabelwaarde_oms,
                                               fin_btwtabelwaarde_perc,
                                               fin_btwtabelwaarde_verlegd,
                                               fin_verkoopfactuur_maand,
                                               fin_verkoopfactuur_n1,
                                               fin_verkoopfactuur_n2,
                                               fin_verkoopfactuur_n3,
                                               fin_verkoopfactuur_n4,
                                               fin_verkoopfactuur_n5,
                                               fin_verkoopfactuur_c1,
                                               fin_verkoopfactuur_c2,
                                               fin_verkoopfactuur_c3,
                                               fin_verkoopfactuur_c4,
                                               fin_verkoopfactuur_c5,
                                               fin_verkoopfactuur_c6,
                                               fin_verkoopfactuur_c7,
                                               fin_verkoopfactuur_c8,
                                               fin_verkoopfactuur_d1,
                                               fin_verkoopfactuur_d2,
                                               fin_verkoopfactuur_d3,
                                               fin_verkoopfactuur_d4,
                                               fin_verkoopfactuur_d5)
                   VALUES (v_verkoopfactuurkop_key,
                           v_factuur_id,
                           TO_DATE (rec.factuurdatum, 'dd-mm-yyyy'),
                           rec.regel || '=' || rec.regel_id,
                           rec.xmlnode,
                           rec.refkey,
                           rec.prs_kostenplaats_key,
                           rec.prs_kostenplaats_nr,
                           rec.prs_kostenplaats_omschrijving,
                           rec.prs_kostenplaatsgrp_oms,
                           rec.grtboekrek_oms,
                           rec.grtboekrek,
                           rec.grtboekrek,
                           rec.prs_bedrijf_key,
                           rec.prs_debiteur_naam,
                           NULL,
                           rec.mndnet,
                           rec.mndbtw,
                           rec.fin_btwtabelwaarde_code,
                           rec.fin_btwtabelwaarde_oms,
                           rec.fin_btwtabelwaarde_perc,
                           rec.fin_btwtabelwaarde_verlegd,
                           rec.maand,
                           rec.mld_melding_key,         -- n1/correctiemelding
                           TO_NUMBER (NULL),                             -- n2
                           TO_NUMBER (NULL),                             -- n3
                           TO_NUMBER (NULL),                             -- n4
                           TO_NUMBER (NULL),                             -- n5
                           rec.po_nr,                                    -- c1
                           rec.contract_id,                              -- c2
                           rec.sortering,                                -- c3
                           --rec.contactpersoon,                           -- c4
                           NULL,                                         -- c4
                           rec.aanvrager,                                -- c5
                           NULL,                                         -- c6
                           rec.debiteur_nr || '=' || rec.btw_nr,         -- c7
                           rec.regel_oms,                                -- c8
                           TO_DATE (rec.vervaldatum, 'dd-mm-yyyy'),      -- d1
                           TO_DATE (rec.mndbegin, 'dd-mm-yyyy'),         -- d2
                           TO_DATE (rec.mndeinde, 'dd-mm-yyyy'),         -- d3
                           TO_DATE (NULL),                               -- d4
                           TO_DATE (NULL));                              -- d5
               COMMIT;

               v_fact_count := v_fact_count + 1;
               v_amount_sum := v_amount_sum + rec.mndnet;
            END IF;

            IF rec.mld_melding_key IS NOT NULL            -- Correctiemelding?
            THEN
               v_errormsg := 'Fout verwerken correctiemelding';

               -- Overgang van Geaccepteerd naar Verwerkt niet mogelijk, dus
               -- eerst afmelden (als nog niet Afgemeld)!
               IF rec.mld_melding_status = 4                            -- ACP
               THEN
                  MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL);  -- AFM
               END IF;
               MLD.setmeldingstatus (rec.mld_melding_key, 6, NULL);     -- VER
            END IF;
            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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'ADDD[a]-freeze');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (p_applname, 'S', 'ADDD[a]-verkoop/#regels: ' || TO_CHAR (v_fact_count), TO_CHAR (v_amount_sum));

      -- Verstuur verkoopfactuur naar huurder.
      FOR rec IN c2
      LOOP
         BEGIN
            IF rec.fin_verkoopfactuur_xmlnode = 'reservering' -- Cursor bevat soms ook de opdracht-nodes!
            THEN
               v_errormsg := 'Fout toevoegen CUST02-noti';

               INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                            fac_notificatie_status,
                                            fac_notificatie_receiver_email,
                                            fac_notificatie_oms,
                                            fac_notificatie_refkey,
                                            fac_notificatie_prioriteit,
                                            fac_notificatie_datum,
                                            fac_notificatie_sender_email,
                                            fac_notificatie_attachments)
                   VALUES (341,                                 -- CUST02-noti
                           2,                                          -- Mail
                           DECODE (                                -- To-adres
                              rec.prs_bedrijf_email,
                              NULL, 'accountsreceivable@brightlands.com',
                              rec.prs_bedrijf_email || ';accountsreceivable@brightlands.com'),
                           'Factuur ' || rec.fin_verkoopfactuur_id || ' ' || rec.fin_verkoopfactuur_maand || ' ' || rec.prs_debiteur_naam,
                           rec.fin_verkoopfactuurkop_key,
                           2,                                    -- Prioriteit
                           TRUNC (SYSDATE) + (7 / 24),     -- xTODO:7 ipv. 18!
                           'accountsreceivable@brightlands.com', -- From-adres
                           '/../../Fplace5i/CUST/BLCC/export/PDF/' || rec.fin_verkoopfactuurkop_id || '.pdf');
            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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'ADDD[a]-noti');
               COMMIT;
         END;
      END LOOP;

      FOR rec IN c3
      LOOP
         BEGIN
            IF rec.res_rsv_artikel_key IS NOT NULL
            THEN                                             -- Catering-regel
               IF rec.res_status_bo_key = 2
               THEN
                  v_errormsg := 'Fout bepalen res_rsv_artikel_prijs';

                  SELECT res.getartikelprijs (rec.res_rsv_artikel_key)
                    INTO v_prijs
                    FROM DUAL;

                  v_errormsg := 'Fout afmelden res_rsv_artikel';

                  UPDATE res_rsv_artikel
                     SET res_status_bo_key = 5,
                         res_rsv_artikel_prijs = v_prijs,
                         res_rsv_artikel_inkoopprijs =
                            (SELECT res_artikel_inkoopprijs
                               FROM res_artikel
                              WHERE res_artikel_key = rec.res_artikel_key),
                         res_rsv_artikel_btw =
                            (SELECT res_artikel_btw
                               FROM res_artikel
                              WHERE res_artikel_key = rec.res_artikel_key)
                   WHERE res_rsv_artikel_key = rec.res_rsv_artikel_key;

                  v_errormsg := 'Fout tracken afmelding';

                  fac.trackaction ('RESAFM', rec.res_rsv_ruimte_key, NULL, NULL, 'Catering afgemeld');
               END IF;

               IF rec.res_status_bo_key != 6
               THEN
                  v_errormsg := 'Fout verwerken res_rsv_artikel';

                  UPDATE res_rsv_artikel
                     SET res_status_bo_key = 6 -- AV (en zet ook Verwerkt-date)
                   WHERE res_rsv_artikel_key = rec.res_rsv_artikel_key;

                  v_errormsg := 'Fout tracken verwerking';

                  fac.trackaction ('RESVER', rec.res_rsv_ruimte_key, NULL, NULL, 'Catering verwerkt');
               END IF;
            ELSE                                               -- Ruimte-regel
               IF rec.res_status_bo_key = 2
               THEN
                  v_errormsg := 'Fout bepalen res_rsv_ruimte_prijs';

                  SELECT res.getruimteprijs (rec.res_rsv_ruimte_key)
                    INTO v_prijs
                    FROM DUAL;

                  v_errormsg := 'Fout afmelden res_rsv_ruimte';

                  UPDATE res_rsv_ruimte
                     SET res_status_bo_key = 5,
                         res_rsv_ruimte_prijs = v_prijs
                   WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

                  v_errormsg := 'Fout tracken afmelding';

                  fac.trackaction ('RESAFM', rec.res_rsv_ruimte_key, NULL, NULL, NULL);
               END IF;

               IF rec.res_status_bo_key != 6
               THEN
                  v_errormsg := 'Fout verwerken res_rsv_ruimte';

                  UPDATE res_rsv_ruimte
                     SET res_status_bo_key = 6                           -- AV
                   WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

                  v_errormsg := 'Fout tracken verwerking';

                  fac.trackaction ('RESVER', rec.res_rsv_ruimte_key, NULL, NULL, NULL);
               END IF;
            END IF;
            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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'ADDD[a]-AV');
               COMMIT;
         END;
      END LOOP;
   END IF;

   -- LET OP: ADDD-export draait dagelijks na middernacht (begin van dag).
   -- De MLD-verkoop (Klantwensen) wordt per 2019-06 (BLCC#56408) wekelijks
   -- gefactureerd icm. het doorzetten naar Twinfield.
   -- IF nacht na woensdag!
   IF TO_CHAR (SYSDATE, 'd') = '5'               -- xTODO:5/Nacht na woensdag!
   THEN
      v_fact_count := 0;
      v_amount_sum := 0;
      v_old_bedrijf_key := -1;
      v_old_po_nr := '';

      -- Factureer/bevries kosten van additionele diensten en verwerk=AV alle
      -- eventuele correctiemeldingen.
      FOR rec IN c1b
      LOOP
         BEGIN
            --IF rec.mndnet != 0 AND (rec.prs_bedrijf_key != v_old_bedrijf_key OR rec.po_nr != v_old_po_nr)
            IF rec.mndnet != 0 -- Elke Klantwens (kosten!=0) op eigen factuur!
            THEN
               -- BLCC#56148: Per feb. 2019 nieuwe sequence/BCC-verkoopboek en
               --             altijd doorlopende boekstuknummers beginnend met
               --             een '3'!
               --SELECT fac_s_user02.NEXTVAL - v_year_offset INTO v_count FROM DUAL;
               SELECT fac_s_user03.NEXTVAL INTO v_count FROM DUAL;

               v_factuur_id := '3' || SUBSTR ('00000000' || TO_CHAR (v_count), -8);
               v_factkop_id := v_factuur_id || '_' || SUBSTR (rec.maand, 1, 4) || '-' || SUBSTR (rec.maand, -2) || '_' || rec.debiteur_nr;

               INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
                   VALUES (v_factkop_id)
                RETURNING fin_verkoopfactuurkop_key
                     INTO v_verkoopfactuurkop_key;
               COMMIT;

               v_old_bedrijf_key := rec.prs_bedrijf_key;
               v_old_po_nr := rec.po_nr;

               v_errormsg := 'Fout toevoegen verkoopfactuur';

               INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
                                               fin_verkoopfactuur_id,
                                               fin_verkoopfactuur_datum,
                                               fin_verkoopfactuur_omschr,
                                               fin_verkoopfactuur_xmlnode,
                                               fin_verkoopfactuur_refkey,
                                               prs_kostenplaats_key,
                                               prs_kostenplaats_nr,
                                               prs_kostenplaats_omschrijving,
                                               prs_kostenplaatsgrp_oms,
                                               prs_kostensoort_oms,
                                               prs_kostensoort_opmerking,
                                               prs_kostensoort_refcode,
                                               prs_bedrijf_key,
                                               prs_debiteur_naam,
                                               prs_kostensoortgrp_oms,
                                               fin_verkoopfactuur_bedrag,
                                               fin_verkoopfactuur_btw,
                                               fin_btwtabelwaarde_code,
                                               fin_btwtabelwaarde_oms,
                                               fin_btwtabelwaarde_perc,
                                               fin_btwtabelwaarde_verlegd,
                                               fin_verkoopfactuur_maand,
                                               fin_verkoopfactuur_n1,
                                               fin_verkoopfactuur_n2,
                                               fin_verkoopfactuur_n3,
                                               fin_verkoopfactuur_n4,
                                               fin_verkoopfactuur_n5,
                                               fin_verkoopfactuur_c1,
                                               fin_verkoopfactuur_c2,
                                               fin_verkoopfactuur_c3,
                                               fin_verkoopfactuur_c4,
                                               fin_verkoopfactuur_c5,
                                               fin_verkoopfactuur_c6,
                                               fin_verkoopfactuur_c7,
                                               fin_verkoopfactuur_c8,
                                               fin_verkoopfactuur_d1,
                                               fin_verkoopfactuur_d2,
                                               fin_verkoopfactuur_d3,
                                               fin_verkoopfactuur_d4,
                                               fin_verkoopfactuur_d5)
                   VALUES (v_verkoopfactuurkop_key,
                           v_factuur_id,
                           TO_DATE (rec.factuurdatum, 'dd-mm-yyyy'),
                           rec.regel || '=' || rec.regel_id,
                           rec.xmlnode,
                           rec.refkey,
                           rec.prs_kostenplaats_key,
                           rec.prs_kostenplaats_nr,
                           rec.prs_kostenplaats_omschrijving,
                           rec.prs_kostenplaatsgrp_oms,
                           rec.grtboekrek_oms,
                           rec.grtboekrek,
                           rec.grtboekrek,
                           rec.prs_bedrijf_key,
                           rec.prs_debiteur_naam,
                           NULL,
                           rec.mndnet,
                           rec.mndbtw,
                           rec.fin_btwtabelwaarde_code,
                           rec.fin_btwtabelwaarde_oms,
                           rec.fin_btwtabelwaarde_perc,
                           rec.fin_btwtabelwaarde_verlegd,
                           rec.maand,
                           rec.mld_melding_key,         -- n1/correctiemelding
                           TO_NUMBER (NULL),                             -- n2
                           TO_NUMBER (NULL),                             -- n3
                           TO_NUMBER (NULL),                             -- n4
                           TO_NUMBER (NULL),                             -- n5
                           rec.po_nr,                                    -- c1
                           rec.contract_id,                              -- c2
                           rec.sortering,                                -- c3
                           --rec.contactpersoon,                           -- c4
                           NULL,                                         -- c4
                           rec.aanvrager,                                -- c5
                           NULL,                                         -- c6
                           rec.debiteur_nr || '=' || rec.btw_nr,         -- c7
                           rec.regel_oms,                                -- c8
                           TO_DATE (rec.vervaldatum, 'dd-mm-yyyy'),      -- d1
                           TO_DATE (rec.mndbegin, 'dd-mm-yyyy'),         -- d2
                           TO_DATE (rec.mndeinde, 'dd-mm-yyyy'),         -- d3
                           TO_DATE (NULL),                               -- d4
                           TO_DATE (NULL));                              -- d5
               COMMIT;

               v_fact_count := v_fact_count + 1;
               v_amount_sum := v_amount_sum + rec.mndnet;
            END IF;

            -- Markeren als 'Doorgezet naar Twinfield'!
            v_errormsg := 'Fout markeren doorzetten Twinfield';

            INSERT INTO mld_kenmerkopdr (mld_opdr_key,
                                         mld_kenmerk_key,
                                         mld_kenmerkopdr_waarde)
               VALUES (rec.refkey,
                       582,                        -- Doorgezet naar Twinfield
                       TO_CHAR (SYSDATE, 'dd-mm-yyyy'));

            IF rec.mld_melding_key IS NOT NULL            -- Correctiemelding?
            THEN
               v_errormsg := 'Fout verwerken correctiemelding';

               -- Overgang van Geaccepteerd naar Verwerkt niet mogelijk, dus
               -- eerst afmelden (als nog niet Afgemeld)!
               IF rec.mld_melding_status = 4                            -- ACP
               THEN
                  MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL);  -- AFM
               END IF;
               MLD.setmeldingstatus (rec.mld_melding_key, 6, NULL);     -- VER
            END IF;
            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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'ADDD[b]-freeze');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (p_applname, 'S', 'ADDD[b]-verkoop/#regels: ' || TO_CHAR (v_fact_count), TO_CHAR (v_amount_sum));

      -- Verstuur verkoopfactuur naar huurder.
      FOR rec IN c2
      LOOP
         BEGIN
            IF rec.fin_verkoopfactuur_xmlnode = 'opdracht' -- Cursor bevat soms ook de reservering-nodes!
            THEN
               v_errormsg := 'Fout toevoegen CUST02-noti';

               INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                            fac_notificatie_status,
                                            fac_notificatie_receiver_email,
                                            fac_notificatie_oms,
                                            fac_notificatie_refkey,
                                            fac_notificatie_prioriteit,
                                            fac_notificatie_datum,
                                            fac_notificatie_sender_email,
                                            fac_notificatie_attachments)
                   VALUES (341,                                 -- CUST02-noti
                           2,                                          -- Mail
                           DECODE (                                -- To-adres
                              rec.prs_bedrijf_email,
                              NULL, 'accountsreceivable@brightlands.com',
                              rec.prs_bedrijf_email || ';accountsreceivable@brightlands.com'),
                           'Factuur ' || rec.fin_verkoopfactuur_id || ' ' || rec.fin_verkoopfactuur_maand || ' ' || rec.prs_debiteur_naam,
                           rec.fin_verkoopfactuurkop_key,
                           2,                                    -- Prioriteit
                           TRUNC (SYSDATE) + (7 / 24),     -- xTODO:7 ipv. 18!
                           'accountsreceivable@brightlands.com', -- From-adres
                           '/../../Fplace5i/CUST/BLCC/export/PDF/' || rec.fin_verkoopfactuurkop_id || '.pdf');
            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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'ADDD[b]-noti');
               COMMIT;
         END;
      END LOOP;
   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.writelog (p_applname, 'E', v_errormsg, 'ADDD-export afgebroken!');
END;
/


-- TODO: Tbv. BSSC, dus ontmantelen voor BLCC!
/* Formatted on 29-6-2016 18:42:24 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE blcc_import_perslid (p_import_key IN NUMBER)
AS
   v_errormsg        VARCHAR2 (1000) := '-';
   v_errorhint       VARCHAR2 (1000) := '-';
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
BEGIN
   v_errorhint := 'Generieke import ' || TO_CHAR (p_import_key);

   -- Afdelingscode-kolom hard op 'XxX' indien leeg (want verplicht)!
   UPDATE fac_imp_file
      SET fac_imp_file_line =
                SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 2))
             || 'XxX'
             || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 3))
    WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1
          AND SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 2)
                                            + 1,   INSTR (fac_imp_file_line, ';', 1, 3)
                                                 - INSTR (fac_imp_file_line, ';', 1, 2)
                                                 - 1) IS NULL;

   COMMIT;

   -- Functie-kolom negeren en hard op 'Medewerker' (want verplicht)!
   UPDATE fac_imp_file i
      SET fac_imp_file_line =
                SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 10))
             || 'Medewerker'
             || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 11))
    WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;

   COMMIT;

   -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;3;4;5;6;'
      || '0;0;0;0;10;7;8;9;0;0;'
      || '11;1;2;0;0;0;12;13;14;15;'
      || '16;17;18;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      'Loginnaam;Wachtwoord;Afdelingscode;Achternaam;Tussenvoegsel;Voornaam;Telefoon;Mobiel;Email;Geslacht;Functie;Taal;SSC FOBO;SSC Digireceptiemedewerker;SSC Huurderadministrator%');

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

-- TODO: Tbv. BSSC, dus ontmantelen voor BLCC!
/* Formatted on 30-6-2016 12:30:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE blcc_update_perslid (p_import_key IN NUMBER)
AS
   -- Verwijderen personen niet in import voor afdelingen wel in import!
   CURSOR c_del
   IS
        SELECT p.prs_perslid_key
          FROM prs_v_aanwezigperslid p, prs_afdeling a
         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 p.prs_afdeling_key = a.prs_afdeling_key
               AND EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid i
                       WHERE UPPER (i.prs_afdeling_naam) = a.prs_afdeling_upper)
               AND NOT EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid i
                       WHERE UPPER (i.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin))
      ORDER BY 1;

   -- Bijwerken werkplek van personen naar '_' (als nog geen werkplek)!
   CURSOR c_wp
   IS
        SELECT p.prs_perslid_key
          FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
         WHERE p.prs_afdeling_key = a.prs_afdeling_key
               AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
               AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
               AND NOT EXISTS
                     (SELECT 1
                        FROM prs_perslidwerkplek pw
                       WHERE pw.prs_perslid_key = p.prs_perslid_key)
      ORDER BY 1;

   -- Bijwerken language van personen naar 'EN' (volgens importbestand)!
   CURSOR c_lang
   IS
        SELECT p.prs_perslid_key, DECODE (i.prs_kenmerk1, 'EN', 'EN', 'NL') lang
          FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
         WHERE p.prs_afdeling_key = a.prs_afdeling_key
               AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
               AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      ORDER BY 1;

   -- Bijwerken autorisatiegroepen van personen (volgens importbestand)!
   CURSOR c_rol (
      p_ssc_fobo_key     IN            NUMBER,
      p_ssc_dmedew_key   IN            NUMBER,
      p_ssc_hadmin_key   IN            NUMBER)
   IS
      SELECT p.prs_perslid_key, DECODE (UPPER (i.prs_kenmerk2), 'J', 1, 'Y', 1, 0) aanuit, p_ssc_fobo_key fac_groep_key
        FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      UNION ALL
      SELECT p.prs_perslid_key, DECODE (UPPER (i.prs_kenmerk3), 'J', 1, 'Y', 1, 0) aanuit, p_ssc_dmedew_key fac_groep_key
        FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      UNION ALL
      SELECT p.prs_perslid_key, DECODE (UPPER (i.prs_kenmerk4), 'J', 1, 'Y', 1, 0) aanuit, p_ssc_hadmin_key fac_groep_key
        FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      UNION ALL                                            -- Afnemen _Default
      SELECT p.prs_perslid_key, 0 aanuit, 1 fac_groep_key          -- _Default
        FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      UNION ALL             -- Toewijzen SSC FE (LABS-key=241 en PROD-key=321)
      SELECT p.prs_perslid_key, 1 aanuit, 321 fac_groep_key          -- SSC FE
        FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_afdeling_upper = UPPER (i.prs_afdeling_naam)
             AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
      ORDER BY 1, 3;

   c_ruimte_key       NUMBER := 2204; -- Fictieve ruimte op SSCH-locatie (LABS-key=2243 en PROD-key=2204)
   c_ssc_fobo_key     NUMBER := 341; -- SSC FOBO (LABS-key=241 en PROD-key=341)
   c_ssc_dmedew_key   NUMBER := 361;             -- SSC Digireceptiemedewerker
   c_ssc_hadmin_key   NUMBER := 362;               -- SSC Huurderadministrator
   v_bedrijf_key      NUMBER (10) := -1;
   v_afdeling_naam    VARCHAR2 (15) := '';
BEGIN
   -- Als import door Huurderadministrator, dan Afdelingscode-kolom negeren en hard op Afdeling-1 van Huurderadministrator!
   SELECT ab.prs_bedrijf_key, a.prs_afdeling_naam
     INTO v_bedrijf_key, v_afdeling_naam
     FROM fac_import i, prs_v_aanwezigperslid p, prs_afdeling a, prs_v_afdeling_boom ab
    WHERE     i.fac_import_key = p_import_key
          AND i.prs_perslid_key = p.prs_perslid_key
          AND p.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_afdeling_key = ab.prs_afdeling_key;

   IF v_bedrijf_key IN (1981, 2442) -- LABS-key+PROD-key van Huurders SSC-bedrijf; TODO: LABS-key nog een keer verwijderen!
   THEN                                   -- Import door Huurderadministrator!
      UPDATE fac_imp_perslid
         SET prs_afdeling_naam = v_afdeling_naam;
   ELSE                                   -- Import door andere administrator!
      UPDATE fac_imp_perslid
         SET prs_afdeling_naam = NULL
       WHERE prs_afdeling_naam = 'XxX';
   END IF;

   COMMIT;

   -- Generieke update.
   prs.update_perslid (p_import_key, 'LOGIN', NULL);

   -- Verwijderen personen niet in import voor afdelingen wel in import!
   FOR rec IN c_del
   LOOP
      prs.delete_perslid (p_import_key, rec.prs_perslid_key);
   END LOOP;

   COMMIT;

   -- Toekennen fictieve werkplek op SSCH-locatie (voor wie daar nog niet een
   -- werkplek heeft)!
   -- Bijwerken werkplek van personen naar '_' (als nog geen werkplek)!
   FOR rec IN c_wp
   LOOP
      prs.movetoruimte (rec.prs_perslid_key, c_ruimte_key, NULL);
   END LOOP;

   COMMIT;

   -- Bijwerken language van personen naar 'EN' (volgens importbestand)!
   FOR rec IN c_lang
   LOOP
      UPDATE prs_perslid
         SET prs_perslid_lang = rec.lang
       WHERE prs_perslid_key = rec.prs_perslid_key;
   END LOOP;

   COMMIT;

   -- Bijwerken autorisatiegroepen van personen (volgens importbestand)!
   FOR rec IN c_rol (c_ssc_fobo_key, c_ssc_dmedew_key, c_ssc_hadmin_key)
   LOOP
      IF rec.aanuit = 1
      THEN
         INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
            SELECT rec.fac_groep_key, rec.prs_perslid_key
              FROM DUAL
             WHERE NOT EXISTS
                      (SELECT 1
                         FROM fac_gebruikersgroep
                        WHERE fac_groep_key = rec.fac_groep_key
                              AND prs_perslid_key = rec.prs_perslid_key);
      ELSE
         DELETE FROM fac_gebruikersgroep
               WHERE fac_groep_key = rec.fac_groep_key
                     AND prs_perslid_key = rec.prs_perslid_key;
      END IF;
   END LOOP;
END blcc_update_perslid;
/


-- BLCC#38235: Import vanuit Strukton
/* Formatted on 22-5-2015 11:52:44 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE blcc_import_opdrstat_strukton (p_import_key IN NUMBER)
AS
   c_delim                VARCHAR2 (1) := ';';
   v_newline              VARCHAR2 (4000);                       -- Input line
   v_errormsg             VARCHAR2 (1000);
   oracle_err_num         NUMBER;
   oracle_err_mes         VARCHAR2 (200);
   v_aanduiding           VARCHAR2 (1000) := '';
   header_is_valid        NUMBER := 0;
   v_count_tot            NUMBER (10) := 0;
   v_count_imp            NUMBER (10) := 0;
   v_ongeldig             NUMBER (1) := 0;
   -- De importvelden
   v_mld_opdr_key_tekst   VARCHAR2 (100);
   v_mld_opdr_key         NUMBER (10);
   v_mld_opdr_opmerking   VARCHAR2 (4000);
   v_extern_nummer        VARCHAR2 (100);
   v_status_code          VARCHAR2 (100);
   v_status               NUMBER (10);
   v_datumtijd_tekst      VARCHAR2 (100);
   v_datumtijd            DATE;
   v_status_tekst         VARCHAR2 (100);
   v_opmerking            VARCHAR2 (4000);

   -- Overige velden:
   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   -- Eerst opruiming
   DELETE FROM blcc_imp_opdrstat_strukton;

   COMMIT;

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

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst);
         fac.imp_getfield (v_newline, c_delim, v_extern_nummer);
         fac.imp_getfield (v_newline, c_delim, v_status_code);       -- typeID
         fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst);
         fac.imp_getfield (v_newline, c_delim, v_status_tekst);
         fac.imp_getfield (v_newline, c_delim, v_opmerking);
         v_opmerking := SUBSTR (v_opmerking, 1, 1000);
         -- Verwijder de markering voor cr/lf die in stylesheet is toegevoegd.
         v_opmerking := REPLACE (v_opmerking, '@@', CHR (13));
         v_aanduiding :=
               '['
            || v_mld_opdr_key_tekst
            || '|'
            || v_extern_nummer
            || '|'
            || v_status_code
            || '|'
            || v_datumtijd_tekst
            || '|'
            || v_status_tekst
            || '] ';

         -- 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_mld_opdr_key_tekst)) = 'REFERENCEID'
               AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
               AND UPPER (TRIM (v_status_code)) = 'TYPEID'
               AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
               AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Fout bepalen opdracht';
            v_mld_opdr_key := TRIM (v_mld_opdr_key);

            BEGIN
               SELECT o.mld_opdr_key, o.mld_opdr_opmerking
                 INTO v_mld_opdr_key, v_mld_opdr_opmerking
                 FROM mld_opdr o,
                      mld_melding m,
                      mld_stdmelding sm,
                      ins_tab_discipline td,
                      ins_srtdiscipline sd
                WHERE     o.mld_melding_key = m.mld_melding_key
                      AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                      AND sm.mld_ins_discipline_key = td.ins_discipline_key
                      AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                      AND   sd.ins_srtdiscipline_prefix
                         || m.mld_melding_key
                         || '/'
                         || o.mld_opdr_bedrijfopdr_volgnr =
                            v_mld_opdr_key_tekst;
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_ongeldig := 1;
                  oracle_err_num := SQLCODE;
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg :=
                        v_errormsg
                     || ' ORACLE (error '
                     || oracle_err_num
                     || '/'
                     || oracle_err_mes
                     || ')';
                  fac.writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
            END;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Fout bepalen status';

               CASE
                  WHEN v_status_code = '5'
                  THEN
                     v_status := 5;                              -- uitgegeven
                  WHEN v_status_code = '10'
                  THEN
                     v_status := 8;                            -- geaccepteerd
                  WHEN v_status_code = '20'                  -- monteur gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '25'               -- specialist gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '30'                -- technisch gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  -- For future use
                  --WHEN v_status_code = '40'                     -- uitgeprijst
                  --THEN
                  --   v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '70'
                  THEN
                     v_status := 1;                             -- geannuleerd
                  WHEN v_status_code = '80'
                  THEN
                     v_status := 1;                               -- afgewezen
                  ELSE
                     v_status := NULL;
                     v_ongeldig := 1;                         -- nog te bezien
               END CASE;
            END IF;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Fout converteren datumtijd';

               IF INSTR (v_datumtijd_tekst, '.') > 0
               THEN
                  v_datumtijd :=
                     fac.safe_to_date (
                        REPLACE (
                           SUBSTR (v_datumtijd_tekst,
                                   1,
                                   INSTR (v_datumtijd_tekst, '.') - 1),
                           'T',
                           ' '),
                        'yyyy-mm-dd hh24:mi:ss');
               ELSE
                  v_datumtijd :=
                     fac.safe_to_date (v_datumtijd_tekst,
                                       'yyyy-mm-dd hh24:mi:ss');
               END IF;
            END IF;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Fout aanvullen opmerking';

               -- controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang
               -- gemeld is.
               IF v_opmerking IS NOT NULL
                  AND INSTR (v_mld_opdr_opmerking, v_opmerking) = 0
               THEN
                  v_opmerking :=
                        '['
                     || v_datumtijd_tekst
                     || '] - '
                     || v_status_tekst
                     || CHR (13)
                     || CHR (10)
                     || v_opmerking;
               ELSE
                  v_opmerking :=
                     '[' || v_datumtijd_tekst || '] - ' || v_status_tekst;
               END IF;
            END IF;

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout wegschrijven statusbericht';

                  INSERT INTO blcc_imp_opdrstat_strukton (mld_opdr_key,
                                                          extern_nummer,
                                                          status,
                                                          datumtijd,
                                                          opmerking)
                      VALUES (v_mld_opdr_key,
                              v_extern_nummer,
                              v_status,
                              v_datumtijd,
                              v_opmerking);

                  v_count_imp := v_count_imp + 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;
            ELSE
               IF v_status_code <> '40' AND v_status_code <> '45'
               THEN
                  fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
               END IF;
            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 statusberichten: ' || TO_CHAR (v_count_tot),
         '');
      fac.imp_writelog (
         p_import_key, 'S',
         'Inleesproces/#ongeldige niet ingelezen statusberichten: ' || TO_CHAR (v_count_tot - v_count_imp),
         '');
   END IF;

   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 statusberichten afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE blcc_update_opdrstat_strukton (p_import_key IN NUMBER)
AS
   -- Cursor loopt - in volgorde! - over alle ingelezen statusberichten.
   CURSOR c1
   IS
        SELECT mld_opdr_key, extern_nummer, datumtijd, status, opmerking
          FROM blcc_imp_opdrstat_strukton
      ORDER BY 1, 3;

   c_user_key              NUMBER (10) := 5;                 -- _STRUKTON-user
   c_refnr_srtkkey         NUMBER (10) := 261;           -- Refnr. Leverancier
   v_errormsg              VARCHAR2 (1000);
   oracle_err_num          NUMBER;
   oracle_err_mes          VARCHAR2 (200);
   v_aanduiding            VARCHAR2 (200);
   v_count_tot             NUMBER (10) := 0;
   v_count                 NUMBER (10) := 0;
   v_mld_key               NUMBER (10) := 0;
   v_opdr_key              NUMBER (10) := 0;
   v_opdr_status           NUMBER (10) := 0;
   v_mld_typeopdr_key      NUMBER (10);
   v_mld_kenmerk_key       NUMBER (10);
   v_mld_kenmerkopdr_key   NUMBER (10);
BEGIN
   -- Loop over alle ingelezen Strukton-statusberichten.
   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding :=
               '['
            || rec.mld_opdr_key
            || '|'
            || SUBSTR (rec.opmerking, 1, 100)
            || '] ';
         v_count_tot := v_count_tot + 1;

         -- Key van melding/opdracht bepalen en Refnr. bij opdracht opslaan.
         IF rec.mld_opdr_key IS NOT NULL
         THEN
            v_errormsg := 'Fout bepalen opdracht.';

            SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key
              INTO v_mld_key, v_opdr_key, v_opdr_status, v_mld_typeopdr_key
              FROM mld_opdr
             WHERE mld_opdr_key = rec.mld_opdr_key;

            v_errormsg := 'Fout bepalen Refnr-kenmerk.';

            SELECT k.mld_kenmerk_key
              INTO v_mld_kenmerk_key
              FROM mld_kenmerk k
             WHERE k.mld_srtkenmerk_key = c_refnr_srtkkey
                   AND k.mld_typeopdr_key = v_mld_typeopdr_key;

            v_errormsg := 'Fout bepalen Refnr-kenmerkopdracht.';

            SELECT MAX (ko.mld_kenmerkopdr_key)
              INTO v_mld_kenmerkopdr_key
              FROM mld_kenmerkopdr ko
             WHERE ko.mld_opdr_key = v_opdr_key
                   AND v_mld_kenmerk_key = ko.mld_kenmerk_key;

            IF v_mld_kenmerkopdr_key IS NULL
            THEN
               -- Kenmerk toevoegen
               v_errormsg := 'Fout toevoegen Refnr-kenmerkopdracht.';

               INSERT INTO mld_kenmerkopdr (mld_kenmerk_key,
                                            mld_opdr_key,
                                            mld_kenmerkopdr_waarde)
                   VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer);
            ELSE
               -- Kenmerk bijwerken
               v_errormsg := 'Fout bijwerken Refnr-kenmerkopdracht.';

               UPDATE mld_kenmerkopdr
                  SET mld_kenmerkopdr_waarde = rec.extern_nummer
                WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
            END IF;

            v_errormsg := 'Fout bijwerken Opmerking (opdracht).';

            v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte!

            UPDATE mld_opdr
               SET mld_opdr_opmerking =
                      DECODE (
                         mld_opdr_opmerking,
                         NULL,
                         rec.opmerking,
                            rec.opmerking
                         || CHR (13)
                         || CHR (10)
                         || SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count)))
             WHERE mld_opdr_key = v_opdr_key;

            v_errormsg := 'Fout bijwerken Status.';

            IF v_opdr_status <> rec.status
            THEN
               IF rec.status = 8 AND v_opdr_status = 5
               THEN
                  -- Accepteer opdracht als de opdracht uitgegeven was
                  MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton
               ELSIF rec.status = 6 AND v_opdr_status = 5
               THEN
                  -- Meld de opdracht af als deze uitgegeven was
                  MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton, eerst accepteren
                  MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
               ELSIF rec.status = 6 AND v_opdr_status = 8
               THEN
                  -- Meld de opdracht af als deze geaccepteerd was
                  MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
               ELSIF rec.status = 1 AND v_opdr_status IN (5, 8)
               THEN
                  -- Wijs de opdracht af als deze niet/wel geaccepteerd was
                  MLD.setopdrachtstatus (v_opdr_key, 1, c_user_key); -- Strukton
                  MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
               END IF;

               IF rec.status = 6 AND v_opdr_status <> 6
               THEN
                  v_errormsg := 'Fout bijwerken Opmerking (melding).';

                  UPDATE mld_melding m
                     SET mld_melding_opmerking =
                            DECODE (
                               mld_melding_opmerking,
                               NULL,
                               rec.opmerking,
                               rec.opmerking || CHR (13) || CHR (10)
                               || SUBSTR (mld_melding_opmerking,
                                          1,
                                          (4000 - v_count)))
                   WHERE mld_melding_key = v_mld_key
                         AND mld_melding_status IN (4, 7)
                         AND NOT EXISTS
                               ( -- Afhandeling in melding niet aanpassen voor projecten
                                SELECT  sm.mld_stdmelding_key
                                   FROM mld_stdmelding sm,
                                        ins_tab_discipline td,
                                        ins_srtdiscipline sd
                                  WHERE sm.mld_stdmelding_key = m.mld_stdmelding_key
                                        AND sm.mld_ins_discipline_key = td.ins_discipline_key
                                        AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                                        AND sd.ins_srtdiscipline_prefix = 'QQQ');

                  v_errormsg := 'Fout 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 = v_mld_key
                                 AND m.mld_melding_status IN (4, 7))
                         niet_opgelost
                   WHERE aanw_opdr > 0 AND open_opdr = 0;

                  -- Sinds AADO#30922 wordt de melding niet meer automatisch afgemeld.
                  MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
               END IF;
            END IF;
         END IF;

         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,
                              'Statusbericht-loop');
      END;
   END LOOP;

   COMMIT;
END;
/


-- BLCC#39810 View voor cateringrapportage
CREATE OR REPLACE VIEW blcc_v_rap_cateringoverzicht
(
   fclt_f_debiteur,
   fclt_f_organisatie,
   locatie,
   ruimte,
   datumtijd,
   datum,
   tijd_van,
   tijd_tot,
   resnr,
   omschrijving,
   artikelkey,
   artikelnr,
   artikelomschrijving,
   aantal,
   stuksprijs,
   kosten,
   fclt_f_besteller,
   costcenter,
   activiteit
)
AS
   SELECT COALESCE (x.prs_kenmerklink_waarde, '???') deb_nr,
          (SELECT prs_afdeling_omschrijving
             FROM prs_afdeling
            WHERE prs_afdeling_key = x.prs_afdeling_key)
             deb_oms,
          DECODE (
             x.alg_ruimte_key,
             NULL,
             'Onbekend',
                rg.alg_gebouw_upper
             || '-'
             || rg.alg_verdieping_code
             || '-'
             || rg.alg_ruimte_nr)
             afleveradres,
          COALESCE (rr.res_ruimte_nr, rg.alg_ruimte_omschrijving) ruimte,
          x.res_rsv_artikel_levering,
          TO_CHAR (x.res_rsv_artikel_levering, 'DD-MM-YYYY') datum,
          TO_CHAR (x.res_rsv_ruimte_van, 'hh24:mi') tijdvan,
          TO_CHAR (x.res_rsv_ruimte_tot, 'hh24:mi') tijdtot,
          x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr resnr,
          x.res_rsv_ruimte_omschrijving omschrijving,
          x.res_artikel_key,
          x.res_artikel_nr,
          x.res_artikel_omschrijving,
          x.res_rsv_artikel_aantal,
          ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             stuksprijs,
          x.res_rsv_artikel_aantal
          * ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             regeltotaal,
          x.prs_perslid_naam_full,
          (SELECT MAX (kw.res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE     kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          x.res_activiteit_omschrijving
     FROM (SELECT rra.res_rsv_artikel_verwerkt,
                  COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key)
                     res_ruimte_key,
                  COALESCE (rar1.alg_ruimte_key,
                            rar2.alg_ruimte_key,
                            rrr.alg_ruimte_key)
                     alg_ruimte_key,
                  rra.res_rsv_artikel_levering,
                  rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  rrr.res_rsv_ruimte_van,
                  rrr.res_rsv_ruimte_tot,
                  rrr.res_rsv_ruimte_omschrijving,
                  act.res_activiteit_omschrijving,
                  ra.res_artikel_nr,
                  ra.res_artikel_key,
                  ra.res_artikel_omschrijving,
                  rra.res_rsv_artikel_prijs,
                  rra.res_rsv_artikel_aantal,
                  COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key)
                     prs_afdeling_key,
                  kl.prs_kenmerklink_waarde,
                  pf.prs_perslid_naam_full,
                  k.prs_kostenplaats_nr,
                  k.prs_kostenplaats_omschrijving
             FROM res_rsv_ruimte rrr,
                  res_activiteit act,
                  res_rsv_artikel rra,
                  res_artikel ra,
                  res_ruimte_opstelling rro,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NULL
                   GROUP BY res_ruimte_key) rar1,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NOT NULL
                   GROUP BY res_ruimte_key) rar2,
                  alg_v_allonroerendgoed aog,
                  prs_perslid p,
                  prs_v_afdeling_boom ab,
                  prs_kenmerklink kl,
                  prs_v_perslid_fullnames_all pf,
                  prs_kostenplaats k
            WHERE rrr.res_activiteit_key = act.res_activiteit_key
                  --AND act.res_activiteit_verwijder IS NULL  -- Wat ooit is Verwerkt, altijd opnemen!
                  AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                  --AND rra.res_rsv_artikel_verwijder IS NULL -- Wat ooit is Verwerkt, altijd opnemen!
                  AND rra.res_status_bo_key = 6                    -- Verwerkt
                  AND rra.res_artikel_key = ra.res_artikel_key
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                  AND aog.alg_locatie_key = 1                        -- CAMPUS
                  AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                  AND kl.prs_kenmerklink_niveau(+) = 'A'
                  AND kl.prs_kenmerk_key(+) = 1001           -- Debiteurnummer
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN res_ruimte rr
             ON x.res_ruimte_key = rr.res_ruimte_key
          LEFT JOIN alg_v_ruimte_gegevens_all rg
             ON x.alg_ruimte_key = rg.alg_ruimte_key
   UNION ALL
   SELECT COALESCE (x.prs_kenmerklink_waarde, '???') deb_nr,
          (SELECT prs_afdeling_omschrijving
             FROM prs_afdeling
            WHERE prs_afdeling_key = x.prs_afdeling_key)
             deb_oms,
          DECODE (
             x.alg_ruimte_key,
             NULL,
             'Onbekend',
                rg.alg_gebouw_upper
             || '-'
             || rg.alg_verdieping_code
             || '-'
             || rg.alg_ruimte_nr)
             afleveradres,
          COALESCE (rr.res_ruimte_nr, rg.alg_ruimte_omschrijving) ruimte,
          x.res_rsv_artikel_levering,
          TO_CHAR (x.res_rsv_artikel_levering, 'DD-MM-YYYY') datum,
          TO_CHAR (x.res_rsv_ruimte_van, 'hh24:mi') tijdvan,
          TO_CHAR (x.res_rsv_ruimte_tot, 'hh24:mi') tijdtot,
          x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr resnr,
          x.res_rsv_ruimte_omschrijving omschrijving,
          x.res_artikel_key,
          x.res_artikel_nr,
          x.res_artikel_omschrijving,
          x.res_rsv_artikel_aantal,
          ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             stuksprijs,
          x.res_rsv_artikel_aantal
          * ROUND ((x.res_rsv_artikel_prijs / x.res_rsv_artikel_aantal), 5)
             regeltotaal,
          x.prs_perslid_naam_full,
          (SELECT MAX (kw.res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE     kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          x.res_activiteit_omschrijving
     FROM (SELECT rra.res_rsv_artikel_verwerkt,
                  COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key)
                     res_ruimte_key,
                  COALESCE (rar1.alg_ruimte_key,
                            rar2.alg_ruimte_key,
                            rrr.alg_ruimte_key)
                     alg_ruimte_key,
                  rra.res_rsv_artikel_levering,
                  rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  rrr.res_rsv_ruimte_van,
                  rrr.res_rsv_ruimte_tot,
                  rrr.res_rsv_ruimte_omschrijving,
                  act.res_activiteit_omschrijving,
                  ra.res_artikel_nr,
                  ra.res_artikel_key,
                  ra.res_artikel_omschrijving,
                  rra.res_rsv_artikel_prijs,
                  rra.res_rsv_artikel_aantal,
                  COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key)
                     prs_afdeling_key,
                  kl.prs_kenmerklink_waarde,
                  pf.prs_perslid_naam_full,
                  k.prs_kostenplaats_nr,
                  k.prs_kostenplaats_omschrijving
             FROM res_rsv_ruimte rrr,
                  res_activiteit act,
                  res_rsv_artikel rra,
                  res_artikel ra,
                  res_ruimte_opstelling rro,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NULL
                   GROUP BY res_ruimte_key) rar1,
                  (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                       FROM res_alg_ruimte
                      WHERE res_alg_ruimte_verwijder IS NOT NULL
                   GROUP BY res_ruimte_key) rar2,
                  alg_v_allonroerendgoed aog,
                  prs_perslid p,
                  prs_v_afdeling_boom ab,
                  prs_kenmerklink kl,
                  prs_v_perslid_fullnames_all pf,
                  prs_kostenplaats k
            WHERE rrr.res_activiteit_key = act.res_activiteit_key
                  AND act.res_activiteit_verwijder IS NULL
                  AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                  AND rra.res_rsv_artikel_verwijder IS NULL
                  AND rra.res_status_bo_key != 6                   -- Verwerkt
                  AND rra.res_artikel_key = ra.res_artikel_key
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
                  AND aog.alg_locatie_key = 1                        -- CAMPUS
                  AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key) = kl.prs_link_key(+)
                  AND kl.prs_kenmerklink_niveau(+) = 'A'
                  AND kl.prs_kenmerk_key(+) = 1001           -- Debiteurnummer
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN res_ruimte rr
             ON x.res_ruimte_key = rr.res_ruimte_key
          LEFT JOIN alg_v_ruimte_gegevens_all rg
             ON x.alg_ruimte_key = rg.alg_ruimte_key;

-- BLCC#41477: Onderstaande twee views zijn opnieuw opgebouwd zodat er geen UDR-views gebruikt worden als bron.
CREATE OR REPLACE VIEW blcc_v_rap_meldingen
(
   prioriteittxt,
   melding_nummer,
   productgroep,
   subproductgroep,
   melding_datumtijd,
   melding_datum,
   melding_tijd,
   melding_locatiecode,
   melding_gebouwcode,
   melding_verdieping,
   melding_ruimtenr,
   onderwerp,
   omschrijving,
   melder,
   melding_status,
   melding_opmerking,
   behandelaar,
   melding_einddatumtijd,
   melding_einddatum,
   afspraak_sla_uren,
   melder_key,
   kostenplaats_code,
   kostenplaats_groep,
   kostensoort_code,
   kostensoort_groep,
   vakgroeptype,
   melding_nummer_parent
)
AS
   SELECT DECODE (m.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')),
          sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) meldingnummer,
          md.ins_discipline_omschrijving productgroep,
          sm.mld_stdmelding_omschrijving subproductgroep,
          m.mld_melding_datum,
          TO_CHAR (m.mld_melding_datum, 'DD-MM-YYYY') datum,
          TO_CHAR (m.mld_melding_datum, 'hh24:mi') tijd,
          l.alg_locatie_code locatie,
          aog.alg_gebouw_code gebouw,
          aog.alg_verdieping_code verdieping,
          aog.alg_ruimte_nr ruimte,
          TRIM (m.mld_melding_onderwerp) onderwerp,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (TRIM (m.mld_melding_omschrijving), 1, 20), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') omschrijving,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = m.prs_perslid_key)
             melder,
          (SELECT mld_statuses_omschrijving FROM mld_statuses WHERE mld_statuses_key = m.mld_melding_status)
             status,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (TRIM (m.mld_melding_opmerking), 1, 20), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') opmerking,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = m.mld_melding_behandelaar_key)
             behandelaar,
          m.mld_melding_einddatum,
          TO_CHAR (m.mld_melding_einddatum, 'DD-MM-YYYY') einddatum,
          DECODE (mld.getactualuitvoer (m.mld_melding_key).eenheid,
                  'U', ((m.mld_melding_einddatum - COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1), SYSDATE)) * 24) +
                       COALESCE (DECODE (m.mld_melding_t_respijt.eenheid, 'D', m.mld_melding_t_respijt.tijdsduur, NULL), 0),
                  NULL)
             afspraak_sla_uren,
          m.prs_perslid_key,
          kp.prs_kostenplaats_upper,
          DECODE (kpg.prs_kostenplaatsgrp_nr, NULL, '', kpg.prs_kostenplaatsgrp_nr || '-') || kpg.prs_kostenplaatsgrp_oms,
          ks.prs_kostensoort_upper,
          ksg.prs_kostensoortgrp_oms,
          sd.ins_srtdiscipline_omschrijving,
          sd2.ins_srtdiscipline_prefix || TO_CHAR (m2.mld_melding_key) meldingnummer_parent
     FROM mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_v_allonrgoed_gegevens aog,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_kostensoort ks,
          prs_kostensoortgrp ksg,
          mld_melding m2,
          mld_stdmelding sm2,
          mld_discipline md2,
          ins_srtdiscipline sd2
    WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
          AND m.fac_activiteit_key IS NULL
          AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND sm.prs_kostensoort_key = ks.prs_kostensoort_key(+)
          AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
          AND m.mld_melding_parentkey = m2.mld_melding_key(+)
          AND m2.mld_stdmelding_key = sm2.mld_stdmelding_key(+)
          AND sm2.mld_ins_discipline_key = md2.ins_discipline_key(+)
          AND md2.ins_srtdiscipline_key = sd2.ins_srtdiscipline_key(+);

CREATE OR REPLACE VIEW blcc_v_rap_opdrachten
(
   prioriteittxt,
   opdracht_nummer,
   melding_nummer,
   opdracht_type,
   omschrijving,
   opdracht_datumtijd,
   opdracht_datum,
   opdracht_tijd,
   opdracht_status,
   opdracht_einddatumtijd,
   opdracht_einddatum,
   opdracht_eindtijd,
   opdracht_uitvoerende,
   opdracht_uitvoerende_crednr,
   behandelaar,
   kostenplaats_code,
   kostenplaats_groep,
   opdracht_kosten,
   opdracht_uren,
   opdracht_correctie,
   opdracht_materiaal,
   opdracht_uurtarief,
   opdracht_offerte
)
AS
   SELECT DISTINCT
          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')),
          sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) || '/'  || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr),
          sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) meldingnummer,
          ot.mld_typeopdr_omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (o.mld_opdr_omschrijving, 1, 20), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', ''),
          o.mld_opdr_datumbegin,
          TO_CHAR (o.mld_opdr_datumbegin, 'DD-MM-YYYY') datum,
          TO_CHAR (o.mld_opdr_datumbegin, 'hh24:mi') tijd,
          (SELECT mld_statusopdr_omschrijving FROM mld_statusopdr WHERE mld_statusopdr_key = o.mld_statusopdr_key)
             opdracht_status,
          o.mld_opdr_einddatum,
          TO_CHAR (o.mld_opdr_einddatum, 'DD-MM-YYYY') einddatum,
          TO_CHAR (o.mld_opdr_einddatum, 'hh24:mi') eindtijd,
          (SELECT naam FROM mld_v_uitvoerende WHERE mld_uitvoerende_key = o.mld_uitvoerende_keys)
             opdracht_uitvoerende,
          (SELECT prs_leverancier_nr FROM prs_bedrijf WHERE prs_bedrijf_key = o.mld_uitvoerende_keys)
             opdracht_uitvoerende_crednr,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = o.prs_perslid_key)
             behandelaar,
          kp.prs_kostenplaats_upper kostenplaats_code,
          DECODE (kpg.prs_kostenplaatsgrp_nr, NULL, '', kpg.prs_kostenplaatsgrp_nr || '-') || kpg.prs_kostenplaatsgrp_oms kostenplaats_groep,
          TO_CHAR (o.mld_opdr_kosten, 'fm999999999999999990.00'),
          TO_CHAR (o.mld_opdr_uren, 'fm999999999999999990.00'),
          TO_CHAR (o.mld_opdr_kosten - o.mld_opdr_materiaal - (o.mld_opdr_uren * o.mld_opdr_uurloon), 'fm999999999999999990.00'),
          TO_CHAR (o.mld_opdr_materiaal, 'fm999999999999999990.00'),
          TO_CHAR (o.mld_opdr_uurloon, 'fm999999999999999990.00'),
          sub.opdrachtnummer
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          mld_typeopdr ot,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          (SELECT sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) opdrachtnummer,
           mld_opdr_key
           FROM mld_melding m,
                mld_opdr o,
                mld_stdmelding sm,
                mld_discipline md,
                ins_srtdiscipline sd
          WHERE     o.mld_melding_key = m.mld_melding_key
                AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                AND sm.mld_ins_discipline_key = md.ins_discipline_key
                AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key) sub
    WHERE o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND o.mld_typeopdr_key = ot.mld_typeopdr_key
          AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND o.mld_opdr_parent_key = sub.mld_opdr_key(+);

-- BLCC#38512
CREATE OR REPLACE VIEW blcc_v_rap_mldtrk
(
   melding,
   aanmaakdatumtijd,
   aanmaakdatum,
   aanmaaktijdstip,
   meldingstatus,
   plan_einddatum,
   sla_einddatum,
   wijzigingsdatumtijd,
   wijzigingsdatum,
   wijzigingstijdstip,
   wijzigingdoor,
   wijzigingcode
)
AS
   SELECT sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) melding,
          m.mld_melding_datum aanmaakdatumtijd,
          TO_CHAR (m.mld_melding_datum, 'dd-mm-yyyy') aanmaakdatum,
          TO_CHAR (m.mld_melding_datum, 'hh24:mi') aanmaaktijdstip,
          ms.mld_statuses_omschrijving meldingstatus,
          TO_CHAR (m.mld_melding_einddatum, 'dd-mm-yyyy') plan_einddatum,
          TO_CHAR (m.mld_melding_einddatum_std, 'dd-mm-yyyy') sla_einddatum,
          t.fac_tracking_datum wijzigingsdatumtijd,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy') wijzigingsdatum,
          TO_CHAR (t.fac_tracking_datum, 'hh24:mi') wijzigingstijdstip,
          pf.prs_perslid_naam_full tracking_door,
          sn.fac_srtnotificatie_code tracking_code
     FROM mld_melding m,
          mld_statuses ms,
          mld_stdmelding sm,
          ins_tab_discipline td,
          ins_srtdiscipline sd,
          fac_tracking t,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all pf
    WHERE m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_melding_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          AND sn.fac_srtnotificatie_xmlnode = 'melding'
          AND sn.fac_srtnotificatie_key IN (43, 37, 44, 38, 39, 46, 47, 48, 49) -- MLDNEW, MLDACP, MLDREJ, MLDAFM, MLDAFR, MLDVER, MLDDOO, MLDFWD, MLDBWD
          AND t.prs_perslid_key = pf.prs_perslid_key;

CREATE OR REPLACE VIEW blcc_v_rap_ordtrk
(
   opdracht,
   aanmaakdatumtijd,
   aanmaakdatum,
   aanmaaktijdstip,
   opdrachtstatus,
   plan_einddatum,
   wijzigingsdatumtijd,
   wijzigingsdatum,
   wijzigingstijdstip,
   wijzigingdoor,
   wijzigingcode
)
AS
   SELECT sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) opdracht,
          o.mld_opdr_datumbegin aanmaakdatumtijd,
          TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy') aanmaakdatum,
          TO_CHAR (o.mld_opdr_datumbegin, 'hh24:mi') aanmaaktijdstip,
          os.mld_statusopdr_omschrijving opdrachtstatus,
          TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') plan_einddatum, -- Of mld_opdr_plandatum?
          t.fac_tracking_datum wijzigingsdatumtijd,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy') wijzigingsdatum,
          TO_CHAR (t.fac_tracking_datum, 'hh24:mi') wijzigingstijdstip,
          pf.prs_perslid_naam_full tracking_door,
          sn.fac_srtnotificatie_code tracking_code
     FROM mld_opdr o,
          mld_statusopdr os,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          ins_srtdiscipline sd,
          fac_tracking t,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all pf
    WHERE o.mld_statusopdr_key = os.mld_statusopdr_key
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
          --AND sn.fac_srtnotificatie_key IN (59, 65, 64, 69, 58, 70, 66, 60) -- ORDNEW, ORDACP, ORDREJ, ORDCAN, ORDAFM, ORDAFR, ORDVER, ORDUPD
          --AND sn.fac_srtnotificatie_key NOT IN (56, 57, 68, 135) -- ORDMLI, ORDMLE, ORDSNX, ORDMAI
          AND t.prs_perslid_key = pf.prs_perslid_key;

CREATE OR REPLACE VIEW blcc_v_rap_fact_vastgoedgeg
AS
   SELECT fp.alg_onrgoed_key,
          fp.alg_onrgoed_type,
          fp.alg_gebouw_code gebouwcode,
          fp.alg_verdieping_volgnr verdiepingvolgnr,
          fp.alg_verdieping_code verdiepingcode,
          fp.alg_srtruimte_omschrijving ruimtefunctie,
          fp.alg_ruimte_nr ruimtenummer,
          fp.alg_ruimte_omschrijving ruimteomschrijving,
          fp.vvo,
          fp.bvo,
          fp.lhkot_class,
          c.contract,
          pf1.prs_perslid_naam_full gebouwverantw1,
          pf2.prs_perslid_naam_full gebouwverantw2,
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = fac.safe_to_number (dvl.alg_onrgoedkenmerk_waarde)) dienstverlener,
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = fac.safe_to_number (eig.alg_onrgoedkenmerk_waarde)) eigenaar,
          sg.alg_srtgebouw_omschrijving gebouwfunctie,
          SUBSTR (bouwjaar.alg_onrgoedkenmerk_waarde, 7, 10) bouwjaar,
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = fac.safe_to_number (strategie.alg_onrgoedkenmerk_waarde)) strategie
     FROM    (SELECT g.alg_gebouw_key alg_onrgoed_key,
                     'G' alg_onrgoed_type,
                     g.alg_gebouw_code,
                     NULL alg_verdieping_volgnr,
                     NULL alg_verdieping_code,
                     NULL alg_srtruimte_omschrijving,
                     NULL alg_ruimte_nr,
                     NULL alg_ruimte_omschrijving,
                     fac.safe_to_number (glhkot.alg_onrgoedkenmerk_waarde) vvo,
                     NULL bvo,
                     DECODE (glhkot.alg_kenmerk_key, 1082, 'L', 1083, 'H', 1084, 'K', 1085, 'O', 'T') lhkot_class
                FROM alg_v_aanweziggebouw g,
                     alg_v_aanwezigonrgoedkenmerk glhkot
               WHERE g.alg_locatie_key = 1                           -- CAMPUS
                     AND g.alg_gebouw_key = glhkot.alg_onrgoed_key(+)
                     AND glhkot.alg_kenmerk_key(+) IN (1082, 1083, 1084, 1085, 1120) -- LHKOT Oppervlakten
                     AND glhkot.alg_onrgoed_niveau(+) = 'G'
              UNION ALL
              SELECT t.alg_terreinsector_key alg_onrgoed_key,
                     'T' alg_onrgoed_type,
                     t.alg_terreinsector_code alg_gebouw_code,
                     NULL alg_verdieping_volgnr,
                     NULL alg_verdieping_code,
                     NULL alg_srtruimte_omschrijving,
                     NULL alg_ruimte_nr,
                     NULL alg_ruimte_omschrijving,
                     t.alg_terreinsector_oppervlak vvo,
                     t.alg_terreinsector_oppervlak bvo,
                     NULL lhkot_class
                FROM alg_v_aanwezigterreinsector t
               WHERE t.alg_locatie_key = 1                           -- CAMPUS
              UNION ALL
              SELECT v.alg_verdieping_key alg_onrgoed_key,
                     'V' alg_onrgoed_type,
                     g.alg_gebouw_code,
                     v.alg_verdieping_volgnr,
                     v.alg_verdieping_code,
                     NULL alg_srtruimte_omschrijving,
                     NULL alg_ruimte_nr,
                     NULL alg_ruimte_omschrijving,
                     fac.safe_to_number (vlhkot.alg_onrgoedkenmerk_waarde) vvo,
                     NULL bvo,
                     DECODE (vlhkot.alg_kenmerk_key, 1092, 'L', 1093, 'H', 1094, 'K', 1095, 'O', 'T') lhkot_class
                FROM alg_v_aanwezigverdieping v,
                     alg_gebouw g,
                     alg_v_aanwezigonrgoedkenmerk vlhkot
               WHERE v.alg_gebouw_key = g.alg_gebouw_key
                     AND g.alg_locatie_key = 1                       -- CAMPUS
                     AND v.alg_verdieping_key = vlhkot.alg_onrgoed_key(+)
                     AND vlhkot.alg_kenmerk_key(+) IN (1092, 1093, 1094, 1095, 1121) -- LHKOT Oppervlakten
                     AND vlhkot.alg_onrgoed_niveau(+) = 'V'
              UNION ALL
              SELECT r.alg_ruimte_key alg_onrgoed_key,
                     'R' alg_onrgoed_type,
                     g.alg_gebouw_code,
                     v.alg_verdieping_volgnr,
                     v.alg_verdieping_code,
                     sr.alg_srtruimte_omschrijving,
                     r.alg_ruimte_nr,
                     r.alg_ruimte_omschrijving,
                     r.alg_ruimte_opp_alt1 vvo,
                     r.alg_ruimte_bruto_vloeropp bvo,
                     ud.fac_usrdata_code lhkot_class
                FROM alg_v_aanwezigruimte r,
                     alg_srtruimte sr,
                     alg_verdieping v,
                     alg_gebouw g,
                     alg_v_aanwezigonrgoedkenmerk rlhkot,
                     fac_usrdata ud
               WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key
                     AND r.alg_verdieping_key = v.alg_verdieping_key
                     AND v.alg_gebouw_key = g.alg_gebouw_key
                     AND g.alg_locatie_key = 1                       -- CAMPUS
                     AND r.alg_ruimte_key = rlhkot.alg_onrgoed_key(+)
                     AND rlhkot.alg_kenmerk_key(+) = 1100 -- LHKOT Classificatie
                     AND rlhkot.alg_onrgoed_niveau(+) = 'R'
                     AND fac.safe_to_number (rlhkot.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key(+)) fp    -- FIN-plaatsen
          LEFT JOIN (  SELECT cp.cnt_alg_plaats_key,
                              LISTAGG (c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0'), ',') WITHIN GROUP (ORDER BY c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0'))
                                 contract
                         FROM cnt_v_aanwezigcontract c, cnt_contract_plaats cp
                        WHERE c.ins_discipline_key = 621     -- Huurcontracten
                          AND SYSDATE BETWEEN TRUNC (c.cnt_contract_looptijd_van) AND TRUNC (c.cnt_contract_looptijd_tot + 1)
                          AND c.cnt_contract_status = 0       -- NIET Gesloten
                          AND cp.cnt_contract_plaats_verwijder IS NULL
                          AND c.cnt_contract_key = cp.cnt_contract_key
                     GROUP BY cp.cnt_alg_plaats_key) c
             ON fp.alg_onrgoed_key = c.cnt_alg_plaats_key
          LEFT JOIN alg_gebouw g
             ON fp.alg_onrgoed_key = g.alg_gebouw_key
          LEFT JOIN alg_srtgebouw sg
             ON g.alg_srtgebouw_key = sg.alg_srtgebouw_key
          LEFT JOIN prs_v_perslid_fullnames_all pf1
             ON g.prs_perslid_key_verantw = pf1.prs_perslid_key
          LEFT JOIN prs_v_perslid_fullnames_all pf2
             ON g.prs_perslid_key_verantw2 = pf2.prs_perslid_key
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk dvl
             ON fp.alg_onrgoed_key = dvl.alg_onrgoed_key
                AND dvl.alg_kenmerk_key = 1060               -- Dienstverlener
                AND dvl.alg_onrgoed_niveau = 'G'
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk eig
             ON fp.alg_onrgoed_key = eig.alg_onrgoed_key
                AND eig.alg_kenmerk_key = 1140                     -- Eigenaar
                AND eig.alg_onrgoed_niveau = 'G'
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk bouwjaar
             ON fp.alg_onrgoed_key = bouwjaar.alg_onrgoed_key
                AND bouwjaar.alg_kenmerk_key = 1160                -- Bouwjaar
                AND bouwjaar.alg_onrgoed_niveau = 'G'
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk strategie
             ON fp.alg_onrgoed_key = strategie.alg_onrgoed_key
                AND strategie.alg_kenmerk_key = 1161              -- Strategie
                AND strategie.alg_onrgoed_niveau = 'G';

CREATE OR REPLACE VIEW blcc_v_rap_fact_contractgeg
AS
   WITH ck AS (SELECT sk.vnr, sk.cnt_srtkenmerk_key, sk.cnt_srtkenmerk_omschrijving, kw.cnt_contract_key, kw.waarde
                 FROM (SELECT ROWNUM vnr, cnt_srtkenmerk_key, cnt_srtkenmerk_omschrijving
                         FROM (  SELECT sk.cnt_srtkenmerk_key, sk.cnt_srtkenmerk_omschrijving, sk.cnt_srtkenmerk_aanmaak
                                   FROM cnt_srtkenmerk sk
                                  WHERE sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V')
                                        AND COALESCE (sk.cnt_srtkenmerk_verwijder, SYSDATE) > TO_DATE ('010717', 'ddmmyy')
                                        AND EXISTS (SELECT 1
                                                      FROM cnt_kenmerk
                                                     WHERE cnt_srtcontract_key BETWEEN 621 AND 761
                                                           AND COALESCE (cnt_kenmerk_verwijder, SYSDATE) > TO_DATE ('010717', 'ddmmyy')
                                                           AND cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key)
                               ORDER BY 3)) sk
                      LEFT JOIN
                         (SELECT sk.cnt_srtkenmerk_key, ck.cnt_contract_key,
                                 DECODE (sk.cnt_srtkenmerk_kenmerktype,
                                         'R', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, ck.cnt_kenmerkcontract_waarde),
                                         'S', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, ck.cnt_kenmerkcontract_waarde),
                                         ck.cnt_kenmerkcontract_waarde)
                                    waarde
                            FROM cnt_kenmerkcontract ck, cnt_kenmerk k, cnt_srtkenmerk sk
                           WHERE ck.cnt_kenmerkcontract_verwijder IS NULL
                                 AND ck.cnt_kenmerk_key = k.cnt_kenmerk_key
                                 AND k.cnt_kenmerk_verwijder IS NULL
                                 AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key) kw
                      ON sk.cnt_srtkenmerk_key = kw.cnt_srtkenmerk_key)
   SELECT 0 sortering,
          'Contract' contractnr,                           -- Inclusief versie
          'Contractstatus' contractstatus,                            -- Nieuw
          'Externnr' externnr,                                        -- PO-nr
          'Contractsoort' contractsoort,
          --'Beschrijving' beschrijving,
          --'Mantelnr' mantelnr,
          --'Omschrijving' omschrijving,
          --'Versie' versie,
          --'Dienst' dienst,
          --'Contractafdelingcode' eigenaar_afd,
          --'Contactpersoonlogin' eigenaar_login,
          --'Contractbeheerderlogin' beheerder_login,
          --'Opmerking' opmerking,
          'Debiteurnr' debiteurnr,                                    -- Nieuw
          'Contractant' contractant,
          'Ingangsdatum' ingangsdatum,
          'Rappeldatum' rappeldatum,
          'Opzegdatum' opzegdatum,
          'Einddatum' einddatum,
          --'Bedrijfnaam' bedrijfnaam,               -- Omhoog als contractant
          --'Contactnaam' contactnaam,
          --'Kostenplaatscode' kostenplaatscode,
          --'Contractbedrag' contractbedrag,
          --'Termijnbedrag' termijnbedrag,
          --'Uurtarief' uurtarief,
          'Korting' korting,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 1)) kenmerk1,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 2)) kenmerk2,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 3)) kenmerk3,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 4)) kenmerk4,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 5)) kenmerk5,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 6)) kenmerk6,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 7)) kenmerk7,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 8)) kenmerk8,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 9)) kenmerk9,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 10)) kenmerk10,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 11)) kenmerk11,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 12)) kenmerk12,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 13)) kenmerk13,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 14)) kenmerk14,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 15)) kenmerk15,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 16)) kenmerk16,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 17)) kenmerk17,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 18)) kenmerk18,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 19)) kenmerk19,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 20)) kenmerk20,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 21)) kenmerk21,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 22)) kenmerk22,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 23)) kenmerk23,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 24)) kenmerk24,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 25)) kenmerk25,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 26)) kenmerk26,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 27)) kenmerk27,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 28)) kenmerk28,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 29)) kenmerk29,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 30)) kenmerk30,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 31)) kenmerk31,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 32)) kenmerk32,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 33)) kenmerk33,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 34)) kenmerk34,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 35)) kenmerk35,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 36)) kenmerk36,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 37)) kenmerk37,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 38)) kenmerk38,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 39)) kenmerk39,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 40)) kenmerk40,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 41)) kenmerk41,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 42)) kenmerk42,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 43)) kenmerk43,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 44)) kenmerk44,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 45)) kenmerk45,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 46)) kenmerk46,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 47)) kenmerk47,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 48)) kenmerk48,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 49)) kenmerk49,
          TO_CHAR ((SELECT MAX (cnt_srtkenmerk_omschrijving) FROM ck WHERE vnr = 50)) kenmerk50
     FROM DUAL
   UNION ALL
   SELECT 1 sortering,
          x.cnt_contract_nummer_intern || '.' || COALESCE (x.cnt_contract_versie, '0') contractnr,
          DECODE (x.cnt_contract_status, 1, 'Gesloten', 'Actief') contractstatus, -- Nieuw
          x.cnt_contract_nummer externnr,
          x.ins_discipline_omschrijving contractsoort,
          --x.cnt_contract_omschrijving beschrijving,
          --x.mantelnr,
          --x.cnt_contract_document omschrijving,
          --x.cnt_contract_versie versie,
          --x.prs_dienst_omschrijving dienst,
          --x.prs_afdeling_naam eigenaar_afd,
          --x.login_eig eigenaar_login,
          --x.login_beh beheerder_login,
          --x.cnt_contract_opmerking opmerking,
          x.prs_overeenkomst_nr debiteurnr,
          x.prs_bedrijf_naam contractant,
          TO_CHAR (x.cnt_contract_looptijd_van, 'dd-mm-yyyy') ingangsdatum,
          TO_CHAR (cnt.cnt_getRappeldatum (x.cnt_contract_key), 'dd-mm-yyyy') rappeldatum,
          TO_CHAR (cnt.cnt_getOpzegdatum (x.cnt_contract_key), 'dd-mm-yyyy') opzegdatum,
          TO_CHAR (x.cnt_contract_looptijd_tot, 'dd-mm-yyyy') einddatum,
          --x.prs_bedrijf_naam bedrijfnaam,
          --x.prs_contactpersoon_naam contactnaam,
          --x.prs_kostenplaats_nr kostenplaatscode,
          --TO_CHAR (x.cnt_contract_kosten) contractbedrag,
          --TO_CHAR (x.cnt_contract_termijnkosten) termijnbedrag,
          --TO_CHAR (x.cnt_contract_uurloon) uurtarief,
          TO_CHAR (x.cnt_contract_korting) korting,
          k1.waarde kenmerk1,
          k2.waarde kenmerk2,
          k3.waarde kenmerk3,
          k4.waarde kenmerk4,
          k5.waarde kenmerk5,
          k6.waarde kenmerk6,
          k7.waarde kenmerk7,
          k8.waarde kenmerk8,
          k9.waarde kenmerk9,
          k10.waarde kenmerk10,
          k11.waarde kenmerk11,
          k12.waarde kenmerk12,
          k13.waarde kenmerk13,
          k14.waarde kenmerk14,
          k15.waarde kenmerk15,
          k16.waarde kenmerk16,
          k17.waarde kenmerk17,
          k18.waarde kenmerk18,
          k19.waarde kenmerk19,
          k20.waarde kenmerk20,
          k21.waarde kenmerk21,
          k22.waarde kenmerk22,
          k23.waarde kenmerk23,
          k24.waarde kenmerk24,
          k25.waarde kenmerk25,
          k26.waarde kenmerk26,
          k27.waarde kenmerk27,
          k28.waarde kenmerk28,
          k29.waarde kenmerk29,
          k30.waarde kenmerk30,
          k31.waarde kenmerk31,
          k32.waarde kenmerk32,
          k33.waarde kenmerk33,
          k34.waarde kenmerk34,
          k35.waarde kenmerk35,
          k36.waarde kenmerk36,
          k37.waarde kenmerk37,
          k38.waarde kenmerk38,
          k39.waarde kenmerk39,
          k40.waarde kenmerk40,
          k41.waarde kenmerk41,
          k42.waarde kenmerk42,
          k43.waarde kenmerk43,
          k44.waarde kenmerk44,
          k45.waarde kenmerk45,
          k46.waarde kenmerk46,
          k47.waarde kenmerk47,
          k48.waarde kenmerk48,
          k49.waarde kenmerk49,
          k50.waarde kenmerk50
     FROM (SELECT c.*,
                  cd.ins_discipline_omschrijving,
                  cm.cnt_contract_nummer_intern mantelnr,
                  d.prs_dienst_omschrijving,
                  a.prs_afdeling_naam,
                  eig.prs_perslid_oslogin login_eig,
                  beh.prs_perslid_oslogin login_beh,
                  b.prs_overeenkomst_nr,
                  b.prs_bedrijf_naam,
                  cp.prs_contactpersoon_naam,
                  kp.prs_kostenplaats_nr
             FROM cnt_v_aanwezigcontract c,
                  cnt_discipline cd,
                  cnt_v_aanwezigcontract cm,
                  prs_dienst d,
                  prs_afdeling a,
                  prs_v_aanwezigperslid eig,
                  prs_v_aanwezigperslid beh,
                  prs_v_aanwezigbedrijf b,
                  prs_contactpersoon cp,
                  prs_kostenplaats kp
            WHERE c.ins_discipline_key BETWEEN 621 AND 761
                  AND c.ins_discipline_key = cd.ins_discipline_key
                  AND c.cnt_contract_mantel_key = cm.cnt_contract_key(+)
                  AND c.prs_dienst_key = d.prs_dienst_key(+)
                  AND c.prs_afdeling_key_eig = a.prs_afdeling_key
                  AND c.prs_perslid_key_eig = eig.prs_perslid_key(+)
                  AND c.prs_perslid_key_beh = beh.prs_perslid_key(+)
                  AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                  AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                  AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)) x
          LEFT JOIN ck k1 ON x.cnt_contract_key = k1.cnt_contract_key AND k1.vnr = 1
          LEFT JOIN ck k2 ON x.cnt_contract_key = k2.cnt_contract_key AND k2.vnr = 2
          LEFT JOIN ck k3 ON x.cnt_contract_key = k3.cnt_contract_key AND k3.vnr = 3
          LEFT JOIN ck k4 ON x.cnt_contract_key = k4.cnt_contract_key AND k4.vnr = 4
          LEFT JOIN ck k5 ON x.cnt_contract_key = k5.cnt_contract_key AND k5.vnr = 5
          LEFT JOIN ck k6 ON x.cnt_contract_key = k6.cnt_contract_key AND k6.vnr = 6
          LEFT JOIN ck k7 ON x.cnt_contract_key = k7.cnt_contract_key AND k7.vnr = 7
          LEFT JOIN ck k8 ON x.cnt_contract_key = k8.cnt_contract_key AND k8.vnr = 8
          LEFT JOIN ck k9 ON x.cnt_contract_key = k9.cnt_contract_key AND k9.vnr = 9
          LEFT JOIN ck k10 ON x.cnt_contract_key = k10.cnt_contract_key AND k10.vnr = 10
          LEFT JOIN ck k11 ON x.cnt_contract_key = k11.cnt_contract_key AND k11.vnr = 11
          LEFT JOIN ck k12 ON x.cnt_contract_key = k12.cnt_contract_key AND k12.vnr = 12
          LEFT JOIN ck k13 ON x.cnt_contract_key = k13.cnt_contract_key AND k13.vnr = 13
          LEFT JOIN ck k14 ON x.cnt_contract_key = k14.cnt_contract_key AND k14.vnr = 14
          LEFT JOIN ck k15 ON x.cnt_contract_key = k15.cnt_contract_key AND k15.vnr = 15
          LEFT JOIN ck k16 ON x.cnt_contract_key = k16.cnt_contract_key AND k16.vnr = 16
          LEFT JOIN ck k17 ON x.cnt_contract_key = k17.cnt_contract_key AND k17.vnr = 17
          LEFT JOIN ck k18 ON x.cnt_contract_key = k18.cnt_contract_key AND k18.vnr = 18
          LEFT JOIN ck k19 ON x.cnt_contract_key = k19.cnt_contract_key AND k19.vnr = 19
          LEFT JOIN ck k20 ON x.cnt_contract_key = k20.cnt_contract_key AND k20.vnr = 20
          LEFT JOIN ck k21 ON x.cnt_contract_key = k21.cnt_contract_key AND k21.vnr = 21
          LEFT JOIN ck k22 ON x.cnt_contract_key = k22.cnt_contract_key AND k22.vnr = 22
          LEFT JOIN ck k23 ON x.cnt_contract_key = k23.cnt_contract_key AND k23.vnr = 23
          LEFT JOIN ck k24 ON x.cnt_contract_key = k24.cnt_contract_key AND k24.vnr = 24
          LEFT JOIN ck k25 ON x.cnt_contract_key = k25.cnt_contract_key AND k25.vnr = 25
          LEFT JOIN ck k26 ON x.cnt_contract_key = k26.cnt_contract_key AND k26.vnr = 26
          LEFT JOIN ck k27 ON x.cnt_contract_key = k27.cnt_contract_key AND k27.vnr = 27
          LEFT JOIN ck k28 ON x.cnt_contract_key = k28.cnt_contract_key AND k28.vnr = 28
          LEFT JOIN ck k29 ON x.cnt_contract_key = k29.cnt_contract_key AND k29.vnr = 29
          LEFT JOIN ck k30 ON x.cnt_contract_key = k30.cnt_contract_key AND k30.vnr = 30
          LEFT JOIN ck k31 ON x.cnt_contract_key = k31.cnt_contract_key AND k31.vnr = 31
          LEFT JOIN ck k32 ON x.cnt_contract_key = k32.cnt_contract_key AND k32.vnr = 32
          LEFT JOIN ck k33 ON x.cnt_contract_key = k33.cnt_contract_key AND k33.vnr = 33
          LEFT JOIN ck k34 ON x.cnt_contract_key = k34.cnt_contract_key AND k34.vnr = 34
          LEFT JOIN ck k35 ON x.cnt_contract_key = k35.cnt_contract_key AND k35.vnr = 35
          LEFT JOIN ck k36 ON x.cnt_contract_key = k36.cnt_contract_key AND k36.vnr = 36
          LEFT JOIN ck k37 ON x.cnt_contract_key = k37.cnt_contract_key AND k37.vnr = 37
          LEFT JOIN ck k38 ON x.cnt_contract_key = k38.cnt_contract_key AND k38.vnr = 38
          LEFT JOIN ck k39 ON x.cnt_contract_key = k39.cnt_contract_key AND k39.vnr = 39
          LEFT JOIN ck k40 ON x.cnt_contract_key = k40.cnt_contract_key AND k40.vnr = 40
          LEFT JOIN ck k41 ON x.cnt_contract_key = k41.cnt_contract_key AND k41.vnr = 41
          LEFT JOIN ck k42 ON x.cnt_contract_key = k42.cnt_contract_key AND k42.vnr = 42
          LEFT JOIN ck k43 ON x.cnt_contract_key = k43.cnt_contract_key AND k43.vnr = 43
          LEFT JOIN ck k44 ON x.cnt_contract_key = k44.cnt_contract_key AND k44.vnr = 44
          LEFT JOIN ck k45 ON x.cnt_contract_key = k45.cnt_contract_key AND k45.vnr = 45
          LEFT JOIN ck k46 ON x.cnt_contract_key = k46.cnt_contract_key AND k46.vnr = 46
          LEFT JOIN ck k47 ON x.cnt_contract_key = k47.cnt_contract_key AND k47.vnr = 47
          LEFT JOIN ck k48 ON x.cnt_contract_key = k48.cnt_contract_key AND k48.vnr = 48
          LEFT JOIN ck k49 ON x.cnt_contract_key = k49.cnt_contract_key AND k49.vnr = 49
          LEFT JOIN ck k50 ON x.cnt_contract_key = k50.cnt_contract_key AND k50.vnr = 50;

-- Onderstaande views zijn voor export tbv PowerBI
-- Export voor PowerBI catering
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_cat
(
   result,
   result_order
)
AS
   SELECT    '"debiteur"'
          || ';"organisatie"'
          || ';"locatie"'
          || ';"ruimte"'
          || ';"datum"'
          || ';"tijd_van"'
          || ';"tijd_tot"'
          || ';"resnr"'
          || ';"omschrijving"'
          || ';"artikelkey"'
          || ';"artikelnr"'
          || ';"artikelomschrijving"'
          || ';"aantal"'
          || ';"stuksprijs"'
          || ';"kosten"'
          || ';"besteller"'
          || ';"costcenter"'
          || ';"activiteit"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || fclt_f_debiteur
          || '";"'
          || fclt_f_organisatie
          || '";"'
          || locatie
          || '";"'
          || ruimte
          || '";"'
          || datum
          || '";"'
          || tijd_van
          || '";"'
          || tijd_tot
          || '";"'
          || resnr
          || '";"'
          || omschrijving
          || '";"'
          || artikelkey
          || '";"'
          || artikelnr
          || '";"'
          || artikelomschrijving
          || '";"'
          || aantal
          || '";"'
          || stuksprijs
          || '";"'
          || kosten
          || '";"'
          || fclt_f_besteller
          || '";"'
          || costcenter
          || '";"'
          || activiteit
          || '"',
          1
     FROM blcc_v_rap_cateringoverzicht;

-- Export voor PowerBI meldingen
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_mld
(
   result,
   result_order
)
AS
   SELECT    '"prioriteittxt"'
          || ';"melding_nummer"'
          || ';"vakgroep"'
          || ';"meldingsoort"'
          || ';"melding_datum"'
          || ';"melding_tijd"'
          || ';"melding_locatiecode"'
          || ';"melding_gebouwcode"'
          || ';"melding_verdieping"'
          || ';"melding_ruimtenr"'
          || ';"melding_onderwerp"'
          || ';"melding_omschrijving"'
          || ';"melder"'
          || ';"melding_status"'
          || ';"melding_afhandeling"'
          || ';"melding_behandelaar"'
          || ';"melding_einddatum"'
          || ';"afspraak_sla_uren"'
          || ';"melder_key"'
          || ';"melding_kostenplaats_code"'
          || ';"melding_kostenplaats_groep"'
          || ';"kostensoort_code"'
          || ';"kostensoort_groep"'
          || ';"vakgroeptype"'
          || ';"melding_nummer_parent"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || prioriteittxt
          || '";"'
          || melding_nummer
          || '";"'
          || productgroep
          || '";"'
          || subproductgroep
          || '";"'
          || melding_datum
          || '";"'
          || melding_tijd
          || '";"'
          || melding_locatiecode
          || '";"'
          || melding_gebouwcode
          || '";"'
          || melding_verdieping
          || '";"'
          || melding_ruimtenr
          || '";"'
          || onderwerp
          || '";"'
          || omschrijving
          || '";"'
          || melder
          || '";"'
          || melding_status
          || '";"'
          || melding_opmerking
          || '";"'
          || behandelaar
          || '";"'
          || melding_einddatum
          || '";"'
		  || afspraak_sla_uren
          || '";"'
		  || melder_key
          || '";"'
		  || kostenplaats_code
          || '";"'
		  || kostenplaats_groep
          || '";"'
		  || kostensoort_code
          || '";"'
		  || kostensoort_groep
          || '";"'
		  || vakgroeptype
          || '";"'
		  || melding_nummer_parent
          || '"',
          1
     FROM blcc_v_rap_meldingen;

-- Export voor PowerBI opdrachten
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_opdr
(
   result,
   result_order
)
AS
   SELECT    '"prioriteittxt"'
          || ';"opdracht_nummer"'
          || ';"melding_nummer"'
          || ';"opdracht_type"'
          || ';"opdracht_omschrijving"'
          || ';"opdracht_datum"'
          || ';"opdracht_tijd"'
          || ';"opdracht_status"'
          || ';"opdracht_einddatum_gepland"'
          || ';"opdracht_eindtijd_gepland"'
          || ';"opdracht_uitvoerende"'
          || ';"opdracht_uitvoerende_crednr"'
          || ';"opdracht_behandelaar"'
          || ';"opdracht_kostenplaats_code"'
          || ';"opdracht_kostenplaats_groep"'
          || ';"opdracht_kosten"'
          || ';"opdracht_uren"'
          || ';"opdracht_correctie"'
          || ';"opdracht_materiaal"'
          || ';"opdracht_uurtarief"'
          || ';"opdracht_offerte"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || prioriteittxt
          || '";"'
          || opdracht_nummer
          || '";"'
          || melding_nummer
          || '";"'
          || opdracht_type
          || '";"'
          || omschrijving
          || '";"'
          || opdracht_datum
          || '";"'
          || opdracht_tijd
          || '";"'
          || opdracht_status
          || '";"'
          || opdracht_einddatum
          || '";"'
          || opdracht_eindtijd
          || '";"'
          || opdracht_uitvoerende
          || '";"'
          || opdracht_uitvoerende_crednr
          || '";"'
          || behandelaar
          || '";"'
		  || kostenplaats_code
          || '";"'
		  || kostenplaats_groep
          || '";"'
          || opdracht_kosten
          || '";"'
          || opdracht_uren
          || '";"'
          || opdracht_correctie
          || '";"'
          || opdracht_materiaal
          || '";"'
          || opdracht_uurtarief
          || '";"'
          || opdracht_offerte
          || '"',
          1
     FROM blcc_v_rap_opdrachten;

-- Export voor PowerBI mld-tracking
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_mldtrk
(
   result,
   result_order
)
AS
   SELECT    '"melding_nummer"'
          || ';"wijzigingsdatum"'
          || ';"wijzigingstijdstip"'
          || ';"wijzigingdoor"'
          || ';"wijzigingcode"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || melding
          || '";"'
          || wijzigingsdatum
          || '";"'
          || wijzigingstijdstip
          || '";"'
          || wijzigingdoor
          || '";"'
          || wijzigingcode
          || '"',
          1
     FROM blcc_v_rap_mldtrk;

-- Export voor PowerBI ord-tracking
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_ordtrk
(
   result,
   result_order
)
AS
   SELECT    '"opdracht_nummer"'
          || ';"wijzigingsdatum"'
          || ';"wijzigingstijdstip"'
          || ';"wijzigingdoor"'
          || ';"wijzigingcode"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || opdracht
          || '";"'
          || wijzigingsdatum
          || '";"'
          || wijzigingstijdstip
          || '";"'
          || wijzigingdoor
          || '";"'
          || wijzigingcode
          || '"',
          1
     FROM blcc_v_rap_ordtrk;

-- Export voor PowerBI kosten
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_kosten
(
   result,
   result_order
)
AS
   SELECT    '"kostenplaatsnr"'
          || ';"kostenplaatsgroep"'
          || ';"datum"'
          || ';"aanvrager"'
          || ';"organisatie"'
          || ';"categorie"'
          || ';"referentie"'
          || ';"kostensoortnr"'
          || ';"kostensoort"'
          || ';"bedrag"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || KOSTENPLAATSNR
          || '";"'
          || KOSTENPLAATSGROEP
          || '";"'
          || TO_CHAR (DATUM, 'DD-MM-YYYY')
          || '";"'
          || AANVRAGER
          || '";"'
          || ORGANISATIE
          || '";"'
          || CATEGORIE
          || '";"'
          || REFERENTIE
          || '";"'
          || KOSTENSOORTNR
          || '";"'
          || KOSTENSOORT
          || '";"'
          || TO_CHAR (BEDRAG, 'fm999999999999999990.00')
          || '"',
          1
     FROM fin_v_udr_kostenoverzicht;

-- Export voor PowerBI vastgoed
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_vastgoed
(
   result,
   result_order
)
AS
   SELECT    '"alg_onrgoed_key"'
          || ';"alg_onrgoed_type"'
          || ';"gebouwcode"'
          || ';"verdiepingvolgnr"'
          || ';"verdiepingcode"'
          || ';"ruimtefunctie"'
          || ';"ruimtenummer"'
          || ';"ruimteomschrijving"'
          || ';"vvo"'
          || ';"bvo"'
          || ';"lhkot_class"'
          || ';"contract"'
          || ';"verantw1"'
          || ';"verantw2"'
          || ';"dienstverlener"'
          || ';"eigenaar"'
          || ';"gebouwfunctie"'
          || ';"bouwjaar"'
          || ';"strategie"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || ALG_ONRGOED_KEY
          || '";"'
          || ALG_ONRGOED_TYPE
          || '";"'
          || GEBOUWCODE
          || '";"'
          || VERDIEPINGVOLGNR
          || '";"'
          || VERDIEPINGCODE
          || '";"'
          || RUIMTEFUNCTIE
          || '";"'
          || RUIMTENUMMER
          || '";"'
          || RUIMTEOMSCHRIJVING
          || '";"'
          || VVO
          || '";"'
          || BVO
          || '";"'
          || LHKOT_CLASS
          || '";"'
          || CONTRACT
          || '";"'
          || GEBOUWVERANTW1
          || '";"'
          || GEBOUWVERANTW2
          || '";"'
          || DIENSTVERLENER
          || '";"'
          || EIGENAAR
          || '";"'
          || GEBOUWFUNCTIE
          || '";"'
          || BOUWJAAR
          || '";"'
          || STRATEGIE
          || '"',
          1
     FROM  blcc_v_rap_fact_vastgoedgeg;

-- Export voor PowerBI contracten
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_contract
(
   result,
   result_order
)
AS
   SELECT    '"sortering"'
          || ';"contractnr"'
          || ';"contractstatus"'
          || ';"externnr"'
          || ';"contractsoort"'
          || ';"debiteurnr"'
          || ';"contractant"'
          || ';"ingangsdatum"'
          || ';"rappeldatum"'
          || ';"opzegdatum"'
          || ';"einddatum"'
          || ';"korting"'
          || ';"kenmerk1"'
          || ';"kenmerk2"'
          || ';"kenmerk3"'
          || ';"kenmerk4"'
          || ';"kenmerk5"'
          || ';"kenmerk6"'
          || ';"kenmerk7"'
          || ';"kenmerk8"'
          || ';"kenmerk9"'
          || ';"kenmerk10"'
          || ';"kenmerk11"'
          || ';"kenmerk12"'
          || ';"kenmerk13"'
          || ';"kenmerk14"'
          || ';"kenmerk15"'
          || ';"kenmerk16"'
          || ';"kenmerk17"'
          || ';"kenmerk18"'
          || ';"kenmerk19"'
          || ';"kenmerk20"'
          || ';"kenmerk21"'
          || ';"kenmerk22"'
          || ';"kenmerk23"'
          || ';"kenmerk24"'
          || ';"kenmerk25"'
          || ';"kenmerk26"'
          || ';"kenmerk27"'
          || ';"kenmerk28"'
          || ';"kenmerk29"'
          || ';"kenmerk30"'
          || ';"kenmerk31"'
          || ';"kenmerk32"'
          || ';"kenmerk33"'
          || ';"kenmerk34"'
          || ';"kenmerk35"'
          || ';"kenmerk36"'
          || ';"kenmerk37"'
          || ';"kenmerk38"'
          || ';"kenmerk39"'
          || ';"kenmerk40"'
          || ';"kenmerk41"'
          || ';"kenmerk42"'
          || ';"kenmerk43"'
          || ';"kenmerk44"'
          || ';"kenmerk45"'
          || ';"kenmerk46"'
          || ';"kenmerk47"'
          || ';"kenmerk48"'
          || ';"kenmerk49"'
          || ';"kenmerk50"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || SORTERING
          || '";"'
          || CONTRACTNR
          || '";"'
          || CONTRACTSTATUS
          || '";"'
          || EXTERNNR
          || '";"'
          || CONTRACTSOORT
          || '";"'
          || DEBITEURNR
          || '";"'
          || CONTRACTANT
          || '";"'
          || INGANGSDATUM
          || '";"'
          || RAPPELDATUM
          || '";"'
          || OPZEGDATUM
          || '";"'
          || EINDDATUM
          || '";"'
          || KORTING
          || '";"'
          || KENMERK1
          || '";"'
          || KENMERK2
          || '";"'
          || KENMERK3
          || '";"'
          || KENMERK4
          || '";"'
          || KENMERK5
          || '";"'
          || KENMERK6
          || '";"'
          || KENMERK7
          || '";"'
          || KENMERK8
          || '";"'
          || KENMERK9
          || '";"'
          || KENMERK10
          || '";"'
          || KENMERK11
          || '";"'
          || KENMERK12
          || '";"'
          || KENMERK13
          || '";"'
          || KENMERK14
          || '";"'
          || KENMERK15
          || '";"'
          || KENMERK16
          || '";"'
          || KENMERK17
          || '";"'
          || KENMERK18
          || '";"'
          || KENMERK19
          || '";"'
          || KENMERK20
          || '";"'
          || KENMERK21
          || '";"'
          || KENMERK22
          || '";"'
          || KENMERK23
          || '";"'
          || KENMERK24
          || '";"'
          || KENMERK25
          || '";"'
          || KENMERK26
          || '";"'
          || KENMERK27
          || '";"'
          || KENMERK28
          || '";"'
          || KENMERK29
          || '";"'
          || KENMERK30
          || '";"'
          || KENMERK31
          || '";"'
          || KENMERK32
          || '";"'
          || KENMERK33
          || '";"'
          || KENMERK34
          || '";"'
          || KENMERK35
          || '";"'
          || KENMERK36
          || '";"'
          || KENMERK37
          || '";"'
          || KENMERK38
          || '";"'
          || KENMERK39
          || '";"'
          || KENMERK40
          || '";"'
          || KENMERK41
          || '";"'
          || KENMERK42
          || '";"'
          || KENMERK43
          || '";"'
          || KENMERK44
          || '";"'
          || KENMERK45
          || '";"'
          || KENMERK46
          || '";"'
          || KENMERK47
          || '";"'
          || KENMERK48
          || '";"'
          || KENMERK49
          || '";"'
          || KENMERK50
          || '"',
          1
     FROM  blcc_v_rap_fact_contractgeg;

-- BLCC#53262: Export voor PowerBI additionele diensten
CREATE OR REPLACE VIEW blcc_v_export_pwrbi_addd
(
   result,
   result_order
)
AS
   SELECT    '"code"'
          || ';"valuta"'
          || ';"factuurdatum"'
          || ';"periode"'
          || ';"factuurnummer"'
          || ';"vervaldatum"'
          || ';"nummer"'
          || ';"grtboekrek"'
          || ';"rel/kpl"'
          || ';"prj/activa"'
          || ';"bedrag"'
          || ';"debitcredit"'
          || ';"omschrijving"'
          || ';"btwcode"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || code
          || '";"'
          || valuta
          || '";"'
          || factuurdatum
          || '";"'
          || periode
          || '";"'
          || factuurnummer
          || '";"'
          || vervaldatum
          || '";"'
          || nummer
          || '";"'
          || grtboekrek
          || '";"'
          || rel_kpl
          || '";"'
          || prj_activa
          || '";"'
          || bedrag
          || '";"'
          || debitcredit
          || '";"'
          || omschrijving
          || '";"'
          || btwcode
          || '"',
          1
     FROM blcc_v_rap_export_addd;

-- BLCC#37691: Facturatie verhuur (M2 en meer)!
/* Formatted on 21-4-2017 16:28:58 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW blcc_v_fact_actual
AS
   WITH lopendeperiode AS (SELECT COALESCE (MAX (TO_CHAR (LAST_DAY (fac.safe_to_date (fin_verkoopfactuur_maand, 'yyyymm')) + 1, 'yyyymm')), '201708') maand
                             FROM fin_verkoopfactuur
                            WHERE fin_verkoopfactuur_key > 1)
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,                -- M2 feitelijk!
            'R' || TRIM (SUBSTR (x.cnt_contract_nummer, 1, INSTR (x.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (x.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            TO_CHAR (x.ins_discipline_key) sortering, -- Sorteren op (eigen) discipline_key; 3 posities!
            'Campus Rent' regel,                                         -- M2
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_versie, x.lv,
            x.cnt_contract_korting,                               -- Korting %
            x.prs_bedrijf_key, x.prs_bedrijf_naam prs_debiteur_naam, TRIM (x.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = x.prs_bedrijf_key)
            NULL contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            --x.prs_kostensoort_oms, x.prs_kostensoort_opmerking, x.prs_kostensoort_refcode, x.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', DECODE (x.btw, 0, '0', 'H')) fin_btwtabelwaarde_code,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', DECODE (x.btw, 0, 'Nul', 'Hoog')) fin_btwtabelwaarde_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (x.btw, 0, 0, 21)) fin_btwtabelwaarde_perc,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            ltar.fac_usrdata_prijs l_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            htar.fac_usrdata_prijs h_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            ktar.fac_usrdata_prijs k_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            otar.fac_usrdata_prijs o_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            ttar.fac_usrdata_prijs t_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            pa.alg_onroerendgoed_type,
            pa.alg_onroerendgoed_keys,
            pa.alg_plaatsaanduiding,
            COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))) l_opp,
            COALESCE (fac.safe_to_number (COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))) h_opp,
            COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))) k_opp,
            COALESCE (fac.safe_to_number (COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))) o_opp,
            COALESCE (fac.safe_to_number (COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))) t_opp,
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                   ((COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2)
               mndnet,         -- Netto maandbedrag (incl. kortingspercentage)
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                   ((DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2)
               mndbtw,                                      -- BTW maandbedrag
            '8100' grtboekrek,                     -- Hard op Campus Rent=8100
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (SELECT c.ins_discipline_key,
                    c.cnt_contract_key,
                    c.cnt_contract_nummer_intern, c.cnt_contract_versie,
                    c.cnt_contract_nummer,
                    c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt,
                    c.cnt_contract_korting,
                    b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_overeenkomst_nr,
                    DECODE (b.prs_bedrijf_key,
                            11205, 0,     -- UM=Universiteit Maastricht [1025]
                            11297, 0,           -- Chemelot Ventures BV [1091]
                            11306, 0,                     -- AMIBM(/UM) [1100]
                            0.21) btw,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    lp.maand
               FROM lopendeperiode lp,
                    cnt_v_aanwezigcontract c,
                    prs_bedrijf b,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg
              WHERE c.ins_discipline_key = 621               -- Huurcontracten
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                    AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) x
            LEFT JOIN prs_kenmerklink btwnr
               ON x.prs_bedrijf_key = btwnr.prs_link_key
                  AND btwnr.prs_kenmerklink_verwijder IS NULL
                  AND btwnr.prs_kenmerk_key = 1100          -- BTW-nummer (NL)
            LEFT JOIN prs_kenmerklink btwvl
               ON x.prs_bedrijf_key = btwvl.prs_link_key
                  AND btwvl.prs_kenmerklink_verwijder IS NULL
                  AND btwvl.prs_kenmerk_key = 1120              -- BTW verlegd
            LEFT JOIN cnt_kenmerkcontract vsov_kc
               ON x.cnt_contract_key = vsov_kc.cnt_contract_key
                  AND vsov_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND vsov_kc.cnt_kenmerk_key = 21                     -- VSOV
            LEFT JOIN cnt_kenmerkcontract tt_kc
               ON x.cnt_contract_key = tt_kc.cnt_contract_key
                  AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND tt_kc.cnt_kenmerk_key = 23                -- Tarieftabel
            LEFT JOIN fac_v_aanwezigusrdata tt_ud
               ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
            LEFT JOIN fac_v_aanwezigusrdata ltar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                  AND ltar.fac_usrdata_code = 'L'                  -- L-Tarief
            LEFT JOIN fac_v_aanwezigusrdata htar
               ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                  AND htar.fac_usrdata_code = 'H'                  -- H-Tarief
            LEFT JOIN fac_v_aanwezigusrdata ktar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                  AND ktar.fac_usrdata_code = 'K'                  -- K-Tarief
            LEFT JOIN fac_v_aanwezigusrdata otar
               ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                  AND otar.fac_usrdata_code = 'O'                  -- O-Tarief
            LEFT JOIN fac_v_aanwezigusrdata ttar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                  AND ttar.fac_usrdata_code = 'T'                  -- T-Tarief
            LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
               ON x.cnt_contract_key = ccp.cnt_contract_key
                  AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
            LEFT JOIN alg_v_plaatsaanduiding_all pa
               ON ccp.cnt_alg_plaats_key = pa.alg_onroerendgoed_keys
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
               ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                  AND glo.alg_kenmerk_key = 1082             -- GL-Oppervlakte
                  AND glo.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk gho
               ON ccp.cnt_alg_plaats_key = gho.alg_onrgoed_key
                  AND gho.alg_kenmerk_key = 1083             -- GH-Oppervlakte
                  AND gho.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
               ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                  AND gko.alg_kenmerk_key = 1084             -- GK-Oppervlakte
                  AND gko.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk goo
               ON ccp.cnt_alg_plaats_key = goo.alg_onrgoed_key
                  AND goo.alg_kenmerk_key = 1085             -- GO-Oppervlakte
                  AND goo.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk gto
               ON ccp.cnt_alg_plaats_key = gto.alg_onrgoed_key
                  AND gto.alg_kenmerk_key = 1120             -- GT-Oppervlakte
                  AND gto.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
               ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                  AND vlo.alg_kenmerk_key = 1092             -- VL-Oppervlakte
                  AND vlo.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vho
               ON ccp.cnt_alg_plaats_key = vho.alg_onrgoed_key
                  AND vho.alg_kenmerk_key = 1093             -- VH-Oppervlakte
                  AND vho.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
               ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                  AND vko.alg_kenmerk_key = 1094             -- VK-Oppervlakte
                  AND vko.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk voo
               ON ccp.cnt_alg_plaats_key = voo.alg_onrgoed_key
                  AND voo.alg_kenmerk_key = 1095             -- VO-Oppervlakte
                  AND voo.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vto
               ON ccp.cnt_alg_plaats_key = vto.alg_onrgoed_key
                  AND vto.alg_kenmerk_key = 1121             -- VT-Oppervlakte
                  AND vto.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
               ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                  AND rlhkot.alg_kenmerk_key = 1100     -- LHKOT Classificatie
                  AND rlhkot.alg_onrgoed_niveau = 'R'
            LEFT JOIN alg_v_aanwezigruimte rxo
               ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
      WHERE vsov_kc.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd factureren!
     UNION ALL                                                -- M2 correctie!
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'R' || TRIM (SUBSTR (x.cnt_contract_nummer, 1, INSTR (x.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (x.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            TO_CHAR (x.ins_discipline_key) sortering, -- Sorteren op (eigen) discipline_key; 3 posities!
            'Campus Rent' regel,                                         -- M2
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_versie, x.lv,
            x.cnt_contract_korting,                               -- Korting %
            x.prs_bedrijf_key, x.prs_bedrijf_naam prs_debiteur_naam, TRIM (x.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = x.prs_bedrijf_key)
            NULL contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            --x.prs_kostensoort_oms, x.prs_kostensoort_opmerking, x.prs_kostensoort_refcode, x.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', DECODE (x.btw, 0, '0', 'H')) fin_btwtabelwaarde_code,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', DECODE (x.btw, 0, 'Nul', 'Hoog')) fin_btwtabelwaarde_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (x.btw, 0, 0, 21)) fin_btwtabelwaarde_perc,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            ltar.fac_usrdata_prijs l_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            htar.fac_usrdata_prijs h_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            ktar.fac_usrdata_prijs k_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            otar.fac_usrdata_prijs o_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            ttar.fac_usrdata_prijs t_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            'C' alg_onroerendgoed_type,
            -1 alg_onroerendgoed_keys,
            'Correctie' alg_plaatsaanduiding,
            fac.safe_to_number (clo.cnt_kenmerkcontract_waarde) l_opp,
            fac.safe_to_number (cho.cnt_kenmerkcontract_waarde) h_opp,
            fac.safe_to_number (cko.cnt_kenmerkcontract_waarde) k_opp,
            fac.safe_to_number (coo.cnt_kenmerkcontract_waarde) o_opp,
            fac.safe_to_number (cto.cnt_kenmerkcontract_waarde) t_opp,
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                   ((COALESCE (fac.safe_to_number (clo.cnt_kenmerkcontract_waarde), 0) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (cho.cnt_kenmerkcontract_waarde), 0) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (cko.cnt_kenmerkcontract_waarde), 0) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (coo.cnt_kenmerkcontract_waarde), 0) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                    (COALESCE (fac.safe_to_number (cto.cnt_kenmerkcontract_waarde), 0) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2)
               mndnet,         -- Netto maandbedrag (incl. kortingspercentage)
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                   ((DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (clo.cnt_kenmerkcontract_waarde), 0) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (cho.cnt_kenmerkcontract_waarde), 0) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (cko.cnt_kenmerkcontract_waarde), 0) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (coo.cnt_kenmerkcontract_waarde), 0) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * COALESCE (fac.safe_to_number (cto.cnt_kenmerkcontract_waarde), 0) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2)
               mndbtw,                                      -- BTW maandbedrag
            '8100' grtboekrek,                     -- Hard op Campus Rent=8100
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (SELECT c.ins_discipline_key,
                    c.cnt_contract_key,
                    c.cnt_contract_nummer_intern, c.cnt_contract_versie,
                    c.cnt_contract_nummer,
                    c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt,
                    c.cnt_contract_korting,
                    b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_overeenkomst_nr,
                    DECODE (b.prs_bedrijf_key,
                            11205, 0,     -- UM=Universiteit Maastricht [1025]
                            11297, 0,           -- Chemelot Ventures BV [1091]
                            11306, 0,                     -- AMIBM(/UM) [1100]
                            0.21) btw,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    lp.maand
               FROM lopendeperiode lp,
                    cnt_v_aanwezigcontract c,
                    prs_bedrijf b,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg
              WHERE c.ins_discipline_key = 621               -- Huurcontracten
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                    AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) x
            LEFT JOIN prs_kenmerklink btwnr
               ON x.prs_bedrijf_key = btwnr.prs_link_key
                  AND btwnr.prs_kenmerklink_verwijder IS NULL
                  AND btwnr.prs_kenmerk_key = 1100          -- BTW-nummer (NL)
            LEFT JOIN prs_kenmerklink btwvl
               ON x.prs_bedrijf_key = btwvl.prs_link_key
                  AND btwvl.prs_kenmerklink_verwijder IS NULL
                  AND btwvl.prs_kenmerk_key = 1120              -- BTW verlegd
            LEFT JOIN cnt_kenmerkcontract vsov_kc
               ON x.cnt_contract_key = vsov_kc.cnt_contract_key
                  AND vsov_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND vsov_kc.cnt_kenmerk_key = 21                     -- VSOV
            LEFT JOIN cnt_kenmerkcontract tt_kc
               ON x.cnt_contract_key = tt_kc.cnt_contract_key
                  AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND tt_kc.cnt_kenmerk_key = 23                -- Tarieftabel
            LEFT JOIN fac_v_aanwezigusrdata tt_ud
               ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
            LEFT JOIN fac_v_aanwezigusrdata ltar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                  AND ltar.fac_usrdata_code = 'L'                  -- L-Tarief
            LEFT JOIN fac_v_aanwezigusrdata htar
               ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                  AND htar.fac_usrdata_code = 'H'                  -- H-Tarief
            LEFT JOIN fac_v_aanwezigusrdata ktar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                  AND ktar.fac_usrdata_code = 'K'                  -- K-Tarief
            LEFT JOIN fac_v_aanwezigusrdata otar
               ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                  AND otar.fac_usrdata_code = 'O'                  -- O-Tarief
            LEFT JOIN fac_v_aanwezigusrdata ttar
               ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                  AND ttar.fac_usrdata_code = 'T'                  -- T-Tarief
            LEFT JOIN cnt_kenmerkcontract clo
               ON x.cnt_contract_key = clo.cnt_contract_key
                  AND clo.cnt_kenmerkcontract_verwijder IS NULL
                  AND clo.cnt_kenmerk_key = 381            -- CL-Oppervlakte
            LEFT JOIN cnt_kenmerkcontract cho
               ON x.cnt_contract_key = cho.cnt_contract_key
                  AND cho.cnt_kenmerkcontract_verwijder IS NULL
                  AND cho.cnt_kenmerk_key = 382            -- CH-Oppervlakte
            LEFT JOIN cnt_kenmerkcontract cko
               ON x.cnt_contract_key = cko.cnt_contract_key
                  AND cko.cnt_kenmerkcontract_verwijder IS NULL
                  AND cko.cnt_kenmerk_key = 383            -- CK-Oppervlakte
            LEFT JOIN cnt_kenmerkcontract coo
               ON x.cnt_contract_key = coo.cnt_contract_key
                  AND coo.cnt_kenmerkcontract_verwijder IS NULL
                  AND coo.cnt_kenmerk_key = 384            -- CO-Oppervlakte
            LEFT JOIN cnt_kenmerkcontract cto
               ON x.cnt_contract_key = cto.cnt_contract_key
                  AND cto.cnt_kenmerkcontract_verwijder IS NULL
                  AND cto.cnt_kenmerk_key = 385            -- CT-Oppervlakte
      WHERE vsov_kc.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd factureren!
            AND (   clo.cnt_kenmerkcontract_waarde IS NOT NULL
                 OR cho.cnt_kenmerkcontract_waarde IS NOT NULL
                 OR cko.cnt_kenmerkcontract_waarde IS NOT NULL
                 OR coo.cnt_kenmerkcontract_waarde IS NOT NULL
                 OR cto.cnt_kenmerkcontract_waarde IS NOT NULL)
     UNION ALL                                                          -- FES
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'R' || TRIM (SUBSTR (x.cnt_contract_nummer, 1, INSTR (x.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (x.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            TO_CHAR (x.ins_discipline_key) sortering, -- Sorteren op (eigen) discipline_key; 3 posities!
            DECODE (x.ins_discipline_key, 621, 'Campus Rent', 'Werkplek') regel, -- Hardcoded 'Werkplek'!
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_versie, x.lv,
            TO_NUMBER (NULL) cnt_contract_korting,                -- Korting %
            x.prs_bedrijf_key, x.prs_bedrijf_naam prs_debiteur_naam, TRIM (x.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = x.prs_bedrijf_key)
            NULL contactpersoon,
            x.adres, x.postcode, x.plaats, x.land,
            x.prs_kostenplaats_key, x.prs_kostenplaats_nr, x.prs_kostenplaats_omschrijving, x.prs_kostenplaatsgrp_oms,
            --x.prs_kostensoort_oms, x.prs_kostensoort_opmerking, x.prs_kostensoort_refcode, x.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', DECODE (x.btw, 0, '0', 'H')) fin_btwtabelwaarde_code,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', DECODE (x.btw, 0, 'Nul', 'Hoog')) fin_btwtabelwaarde_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (x.btw, 0, 0, 21)) fin_btwtabelwaarde_perc,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            COALESCE (lfes.fac_usrdata_prijs, 0) / 12 l_tarief,
            TO_NUMBER (NULL) h_tarief,
            COALESCE (kfes.fac_usrdata_prijs, 0) / 12 k_tarief,
            TO_NUMBER (NULL) o_tarief,
            TO_NUMBER (NULL) t_tarief,
            pa.alg_onroerendgoed_type,
            pa.alg_onroerendgoed_keys,
            pa.alg_plaatsaanduiding,
            DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))), 1)
               l_opp,
            TO_NUMBER (NULL) h_opp,
            DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', rxo.alg_ruimte_opp_alt1, TO_NUMBER (NULL))), 1)
               k_opp,
            TO_NUMBER (NULL) o_opp,
            TO_NUMBER (NULL) t_opp,
            -1 *
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)), 1) * (COALESCE (lfes.fac_usrdata_prijs, 0) / 12)) +
                    (DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)), 1) * (COALESCE (kfes.fac_usrdata_prijs, 0) / 12))), 2)
               mndnet,         -- Netto maandbedrag (excl. kortingspercentage)
            -1 *
            ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)), 1) * (COALESCE (lfes.fac_usrdata_prijs, 0) / 12)) +
                    (DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, x.btw) * DECODE (x.ins_discipline_key, 621, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)), 1) * (COALESCE (kfes.fac_usrdata_prijs, 0) / 12))), 2)
               mndbtw,                                      -- BTW maandbedrag
            '8100' grtboekrek,                     -- Hard op Campus Rent=8100
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (SELECT c.ins_discipline_key,
                    c.cnt_contract_key,
                    c.cnt_contract_nummer_intern, c.cnt_contract_versie,
                    c.cnt_contract_nummer,
                    c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt,
                    b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_overeenkomst_nr,
                    DECODE (b.prs_bedrijf_key,
                            11205, 0,     -- UM=Universiteit Maastricht [1025]
                            11297, 0,           -- Chemelot Ventures BV [1091]
                            11306, 0,                     -- AMIBM(/UM) [1100]
                            0.21) btw,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
                    DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
                    kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
                    lp.maand
               FROM lopendeperiode lp,
                    cnt_v_aanwezigcontract c,
                    prs_bedrijf b,
                    prs_kostenplaats kp,
                    prs_kostenplaatsgrp kpg
              WHERE c.ins_discipline_key IN (621, 730) -- Huurcontracten/Werkplek
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                    AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) x
            LEFT JOIN prs_kenmerklink btwnr
               ON x.prs_bedrijf_key = btwnr.prs_link_key
                  AND btwnr.prs_kenmerklink_verwijder IS NULL
                  AND btwnr.prs_kenmerk_key = 1100          -- BTW-nummer (NL)
            LEFT JOIN prs_kenmerklink btwvl
               ON x.prs_bedrijf_key = btwvl.prs_link_key
                  AND btwvl.prs_kenmerklink_verwijder IS NULL
                  AND btwvl.prs_kenmerk_key = 1120              -- BTW verlegd
            LEFT JOIN cnt_kenmerkcontract vsov_kc
               ON x.cnt_contract_key = vsov_kc.cnt_contract_key
                  AND vsov_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND vsov_kc.cnt_kenmerk_key = 21                     -- VSOV
            LEFT JOIN cnt_kenmerkcontract tt_kc
               ON x.cnt_contract_key = tt_kc.cnt_contract_key
                  AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                  AND tt_kc.cnt_kenmerk_key = 23                -- Tarieftabel
            LEFT JOIN fac_v_aanwezigusrdata tt_ud
               ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
            LEFT JOIN fac_v_aanwezigusrdata lfes
               ON tt_ud.fac_usrdata_code = TO_CHAR (lfes.fac_usrtab_key)
                  AND lfes.fac_usrdata_code = 'LFES' -- FES-Tarief op L-Oppervlakte
            LEFT JOIN fac_v_aanwezigusrdata kfes
               ON tt_ud.fac_usrdata_code = TO_CHAR (kfes.fac_usrtab_key)
                  AND kfes.fac_usrdata_code = 'KFES' -- FES-Tarief op K-Oppervlakte
            LEFT JOIN cnt_kenmerkcontract fes
               ON x.cnt_contract_key = fes.cnt_contract_key
                  AND fes.cnt_kenmerkcontract_verwijder IS NULL
                  AND fes.cnt_kenmerk_key = 42                   -- FES-vinkje
            LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
               ON x.cnt_contract_key = ccp.cnt_contract_key
                  AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
            LEFT JOIN alg_v_plaatsaanduiding_all pa
               ON ccp.cnt_alg_plaats_key = pa.alg_onroerendgoed_keys
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
               ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                  AND glo.alg_kenmerk_key = 1082             -- GL-Oppervlakte
                  AND glo.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
               ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                  AND gko.alg_kenmerk_key = 1084             -- GK-Oppervlakte
                  AND gko.alg_onrgoed_niveau = 'G'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
               ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                  AND vlo.alg_kenmerk_key = 1092             -- VL-Oppervlakte
                  AND vlo.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
               ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                  AND vko.alg_kenmerk_key = 1094             -- VK-Oppervlakte
                  AND vko.alg_onrgoed_niveau = 'V'
            LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
               ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                  AND rlhkot.alg_kenmerk_key = 1100     -- LHKOT Classificatie
                  AND rlhkot.alg_onrgoed_niveau = 'R'
            LEFT JOIN alg_v_aanwezigruimte rxo
               ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
      WHERE vsov_kc.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd factureren!
        AND fes.cnt_kenmerkcontract_waarde IS NOT NULL
     UNION ALL                                                     -- CFF Rent
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'R' || TRIM (SUBSTR (x.cnt_contract_nummer, 1, INSTR (x.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (x.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            TO_CHAR (x.ins_discipline_key) sortering, -- Sorteren op (eigen) discipline_key; 3 posities!
            'CFF Rent' regel,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            x.cnt_contract_key, x.cnt_contract_nummer_intern, x.cnt_contract_versie, x.lv,
            x.fac_usrdata_prijs,                  -- CFF-subsidiepercentatie %
            b.prs_bedrijf_key, b.prs_bedrijf_naam prs_debiteur_naam, TRIM (b.prs_overeenkomst_nr) debiteur_nr,
            x.btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = b.prs_bedrijf_key)
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
            kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
            DECODE (btw_vl, '1', 'V', '0') fin_btwtabelwaarde_code,
            DECODE (btw_vl, '1', 'Verlegd', 'Nul') fin_btwtabelwaarde_oms,
            DECODE (btw_vl, '1', 0, 0) fin_btwtabelwaarde_perc,
            DECODE (btw_vl, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            TO_NUMBER (NULL) l_tarief, TO_NUMBER (NULL) h_tarief, TO_NUMBER (NULL) k_tarief, TO_NUMBER (NULL) o_tarief, TO_NUMBER (NULL) t_tarief,
            NULL alg_onroerendgoed_type, TO_NUMBER (NULL) alg_onroerendgoed_keys, NULL alg_plaatsaanduiding,
            TO_NUMBER (NULL) l_opp, TO_NUMBER (NULL) h_opp, TO_NUMBER (NULL) k_opp, TO_NUMBER (NULL) o_opp, TO_NUMBER (NULL) t_opp,
            -1 *
            ROUND (x.fac_usrdata_prijs *
                   (x.mndopp - x.mndfes -
                    (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                     fac.safe_to_number (x.cnt_kenmerkcontract_waarde))), 2)
               mndnet,         -- Netto maandbedrag (incl. kortingspercentage)
            ---1 *
            --ROUND (x.fac_usrdata_prijs * x.btw *
            --       (x.mndnet - x.mndfes -
            --        (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
            --         fac.safe_to_number (x.cnt_kenmerkcontract_waarde))), 2)
            --   mndbtw                                       -- BTW maandbedrag
            0 mndbtw, -- BTW maandbedrag; TODO: Dit is fout, maar ging in oude werkwijze altijd al zo, dus fout voorlopig niet verbeteren!
            '8310' grtboekrek,                        -- Hard op CFF Rent=8310
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (  SELECT x.ins_discipline_key, -- Sorteren op (eigen) discipline_key; 3 posities!
                      x.cnt_contract_key,
                      x.cnt_contract_nummer_intern, x.cnt_contract_versie,
                      x.cnt_contract_nummer,                             -- PO
                      x.lv, x.lt,
                      x.prs_bedrijf_key,
                      x.btw,
                      x.prs_kostenplaats_key,
                      x.maand,
                      btwnr.prs_kenmerklink_waarde btw_nr,
                      btwvl.prs_kenmerklink_waarde btw_vl,
                      kb_kc.cnt_kenmerkcontract_waarde, -- Netto kortingsbedrag (excl. kortingspercentage)!
                      ccf_ud.fac_usrdata_prijs,   -- CFF-subsidiepercentatie %
                      --SUM (ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                      --            ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                      --            ((COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (clo.cnt_kenmerkcontract_waarde), 0) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (cho.cnt_kenmerkcontract_waarde), 0) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (cko.cnt_kenmerkcontract_waarde), 0) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (coo.cnt_kenmerkcontract_waarde), 0) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (cto.cnt_kenmerkcontract_waarde), 0) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2))
                      SUM (ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                                  ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                                  ((COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                                   (COALESCE (fac.safe_to_number (COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                                   (COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                                   (COALESCE (fac.safe_to_number (COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                                   (COALESCE (fac.safe_to_number (COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))), 2))
                         mndopp, -- Netto maandbedrag alle meters (incl. kortingspercentage)
                      --SUM (ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                      --            ((DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (lfes.fac_usrdata_prijs / 12, 0)) +
                      --             (DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (kfes.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (clo.cnt_kenmerkcontract_waarde), 0) * COALESCE (lfes.fac_usrdata_prijs / 12, 0)) +
                      --             (COALESCE (fac.safe_to_number (cko.cnt_kenmerkcontract_waarde), 0) * COALESCE (kfes.fac_usrdata_prijs / 12, 0))), 2))
                      SUM (ROUND (((LEAST (TRUNC (x.lt), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (x.lv), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                                  ((DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (lfes.fac_usrdata_prijs / 12, 0)) +
                                   (DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (kfes.fac_usrdata_prijs / 12, 0))), 2))
                         mndfes  -- Netto maandbedrag FES-korting (excl. kortingspercentage)
                 FROM (SELECT c.ins_discipline_key,
                              c.cnt_contract_key,
                              c.cnt_contract_nummer_intern, c.cnt_contract_versie,
                              c.cnt_contract_nummer,
                              c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt,
                              c.cnt_prs_bedrijf_key prs_bedrijf_key,
                              DECODE (c.cnt_prs_bedrijf_key,
                                      11205, 0, -- UM=Universiteit Maastricht [1025]
                                      11297, 0, -- Chemelot Ventures BV [1091]
                                      11306, 0,           -- AMIBM(/UM) [1100]
                                      0.21)
                                 btw,
                              c.prs_kostenplaats_key,
                              c.cnt_contract_korting,
                              lp.maand
                         FROM lopendeperiode lp, cnt_v_aanwezigcontract c
                        WHERE c.ins_discipline_key = 621     -- Huurcontracten
                              AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                              AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                              AND c.cnt_contract_status = 0) x -- NIET Gesloten
                      LEFT JOIN prs_kenmerklink btwnr
                         ON x.prs_bedrijf_key = btwnr.prs_link_key
                            AND btwnr.prs_kenmerklink_verwijder IS NULL
                            AND btwnr.prs_kenmerk_key = 1100 -- BTW-nummer (NL)
                      LEFT JOIN prs_kenmerklink btwvl
                         ON x.prs_bedrijf_key = btwvl.prs_link_key
                            AND btwvl.prs_kenmerklink_verwijder IS NULL
                            AND btwvl.prs_kenmerk_key = 1120    -- BTW verlegd
                      LEFT JOIN cnt_kenmerkcontract vsov_kc
                         ON x.cnt_contract_key = vsov_kc.cnt_contract_key
                            AND vsov_kc.cnt_kenmerkcontract_verwijder IS NULL
                            AND vsov_kc.cnt_kenmerk_key = 21           -- VSOV
                      LEFT JOIN cnt_kenmerkcontract kb_kc
                         ON x.cnt_contract_key = kb_kc.cnt_contract_key
                            AND kb_kc.cnt_kenmerkcontract_verwijder IS NULL
                            AND kb_kc.cnt_kenmerk_key = 24   -- Kortingsbedrag
                      LEFT JOIN cnt_kenmerkcontract cff_kc
                         ON x.cnt_contract_key = cff_kc.cnt_contract_key
                            AND cff_kc.cnt_kenmerkcontract_verwijder IS NULL
                            AND cff_kc.cnt_kenmerk_key = 44    -- CFF-subsidie
                      LEFT JOIN fac_v_aanwezigusrdata ccf_ud
                         ON cff_kc.cnt_kenmerkcontract_waarde = TO_CHAR (ccf_ud.fac_usrdata_key)
                      LEFT JOIN cnt_kenmerkcontract tt_kc
                         ON x.cnt_contract_key = tt_kc.cnt_contract_key
                            AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                            AND tt_kc.cnt_kenmerk_key = 23      -- Tarieftabel
                      LEFT JOIN fac_v_aanwezigusrdata tt_ud
                         ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
                      LEFT JOIN fac_v_aanwezigusrdata ltar
                         ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                            AND ltar.fac_usrdata_code = 'L'        -- L-Tarief
                      LEFT JOIN fac_v_aanwezigusrdata htar
                         ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                            AND htar.fac_usrdata_code = 'H'        -- H-Tarief
                      LEFT JOIN fac_v_aanwezigusrdata ktar
                         ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                            AND ktar.fac_usrdata_code = 'K'        -- K-Tarief
                      LEFT JOIN fac_v_aanwezigusrdata otar
                         ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                            AND otar.fac_usrdata_code = 'O'        -- O-Tarief
                      LEFT JOIN fac_v_aanwezigusrdata ttar
                         ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                            AND ttar.fac_usrdata_code = 'T'        -- T-Tarief
                      LEFT JOIN fac_v_aanwezigusrdata lfes
                         ON tt_ud.fac_usrdata_code = TO_CHAR (lfes.fac_usrtab_key)
                            AND lfes.fac_usrdata_code = 'LFES' -- FES-Tarief op L-Oppervlakte
                      LEFT JOIN fac_v_aanwezigusrdata kfes
                         ON tt_ud.fac_usrdata_code = TO_CHAR (kfes.fac_usrtab_key)
                            AND kfes.fac_usrdata_code = 'KFES' -- FES-Tarief op K-Oppervlakte
                      LEFT JOIN cnt_kenmerkcontract fes
                         ON x.cnt_contract_key = fes.cnt_contract_key
                            AND fes.cnt_kenmerkcontract_verwijder IS NULL
                            AND fes.cnt_kenmerk_key = 42         -- FES-vinkje
                      LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
                         ON x.cnt_contract_key = ccp.cnt_contract_key
                            AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
                      LEFT JOIN alg_v_plaatsaanduiding_all pa
                         ON ccp.cnt_alg_plaats_key = pa.alg_onroerendgoed_keys
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
                         ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                            AND glo.alg_kenmerk_key = 1082   -- GL-Oppervlakte
                            AND glo.alg_onrgoed_niveau = 'G'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk gho
                         ON ccp.cnt_alg_plaats_key = gho.alg_onrgoed_key
                            AND gho.alg_kenmerk_key = 1083   -- GH-Oppervlakte
                            AND gho.alg_onrgoed_niveau = 'G'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
                         ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                            AND gko.alg_kenmerk_key = 1084   -- GK-Oppervlakte
                            AND gko.alg_onrgoed_niveau = 'G'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk goo
                         ON ccp.cnt_alg_plaats_key = goo.alg_onrgoed_key
                            AND goo.alg_kenmerk_key = 1085   -- GO-Oppervlakte
                            AND goo.alg_onrgoed_niveau = 'G'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk gto
                         ON ccp.cnt_alg_plaats_key = gto.alg_onrgoed_key
                            AND gto.alg_kenmerk_key = 1120   -- GT-Oppervlakte
                            AND gto.alg_onrgoed_niveau = 'G'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
                         ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                            AND vlo.alg_kenmerk_key = 1092   -- VL-Oppervlakte
                            AND vlo.alg_onrgoed_niveau = 'V'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk vho
                         ON ccp.cnt_alg_plaats_key = vho.alg_onrgoed_key
                            AND vho.alg_kenmerk_key = 1093   -- VH-Oppervlakte
                            AND vho.alg_onrgoed_niveau = 'V'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
                         ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                            AND vko.alg_kenmerk_key = 1094   -- VK-Oppervlakte
                            AND vko.alg_onrgoed_niveau = 'V'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk voo
                         ON ccp.cnt_alg_plaats_key = voo.alg_onrgoed_key
                            AND voo.alg_kenmerk_key = 1095   -- VO-Oppervlakte
                            AND voo.alg_onrgoed_niveau = 'V'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk vto
                         ON ccp.cnt_alg_plaats_key = vto.alg_onrgoed_key
                            AND vto.alg_kenmerk_key = 1121   -- VT-Oppervlakte
                            AND vto.alg_onrgoed_niveau = 'V'
                      LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
                         ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                            AND rlhkot.alg_kenmerk_key = 1100 -- LHKOT Classificatie
                            AND rlhkot.alg_onrgoed_niveau = 'R'
                      LEFT JOIN alg_v_aanwezigruimte rxo
                         ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
                      LEFT JOIN cnt_kenmerkcontract clo
                         ON x.cnt_contract_key = clo.cnt_contract_key
                            AND clo.cnt_kenmerkcontract_verwijder IS NULL
                            AND clo.cnt_kenmerk_key = 381    -- CL-Oppervlakte
                      LEFT JOIN cnt_kenmerkcontract cho
                         ON x.cnt_contract_key = cho.cnt_contract_key
                            AND cho.cnt_kenmerkcontract_verwijder IS NULL
                            AND cho.cnt_kenmerk_key = 382    -- CH-Oppervlakte
                      LEFT JOIN cnt_kenmerkcontract cko
                         ON x.cnt_contract_key = cko.cnt_contract_key
                            AND cko.cnt_kenmerkcontract_verwijder IS NULL
                            AND cko.cnt_kenmerk_key = 383    -- CK-Oppervlakte
                      LEFT JOIN cnt_kenmerkcontract coo
                         ON x.cnt_contract_key = coo.cnt_contract_key
                            AND coo.cnt_kenmerkcontract_verwijder IS NULL
                            AND coo.cnt_kenmerk_key = 384    -- CO-Oppervlakte
                      LEFT JOIN cnt_kenmerkcontract cto
                         ON x.cnt_contract_key = cto.cnt_contract_key
                            AND cto.cnt_kenmerkcontract_verwijder IS NULL
                            AND cto.cnt_kenmerk_key = 385    -- CT-Oppervlakte
                WHERE vsov_kc.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd factureren!
                      AND COALESCE (cff_kc.cnt_kenmerkcontract_waarde, '534') != '534' -- NIET Nvt!
             GROUP BY x.ins_discipline_key,
                      x.cnt_contract_key,
                      x.cnt_contract_nummer_intern, x.cnt_contract_versie,
                      x.cnt_contract_nummer,
                      x.lv, x.lt,
                      x.prs_bedrijf_key,
                      x.btw,
                      x.prs_kostenplaats_key,
                      x.maand,
                      btwnr.prs_kenmerklink_waarde,
                      btwvl.prs_kenmerklink_waarde,
                      kb_kc.cnt_kenmerkcontract_waarde,
                      ccf_ud.fac_usrdata_prijs) x,
            prs_bedrijf b,
            prs_kostenplaats kp,
            prs_kostenplaatsgrp kpg
      WHERE x.prs_bedrijf_key = b.prs_bedrijf_key
            AND x.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
     UNION ALL                              -- Alle individuele maandbedragen!
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'R' || TRIM (SUBSTR (c.cnt_contract_nummer, 1, INSTR (c.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (c.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            DECODE (x.regelgroepering, '541', '621', TO_CHAR (c.ins_discipline_key)) sortering, -- Sorteren op Campus Rent of eigen discipline_key; 3 posities!
            x.regel,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_versie, c.cnt_contract_looptijd_tot lv,
            c.cnt_contract_korting,                               -- Korting %
            b.prs_bedrijf_key, b.prs_bedrijf_naam prs_debiteur_naam, TRIM (b.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = b.prs_bedrijf_key)
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
            kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
            --ks.prs_kostensoort_oms, ks.prs_kostensoort_opmerking, ks.prs_kostensoort_refcode, ksg.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', DECODE (c.ins_discipline_key, 761, '0', 'H')) fin_btwtabelwaarde_code, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', DECODE (c.ins_discipline_key, 761, 'Nul', 'Hoog')) fin_btwtabelwaarde_oms, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (c.ins_discipline_key, 761, 0, 21)) fin_btwtabelwaarde_perc, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            TO_NUMBER (NULL) l_tarief, TO_NUMBER (NULL) h_tarief, TO_NUMBER (NULL) k_tarief, TO_NUMBER (NULL) o_tarief, TO_NUMBER (NULL) t_tarief,
            NULL alg_onroerendgoed_type, TO_NUMBER (NULL) alg_onroerendgoed_keys, NULL alg_plaatsaanduiding,
            TO_NUMBER (NULL) l_opp, TO_NUMBER (NULL) h_opp, TO_NUMBER (NULL) k_opp, TO_NUMBER (NULL) o_opp, TO_NUMBER (NULL) t_opp,
            ROUND (((LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (c.cnt_contract_korting, 0)) / 100) *
                   x.maandkosten, 2)
               mndnet,         -- Netto maandbedrag (incl. kortingspercentage)
            ROUND (((LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   ((100 - COALESCE (c.cnt_contract_korting, 0)) / 100) *
                   DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (c.ins_discipline_key, 761, 0, 0.21)) *
                   x.maandkosten, 2)
               mndbtw,                                      -- BTW maandbedrag
            COALESCE (
               ks.prs_kostensoort_refcode,
               DECODE (
                  UPPER (x.regel),
                  'BIJDRAGE CHEF VAN DIENST', '8104',
                  'BIJDRAGE HYGIËNISCH ONDERHOUD', '8105',
                  'BIJDRAGE AFVAL', '8106',
                  'BIJDRAGE GASSEN', '8107',
                  'PARKING', '8112',
                  'PUBLIC AMENITIES', '8113',
                  '8100'))
               grtboekrek,
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (  SELECT c.cnt_contract_key,
                      lp.maand,
                      rg.cnt_kenmerkcontract_waarde regelgroepering,
                      DECODE (rg.cnt_kenmerkcontract_waarde,
                              '542', TRIM (dp.cnt_disc_params_opmerking),
                              '543', TRIM (mk.cnt_srtkenmerk_omschrijving),
                              'Campus Rent')
                         regel,
                      SUM (fac.safe_to_number (mk.cnt_kenmerkcontract_waarde)) maandkosten
                 FROM lopendeperiode lp, cnt_v_aanwezigcontract c, cnt_discipline cd, cnt_disc_params dp,
                      (SELECT kcrg.cnt_contract_key, kcrg.cnt_kenmerkcontract_waarde
                         FROM cnt_kenmerkcontract kcrg, cnt_kenmerk krg
                        WHERE kcrg.cnt_kenmerkcontract_verwijder IS NULL
                          AND kcrg.cnt_kenmerk_key = krg.cnt_kenmerk_key
                          AND krg.cnt_srtkenmerk_key = 121) rg, -- Regelgroepering
                      (SELECT kcmk.cnt_contract_key, kcmk.cnt_kenmerkcontract_waarde, skmk.cnt_srtkenmerk_omschrijving
                         FROM cnt_kenmerkcontract kcmk, cnt_kenmerk kmk, cnt_srtkenmerk skmk
                        WHERE kcmk.cnt_kenmerkcontract_verwijder IS NULL
                          AND kcmk.cnt_kenmerk_key = kmk.cnt_kenmerk_key
                          AND kmk.cnt_srtkenmerk_key = skmk.cnt_srtkenmerk_key
                          AND skmk.cnt_srtkenmerk_key > 60
                          AND skmk.cnt_srtkenmerk_kenmerktype = 'N' -- Numeriek
                          AND UPPER (skmk.cnt_srtkenmerk_dimensie) LIKE '%P.MND.%') mk -- Maandkosten
                WHERE c.ins_discipline_key = cd.ins_discipline_key
                      AND cd.ins_discipline_key BETWEEN 721 AND 761
                      AND cd.ins_discipline_key = dp.cnt_ins_discipline_key
                      AND c.cnt_contract_status = 0           -- NIET Gesloten
                      AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                      AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                      AND c.cnt_contract_key = rg.cnt_contract_key
                      AND c.cnt_contract_key = mk.cnt_contract_key
             GROUP BY c.cnt_contract_key,
                      lp.maand,
                      rg.cnt_kenmerkcontract_waarde,        -- Regelgroepering
                      DECODE (rg.cnt_kenmerkcontract_waarde,
                              '542', TRIM (dp.cnt_disc_params_opmerking),
                              '543', TRIM (mk.cnt_srtkenmerk_omschrijving),
                              'Campus Rent')) x,
            cnt_contract c,
            prs_bedrijf b,
            prs_kostenplaats kp,
            prs_kostenplaatsgrp kpg,
            cnt_discipline cd,
            prs_kostensoort ks,
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl -- BTW verlegd
      WHERE x.maandkosten != 0
            AND x.cnt_contract_key = c.cnt_contract_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
            AND c.ins_discipline_key = cd.ins_discipline_key
            AND cd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND c.cnt_prs_bedrijf_key = btwnr.prs_link_key(+)
            AND c.cnt_prs_bedrijf_key = btwvl.prs_link_key(+)
     UNION ALL               -- Alle individuele kortingsbedragen (per maand)!
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'R' || TRIM (SUBSTR (c.cnt_contract_nummer, 1, INSTR (c.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Regulier
            TRIM (c.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            DECODE (x.regelgroepering, '541', '621', TO_CHAR (c.ins_discipline_key)) sortering, -- Sorteren op Campus Rent of eigen discipline_key; 3 posities!
            x.regel,
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_versie, c.cnt_contract_looptijd_tot lv,
            TO_NUMBER (NULL) cnt_contract_korting,                -- Korting %
            b.prs_bedrijf_key, b.prs_bedrijf_naam prs_debiteur_naam,  TRIM (b.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = b.prs_bedrijf_key)
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
            kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
            --ks.prs_kostensoort_oms, ks.prs_kostensoort_opmerking, ks.prs_kostensoort_refcode, ksg.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'V', DECODE (c.ins_discipline_key, 761, '0', 'H')) fin_btwtabelwaarde_code, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 'Verlegd', DECODE (c.ins_discipline_key, 761, 'Nul', 'Hoog')) fin_btwtabelwaarde_oms, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (c.ins_discipline_key, 761, 0, 21)) fin_btwtabelwaarde_perc, -- OZB altijd 0%
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            x.maand,
            TO_CHAR (TO_DATE (x.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            TO_NUMBER (NULL) l_tarief, TO_NUMBER (NULL) h_tarief, TO_NUMBER (NULL) k_tarief, TO_NUMBER (NULL) o_tarief, TO_NUMBER (NULL) t_tarief,
            NULL alg_onroerendgoed_type, TO_NUMBER (NULL) alg_onroerendgoed_keys, NULL alg_plaatsaanduiding,
            TO_NUMBER (NULL) l_opp, TO_NUMBER (NULL) h_opp, TO_NUMBER (NULL) k_opp, TO_NUMBER (NULL) o_opp, TO_NUMBER (NULL) t_opp,
            -1 *
            ROUND (((LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   x.kortingsbedrag, 2)
               mndnet,     -- Netto kortingsbedrag (excl. kortingspercentage)!
            -1 *
            ROUND (((LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (x.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (x.maand, 'yyyymm')) + 1) / (LAST_DAY (TO_DATE (x.maand, 'yyyymm')) - TO_DATE (x.maand, 'yyyymm') + 1)) *
                   DECODE (btwvl.prs_kenmerklink_waarde, '1', 0, DECODE (c.ins_discipline_key, 761, 0, 0.21)) *
                   x.kortingsbedrag, 2)
               mndbtw,                                   -- BTW kortingsbedrag
            COALESCE (
               ks.prs_kostensoort_refcode,
               DECODE (
                  UPPER (x.regel),
                  'BIJDRAGE CHEF VAN DIENST', '8104',
                  'BIJDRAGE HYGIËNISCH ONDERHOUD', '8105',
                  'BIJDRAGE AFVAL', '8106',
                  'BIJDRAGE GASSEN', '8107',
                  'PARKING', '8112',
                  'PUBLIC AMENITIES', '8113',
                  '8100'))
               grtboekrek,
            TO_NUMBER (NULL) mld_melding_key,          -- Correctiemelding-key
            NULL mld_melding_omschrijving
       FROM (SELECT c.cnt_contract_key,
                    lp.maand,
                    rg.cnt_kenmerkcontract_waarde regelgroepering,
                    DECODE (rg.cnt_kenmerkcontract_waarde,
                            '542', TRIM (dp.cnt_disc_params_opmerking),
                            '543', '???', -- TODO: Kortingsbedrag verwijderen?
                            'Campus Rent')
                       regel,
                    fac.safe_to_number (kb.cnt_kenmerkcontract_waarde) kortingsbedrag
               FROM lopendeperiode lp, cnt_v_aanwezigcontract c, cnt_discipline cd, cnt_disc_params dp,
                    (SELECT kcrg.cnt_contract_key, kcrg.cnt_kenmerkcontract_waarde
                       FROM cnt_kenmerkcontract kcrg, cnt_kenmerk krg
                      WHERE kcrg.cnt_kenmerkcontract_verwijder IS NULL
                        AND kcrg.cnt_kenmerk_key = krg.cnt_kenmerk_key
                        AND krg.cnt_srtkenmerk_key = 121) rg, -- Regelgroepering
                    (SELECT kckb.cnt_contract_key, kckb.cnt_kenmerkcontract_waarde
                       FROM cnt_kenmerkcontract kckb, cnt_kenmerk kkb, cnt_srtkenmerk skkb
                      WHERE kckb.cnt_kenmerkcontract_verwijder IS NULL
                        AND kckb.cnt_kenmerk_key = kkb.cnt_kenmerk_key
                        AND kkb.cnt_srtkenmerk_key = skkb.cnt_srtkenmerk_key
                        AND skkb.cnt_srtkenmerk_key = 44) kb -- Kortingsbedrag
              WHERE c.ins_discipline_key = cd.ins_discipline_key
                    AND cd.ins_discipline_key BETWEEN 621 AND 761
                    AND cd.ins_discipline_key = dp.cnt_ins_discipline_key
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_key = rg.cnt_contract_key(+) -- Huurcontracten géén Regelgroepering!
                    AND c.cnt_contract_key = kb.cnt_contract_key) x,
            cnt_contract c,
            prs_bedrijf b,
            prs_kostenplaats kp,
            prs_kostenplaatsgrp kpg,
            cnt_discipline cd,
            prs_kostensoort ks,
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl -- BTW verlegd
      WHERE x.kortingsbedrag != 0
            AND x.cnt_contract_key = c.cnt_contract_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
            AND c.ins_discipline_key = cd.ins_discipline_key
            AND cd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND c.cnt_prs_bedrijf_key = btwnr.prs_link_key(+)
            AND c.cnt_prs_bedrijf_key = btwvl.prs_link_key(+)
     UNION ALL -- Alle correctiemeldingen (ook als contract inmiddels verlopen)!
     SELECT '*CONCEPT*' fin_verkoopfactuur_id,
            'X' || TRIM (SUBSTR (c.cnt_contract_nummer, 1, INSTR (c.cnt_contract_nummer || '/', '/') - 1)) po_nr, -- Correctie
            TRIM (c.cnt_contract_nummer) cnt_contract_nummer,            -- PO
            SUBSTR ('99' || fr.sortering, -3) sortering, -- Correctieregels onderaan (in dezelfde volgorde als de "echte" regels); 3 posities!
            ' Correctie ' || fr.factuurregel || ' ' || pv.periode_van || ' - ' || pt.periode_tot  regel, -- Zou consistent moeten zijn met contract!
            TO_CHAR (SYSDATE, 'dd-mm-yyyy') factuurdatum, TO_CHAR (SYSDATE + 30, 'dd-mm-yyyy') vervaldatum,
            c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_versie, c.cnt_contract_looptijd_tot lv,
            c.cnt_contract_korting,                               -- Korting %
            b.prs_bedrijf_key, b.prs_bedrijf_naam prs_debiteur_naam, TRIM (b.prs_overeenkomst_nr) debiteur_nr,
            btwnr.prs_kenmerklink_waarde btw_nr,
            --(SELECT MIN (TRIM (prs_contactpersoon_voorletters || ' ' || TRIM (prs_contactpersoon_tussenv || ' ' || prs_contactpersoon_naam)))
            --   FROM prs_contactpersoon
            --  WHERE prs_contactpersoon_verwijder IS NULL
            --        AND prs_contactpersoon_titel = '*' -- Contactpersoon op facturen
            --        AND prs_bedrijf_key = b.prs_bedrijf_key)
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land,
            kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr, kp.prs_kostenplaats_omschrijving, kpg.prs_kostenplaatsgrp_oms,
            --ks.prs_kostensoort_oms, ks.prs_kostensoort_opmerking, ks.prs_kostensoort_refcode, ksg.prs_kostensoortgrp_oms,
            DECODE (btwvl.prs_kenmerklink_waarde,
                    '1', 'V',
                    DECODE (c.ins_discipline_key,
                            621, DECODE (b.prs_bedrijf_key,      -- Huurcontracten
                                         11205, '0',                  -- UM [1025]
                                         11297, '0',   -- Chemelot Ventures [1091]
                                         11306, '0',          -- AMIBM(/UM) [1100]
                                         DECODE (fr.factuurregel, 'CFF Rent', '0', 'H')),
                            730, DECODE (b.prs_bedrijf_key,            -- Werkplek
                                         11205, '0',                  -- UM [1025]
                                         11297, '0',   -- Chemelot Ventures [1091]
                                         11306, '0',          -- AMIBM(/UM) [1100]
                                         'H'),
                            761, '0',                                       -- OZB
                            'H')) fin_btwtabelwaarde_code,
            DECODE (btwvl.prs_kenmerklink_waarde,
                    '1', 'Verlegd',
                    DECODE (c.ins_discipline_key,
                            621, DECODE (b.prs_bedrijf_key,      -- Huurcontracten
                                         11205, 'Nul',                -- UM [1025]
                                         11297, 'Nul',   -- Chemelot Ventures [1091]
                                         11306, 'Nul',        -- AMIBM(/UM) [1100]
                                         DECODE (fr.factuurregel, 'CFF Rent', 'Nul', 'Hoog')),
                            730, DECODE (b.prs_bedrijf_key,            -- Werkplek
                                         11205, 'Nul',                -- UM [1025]
                                         11297, 'Nul', -- Chemelot Ventures [1091]
                                         11306, 'Nul',        -- AMIBM(/UM) [1100]
                                         'Hoog'),
                            761, 'Nul',                                     -- OZB
                            'Hoog')) fin_btwtabelwaarde_oms,
            DECODE (btwvl.prs_kenmerklink_waarde,
                    '1', 0,
                    DECODE (c.ins_discipline_key,
                            621, DECODE (b.prs_bedrijf_key,      -- Huurcontracten
                                         11205, 0,                    -- UM [1025]
                                         11297, 0,     -- Chemelot Ventures [1091]
                                         11306, 0,            -- AMIBM(/UM) [1100]
                                         DECODE (fr.factuurregel, 'CFF Rent', 0, 21)),
                            730, DECODE (b.prs_bedrijf_key,            -- Werkplek
                                         11205, 0,                    -- UM [1025]
                                         11297, 0,     -- Chemelot Ventures [1091]
                                         11306, 0,            -- AMIBM(/UM) [1100]
                                         21),
                            761, 0,                                         -- OZB
                            21)) fin_btwtabelwaarde_perc,
            DECODE (btwvl.prs_kenmerklink_waarde, '1', 1, TO_NUMBER (NULL)) fin_btwtabelwaarde_verlegd,
            lp.maand,
            TO_CHAR (TO_DATE (lp.maand, 'yyyymm'), 'dd-mm-yyyy') mndbegin,
            TO_CHAR (LAST_DAY (TO_DATE (lp.maand, 'yyyymm')), 'dd-mm-yyyy') mndeinde,
            TO_CHAR (GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (lp.maand, 'yyyymm')), 'dd-mm-yyyy') dagbegin,
            TO_CHAR (LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (lp.maand, 'yyyymm'))), 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (lp.maand, 'yyyymm')) - TO_DATE (lp.maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            LEAST (TRUNC (c.cnt_contract_looptijd_tot), LAST_DAY (TO_DATE (lp.maand, 'yyyymm'))) - GREATEST (TRUNC (c.cnt_contract_looptijd_van), TO_DATE (lp.maand, 'yyyymm')) + 1 mndbez, -- Bezet
            TO_NUMBER (NULL) l_tarief, TO_NUMBER (NULL) h_tarief, TO_NUMBER (NULL) k_tarief, TO_NUMBER (NULL) o_tarief, TO_NUMBER (NULL) t_tarief,
            NULL alg_onroerendgoed_type, TO_NUMBER (NULL) alg_onroerendgoed_keys, NULL alg_plaatsaanduiding,
            TO_NUMBER (NULL) l_opp, TO_NUMBER (NULL) h_opp, TO_NUMBER (NULL) k_opp, TO_NUMBER (NULL) o_opp, TO_NUMBER (NULL) t_opp,
            ROUND (cb.correctiebedrag, 2)
               mndnet,                                -- Netto correctiebedrag
            ROUND (DECODE (btwvl.prs_kenmerklink_waarde,
                           '1', 0,
                           DECODE (c.ins_discipline_key,
                                   621, DECODE (b.prs_bedrijf_key,  -- Huurcontracten
                                                11205, 0,                -- UM [1025]
                                                11297, 0, -- Chemelot Ventures [1091]
                                                11306, 0,        -- AMIBM(/UM) [1100]
                                                DECODE (fr.factuurregel, 'CFF Rent', 0, 0.21)),
                                   730, DECODE (b.prs_bedrijf_key,        -- Werkplek
                                                11205, 0,                -- UM [1025]
                                                11297, 0, -- Chemelot Ventures [1091]
                                                11306, 0,        -- AMIBM(/UM) [1100]
                                                0.21),
                                   761, 0,                                     -- OZB
                                   0.21)) *
                   cb.correctiebedrag, 2)
               mndbtw,                                  -- BTW correctiebedrag
            COALESCE (
               ks.prs_kostensoort_refcode,
               DECODE (
                  UPPER (fr.factuurregel), -- Zou consistent moeten zijn met contract!
                  'BIJDRAGE CHEF VAN DIENST', '8104',
                  'BIJDRAGE HYGIËNISCH ONDERHOUD', '8105',
                  'BIJDRAGE AFVAL', '8106',
                  'BIJDRAGE GASSEN', '8107',
                  'PARKING', '8112',
                  'PUBLIC AMENITIES', '8113',
                  'CFF RENT', '8130',
                  '8100'))
               grtboekrek,
            m.mld_melding_key,                         -- Correctiemelding-key
            TRIM (m.mld_melding_omschrijving) mld_melding_omschrijving
       FROM lopendeperiode lp,
            mld_melding m,
            mld_v_aanwezigkenmerkmelding km,
            cnt_contract c,
            prs_bedrijf b,
            prs_kostenplaats kp,
            prs_kostenplaatsgrp kpg,
            cnt_discipline cd,
            prs_kostensoort ks,
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1100) btwnr, -- BTW-nummer (NL)
            (SELECT prs_link_key, prs_kenmerklink_waarde
               FROM prs_kenmerklink
              WHERE prs_kenmerklink_verwijder IS NULL AND prs_kenmerk_key = 1120) btwvl, -- BTW verlegd
            (SELECT km.mld_melding_key, ud.fac_usrdata_code sortering, ud.fac_usrdata_omschr factuurregel
               FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
              WHERE km.mld_kenmerk_key = 342       -- Factuurregel(groepering)
                AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) fr,
            (SELECT mld_melding_key, mld_kenmerkmelding_waarde periode_van
               FROM mld_v_aanwezigkenmerkmelding
              WHERE mld_kenmerk_key = 343) pv,                  -- Periode van
            (SELECT mld_melding_key, mld_kenmerkmelding_waarde periode_tot
               FROM mld_v_aanwezigkenmerkmelding
              WHERE mld_kenmerk_key = 344) pt,                  -- Periode tot
            (SELECT mld_melding_key, fac.safe_to_number (mld_kenmerkmelding_waarde) correctiebedrag
               FROM mld_v_aanwezigkenmerkmelding
              WHERE mld_kenmerk_key = 345) cb               -- Correctiebedrag
      WHERE m.mld_stdmelding_key = 482                 -- Financiële correctie
            AND m.mld_melding_status IN (4, 5)        -- Geaccepteerd/Afgemeld
            AND m.mld_melding_key = km.mld_melding_key
            AND km.mld_kenmerk_key = 341                 -- Contractreferentie
            AND km.mld_kenmerkmelding_waarde = TO_CHAR (c.cnt_contract_key)
            AND c.cnt_contract_status = 0                     -- NIET Gesloten
            --AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (TO_DATE (lp.maand || '01', 'yyyymmdd')) -- Van-datum < einde te factureren maand
            --AND c.cnt_contract_looptijd_tot > TO_DATE (lp.maand || '01', 'yyyymmdd') -- Tot-datum > begin te factureren maand
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
            AND c.ins_discipline_key = cd.ins_discipline_key
            AND cd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND c.cnt_prs_bedrijf_key = btwnr.prs_link_key(+)
            AND c.cnt_prs_bedrijf_key = btwvl.prs_link_key(+)
            AND m.mld_melding_key = fr.mld_melding_key
            AND m.mld_melding_key = pv.mld_melding_key
            AND m.mld_melding_key = pt.mld_melding_key
            AND m.mld_melding_key = cb.mld_melding_key
   ORDER BY prs_bedrijf_key, 1, 2, 3, 4, alg_onroerendgoed_type, alg_plaatsaanduiding -- TODO: Waarom fout op tabel-prefix???
;

/* Formatted on 29-4-2017 15:48:29 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW blcc_v_fact_frozen
AS
     SELECT vf.fin_verkoopfactuur_id,
            TRIM (SUBSTR (vf.fin_verkoopfactuur_omschr, 1, INSTR (vf.fin_verkoopfactuur_omschr, '/') - 1)) po_nr,
            SUBSTR (vf.fin_verkoopfactuur_omschr, 1, INSTR (vf.fin_verkoopfactuur_omschr, '/=', -1) - 1) cnt_contract_nummer,
            SUBSTR (vf.fin_verkoopfactuur_omschr, INSTR (vf.fin_verkoopfactuur_omschr, '/=', -1) + 2, 3) sortering,
            SUBSTR (vf.fin_verkoopfactuur_omschr, INSTR (vf.fin_verkoopfactuur_omschr, '/=', -1) + 5) regel,
            TO_CHAR (vf.fin_verkoopfactuur_datum, 'dd-mm-yyyy') factuurdatum, TO_CHAR (vf.fin_verkoopfactuur_d1, 'dd-mm-yyyy') vervaldatum,
            vf.fin_verkoopfactuur_refkey cnt_contract_key,
            c.cnt_contract_nummer_intern,          -- Niet historisch bewaard!
            c.cnt_contract_versie,                 -- Niet historisch bewaard!
            c.cnt_contract_looptijd_tot lv,        -- Niet historisch bewaard!
            vf.fin_verkoopfactuur_n1 cnt_contract_korting,        -- Korting %
            vf.prs_bedrijf_key, vf.prs_debiteur_naam,
            SUBSTR (vf.fin_verkoopfactuur_c7, 1, INSTR (vf.fin_verkoopfactuur_c7, '=') - 1) debiteur_nr,
            SUBSTR (vf.fin_verkoopfactuur_c7, INSTR (vf.fin_verkoopfactuur_c7, '=') + 1) btw_nr,
            --vf.fin_verkoopfactuur_c8 contactpersoon,
            NULL contactpersoon,
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_post_adres) adres, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_post_postcode) postcode, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_post_plaats) plaats, -- Niet historisch bewaard!
            DECODE (b.prs_bedrijf_post_adres, NULL, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_land) land, -- Niet historisch bewaard!
            vf.prs_kostenplaats_key, vf.prs_kostenplaats_nr, vf.prs_kostenplaats_omschrijving, vf.prs_kostenplaatsgrp_oms,
            --vf.prs_kostensoort_oms, vf.prs_kostensoort_opmerking, vf.prs_kostensoort_refcode, vf.prs_kostensoortgrp_oms,
            vf.fin_btwtabelwaarde_code,
            vf.fin_btwtabelwaarde_oms,
            vf.fin_btwtabelwaarde_perc,
            vf.fin_btwtabelwaarde_verlegd,
            vf.fin_verkoopfactuur_maand maand,
            TO_CHAR (vf.fin_verkoopfactuur_d2, 'dd-mm-yyyy') mndbegin,
            TO_CHAR (vf.fin_verkoopfactuur_d3, 'dd-mm-yyyy') mndeinde,
            TO_CHAR (vf.fin_verkoopfactuur_d4, 'dd-mm-yyyy') dagbegin,
            TO_CHAR (vf.fin_verkoopfactuur_d5, 'dd-mm-yyyy') dageinde,
            LAST_DAY (TO_DATE (vf.fin_verkoopfactuur_maand, 'yyyymm')) - TO_DATE (vf.fin_verkoopfactuur_maand, 'yyyymm') + 1 mndbes, -- Beschikbaar
            vf.fin_verkoopfactuur_d5 - vf.fin_verkoopfactuur_d4 + 1 mndbez, -- Bezet
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c1, 1, INSTR (vf.fin_verkoopfactuur_c1, 'x') - 1)) l_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c2, 1, INSTR (vf.fin_verkoopfactuur_c2, 'x') - 1)) h_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c3, 1, INSTR (vf.fin_verkoopfactuur_c3, 'x') - 1)) k_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c4, 1, INSTR (vf.fin_verkoopfactuur_c4, 'x') - 1)) o_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c5, 1, INSTR (vf.fin_verkoopfactuur_c5, 'x') - 1)) t_tarief, -- Jaartarief (eerste 3 factuurrondes gebruikt als maandtarief)!
            SUBSTR (vf.fin_verkoopfactuur_c6, 1, 1) alg_onroerendgoed_type,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c6, 2, INSTR (vf.fin_verkoopfactuur_c6, '=') - 1)) alg_onroerendgoed_keys,
            SUBSTR (vf.fin_verkoopfactuur_c6, INSTR (vf.fin_verkoopfactuur_c6, '=') + 1) alg_plaatsaanduiding,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c1, INSTR (vf.fin_verkoopfactuur_c1, 'x') + 1)) l_opp,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c2, INSTR (vf.fin_verkoopfactuur_c2, 'x') + 1)) h_opp,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c3, INSTR (vf.fin_verkoopfactuur_c3, 'x') + 1)) k_opp,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c4, INSTR (vf.fin_verkoopfactuur_c4, 'x') + 1)) o_opp,
            fac.safe_to_number (SUBSTR (vf.fin_verkoopfactuur_c5, INSTR (vf.fin_verkoopfactuur_c5, 'x') + 1)) t_opp,
            vf.fin_verkoopfactuur_bedrag mndnet,          -- Netto maandbedrag
            vf.fin_verkoopfactuur_btw mndbtw,               -- BTW maandbedrag
            vf.prs_kostensoort_oms grtboekrek,
            vf.fin_verkoopfactuur_n2 mld_melding_key,
            vf.fin_verkoopfactuur_c8 mld_melding_omschrijving
       FROM fin_verkoopfactuur vf,
            cnt_contract c,
            --cnt_discipline cd,
            --prs_kostensoort ks,
            prs_bedrijf b
      WHERE SUBSTR (vf.fin_verkoopfactuur_id, 5, 1) = '1' -- Of andere conditie?
            AND vf.fin_verkoopfactuur_refkey = c.cnt_contract_key
            --AND c.ins_discipline_key = cd.ins_discipline_key
            --AND cd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND vf.prs_bedrijf_key = b.prs_bedrijf_key
   ORDER BY vf.prs_bedrijf_key, 1, 2, 3, 4, SUBSTR (vf.fin_verkoopfactuur_c6, 1, 1), SUBSTR (vf.fin_verkoopfactuur_c6, INSTR (vf.fin_verkoopfactuur_c6, '=') + 1);

CREATE OR REPLACE VIEW blcc_v_rap_export_fact
(
   hide_f_sortering,
   fclt_x_maand,
   code,
   valuta,
   factuurdatum,
   periode,
   factuurnummer,
   vervaldatum,
   nummer,
   grtboekrek,
   rel_kpl,
   prj_activa,
   bedrag,
   debitcredit,
   omschrijving,
   btwcode
)
AS
   SELECT ROWNUM,
          REPLACE (periode, '/', '-') periode,
          code,
          valuta,
          factuurdatum,
          periode,
          factuurnummer,
          vervaldatum,
          nummer,
          grtboekrek,
          rel_kpl,
          prj_activa,
          bedrag,
          debitcredit,
          omschrijving,
          btwcode
     FROM (  SELECT v.fin_verkoopfactuur_id || '0000' sortering,
                    'VRK' code,                               -- Hard op 'VRK'
                    'EUR' valuta,                             -- Hard op 'EUR'
                    v.factuurdatum,
                    SUBSTR (v.maand, 1, 4) || '/' || SUBSTR (v.maand, -2) periode,
                    v.fin_verkoopfactuur_id factuurnummer,   -- Boekstuknummer
                    v.vervaldatum,
                    '1' nummer,                                 -- Hard op '1'
                    '1300' grtboekrek,                       -- Hard op '1300'
                    v.debiteur_nr rel_kpl,
                    NULL prj_activa,                           -- Hard op NULL
                    SUM (v.mndnet + v.mndbtw) bedrag, -- Totaalbedrag incl. BTW gegroepeerd over andere kolommen!
                    'debit' debitcredit,
                    'Total' omschrijving,                   -- Hard op 'Total'
                    NULL btwcode                               -- Hard op NULL
               FROM blcc_v_fact_frozen v
              WHERE v.maand >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy') || '01'
           GROUP BY v.fin_verkoopfactuur_id || '0000',
                    'VRK',
                    'EUR',
                    v.factuurdatum,
                    SUBSTR (v.maand, 1, 4) || '/' || SUBSTR (v.maand, -2),
                    v.fin_verkoopfactuur_id,
                    v.vervaldatum,
                    '1',
                    '1300',
                    v.debiteur_nr,
                    NULL,
                    'debit',
                    'Total',
                    NULL
           UNION ALL
             SELECT v.fin_verkoopfactuur_id || COALESCE (v.grtboekrek, '???') sortering,
                    'VRK' code,                               -- Hard op 'VRK'
                    'EUR' valuta,                             -- Hard op 'EUR'
                    v.factuurdatum,
                    SUBSTR (v.maand, 1, 4) || '/' || SUBSTR (v.maand, -2) periode,
                    v.fin_verkoopfactuur_id factuurnummer,   -- Boekstuknummer
                    v.vervaldatum,
                    '1' nummer,                                 -- Hard op '1'
                    v.grtboekrek,
                    kp.prs_kostenplaats_nr rel_kpl,
                    NULL prj_activa,                           -- Hard op NULL
                    SUM (v.mndnet) bedrag, -- Totaalbedrag excl. BTW gegroepeerd over andere kolommen!
                    'credit' debitcredit, -- TODO: Altijd 'credit' (ook negatieve bedragen)???
                    v.regel omschrijving,
                    DECODE (fin_btwtabelwaarde_code, 'H', 'VH', 'L', 'VL', 'V', 'VBINEU_VERL', 'VN') btwcode
               FROM blcc_v_fact_frozen v, cnt_contract c, prs_kostenplaats kp
              WHERE v.maand >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy') || '01'
                    AND v.cnt_contract_key = c.cnt_contract_key
                    AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
           GROUP BY v.fin_verkoopfactuur_id || COALESCE (v.grtboekrek, '???'),
                    'VRK',
                    'EUR',
                    v.factuurdatum,
                    SUBSTR (v.maand, 1, 4) || '/' || SUBSTR (v.maand, -2),
                    v.fin_verkoopfactuur_id,
                    v.vervaldatum,
                    '1',
                    v.grtboekrek,
                    kp.prs_kostenplaats_nr,
                    NULL,
                    'credit',
                    v.regel,
                    DECODE (fin_btwtabelwaarde_code, 'H', 'VH', 'L', 'VL', 'V', 'VBINEU_VERL', 'VN')
           ORDER BY 1);

CREATE OR REPLACE VIEW blcc_v_export_fact
(
   result,
   result_order
)
AS        -- View bevat alleen inhoud op de dag na de 10e werkdag van de maand!
   SELECT    'code'
          || ';valuta'
          || ';factuurdatum'
          || ';periode'
          || ';factuurnummer'
          || ';vervaldatum'
          || ';nummer'
          || ';grtboekrek'
          || ';rel/kpl'
          || ';prj/activa'
          || ';bedrag'
          || ';debitcredit'
          || ';omschrijving'
          || ';btwcode',
          0
     FROM DUAL
    WHERE FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 1 -- Nacht na 1e werkdag!
          AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
          AND NOT EXISTS
                (SELECT 1
                   FROM mld_vrije_dagen
                  WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1))
   UNION ALL
   SELECT    code
          || ';'
          || valuta
          || ';'
          || factuurdatum
          || ';'
          || periode
          || ';'
          || factuurnummer
          || ';'
          || vervaldatum
          || ';'
          || nummer
          || ';'
          || grtboekrek
          || ';'
          || rel_kpl
          || ';'
          || prj_activa
          || ';'
          || bedrag
          || ';'
          || debitcredit
          || ';'
          || omschrijving
          || ';'
          || btwcode,
          ROWNUM
     FROM blcc_v_rap_export_fact
    WHERE fclt_x_maand = TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'yyyy-mm')
          AND FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 1 -- Nacht na 1e werkdag!
          AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
          AND NOT EXISTS
                (SELECT 1
                   FROM mld_vrije_dagen
                  WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1))
   ORDER BY 2;

/* Formatted on 29-4-2017 15:15:18 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE blcc_select_fact (p_applname   IN VARCHAR2,
                                              p_applrun    IN VARCHAR2)
AS
   -- Factureer/bevries verhuurcontractkosten en verwerk=AV alle eventuele correctiemeldingen!
   CURSOR c1
   IS
        SELECT '[' || v.cnt_contract_nummer_intern || '.' || COALESCE (v.cnt_contract_versie, '0') || '|' || v.prs_debiteur_naam || '|' || v.regel || '] ' aanduiding,
               v.*, m.mld_melding_status
          FROM blcc_v_fact_actual v, mld_melding m
         WHERE v.mld_melding_key = m.mld_melding_key(+)
      ORDER BY v.prs_bedrijf_key, v.po_nr, v.sortering, v.regel, v.alg_plaatsaanduiding;

   -- Verstuur verkoopfactuur naar huurder.
   CURSOR c2
   IS
        SELECT DISTINCT '[' || vf.fin_verkoopfactuur_id || '|' || vf.fin_verkoopfactuur_maand || '|' || vf.prs_debiteur_naam || '] ' aanduiding,
               vf.fin_verkoopfactuur_id, vf.fin_verkoopfactuur_maand, vf.prs_debiteur_naam,
               vfk.fin_verkoopfactuurkop_key, vfk.fin_verkoopfactuurkop_id,
               b.prs_bedrijf_email
          FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk, prs_bedrijf b
         WHERE SUBSTR (vf.fin_verkoopfactuur_id, 5, 1) = '1' -- vf.fin_verkoopfactuur_xmlnode = 'contract'
               AND vf.fin_verkoopfactuur_maand = TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'yyyymm')
               AND vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key
               AND vf.prs_bedrijf_key = b.prs_bedrijf_key
      ORDER BY vf.fin_verkoopfactuur_id;

   v_errormsg                VARCHAR2 (1000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_holiday                 NUMBER;
   v_fact_count              NUMBER;
   v_amount_sum              NUMBER (10, 2);
   v_old_bedrijf_key         NUMBER (10);
   v_old_po_nr               VARCHAR2 (50);
   v_year_offset             NUMBER (10);
   v_factuur_id              VARCHAR2 (30);
   v_factkop_id              VARCHAR2 (30);
   v_verkoopfactuurkop_key   NUMBER (10);
   v_count                   NUMBER;
BEGIN
   -- Eerst opruiming
   DELETE FROM imp_log
         WHERE imp_log_applicatie = p_applname;

   SELECT COUNT ( * )
     INTO v_holiday
     FROM mld_vrije_dagen
    WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1);

   -- LET OP: Twinfield-export van verhuurcontracten (= boekingsgangen) draait
   -- dagelijks na middernacht (begin van dag) en de verkoop wordt maandelijks
   -- alleen in de nacht na 10e werkdag van de maand doorgezet.
   -- IF nacht na 10e werkdag van de maand (én geen weekend én geen vrije dag)!
   -- count_work_days (d1,d2) bepaalt het #werkdagen van d1 tot d2 (als d1=d2,
   -- dan return 0); daarom bepalen tov. laatste dag van vorige maand!
   IF     FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 1 -- Nacht na 1e werkdag!
      AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
      AND v_holiday = 0
   THEN
      v_fact_count := 0;
      v_amount_sum := 0;
      v_old_bedrijf_key := -1;
      v_old_po_nr := '';

      -- Factureer/bevries verhuurcontractkosten en verwerk=AV alle eventuele
      -- correctiemeldingen.
      FOR rec IN c1
      LOOP
         BEGIN
            IF rec.prs_bedrijf_key != v_old_bedrijf_key OR rec.po_nr != v_old_po_nr
            THEN
               -- Bepaal max. sequence t/m voorgaande jaar (= aantal entries in
               -- fin_verkoopfactuurkop-tabel).
               SELECT COUNT ( * )
                 INTO v_year_offset
                 FROM fin_verkoopfactuurkop vfk
                WHERE SUBSTR (vfk.fin_verkoopfactuurkop_id, 5, 1) = '1' -- Boekstuknummers in formaat <yyyy>1!
                      AND SUBSTR (vfk.fin_verkoopfactuurkop_id, 1, 4) < TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'yyyy');

               -- Bepaal fin_verkoopfactuur_id=boekstuknr. tbv. BCC-verkoopboek
               -- obv. sequence '01' en begin elk nieuw jaar weer bij 1 door te
               -- corrigeren met de hierboven bepaalde offset.
               SELECT fac_s_user01.NEXTVAL - v_year_offset INTO v_count FROM DUAL;

               v_factuur_id := TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'YYYY') || '1' || SUBSTR ('0000' || TO_CHAR (v_count), -4);
               v_factkop_id := v_factuur_id || '_' || SUBSTR (rec.maand, 1, 4) || '-' || SUBSTR (rec.maand, -2) || '_' || rec.debiteur_nr;

               INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
                   VALUES (v_factkop_id)
                RETURNING fin_verkoopfactuurkop_key
                     INTO v_verkoopfactuurkop_key;
               COMMIT;

               v_old_bedrijf_key := rec.prs_bedrijf_key;
               v_old_po_nr := rec.po_nr;
            END IF;

            v_errormsg := 'Fout toevoegen verkoopfactuur';

            INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
                                            fin_verkoopfactuur_id,
                                            fin_verkoopfactuur_datum,
                                            fin_verkoopfactuur_omschr,
                                            fin_verkoopfactuur_xmlnode,
                                            fin_verkoopfactuur_refkey,
                                            prs_kostenplaats_key,
                                            prs_kostenplaats_nr,
                                            prs_kostenplaats_omschrijving,
                                            prs_kostenplaatsgrp_oms,
                                            prs_kostensoort_oms,
                                            prs_kostensoort_opmerking,
                                            prs_kostensoort_refcode,
                                            prs_bedrijf_key,
                                            prs_debiteur_naam,
                                            prs_kostensoortgrp_oms,
                                            fin_verkoopfactuur_bedrag,
                                            fin_verkoopfactuur_btw,
                                            fin_btwtabelwaarde_code,
                                            fin_btwtabelwaarde_oms,
                                            fin_btwtabelwaarde_perc,
                                            fin_btwtabelwaarde_verlegd,
                                            fin_verkoopfactuur_maand,
                                            fin_verkoopfactuur_n1,
                                            fin_verkoopfactuur_n2,
                                            fin_verkoopfactuur_n3,
                                            fin_verkoopfactuur_n4,
                                            fin_verkoopfactuur_n5,
                                            fin_verkoopfactuur_c1,
                                            fin_verkoopfactuur_c2,
                                            fin_verkoopfactuur_c3,
                                            fin_verkoopfactuur_c4,
                                            fin_verkoopfactuur_c5,
                                            fin_verkoopfactuur_c6,
                                            fin_verkoopfactuur_c7,
                                            fin_verkoopfactuur_c8,
                                            fin_verkoopfactuur_d1,
                                            fin_verkoopfactuur_d2,
                                            fin_verkoopfactuur_d3,
                                            fin_verkoopfactuur_d4,
                                            fin_verkoopfactuur_d5)
                VALUES (v_verkoopfactuurkop_key,
                        v_factuur_id,
                        TO_DATE (rec.factuurdatum, 'dd-mm-yyyy'),
                        rec.cnt_contract_nummer || '/=' || rec.sortering || rec.regel,
                        'contract',
                        rec.cnt_contract_key,
                        rec.prs_kostenplaats_key,
                        rec.prs_kostenplaats_nr,
                        rec.prs_kostenplaats_omschrijving,
                        rec.prs_kostenplaatsgrp_oms,
                        rec.grtboekrek,
                        rec.grtboekrek,
                        rec.grtboekrek,
                        rec.prs_bedrijf_key,
                        rec.prs_debiteur_naam,
                        NULL,
                        rec.mndnet,
                        rec.mndbtw,
                        rec.fin_btwtabelwaarde_code,
                        rec.fin_btwtabelwaarde_oms,
                        rec.fin_btwtabelwaarde_perc,
                        rec.fin_btwtabelwaarde_verlegd,
                        rec.maand,
                        rec.cnt_contract_korting, -- n1/kortingspercentage óf subsidiepercentage
                        rec.mld_melding_key,            -- n2/correctiemelding
                        TO_NUMBER (NULL),                                -- n3
                        TO_NUMBER (NULL),                                -- n4
                        TO_NUMBER (NULL),                                -- n5
                        TO_CHAR (rec.l_tarief) || 'x' || TO_CHAR (rec.l_opp), -- c1/jaartarief x oppervlakte
                        TO_CHAR (rec.h_tarief) || 'x' || TO_CHAR (rec.h_opp), -- c2/jaartarief x oppervlakte
                        TO_CHAR (rec.k_tarief) || 'x' || TO_CHAR (rec.k_opp), -- c3/jaartarief x oppervlakte
                        TO_CHAR (rec.o_tarief) || 'x' || TO_CHAR (rec.o_opp), -- c4/jaartarief x oppervlakte
                        TO_CHAR (rec.t_tarief) || 'x' || TO_CHAR (rec.t_opp), -- c5/jaartarief x oppervlakte
                        rec.alg_onroerendgoed_type || rec.alg_onroerendgoed_keys || '=' || rec.alg_plaatsaanduiding, -- c6
                        rec.debiteur_nr || '=' || rec.btw_nr,            -- c7
                        --rec.contactpersoon,                              -- c8
                        rec.mld_melding_omschrijving,                    -- c8
                        TO_DATE (rec.vervaldatum, 'dd-mm-yyyy'),         -- d1
                        TO_DATE (rec.mndbegin, 'dd-mm-yyyy'),            -- d2
                        TO_DATE (rec.mndeinde, 'dd-mm-yyyy'),            -- d3
                        TO_DATE (rec.dagbegin, 'dd-mm-yyyy'),            -- d4
                        TO_DATE (rec.dageinde, 'dd-mm-yyyy'));           -- d5
            COMMIT;

            v_fact_count := v_fact_count + 1;
            v_amount_sum := v_amount_sum + rec.mndnet;

            IF (rec.mld_melding_key IS NOT NULL)          -- Correctiemelding?
            THEN
               v_errormsg := 'Fout verwerken correctiemelding';

               -- Overgang van Geaccepteerd naar Verwerkt niet mogelijk, dus
               -- eerst afmelden (als nog niet Afgemeld)!
               IF (rec.mld_melding_status = 4)                          -- ACP
               THEN
                  MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL);  -- AFM
               END IF;
               MLD.setmeldingstatus (rec.mld_melding_key, 6, NULL);     -- VER
               COMMIT;
            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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'FACT-freeze');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (p_applname, 'S', 'FACT-verkoop/#regels: ' || TO_CHAR (v_fact_count), TO_CHAR (v_amount_sum));

      -- Verstuur verkoopfactuur naar huurder.
      FOR rec IN c2
      LOOP
         BEGIN
            v_errormsg := 'Fout toevoegen CUST01-noti';

            INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                         fac_notificatie_status,
                                         fac_notificatie_receiver_email,
                                         fac_notificatie_oms,
                                         fac_notificatie_refkey,
                                         fac_notificatie_prioriteit,
                                         fac_notificatie_datum,
                                         fac_notificatie_sender_email,
                                         fac_notificatie_attachments)
                VALUES (281,                                    -- CUST01-noti
                        2,                                             -- Mail
                        DECODE (                                   -- To-adres
                           rec.prs_bedrijf_email,
                           NULL, 'accounting1@brightlands.com',
                           rec.prs_bedrijf_email || ';accounting1@brightlands.com'),
                        'Factuur ' || rec.fin_verkoopfactuur_id || ' ' || rec.fin_verkoopfactuur_maand || ' ' || rec.prs_debiteur_naam,
                        rec.fin_verkoopfactuurkop_key,
                        2,                                       -- Prioriteit
                        TRUNC (SYSDATE) + (7 / 24),
                        'accounting1@brightlands.com',           -- From-adres
                        '/../../Fplace5i/CUST/BLCC/export/PDF/' || rec.fin_verkoopfactuurkop_id || '.pdf');
         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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'FACT-noti');
               COMMIT;
         END;
      END LOOP;
   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.writelog (p_applname, 'E', v_errormsg, 'FACT-export afgebroken!');
END;
/


-- Export om een BAT-bestand aan te maken dat de PDF-bestanden genereert. Deze
-- export moet voor 5:00 worden gedraaid, daarna (7:00) worden de notificaties
-- vanuit putOrders verstuurd.
-- BLCC#53262: Facturatie additionele diensten.
CREATE OR REPLACE VIEW blcc_v_export_pdf_att
(
   result,
   result_order
)
AS                                                          -- Facturatie huur
   SELECT    'CALL GENEREER1FIN_VK_PDF.BAT '
          || TO_CHAR (vfk.fin_verkoopfactuurkop_key)
          || ' '
          || vfk.fin_verkoopfactuurkop_id,
          vfk.fin_verkoopfactuurkop_key
     FROM fac_notificatie n, fin_verkoopfactuurkop vfk
    WHERE n.fac_srtnotificatie_key = 281                        -- CUST01-noti
          AND n.fac_notificatie_refkey = vfk.fin_verkoopfactuurkop_key
   UNION ALL                                -- Facturatie additionele diensten
   SELECT    'CALL GENEREER1FIN_VK_PDF.BAT '
          || TO_CHAR (vfk.fin_verkoopfactuurkop_key)
          || ' '
          || vfk.fin_verkoopfactuurkop_id,
          vfk.fin_verkoopfactuurkop_key
     FROM fac_notificatie n, fin_verkoopfactuurkop vfk
    WHERE n.fac_srtnotificatie_key = 341                        -- CUST02-noti
          AND n.fac_notificatie_refkey = vfk.fin_verkoopfactuurkop_key;

CREATE OR REPLACE VIEW blcc_v_rap_fact_controle
(
   fclt_x_stroom,
   fclt_f_controle,
   controle_ref
)
AS
   WITH periodegeg AS (SELECT * FROM blcc_v_fact_actual)
   SELECT DISTINCT 'Verhuur', 'BCC Huurcontract niet gekoppeld aan FIN-plaats',
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie)
     FROM periodegeg v, cnt_contract c
    WHERE v.mld_melding_key IS NULL
          AND v.cnt_contract_key = c.cnt_contract_key
          AND c.ins_discipline_key = 621                     -- Huurcontracten
          AND v.alg_plaatsaanduiding NOT LIKE '%FIN%'
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'BCC Huurcontract oppervlakte = 0',
          xref
     FROM (  SELECT v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']' xref,
                    SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0) ) oppervlakte
               FROM periodegeg v, cnt_contract c
              WHERE v.mld_melding_key IS NULL
                AND v.cnt_contract_key = c.cnt_contract_key
                AND c.ins_discipline_key = 621               -- Huurcontracten
           GROUP BY v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']')
    WHERE oppervlakte = 0
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Contract(regel) bedrag = 0',
          xref
     FROM (  SELECT v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']' xref,
                    SUM (v.mndnet) bedrag
               FROM periodegeg v
              WHERE v.mld_melding_key IS NULL
           GROUP BY v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']')
    WHERE bedrag = 0
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Contract(regel) bedrag < 0',
          xref
     FROM (  SELECT v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']' xref,
                    SUM (v.mndnet) bedrag
               FROM periodegeg v
              WHERE v.mld_melding_key IS NULL
                    AND v.regel NOT LIKE 'CFF%'
           GROUP BY v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || ' [' || v.regel || ']')
    WHERE bedrag < 0
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Contractkorting >= 100%',
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie)
     FROM periodegeg v
    WHERE v.mld_melding_key IS NULL
          AND v.cnt_contract_korting >= 100
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Contract met GVR-overlap?',
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie)
     FROM periodegeg v, alg_v_allonroerendgoed aog
    WHERE v.mld_melding_key IS NULL
          AND v.alg_onroerendgoed_type IN ('G', 'V', 'R')
          AND v.alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
          AND EXISTS (SELECT 1
                        FROM periodegeg v1, alg_v_allonroerendgoed aog1
                       WHERE v1.alg_onroerendgoed_type IN ('G', 'V', 'R')
                         AND v1.alg_onroerendgoed_keys = aog1.alg_onroerendgoed_keys
                         AND v1.cnt_contract_key = v.cnt_contract_key -- Hetzelfde contract
                         AND aog1.alg_gebouw_key = aog.alg_gebouw_key -- Hetzelfde gebouw
                         AND v1.alg_onroerendgoed_type != v.alg_onroerendgoed_type -- Ander type
                         AND v1.alg_onroerendgoed_keys != v.alg_onroerendgoed_keys) -- Andere regel
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Dezelfde plaats gekoppeld aan meer contracten',
          v.alg_plaatsaanduiding
     FROM periodegeg v
    WHERE v.mld_melding_key IS NULL
          AND v.alg_onroerendgoed_type IN ('G', 'V', 'R')
          AND EXISTS (SELECT 1
                        FROM periodegeg v1
                       WHERE v1.alg_onroerendgoed_type IN ('G', 'V', 'R')
                         AND v1.alg_onroerendgoed_keys = v.alg_onroerendgoed_keys -- Dezelfde plaats
                         AND v1.cnt_contract_key != v.cnt_contract_key) -- Ander contract
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'E-mail adres van debiteur onbekend',
          v.prs_debiteur_naam
     FROM periodegeg v, prs_bedrijf b
    WHERE v.prs_bedrijf_key = b.prs_bedrijf_key
          AND b.prs_bedrijf_email IS NULL
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Factuuradres van debiteur onbekend/onvolledig',
          v.prs_debiteur_naam
     FROM periodegeg v
    WHERE v.mld_melding_key IS NULL
          AND (v.adres IS NULL OR v.postcode IS NULL OR v.plaats IS NULL OR v.land IS NULL)
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Correctiebedrag = 0',
          TO_CHAR (v.mld_melding_key)
     FROM periodegeg v
    WHERE v.mld_melding_key IS NOT NULL
      AND v.mndnet = 0
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Correctiemelding nog niet in conceptfactuur',
          TO_CHAR (m.mld_melding_key)
     FROM mld_melding m
    WHERE m.mld_stdmelding_key = 482                   -- Financiële correctie
      AND m.mld_melding_status IN (0, 2, 3)      -- Pending/Ingevoerd/Ingezien
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Contract gekoppeld aan locatie',
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie)
     FROM periodegeg v
    WHERE v.mld_melding_key IS NULL
          AND v.alg_onroerendgoed_type = 'L'
   UNION ALL
   SELECT DISTINCT 'Verhuur', 'Debiteurnummer onbekend',
          v.prs_debiteur_naam
     FROM periodegeg v, prs_bedrijf b
    WHERE v.prs_bedrijf_key = b.prs_bedrijf_key
          AND b.prs_overeenkomst_nr IS NULL
   UNION ALL
   SELECT 'Verhuur', 'Aantal factuurregels > max. #regels (zoals geconfigureerd)',
          x.prs_debiteur_naam || ' / ' || x.po_nr
     FROM (  SELECT prs_debiteur_naam, po_nr, COUNT (*) factuurregels
               FROM blcc_v_fact_actual
           GROUP BY prs_debiteur_naam, po_nr) x
    WHERE x.factuurregels > fac.getsetting ('res_xml_max_rsv_ruimte')
   UNION ALL
   SELECT 'Add. Diensten', 'H-afdeling leeg', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE p.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT 'Add. Diensten', 'H-afdeling zonder logins', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE p.prs_afdeling_key = a.prs_afdeling_key)
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NOT NULL
                        AND p.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-afdeling op ander dan niveau-1', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND EXISTS
                (SELECT 1
                   FROM prs_v_afdeling_boom ab
                  WHERE ab.prs_bedrijf_key = 22                    -- Huurders
                        AND COALESCE (ab.prs_afdeling_key2, ab.prs_afdeling_key3, ab.prs_afdeling_key4, ab.prs_afdeling_key5) IS NOT NULL
                        AND ab.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-afdeling niet gelinkt aan H-relatie', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a--, prs_v_aanwezigperslid ap
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          --AND a.prs_afdeling_key = ap.prs_afdeling_key
          --AND COALESCE (ap.prs_perslid_oslogin, ap.prs_perslid_oslogin2) IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink kl, prs_v_aanwezigbedrijf b
                  WHERE kl.prs_kenmerklink_niveau = 'A'
                        AND kl.prs_kenmerk_key = 1001        -- Debiteurnummer
                        AND kl.prs_kenmerklink_waarde = b.prs_overeenkomst_nr
                        AND kl.prs_link_key = a.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-afdeling niet gelinkt aan actief AD-contract', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a--, prs_v_aanwezigperslid ap
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          --AND a.prs_afdeling_key = ap.prs_afdeling_key
          --AND COALESCE (ap.prs_perslid_oslogin, ap.prs_perslid_oslogin2) IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM cnt_v_aanwezigcontract c
                  WHERE c.ins_discipline_key IN (1841, 1842)
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.prs_afdeling_key_eig = a.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-afdeling gelinkt aan >1 actief AD-contract', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a, cnt_v_aanwezigcontract c1
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          AND a.prs_afdeling_key = c1.prs_afdeling_key_eig
          AND c1.ins_discipline_key IN (1841, 1842)
          AND TRUNC (c1.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
          AND c1.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
          AND c1.cnt_contract_status = 0                      -- NIET Gesloten
          AND EXISTS
                (SELECT 1
                   FROM cnt_v_aanwezigcontract c2
                  WHERE c2.ins_discipline_key IN (1841, 1842)
                        AND TRUNC (c2.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
                        AND c2.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
                        AND c2.cnt_contract_status = 0        -- NIET Gesloten
                        AND c2.ins_discipline_key = c1.ins_discipline_key
                        AND c2.prs_afdeling_key_eig = c1.prs_afdeling_key_eig
                        AND c2.cnt_contract_key != c1.cnt_contract_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-relatie niet gelinkt aan H-afdeling', b.prs_bedrijf_naam
     FROM prs_v_aanwezigbedrijf b
    WHERE b.prs_overeenkomst_nr IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_afdeling a, prs_v_aanwezigkenmerklink kl
                  WHERE a.prs_afdeling_verwijder IS NULL
                        AND a.prs_bedrijf_key = 22                 -- Huurders
                        AND a.prs_afdeling_parentkey IS NULL
                        AND a.prs_afdeling_key = kl.prs_link_key
                        AND kl.prs_kenmerklink_niveau = 'A'
                        AND kl.prs_kenmerk_key = 1001        -- Debiteurnummer
                        AND kl.prs_kenmerklink_waarde = b.prs_overeenkomst_nr)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-relatie niet gelinkt aan actief AD-contract', b.prs_bedrijf_naam
     FROM prs_v_aanwezigbedrijf b
    WHERE EXISTS
                (SELECT 1
                   FROM prs_afdeling a, prs_v_aanwezigkenmerklink kl
                  WHERE a.prs_afdeling_verwijder IS NULL
                        AND a.prs_bedrijf_key = 22                 -- Huurders
                        AND a.prs_afdeling_parentkey IS NULL
                        AND a.prs_afdeling_key = kl.prs_link_key
                        AND kl.prs_kenmerklink_niveau = 'A'
                        AND kl.prs_kenmerk_key = 1001        -- Debiteurnummer
                        AND kl.prs_kenmerklink_waarde = b.prs_overeenkomst_nr)
          AND NOT EXISTS
                (SELECT 1
                   FROM cnt_v_aanwezigcontract c
                  WHERE c.ins_discipline_key IN (1841, 1842)
                    AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
                    AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
                    AND c.cnt_contract_status = 0             -- NIET Gesloten
                    AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-relatie gelinkt aan >1 actief AD-contract', b.prs_bedrijf_naam
     FROM prs_v_aanwezigbedrijf b, cnt_v_aanwezigcontract c1
    WHERE b.prs_bedrijf_key = c1.cnt_prs_bedrijf_key
          AND c1.ins_discipline_key IN (1841, 1842)
          AND TRUNC (c1.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
          AND c1.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
          AND c1.cnt_contract_status = 0                      -- NIET Gesloten
          AND EXISTS
                (SELECT 1
                   FROM prs_afdeling a, prs_v_aanwezigkenmerklink kl
                  WHERE a.prs_afdeling_verwijder IS NULL
                        AND a.prs_bedrijf_key = 22                 -- Huurders
                        AND a.prs_afdeling_parentkey IS NULL
                        AND a.prs_afdeling_key = kl.prs_link_key
                        AND kl.prs_kenmerklink_niveau = 'A'
                        AND kl.prs_kenmerk_key = 1001        -- Debiteurnummer
                        AND kl.prs_kenmerklink_waarde = b.prs_overeenkomst_nr)
          AND EXISTS
                (SELECT 1
                   FROM cnt_v_aanwezigcontract c2
                  WHERE c2.ins_discipline_key IN (1841, 1842)
                        AND TRUNC (c2.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
                        AND c2.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
                        AND c2.cnt_contract_status = 0        -- NIET Gesloten
                        AND c2.ins_discipline_key = c1.ins_discipline_key
                        AND c2.prs_afdeling_key_eig = c1.prs_afdeling_key_eig
                        AND c2.cnt_contract_key != c1.cnt_contract_key)
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'Actief AD-contract incorrect gelinkt aan huurder', c.cnt_contract_nummer_intern || DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
     FROM cnt_v_aanwezigcontract c, prs_v_afdeling_boom ab, prs_v_aanwezigkenmerklink kl, prs_bedrijf b
    WHERE c.ins_discipline_key IN (1841, 1842)
          AND TRUNC (c.cnt_contract_looptijd_van) < LAST_DAY (SYSDATE) -- Van-datum < einde te factureren maand
          AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'mm') -- Tot-datum > begin te factureren maand
          AND c.cnt_contract_status = 0                       -- NIET Gesloten
          AND c.prs_afdeling_key_eig = ab.prs_afdeling_key(+)
          AND ab.prs_bedrijf_key(+) = 22                           -- Huurders
          AND c.prs_afdeling_key_eig = kl.prs_link_key(+)
          AND kl.prs_kenmerklink_niveau(+) = 'A'
          AND kl.prs_kenmerk_key(+) = 1001                   -- Debiteurnummer
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key(+)
          AND kl.prs_kenmerklink_waarde != b.prs_overeenkomst_nr
   UNION ALL
   SELECT DISTINCT 'Add. Diensten', 'H-afdeling niet dezelfde naam als gelinkte H-relatie', a.prs_afdeling_omschrijving || ' <> ' || b.prs_bedrijf_naam
     FROM prs_afdeling a, prs_v_aanwezigkenmerklink kl, prs_v_aanwezigbedrijf b
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_bedrijf_key = 22                               -- Huurders
          AND a.prs_afdeling_parentkey IS NULL
          AND a.prs_afdeling_key = kl.prs_link_key(+)
          AND kl.prs_kenmerklink_niveau = 'A'
          AND kl.prs_kenmerk_key = 1001                      -- Debiteurnummer
          AND kl.prs_kenmerklink_waarde = b.prs_overeenkomst_nr
          AND UPPER (a.prs_afdeling_omschrijving) != TRIM (b.prs_bedrijf_naam_upper)
   UNION ALL
   SELECT 'Uitvoerenden', 'UV-afdeling leeg', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE p.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT 'Uitvoerenden', 'UV-afdeling zonder logins', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE p.prs_afdeling_key = a.prs_afdeling_key)
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid p
                  WHERE COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NOT NULL
                        AND p.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Uitvoerenden', 'UV-afdeling met logins niet gelinkt aan UV-relatie', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving
     FROM prs_afdeling a, prs_v_aanwezigperslid ap
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = ap.prs_afdeling_key
          AND COALESCE (ap.prs_perslid_oslogin, ap.prs_perslid_oslogin2) IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_contactpersoon cp, prs_bedrijf b, prs_perslid p
                  WHERE cp.prs_contactpersoon_verwijder IS NULL
                        AND cp.prs_bedrijf_key = b.prs_bedrijf_key
                        AND b.prs_bedrijf_verwijder IS NULL
                        AND cp.prs_perslid_key = p.prs_perslid_key
                        AND p.prs_afdeling_key = ap.prs_afdeling_key)
   UNION ALL
   SELECT DISTINCT 'Uitvoerenden', 'UV-afdeling gelinkt aan UV-relatie via persoon zonder login', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving || '/' || p.prs_perslid_naam
     FROM prs_afdeling a, prs_v_aanwezigperslid p
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NULL
          AND EXISTS
                (SELECT 1
                   FROM prs_contactpersoon cp, prs_bedrijf b
                  WHERE cp.prs_contactpersoon_verwijder IS NULL
                        AND cp.prs_bedrijf_key = b.prs_bedrijf_key
                        AND b.prs_bedrijf_verwijder IS NULL
                        AND cp.prs_perslid_key = p.prs_perslid_key)
   UNION ALL
   SELECT DISTINCT 'Uitvoerenden', 'UV-relatie gelinkt aan UV-afdeling via verwijderde persoon', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving || '/' || cp.prs_contactpersoon_naam
     FROM prs_afdeling a, prs_perslid p, prs_contactpersoon cp, prs_bedrijf b
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND p.prs_perslid_verwijder IS NOT NULL
          AND p.prs_perslid_key = cp.prs_perslid_key
          AND cp.prs_contactpersoon_verwijder IS NULL
          AND cp.prs_bedrijf_key = b.prs_bedrijf_key
          AND b.prs_bedrijf_verwijder IS NULL
   UNION ALL
   SELECT DISTINCT 'Uitvoerenden', 'UV-afdeling niet dezelfde naam als gelinkte UV-relatie', a.prs_afdeling_omschrijving || ' <> ' || b.prs_bedrijf_naam
     FROM prs_afdeling a, prs_perslid p, prs_contactpersoon cp, prs_bedrijf b
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND p.prs_perslid_key = cp.prs_perslid_key
          AND cp.prs_contactpersoon_verwijder IS NULL
          AND cp.prs_bedrijf_key = b.prs_bedrijf_key
          AND b.prs_bedrijf_verwijder IS NULL
          AND UPPER (a.prs_afdeling_omschrijving) != TRIM (b.prs_bedrijf_naam_upper)
;
/*
   UNION ALL
   SELECT '***UV-account niet gelinkt aan UV-relatie met RELUSE-rechten', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving || '/' || p.prs_perslid_naam
     FROM prs_afdeling a, prs_v_aanwezigperslid p
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_contactpersoon cp, prs_bedrijf b
                  WHERE cp.prs_contactpersoon_verwijder IS NULL
                        AND cp.prs_bedrijf_key = b.prs_bedrijf_key
                        AND b.prs_bedrijf_verwijder IS NULL
                        AND cp.prs_perslid_key = p.prs_perslid_key)
          AND EXISTS
                (SELECT 1
                   FROM fac_gebruikersgroep gg, fac_groeprechten gr
                  WHERE gg.fac_groep_key = gr.fac_groep_key
                        AND gr.fac_functie_key IN (43, 462)   -- RELMAN/RELUSE
                        AND gg.prs_perslid_key = p.prs_perslid_key)
   UNION ALL
   SELECT '***UV-account niet gelinkt aan UV-relatie met ORDxxx-rechten', a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving || '/' || p.prs_perslid_naam
     FROM prs_afdeling a, prs_v_aanwezigperslid p
    WHERE a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_parentkey = 23                             -- UV
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NOT NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_contactpersoon cp, prs_bedrijf b
                  WHERE cp.prs_contactpersoon_verwijder IS NULL
                        AND cp.prs_bedrijf_key = b.prs_bedrijf_key
                        AND b.prs_bedrijf_verwijder IS NULL
                        AND cp.prs_perslid_key = p.prs_perslid_key)
          AND EXISTS
                (SELECT 1
                   FROM fac_gebruikersgroep gg, fac_groeprechten gr
                  WHERE gg.fac_groep_key = gr.fac_groep_key
                        AND gr.fac_functie_key IN (31, 32, 34, 35, 242) -- ORDBOF/ORDBO2/ORDSUP/ORDFIN/ORDAFR
                        AND gg.prs_perslid_key = p.prs_perslid_key);
*/
CREATE OR REPLACE VIEW blcc_v_rap_fact_delta_actual
AS
   SELECT DISTINCT
          debiteur_nr || cnt_contract_nummer || regel sortering,
          cnt_contract_nummer_intern, cnt_contract_versie,
          prs_debiteur_naam, debiteur_nr,
          cnt_contract_nummer, regel,
          prs_kostenplaats_nr, grtboekrek,
          opp_old, opp_new, opp_delta,
          bruto_old, bruto_new, bruto_delta,
          DECODE (opp_delta + bruto_delta, 0, NULL, 'X') mutatievlag
     FROM (SELECT COALESCE (y.cnt_contract_nummer_intern, '*' || x.cnt_contract_nummer_intern) cnt_contract_nummer_intern,
                  DECODE (x.cnt_contract_versie,      -- Is altijd een versie!
                          y.cnt_contract_versie, x.cnt_contract_versie,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.cnt_contract_versie, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_versie, '<LEEG>'))) cnt_contract_versie,
                  DECODE (x.prs_debiteur_naam, -- Is altijd een debiteur_naam!
                          y.prs_debiteur_naam, x.prs_debiteur_naam,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.prs_debiteur_naam, '***GEWIJZIGD: ' || COALESCE (x.prs_debiteur_naam, '<LEEG>'))) prs_debiteur_naam,
                  DECODE (x.debiteur_nr,       -- Niet altijd een debiteur_nr!
                          y.debiteur_nr, x.debiteur_nr,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.debiteur_nr, '***GEWIJZIGD: ' || COALESCE (x.debiteur_nr, '<LEEG>'))) debiteur_nr,
                  DECODE (x.cnt_contract_nummer,     -- Niet altijd een PO-nr!
                          y.cnt_contract_nummer, x.cnt_contract_nummer,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.cnt_contract_nummer, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_nummer, '<LEEG>'))) cnt_contract_nummer,
                  DECODE (x.regel,                     -- Is altijd een regel!
                          y.regel, x.regel,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.regel, '***GEWIJZIGD: ' || COALESCE (x.regel, '<LEEG>'))) regel,
                  DECODE (x.prs_kostenplaats_nr,       -- Is altijd een KP-nr!
                          y.prs_kostenplaats_nr, x.prs_kostenplaats_nr,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.prs_kostenplaats_nr, '***GEWIJZIGD: ' || COALESCE (x.prs_kostenplaats_nr, '<LEEG>'))) prs_kostenplaats_nr,
                  DECODE (x.grtboekrek,  -- Niet altijd een grootboekrekening!
                          y.grtboekrek, x.grtboekrek,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.grtboekrek, '***GEWIJZIGD: ' || COALESCE (x.grtboekrek, '<LEEG>'))) grtboekrek,
                  y.opp opp_old, x.opp opp_new,
                  (COALESCE (x.opp, 0) - COALESCE (y.opp, 0)) opp_delta,
                  y.bruto bruto_old, x.bruto bruto_new,
                  (COALESCE (x.bruto, 0) - COALESCE (y.bruto, 0)) bruto_delta
             FROM    (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_actual
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) x
                  LEFT JOIN
                     (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen)
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) y
                  ON x.cnt_contract_nummer_intern = y.cnt_contract_nummer_intern
                     --AND x.cnt_contract_versie = y.cnt_contract_versie
                     --AND x.prs_debiteur_naam = y.prs_debiteur_naam
                     --AND x.debiteur_nr = y.debiteur_nr
                     --AND x.cnt_contract_nummer = y.cnt_contract_nummer
                     AND x.regel = y.regel
           UNION
           SELECT COALESCE (x.cnt_contract_nummer_intern, 'x' || y.cnt_contract_nummer_intern) cnt_contract_nummer_intern,
                  DECODE (y.cnt_contract_versie,      -- Is altijd een versie!
                          x.cnt_contract_versie, y.cnt_contract_versie,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.cnt_contract_versie, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_versie, '<LEEG>'))) cnt_contract_versie,
                  DECODE (y.prs_debiteur_naam, -- Is altijd een debiteur_naam!
                          x.prs_debiteur_naam, y.prs_debiteur_naam,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.prs_debiteur_naam, '***GEWIJZIGD: ' || COALESCE (x.prs_debiteur_naam, '<LEEG>'))) prs_debiteur_naam,
                  DECODE (y.debiteur_nr,       -- Niet altijd een debiteur_nr!
                          x.debiteur_nr, y.debiteur_nr,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.debiteur_nr, '***GEWIJZIGD: ' || COALESCE (x.debiteur_nr, '<LEEG>'))) debiteur_nr,
                  DECODE (y.cnt_contract_nummer,     -- Niet altijd een PO-nr!
                          x.cnt_contract_nummer, y.cnt_contract_nummer,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.cnt_contract_nummer, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_nummer, '<LEEG>'))) cnt_contract_nummer,
                  DECODE (y.regel,                     -- Is altijd een regel!
                          x.regel, y.regel,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.regel, '***GEWIJZIGD: ' || COALESCE (x.regel, '<LEEG>'))) regel,
                  DECODE (y.prs_kostenplaats_nr,       -- Is altijd een KP-nr!
                          x.prs_kostenplaats_nr, y.prs_kostenplaats_nr,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.prs_kostenplaats_nr, '***GEWIJZIGD: ' || COALESCE (x.prs_kostenplaats_nr, '<LEEG>'))) prs_kostenplaats_nr,
                  DECODE (y.grtboekrek,  -- Niet altijd een grootboekrekening!
                          x.grtboekrek, y.grtboekrek,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.grtboekrek, '***GEWIJZIGD: ' || COALESCE (x.grtboekrek, '<LEEG>'))) grtboekrek,
                  y.opp opp_old, x.opp opp_new,
                  (COALESCE (x.opp, 0) - COALESCE (y.opp, 0)) opp_delta,
                  y.bruto bruto_old, x.bruto bruto_new,
                  (COALESCE (x.bruto, 0) - COALESCE (y.bruto, 0)) bruto_delta
             FROM    (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_actual
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) x
                  RIGHT JOIN
                     (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen)
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) y
                  ON x.cnt_contract_nummer_intern = y.cnt_contract_nummer_intern
                     --AND x.cnt_contract_versie = y.cnt_contract_versie
                     --AND x.prs_debiteur_naam = y.prs_debiteur_naam
                     --AND x.debiteur_nr = y.debiteur_nr
                     --AND x.cnt_contract_nummer = y.cnt_contract_nummer
                     AND x.regel = y.regel);

CREATE OR REPLACE VIEW blcc_v_rap_fact_delta_frozen
AS
   SELECT DISTINCT
          debiteur_nr || cnt_contract_nummer || regel sortering,
          cnt_contract_nummer_intern, cnt_contract_versie,
          prs_debiteur_naam, debiteur_nr,
          cnt_contract_nummer, regel,
          prs_kostenplaats_nr, grtboekrek,
          opp_old, opp_new, opp_delta,
          bruto_old, bruto_new, bruto_delta,
          DECODE (opp_delta + bruto_delta, 0, NULL, 'X') mutatievlag
     FROM (SELECT COALESCE (y.cnt_contract_nummer_intern, '*' || x.cnt_contract_nummer_intern) cnt_contract_nummer_intern,
                  DECODE (x.cnt_contract_versie,      -- Is altijd een versie!
                          y.cnt_contract_versie, x.cnt_contract_versie,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.cnt_contract_versie, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_versie, '<LEEG>'))) cnt_contract_versie,
                  DECODE (x.prs_debiteur_naam, -- Is altijd een debiteur_naam!
                          y.prs_debiteur_naam, x.prs_debiteur_naam,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.prs_debiteur_naam, '***GEWIJZIGD: ' || COALESCE (x.prs_debiteur_naam, '<LEEG>'))) prs_debiteur_naam,
                  DECODE (x.debiteur_nr,       -- Niet altijd een debiteur_nr!
                          y.debiteur_nr, x.debiteur_nr,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.debiteur_nr, '***GEWIJZIGD: ' || COALESCE (x.debiteur_nr, '<LEEG>'))) debiteur_nr,
                  DECODE (x.cnt_contract_nummer,     -- Niet altijd een PO-nr!
                          y.cnt_contract_nummer, x.cnt_contract_nummer,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.cnt_contract_nummer, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_nummer, '<LEEG>'))) cnt_contract_nummer,
                  DECODE (x.regel,                     -- Is altijd een regel!
                          y.regel, x.regel,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.regel, '***GEWIJZIGD: ' || COALESCE (x.regel, '<LEEG>'))) regel,
                  DECODE (x.prs_kostenplaats_nr,       -- Is altijd een KP-nr!
                          y.prs_kostenplaats_nr, x.prs_kostenplaats_nr,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.prs_kostenplaats_nr, '***GEWIJZIGD: ' || COALESCE (x.prs_kostenplaats_nr, '<LEEG>'))) prs_kostenplaats_nr,
                  DECODE (x.grtboekrek,  -- Niet altijd een grootboekrekening!
                          y.grtboekrek, x.grtboekrek,
                          DECODE (y.cnt_contract_nummer_intern, NULL, '*' || x.grtboekrek, '***GEWIJZIGD: ' || COALESCE (x.grtboekrek, '<LEEG>'))) grtboekrek,
                  y.opp opp_old, x.opp opp_new,
                  (COALESCE (x.opp, 0) - COALESCE (y.opp, 0)) opp_delta,
                  y.bruto bruto_old, x.bruto bruto_new,
                  (COALESCE (x.bruto, 0) - COALESCE (y.bruto, 0)) bruto_delta
             FROM    (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen)
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) x
                  LEFT JOIN
                     (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen WHERE maand <> (SELECT MAX (maand) FROM blcc_v_fact_frozen))
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) y
                  ON x.cnt_contract_nummer_intern = y.cnt_contract_nummer_intern
                     --AND x.cnt_contract_versie = y.cnt_contract_versie
                     --AND x.prs_debiteur_naam = y.prs_debiteur_naam
                     --AND x.debiteur_nr = y.debiteur_nr
                     --AND x.cnt_contract_nummer = y.cnt_contract_nummer
                     AND x.regel = y.regel
           UNION
           SELECT COALESCE (x.cnt_contract_nummer_intern, 'x' || y.cnt_contract_nummer_intern) cnt_contract_nummer_intern,
                  DECODE (y.cnt_contract_versie,      -- Is altijd een versie!
                          x.cnt_contract_versie, y.cnt_contract_versie,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.cnt_contract_versie, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_versie, '<LEEG>'))) cnt_contract_versie,
                  DECODE (y.prs_debiteur_naam, -- Is altijd een debiteur_naam!
                          x.prs_debiteur_naam, y.prs_debiteur_naam,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.prs_debiteur_naam, '***GEWIJZIGD: ' || COALESCE (x.prs_debiteur_naam, '<LEEG>'))) prs_debiteur_naam,
                  DECODE (y.debiteur_nr,       -- Niet altijd een debiteur_nr!
                          x.debiteur_nr, y.debiteur_nr,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.debiteur_nr, '***GEWIJZIGD: ' || COALESCE (x.debiteur_nr, '<LEEG>'))) debiteur_nr,
                  DECODE (y.cnt_contract_nummer,     -- Niet altijd een PO-nr!
                          x.cnt_contract_nummer, y.cnt_contract_nummer,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.cnt_contract_nummer, '***GEWIJZIGD: ' || COALESCE (x.cnt_contract_nummer, '<LEEG>'))) cnt_contract_nummer,
                  DECODE (y.regel,                     -- Is altijd een regel!
                          x.regel, y.regel,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.regel, '***GEWIJZIGD: ' || COALESCE (x.regel, '<LEEG>'))) regel,
                  DECODE (y.prs_kostenplaats_nr,       -- Is altijd een KP-nr!
                          x.prs_kostenplaats_nr, y.prs_kostenplaats_nr,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.prs_kostenplaats_nr, '***GEWIJZIGD: ' || COALESCE (x.prs_kostenplaats_nr, '<LEEG>'))) prs_kostenplaats_nr,
                  DECODE (y.grtboekrek,  -- Niet altijd een grootboekrekening!
                          x.grtboekrek, y.grtboekrek,
                          DECODE (x.cnt_contract_nummer_intern, NULL, 'x' || y.grtboekrek, '***GEWIJZIGD: ' || COALESCE (x.grtboekrek, '<LEEG>'))) grtboekrek,
                  y.opp opp_old, x.opp opp_new,
                  (COALESCE (x.opp, 0) - COALESCE (y.opp, 0)) opp_delta,
                  y.bruto bruto_old, x.bruto bruto_new,
                  (COALESCE (x.bruto, 0) - COALESCE (y.bruto, 0)) bruto_delta
             FROM    (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen)
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) x
                  RIGHT JOIN
                     (  SELECT cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0') cnt_contract_versie,
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek,
                               SUM (COALESCE (l_opp, 0) + COALESCE (h_opp, 0) + COALESCE (k_opp, 0) + COALESCE (o_opp, 0) + COALESCE (t_opp, 0)) opp,
                               SUM (mndnet + mndbtw) bruto
                          FROM blcc_v_fact_frozen
                         WHERE maand = (SELECT MAX (maand) FROM blcc_v_fact_frozen WHERE maand <> (SELECT MAX (maand) FROM blcc_v_fact_frozen))
                      GROUP BY cnt_contract_nummer_intern, COALESCE (cnt_contract_versie, '0'),
                               prs_debiteur_naam, debiteur_nr,
                               cnt_contract_nummer, regel,
                               prs_kostenplaats_nr, grtboekrek) y
                  ON x.cnt_contract_nummer_intern = y.cnt_contract_nummer_intern
                     --AND x.cnt_contract_versie = y.cnt_contract_versie
                     --AND x.prs_debiteur_naam = y.prs_debiteur_naam
                     --AND x.debiteur_nr = y.debiteur_nr
                     --AND x.cnt_contract_nummer = y.cnt_contract_nummer
                     AND x.regel = y.regel);

-- BLCC#41826: Leegstand
CREATE OR REPLACE VIEW blcc_v_rap_leegstand
AS
   SELECT TO_CHAR (x.mnd, 'yyyy-mm') maand,
          fp.alg_onrgoed_key,
          fp.alg_onrgoed_type,
          fp.fin_plaats,
		  c.prs_bedrijf_naam debiteur,
          c.prs_overeenkomst_nr debiteur_nr,
          fp.fin_opp,
          fp.fin_lhkot,
          DECODE (c.cnt_contract_key, NULL, 'Ja', 'Nee') leegstand
     FROM (    SELECT ADD_MONTHS (TRUNC (SYSDATE, 'mm'), LEVEL - 13) mnd
                 FROM DUAL
           CONNECT BY LEVEL <= 37) x
          LEFT JOIN (SELECT g.alg_gebouw_key alg_onrgoed_key, 'G' alg_onrgoed_type,
                            g.alg_gebouw_code || DECODE (glhkot.alg_kenmerk_key, 1082, ' / L', 1083, ' / H', 1084, ' / K', 1085, ' / O', ' / T')
                               fin_plaats,
                            fac.safe_to_number (alg_onrgoedkenmerk_waarde) fin_opp,
                            DECODE (glhkot.alg_kenmerk_key, 1082, 'L', 1083, 'H', 1084, 'K', 1085, 'O', 'T') fin_lhkot
                       FROM alg_v_aanweziggebouw g, alg_v_aanwezigonrgoedkenmerk glhkot
                      WHERE g.alg_gebouw_code LIKE '%FIN%'
                            AND g.alg_gebouw_key = glhkot.alg_onrgoed_key
                            AND glhkot.alg_kenmerk_key IN (1082, 1083, 1084, 1085, 1120) -- LHKOT Oppervlakten
                            AND glhkot.alg_onrgoed_niveau = 'G'
                     UNION ALL
                     SELECT v.alg_verdieping_key alg_onrgoed_key, 'V' alg_onrgoed_type,
                            g.alg_gebouw_code || '-' || TRIM (v.alg_verdieping_code) || DECODE (vlhkot.alg_kenmerk_key, 1092, ' / L', 1093, ' / H', 1094, ' / K', 1095, ' / O', ' / T')
                               fin_plaats,
                            fac.safe_to_number (alg_onrgoedkenmerk_waarde) fin_opp,
                            DECODE (vlhkot.alg_kenmerk_key, 1092, 'L', 1093, 'H', 1094, 'K', 1095, 'O', 'T') fin_lhkot
                       FROM alg_v_aanwezigverdieping v, alg_gebouw g, alg_v_aanwezigonrgoedkenmerk vlhkot
                      WHERE v.alg_verdieping_code LIKE '%FIN%'
                            AND v.alg_gebouw_key = g.alg_gebouw_key
                            AND v.alg_verdieping_key = vlhkot.alg_onrgoed_key
                            AND vlhkot.alg_kenmerk_key IN (1092, 1093, 1094, 1095, 1121) -- LHKOT Oppervlakten
                            AND vlhkot.alg_onrgoed_niveau = 'V'
                     UNION ALL
                     SELECT r.alg_ruimte_key alg_onrgoed_key, 'R' alg_onrgoed_type,
                            g.alg_gebouw_code || '-' || v.alg_verdieping_code || '-' || r.alg_ruimte_nr || ' / ' || ud.fac_usrdata_code
                               fin_plaats,
                            r.alg_ruimte_opp_alt1 fin_opp,
                            ud.fac_usrdata_code fin_lhkot
                       FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_v_aanwezigonrgoedkenmerk rlhkot, fac_usrdata ud
                      WHERE r.alg_ruimte_nr LIKE 'FIN%'
                            AND r.alg_verdieping_key = v.alg_verdieping_key
                            AND v.alg_gebouw_key = g.alg_gebouw_key
                            AND r.alg_ruimte_key = rlhkot.alg_onrgoed_key
                            AND rlhkot.alg_kenmerk_key = 1100 -- LHKOT Classificatie
                            AND rlhkot.alg_onrgoed_niveau = 'R'
                            AND rlhkot.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) fp -- FIN-plaatsen
             ON 1 = 1
          LEFT JOIN (SELECT c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_versie,
                            c.cnt_contract_looptijd_van, c.cnt_contract_looptijd_tot,
                            cp.cnt_alg_plaats_key, cp.cnt_alg_plaats_code, b.prs_bedrijf_naam, b.prs_overeenkomst_nr
                       FROM cnt_v_aanwezigcontract c, cnt_kenmerkcontract vsov, cnt_contract_plaats cp, prs_bedrijf b
                      WHERE c.ins_discipline_key = 621       -- Huurcontracten
                            AND c.cnt_contract_key = vsov.cnt_contract_key
                            AND vsov.cnt_kenmerkcontract_verwijder IS NULL
                            AND vsov.cnt_kenmerk_key = 21              -- VSOV
                            AND vsov.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd telt als geen leegstand!
                            AND cp.cnt_contract_plaats_verwijder IS NULL
                            AND c.cnt_contract_key = cp.cnt_contract_key
                            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) c
             ON x.mnd BETWEEN TRUNC (c.cnt_contract_looptijd_van) AND TRUNC (c.cnt_contract_looptijd_tot + 1)
                AND fp.alg_onrgoed_key = c.cnt_alg_plaats_key;

-- BLCC#41827: Rent roll met een per bedrijf/regel/jaar-rij een contractbedrag-
--             kolom (ter pivot in FACILITOR naar een per bedrijf/regel-rij een
--             contractbedrag per jaar-kolom).
CREATE OR REPLACE VIEW blcc_v_rap_rent_roll
AS
     SELECT prs_bedrijf_naam huurder,
            regel,
            lv ingangsdatum_huurovk,
            lt einddatum_huurovk,
            12 * mndnet_heel rent,
            TO_CHAR (maand, 'yyyy') jaar,
            SUM (mndnet_deel) totaal                   -- Regeltotaal per jaar
       FROM (
     SELECT p.maand,
            c.lv,
            c.lt,
            c.prs_bedrijf_naam,
            x.regel,
            SUM (ROUND (x.mndnet, 2)) mndnet_heel,
            SUM (ROUND ((LEAST (TRUNC (c.lt), LAST_DAY (p.maand)) - GREATEST (TRUNC (c.lv), p.maand) + 1) / (LAST_DAY (p.maand) - p.maand + 1) * x.mndnet, 2))
               mndnet_deel                            -- Regeltotaal per maand
       FROM (    SELECT ADD_MONTHS (TRUNC (SYSDATE, 'yyyy'), LEVEL - 1) maand
                   FROM DUAL
             CONNECT BY ADD_MONTHS (TRUNC (SYSDATE, 'yyyy'), LEVEL - 1) <=
                           (SELECT MAX (TRUNC (cnt_contract_looptijd_tot, 'mm'))
                              FROM cnt_v_aanwezigcontract c, cnt_kenmerkcontract vsov
                             WHERE c.cnt_contract_status = 0  -- NIET Gesloten
                                   AND c.ins_discipline_key IN (621, 721, 722, 724) -- Huurcontracten+PP/CV+Utility infra/voorz+General infra/voorz
                                   AND c.cnt_contract_key = vsov.cnt_contract_key
                                   AND vsov.cnt_kenmerkcontract_verwijder IS NULL
                                   AND vsov.cnt_kenmerk_key = 21       -- VSOV
                                   AND vsov.cnt_kenmerkcontract_waarde = '454')) p -- ALLEEN Verhuurd!
            LEFT JOIN (SELECT c.cnt_contract_key, c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt, b.prs_bedrijf_naam
                         FROM cnt_v_aanwezigcontract c, cnt_kenmerkcontract vsov, prs_bedrijf b
                        WHERE c.cnt_contract_status = 0       -- NIET Gesloten
                              AND c.ins_discipline_key = 621 -- Huurcontracten
                              AND c.cnt_contract_key = vsov.cnt_contract_key
                              AND vsov.cnt_kenmerkcontract_verwijder IS NULL
                              AND vsov.cnt_kenmerk_key = 21            -- VSOV
                              AND vsov.cnt_kenmerkcontract_waarde = '454' -- ALLEEN Verhuurd!
                              --AND c.cnt_prs_bedrijf_key = 11207 -- Arlanxeo (om te testen)
                              AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                       UNION ALL
                       SELECT c.cnt_contract_key, c.cnt_contract_looptijd_van lv, c.cnt_contract_looptijd_tot lt, b.prs_bedrijf_naam
                         FROM cnt_v_aanwezigcontract c, prs_bedrijf b
                        WHERE c.cnt_contract_status = 0   -- NIET Gesloten
                              AND c.ins_discipline_key IN (721, 722, 724) -- PP/CV+Utility infra/voorz+General infra/voorz
                              --AND c.cnt_prs_bedrijf_key = 11207 -- Arlanxeo (om te testen)
                              AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) c
               ON p.maand BETWEEN TRUNC (c.lv, 'mm') AND TRUNC (c.lt, 'mm')
            LEFT JOIN (SELECT x.cnt_contract_key,             -- M2 feitelijk!
                              'Campus Rent' regel,
                              ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                              ((COALESCE (fac.safe_to_number(COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number(COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number(COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number(COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number(COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0)))
                                 mndnet -- Netto maandbedrag (incl. kortingspercentage)
                         FROM (SELECT c.cnt_contract_key, c.cnt_contract_korting
                                 FROM cnt_v_aanwezigcontract c
                                WHERE c.ins_discipline_key = 621) x -- Huurcontracten
                              LEFT JOIN cnt_kenmerkcontract tt_kc
                                 ON x.cnt_contract_key = tt_kc.cnt_contract_key
                                    AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                                    AND tt_kc.cnt_kenmerk_key = 23 -- Tarieftabel
                              LEFT JOIN fac_v_aanwezigusrdata tt_ud
                                 ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
                              LEFT JOIN fac_v_aanwezigusrdata ltar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                                    AND ltar.fac_usrdata_code = 'L' -- L-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata htar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                                    AND htar.fac_usrdata_code = 'H' -- H-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata ktar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                                    AND ktar.fac_usrdata_code = 'K' -- K-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata otar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                                    AND otar.fac_usrdata_code = 'O' -- O-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata ttar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                                    AND ttar.fac_usrdata_code = 'T' -- T-Tarief
                              LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
                                 ON x.cnt_contract_key = ccp.cnt_contract_key
                                    AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
                                 ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                                    AND glo.alg_kenmerk_key = 1082 -- GL-Oppervlakte
                                    AND glo.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk gho
                                 ON ccp.cnt_alg_plaats_key = gho.alg_onrgoed_key
                                    AND gho.alg_kenmerk_key = 1083 -- GH-Oppervlakte
                                    AND gho.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
                                 ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                                    AND gko.alg_kenmerk_key = 1084 -- GK-Oppervlakte
                                    AND gko.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk goo
                                 ON ccp.cnt_alg_plaats_key = goo.alg_onrgoed_key
                                    AND goo.alg_kenmerk_key = 1085 -- GO-Oppervlakte
                                    AND goo.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk gto
                                 ON ccp.cnt_alg_plaats_key = gto.alg_onrgoed_key
                                    AND gto.alg_kenmerk_key = 1120 -- GT-Oppervlakte
                                    AND gto.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
                                 ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                                    AND vlo.alg_kenmerk_key = 1092 -- VL-Oppervlakte
                                    AND vlo.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vho
                                 ON ccp.cnt_alg_plaats_key = vho.alg_onrgoed_key
                                    AND vho.alg_kenmerk_key = 1093 -- VH-Oppervlakte
                                    AND vho.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
                                 ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                                    AND vko.alg_kenmerk_key = 1094 -- VK-Oppervlakte
                                    AND vko.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk voo
                                 ON ccp.cnt_alg_plaats_key = voo.alg_onrgoed_key
                                    AND voo.alg_kenmerk_key = 1095 -- VO-Oppervlakte
                                    AND voo.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vto
                                 ON ccp.cnt_alg_plaats_key = vto.alg_onrgoed_key
                                    AND vto.alg_kenmerk_key = 1121 -- VT-Oppervlakte
                                    AND vto.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
                                 ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                                    AND rlhkot.alg_kenmerk_key = 1100 -- LHKOT Classificatie
                                    AND rlhkot.alg_onrgoed_niveau = 'R'
                              LEFT JOIN alg_v_aanwezigruimte rxo
                                 ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
                       UNION ALL                              -- M2 correctie!
                       SELECT x.cnt_contract_key,
                              'Campus Rent' regel,
                              ((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                              ((COALESCE (fac.safe_to_number (clo.cnt_kenmerkcontract_waarde), 0) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number (cho.cnt_kenmerkcontract_waarde), 0) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number (cko.cnt_kenmerkcontract_waarde), 0) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number (coo.cnt_kenmerkcontract_waarde), 0) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                               (COALESCE (fac.safe_to_number (cto.cnt_kenmerkcontract_waarde), 0) * COALESCE (ttar.fac_usrdata_prijs / 12, 0)))
                                 mndnet -- Netto maandbedrag (incl. kortingspercentage)
                         FROM (SELECT c.cnt_contract_key, c.cnt_contract_korting
                                 FROM cnt_v_aanwezigcontract c
                                WHERE c.ins_discipline_key = 621) x -- Huurcontracten
                              LEFT JOIN cnt_kenmerkcontract tt_kc
                                 ON x.cnt_contract_key = tt_kc.cnt_contract_key
                                    AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                                    AND tt_kc.cnt_kenmerk_key = 23 -- Tarieftabel
                              LEFT JOIN fac_v_aanwezigusrdata tt_ud
                                 ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
                              LEFT JOIN fac_v_aanwezigusrdata ltar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                                    AND ltar.fac_usrdata_code = 'L' -- L-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata htar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                                    AND htar.fac_usrdata_code = 'H' -- H-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata ktar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                                    AND ktar.fac_usrdata_code = 'K' -- K-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata otar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                                    AND otar.fac_usrdata_code = 'O' -- O-Tarief
                              LEFT JOIN fac_v_aanwezigusrdata ttar
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                                    AND ttar.fac_usrdata_code = 'T' -- T-Tarief
                              LEFT JOIN cnt_kenmerkcontract clo
                                 ON x.cnt_contract_key = clo.cnt_contract_key
                                    AND clo.cnt_kenmerkcontract_verwijder IS NULL
                                    AND clo.cnt_kenmerk_key = 381            -- CL-Oppervlakte
                              LEFT JOIN cnt_kenmerkcontract cho
                                 ON x.cnt_contract_key = cho.cnt_contract_key
                                    AND cho.cnt_kenmerkcontract_verwijder IS NULL
                                    AND cho.cnt_kenmerk_key = 382            -- CH-Oppervlakte
                              LEFT JOIN cnt_kenmerkcontract cko
                                 ON x.cnt_contract_key = cko.cnt_contract_key
                                    AND cko.cnt_kenmerkcontract_verwijder IS NULL
                                    AND cko.cnt_kenmerk_key = 383            -- CK-Oppervlakte
                              LEFT JOIN cnt_kenmerkcontract coo
                                 ON x.cnt_contract_key = coo.cnt_contract_key
                                    AND coo.cnt_kenmerkcontract_verwijder IS NULL
                                    AND coo.cnt_kenmerk_key = 384            -- CO-Oppervlakte
                              LEFT JOIN cnt_kenmerkcontract cto
                                 ON x.cnt_contract_key = cto.cnt_contract_key
                                    AND cto.cnt_kenmerkcontract_verwijder IS NULL
                                    AND cto.cnt_kenmerk_key = 385            -- CT-Oppervlakte
                        WHERE (   clo.cnt_kenmerkcontract_waarde IS NOT NULL
                               OR cho.cnt_kenmerkcontract_waarde IS NOT NULL
                               OR cko.cnt_kenmerkcontract_waarde IS NOT NULL
                               OR coo.cnt_kenmerkcontract_waarde IS NOT NULL
                               OR cto.cnt_kenmerkcontract_waarde IS NOT NULL)
                       UNION ALL                                        -- FES
                       SELECT x.cnt_contract_key,
                              'FES' regel,
                              -1 *
                              ((COALESCE (fac.safe_to_number(COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * (COALESCE (lfes.fac_usrdata_prijs, 0) / 12)) +
                               (COALESCE (fac.safe_to_number(COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * (COALESCE (kfes.fac_usrdata_prijs, 0) / 12)))
                                 mndnet -- Netto maandbedrag (excl. kortingspercentage)
                         FROM (SELECT c.cnt_contract_key
                                 FROM cnt_v_aanwezigcontract c
                                WHERE c.ins_discipline_key = 621) x -- Huurcontracten
                              LEFT JOIN cnt_kenmerkcontract tt_kc
                                 ON x.cnt_contract_key = tt_kc.cnt_contract_key
                                    AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                                    AND tt_kc.cnt_kenmerk_key = 23 -- Tarieftabel
                              LEFT JOIN fac_v_aanwezigusrdata tt_ud
                                 ON tt_kc.cnt_kenmerkcontract_waarde = TO_CHAR (tt_ud.fac_usrdata_key)
                              LEFT JOIN fac_v_aanwezigusrdata lfes
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (lfes.fac_usrtab_key)
                                    AND lfes.fac_usrdata_code = 'LFES' -- FES-Tarief op L-Oppervlakte
                              LEFT JOIN fac_v_aanwezigusrdata kfes
                                 ON tt_ud.fac_usrdata_code = TO_CHAR (kfes.fac_usrtab_key)
                                    AND kfes.fac_usrdata_code = 'KFES' -- FES-Tarief op K-Oppervlakte
                              LEFT JOIN cnt_kenmerkcontract fes
                                 ON x.cnt_contract_key = fes.cnt_contract_key
                                    AND fes.cnt_kenmerkcontract_verwijder IS NULL
                                    AND fes.cnt_kenmerk_key = 42 -- FES-vinkje
                              LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
                                 ON x.cnt_contract_key = ccp.cnt_contract_key
                                    AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
                                 ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                                    AND glo.alg_kenmerk_key = 1082 -- GL-Oppervlakte
                                    AND glo.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
                                 ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                                    AND gko.alg_kenmerk_key = 1084 -- GK-Oppervlakte
                                    AND gko.alg_onrgoed_niveau = 'G'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
                                 ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                                    AND vlo.alg_kenmerk_key = 1092 -- VL-Oppervlakte
                                    AND vlo.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
                                 ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                                    AND vko.alg_kenmerk_key = 1094 -- VK-Oppervlakte
                                    AND vko.alg_onrgoed_niveau = 'V'
                              LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
                                 ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                                    AND rlhkot.alg_kenmerk_key = 1100 -- LHKOT Classificatie
                                    AND rlhkot.alg_onrgoed_niveau = 'R'
                              LEFT JOIN alg_v_aanwezigruimte rxo
                                 ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
                        WHERE fes.cnt_kenmerkcontract_waarde IS NOT NULL
                       UNION ALL                                   -- CFF Rent
                       SELECT cnt_contract_key,
                              'CFF Rent' regel,
                              -1 * fac_usrdata_prijs * (mndopp - mndfes - fac.safe_to_number (cnt_kenmerkcontract_waarde))
                                 mndnet -- CFF-subsidie * Netto maandbedrag alle meters minus Netto maandbedrag FES-korting minus kortingsbedrag)=CFF Rent
                         FROM (  SELECT x.cnt_contract_key,
                                        kb_kc.cnt_kenmerkcontract_waarde, -- Netto kortingsbedrag (excl. kortingspercentage)!
                                        ccf_ud.fac_usrdata_prijs, -- CFF-subsidiepercentatie %
                                        SUM (((100 - COALESCE (x.cnt_contract_korting, 0)) / 100) *
                                             ((COALESCE (fac.safe_to_number(COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ltar.fac_usrdata_prijs / 12, 0)) +
                                              (COALESCE (fac.safe_to_number(COALESCE (gho.alg_onrgoedkenmerk_waarde, vho.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '482', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (htar.fac_usrdata_prijs / 12, 0)) +
                                              (COALESCE (fac.safe_to_number(COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ktar.fac_usrdata_prijs / 12, 0)) +
                                              (COALESCE (fac.safe_to_number(COALESCE (goo.alg_onrgoedkenmerk_waarde, voo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '484', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (otar.fac_usrdata_prijs / 12, 0)) +
                                              (COALESCE (fac.safe_to_number(COALESCE (gto.alg_onrgoedkenmerk_waarde, vto.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '561', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0)) * COALESCE (ttar.fac_usrdata_prijs / 12, 0))))
                                           mndopp, -- Netto maandbedrag alle meters (incl. kortingspercentage)
                                        SUM ((DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (glo.alg_onrgoedkenmerk_waarde, vlo.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '481', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (lfes.fac_usrdata_prijs / 12, 0)) +
                                             (DECODE (fes.cnt_kenmerkcontract_waarde, NULL, 0, COALESCE (fac.safe_to_number (COALESCE (gko.alg_onrgoedkenmerk_waarde, vko.alg_onrgoedkenmerk_waarde)), DECODE (rlhkot.alg_onrgoedkenmerk_waarde, '483', COALESCE (rxo.alg_ruimte_opp_alt1, 0), 0))) * COALESCE (kfes.fac_usrdata_prijs / 12, 0)))
                                           mndfes  -- Netto maandbedrag FES-korting (excl. kortingspercentage)
                                   FROM (SELECT c.cnt_contract_key, c.cnt_contract_korting
                                           FROM cnt_v_aanwezigcontract c
                                          WHERE c.ins_discipline_key = 621) x -- Huurcontracten
                                        LEFT JOIN cnt_kenmerkcontract tt_kc
                                           ON x.cnt_contract_key = tt_kc.cnt_contract_key
                                              AND tt_kc.cnt_kenmerkcontract_verwijder IS NULL
                                              AND tt_kc.cnt_kenmerk_key = 23 -- Tarieftabel
                                        LEFT JOIN fac_v_aanwezigusrdata tt_ud
                                           ON tt_kc.cnt_kenmerkcontract_waarde =
                                                 TO_CHAR (tt_ud.fac_usrdata_key)
                                        LEFT JOIN fac_v_aanwezigusrdata ltar
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (ltar.fac_usrtab_key)
                                              AND ltar.fac_usrdata_code = 'L' -- L-Tarief
                                        LEFT JOIN fac_v_aanwezigusrdata htar
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (htar.fac_usrtab_key)
                                              AND htar.fac_usrdata_code = 'H' -- H-Tarief
                                        LEFT JOIN fac_v_aanwezigusrdata ktar
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (ktar.fac_usrtab_key)
                                              AND ktar.fac_usrdata_code = 'K' -- K-Tarief
                                        LEFT JOIN fac_v_aanwezigusrdata otar
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (otar.fac_usrtab_key)
                                              AND otar.fac_usrdata_code = 'O' -- O-Tarief
                                        LEFT JOIN fac_v_aanwezigusrdata ttar
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (ttar.fac_usrtab_key)
                                              AND ttar.fac_usrdata_code = 'T' -- T-Tarief
                                        LEFT JOIN cnt_kenmerkcontract kb_kc
                                           ON x.cnt_contract_key = kb_kc.cnt_contract_key
                                              AND kb_kc.cnt_kenmerkcontract_verwijder IS NULL
                                              AND kb_kc.cnt_kenmerk_key = 24 -- Kortingsbedrag
                                        LEFT JOIN cnt_kenmerkcontract cff_kc
                                           ON x.cnt_contract_key = cff_kc.cnt_contract_key
                                              AND cff_kc.cnt_kenmerkcontract_verwijder IS NULL
                                              AND cff_kc.cnt_kenmerk_key = 44 -- CFF-subsidie
                                        LEFT JOIN fac_v_aanwezigusrdata ccf_ud
                                           ON cff_kc.cnt_kenmerkcontract_waarde = TO_CHAR (ccf_ud.fac_usrdata_key)
                                        LEFT JOIN cnt_v_aanwezigcontract_plaats ccp
                                           ON x.cnt_contract_key = ccp.cnt_contract_key
                                              AND ccp.cnt_alg_plaats_code IN ('G', 'V', 'R')
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk glo
                                           ON ccp.cnt_alg_plaats_key = glo.alg_onrgoed_key
                                              AND glo.alg_kenmerk_key = 1082 -- GL-Oppervlakte
                                              AND glo.alg_onrgoed_niveau = 'G'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk gho
                                           ON ccp.cnt_alg_plaats_key = gho.alg_onrgoed_key
                                              AND gho.alg_kenmerk_key = 1083 -- GH-Oppervlakte
                                              AND gho.alg_onrgoed_niveau = 'G'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk gko
                                           ON ccp.cnt_alg_plaats_key = gko.alg_onrgoed_key
                                              AND gko.alg_kenmerk_key = 1084 -- GK-Oppervlakte
                                              AND gko.alg_onrgoed_niveau = 'G'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk goo
                                           ON ccp.cnt_alg_plaats_key = goo.alg_onrgoed_key
                                              AND goo.alg_kenmerk_key = 1085 -- GO-Oppervlakte
                                              AND goo.alg_onrgoed_niveau = 'G'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk gto
                                           ON ccp.cnt_alg_plaats_key = gto.alg_onrgoed_key
                                              AND gto.alg_kenmerk_key = 1120 -- GT-Oppervlakte
                                              AND gto.alg_onrgoed_niveau = 'G'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk vlo
                                           ON ccp.cnt_alg_plaats_key = vlo.alg_onrgoed_key
                                              AND vlo.alg_kenmerk_key = 1092 -- VL-Oppervlakte
                                              AND vlo.alg_onrgoed_niveau = 'V'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk vho
                                           ON ccp.cnt_alg_plaats_key = vho.alg_onrgoed_key
                                              AND vho.alg_kenmerk_key = 1093 -- VH-Oppervlakte
                                              AND vho.alg_onrgoed_niveau = 'V'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk vko
                                           ON ccp.cnt_alg_plaats_key = vko.alg_onrgoed_key
                                              AND vko.alg_kenmerk_key = 1094 -- VK-Oppervlakte
                                              AND vko.alg_onrgoed_niveau = 'V'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk voo
                                           ON ccp.cnt_alg_plaats_key = voo.alg_onrgoed_key
                                              AND voo.alg_kenmerk_key = 1095 -- VO-Oppervlakte
                                              AND voo.alg_onrgoed_niveau = 'V'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk vto
                                           ON ccp.cnt_alg_plaats_key = vto.alg_onrgoed_key
                                              AND vto.alg_kenmerk_key = 1121 -- VT-Oppervlakte
                                              AND vto.alg_onrgoed_niveau = 'V'
                                        LEFT JOIN alg_v_aanwezigonrgoedkenmerk rlhkot
                                           ON ccp.cnt_alg_plaats_key = rlhkot.alg_onrgoed_key
                                              AND rlhkot.alg_kenmerk_key = 1100 -- LHKOT Classificatie
                                              AND rlhkot.alg_onrgoed_niveau = 'R'
                                        LEFT JOIN alg_v_aanwezigruimte rxo
                                           ON ccp.cnt_alg_plaats_key = rxo.alg_ruimte_key
                                        LEFT JOIN fac_v_aanwezigusrdata lfes
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (lfes.fac_usrtab_key)
                                              AND lfes.fac_usrdata_code = 'LFES' -- FES-Tarief op L-Oppervlakte
                                        LEFT JOIN fac_v_aanwezigusrdata kfes
                                           ON tt_ud.fac_usrdata_code = TO_CHAR (kfes.fac_usrtab_key)
                                              AND kfes.fac_usrdata_code = 'KFES' -- FES-Tarief op K-Oppervlakte
                                        LEFT JOIN cnt_kenmerkcontract fes
                                           ON x.cnt_contract_key = fes.cnt_contract_key
                                              AND fes.cnt_kenmerkcontract_verwijder IS NULL
                                              AND fes.cnt_kenmerk_key = 42                   -- FES-vinkje
                                  WHERE COALESCE (cff_kc.cnt_kenmerkcontract_waarde, '534') != '534' -- NIET Nvt!
                               GROUP BY x.cnt_contract_key,
                                        kb_kc.cnt_kenmerkcontract_waarde,
                                        ccf_ud.fac_usrdata_prijs)
                       UNION ALL -- Alle individuele maandbedragen voor 721, 722 en 724!
                         SELECT c.cnt_contract_key,
                                'Campus Rent' regel,
                                SUM (((100 - COALESCE (c.cnt_contract_korting, 0)) / 100) * fac.safe_to_number (kc.cnt_kenmerkcontract_waarde))
                                   mndnet -- Netto kortingsbedrag (excl. kortingspercentage)!
                           FROM cnt_v_aanwezigcontract c, cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk
                          WHERE c.ins_discipline_key IN (721, 722, 724) -- PP/CV+Utility infra/voorz+General infra/voorz
                                AND c.cnt_contract_key = kc.cnt_contract_key
                                AND kc.cnt_kenmerkcontract_verwijder IS NULL
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
                                AND sk.cnt_srtkenmerk_key > 60
                                AND sk.cnt_srtkenmerk_kenmerktype = 'N' -- Numeriek
                                AND UPPER (sk.cnt_srtkenmerk_dimensie) LIKE '%P.MND.%'
                       GROUP BY c.cnt_contract_key
                       UNION ALL -- Alle individuele kortingsbedragen (per maand) voor 621, 721, 722 en 724!
                       SELECT c.cnt_contract_key,
                              'Campus Rent' regel,
                              -1 * fac.safe_to_number (kc.cnt_kenmerkcontract_waarde)
                                 mndnet -- Netto kortingsbedrag (excl. kortingspercentage)!
                         FROM cnt_v_aanwezigcontract c, cnt_kenmerkcontract kc, cnt_kenmerk k
                        WHERE c.ins_discipline_key IN (621, 721, 722, 724) -- Huurcontracten+PP/CV+Utility infra/voorz+General infra/voorz
                              AND c.cnt_contract_key = kc.cnt_contract_key
                              AND kc.cnt_kenmerkcontract_verwijder IS NULL
                              AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                              AND k.cnt_srtkenmerk_key = 44  -- Kortingsbedrag
                              AND kc.cnt_kenmerkcontract_waarde != '0') x
               ON c.cnt_contract_key = x.cnt_contract_key
   GROUP BY p.maand,
            c.lv,
            c.lt,
            c.prs_bedrijf_naam,
            x.regel)
   GROUP BY prs_bedrijf_naam,
            regel,
            lv,
            lt,
            12 * mndnet_heel,
            TO_CHAR (maand, 'yyyy');


CREATE OR REPLACE VIEW blcc_v_huurcontracten
(
   cnt_contract_key,
   cnt_contract_id,
   cnt_contract_tht
)
AS
   SELECT DISTINCT v.cnt_contract_key,
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || '/' || cd.ins_discipline_omschrijving || ' [' || v.prs_debiteur_naam || ']',
          NULL
     FROM blcc_v_fact_actual v, cnt_discipline cd
    WHERE v.sortering = TO_CHAR (cd.ins_discipline_key)
   UNION
   SELECT DISTINCT cnt_contract_key,
          v.cnt_contract_nummer_intern || DECODE (v.cnt_contract_versie, NULL, '', '.' || v.cnt_contract_versie) || '/' || cd.ins_discipline_omschrijving || ' [' || v.prs_debiteur_naam || ']',
          ADD_MONTHS (v.lv, 1)
     FROM blcc_v_fact_frozen v, cnt_discipline cd
    WHERE v.sortering = TO_CHAR (cd.ins_discipline_key);


-- BLCC#51200: Indexatie 2019!
CREATE OR REPLACE PROCEDURE blcc_export_indexwerk (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
   -- Huurcontracten+PP/CV+Shared facilities+IT Diensten+OZB
   CURSOR ccnt (p_splitsindexdatum DATE)
   IS
        SELECT '[' || c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') || '] '
                  aanduiding,
               c.ins_discipline_key,
               c.cnt_contract_key,
               c.cnt_contract_nummer_intern,
               c.cnt_contract_versie,
               c.cnt_contract_looptijd_tot einddatum,
               c.cnt_contract_kosten,
               c.cnt_contract_termijnkosten,
               c.cnt_prs_bedrijf_key,
               DECODE (c.ins_discipline_key,
                       721, 2.00,                     -- PP/CV in 2019: 2,00%!
                       725, 2.00,         -- Shared facilities in 2019: 2,00%!
                       761, 2.00,                       -- OZB in 2019: 2,00%!
                       1.0)                         -- 621+741 in 2019: 1,00%!
                  index_percentage
          FROM cnt_v_aanwezigcontract c
         WHERE c.ins_discipline_key IN (621, 721, 725, 741, 761)
               AND c.cnt_contract_status = 0                 -- NIET Gesloten!
               AND NOT EXISTS -- Beschouw alleen laatste versie van contracten
                     (SELECT 1
                        FROM cnt_v_aanwezigcontract
                       WHERE cnt_contract_nummer_intern = c.cnt_contract_nummer_intern
                             AND cnt_contract_versie > COALESCE (c.cnt_contract_versie, '0'))
               AND c.cnt_contract_looptijd_tot > p_splitsindexdatum
      ORDER BY TO_NUMBER (c.cnt_contract_nummer_intern);

   c_index_percentage    NUMBER := 1.0;    -- Default/standaard in 2019: 1,0%!
   c_splitsindexdatum    DATE := TO_DATE ('01012019', 'ddmmyyyy');
   v_errorhint           VARCHAR2 (1000) := '';
   v_errormsg            VARCHAR2 (1000) := '';
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_count               NUMBER;
   v_new_tarieftab_key   NUMBER;
   v_old_tarieftab_key   NUMBER;
   v_new_tarieftab_val   NUMBER;
   v_new_contract_key    NUMBER;
BEGIN
   -- Aanmaken en indexeren tarieftabel 20xx.
   v_errorhint := 'Fout bepalen nieuwe tarieftabel';
   SELECT COUNT ( * )
     INTO v_count
     FROM fac_usrtab
    WHERE fac_usrtab_naam = 'Tarieven ' || TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yyyy');

   IF v_count > 0
   THEN
      SELECT fac_usrtab_key
        INTO v_new_tarieftab_key
        FROM fac_usrtab
       WHERE fac_usrtab_naam = 'Tarieven ' || TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yyyy');
   ELSE
      v_errorhint := 'Fout toevoegen tarieftabel';
      INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving)
          VALUES ('Tarieven ' || TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yyyy'), 'Tarieven ' || TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yyyy') || ' per jaar')
       RETURNING fac_usrtab_key
            INTO v_new_tarieftab_key;
      COMMIT;
   END IF;

   v_errorhint := 'Fout bepalen oude tarieftabel';
   SELECT COUNT ( * )
     INTO v_count
     FROM fac_usrtab
    WHERE fac_usrtab_naam = 'Tarieven ' || TO_CHAR (SYSDATE, 'yyyy');

   IF v_count > 0
   THEN
      SELECT fac_usrtab_key
        INTO v_old_tarieftab_key
        FROM fac_usrtab
       WHERE fac_usrtab_naam = 'Tarieven ' || TO_CHAR (SYSDATE, 'yyyy');

      v_errorhint := 'Fout vullen nieuwe tarieftabel';
      INSERT INTO fac_usrdata (fac_usrtab_key,
                               fac_usrdata_code,
                               fac_usrdata_omschr,
                               fac_usrdata_volgnr,
                               fac_usrdata_vervaldatum,
                               fac_usrdata_prijs)
           SELECT v_new_tarieftab_key,
                  fac_usrdata_code,
                  fac_usrdata_omschr,
                  fac_usrdata_volgnr,
                  fac_usrdata_vervaldatum,
                  ROUND (fac_usrdata_prijs * ((100 + c_index_percentage) / 100), 2)
             FROM fac_v_aanwezigusrdata
            WHERE fac_usrtab_key = v_old_tarieftab_key
         ORDER BY fac_usrdata_volgnr;

      v_errorhint := 'Fout toevoegen nieuwe tarieftabel-entry';
      INSERT INTO fac_usrdata (fac_usrtab_key,
                               fac_usrdata_code,
                               fac_usrdata_omschr,
                               fac_usrdata_volgnr,
                               fac_usrdata_vervaldatum,
                               fac_usrdata_prijs)
          VALUES (223,                                    -- Tarieftabel-tabel
                  v_new_tarieftab_key,
                  'Tarieven ' || TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yyyy'),
                  TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'yy'),
                  NULL,
                  NULL)
       RETURNING fac_usrdata_key
            INTO v_new_tarieftab_val;
   END IF;

   -- Splitsen en indexeren (huur)contracten.
   FOR rc IN ccnt (c_splitsindexdatum)
   LOOP
      BEGIN
         v_errorhint := 'Fout splitsen contract.';
         cnt.splitscontract (rc.cnt_contract_key, c_splitsindexdatum, NULL, NULL);
         COMMIT;

         -- Na splitsen de nieuwe versie indexeren.
         v_errorhint := 'Fout bepalen nieuwe versie.';
         SELECT cnt_contract_key
           INTO v_new_contract_key
           FROM cnt_v_aanwezigcontract
          WHERE cnt_contract_nummer_intern = rc.cnt_contract_nummer_intern
                AND cnt_contract_versie > COALESCE (rc.cnt_contract_versie, '0');

         v_errorhint := 'Fout bijwerken maandbedragen.';
         FOR rkc
            IN (  SELECT kc.cnt_kenmerkcontract_key,
                         kc.cnt_kenmerkcontract_waarde cur_waarde,
                         ROUND (fac.safe_to_number (kc.cnt_kenmerkcontract_waarde) * ((100 + rc.index_percentage) / 100), 2)
                            new_waarde
                    FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk
                   WHERE kc.cnt_contract_key = v_new_contract_key
                         AND kc.cnt_kenmerkcontract_verwijder IS NULL
                         AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                         AND k.cnt_kenmerk_verwijder IS NULL
                         AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
                         AND sk.cnt_srtkenmerk_verwijder IS NULL
                         AND sk.cnt_srtkenmerk_kenmerktype = 'N'
                         AND UPPER (sk.cnt_srtkenmerk_dimensie) LIKE '%P.MND.%'
                         AND k.cnt_kenmerk_key != 24 -- Kortingsbedrag op Huurcontracten NIET indexeren!
                ORDER BY k.cnt_kenmerk_volgnummer)
         LOOP
            UPDATE cnt_kenmerkcontract
               SET cnt_kenmerkcontract_waarde = TO_CHAR (rkc.new_waarde, '999999D99')
             WHERE cnt_kenmerkcontract_key = rkc.cnt_kenmerkcontract_key;
         END LOOP;

         v_errorhint := 'Fout bijwerken tarieftabel.';
         IF rc.ins_discipline_key = 621
         THEN
            UPDATE cnt_kenmerkcontract
               SET cnt_kenmerkcontract_waarde = v_new_tarieftab_val
             WHERE cnt_kenmerk_key = 23                         -- Tarieftabel
                   AND cnt_contract_key = v_new_contract_key;
         END IF;

         v_errorhint := 'Fout bijwerken index-tracking (CNTUPD).';
         fac.trackaction ('CNTUPD', v_new_contract_key, NULL, NULL, 'Contract geindexeerd met ' || TO_CHAR (rc.index_percentage, '0.00') || '%');
         COMMIT;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.writelog (p_applname, 'W', rc.aanduiding || v_errormsg, v_errorhint);
            COMMIT;
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname, 'E', 'Proces INDEXWERK afgebroken! ' || v_errormsg, v_errorhint);
END;
/


CREATE OR REPLACE VIEW blcc_v_rap_prs_accounts
(
   soort_gebruiker,
   naam,
   email,
   loginnaam,
   afdeling,
   laatste_login,
   key_autorisaties
)
AS
     SELECT DECODE (key_user, 1, 'KEY', 'FE'),
            pf.prs_perslid_naam_full,
            p.prs_perslid_email,
            oslogin,
            a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving,
            prs_perslid_login,
            funcodes
       FROM (SELECT *
               FROM (SELECT p.prs_perslid_key prs_key,
                            COALESCE (p.prs_perslid_oslogin,
                                      p.prs_perslid_oslogin2)
                               oslogin,
                            1 login,   -- 1=user heeft login + groep + rechten
                            DECODE (
                               SIGN(TRUNC(COALESCE (p.prs_perslid_login + 92,
                                                    SYSDATE - 1))
                                    - TRUNC (SYSDATE)),
                               -1,
                               0,
                               1)    -- 1=user heeft laatste 92 dagen ingelogd
                               recent_login
                       FROM prs_v_aanwezigperslid p
                      WHERE EXISTS     -- op basis van login + groep + rechten
                               (SELECT 1
                                  FROM fac_v_webgebruiker gg
                                 WHERE gg.prs_perslid_key = p.prs_perslid_key)
                            AND NOT EXISTS -- FSN#36597: WEB_FACFAC-users niet meetellen!
                                  (SELECT 1
                                     FROM fac_v_webgebruiker gg, fac_functie f
                                    WHERE gg.prs_perslid_key =
                                             p.prs_perslid_key
                                          AND gg.fac_functie_key =
                                                f.fac_functie_key
                                          AND fac_functie_code = 'WEB_FACFAC')
                     UNION ALL -- FSN#24029: Soms ook personen zonder login meetellen!
                     SELECT p.prs_perslid_key,
                            NULL oslogin,
                            1 login, -- 1=user telt mee, want allow_for_others!
                            0 recent_login -- geen login, dus nooit recent ingelogd
                       FROM prs_v_aanwezigperslid p
                      WHERE COALESCE (p.prs_perslid_oslogin,
                                      p.prs_perslid_oslogin2) IS NULL
                            AND (fac.getsetting ('mld_allow_for_others') = 1
                                 OR EXISTS
                                      (SELECT 1
                                         FROM bes_disc_params dp
                                        WHERE dp.bes_disc_params_for_others = 1))
                     UNION ALL -- FSN#27315: En ook eventuele "sensorusers" meetellen!
                     SELECT NULL prs_perslid_key,
                            NULL oslogin,
                            COUNT ( * ) login, -- elke sensoruser telt mee als FE!
                            1 recent_login -- recent actief dus tellen als recent
                       FROM ins_v_aanwezigdeel d
                      WHERE ins_deel_statedate > TRUNC (SYSDATE - 30)) x
                    LEFT JOIN -- 1=user heeft rechten op key-codes=notFE-codes
                              (SELECT DISTINCT fclt_f_login, 1 key_user
                                 FROM fac_v_rap_groeprechten gr, fac_functie f
                                WHERE gr.fclt_f_funcode = f.fac_functie_code
                                      AND f.fac_functie_groep IN (1, 2)) a
                       ON x.oslogin = a.fclt_f_login
                    LEFT JOIN   -- FSN#30404: 1=user is cross-domain (xd) user
                              (SELECT p.prs_perslid_key, 1 xd_user
                                 FROM prs_v_aanwezigperslid p,
                                      prs_v_afdeling_boom ab
                                WHERE p.prs_afdeling_key = ab.prs_afdeling_key
                                      AND p.prs_perslid_apikey IS NOT NULL
                                      AND ab.prs_bedrijf_key =
                                            fac.safe_to_number(fac.getsetting('xd_primary_bedrijfkey')))
                              b
                       ON x.prs_key = b.prs_perslid_key
                    LEFT JOIN (  SELECT pfc.prs_perslid_key,
                                        listagg (
                                           pfc.fac_functie_code,
                                           ', ')
                                           WITHIN GROUP (ORDER BY
                                                            pfc.fac_functie_code)
                                           AS funcodes
                                   FROM (SELECT DISTINCT
                                                gg.prs_perslid_key,
                                                SUBSTR (f.fac_functie_code, 5)
                                                   fac_functie_code
                                           FROM fac_gebruikersgroep gg,
                                                fac_groeprechten gr,
                                                fac_functie f
                                          WHERE gg.fac_groep_key =
                                                   gr.fac_groep_key
                                                AND gr.fac_functie_key =
                                                      f.fac_functie_key
                                                AND fac_functie_groep IN (1, 2))
                                        pfc
                               GROUP BY pfc.prs_perslid_key) pfcs
                       ON x.prs_key = pfcs.prs_perslid_key) st,
            prs_perslid p,
            prs_v_perslid_fullnames pf,
            prs_afdeling a
      WHERE     login = 1
            AND p.prs_perslid_key = st.prs_key
            AND pf.prs_perslid_key = p.prs_perslid_key
            AND a.prs_afdeling_key = p.prs_afdeling_key
            AND p.prs_perslid_verwijder IS NULL;

-- BLCC#51370: View via API2 ontsloten tbv. Nsecure/Dataclient!
-- BLCC#56618: De default bezoekersactie igv. RES-bezoekers is: 41="Informeer mij niet vooraf en verwijs bezoek direct door."
CREATE OR REPLACE VIEW blcc_v_rap_dataclient_bez
(
   afspraak_key,                                             -- appointment_id
   bezoekers_key,                                                -- visitor_id
   afspraak_datum,
   afspraak_oms,
   bez_achternaam,
   bez_voornaam,
   bez_mail,
   bez_bedrijf,
   cp_naam,
   cp_mail,
   cp_tel,
   cp_bedrijf,
   bez_voor,
   bez_actie,
   gebouwcode,
   laatste_mut
)
AS
   SELECT t.fac_tracking_refkey,
          x.bez_bezoekers_key,
          x.bez_afspraak_datum,
          x.bez_afspraak_opmerking,
          x.bez_afspraak_naam,
          voornaam.bez_kenmerkwaarde_waarde,
          email.bez_kenmerkwaarde_waarde,
          x.bez_afspraak_bedrijf,
          x.prs_perslid_naam_full,
          x.prs_perslid_email,
          COALESCE (x.prs_perslid_telefoonnr, x.prs_perslid_mobiel) tel,
          x.prs_afdeling_omschrijving,
          x.bez_afspraak_gastheer,
          a2o.bez_kenmerk_default,
          (SELECT alg_gebouw_code FROM alg_gebouw WHERE alg_gebouw_key = x.alg_gebouw_key)
             gebouwcode,
          t.tracking_datum
     FROM (SELECT a.bez_afspraak_key,
                  b.bez_bezoekers_key,
                  a.bez_afspraak_datum,
                  a.bez_afspraak_opmerking,
                  b.bez_afspraak_naam,
                  b.bez_afspraak_bedrijf,
                  cpf.prs_perslid_naam_full,
                  cp.prs_perslid_email,
                  cp.prs_perslid_telefoonnr,
                  cp.prs_perslid_mobiel,
                  a.prs_afdeling_omschrijving,
                  a.bez_afspraak_gastheer,
                  COALESCE (a.bez_actie_key, 41) bez_actie_key, -- "Informeer mij niet vooraf en verwijs bezoek direct door."
                  aog.alg_gebouw_key
             FROM bez_afspraak a,
                  bez_bezoekers b,
                  prs_perslid cp,
                  prs_v_perslid_fullnames cpf,
                  prs_v_afdeling_boom ab,
                  prs_afdeling a,
                  alg_v_onroerendgoed aog
            WHERE a.bez_afspraak_datum > TRUNC (SYSDATE)
                  AND a.bez_afspraak_key = b.bez_afspraak_key
                  AND a.bez_afspraak_contact_key = cp.prs_perslid_key
                  AND cp.prs_perslid_key = cpf.prs_perslid_key
                  AND cp.prs_afdeling_key = ab.prs_afdeling_key
                  AND ab.prs_afdeling_key1 = a.prs_afdeling_key
                  AND a.alg_onrgoed_keys = aog.alg_onroerendgoed_keys(+)) x
          LEFT JOIN bez_kenmerkwaarde voornaam
             ON x.bez_bezoekers_key = voornaam.bez_bezoekers_key
                AND voornaam.bez_kenmerkwaarde_verwijder IS NULL
                AND voornaam.bez_kenmerk_key = 1080                -- Voornaam
          LEFT JOIN bez_kenmerkwaarde email
             ON x.bez_bezoekers_key = email.bez_bezoekers_key
                AND email.bez_kenmerkwaarde_verwijder IS NULL
                AND email.bez_kenmerk_key = 1000               -- E-mail adres
          LEFT JOIN (  SELECT fac_tracking_refkey, MAX (fac_tracking_datum) tracking_datum
                         FROM fac_tracking
                        WHERE fac_srtnotificatie_key IN (26, 27) -- BEZMUT/BEZUPD
                     GROUP BY fac_tracking_refkey) t
             ON x.bez_afspraak_key = t.fac_tracking_refkey
          LEFT JOIN (SELECT ud.fac_usrdata_code, k.bez_kenmerk_default
                       FROM fac_v_aanwezigusrdata ud, bez_kenmerk k
                      WHERE ud.fac_usrtab_key = 501          -- Bezoekersactie
                            AND ud.fac_usrdata_omschr = TO_CHAR (k.bez_kenmerk_key)
                            AND k.bez_kenmerk_verwijder IS NULL) a2o -- Actie2Omschrijving
             ON TO_CHAR (x.bez_actie_key) = TO_CHAR (a2o.fac_usrdata_code);

-- BLCC#55646: WTCA-ish rapportages tbv. afstemmingsoverleg en freeze per leverancier!
CREATE OR REPLACE VIEW blcc_v_rap_maand_ordafm
(
   maand,
   prefix,
   opdr_key,
   opdr,
   kpn,
   kplaats_nr,
   kplaats_oms,
   --corr_kplaats,
   ksoort_code,
   ksoort_oms,
   --org_ksoort,
   propertymanager,
   gebouw_terrein,
   verdieping,
   ruimte,
   vakgroep,
   melding,
   melder,
   omschrijving,
   opmerking,
   aanmaak,
   gepland,
   gereed,
   uitv_key,
   uitvoerende,
   contactpersoon,
   kosten,
   fclt_3d_afdeling_key
)
AS
   SELECT TO_CHAR (SYSDATE, 'yyyy-mm'),
          COALESCE (c2.prefix, a.prefix),
          a.mld_opdr_key,
          a.opdracht,
          COALESCE (a.prs_kostenplaatsgrp_nr, SUBSTR (a.kdrager, 1, 5)) kpn,
          a.kdrager,
          a.kdrager_oms,
          --c1.corr_kplaats,
          COALESCE (c2.corr_ksoort, a.ksoort),
          COALESCE (c2.corr_ksoort_oms, a.ksoort_oms),
          --DECODE (c2.corr_ksoort, NULL, NULL, a.ksoort || '-' || a.ksoort_oms),
          a.propertymanager,
          a.gebouw_terrein,
          a.verdieping,
          a.ruimte,
          COALESCE (c2.vakgroep, a.vakgroep),
          COALESCE (c2.melding, a.melding),
          a.melder,
          a.oms,
          a.opm,
          a.datum_aanmaak,
          a.datum_gepland,
          a.datum_gereed,
          a.prs_bedrijf_key,
          a.bedrijf,
          a.cp,
          COALESCE (a.kosten, 0),
          b.afdeling
     FROM (SELECT o.mld_opdr_key,
                  COALESCE (og.alg_gebouw_key, og.alg_terreinsector_key) gebter_key,
                  sd.ins_srtdiscipline_prefix prefix,
                  o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
                  kpg.prs_kostenplaatsgrp_nr,
                  kp.prs_kostenplaats_nr kdrager,
                  kp.prs_kostenplaats_omschrijving kdrager_oms,
                  COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms) ksoort,
                  DECODE (ksm.prs_kostensoort_oms,
                          NULL, ksv.prs_kostensoort_opmerking,
                          ksm.prs_kostensoort_opmerking)
                     ksoort_oms,
                  pm.prs_perslid_naam_full propertymanager,
                  COALESCE (og.alg_terreinsector_code, og.alg_gebouw_code) gebouw_terrein,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  td.ins_discipline_omschrijving vakgroep,
                  sm.mld_stdmelding_omschrijving melding,
                  pf.prs_perslid_naam_full melder,
                  o.mld_opdr_omschrijving oms,
                  o.mld_opdr_opmerking opm,
                  o.mld_opdr_datumbegin datum_aanmaak,        -- Of verzonden?
                  --fac.datumtijdplusuitvoertijd (o.mld_opdr_datumbegin, m.mld_melding_t_uitvoertijd.tijdsduur, m.mld_melding_t_uitvoertijd.eenheid)
                  o.mld_opdr_einddatum datum_gepland,
                  fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) datum_gereed,
                  b.prs_bedrijf_key,
                  b.prs_bedrijf_naam bedrijf,
                  o.mld_opdr_contactpersoon cp,
                  o.mld_opdr_kosten kosten
             FROM mld_opdr o,
                  prs_bedrijf b,
                  mld_melding m,
                  prs_v_perslid_fullnames_all pf,
                  alg_v_allonrgoed_gegevens og,
                  alg_gebouw g,
                  prs_v_perslid_fullnames pm,
                  mld_stdmelding sm,
                  ins_tab_discipline td,
                  ins_srtdiscipline sd,
                  prs_kostensoort ksm,
                  prs_kostensoort ksv,
                  prs_kostenplaats kp,
                  prs_kostenplaatsgrp kpg
            WHERE o.mld_typeopdr_key = 101             -- Alleen Werkopdrachten???
                  AND o.mld_statusopdr_key = 6                      -- Afgemeld???
                  AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
                  AND o.mld_melding_key = m.mld_melding_key
                  AND m.prs_perslid_key = pf.prs_perslid_key
                  AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
                  AND og.alg_gebouw_key = g.alg_gebouw_key(+)
                  AND g.prs_perslid_key_verantw = pm.prs_perslid_key(+)
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = td.ins_discipline_key
                  AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                  AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                  AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
                  AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) a
          LEFT JOIN (  SELECT o.mld_opdr_key, MAX (p.prs_afdeling_key) afdeling
                         FROM mld_opdr o, prs_bedrijf b, prs_contactpersoon cp, prs_perslid p
                        WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key
                              AND b.prs_bedrijf_key = cp.prs_bedrijf_key
                              AND cp.prs_perslid_key = p.prs_perslid_key
                     GROUP BY o.mld_opdr_key) b
             ON a.mld_opdr_key = b.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key, ud.fac_usrdata_omschr corr_kplaats
                       FROM mld_kenmerkopdr ko, fac_usrdata ud
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. kplaats
                            AND TO_CHAR (ud.fac_usrdata_key) = ko.mld_kenmerkopdr_waarde) c1
             ON a.mld_opdr_key = c1.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms)
                               corr_ksoort,
                            DECODE (ksm.prs_kostensoort_oms,
                                    NULL, ksv.prs_kostensoort_opmerking,
                                    ksm.prs_kostensoort_opmerking)
                               corr_ksoort_oms,
                            sd.ins_srtdiscipline_prefix prefix,
                            td.ins_discipline_omschrijving vakgroep,
                            sm.mld_stdmelding_omschrijving melding
                       FROM mld_v_aanwezigkenmerkopdr ko,
                            mld_stdmelding sm,
                            ins_tab_discipline td,
                            ins_srtdiscipline sd,
                            prs_kostensoort ksm,
                            prs_kostensoort ksv
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. melding
                            AND TO_CHAR (sm.mld_stdmelding_key) = ko.mld_kenmerkopdr_waarde
                            AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                            AND sm.mld_ins_discipline_key = td.ins_discipline_key
                            AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key) c2
             ON a.mld_opdr_key = c2.mld_opdr_key;

CREATE OR REPLACE VIEW blcc_v_rap_maand_ordafr
(
   maand,
   prefix,
   opdr_key,
   opdr,
   kpn,
   kplaats_nr,
   kplaats_oms,
   --corr_kplaats,
   ksoort_code,
   ksoort_oms,
   --org_ksoort,
   propertymanager,
   gebouw_terrein,
   verdieping,
   ruimte,
   vakgroep,
   melding,
   melder,
   omschrijving,
   opmerking,
   aanmaak,
   gepland,
   gereed,
   uitv_key,
   uitvoerende,
   contactpersoon,
   kosten,
   fclt_3d_afdeling_key
)
AS
   SELECT TO_CHAR (SYSDATE, 'yyyy-mm'),
          COALESCE (c2.prefix, a.prefix),
          a.mld_opdr_key,
          a.opdracht,
          COALESCE (a.prs_kostenplaatsgrp_nr, SUBSTR (a.kdrager, 1, 5)) kpn,
          a.kdrager,
          a.kdrager_oms,
          --c1.corr_kplaats,
          COALESCE (c2.corr_ksoort, a.ksoort),
          COALESCE (c2.corr_ksoort_oms, a.ksoort_oms),
          --DECODE (c2.corr_ksoort, NULL, NULL, a.ksoort || '-' || a.ksoort_oms),
          a.propertymanager,
          a.gebouw_terrein,
          a.verdieping,
          a.ruimte,
          COALESCE (c2.vakgroep, a.vakgroep),
          COALESCE (c2.melding, a.melding),
          a.melder,
          a.oms,
          a.opm,
          a.datum_aanmaak,
          a.datum_gepland,
          a.datum_gereed,
          a.prs_bedrijf_key,
          a.bedrijf,
          a.cp,
          COALESCE (a.kosten, 0),
          b.afdeling
     FROM (SELECT o.mld_opdr_key,
                  COALESCE (og.alg_gebouw_key, og.alg_terreinsector_key) gebter_key,
                  sd.ins_srtdiscipline_prefix prefix,
                  o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
                  kpg.prs_kostenplaatsgrp_nr,
                  kp.prs_kostenplaats_nr kdrager,
                  kp.prs_kostenplaats_omschrijving kdrager_oms,
                  COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms) ksoort,
                  DECODE (ksm.prs_kostensoort_oms,
                          NULL, ksv.prs_kostensoort_opmerking,
                          ksm.prs_kostensoort_opmerking)
                     ksoort_oms,
                  pm.prs_perslid_naam_full propertymanager,
                  COALESCE (og.alg_terreinsector_code, og.alg_gebouw_code) gebouw_terrein,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  td.ins_discipline_omschrijving vakgroep,
                  sm.mld_stdmelding_omschrijving melding,
                  pf.prs_perslid_naam_full melder,
                  o.mld_opdr_omschrijving oms,
                  o.mld_opdr_opmerking opm,
                  o.mld_opdr_datumbegin datum_aanmaak,        -- Of verzonden?
                  --fac.datumtijdplusuitvoertijd (o.mld_opdr_datumbegin, m.mld_melding_t_uitvoertijd.tijdsduur, m.mld_melding_t_uitvoertijd.eenheid)
                  o.mld_opdr_einddatum datum_gepland,
                  fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) datum_gereed,
                  b.prs_bedrijf_key,
                  b.prs_bedrijf_naam bedrijf,
                  o.mld_opdr_contactpersoon cp,
                  o.mld_opdr_kosten kosten
             FROM mld_opdr o,
                  prs_bedrijf b,
                  mld_melding m,
                  prs_v_perslid_fullnames_all pf,
                  alg_v_allonrgoed_gegevens og,
                  alg_gebouw g,
                  prs_v_perslid_fullnames pm,
                  mld_stdmelding sm,
                  ins_tab_discipline td,
                  ins_srtdiscipline sd,
                  prs_kostensoort ksm,
                  prs_kostensoort ksv,
                  prs_kostenplaats kp,
                  prs_kostenplaatsgrp kpg
            WHERE o.mld_typeopdr_key = 101             -- Alleen Werkopdrachten???
                  AND o.mld_statusopdr_key = 9                      -- Afgerond???
                  AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
                  AND o.mld_melding_key = m.mld_melding_key
                  AND m.prs_perslid_key = pf.prs_perslid_key
                  AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
                  AND og.alg_gebouw_key = g.alg_gebouw_key(+)
                  AND g.prs_perslid_key_verantw = pm.prs_perslid_key(+)
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = td.ins_discipline_key
                  AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                  AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                  AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
                  AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) a
          LEFT JOIN (  SELECT o.mld_opdr_key, MAX (p.prs_afdeling_key) afdeling
                         FROM mld_opdr o, prs_bedrijf b, prs_contactpersoon cp, prs_perslid p
                        WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key
                              AND b.prs_bedrijf_key = cp.prs_bedrijf_key
                              AND cp.prs_perslid_key = p.prs_perslid_key
                     GROUP BY o.mld_opdr_key) b
             ON a.mld_opdr_key = b.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key, ud.fac_usrdata_omschr corr_kplaats
                       FROM mld_kenmerkopdr ko, fac_usrdata ud
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. kplaats
                            AND TO_CHAR (ud.fac_usrdata_key) = ko.mld_kenmerkopdr_waarde) c1
             ON a.mld_opdr_key = c1.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms)
                               corr_ksoort,
                            DECODE (ksm.prs_kostensoort_oms,
                                    NULL, ksv.prs_kostensoort_opmerking,
                                    ksm.prs_kostensoort_opmerking)
                               corr_ksoort_oms,
                            sd.ins_srtdiscipline_prefix prefix,
                            td.ins_discipline_omschrijving vakgroep,
                            sm.mld_stdmelding_omschrijving melding
                       FROM mld_v_aanwezigkenmerkopdr ko,
                            mld_stdmelding sm,
                            ins_tab_discipline td,
                            ins_srtdiscipline sd,
                            prs_kostensoort ksm,
                            prs_kostensoort ksv
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. melding
                            AND TO_CHAR (sm.mld_stdmelding_key) = ko.mld_kenmerkopdr_waarde
                            AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                            AND sm.mld_ins_discipline_key = td.ins_discipline_key
                            AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key) c2
             ON a.mld_opdr_key = c2.mld_opdr_key;
/*
CREATE OR REPLACE VIEW wtca_v_rap_maand_actual_fact
(
   maand,
   tot_datum,
   opdr,
   maatschap,
   ksoort,
   ksoort_oms,
   gebouw_terrein,
   verdieping,
   ruimte,
   vakgroep,
   melding,
   melder,
   omschrijving,
   opmerking,
   aanmaak,
   gereed,
   fclt_f_uitvoerende,
   kosten,
   fclt_3d_afdeling_key
)
AS
   SELECT maand,
          TO_CHAR (TO_DATE (maand || '-01', 'yyyy-mm-dd') - 1, 'dd-mm-yyyy'),
          opdr,
          fclt_f_maatschap,
          fclt_f_ksoort,
          fclt_f_ksoort_oms,
          fclt_f_gebouw_terrein,
          verdieping,
          ruimte,
          fclt_f_vakgroep,
          fclt_f_melding,
          melder,
          omschrijving,
          opmerking,
          aanmaak,
          gereed,
          fclt_f_uitvoerende,
          kosten,
          fclt_3d_afdeling_key
     FROM wtca_v_rap_maand_actual;
*/
CREATE OR REPLACE VIEW blcc_v_rap_maand_ordver
(
   maand,
   prefix,
   opdr_key,
   opdr,
   kpn,
   kplaats_nr,
   kplaats_oms,
   --corr_kplaats,
   ksoort_code,
   ksoort_oms,
   --org_ksoort,
   propertymanager,
   gebouw_terrein,
   verdieping,
   ruimte,
   vakgroep,
   melding,
   melder,
   omschrijving,
   opmerking,
   aanmaak,
   gepland,
   gereed,
   uitv_key,
   uitvoerende,
   contactpersoon,
   kosten,
   fclt_3d_afdeling_key
)
AS
   SELECT TO_CHAR (fac.gettrackingdate ('ORDVER', a.mld_opdr_key), 'yyyy-mm-dd'),
          COALESCE (c2.prefix, a.prefix),
          a.mld_opdr_key,
          a.opdracht,
          COALESCE (a.prs_kostenplaatsgrp_nr, SUBSTR (a.kdrager, 1, 5)) kpn,
          a.kdrager,
          a.kdrager_oms,
          --c1.corr_kdrager,
          COALESCE (c2.corr_ksoort, a.ksoort),
          COALESCE (c2.corr_ksoort_oms, a.ksoort_oms),
          --DECODE (c2.corr_ksoort, NULL, NULL, a.ksoort || '-' || a.ksoort_oms),
          a.propertymanager,
          a.gebouw_terrein,
          a.verdieping,
          a.ruimte,
          COALESCE (c2.vakgroep, a.vakgroep),
          COALESCE (c2.melding, a.melding),
          a.melder,
          a.oms,
          a.opm,
          a.datum_aanmaak,
          a.datum_gepland,
          a.datum_gereed,
          a.prs_bedrijf_key,
          a.bedrijf,
          a.cp,
          COALESCE (a.kosten, 0),
          b.afdeling
     FROM (SELECT o.mld_opdr_key,
                  COALESCE (og.alg_gebouw_key, og.alg_terreinsector_key) gebter_key,
                  sd.ins_srtdiscipline_prefix prefix,
                  o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
                  kpg.prs_kostenplaatsgrp_nr,
                  kp.prs_kostenplaats_nr kdrager,
                  kp.prs_kostenplaats_omschrijving kdrager_oms,
                  COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms) ksoort,
                  DECODE (ksm.prs_kostensoort_oms,
                          NULL, ksv.prs_kostensoort_opmerking,
                          ksm.prs_kostensoort_opmerking)
                     ksoort_oms,
                  pm.prs_perslid_naam_full propertymanager,
                  COALESCE (og.alg_terreinsector_code, og.alg_gebouw_code) gebouw_terrein,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  td.ins_discipline_omschrijving vakgroep,
                  sm.mld_stdmelding_omschrijving melding,
                  pf.prs_perslid_naam_full melder,
                  o.mld_opdr_omschrijving oms,
                  o.mld_opdr_opmerking opm,
                  o.mld_opdr_datumbegin datum_aanmaak,        -- Of verzonden?
                  --fac.datumtijdplusuitvoertijd (o.mld_opdr_datumbegin, m.mld_melding_t_uitvoertijd.tijdsduur, m.mld_melding_t_uitvoertijd.eenheid)
                  o.mld_opdr_einddatum datum_gepland,
                  fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) datum_gereed,
                  b.prs_bedrijf_key,
                  b.prs_bedrijf_naam bedrijf,
                  o.mld_opdr_contactpersoon cp,
                  o.mld_opdr_kosten kosten
             FROM mld_opdr o,
                  prs_bedrijf b,
                  mld_melding m,
                  prs_v_perslid_fullnames_all pf,
                  alg_v_allonrgoed_gegevens og,
                  alg_gebouw g,
                  prs_v_perslid_fullnames pm,
                  mld_stdmelding sm,
                  ins_tab_discipline td,
                  ins_srtdiscipline sd,
                  prs_kostensoort ksm,
                  prs_kostensoort ksv,
                  prs_kostenplaats kp,
                  prs_kostenplaatsgrp kpg
            WHERE o.mld_typeopdr_key = 101             -- Alleen Werkopdrachten???
                  AND o.mld_statusopdr_key = 7                      -- Verwerkt???
                  AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
                  AND o.mld_melding_key = m.mld_melding_key
                  AND m.prs_perslid_key = pf.prs_perslid_key
                  AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
                  AND og.alg_gebouw_key = g.alg_gebouw_key(+)
                  AND g.prs_perslid_key_verantw = pm.prs_perslid_key(+)
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = td.ins_discipline_key
                  AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                  AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                  AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
                  AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)) a
          LEFT JOIN (  SELECT o.mld_opdr_key, MAX (p.prs_afdeling_key) afdeling
                         FROM mld_opdr o, prs_bedrijf b, prs_contactpersoon cp, prs_perslid p
                        WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key
                              AND b.prs_bedrijf_key = cp.prs_bedrijf_key
                              AND cp.prs_perslid_key = p.prs_perslid_key
                     GROUP BY o.mld_opdr_key) b
             ON a.mld_opdr_key = b.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key, ud.fac_usrdata_omschr corr_kplaats
                       FROM mld_kenmerkopdr ko, fac_usrdata ud
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. kplaats
                            AND TO_CHAR (ud.fac_usrdata_key) = ko.mld_kenmerkopdr_waarde) c1
             ON a.mld_opdr_key = c1.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            COALESCE (ksm.prs_kostensoort_oms,
                                      ksv.prs_kostensoort_oms)
                               corr_ksoort,
                            DECODE (ksm.prs_kostensoort_oms,
                                    NULL, ksv.prs_kostensoort_opmerking,
                                    ksm.prs_kostensoort_opmerking)
                               corr_ksoort_oms,
                            sd.ins_srtdiscipline_prefix prefix,
                            td.ins_discipline_omschrijving vakgroep,
                            sm.mld_stdmelding_omschrijving melding
                       FROM mld_v_aanwezigkenmerkopdr ko,
                            mld_stdmelding sm,
                            ins_tab_discipline td,
                            ins_srtdiscipline sd,
                            prs_kostensoort ksm,
                            prs_kostensoort ksv
                      WHERE ko.mld_kenmerk_key = -1           -- Corr. melding
                            AND TO_CHAR (sm.mld_stdmelding_key) = ko.mld_kenmerkopdr_waarde
                            AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
                            AND sm.mld_ins_discipline_key = td.ins_discipline_key
                            AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
                            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key) c2
             ON a.mld_opdr_key = c2.mld_opdr_key
    WHERE fac.gettrackingdate ('ORDVER', a.mld_opdr_key) > TO_DATE ('01012019', 'ddmmyyyy');
/*
CREATE OR REPLACE VIEW wtca_v_rap_maand_frozen_fact
(
   fclt_f_maand,
   tot_datum,
   opdr,
   maatschap,
   ksoort,
   ksoort_oms,
   gebouw_terrein,
   verdieping,
   ruimte,
   vakgroep,
   melding,
   melder,
   omschrijving,
   opmerking,
   aanmaak,
   gereed,
   fclt_f_uitvoerende,
   kosten,
   fclt_3d_afdeling_key
)
AS
   SELECT SUBSTR (fclt_f_maand, 1, 7),
          TO_CHAR (TO_DATE (SUBSTR (fclt_f_maand, 1, 7) || '-01', 'yyyy-mm-dd') - 1, 'dd-mm-yyyy'),
          opdr,
          fclt_f_maatschap,
          fclt_f_ksoort,
          fclt_f_ksoort_oms,
          fclt_f_gebouw_terrein,
          verdieping,
          ruimte,
          fclt_f_vakgroep,
          fclt_f_melding,
          melder,
          omschrijving,
          opmerking,
          aanmaak,
          gereed,
          fclt_f_uitvoerende,
          kosten,
          fclt_3d_afdeling_key
     FROM wtca_v_rap_maand_frozen
    WHERE SUBSTR (fclt_f_archief, 1, 4) >= TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'yyyy');
*/
CREATE OR REPLACE VIEW blcc_v_rap_freezeopdrachten
(
   kpn,
   aantal,
   kosten
)
AS
     SELECT COALESCE (kpg.prs_kostenplaatsgrp_nr, SUBSTR (kp.prs_kostenplaats_nr, 1, 5)),
            COUNT ( * ) aantal, SUM (mld_opdr_kosten) kosten
       FROM mld_opdr o, prs_kostenplaats kp, prs_kostenplaatsgrp kpg
      WHERE o.mld_typeopdr_key = 101                               -- WO
            AND o.mld_statusopdr_key = 9                     -- Afgerond
            --AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm')
            AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
   GROUP BY COALESCE (kpg.prs_kostenplaatsgrp_nr, SUBSTR (kp.prs_kostenplaats_nr, 1, 5));

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