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

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 VIEW sroz_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);

CREATE OR REPLACE PROCEDURE sroz_import_prs (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   -- Generieke import.
   -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
   --'%"Personeelsnummer";"Loginnaam";"Achternaam";"Tussenvoegsel";"Voorletters";"Voornaam";"Afdelingscode";"Functie";"Email";"Telefoonnr";"Mobiel";"Gebouwcode"%');
   --'%Personeelsnummer;Loginnaam;Achternaam;Tussenvoegsel;Voorletters;Voornaam;Afdelingscode;Functie;Email;Telefoonnr;Mobiel;Gebouwcode%');
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;7;3;4;6;'
      || '5;0;0;0;0;10;11;9;0;1;'
      || '8;2;0;0;0;0;12;0;0;0;'
      || '0;0;0;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      '%"Personeelsnummer";"Loginnaam";"Achternaam";"Tussenvoegsel";"Voorletters";"Voornaam";"Afdelingscode";"Functie";"Email";"Telefoonnr";"Mobiel";"Gebouwcode"%');

   -- Klantspecifieke aanpassingen.
   -- Als geen Loginnaam aangeleverd, dan handmatig toegekende niet wissen.
   UPDATE fac_imp_perslid i
      SET i.prs_perslid_oslogin =
             (SELECT MAX (prs_perslid_oslogin)
                FROM prs_v_aanwezigperslid
               WHERE prs_perslid_nr = i.prs_perslid_nr)
    WHERE i.prs_perslid_oslogin IS NULL        -- Aangeleverde Loginnaam wint!
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid
                  WHERE prs_perslid_oslogin IS NOT NULL
                        AND prs_perslid_nr = i.prs_perslid_nr);
   COMMIT;

   -- Ontvangen Functie negeren en - voorlopig? - altijd op 'Onbekend'!
   UPDATE fac_imp_perslid
      SET prs_srtperslid_omschrijving = 'Onbekend';

   -- Als geen Email aangeleverd, dan handmatig toegekende niet wissen.
   UPDATE fac_imp_perslid i
      SET i.prs_perslid_email =
             (SELECT MAX (prs_perslid_email)
                FROM prs_v_aanwezigperslid
               WHERE prs_perslid_nr = i.prs_perslid_nr)
    WHERE i.prs_perslid_email IS NULL              -- Aangeleverde Email wint!
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigperslid
                  WHERE prs_perslid_email IS NOT NULL
                        AND prs_perslid_nr = i.prs_perslid_nr);
   COMMIT;

   -- Als Gebouwcode niet aangeleverd, dan krijgen medewerkers - zover mogelijk - een WP
   -- in het 'RZT'-gebouw (zie hieronder)!
   UPDATE fac_imp_perslid
      SET prs_kenmerk1 = 'RZT'
    WHERE prs_kenmerk1 IS NULL;
   COMMIT;

   -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Kenmerk1-kolom -> Gebouw en daaronder
   -- Ruimte '_000' op de verdieping met het laagste volgnummer!
   -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze
   -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon
   -- naar Ruimte '_000' op de meegegeven locatie.
   -- Eventuele WPs onder andere locaties dan import-locatie blijven ook ongewijzigd!
   UPDATE fac_imp_perslid i
      SET i.alg_locatie_code =
             (SELECT il.alg_locatie_code
                FROM alg_v_aanweziggebouw ig, alg_locatie il
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_gebouw_code =
             (SELECT ig.alg_gebouw_code
                FROM alg_v_aanweziggebouw ig, alg_locatie il
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_verdieping_volgnr =
             (SELECT iv.alg_verdieping_volgnr
                FROM alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND ig.alg_gebouw_key = iv.alg_gebouw_key
                     AND iv.alg_verdieping_key = ir.alg_verdieping_key
                     AND ir.alg_ruimte_nr = '_000'
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanwezigruimte r, alg_verdieping v
                             WHERE r.alg_ruimte_nr = '_000'
                                   AND r.alg_verdieping_key = v.alg_verdieping_key
                                   AND v.alg_gebouw_key = iv.alg_gebouw_key
                                   AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)),
          i.alg_ruimte_nr =
             (SELECT ir.alg_ruimte_nr
                FROM alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND ig.alg_gebouw_key = iv.alg_gebouw_key
                     AND iv.alg_verdieping_key = ir.alg_verdieping_key
                     AND ir.alg_ruimte_nr = '_000'
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanwezigruimte r, alg_verdieping v
                             WHERE r.alg_ruimte_nr = '_000'
                                   AND r.alg_verdieping_key = v.alg_verdieping_key
                                   AND v.alg_gebouw_key = iv.alg_gebouw_key
                                   AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr))
    WHERE NOT EXISTS                          -- Nog geen werkplek op Locatie!
             (SELECT 1
                FROM alg_v_aanweziggebouw ig,
                     alg_locatie il,
                     prs_v_aanwezigperslid p,
                     prs_perslidwerkplek pw,
                     prs_werkplek cw,
                     alg_v_aanwezigruimte cr,
                     alg_verdieping cv,
                     alg_gebouw cg,
                     alg_locatie cl
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND p.prs_perslid_oslogin = i.prs_perslid_nr
                     AND p.prs_perslid_key = pw.prs_perslid_key
                     AND pw.prs_werkplek_key = cw.prs_werkplek_key
                     AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key
                     AND cr.alg_verdieping_key = cv.alg_verdieping_key
                     AND cv.alg_gebouw_key = cg.alg_gebouw_key
                     AND cg.alg_locatie_key = il.alg_locatie_key);
   COMMIT;

   -- Resulteert in nette foutmelding als ruimte niet kan worden bepaald.
   UPDATE fac_imp_perslid
      SET alg_verdieping_volgnr = 0
    WHERE alg_gebouw_code IS NOT NULL
      AND alg_verdieping_volgnr IS NULL;
   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.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces personen afgebroken!');
END sroz_import_prs;
/

CREATE OR REPLACE PROCEDURE sroz_update_prs (p_import_key IN NUMBER)
AS
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers (met
   -- een personeelsnummer).
   c_max_delta_percentage   NUMBER (10) := 50;                         -- 50%!
   v_count_prs_import       NUMBER (10);     -- #actieve personen  na  import!
   v_count_prs_actual       NUMBER (10);     -- #actieve personen voor import!

   -- Mandateren personen met >1 dienstverband, namelijk voor kostenplaats(en)
   -- van de andere dan de eigen afdeling!
/*
   CURSOR c_mandate
   IS
        SELECT p.prs_perslid_key, p.prs_perslid_nr, a.prs_kostenplaats_key
          FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i
         WHERE p.prs_afdeling_key = a.prs_afdeling_key
               AND UPPER (p.prs_perslid_nr) = UPPER (i.prs_perslid_nr)
               AND a.prs_afdeling_upper != UPPER (i.prs_perslid_naam)
      ORDER BY 2;
*/

   -- Verwijderen personen niet in import!
   CURSOR c_del
   IS
        SELECT p.prs_perslid_key, p.prs_perslid_nr
          FROM prs_v_aanwezigperslid p
         WHERE p.prs_perslid_nr IS NOT NULL
               AND NOT EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid
                       WHERE UPPER (prs_perslid_nr) = UPPER (p.prs_perslid_nr))
      ORDER BY 2;
BEGIN
   -- Bepaal aantal actieve personen in FACILITOR  na  import!
   SELECT COUNT (DISTINCT prs_perslid_nr)
     INTO v_count_prs_import
     FROM fac_imp_perslid
    WHERE prs_perslid_nr IS NOT NULL;

   -- Bepaal aantal actieve personen in FACILITOR voor import!
   SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
     INTO v_count_prs_actual
     FROM prs_v_aanwezigperslid
    WHERE prs_perslid_nr IS NOT NULL;

   IF (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) < (100 - c_max_delta_percentage))
   THEN
      fac.imp_writelog (
         p_import_key, 'E',
         'Verschil tussen huidig aantal en te importeren aantal personen te groot; zie specificatie!',
            '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]'
         || CHR (13) || CHR (10)
         || '- #personen/import = [' || TO_CHAR (v_count_prs_import) || ']'
         || CHR (13) || CHR (10)
         || '- #personen/huidig = [' || TO_CHAR (v_count_prs_actual) || ']');
      RETURN;
   END IF;

   -- Generieke update (op personeelsnummer).
   prs.update_perslid (p_import_key, 'NR', 'D');

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

-- Domein met alle huurders (debiteuren).
CREATE OR REPLACE VIEW sroz_v_huurders
(
   prs_bedrijf_key,
   prs_bedrijf_naam,
   prs_bedrijf_verwijder
)
AS
   SELECT b.prs_bedrijf_key,
          b.prs_bedrijf_naam || ' [' || prs_overeenkomst_nr || ']/-;T:'
          || COALESCE (b.prs_bedrijf_telefoon, b.prs_bedrijf_telefoon2, '-') || ';E:'
          || COALESCE (b.prs_bedrijf_email, '-') || ';F:'
          || DECODE (b.prs_bedrijf_post_adres, NULL, '-', TRIM (b.prs_bedrijf_post_adres || ', ' || b.prs_bedrijf_post_postcode) || ' ' || b.prs_bedrijf_post_plaats),
          prs_bedrijf_verwijder
     FROM prs_bedrijf b
    WHERE b.prs_bedrijf_huurder = 1
   UNION ALL
   SELECT 100000000 + cp.prs_contactpersoon_key,
          b.prs_bedrijf_naam || ' [' || prs_overeenkomst_nr || ']/'
          || COALESCE (TRIM (cp.prs_contactpersoon_aanhef || ' ' || TRIM (cp.prs_contactpersoon_voornaam || ' ' || TRIM (cp.prs_contactpersoon_tussenv || ' ' || cp.prs_contactpersoon_naam))), '-') || ';T:'
          || COALESCE (cp.prs_contactpersoon_telefoon_1, cp.prs_contactpersoon_telefoon_2, b.prs_bedrijf_telefoon, b.prs_bedrijf_telefoon2, '-') || ';E:'
          || COALESCE (cp.prs_contactpersoon_email, b.prs_bedrijf_email, '-') || ';F:'
          || DECODE (b.prs_bedrijf_post_adres, NULL, '-', TRIM (b.prs_bedrijf_post_adres || ', ' || b.prs_bedrijf_post_postcode) || ' ' || b.prs_bedrijf_post_plaats),
          cp.prs_contactpersoon_verwijder
     FROM prs_bedrijf b, prs_contactpersoon cp
    WHERE b.prs_bedrijf_huurder = 1
          AND b.prs_bedrijf_key = cp.prs_bedrijf_key;

-- Domein met controleurs.
CREATE OR REPLACE VIEW sroz_v_controleurs
(
   prs_perslid_key,
   prs_perslid_naam_full,
   prs_perslid_naam_friendly,
   prs_perslid_verwijder
)
AS
   SELECT pf.prs_perslid_key,
          pf.prs_perslid_naam_full,
          pf.prs_perslid_naam_friendly,
          p.prs_perslid_verwijder
     FROM fac_gebruikersgroep gg, prs_perslid p, prs_v_perslid_fullnames_all pf
    WHERE gg.fac_groep_key = 6                                     -- FOBO RES
          AND gg.prs_perslid_key = p.prs_perslid_key
          AND p.prs_perslid_key = pf.prs_perslid_key
          AND SUBSTR (p.prs_perslid_oslogin, 1, 1) != '_';

-- Bronview met alle afgemelde Externe bijeenkomsten tot *nu*!
CREATE OR REPLACE VIEW sroz_v_res_all
(
   sortering,
   res_rsv_ruimte_key,
   res_rsv_artikel_key,
   res_rsv_deel_key,
   res_reservering_key,
   res_rsv_ruimte_volgnr,
   debiteurnummer,
   debiteurnaam,
   debiteurcontact,
   res_rsv_ruimte_van,
   res_rsv_ruimte_tot,
   res_rsv_ruimte_omschrijving,
   res_status_bo_key,
   res_rsv_ruimte_ordernr,
   aantal,
   artikelomschrijving,
   artikelprijs,
   btw,
   debiteurreferentie,
   administratie,
   kostenplaats,
   code_rcvm,
   export2afas_key,
   export2afas_oms,
   controleur
)
AS
   SELECT x.sortering,
          x.res_rsv_ruimte_key, x.res_rsv_artikel_key, x.res_rsv_deel_key,
          x.res_reservering_key, x.res_rsv_ruimte_volgnr,
          TRIM (SUBSTR (h.prs_bedrijf_naam,
                        INSTR (h.prs_bedrijf_naam, '[') + 1,
                        INSTR (h.prs_bedrijf_naam, ']/') - INSTR (h.prs_bedrijf_naam, '[') - 1))
             debiteurnummer,
          TRIM (SUBSTR (h.prs_bedrijf_naam,
                        1,
                        INSTR (h.prs_bedrijf_naam, '[') - 1))
             debiteurnaam,
          TRIM (SUBSTR (h.prs_bedrijf_naam,
                        INSTR (h.prs_bedrijf_naam, '/') + 1,
                        INSTR (h.prs_bedrijf_naam, ';T') - INSTR (h.prs_bedrijf_naam, '/') - 1))
             debiteurcontact,
          x.res_rsv_ruimte_van, x.res_rsv_ruimte_tot,
          x.res_rsv_ruimte_omschrijving,
          x.res_status_bo_key, x.res_rsv_ruimte_ordernr,
          ROUND (x.aantal, 2),
          x.artikelomschrijving,
          ROUND (COALESCE (x.artikelprijs, 0), 2),
          x.btw,
          ref.res_kenmerkreservering_waarde debiteurref,
          a.fac_usrdata_code administratie,
          '7' kostenplaats,
          x.code_rcvm,
          e.fac_usrdata_key,
          e.fac_usrdata_omschr,
          c.prs_perslid_naam_friendly
     FROM (SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24mi') || SUBSTR ('00000000' || TO_CHAR (res_reservering_key), -9) || 'R0' sortering,
                  rrr.res_rsv_ruimte_key, NULL res_rsv_artikel_key, NULL res_rsv_deel_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,
                  rrr.res_status_bo_key, rrr.res_rsv_ruimte_ordernr,
                  24 * (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) aantal,
                  rr.res_ruimte_nr artikelomschrijving,
                  DECODE (rrr.res_rsv_ruimte_ordernr,
                          NULL,                       -- Nog niet AV=Verwerkt!
                          DECODE (vht.res_kenmerkreservering_waarde, -- 1=Commercieel/2=Maatschappelijk
                                  '1', rr.res_ruimte_prijs,
                                  rr.res_ruimte_prijs * 0.5),
                          rrr.res_rsv_ruimte_prijs / (24 * (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van)))
                     artikelprijs,
                  COALESCE (fac.safe_to_number (rr.res_ruimte_groep), 21) btw,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                  'R' code_rcvm
             FROM 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,
                  res_ruimte rr,
                  (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) vht -- Verhuurtarief
            WHERE rrr.res_activiteit_key = 30 -- Externe bijeenkomst (géén 11 of 50=Uitleen of Rondleiding)!
                  AND rrr.res_rsv_ruimte_tot < TRUNC (SYSDATE + 1) -- Niet in toekomst!
                  AND rrr.res_rsv_ruimte_dirtlevel = 0          -- Niet dirty!
                  AND COALESCE (rrr.res_rsv_ruimte_totaal, 0) = 0 -- Géén afgesproken prijs!
                  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.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                  AND rrr.res_rsv_ruimte_key = vht.res_rsv_ruimte_key(+)
                  AND rrr.res_status_bo_key IN (5, 6)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_artikel
                          WHERE res_rsv_artikel_dirtlevel = 0   -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_deel
                          WHERE res_rsv_deel_dirtlevel = 0      -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND 24 * (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) > 0 -- Zou zo moeten zijn!?
           UNION ALL                                -- Afgesproken ruimteprijs
           SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24mi') || SUBSTR ('00000000' || TO_CHAR (res_reservering_key), -9) || 'R0' sortering,
                  rrr.res_rsv_ruimte_key, NULL res_rsv_artikel_key, NULL res_rsv_deel_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,
                  rrr.res_status_bo_key, rrr.res_rsv_ruimte_ordernr,
                  1 aantal,
                  'Afgesproken prijs' artikelomschrijving,
                  rrr.res_rsv_ruimte_totaal artikelprijs,
                  COALESCE (fac.safe_to_number (rr.res_ruimte_groep), 21) btw,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                  'R' code_rcvm
             FROM 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,
                  res_ruimte rr
            WHERE rrr.res_activiteit_key = 30 -- Externe bijeenkomst (géén 11 of 50=Uitleen of Rondleiding)!
                  AND rrr.res_rsv_ruimte_tot < TRUNC (SYSDATE + 1) -- Niet in toekomst!
                  AND rrr.res_rsv_ruimte_dirtlevel = 0          -- Niet dirty!
                  AND COALESCE (rrr.res_rsv_ruimte_totaal, 0) != 0 -- Afgesproken prijs!
                  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.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                  AND rrr.res_status_bo_key IN (5, 6)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_artikel
                          WHERE res_rsv_artikel_dirtlevel = 0   -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_deel
                          WHERE res_rsv_deel_dirtlevel = 0      -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
           UNION ALL                                                -- Korting
           SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24mi') || SUBSTR ('00000000' || TO_CHAR (res_reservering_key), -9) || 'R1' sortering,
                  rrr.res_rsv_ruimte_key, NULL res_rsv_artikel_key, NULL res_rsv_deel_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,
                  rrr.res_status_bo_key, rrr.res_rsv_ruimte_ordernr,
                  1 aantal,
                  'Korting' artikelomschrijving,
                  -1 * rrr.res_rsv_ruimte_korting artikelprijs,
                  COALESCE (fac.safe_to_number (rr.res_ruimte_groep), 21) btw,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                  'R' code_rcvm
             FROM 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,
                  res_ruimte rr
            WHERE rrr.res_activiteit_key = 30 -- Externe bijeenkomst (géén 11 of 50=Uitleen of Rondleiding)!
                  AND rrr.res_rsv_ruimte_tot < TRUNC (SYSDATE + 1) -- Niet in toekomst!
                  AND rrr.res_rsv_ruimte_dirtlevel = 0          -- Niet dirty!
                  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.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key
                  AND rrr.res_status_bo_key IN (5, 6)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_artikel
                          WHERE res_rsv_artikel_dirtlevel = 0   -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_deel
                          WHERE res_rsv_deel_dirtlevel = 0      -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
           UNION ALL                            -- Verbruik=Verbruiksartikelen
           SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24mi') || SUBSTR ('00000000' || TO_CHAR (res_reservering_key), -9) || 'V' || TO_CHAR (rra.res_discipline_key) || SUBSTR ('000' || TO_CHAR (COALESCE (rra.res_artikel_volgnummer, 0)), -3) sortering,
                  rrr.res_rsv_ruimte_key, rra.res_rsv_artikel_key, NULL res_rsv_deel_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,
                  rrr.res_status_bo_key, rrr.res_rsv_ruimte_ordernr,
                  rra.res_rsv_artikel_aantal aantal,
                  rra.res_artikel_omschrijving artikelomschrijving,
                  DECODE (rra.res_rsv_artikel_prijs, NULL, rra.res_artikel_prijs, rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal)
                     artikelprijs,
                  rra.btw,
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) alg_ruimte_key,
                  DECODE (rra.res_artikel_groep,
                          'R', rra.res_artikel_groep,
                          'C', rra.res_artikel_groep,
                          'V', rra.res_artikel_groep,
                          'M', rra.res_artikel_groep,
                          ks.prs_kostensoort_altcode)
                     code_rcvm
             FROM 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,
                  res_ruimte rr,
                  (SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          rra.res_rsv_artikel_prijs,
                          ra.res_artikel_prijs,
                          COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw, 21) btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer,
                          ra.res_artikel_groep
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_levering < TRUNC (SYSDATE + 1)
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND (ra.res_discipline_key NOT IN (48, 50) OR ra.res_artikel_btw IS NOT NULL)
                   UNION ALL                              -- Dichtbij BTW laag
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.66 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.66 * ra.res_artikel_prijs res_artikel_prijs,
                          6 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer,
                          ra.res_artikel_groep
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_levering < TRUNC (SYSDATE + 1)
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (48)  -- Dichtbij extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                              -- Dichtbij BTW hoog
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.34 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.34 * ra.res_artikel_prijs res_artikel_prijs,
                          21 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer,
                          ra.res_artikel_groep
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_levering < TRUNC (SYSDATE + 1)
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (48)  -- Dichtbij extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                               -- Momento BTW laag
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.65 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.65 * ra.res_artikel_prijs res_artikel_prijs,
                          6 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer,
                          ra.res_artikel_groep
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_levering < TRUNC (SYSDATE + 1)
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (50)   -- Momento extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                               -- Momento BTW hoog
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal,
                          ra.res_artikel_nr,
                          ra.res_artikel_omschrijving,
                          0.35 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.35 * ra.res_artikel_prijs res_artikel_prijs,
                          21 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer,
                          ra.res_artikel_groep
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_levering < TRUNC (SYSDATE + 1)
                          AND rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (50)   -- Momento extra
                          AND ra.res_artikel_btw IS NULL) rra,
                  res_discipline rd,
                  prs_kostensoort ks
            WHERE rrr.res_activiteit_key IN (30, -11, -50) -- Externe bijeenkomst/Uitleen/Rondleiding
                  AND rrr.res_rsv_ruimte_tot < TRUNC (SYSDATE + 1) -- Niet in toekomst!
                  AND rrr.res_rsv_ruimte_dirtlevel = 0          -- Niet dirty!
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+) -- Ruimte- én Uitleen-reserveringen!
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key(+)
                  AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                  AND rra.res_discipline_key = rd.ins_discipline_key
                  AND rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                  AND rrr.res_status_bo_key IN (5, 6)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_artikel
                          WHERE res_rsv_artikel_dirtlevel = 0   -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_deel
                          WHERE res_rsv_deel_dirtlevel = 0      -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
           UNION ALL                                   -- Overig=Voorzieningen
           SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24mi') || SUBSTR ('00000000' || TO_CHAR (res_reservering_key), -9) || 'X' || SUBSTR (rd.res_deel_omschrijving, 1, 3) sortering,
                  rrr.res_rsv_ruimte_key, NULL res_rsv_artikel_key, rrd.res_rsv_deel_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,
                  rrr.res_status_bo_key, rrr.res_rsv_ruimte_ordernr,
                  24 * (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) aantal,
                  rd.res_deel_omschrijving artikelomschrijving,
                  DECODE (rrd.res_rsv_deel_prijs, NULL, rd.res_deel_prijs, rrd.res_rsv_deel_prijs / (24 * (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van)))
                     artikelprijs,
                  21 btw,                                          -- Hard 21%
                  COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) alg_ruimte_key,
                  'V' code_rcvm
             FROM 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,
                  res_ruimte rr,
                  res_v_aanwezigrsv_deel rrd,
                  res_deel rd
            WHERE rrr.res_activiteit_key IN (30, -11, -50) -- Externe bijeenkomst/Uitleen/Rondleiding
                  AND rrr.res_rsv_ruimte_tot < TRUNC (SYSDATE + 1) -- Niet in toekomst!
                  AND rrr.res_rsv_ruimte_dirtlevel = 0          -- Niet dirty!
                  AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+) -- Ruimte- én Uitleen-reserveringen!
                  AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                  AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                  AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key(+)
                  AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
                  AND rrd.res_rsv_deel_tot < SYSDATE      -- Niet in toekomst!
                  AND rrd.res_rsv_deel_dirtlevel = 0            -- Niet dirty!
                  AND rrd.res_deel_key = rd.res_deel_key
                  AND rrr.res_status_bo_key IN (5, 6)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_artikel
                          WHERE res_rsv_artikel_dirtlevel = 0   -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_v_aanwezigrsv_deel
                          WHERE res_rsv_deel_dirtlevel = 0      -- Niet dirty!
                                AND res_status_bo_key = 2
                                AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)) x
          LEFT JOIN res_v_aanwezigkenmerkwaarde deb
             ON x.res_rsv_ruimte_key = deb.res_rsv_ruimte_key
                AND deb.res_kenmerk_key = 2                        -- Debiteur
          LEFT JOIN sroz_v_huurders h
             ON deb.res_kenmerkreservering_waarde = TO_CHAR (h.prs_bedrijf_key)
          LEFT JOIN res_v_aanwezigkenmerkwaarde ref
             ON x.res_rsv_ruimte_key = ref.res_rsv_ruimte_key
                AND ref.res_kenmerk_key = 3             -- Referentie debiteur
          LEFT JOIN res_v_aanwezigkenmerkwaarde adm
             ON x.res_rsv_ruimte_key = adm.res_rsv_ruimte_key
                AND adm.res_kenmerk_key = 161                 -- Administratie
          LEFT JOIN fac_v_aanwezigusrdata a
             ON adm.res_kenmerkreservering_waarde = TO_CHAR (a.fac_usrdata_key)
          LEFT JOIN res_v_aanwezigkenmerkwaarde e2a
             ON x.res_rsv_ruimte_key = e2a.res_rsv_ruimte_key
                AND e2a.res_kenmerk_key = 181              -- Export naar Afas
          LEFT JOIN fac_v_aanwezigusrdata e
             ON e2a.res_kenmerkreservering_waarde = TO_CHAR (e.fac_usrdata_key)
          LEFT JOIN res_v_aanwezigkenmerkwaarde gdr
             ON x.res_rsv_ruimte_key = gdr.res_rsv_ruimte_key
                AND gdr.res_kenmerk_key = 182            -- Gecontroleerd door
          LEFT JOIN sroz_v_controleurs c
             ON gdr.res_kenmerkreservering_waarde = TO_CHAR (c.prs_perslid_key)
    WHERE x.res_rsv_ruimte_van > TO_DATE ('01-01-2019', 'dd-mm-yyyy')
;

-- Actueel: Externe reserveringen lopende week!
CREATE OR REPLACE VIEW sroz_v_rap_actual_res
(
   hide_f_sortering,
   reserveringsnummer,
   debiteurnummer,
   debiteurnaam,
   debiteurcontact,
   vandatum,
   totdatum,
   omschrijving,
   aantal,
   artikelomschrijving,
   artikelprijs,
   btw,
   debiteurreferentie,
   administratie,
   kostenplaats,
   code_rcvm,
   controleur
)
AS
     SELECT sortering,
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            SUM (aantal),
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur
       FROM sroz_v_res_all
      WHERE res_rsv_ruimte_van > TRUNC (SYSDATE, 'iw')
            AND res_status_bo_key != 6                              -- Niet AV
            AND export2afas_key = 161     -- Ja (zodra afgemeld+gecontroleerd)
   GROUP BY sortering,
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur;

-- Concept: Externe reserveringen voorgaande week!
CREATE OR REPLACE VIEW sroz_v_rap_dryrun_res
(
   hide_f_sortering,
   reserveringsnummer,
   debiteurnummer,
   debiteurnaam,
   debiteurcontact,
   vandatum,
   totdatum,
   omschrijving,
   aantal,
   artikelomschrijving,
   artikelprijs,
   btw,
   debiteurreferentie,
   administratie,
   kostenplaats,
   code_rcvm,
   controleur
)
AS
     SELECT sortering,
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            SUM (aantal),
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur
       FROM sroz_v_res_all
      WHERE res_rsv_ruimte_van < TRUNC (SYSDATE, 'iw')
            AND res_status_bo_key != 6                              -- Niet AV
            AND export2afas_key = 161     -- Ja (zodra afgemeld+gecontroleerd)
   GROUP BY sortering,
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur;

-- Definitief: Externe reserveringen voorgaande weken!
-- TODO: Beter historisch opslaan in fin_verkoopfactuur-tabel?
CREATE OR REPLACE VIEW sroz_v_rap_frozen_res
(
   hide_f_sortering,
   fclt_x_week,
   reserveringsnummer,
   debiteurnummer,
   debiteurnaam,
   debiteurcontact,
   vandatum,
   totdatum,
   omschrijving,
   aantal,
   artikelomschrijving,
   artikelprijs,
   btw,
   debiteurreferentie,
   administratie,
   kostenplaats,
   code_rcvm,
   controleur
)
AS
     SELECT TO_CHAR (TRUNC (fac.gettrackingdate ('RESVER', res_rsv_ruimte_key), 'iw') - 1, 'iyyy-iw') || TO_CHAR (SUBSTR (res_rsv_ruimte_ordernr, 1, INSTR (res_rsv_ruimte_ordernr, '|') - 1), 'FM00000009') || sortering sortering,
            TO_CHAR (TRUNC (fac.gettrackingdate ('RESVER', res_rsv_ruimte_key), 'iw') - 1, 'iyyy-iw') week,
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            SUM (aantal),
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur
       FROM sroz_v_res_all
      WHERE fac.gettrackingdate ('RESVER', res_rsv_ruimte_key) > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy') -- Huidige jaar en 2 voorgaande jaren!
            --AND res_status_bo_key = 6                                   -- AV!
            AND res_rsv_ruimte_ordernr IS NOT NULL
            AND export2afas_key = 161     -- Ja (zodra afgemeld+gecontroleerd)
   GROUP BY TO_CHAR (TRUNC (fac.gettrackingdate ('RESVER', res_rsv_ruimte_key), 'iw') - 1, 'iyyy-iw') || TO_CHAR (SUBSTR (res_rsv_ruimte_ordernr, 1, INSTR (res_rsv_ruimte_ordernr, '|') - 1), 'FM00000009') || sortering,
            TO_CHAR (TRUNC (fac.gettrackingdate ('RESVER', res_rsv_ruimte_key), 'iw') - 1, 'iyyy-iw'),
            TO_CHAR (res_reservering_key) || '/' || TO_CHAR (res_rsv_ruimte_volgnr),
            debiteurnummer,
            debiteurnaam,
            debiteurcontact,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy hh24:mi:ss'),
            TO_CHAR (res_rsv_ruimte_tot, 'dd-mm-yyyy hh24:mi:ss'),
            res_rsv_ruimte_omschrijving,
            artikelomschrijving,
            artikelprijs,
            btw,
            debiteurreferentie,
            administratie,
            kostenplaats,
            code_rcvm,
            controleur;

--    WHERE FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 15
--          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))
CREATE OR REPLACE VIEW sroz_v_export_fin
(
   result,
   result_order
)
AS       -- View bevat alleen inhoud op donderdagen!
   SELECT    'reserveringsnummer'
          || ';debiteur'
          || ';vandatum'
          || ';totdatum'
          || ';omschrijving'
          || ';aantal'
          || ';artikelomschrijving'
          || ';artikelprijs'
          || ';btw'
          || ';debiteurreferentie'
          || ';administratie'
          || ';kostenplaats'
          || ';codercvm'
          || ';contactpersoon',
          0
     FROM DUAL
    WHERE TO_CHAR (SYSDATE, 'd') = '5'                            -- Donderdag
   UNION ALL
   SELECT    reserveringsnummer
          || ';'
          || debiteurnummer
          || ';'
          || vandatum
          || ';'
          || totdatum
          || ';'
          || omschrijving
          || ';'
          || REPLACE (TO_CHAR (aantal), '.', ',')
          || ';'
          || artikelomschrijving
          || ';'
          || REPLACE (TO_CHAR (artikelprijs), '.', ',')
          || ';'
          || REPLACE (TO_CHAR (btw), '.', ',')
          || ';'
          || debiteurreferentie
          || ';'
          || administratie
          || ';'
          || kostenplaats
          || ';'
          || code_rcvm
          || ';'
          || debiteurcontact,
          ROWNUM
     FROM (  SELECT reserveringsnummer,
                    debiteurnummer,
                    vandatum,
                    totdatum,
                    omschrijving,
                    aantal,
                    artikelomschrijving,
                    artikelprijs,
                    btw,
                    debiteurreferentie,
                    administratie,
                    kostenplaats,
                    code_rcvm,
                    debiteurcontact
               FROM sroz_v_rap_frozen_res
              WHERE fclt_x_week = TO_CHAR (TRUNC (SYSDATE, 'iw') - 1, 'iyyy-iw')
           ORDER BY hide_f_sortering)
    WHERE  TO_CHAR (SYSDATE, 'd') = '5'                           -- Donderdag
;

CREATE OR REPLACE PROCEDURE sroz_select_fin (p_applname   IN VARCHAR2,
                                             p_applrun    IN VARCHAR2)
AS
   -- Verwerken gedefineerde set aan 'Externe bijeenkomst'-regels (waarvan
   -- mogelijk slechts een deel wordt geëxporteerd)!
   CURSOR c1
   IS
         SELECT '[' || debiteurnummer || '] ' aanduiding,
                res_rsv_ruimte_key, res_rsv_artikel_key, res_rsv_deel_key,
                debiteurnummer, aantal, artikelprijs, btw
           FROM sroz_v_res_all
          WHERE res_rsv_ruimte_van < TRUNC (SYSDATE, 'iw')
                AND res_status_bo_key != 6                          -- Niet AV
                AND ((export2afas_key = 161 AND controleur IS NOT NULL) -- Ja (zodra afgemeld+gecontroleerd)
                     OR export2afas_key = 162)
                AND sortering NOT LIKE '%R1'           -- Skip Korting-regels!
       ORDER BY debiteurnummer, sortering DESC;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_regel_nr       NUMBER;
   v_amount_tot     NUMBER (10, 2);
   v_prijs          NUMBER (9, 2);
BEGIN
   -- LET OP: FIN-export draait dagelijks na middernacht (begin van dag) en de
   -- verkoop wordt wekelijks alleen in de nacht na woensdag doorgezet.
   IF TO_CHAR (SYSDATE, 'd') = '5'
   THEN
      v_regel_nr := 0;
      v_amount_tot := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_prijs := ROUND (rec.aantal * rec.artikelprijs, 2);

            IF rec.res_rsv_artikel_key IS NOT NULL
            THEN                                              -- Artikel-regel
               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 C-verwerking';

               fac.trackaction ('RESVER', rec.res_rsv_ruimte_key, NULL, NULL, 'Artikel verwerkt');
            ELSIF rec.res_rsv_deel_key IS NOT NULL
            THEN                                          -- Voorziening-regel
               v_errormsg := 'Fout bewaren res_rsv_deel_prijs';

               UPDATE res_rsv_deel
                  SET res_rsv_deel_prijs = v_prijs
                WHERE res_rsv_deel_key = rec.res_rsv_deel_key;

               v_errormsg := 'Fout verwerken res_rsv_deel';

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

               v_errormsg := 'Fout tracken V-verwerking';

               fac.trackaction ('RESVER', rec.res_rsv_ruimte_key, NULL, NULL, 'Voorziening verwerkt');
            ELSE                                               -- Ruimte-regel
               v_errormsg := 'Fout bewaren res_rsv_ruimte_prijs';

               UPDATE res_rsv_ruimte
                  SET res_rsv_ruimte_prijs = v_prijs,
                      res_rsv_ruimte_ordernr = rec.debiteurnummer || '|' || TO_CHAR (rec.btw) -- Historisch bewaren: debiteurnummer + btw
                WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

               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 R-verwerking';

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

            v_regel_nr := v_regel_nr + 1;
            v_amount_tot := v_amount_tot + v_prijs;
            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, 'FIN-regels');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (p_applname, 'S', 'FIN export/#regels: ' || TO_CHAR (v_regel_nr), TO_CHAR (v_amount_tot));
   END IF;
END;
/

-- View tbv. Fidato/TiC Narrow Casting om reserveringsgegevens te tonen én de
-- Omschrijvingen van geaccepteerde/niet afgemelde meldingen van soortmelding
-- Bericht (met key=1).
CREATE OR REPLACE VIEW sroz_v_rap_infobord
AS
   SELECT (CASE
              WHEN rrr.res_rsv_ruimte_van > SYSDATE THEN 'expected'
              WHEN rrr.res_rsv_ruimte_tot < SYSDATE THEN 'passed'
              ELSE 'active'
           END)
             aktief,
          --TRUNC ((SYSDATE - rrr.res_rsv_ruimte_van) * 24 * 60) offset,
          TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') dag,
          TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') tijd_van,
          TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') tijd_tot,
          rrg.res_ruimte_nr ruimte,
          --rd.ins_discipline_omschrijving catalogus,
          --aanvrager.prs_perslid_naam_full aanvrager,
          --gastheer.prs_perslid_naam_full gastheer,
          rrr.res_rsv_ruimte_omschrijving omschrijving,
          --sf.res_status_fo_omschrijving status,
          --l.alg_locatie_code locatie_code,
          --g.alg_gebouw_code gebouw_code,
          --v.alg_verdieping_code verdieping_code,
          --l.alg_locatie_omschrijving locatie_omschrijving,
          --g.alg_gebouw_omschrijving gebouw_omschrijving,
          --v.alg_verdieping_omschrijving verdieping_omschrijving,
          --l.alg_locatie_key,
          --g.alg_gebouw_key,
          --v.alg_verdieping_key
          COALESCE (deb.prs_bedrijf_naam, a.prs_afdeling_omschrijving) organisatie
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_ruimte_opstelling rro,
          res_v_res_ruimte_gegevens rrg,
          --prs_v_perslid_fullnames aanvrager,
          --prs_v_perslid_fullnames gastheer,
          --alg_locatie l,
          --alg_gebouw g,
          --alg_verdieping v,
          --res_status_fo sf,
          --res_discipline rd,
          (SELECT kw.res_rsv_ruimte_key, b.prs_bedrijf_naam
             FROM res_kenmerkwaarde kw, res_kenmerk k, prs_bedrijf b
            WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                  AND k.res_srtkenmerk_key = 2                     -- Debiteur
                  AND kw.res_kenmerkreservering_waarde = TO_CHAR (b.prs_bedrijf_key)
           UNION ALL
           SELECT kw.res_rsv_ruimte_key, b.prs_bedrijf_naam
             FROM res_kenmerkwaarde kw, res_kenmerk k, prs_contactpersoon cp, prs_bedrijf b
            WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                  AND k.res_srtkenmerk_key = 2                     -- Debiteur
                  AND kw.res_kenmerkreservering_waarde = TO_CHAR (cp.prs_contactpersoon_key - 100000000)
                  AND cp.prs_bedrijf_key = b.prs_bedrijf_key) deb,
          prs_perslid ph,
          prs_afdeling a
    WHERE TRUNC (rrr.res_rsv_ruimte_van) = TRUNC (SYSDATE)  -- Alleen vandaag!
          AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
          AND rro.res_ruimte_key = rrg.res_ruimte_key
          --AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
          --AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
          --AND rrg.alg_locatie_key = l.alg_locatie_key
          --AND rrg.alg_gebouw_key = g.alg_gebouw_key
          --AND rrg.alg_verdieping_key = v.alg_verdieping_key
          --AND rrr.res_status_fo_key = sf.res_status_fo_key
          --AND rrg.res_discipline_key = rd.ins_discipline_key
          AND rrr.res_rsv_ruimte_key = deb.res_rsv_ruimte_key(+)
          AND rrr.res_rsv_ruimte_host_key = ph.prs_perslid_key
          AND ph.prs_afdeling_key = a.prs_afdeling_key
          AND EXISTS
                (SELECT 1
                   FROM res_kenmerkwaarde kw, res_kenmerk k
                  WHERE kw.res_kenmerkwaarde_verwijder IS NULL
                        AND kw.res_kenmerk_key = k.res_kenmerk_key
                        AND k.res_srtkenmerk_key = 21        -- Toon op scherm
                        AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
   UNION ALL
   SELECT 'active' aktief,
          TO_CHAR (SYSDATE, 'dd-mm-yyyy') dag,
          '08:30' tijd_van,
          '22:00' tijd_tot,
          NULL,
          mld_melding_omschrijving omschrijving,
          NULL organisatie
     FROM mld_melding
    WHERE mld_stdmelding_key = 1                                    -- Bericht
          AND mld_melding_status = 4 -- In behandeling (van Acceptatie tot Afgemeld)
;

CREATE OR REPLACE VIEW sroz_v_rap_meubels
(
   hide_f_sortering,
   datum,
   artikel,
   aantal_aanwezig,
   aantal_gebruikt,
   mogelijk_tekort,
   resnrs
)
AS
   SELECT TO_CHAR (datum, 'yyyymmdd') || artikel,
          datum,
          artikel,
          aanwezig,
          gebruikt,
          DECODE (SIGN (aanwezig - gebruikt), -1, 'Ja', 'Nee') tekort,
          resnrs
     FROM (  SELECT TRUNC (rra.res_rsv_artikel_levering) datum,
                    ra.res_artikel_omschrijving artikel,
                    COALESCE (fac.safe_to_number (ra.res_artikel_groep), 0) aanwezig,
                    SUM (rra.res_rsv_artikel_aantal) gebruikt,
                    listagg (
                       TO_CHAR (rrr.res_reservering_key) || '/' || TO_CHAR (rrr.res_rsv_ruimte_volgnr),
                       ', ')
                       WITHIN GROUP (ORDER BY rrr.res_rsv_ruimte_key)
                       AS resnrs
               FROM res_v_aanwezigrsv_ruimte rrr, res_v_aanwezigrsv_artikel rra, res_artikel ra
              WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                    AND rra.res_artikel_key = ra.res_artikel_key
                    AND ra.res_discipline_key = 52                  -- Meubels
           GROUP BY TRUNC (rra.res_rsv_artikel_levering),
                    ra.res_artikel_omschrijving,
                    ra.res_artikel_groep);

CREATE OR REPLACE VIEW sroz_v_rap_zalenzetters
(
   hide_f_sortering,
   res_rsv_ruimte_key,
   datum,
   resnr,
   titel,
   begin_eind,
   tijd,
   ruimte,
   deelnemers,
   opstelling_voorzieningen,
   opmerking_beheerder
)
AS
   SELECT DECODE (x.begin_eind, 'Begin', TO_CHAR (x.res_rsv_ruimte_van, 'yyyymmdd hh24:mi'), TO_CHAR (x.res_rsv_ruimte_tot, 'yyyymmdd hh24:mi')) || TO_CHAR (res_ruimte_nr)
             sortering,
          x.res_rsv_ruimte_key,
          x.res_rsv_ruimte_van datum,
          TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr) resnr,
          x.res_rsv_ruimte_omschrijving titel,
          x.begin_eind,
          DECODE (x.begin_eind, 'Begin', TO_CHAR (x.res_rsv_ruimte_van, 'hh24:mi') || '-' || TO_CHAR (x.res_rsv_ruimte_tot, 'hh24:mi'), TO_CHAR (x.res_rsv_ruimte_tot, 'hh24:mi')) tijd,
          x.res_ruimte_nr ruimte,
          x.res_rsv_ruimte_bezoekers deelnemers,
          DECODE (x.next_van, NULL, '', '[' || TO_CHAR (x.next_van, 'hh24:mi') || ']' || CHR (13) || CHR (10))
          || DECODE (x.begin_eind, 'Eind', DECODE (x.res_ruimte_opstel_default, 1, '', 'Opstelling terugbouwen' || CHR (13) || CHR (10)), x.res_opstelling_omschrijving || CHR (13) || CHR (10))
          || DECODE (rar.aantal, NULL, '', 0, '', 1, '', DECODE (x.begin_eind, 'Eind', 'Koppelzaal dicht', 'Koppelzaal open') || CHR (13) || CHR (10))
          || DECODE (sbo_beh.res_kenmerkreservering_waarde, NULL, '', DECODE (x.begin_eind, 'Eind', '', 'Smartboard opstarten') || CHR (13) || CHR (10))
          || DECODE (ra.res_artikels, NULL, '', ra.res_artikels || CHR (13) || CHR (10))
          || rd.res_deels
             opstelling_voorzieningen,
          opm_beh.res_kenmerkreservering_waarde opmerking_beheerder
     FROM    (SELECT 'Begin' begin_eind, -- Begin als opstelling anders dan voorgaande
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     NULL next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND EXISTS
                           (SELECT 1
                              FROM res_v_aanwezigrsv_ruimte rrr2, res_ruimte_opstelling rro2
                             WHERE rrr2.res_ruimte_opstel_key = rro2.res_ruimte_opstel_key
                                   AND rrr2.res_rsv_ruimte_tot BETWEEN TRUNC (rrr1.res_rsv_ruimte_van - 1) AND rrr1.res_rsv_ruimte_van
                                   AND rro2.res_ruimte_key = rro1.res_ruimte_key
                                   AND rro2.res_opstelling_key != rro1.res_opstelling_key
                                   AND NOT EXISTS
                                         (SELECT 1
                                            FROM res_v_aanwezigrsv_ruimte rrr3, res_ruimte_opstelling rro3
                                           WHERE rrr3.res_ruimte_opstel_key = rro3.res_ruimte_opstel_key
                                                 AND rrr3.res_rsv_ruimte_tot BETWEEN TRUNC (rrr1.res_rsv_ruimte_van - 1) AND rrr1.res_rsv_ruimte_van
                                                 AND rro3.res_ruimte_key = rro2.res_ruimte_key
                                                 AND rrr3.res_rsv_ruimte_tot > rrr2.res_rsv_ruimte_tot))
              UNION
              SELECT 'Begin' begin_eind, -- Begin als opstelling anders dan default
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     NULL next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND rro1.res_ruimte_opstel_default IS NULL
              UNION
              SELECT 'Eind' begin_eind, -- Eind als opstelling anders dan default
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     (SELECT MIN (x.res_rsv_ruimte_van)
                        FROM res_v_aanwezigrsv_ruimte x, res_ruimte_opstelling y
                       WHERE x.res_ruimte_opstel_key = y.res_ruimte_opstel_key
                             AND y.res_ruimte_key = rr1.res_ruimte_key
                             AND TRUNC (x.res_rsv_ruimte_van) = TRUNC (rrr1.res_rsv_ruimte_tot)
                             AND x.res_rsv_ruimte_van > rrr1.res_rsv_ruimte_tot)
                        next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND rro1.res_ruimte_opstel_default IS NULL
              UNION
              SELECT 'Begin' begin_eind, -- Begin als koppelzaal of smartboard opstarten of Opmerking beheerder
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     NULL next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1,
                     (  SELECT res_ruimte_key, COUNT (*) aantal
                          FROM res_alg_ruimte
                         WHERE res_alg_ruimte_verwijder IS NULL
                      GROUP BY res_ruimte_key) rar
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND rro1.res_ruimte_key = rar.res_ruimte_key
                     AND (rar.aantal > 1
                          OR EXISTS
                               (SELECT 1
                                  FROM res_v_aanwezigkenmerkwaarde kw, res_kenmerk k
                                 WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                                       AND k.res_srtkenmerk_key = 121 -- Smartboard opstarten door beheerder
                                       AND kw.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key)
                          OR EXISTS
                               (SELECT 1
                                  FROM res_v_aanwezigkenmerkwaarde kw
                                 WHERE kw.res_kenmerk_key IN (44, 46) -- Opmerking beheerder
                                       AND kw.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key))
              UNION
              SELECT 'Eind' begin_eind, -- Eind als koppelzaal
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     (SELECT MIN (x.res_rsv_ruimte_van)
                        FROM res_v_aanwezigrsv_ruimte x, res_ruimte_opstelling y
                       WHERE x.res_ruimte_opstel_key = y.res_ruimte_opstel_key
                             AND y.res_ruimte_key = rr1.res_ruimte_key
                             AND TRUNC (x.res_rsv_ruimte_van) = TRUNC (rrr1.res_rsv_ruimte_tot)
                             AND x.res_rsv_ruimte_van > rrr1.res_rsv_ruimte_tot)
                        next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1,
                     (  SELECT res_ruimte_key, COUNT (*) aantal
                          FROM res_alg_ruimte
                         WHERE res_alg_ruimte_verwijder IS NULL
                      GROUP BY res_ruimte_key) rar
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND rro1.res_ruimte_key = rar.res_ruimte_key
                     AND rar.aantal > 1
              UNION
              SELECT 'Begin' begin_eind, -- Begin als geboekt uit Beheerder-catalogi
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     NULL next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND (EXISTS
                            (SELECT 1
                               FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                              WHERE rra.res_artikel_key = ra.res_artikel_key
                                    AND ra.res_discipline_key = 52  -- Meubels
                                    AND rra.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key)
                          OR EXISTS
                               (SELECT 1
                                  FROM res_v_aanwezigrsv_deel rrd, res_deel rd
                                 WHERE rrd.res_deel_key = rd.res_deel_key
                                       AND rd.res_discipline_key IN (54, 55, 102, 103)
                                       AND rrd.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key))
              UNION
              SELECT 'Eind' begin_eind, -- Eind als geboekt uit Beheerder-catalogi
                     rrr1.*, rr1.res_ruimte_key, rr1.res_ruimte_nr, ro1.res_opstelling_omschrijving, res_ruimte_opstel_default,
                     (SELECT MIN (x.res_rsv_ruimte_van)
                        FROM res_v_aanwezigrsv_ruimte x, res_ruimte_opstelling y
                       WHERE x.res_ruimte_opstel_key = y.res_ruimte_opstel_key
                             AND y.res_ruimte_key = rr1.res_ruimte_key
                             AND TRUNC (x.res_rsv_ruimte_van) = TRUNC (rrr1.res_rsv_ruimte_tot)
                             AND x.res_rsv_ruimte_van > rrr1.res_rsv_ruimte_tot)
                        next_van
                FROM res_v_aanwezigrsv_ruimte rrr1, res_ruimte_opstelling rro1, res_ruimte rr1, res_opstelling ro1
               WHERE rrr1.res_rsv_ruimte_van > TRUNC (SYSDATE)
                     AND rrr1.res_ruimte_opstel_key = rro1.res_ruimte_opstel_key
                     AND rro1.res_ruimte_key = rr1.res_ruimte_key
                     AND rro1.res_opstelling_key = ro1.res_opstelling_key
                     AND (EXISTS
                            (SELECT 1
                               FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                              WHERE rra.res_artikel_key = ra.res_artikel_key
                                    AND ra.res_discipline_key = 52  -- Meubels
                                    AND rra.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key)
                          OR EXISTS
                               (SELECT 1
                                  FROM res_v_aanwezigrsv_deel rrd, res_deel rd
                                 WHERE rrd.res_deel_key = rd.res_deel_key
                                       AND rd.res_discipline_key IN (54, 55, 102, 103)
                                       AND rrd.res_rsv_ruimte_key = rrr1.res_rsv_ruimte_key))) x
          LEFT JOIN (  SELECT res_ruimte_key, COUNT (*) aantal
                         FROM res_alg_ruimte
                        WHERE res_alg_ruimte_verwijder IS NULL
                     GROUP BY res_ruimte_key) rar
             ON x.res_ruimte_key = rar.res_ruimte_key
          LEFT JOIN res_v_aanwezigkenmerkwaarde sbo_beh
             ON x.res_rsv_ruimte_key = sbo_beh.res_rsv_ruimte_key
                AND sbo_beh.res_kenmerk_key IN (141, 142) -- Smartboard opstarten door beheerder
          LEFT JOIN (  SELECT rra.res_rsv_ruimte_key,-- Te bezorgen/afhalen Beheerder-artikelen
                              listagg (
                                 TO_CHAR (rra.res_rsv_artikel_aantal) || ' x ' || TO_CHAR (ra.res_artikel_omschrijving),
                                 CHR (13) || CHR (10))
                                 WITHIN GROUP (ORDER BY ra.res_artikel_omschrijving)
                                 AS res_artikels
                         FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                        WHERE rra.res_rsv_artikel_levering > TRUNC (SYSDATE)
                              AND rra.res_artikel_key = ra.res_artikel_key
                              AND ra.res_discipline_key = 52        -- Meubels
                     GROUP BY rra.res_rsv_ruimte_key) ra
             ON x.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
          LEFT JOIN (  SELECT rrd.res_rsv_ruimte_key, -- Te bezorgen/afhalen Beheerder-delen
                              listagg (
                                 TO_CHAR (rd.res_deel_omschrijving),
                                 CHR (13) || CHR (10))
                                 WITHIN GROUP (ORDER BY rd.res_deel_omschrijving)
                                 AS res_deels
                         FROM res_v_aanwezigrsv_deel rrd, res_deel rd
                        WHERE rrd.res_rsv_deel_van > TRUNC (SYSDATE)
                              AND rrd.res_deel_key = rd.res_deel_key
                              AND rd.res_discipline_key IN (54, 55, 102, 103)
                     GROUP BY rrd.res_rsv_ruimte_key) rd
             ON x.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
          LEFT JOIN res_v_aanwezigkenmerkwaarde opm_beh
             ON x.res_rsv_ruimte_key = opm_beh.res_rsv_ruimte_key
                AND opm_beh.res_kenmerk_key IN (44, 46) -- Opmerking beheerder
;

CREATE OR REPLACE VIEW sroz_v_rap_infopunt
(
   hide_f_sortering,
   res_rsv_ruimte_key,
   datum,
   resnr,
   begintijd,
   eindtijd,
   ruimte,
   titel,
   programma,
   debiteur,
   team
)
AS
   SELECT TO_CHAR (x.res_rsv_ruimte_van, 'yyyymmdd hh24:mi') || TO_CHAR (res_ruimte_nr)
             sortering,
          x.res_rsv_ruimte_key,
          x.res_rsv_ruimte_van datum,
          TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr)
             resnr,
          x.res_rsv_ruimte_van,
          x.res_rsv_ruimte_tot,
          x.res_ruimte_nr ruimte,
          x.res_rsv_ruimte_omschrijving titel,
          prog.res_kenmerkreservering_waarde programma,
          x.prs_bedrijf_naam debiteur,
          CASE
             WHEN x.res_rsv_ruimte_flag > 0
             THEN lcl.l ('lcl_res_flag' || x.res_rsv_ruimte_flag)
          END
             team
     FROM    (SELECT 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,
                     rrr.res_rsv_ruimte_flag,
                     rr.res_ruimte_nr,
                     deb.prs_bedrijf_naam
                FROM res_v_aanwezigrsv_ruimte rrr,
                     res_ruimte_opstelling rro,
                     res_ruimte rr,
                     (SELECT kw.res_rsv_ruimte_key, b.prs_bedrijf_naam
                        FROM res_kenmerkwaarde kw, res_kenmerk k, prs_bedrijf b
                       WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                             AND k.res_srtkenmerk_key = 2          -- Debiteur
                             AND kw.res_kenmerkreservering_waarde = TO_CHAR (b.prs_bedrijf_key)
                      UNION ALL
                      SELECT kw.res_rsv_ruimte_key, b.prs_bedrijf_naam
                        FROM res_kenmerkwaarde kw, res_kenmerk k, prs_contactpersoon cp, prs_bedrijf b
                       WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                             AND k.res_srtkenmerk_key = 2          -- Debiteur
                             AND kw.res_kenmerkreservering_waarde = TO_CHAR (cp.prs_contactpersoon_key - 100000000)
                             AND cp.prs_bedrijf_key = b.prs_bedrijf_key) deb
               WHERE rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 10)
                     AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                     AND rro.res_ruimte_key = rr.res_ruimte_key
                     AND rrr.res_rsv_ruimte_key = deb.res_rsv_ruimte_key(+)) x
          LEFT JOIN
             res_v_aanwezigkenmerkwaarde prog
          ON x.res_rsv_ruimte_key = prog.res_rsv_ruimte_key
             AND prog.res_kenmerk_key IN (41, 42)                 -- Programma
;

-- SROZ#55615: Rapportage cateraars.
CREATE OR REPLACE VIEW sroz_v_rap_cateraar
(
   hide_f_sortering,
   res_rsv_ruimte_key,
   datum,
   begintijd,
   eindtijd,
   resnr,
   titel,
   --team,                                                       -- Organisatie?
   ruimte,
   deelnemers,
   artikel,
   aantal,
   prijs_incl_btw,
   btw,
   totaal_incl_btw,
   opm_cateraar,
   fclt_3d_discipline_key,
   catalogus
)
AS
   SELECT    TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyymmdd hh24:mi')
          || SUBSTR ('000000000' || TO_CHAR (rrr.res_reservering_key), -10)
          || '/'
          || SUBSTR ('0000' || TO_CHAR (rrr.res_rsv_ruimte_volgnr), -5)
          || SUBSTR ('00' || TO_CHAR (rra.volgnr), -3)
             sortering,
          rrr.res_rsv_ruimte_key,
          rrr.res_rsv_ruimte_van datum,
          rra.res_rsv_artikel_levering,
          rrr.res_rsv_ruimte_tot,
          TO_CHAR (rrr.res_reservering_key) || '/' || TO_CHAR (rrr.res_rsv_ruimte_volgnr)
             resnr,
          rrr.res_rsv_ruimte_omschrijving titel,
          --CASE
          --   WHEN rrr.res_rsv_ruimte_flag > 0
          --   THEN lcl.l ('lcl_res_flag' || rrr.res_rsv_ruimte_flag)
          --END
          --   team,
          COALESCE (rr.res_ruimte_nr, (SELECT alg_plaatsaanduiding FROM alg_v_plaatsaanduiding_all WHERE alg_onroerendgoed_keys = rrr.alg_ruimte_key))
             ruimte,
          rrr.res_rsv_ruimte_bezoekers deelnemers,
          rra.res_artikel_omschrijving artikel,
          rra.res_rsv_artikel_aantal aantal,
          DECODE (rra.res_rsv_artikel_prijs, NULL, rra.res_artikel_prijs, rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal)
             prijs_incl_btw,
          rra.btw,
          DECODE (rra.res_rsv_artikel_prijs, NULL, rra.res_rsv_artikel_aantal * rra.res_artikel_prijs, rra.res_rsv_artikel_prijs)
             totaal_incl_btw,
          DECODE (rra.volgnr, 1, opm_cat.res_kenmerkreservering_waarde, NULL)
             opmerking_cateraar,
          rra.res_discipline_key,
          rd.ins_discipline_omschrijving catalogus
     FROM 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,
          res_ruimte rr,
          (SELECT res_rsv_ruimte_key, res_rsv_artikel_key,
                  res_rsv_artikel_levering, res_status_bo_key,
                  res_rsv_artikel_aantal, res_artikel_nr, res_artikel_omschrijving,
                  res_rsv_artikel_prijs, res_artikel_prijs, btw,
                  res_discipline_key,
                  ROW_NUMBER ()
                     OVER (
                        PARTITION BY res_rsv_ruimte_key
                        ORDER BY res_discipline_key, res_artikel_volgnummer, res_artikel_omschrijving)
                     AS volgnr
             FROM (SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal, ra.res_artikel_nr, ra.res_artikel_omschrijving,
                          rra.res_rsv_artikel_prijs, ra.res_artikel_prijs,
                          COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw, 21) btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND (ra.res_discipline_key NOT IN (48, 50) OR ra.res_artikel_btw IS NOT NULL)
                   UNION ALL                              -- Dichtbij BTW laag
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal, ra.res_artikel_nr, ra.res_artikel_omschrijving,
                          0.66 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.66 * ra.res_artikel_prijs res_artikel_prijs,
                          DECODE (TO_CHAR (rra.res_rsv_artikel_levering, 'yyyy'), '2018', 6, 9) btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (48)  -- Dichtbij extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                              -- Dichtbij BTW hoog
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal, ra.res_artikel_nr, ra.res_artikel_omschrijving,
                          0.34 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.34 * ra.res_artikel_prijs res_artikel_prijs,
                          21 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (48)  -- Dichtbij extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                               -- Momento BTW laag
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal, ra.res_artikel_nr, ra.res_artikel_omschrijving,
                          0.65 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.65 * ra.res_artikel_prijs res_artikel_prijs,
                          DECODE (TO_CHAR (rra.res_rsv_artikel_levering, 'yyyy'), '2018', 6, 9) btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (50)   -- Momento extra
                          AND ra.res_artikel_btw IS NULL
                   UNION ALL                               -- Momento BTW hoog
                   SELECT rra.res_rsv_ruimte_key, rra.res_rsv_artikel_key,
                          rra.res_rsv_artikel_levering, rra.res_status_bo_key,
                          rra.res_rsv_artikel_aantal, ra.res_artikel_nr, ra.res_artikel_omschrijving,
                          0.35 * rra.res_rsv_artikel_prijs res_rsv_artikel_prijs,
                          0.35 * ra.res_artikel_prijs res_artikel_prijs,
                          21 btw,
                          ra.res_discipline_key, ra.res_artikel_volgnummer
                     FROM res_v_aanwezigrsv_artikel rra, res_artikel ra
                    WHERE rra.res_rsv_artikel_dirtlevel = 0
                          AND rra.res_artikel_key = ra.res_artikel_key
                          AND ra.res_discipline_key IN (50)   -- Momento extra
                          AND ra.res_artikel_btw IS NULL)) rra,
          (SELECT res_rsv_ruimte_key, res_kenmerkreservering_waarde
             FROM res_v_aanwezigkenmerkwaarde
            WHERE res_kenmerk_key IN (43, 45)) opm_cat,  -- Opmerking cateraar
          res_discipline rd
    WHERE rrr.res_rsv_ruimte_van > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy')
          AND rrr.res_rsv_ruimte_dirtlevel = 0                  -- Niet dirty!
          AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+) -- Ruimte- én Uitleen-reserveringen!
          AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
          AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
          AND COALESCE (rar1.res_ruimte_key, rar2.res_ruimte_key) = rr.res_ruimte_key(+)
          AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rra.res_rsv_artikel_aantal != 0   -- Zou altijd zo moeten zijn!?
          AND rrr.res_rsv_ruimte_key = opm_cat.res_rsv_ruimte_key(+)
          AND rra.res_discipline_key = rd.ins_discipline_key;

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

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

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