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

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

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

CREATE OR REPLACE VIEW stch_v_rap_ocr
(
   opdracht_key,
   opdracht_nummer,
   opdracht_regio,
   opdracht_district,
   opdracht_locatie_code,
   opdracht_locatie,
   opdracht_locatieplaats,
   fclt_3d_locatie_key,
   opdracht_gebouwcode,
   opdracht_gebouw,
   opdracht_verdieping,
   opdracht_ruimtenr,
   opdracht_ruimte,
   opdracht_kostenplaats,
   opdracht_kostenplaats_oms,
   melding_key,
   opdracht_type,
   opdracht_volgnummer,
   opdracht_status,
   opdracht_duur_gepland,
   opdracht_datum,
   opdracht_einddatum,
   opdracht_plandatum,
   opdracht_acceptdatum,
   opdracht_goedgekeurd,
   opdracht_afgemeld,
   opdracht_doorlooptijd,
   opdracht_accepttijd,
   opdracht_omschrijving,
   opdracht_opmerking,
   opdracht_uitvoerende,
   opdracht_uitvoerende_contact,
   opdracht_behandelaar,
   opdracht_contract,
   opdracht_contract_versie,
   opdracht_contactpersoon,
   opdracht_uren,
   opdracht_correctie,
   opdracht_materiaal,
   opdracht_uurtarief,
   opdracht_kosten,
   reason_0_order,
   inkoopprijs,
   uurtarief,
   aantal_uren,
   percentage,
   subtotaal_kosten_uren,
   totaal_kosten,
   berekende_marge,
   verkoopprijs,
   periode,
   aanvrager,
   organisatie,
   categorie,
   opdracht_gereeddatum,
   kostensoortgroep,
   kostensoortnr,
   kostensoort,
   melding,
   meldingsgroep,
   kostenplaatsnummer,
   rema_budget,
   veiligheid
)
AS
   SELECT DISTINCT
          o.opdracht_key,
          o.opdracht_nummer,
          o.opdracht_regio,
          o.opdracht_district,
          o.opdracht_locatie_code,
          o.opdracht_locatie,
          o.opdracht_locatieplaats,
          o.fclt_3d_locatie_key,
          o.opdracht_gebouwcode,
          o.opdracht_gebouw,
          o.opdracht_verdieping,
          o.opdracht_ruimtenr,
          o.opdracht_ruimte,
          o.opdracht_kostenplaats,
          o.opdracht_kostenplaats_oms,
          o.melding_key,
          o.opdracht_type,
          o.opdracht_volgnummer,
          o.opdracht_status,
          o.opdracht_duur_gepland,
          o.opdracht_datum,
          o.opdracht_einddatum,
          o.opdracht_plandatum,
          o.opdracht_acceptdatum,
          track.datum,
          o.opdracht_afgemeld,
          o.opdracht_doorlooptijd,
          o.opdracht_accepttijd,
          o.opdracht_omschrijving,
          o.opdracht_opmerking,
          o.opdracht_uitvoerende,
          o.opdracht_uitvoerende_contact,
          o.opdracht_behandelaar,
          o.opdracht_contract,
          o.opdracht_contract_versie,
          o.opdracht_contactpersoon,
          o.opdracht_uren,
          o.opdracht_correctie,
          o.opdracht_materiaal,
          o.opdracht_uurtarief,
          o.opdracht_kosten,
          (SELECT f.fac_usrdata_omschr
             FROM fac_usrdata f
            WHERE f.fac_usrdata_key =
                     (SELECT mvk.mld_kenmerkopdr_waarde
                        FROM mld_kenmerk mk,
                             mld_srtkenmerk msk,
                             mld_v_aanwezigkenmerkopdr mvk
                       WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                             AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                             AND mvk.mld_opdr_key = mo.mld_opdr_key
                             AND mk.mld_kenmerk_niveau = 'O'
                             AND msk.mld_srtkenmerk_key = 321))
             reason_0_order,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1066)
             inkoopprijs,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1064)
             uurtarief,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1063)
             geraamde_uren,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1067)
             interne_marge_perc,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1065)
             subtotaal_kosten_uren,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1070)
             totale_kosten,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1069)
             berekende_marge,
          (SELECT mvk.mld_kenmerkopdr_waarde
             FROM mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  mld_v_aanwezigkenmerkopdr mvk
            WHERE     mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
                  AND mvk.mld_opdr_key = mo.mld_opdr_key
                  AND mk.mld_kenmerk_niveau = 'O'
                  AND msk.mld_srtkenmerk_key = 1068)
             verkoopprijs,
          TO_CHAR (o.opdracht_datum, 'yyyy-mm') periode,
          p.prs_perslid_naam
          || NVL2 (p.prs_perslid_voorletters,
                   ', ' || p.prs_perslid_voorletters,
                   '')
          || NVL2 (p.prs_perslid_tussenvoegsel,
                   ' ' || p.prs_perslid_tussenvoegsel,
                   '')
          || NVL2 (p.prs_perslid_voornaam,
                   ' (' || p.prs_perslid_voornaam || ')',
                   '')
             aanvrager,
          d.prs_afdeling_naam organisatie,
          md.ins_discipline_omschrijving,
          mo.mld_opdr_einddatum,
          ksg.prs_kostensoortgrp_oms,
          ks.prs_kostensoort_refcode,
          ks.prs_kostensoort_oms,
          std.mld_stdmelding_omschrijving,
          stdg.mld_stdmeldinggroep_oms,
          k.prs_kostenplaats_nr,
          (SELECT f.fac_usrdata_omschr
             FROM fac_usrdata f
            WHERE f.fac_usrdata_key =
                     (SELECT fac.safe_to_number(mvk.mld_kenmerkopdr_waarde)
                        FROM mld_v_aanwezigkenmerkopdr mvk
                       WHERE mvk.mld_kenmerk_key = 1601
                              AND mvk.mld_opdr_key = mo.mld_opdr_key))
             rema_budget,
          (SELECT f.fac_usrdata_omschr
             FROM fac_usrdata f
            WHERE f.fac_usrdata_key =
                     (SELECT fac.safe_to_number(mvk.mld_kenmerkopdr_waarde)
                        FROM mld_v_aanwezigkenmerkopdr mvk
                       WHERE mvk.mld_kenmerk_key = 1721
                              AND mvk.mld_opdr_key = mo.mld_opdr_key))
             veiligheid
     FROM mld_v_udr_opdracht o,
          mld_opdr mo,
          prs_kostenplaats k,
          prs_kostenplaatsgrp kpg,
          prs_kostensoort ks,
          prs_kostensoortgrp ksg,
          prs_v_afdeling d,
          prs_perslid p,
          mld_discipline md,
          mld_stdmelding std,
          mld_stdmeldinggroep stdg,
          mld_melding m,
          (  SELECT fac_tracking_refkey key, MAX (fac_tracking_datum) datum
               FROM fac_tracking
              WHERE fac_tracking_oms LIKE '%Goedgekeurd%'
                    AND fac_tracking_oms LIKE '%--> Ja%'
           GROUP BY fac_tracking_refkey) track
    WHERE     mo.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND std.prs_kostensoort_key = ks.prs_kostensoort_key(+)
          AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND stdg.mld_stdmeldinggroep_key(+) = std.mld_stdmeldinggroep_key
          AND std.mld_ins_discipline_key = md.ins_discipline_key
          AND m.mld_melding_key = mo.mld_melding_key
          AND mo.mld_opdr_key = o.opdracht_key
          AND p.prs_afdeling_key = d.prs_afdeling_key(+)
          AND p.prs_perslid_key = mo.prs_perslid_key
          AND TRUNC (o.opdracht_einddatum) >
                TO_DATE ('01-01-2018', 'dd-mm-yyyy')
          AND track.key(+) = o.opdracht_key;

CREATE OR REPLACE VIEW stch_v_rap_opdrkosten
(
   CONTRACT_NUMMER,
   EXTERN_NUMMER,
   UITVOERENDE,
   BEDRAG,
   KOSTENPLAATS,
   KOSTENPLAATS_CODE,
   OPDRACHTNR,
   OPDRACHT_AFGEROND,
   OPDRACHT_GOEDGEKEURD
)
AS
   SELECT cn.cnt_contract_nummer,
          cn.cnt_contract_nummer_intern,
          pb.prs_bedrijf_naam,
          mo.mld_opdr_kosten,
          pk.prs_kostenplaats_omschrijving,
          pk.prs_kostenplaats_nr,
             sd.ins_srtdiscipline_prefix
          || TO_CHAR (m.mld_melding_key)
          || '/'
          || mo.mld_opdr_bedrijfopdr_volgnr,
          mld.getopdrachtstatusdate (mo.mld_opdr_key, 9),
          track.datum
     FROM mld_opdr mo,
          cnt_contract cn,
          mld_melding m,
          ins_srtdiscipline sd,
          mld_stdmelding s,
          mld_discipline md,
          prs_kostenplaats pk,
          prs_bedrijf pb,
          mld_kenmerkopdr mk,
          (  SELECT fac_tracking_refkey key, MAX (fac_tracking_datum) datum
               FROM fac_tracking
              WHERE fac_tracking_oms LIKE '%Goedgekeurd%'
                    AND fac_tracking_oms LIKE '%--> Ja%'
           GROUP BY fac_tracking_refkey) track
    WHERE     mo.cnt_contract_key = cn.cnt_contract_key(+)
          AND m.mld_melding_key = mo.mld_melding_key(+)
          AND s.mld_stdmelding_key = m.mld_stdmelding_key
          AND md.ins_discipline_key = s.mld_ins_discipline_key
          AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
          AND mo.prs_kostenplaats_key = pk.prs_kostenplaats_key
          AND mo.mld_uitvoerende_keys = pb.prs_bedrijf_key
          AND mo.mld_opdr_key = mk.mld_opdr_key
          AND mk.mld_kenmerk_key IN (1621, 1641, 1642)
          AND mk.mld_kenmerkopdr_waarde = '142'            -- Goedgekeurd = Ja
          AND TRUNC (track.datum) = TRUNC (SYSDATE - 1)
          AND mo.mld_opdr_kosten IS NOT NULL
          AND mo.mld_opdr_kosten NOT LIKE '0'
          AND track.key = mo.mld_opdr_key;
          
-- Rapport voor het controleren van keyusers        
CREATE OR REPLACE VIEW stch_v_rap_keyusers
(
   perslid_key,
   naam,
   keyuser,
   laatste_login
)
AS
   SELECT f.prs_perslid_key,
          f.naam,
          DECODE (f.key_user, 1, 'Ja', 'Nee'),
          f.last_login
     FROM fac_v_lcrap_fe_vs_key_data f, prs_perslid p
    WHERE f.prs_perslid_key = p.prs_perslid_key
          AND p.prs_perslid_verwijder IS NULL;

-- Aantal dagen geen reactie op RFQ naar strukton          
CREATE OR REPLACE VIEW stch_v_rap_uitvoerdagen
(
   opdracht_key,
   opdrachtnummer,
   verzonden,
   reactie_werkdagen
)
AS
   SELECT o.mld_opdr_key,
          TO_CHAR (mo.mld_typeopdr_omschrijving || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr)
             opdrachtnummer,
          o.mld_opdr_verzonden,
          (TRUNC (SYSDATE, 'iw') - TRUNC (mld_opdr_verzonden, 'iw')) * 5 / 7
          + LEAST (5, TRUNC (SYSDATE) - TRUNC (SYSDATE, 'iw'))
          - LEAST (5, TRUNC (mld_opdr_verzonden) - TRUNC (mld_opdr_verzonden, 'iw'))
             werkdagen
     FROM mld_opdr o, mld_typeopdr mo
    WHERE     o.mld_typeopdr_key = 165
          AND o.mld_statusopdr_key IN (5) -- Toegekend, dus nog geen reactie ontvangen
          AND o.mld_uitvoerende_keys = 50422
          AND o.mld_typeopdr_key = mo.mld_typeopdr_key;

--Strukton koppeling   
CREATE OR REPLACE PROCEDURE stch_import_opdrstat_strukton (
   p_import_key IN NUMBER)
AS
   c_delim                VARCHAR2 (1) := ';';
   v_newline              VARCHAR2 (1000);                       -- Input line
   v_errormsg             VARCHAR2 (4000);
   oracle_err_num         NUMBER;
   oracle_err_mes         VARCHAR2 (200);
   v_aanduiding           VARCHAR2 (1200);
   v_dummy                VARCHAR2 (200);
   header_is_valid        NUMBER := 0;
   v_count                NUMBER;
   v_count_tot            NUMBER (10) := 0;
   v_count_import         NUMBER (10) := 0;
   v_ongeldig             NUMBER (1) := 0;
   -- De importvelden
   v_mld_opdr_opmerking   VARCHAR2 (4000);
   v_mld_opdr_key         NUMBER (10);
   v_mld_opdr_key_tekst   VARCHAR2 (100);
   v_extern_nummer        VARCHAR2 (100);
   v_status               NUMBER (10);
   v_status_tekst         VARCHAR2 (100);
   v_status_code          VARCHAR2 (100);
   v_datumtijd            DATE;
   v_datumtijd_tekst      VARCHAR2 (100);
   v_opmerking            VARCHAR2 (3000);
   v_totaal               NUMBER (8,2);
   v_totaal_str           VARCHAR2 (100);

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

   COMMIT;

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

         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);
         fac.imp_getfield (v_newline, c_delim, v_totaal_str);
         v_opmerking := substr(v_opmerking, 1, 1000);
         -- verwijder de markering voor cr/lf die we zelf in de stylesheet toegevoegd hebben.
         v_opmerking := replace(v_opmerking, '@@',CHR (13));
         v_aanduiding :=
               '['
            || v_extern_nummer
            || '|'
            || v_mld_opdr_key_tekst
            || '|'
            || v_status_tekst
            || '|'
            || v_opmerking
            || '] ';
         v_totaal := fac.safe_to_number(v_totaal_str);
         
         fac.imp_writelog (p_import_key, 'I', 'v_totaal_str:' || v_totaal_str || ' v_totaal:' || v_totaal || ' fac.safe_to_number(v_totaal_str):' || fac.safe_to_number(v_totaal_str),'');

         -- 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'
               AND UPPER (TRIM (v_totaal_str)) = 'TOTAL'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Fout inlezen mld_opdr_key [' || v_aanduiding || ']';
            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, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmelding std
                WHERE o.mld_melding_key = m.mld_melding_key
                  AND m.mld_stdmelding_key = std.mld_stdmelding_key
                  AND std.mld_ins_discipline_key = d.ins_discipline_key
                  AND d.ins_srtdiscipline_key = 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 NO_DATA_FOUND THEN
               BEGIN
                 fac.imp_writelog (p_import_key, 'W',  'Opdracht kan niet gevonden worden. [' || v_aanduiding || ']', '');

               -- kijk nu of de opdracht gevonden kan worden a.d.h.v het Struktonnummer
               SELECT o.mld_opdr_key, o.mld_opdr_opmerking
                 INTO v_mld_opdr_key, v_mld_opdr_opmerking
                 FROM mld_opdr o, mld_kenmerkopdr ko, mld_kenmerk k
                WHERE o.mld_opdr_key = ko.mld_opdr_key
                  AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 35
                  AND ko.mld_kenmerkopdr_waarde = v_extern_nummer;

               EXCEPTION WHEN OTHERS THEN
                  v_ongeldig := 1;
                  v_errormsg := 'Opdracht kan niet gevonden worden (intern/externnr).  [' || v_aanduiding || ']';
                  v_mld_opdr_key := NULL;
               END;
            END;

            IF v_ongeldig = 0
            THEN
               v_errormsg :=
                  'Fout bij bepalen status [' || v_aanduiding || ']';

               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
                  WHEN v_status_code = '45'                     -- uitgeprijst
                  THEN
                     v_status := 9;                             -- afgerond
                  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;

            -- Lees alle veldwaarden
            IF v_ongeldig = 0
            THEN
               v_errormsg :=
                  'Fout bij converteren datumtijd [' || v_aanduiding || ']';
               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;

               IF v_datumtijd = NULL
               THEN
                  v_ongeldig := 0;
               END IF;
            END IF;

            IF v_ongeldig = 0
            THEN
               v_errormsg :=
                  'Fout bij aanvullen opmerking [' || v_aanduiding || ']';

               -- 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(COALESCE(v_mld_opdr_opmerking, 'QueQuLeQue'), 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 toevoegen opdracht status ['
                     || v_aanduiding
                     || ']';

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

                  v_count_import := v_count_import + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                     v_errormsg :=
                           v_errormsg
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog (
                        p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Fout bij toevoegen regel aan importtabel stch_imp_opdr_status_strukton.');
               END;
            ELSE
               IF v_status_code <> '40' AND v_status_code <> '45'
               THEN
                  fac.imp_writelog (p_import_key,
                                    'E',
                                    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!');
   END IF;

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

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

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (200);
   v_count_tot      NUMBER (10);
   v_count          NUMBER (10);
   v_mld_key        NUMBER (10) := 0;
   v_opdr_key       NUMBER (10) := 0;
   v_opdr_status    NUMBER (10) := 0;
   v_user_key       NUMBER (10) := 0;
   v_mld_typeopdr_key NUMBER (10);
   v_mld_kenmerk_key  NUMBER (10);
   v_mld_kenmerkopdr_key NUMBER (10);
   v_mld_srtkenmerk_key NUMBER (10);
   v_goedgekeurd NUMBER (10);
   v_opdrgoed_key NUMBER (10);
   
BEGIN
   -- Loop door alle geimporteerde opdrachtstatusberichten en verwerk deze.
   v_count_tot := 0;

   -- Stel de key in van het srtkenmerk 'Ref. Nr. Leverancier'. Hier wordt
   -- het nummer dat Strukton aan de call gegeven heeft geregistreerd.
   v_mld_srtkenmerk_key := 123;


   v_user_key := 10;  -- Strukton user

   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding :=
               '['
            || rec.mld_opdr_key
            || '|'
            || SUBSTR (rec.opmerking, 1, 100)
            || '] ';
         v_count_tot := v_count_tot + 1;
         v_count := 0;

         -- Key van melding/opdracht bepalen en externnr bij opdracht opslaan.
         IF (rec.mld_opdr_key IS NOT NULL)
         THEN
            v_errormsg := 'Fout bij 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 bij bepalen kenmerk extern nummer.';
            SELECT k.mld_kenmerk_key
              INTO v_mld_kenmerk_key
              FROM mld_kenmerk k
             WHERE k.mld_srtkenmerk_key = v_mld_srtkenmerk_key
               AND k.mld_typeopdr_key = v_mld_typeopdr_key;

            v_errormsg := 'Fout bij bepalen kenmerkopdracht extern nummer.';
            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;
             
           v_errormsg := 'Fout bij bepalen kenmerk goedgekeurd.';             
            SELECT k.mld_kenmerk_key
              INTO v_goedgekeurd
              FROM mld_kenmerk k
             WHERE k.mld_srtkenmerk_key = 1041  -- goedgekeurd
               AND k.mld_typeopdr_key = v_mld_typeopdr_key;
               
            v_errormsg := 'Fout bij bepalen kenmerkopdracht goedgekeurd.';
            SELECT max(ko.mld_kenmerkopdr_key)
              INTO v_opdrgoed_key
              FROM mld_kenmerkopdr ko
             WHERE  ko.mld_opdr_key =  v_opdr_key
               AND v_goedgekeurd = ko.mld_kenmerk_key;

            v_errormsg := 'Fout bij aanpassen extern nummer.';
            IF v_mld_kenmerkopdr_key IS NULL THEN
               -- kenmerk toevoegen
               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 aanpassen
               UPDATE mld_kenmerkopdr SET mld_kenmerkopdr_waarde = rec.extern_nummer WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
            END IF;

            v_errormsg := 'Fout bij bijwerken opdracht-opmerking.';

            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;

            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, v_user_key);       -- Facilitor
               ELSIF rec.status = 6 AND v_opdr_status = 5
               THEN
                  -- Meld de opdracht af als deze uitgegeven was
                  MLD.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor, eerst accepteren
                  MLD.setopdrachtstatus (v_opdr_key, 6, v_user_key);       -- Facilitor
               ELSIF rec.status = 6 AND v_opdr_status = 8
               THEN
                  -- Meld de opdracht af als deze geaccepteerd was
                  MLD.setopdrachtstatus (v_opdr_key, 6, v_user_key);       -- Facilitor
               ELSIF rec.status = 9 AND v_opdr_status = 6
               THEN
               -- De opdracht is in Focus uitgeprijst door Sitech, dus deze mag nu als goedgekeurd worden gezien.
                   IF v_opdrgoed_key IS NULL THEN
                     -- kenmerk toevoegen
                     INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde)
                     VALUES (v_goedgekeurd, v_opdr_key, '142');
                     fac.trackaction ('ORDUPD', v_opdr_key, NULL, SYSDATE, 'Goedgekeurd: --> Ja');
                   ELSE
                    -- kenmerk aanpassen
                   UPDATE mld_kenmerkopdr SET mld_kenmerkopdr_waarde = '142' WHERE mld_kenmerkopdr_key = v_opdrgoed_key;
                   fac.trackaction ('ORDUPD', v_opdr_key, NULL, SYSDATE, 'Goedgekeurd: --> Ja');
                   END IF;
                  -- Het totaalbedrag mag nu ook worden weggeschreven, dit is immers al goedgekeurd.
                  UPDATE mld_opdr SET mld_opdr_materiaal = rec.totaal,
                                      mld_opdr_kosten = rec.totaal
                                WHERE mld_opdr_key = v_opdr_key;
                 -- Meld de opdracht kostentechnisch gereed wanneer deze was afgemeld
                  MLD.setopdrachtstatus (v_opdr_key, 9, v_user_key);       -- Facilitor
               ELSIF rec.status = 1 AND v_opdr_status = 5
               THEN
                  -- Opdracht is afgewezen op het moment dat de opdracht nog niet geaccepteerd is.
                  MLD.setopdrachtstatus (v_opdr_key, 1, v_user_key);       -- Facilitor
                  MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
               ELSIF rec.status = 1 AND v_opdr_status = 8
               THEN
                  -- Opdracht is afgewezen op het moment dat de opdracht al geaccepteerd is.
                  MLD.setopdrachtstatus (v_opdr_key, 1, v_user_key);       -- Facilitor
                  MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
               END IF;

               IF rec.status = 6 AND v_opdr_status <> 6
               THEN
                  v_errormsg := 'Fout bij statusaanpassing melding.';
                  MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
               END IF;
            END IF;
         END IF;

         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.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Fout bij verwerken opdrachtstatusbericht.');
      END;
   END LOOP;

   COMMIT;
END;
/

-- Rapportage voor login
CREATE OR REPLACE VIEW STCH_V_RAP_NOLOGIN
(
   VOORNAAM,
   ACHTERNAAM,
   EMAIL,
   LAATSTE_LOGIN
)
AS
   SELECT pa.prs_perslid_voornaam,
          pa.prs_perslid_naam,
          pa.prs_perslid_email,
          pa.prs_perslid_login
     FROM prs_v_aanwezigperslid pa, prs_perslid p
    WHERE     pa.prs_perslid_login < SYSDATE - 30
          AND p.prs_perslid_key = pa.prs_perslid_key
          AND pa.prs_perslid_naam NOT LIKE '%INACTIEF%'
          AND p.prs_perslid_verwijder IS NULL;
          
-- Rapport met users die meldingen mogen inleggen (MLDUSE).          
CREATE OR REPLACE VIEW STCH_V_RAP_MLDUSERS
(
   prskey,
   achternaam,
   voornaam,
   email,
   login,
   functie_code
)
AS
     SELECT p.prs_perslid_key,
            p.prs_perslid_naam,
            p.prs_perslid_voornaam,
            p.prs_perslid_email,
            p.prs_perslid_oslogin,
            f.fac_functie_code
       FROM fac_groeprechten g,
            fac_gebruikersgroep gg,
            prs_v_aanwezigperslid p,
            fac_functie f,
            fac_groep gr
      WHERE     g.fac_groep_key = gr.fac_groep_key
            AND p.prs_perslid_key = gg.prs_perslid_key
            AND gg.fac_groep_key = gr.fac_groep_key
            AND f.fac_functie_key = g.fac_functie_key
            AND f.fac_functie_code = 'WEB_MLDUSE'
            AND p.prs_perslid_verwijder IS NULL
   GROUP BY (p.prs_perslid_key,
             p.prs_perslid_voornaam,
             p.prs_perslid_naam,
             p.prs_perslid_email,
             p.prs_perslid_oslogin,
             f.fac_functie_code)
   ORDER BY p.prs_perslid_naam;
   
--
--  GRAFISCH
--
CREATE OR REPLACE VIEW stch_v_thema_srtruimte
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT DISTINCT
          r.alg_ruimte_key,
          COALESCE (
             (SELECT fac_usrdata_omschr
                FROM fac_usrdata
               WHERE fac_usrtab_key = 221  -- omzettingstabel soortruimte naar omschrijving
                     AND alg_srtruimte_omschrijving LIKE
                           fac_usrdata_code || '%'),
             'onbekend'),
          NULL alg_srtruimte_key
     FROM alg_v_aanwezigruimte r, alg_srtruimte sr
    WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key;


-- views ter ondersteuning aan Facilitor graphics
-- sleepbaar thema om huurder aan thema te koppelen.
CREATE OR REPLACE VIEW stch_v_thema_ruimte_huurder (
   alg_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
             NULL, DECODE(verhuurbaar, 1, '[Leegstand]', '[Niet verhuurbaar]'),
             1, SUBSTR (y.sp, 1, 60),
             'Meer dan 1 huurder!'),
          DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
   FROM    (SELECT r.alg_ruimte_key, sr.prs_verhuurbaar verhuurbaar
            FROM alg_v_aanwezigruimte r, alg_srtruimte sr
            WHERE  r.alg_srtruimte_key = sr.alg_srtruimte_key) x
        LEFT JOIN
           (SELECT ra.alg_ruimte_key,
                   MIN (a.prs_afdeling_naam1) sp,
                   MIN (a.prs_afdeling_key) sp_key,
                   COUNT (ra.prs_afdeling_key) aantal
            FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
            WHERE ra.prs_afdeling_key = a.prs_afdeling_key
              AND a.prs_afdeling_naam <> 'Onbekend'
            GROUP BY ra.alg_ruimte_key) y
        ON x.alg_ruimte_key = y.alg_ruimte_key
   UNION ALL
   SELECT NULL, substr(a.prs_afdeling_naam1,1,60), a.prs_afdeling_key
   FROM prs_v_aanwezigafdeling a
   WHERE NOT EXISTS
            (SELECT ra.prs_afdeling_key
             FROM prs_ruimteafdeling ra
             WHERE ra.prs_ruimteafdeling_verwijder IS NULL
                   AND ra.prs_afdeling_key = a.prs_afdeling_key)
         AND a.prs_afdeling_naam <> 'Onbekend';

CREATE OR REPLACE TRIGGER stch_t_thema_ruimte_die_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON STCH_V_THEMA_RUIMTE_HUURDER
DECLARE
   verhuurbaar NUMBER;
BEGIN
   IF UPDATING           -- oude hard weggooien; dus DELETE (lekker opruimen)!
   THEN
      DELETE FROM prs_ruimteafdeling
      WHERE alg_ruimte_key = :new.alg_ruimte_key
            AND prs_afdeling_key <> :new.waarde_key;
   END IF;

   BEGIN
      SELECT prs_verhuurbaar
        INTO verhuurbaar
        FROM alg_ruimte r, alg_srtruimte sr
       WHERE r.alg_ruimte_key = :new.alg_ruimte_key
         AND r.alg_srtruimte_key = sr.alg_srtruimte_key;

      IF :new.waarde_key <> -1 AND verhuurbaar = 1
      THEN
         INSERT INTO prs_ruimteafdeling
        (
            alg_ruimte_key, prs_afdeling_key
        )
         VALUES (:new.alg_ruimte_key, :new.waarde_key);
      END IF;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX                                 -- was al aanwezig
      THEN
         NULL;
   END;
END;
/

-- views ter ondersteuning aan Facilitor graphics
-- Niet sleepbaar thema om huurder op hoogste afdelingsniveau te bekijken.
CREATE OR REPLACE VIEW stch_v_thema_ruimte_huurder1 (
   alg_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
             NULL, DECODE(verhuurbaar, 1, '[Leegstand]', '[Niet verhuurbaar]'),
             1, SUBSTR (y.sp, 1, 60),
             'Meer dan 1 huurder!'),
          DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
   FROM    (SELECT r.alg_ruimte_key, sr.prs_verhuurbaar verhuurbaar
            FROM alg_v_aanwezigruimte r, alg_srtruimte sr
            WHERE  r.alg_srtruimte_key = sr.alg_srtruimte_key) x
        LEFT JOIN
           (SELECT ra.alg_ruimte_key,
                   MIN (a.prs_afdeling_naam1) sp,
                   MIN (a.prs_afdeling_key) sp_key,
                   COUNT (ra.prs_afdeling_key) aantal
            FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a, prs_v_afdeling_boom ab
            WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
              AND ab.prs_afdeling_key1 = a.prs_afdeling_key
              AND a.prs_afdeling_naam <> 'Onbekend'
            GROUP BY ra.alg_ruimte_key) y
        ON x.alg_ruimte_key = y.alg_ruimte_key;

-- views ter ondersteuning aan Facilitor graphics
-- Niet sleepbaar thema om inzicht te krijgen in de leegstand situatie
CREATE OR REPLACE VIEW stch_v_thema_leegstand (
   alg_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
             NULL, DECODE(verhuurbaar, 1, '[Leegstand]', '[Niet verhuurbaar]'),
             '[Verhuurd]'),
          DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
   FROM    (SELECT r.alg_ruimte_key, sr.prs_verhuurbaar verhuurbaar
            FROM alg_v_aanwezigruimte r, alg_srtruimte sr
            WHERE  r.alg_srtruimte_key = sr.alg_srtruimte_key) x
        LEFT JOIN
           (SELECT ra.alg_ruimte_key,
                   MIN (a.prs_afdeling_naam1) sp,
                   MIN (a.prs_afdeling_key) sp_key,
                   COUNT (ra.prs_afdeling_key) aantal
            FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a, prs_v_afdeling_boom ab
            WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
              AND ab.prs_afdeling_key1 = a.prs_afdeling_key
              AND a.prs_afdeling_naam <> 'Onbekend'
            GROUP BY ra.alg_ruimte_key) y
        ON x.alg_ruimte_key = y.alg_ruimte_key;
        
-- HV views afkomstig uit AASI
CREATE OR REPLACE VIEW STCH_V_DWH_HV_FREEZE
(
   KWARTAAL,
   EIGENAAR,
   LOC_CODE,
   GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   RUIMTESOORT,
   CODE,
   OPP,
   TEKEN_OPP,
   HUURDER_NUMMER,
   HUURDER_NAAM,
   FDC,
   BEZETTING,
   TARIEF_HUUR,
   TARIEF_SERVICE,
   SK_ONDERHOUD,
   SK_UTILITY,
   SK_OVERIG,
   SK_KORTING
)
AS
   SELECT kwartaal,
          eigenaar,
          loc_code,
          geb_code,
          ver_code,
          ruimte_nr,
          ruimtesoort,
          code,
          opp,
          teken_opp,
          huurder_nummer,
          huurder_naam,
          fdc,
          bezetting,
          tarief_huur,
          tarief_service,
          sk_onderhoud,
          sk_utility,
          sk_overig,
          sk_korting
     FROM stch_hv_freeze
     WHERE loc_code = 'ON';
     
-- HV nu alleen nog met ONSITE gebouwen     
CREATE OR REPLACE VIEW STCH_V_HV_DETAIL
(
   EIGENAAR,
   LOC_CODE,
   GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   RUIMTESOORT,
   CODE,
   VERHUURBAAR,
   OPP,
   TEKEN_OPP,
   DSM_DERDEN,
   DEBITEUR,
   HUURDER_NUMMER,
   HUURDER_NAAM,
   FDC,
   BEZETTING,
   TARIEF_HUUR,
   TARIEF_SERVICE,
   TARIEF_SERVICE2,
   TARIEF_SERVICE3,
   TARIEF_SERVICE4,
   TARIEF_SERVICE5,
   TOTAAL_HUUR,
   TOTAAL_SERVICE,
   HIDE_F_PRS_AFDELING_KEY,
   REMA,
   FM
)
AS
SELECT * FROM
   ((SELECT a.eigenaar,
           a.alg_locatie_code,
           a.alg_gebouw_upper,
           a.alg_verdieping_code,
           a.alg_ruimte_nr,
           COALESCE (
              (SELECT fac_usrdata_omschr
                 FROM fac_usrdata
                WHERE fac_usrtab_key = 221
                      AND b.ruimtesoort LIKE fac_usrdata_code || '%'),
              'onbekend') ruimtesrt,
           b.ruimtesoort,
           verhuurbaar,
           a.opp * d.afd_bez / 100,
           a.opp teken_opp,
           prs_bedrijf_naam dsm_derden,
           debiteur debiteur,
           d.afd_naam,
           d.afd_oms,
           kostenpl fdc,
           d.afd_bez,
           huur m2_huur,
             COALESCE (service2, 0)
           + COALESCE (service3, 0)
           + COALESCE (service4, 0)
           + COALESCE (service5, 0)
              m2_service,
           service2 m2_service2,
           service3 m2_service3,
           service4 m2_service4,
           service5 m2_service5,
           ROUND (a.opp * (d.afd_bez / 100) * huur, 2) tot_huur,
           ROUND (
              a.opp * (d.afd_bez / 100)
              * (  COALESCE (service2, 0)
                 + COALESCE (service3, 0)
                 + COALESCE (service4, 0)
                 + COALESCE (service5, 0)),
              2)
              tot_service,
           d.prs_afdeling_key,
           (SELECT fac_usrdata_omschr rema
              FROM alg_onrgoedkenmerk ogk, fac_usrdata ud
             WHERE ogk.alg_kenmerk_key = 1060
                   AND fac.safe_to_number (ogk.alg_onrgoedkenmerk_waarde) =
                         ud.fac_usrdata_key
                   AND ogk.alg_onrgoed_key = a.alg_gebouw_key)
              rema,
           (SELECT fac_usrdata_omschr fm
              FROM alg_onrgoedkenmerk ogk, fac_usrdata ud
             WHERE ogk.alg_kenmerk_key = 1061
                   AND fac.safe_to_number (ogk.alg_onrgoedkenmerk_waarde) =
                         ud.fac_usrdata_key
                   AND ogk.alg_onrgoed_key = a.alg_gebouw_key)
              fm
      FROM (SELECT (SELECT COALESCE (fac_usrdata_omschr, 'Onbekend')
                      FROM alg_onrgoedkenmerk ok, fac_usrdata ud
                     WHERE     alg_kenmerk_key = 1063
                           AND ok.alg_onrgoed_niveau = 'G'
                           AND ok.alg_onrgoed_key = rg.alg_gebouw_key
                           AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) =
                                 ud.fac_usrdata_key)
                      eigenaar,
                   rg.alg_ruimte_key,
                   rg.alg_ruimte_nr,
                   rg.alg_verdieping_code,
                   rg.alg_gebouw_key,
                   rg.alg_gebouw_upper,
                   rg.alg_locatie_code,
                   rg.alg_ruimte_bruto_vloeropp opp,
                   srlg.alg_srtruimte_lg_prijs huur,
                   srlg.alg_srtruimte_lg_prijs2 service2,
                   srlg.alg_srtruimte_lg_prijs3 service3,
                   srlg.alg_srtruimte_lg_prijs4 service4,
                   srlg.alg_srtruimte_lg_prijs5 service5,
                   sr.prs_verhuurbaar verhuurbaar
              FROM (SELECT r.*,
                           (SELECT alg_srtruimte_lg_key
                              FROM alg_srtruimte_locatiegebouw srlg
                             WHERE srlg.alg_gebouw_key = r.alg_gebouw_key
                                   AND srlg.alg_srtruimte_key =
                                         r.alg_srtruimte_key)
                              alg_srtruimte_lg_key
                      FROM alg_v_ruimte_gegevens r) rg,
                   alg_srtruimte sr,
                   alg_srtruimte_locatiegebouw srlg
             WHERE rg.alg_srtruimte_key = sr.alg_srtruimte_key(+)
                   AND rg.alg_srtruimte_lg_key = srlg.alg_srtruimte_lg_key(+))
           a
           LEFT JOIN (SELECT r.alg_ruimte_key,
                             COALESCE (sr.alg_srtruimte_omschrijving, '-')
                                ruimtesoort
                        FROM alg_v_aanwezigruimte r, alg_srtruimte sr
                       WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key) b
              ON a.alg_ruimte_key = b.alg_ruimte_key
           LEFT JOIN                                 -- afdeling(en) op ruimte
                     (SELECT ra.alg_ruimte_key,
                             afd.prs_afdeling_naam afd_naam,
                             k.prs_kostenplaats_nr kostenpl,
                             afd.prs_afdeling_key,
                             afd.prs_afdeling_omschrijving afd_oms,
                             ra.prs_ruimteafdeling_bezetting afd_bez,
                             a1.prs_afdeling_naam debiteur,
                             b.prs_bedrijf_naam
                        FROM prs_v_aanwezigruimteafdeling ra,
                                prs_afdeling afd
                             LEFT JOIN
                                prs_kostenplaats k
                             ON afd.prs_kostenplaats_key =
                                   k.prs_kostenplaats_key,
                             prs_v_afdeling_boom ab,
                             prs_afdeling a1,
                             prs_bedrijf b
                       WHERE     ra.prs_afdeling_key = afd.prs_afdeling_key
                             AND afd.prs_afdeling_key = ab.prs_afdeling_key
                             AND ab.prs_afdeling_key1 = a1.prs_afdeling_key
                             AND ab.prs_bedrijf_key = b.prs_bedrijf_key
                      UNION ALL
                      SELECT x.alg_ruimte_key,
                             NULL afd_naam,
                             NULL afd_oms,
                             NULL kostenpl,
                             NULL prs_afdeling_key,
                             (100 - x.rui_bez) afd_bez,
                             NULL debiteur,
                             NULL prs_bedrijf_naam
                        FROM (  SELECT ra.alg_ruimte_key,
                                       SUM (ra.prs_ruimteafdeling_bezetting)
                                          rui_bez
                                  FROM prs_v_aanwezigruimteafdeling ra
                              GROUP BY ra.alg_ruimte_key) x
                       WHERE x.rui_bez < 100) d
              ON a.alg_ruimte_key = d.alg_ruimte_key)) sub
              WHERE sub.alg_locatie_code = 'ON'
              AND NOT EXISTS
              (SELECT 1
                 FROM alg_gebouw ag
                WHERE ag.alg_gebouw_upper = sub.alg_gebouw_upper
                  AND ag.alg_gebouw_verwijder IS NOT NULL);
     
CREATE OR REPLACE VIEW STCH_V_HV_ACTUAL
(
   EIGENAAR,
   LOC_CODE,
   GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   RUIMTESOORT,
   CODE,
   OPP,
   TEKEN_OPP,
   HUURDER_NUMMER,
   HUURDER_NAAM,
   FDC,
   BEZETTING,
   TARIEF_HUUR,
   TARIEF_SERVICE,
   SK_ONDERHOUD,
   SK_UTILITY,
   SK_OVERIG,
   SK_KORTING,
   TOTAAL_HUUR,
   TOTAAL_SERVICE,
   PRS_AFDELING_KEY
)
AS
   SELECT eigenaar,
          loc_code,
          geb_code,
          ver_code,
          ruimte_nr,
          ruimtesoort,
          code,
          opp,
          teken_opp,
          huurder_nummer,
          huurder_naam,
          fdc,
          bezetting,
          tarief_huur,
          tarief_service,
          tarief_service2,
          tarief_service3,
          tarief_service4,
          tarief_service5,
          totaal_huur,
          totaal_service,
          hide_f_prs_afdeling_key
     FROM stch_v_hv_detail
    WHERE verhuurbaar = 1;
    
CREATE OR REPLACE VIEW STCH_V_RAP_AUTH_BESTELLERS
(
   FCLT_F_NAAM,
   FCLT_F_KOSTENPLAATS,
   FCLT_F_MANDAAT,
   FCLT_F_PROFIEL,
   FCLT_F_AFDELING,
   TELEFOONNUMMER,
   EMAILADRES
)
AS
   SELECT prs_perslid_naam_full Naam,
          prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
             Kostenplaats,
          'Afdeling',
          g.fac_groep_omschrijving Profiel,
          prs_afdeling_omschrijving Afdeling,
          COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel) Telefoon,
          prs_perslid_email Mail
     FROM prs_v_perslid_fullnames pf,
          fac_gebruikersgroep fg,
          fac_groep g,
          prs_perslid p,
          prs_afdeling a,
          prs_kostenplaats k
    WHERE     pf.prs_perslid_key = fg.prs_perslid_key
          AND pf.prs_perslid_key = p.prs_perslid_key
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND g.fac_groep_key = fg.fac_groep_key
          AND fg.fac_groep_key IN (621, 681, 2)
          AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
   UNION ALL
   SELECT prs_perslid_naam_full Naam,
          prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
             Kostenplaats,
          'Gemandateerd',
          g.fac_groep_omschrijving Profiel,
          prs_afdeling_omschrijving Afdeling,
          COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel) Telefoon,
          prs_perslid_email Mail
     FROM prs_v_perslid_fullnames pf,
          fac_gebruikersgroep fg,
          fac_groep g,
          prs_perslid p,
          prs_afdeling a,
          prs_kostenplaats k,
          (SELECT p.prs_perslid_key, k.prs_kostenplaats_key
             FROM prs_perslidkostenplaats pk,
                  prs_perslid p,
                  prs_kostenplaats k
            WHERE     p.prs_perslid_key = pk.prs_perslid_key
                  AND k.prs_kostenplaats_key = pk.prs_kostenplaats_key
                  AND k.prs_kostenplaats_verwijder IS NULL
                  AND p.prs_perslid_verwijder IS NULL) m
    WHERE     pf.prs_perslid_key = fg.prs_perslid_key
          AND pf.prs_perslid_key = p.prs_perslid_key
          AND m.prs_perslid_key = p.prs_perslid_key
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND m.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND g.fac_groep_key = fg.fac_groep_key
          AND fg.fac_groep_key IN (621, 681, 2)
          AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
   ORDER BY 1,
            3,
            4,
            2; 
         
CREATE OR REPLACE VIEW STCH_V_RAP_HV_ACTUAL
(
   FCLT_F_EIGENAAR,
   FCLT_F_LOC_CODE,
   FCLT_F_GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   FCLT_F_RUIMTESOORT,
   FCLT_F_CODE,
   OPP,
   TEKEN_OPP,
   FCLT_F_HUURDER_NUMMER,
   FCLT_F_HUURDER_NAAM,
   FCLT_F_FDC,
   BEZETTING,
   TARIEF_HUUR,
   TARIEF_SERVICE,
   SK_ONDERHOUD,
   SK_UTILITY,
   SK_OVERIG,
   SK_KORTING,
   TOTAAL_HUUR,
   TOTAAL_SERVICE,
   HIDE_F_PRS_AFDELING_KEY
)
AS
   SELECT eigenaar,
          loc_code,
          geb_code,
          ver_code,
          ruimte_nr,
          ruimtesoort,
          code,
          opp,
          teken_opp,
          huurder_nummer,
          huurder_naam,
          fdc,
          bezetting,
          TO_CHAR (tarief_huur,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_onderhoud,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_utility,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_overig,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_korting,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          totaal_huur,
          totaal_service,
          prs_afdeling_key
     FROM stch_v_hv_actual;
     
CREATE OR REPLACE VIEW STCH_V_RAP_HV_AFD_TOTALEN
(
   FCLT_F_EIGENAAR,
   FCLT_F_FDC,
   FCLT_F_HOOFDHUURDER,
   TOTAAL_HUUR,
   TOTAAL_HUUR_MND,
   TOTAAL_SERVICE,
   TOTAAL_SERVICE_MND
)
AS
     SELECT v.eigenaar,
            v.fdc,
            a.prs_afdeling_omschrijving,
            ROUND (SUM (v.totaal_huur), 2),
            ROUND ( (SUM (v.totaal_huur) / 12), 2),
            ROUND (SUM (v.totaal_service), 2),
            ROUND ( (SUM (v.totaal_service) / 12), 2)
       FROM stch_v_hv_actual v, prs_v_afdeling_boom ab, prs_v_afdeling a
      WHERE v.prs_afdeling_key = ab.prs_afdeling_key
            AND ab.prs_afdeling_key1 = a.prs_afdeling_key
   GROUP BY v.eigenaar, v.fdc, a.prs_afdeling_omschrijving;
   
CREATE OR REPLACE VIEW STCH_V_RAP_HV_CHECK
(
   FCLT_F_EIGENAAR,
   FCLT_F_LOC_CODE,
   FCLT_F_GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   FCLT_F_RUIMTESOORT,
   FCLT_F_CODE,
   OPP,
   TEKEN_OPP,
   FCLT_F_HUURDER_NUMMER,
   FCLT_F_HUURDER_NAAM,
   FCLT_F_FDC,
   BEZETTING,
   FCLT_F_VERHUURBAAR,
   TARIEF_HUUR,
   SK_ONDERHOUD,
   SK_UTILITY,
   SK_OVERIG,
   SK_KORTING,
   TARIEF_SERVICE
)
AS
   SELECT eigenaar,
          loc_code,
          geb_code,
          ver_code,
          ruimte_nr,
          ruimtesoort,
          code,
          opp,
          teken_opp,
          huurder_nummer,
          huurder_naam,
          fdc,
          bezetting,
          DECODE (verhuurbaar, 1, 'Ja', 'Nee'),
          TO_CHAR (tarief_huur,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service2,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service3,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service4,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service5,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.''')
     FROM stch_v_hv_detail;
     
CREATE OR REPLACE VIEW STCH_V_RAP_HV_DOORBEL_DELTA
(
   FCLT_F_LOCATIE,
   FCLT_F_GEBOUW,
   FCLT_F_VERDIEPING,
   FCLT_F_RUIMTE,
   FCLT_F_HUURDER_NUMMER,
   FCLT_F_HUURDER_NAAM,
   M2_NU,
   M2_DELTA
)
AS
   (SELECT DISTINCT z.loc,
                    z.geb,
                    z.verd,
                    z.ruimte,
                    z.nr,
                    z.naam,
                    z.m2_actueel,
                    z.m2_verschil
      FROM (SELECT COALESCE (x.loc, y.loc) loc,
                   COALESCE (x.geb, y.geb) geb,
                   COALESCE (x.verd, y.verd) verd,
                   COALESCE (x.ruimte, y.ruimte) ruimte,
                   COALESCE (x.nr, y.nr) nr,
                   DECODE (x.naam,
                           COALESCE (y.naam, x.naam), x.naam,
                           '***GEWIJZIGD: ' || COALESCE (x.naam, ''))
                      naam,
                   x.m2 m2_actueel,
                   y.m2 m2_laatste,
                   (COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
              FROM    (SELECT loc_code loc,
                              geb_code geb,
                              ver_code verd,
                              ruimte_nr ruimte,
                              huurder_nummer nr,
                              huurder_naam naam,
                              opp m2
                         FROM stch_v_hv_actual) x
                   LEFT JOIN
                      (SELECT loc_code loc,
                              geb_code geb,
                              ver_code verd,
                              ruimte_nr ruimte,
                              huurder_nummer nr,
                              huurder_naam naam,
                              opp m2
                         FROM stch_hv_freeze
                        WHERE TO_CHAR (freeze_datum, 'yyyy-mm-dd') =
                                 (SELECT TO_CHAR (MAX (freeze_datum),
                                                  'yyyy-mm-dd')
                                    FROM stch_hv_freeze)) y
                   ON     x.loc = y.loc
                      AND x.geb = y.geb
                      AND x.verd = y.verd
                      AND x.ruimte = y.ruimte
                      AND x.nr = y.nr
            UNION
            SELECT COALESCE (x.loc, y.loc) loc,
                   COALESCE (x.geb, y.geb) geb,
                   COALESCE (x.verd, y.verd) verd,
                   COALESCE (x.ruimte, y.ruimte) ruimte,
                   COALESCE (x.nr, y.nr) nr,
                   DECODE (y.naam,
                           COALESCE (x.naam, y.naam), y.naam,
                           '***GEWIJZIGD: ' || COALESCE (x.naam, ''))
                      naam,
                   x.m2 m2_actueel,
                   y.m2 m2_laatste,
                   (COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
              FROM    (SELECT loc_code loc,
                              geb_code geb,
                              ver_code verd,
                              ruimte_nr ruimte,
                              huurder_nummer nr,
                              huurder_naam naam,
                              opp m2
                         FROM stch_v_hv_actual) x
                   RIGHT JOIN
                      (SELECT loc_code loc,
                              geb_code geb,
                              ver_code verd,
                              ruimte_nr ruimte,
                              huurder_nummer nr,
                              huurder_naam naam,
                              opp m2
                         FROM stch_hv_freeze
                        WHERE TO_CHAR (freeze_datum, 'yyyy-mm-dd') =
                                 (SELECT TO_CHAR (MAX (freeze_datum),
                                                  'yyyy-mm-dd')
                                    FROM stch_hv_freeze)) y
                   ON     x.loc = y.loc
                      AND x.geb = y.geb
                      AND x.verd = y.verd
                      AND x.ruimte = y.ruimte
                      AND x.nr = y.nr) z
     WHERE m2_verschil <> 0);
     
CREATE OR REPLACE VIEW STCH_V_RAP_HV_FREEZE
(
   FCLT_F_KWARTAAL,
   FCLT_F_EIGENAAR,
   FCLT_F_LOC_CODE,
   FCLT_F_GEB_CODE,
   VER_CODE,
   RUIMTE_NR,
   FCLT_F_RUIMTESOORT,
   FCLT_F_CODE,
   OPP,
   TEKEN_OPP,
   FCLT_F_HUURDER_NUMMER,
   FCLT_F_HUURDER_NAAM,
   FCLT_F_FDC,
   BEZETTING,
   TARIEF_HUUR,
   SK_ONDERHOUD,
   SK_UTILITY,
   SK_OVERIG,
   SK_KORTING,
   TARIEF_SERVICE
)
AS
   SELECT kwartaal,
          eigenaar,
          loc_code,
          geb_code,
          ver_code,
          ruimte_nr,
          ruimtesoort,
          code,
          opp,
          teken_opp,
          huurder_nummer,
          huurder_naam,
          fdc,
          bezetting,
          TO_CHAR (tarief_huur,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_onderhoud,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_utility,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_overig,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (sk_korting,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.'''),
          TO_CHAR (tarief_service,
                   '999990D99999',
                   'NLS_NUMERIC_CHARACTERS = '',.''')
     FROM stch_hv_freeze
    WHERE loc_code = 'ON';
     
CREATE OR REPLACE VIEW STCH_V_RAP_OFFERTE_STATUS
(
   OPDRACHT_KEY,
   OPDRACHT_NUMMER,
   OPDRACHT_REGIO,
   OPDRACHT_DISTRICT,
   OPDRACHT_LOCATIE_CODE,
   OPDRACHT_LOCATIE,
   OPDRACHT_LOCATIEPLAATS,
   FCLT_3D_LOCATIE_KEY,
   OPDRACHT_GEBOUWCODE,
   OPDRACHT_GEBOUW,
   OPDRACHT_VERDIEPING,
   OPDRACHT_RUIMTENR,
   OPDRACHT_RUIMTE,
   OPDRACHT_KOSTENPLAATS,
   OPDRACHT_KOSTENPLAATS_OMS,
   MELDING_KEY,
   OPDRACHT_TYPE,
   OPDRACHT_VOLGNUMMER,
   OPDRACHT_STATUS,
   OPDRACHT_DUUR_GEPLAND,
   OPDRACHT_DATUM,
   OPDRACHT_EINDDATUM,
   OPDRACHT_PLANDATUM,
   OPDRACHT_ACCEPTDATUM,
   OPDRACHT_AFGEMELD,
   OPDRACHT_DOORLOOPTIJD,
   OPDRACHT_ACCEPTTIJD,
   OPDRACHT_OMSCHRIJVING,
   OPDRACHT_OPMERKING,
   OPDRACHT_UITVOERENDE,
   OPDRACHT_BEHANDELAAR,
   OPDRACHT_CONTRACT,
   OPDRACHT_CONTRACT_VERSIE,
   OPDRACHT_CONTACTPERSOON,
   OPDRACHT_UREN,
   OPDRACHT_CORRECTIE,
   OPDRACHT_MATERIAAL,
   OPDRACHT_UURTARIEF,
   OPDRACHT_KOSTEN,
   OPDRACHT_GEBOUW_VERANTW_KEY,
   KOSTENSOORT,
   SUBPRODUCTGROEPGROEP,
   OFFERTE_STATUS
)
AS
   SELECT u."OPDRACHT_KEY",
          u."OPDRACHT_NUMMER",
          u."OPDRACHT_REGIO",
          u."OPDRACHT_DISTRICT",
          u."OPDRACHT_LOCATIE_CODE",
          u."OPDRACHT_LOCATIE",
          u."OPDRACHT_LOCATIEPLAATS",
          u."FCLT_3D_LOCATIE_KEY",
          u."OPDRACHT_GEBOUWCODE",
          u."OPDRACHT_GEBOUW",
          u."OPDRACHT_VERDIEPING",
          u."OPDRACHT_RUIMTENR",
          u."OPDRACHT_RUIMTE",
          u."OPDRACHT_KOSTENPLAATS",
          u."OPDRACHT_KOSTENPLAATS_OMS",
          u."MELDING_KEY",
          u."OPDRACHT_TYPE",
          u."OPDRACHT_VOLGNUMMER",
          u."OPDRACHT_STATUS",
          u."OPDRACHT_DUUR_GEPLAND",
          u."OPDRACHT_DATUM",
          u."OPDRACHT_EINDDATUM",
          u."OPDRACHT_PLANDATUM",
          u."OPDRACHT_ACCEPTDATUM",
          u."OPDRACHT_AFGEMELD",
          u."OPDRACHT_DOORLOOPTIJD",
          u."OPDRACHT_ACCEPTTIJD",
          u."OPDRACHT_OMSCHRIJVING",
          u."OPDRACHT_OPMERKING",
          u."OPDRACHT_UITVOERENDE",
          u."OPDRACHT_BEHANDELAAR",
          u."OPDRACHT_CONTRACT",
          u."OPDRACHT_CONTRACT_VERSIE",
          u."OPDRACHT_CONTACTPERSOON",
          u."OPDRACHT_UREN",
          u."OPDRACHT_CORRECTIE",
          u."OPDRACHT_MATERIAAL",
          u."OPDRACHT_UURTARIEF",
          u."OPDRACHT_KOSTEN",
          g.prs_perslid_key_verantw opdracht_gebouw_verantw_key,
          m.kostensoort kostensoort,
          subproductgroepgroep,
          DECODE (
             COALESCE (na.aantal, 0),
             1,
             'Offerte geaccepteerd',
             DECODE (COALESCE (nta.aantal, 0),
                     0, 'Niet opgelost',
                     'Offerte acceptatie'))
             offerte_status
     FROM mld_v_udr_opdracht u,
          alg_gebouw g,
          mld_v_udr_melding m,
          (  SELECT o.mld_melding_key, COUNT (o.mld_statusopdr_key) aantal
               FROM mld_opdr o
              WHERE o.mld_statusopdr_key = 6
                    AND o.mld_opdr_key >
                          COALESCE (
                             (SELECT MAX (o1.mld_opdr_key)
                                FROM mld_opdr o1, mld_typeopdr mo1
                               WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key
                                     AND mo1.mld_typeopdr_isofferte = 0
                                     AND o1.mld_melding_key = o.mld_melding_key),
                             0)
           GROUP BY o.mld_melding_key) nta,
          (  SELECT o.mld_melding_key, COUNT (o.mld_statusopdr_key) aantal
               FROM mld_opdr o
              WHERE o.mld_statusopdr_key = 9
                    AND o.mld_opdr_key >
                          COALESCE (
                             (SELECT MAX (o1.mld_opdr_key)
                                FROM mld_opdr o1, mld_typeopdr mo1
                               WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key
                                     AND mo1.mld_typeopdr_isofferte = 0
                                     AND o1.mld_melding_key = o.mld_melding_key),
                             0)
           GROUP BY o.mld_melding_key) na
    WHERE     u.opdracht_gebouwcode = g.alg_gebouw_code
          AND u.melding_key = m.melding_key
          AND u.melding_key = na.mld_melding_key(+)
          AND u.melding_key = nta.mld_melding_key(+)
          AND u.opdracht_type = 'RFQ';
          
CREATE OR REPLACE VIEW stch_v_rap_gebouwbezetting
(
    alg_gebouw_key,
    alg_gebouw_omschrijving,
    prs_afdeling_key,
    prs_afdeling_omschrijving,
    m2,
    totaal_m2,
    perc_v_totaal,
    perc_formatted
)
AS
      SELECT g.alg_gebouw_key,
             g.alg_gebouw_omschrijving,
             pa.prs_afdeling_key,
             pa.prs_afdeling_omschrijving,
             SUM (r.alg_ruimte_bruto_vloeropp)                              m2,
             x.bezet                                                        totaal_m2,
             ROUND ((SUM (r.alg_ruimte_bruto_vloeropp) / x.bezet) * 100, 2)    perc_v_totaal,
             ROUND (SUM (r.alg_ruimte_bruto_vloeropp) / x.bezet, 3)
        FROM prs_ruimteafdeling pr,
             prs_afdeling      pa,
             alg_ruimte        r,
             alg_verdieping    v,
             alg_gebouw        g,
             (  SELECT g.alg_gebouw_key, SUM (r.alg_ruimte_bruto_vloeropp) bezet
                  FROM prs_ruimteafdeling pr,
                       alg_ruimte      r,
                       alg_verdieping  v,
                       alg_gebouw      g
                 WHERE     pr.alg_ruimte_key = r.alg_ruimte_key
                       AND r.alg_verdieping_key = v.alg_verdieping_key
                       AND v.alg_gebouw_key = g.alg_gebouw_key
                       AND g.alg_gebouw_verwijder IS NULL
                       AND pr.prs_ruimteafdeling_verwijder IS NULL
                       AND r.alg_ruimte_bruto_vloeropp > 0
                       AND g.alg_gebouw_vervaldatum IS NULL
              GROUP BY g.alg_gebouw_key) x
       WHERE     pr.alg_ruimte_key = r.alg_ruimte_key
             AND pr.prs_afdeling_key = pa.prs_afdeling_key
             AND r.alg_verdieping_key = v.alg_verdieping_key
             AND v.alg_gebouw_key = g.alg_gebouw_key
             AND g.alg_gebouw_key = x.alg_gebouw_key
             AND g.alg_gebouw_verwijder IS NULL
             AND pr.prs_ruimteafdeling_verwijder IS NULL
    GROUP BY g.alg_gebouw_key,
             g.alg_gebouw_omschrijving,
             pa.prs_afdeling_key,
             pa.prs_afdeling_omschrijving,
             x.bezet;
          
CREATE OR REPLACE VIEW stch_v_rap_facturatie
(
    NUMMER,
    NUMMER_EXTERN,
    VERSIE,
    OMSCHRIJVING,
    GEBOUW_KEY,
    GEBOUW_OMSCHRIJVING,
    AFDELING_KEY,
    AFDELING_OMSHCRIJVING,
    KENMERK,
    WAARDE_C,
    WAARDE_N,
    WAARDE_D,
    WAARDE_X
)
AS
    SELECT DISTINCT c.cnt_contract_nummer_intern,
           c.cnt_contract_nummer,
           c.cnt_contract_versie,
           c.cnt_contract_omschrijving,
           g.alg_gebouw_key,
           g.alg_gebouw_omschrijving,
           c.prs_afdeling_key_eig,
           pa.prs_afdeling_omschrijving,
           COALESCE (
               lcl.x ('cnt_kenmerk_omschrijving',
                      k.cnt_kenmerk_key,
                      k.cnt_kenmerk_omschrijving),
               lcl.x ('cnt_srtkenmerk_omschrijving',
                      skm.cnt_srtkenmerk_key,
                      cnt_srtkenmerk_omschrijving))    kenmerk,
           CASE
               WHEN    skm.cnt_srtkenmerk_kenmerktype = 'R'
                    OR skm.cnt_srtkenmerk_kenmerktype = 'S'
               THEN
                   flx.getdomeinwaarde (skm.fac_kenmerkdomein_key,
                                        km.cnt_kenmerkcontract_waarde)
               WHEN    skm.cnt_srtkenmerk_kenmerktype = 'C'
                    OR skm.cnt_srtkenmerk_kenmerktype = 'F'
               THEN
                   km.cnt_kenmerkcontract_waarde
               ELSE
                   NULL
           END                                         waarde_c,
           CASE
               WHEN    skm.cnt_srtkenmerk_kenmerktype = 'N'
                    OR skm.cnt_srtkenmerk_kenmerktype = 'B'
               THEN
                   TO_NUMBER (km.cnt_kenmerkcontract_waarde)
               ELSE
                   TO_NUMBER (NULL)
           END                                         waarde_n,
           CASE
               WHEN skm.cnt_srtkenmerk_kenmerktype = 'D'
               THEN
                   TO_DATE (km.cnt_kenmerkcontract_waarde, 'DD-MM-YYYY')
               ELSE
                   TO_DATE (NULL)
           END                                         waarde_d,
           CASE
               WHEN skm.cnt_srtkenmerk_kenmerktype IN ('R', 'S')
               THEN
                   flx.getdomeinwaarde (skm.fac_kenmerkdomein_key,
                                        km.cnt_kenmerkcontract_waarde)
               ELSE
                   km.cnt_kenmerkcontract_waarde
           END                                         waarde_x
      FROM cnt_v_aanwezigcontract     c,
           cnt_contract_plaats        cp,
           cnt_kenmerkcontract        km,
           cnt_kenmerk                k,
           cnt_srtkenmerk             skm,
           alg_gebouw                 g,
           prs_afdeling               pa
     WHERE     c.ins_discipline_key = 3161 -- Facturatie
           AND c.cnt_contract_key = cp.cnt_contract_key
           AND cp.cnt_alg_plaats_code = 'G' -- Het gaat altijd om contracten op gebouwniveau
           AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
           AND c.prs_afdeling_key_eig = pa.prs_afdeling_key
           AND km.cnt_contract_key(+) = c.cnt_contract_key
           AND km.cnt_kenmerkcontract_verwijder IS NULL
           AND k.cnt_kenmerk_verwijder IS NULL
           AND k.cnt_kenmerk_key BETWEEN 242 AND 263 -- Kenmerken waar de bedragen in staan
           AND skm.cnt_srtkenmerk_verwijder IS NULL
           AND km.cnt_kenmerk_key(+) = k.cnt_kenmerk_key
           AND k.cnt_srtkenmerk_key = skm.cnt_srtkenmerk_key;
           
CREATE OR REPLACE VIEW stch_v_rap_gebouwkenmerk
(
    gebouw_key,
    kenmerk,
    kenmerk_waarde
)
AS
    SELECT g.alg_gebouw_key,
           ak.alg_kenmerk_omschrijving,
           fac.safe_to_number (oak.alg_onrgoedkenmerk_waarde)
      FROM alg_gebouw g, alg_kenmerk ak, alg_onrgoedkenmerk oak
     WHERE     oak.alg_kenmerk_key = ak.alg_kenmerk_key
           AND oak.alg_onrgoed_key = alg_gebouw_key
           AND oak.alg_onrgoed_niveau = 'G'
           AND ak.alg_kenmerk_key BETWEEN 1281 AND 1302;
           
CREATE OR REPLACE VIEW stch_v_rap_faturatieoverzicht
(
    bedrijf,
    bezettingspercentage,
    gebouw,
    kenmerk,
    kenmerk_waarde,
    soort_bedrag
)
AS
    SELECT gb.prs_afdeling_omschrijving,
           gb.perc_v_totaal,
           gb.alg_gebouw_omschrijving,
           gk.kenmerk,
           COALESCE (f.waarde_n, (gk.kenmerk_waarde * gb.perc_formatted))
               bedrag,
           CASE
               WHEN f.waarde_n IS NOT NULL THEN 'Contract'
               ELSE 'Standaard'
           END
               CASE
      FROM stch_v_rap_facturatie       f,
           stch_v_rap_gebouwkenmerk    gk,
           stch_v_rap_gebouwbezetting  gb
     WHERE     gb.alg_gebouw_key = gk.gebouw_key
           AND gb.alg_gebouw_key = f.gebouw_key(+)
           AND gb.prs_afdeling_key = f.afdeling_key(+)
           AND gk.kenmerk = f.kenmerk(+);

-- Taken rapportage
CREATE OR REPLACE VIEW stch_v_rap_deelinspect
(
   deel_key,
   discipline,
   soort,
   groep,
   soortcode,
   omschrijving,
   plaatseigenaar,
   plaatseigenaartype,
   plaatsaanduiding,
   eigenaar,
   eigenaar_key,
   opmerking,
   regio,
   district,
   locatie_code,
   locatie_omschrijving,
   locatie_plaats,
   gebouwcode,
   gebouw,
   terreinsectorcode,
   terreinsector,
   verdiepingcode,
   ruimtenr,
   werkplekvolgnr,
   werkplek,
   uitleenbaar,
   uitgeleend,
   res_opmerking,
   beheerder,
   vervaldatum,
   actief,
   aantal,
   state,
   statedate,
   [REDACTED],
   [REDACTED],
   fclt_3d_locatie_key,
   ins_deelsrtcontrole_key,
   ins_srtcontrole_key,
   srtcontrole_omschrijving,
   ins_deelsrtcontrole_datum,
   controlemode_omschrijving,
   ins_deelsrtcontrole_opmerking,
   perslid,
   ins_deelsrtcontrole_datum_org,
   ins_deelsrtcontrole_plandatum,
   deelsrtcontrole_status
)
AS
   SELECT deel_key,
          discipline,
          soort,
          groep,
          soortcode,
          omschrijving,
          plaatseigenaar,
          plaatseigenaartype,
          plaatsaanduiding,
          eigenaar,
          eigenaar_key,
          opmerking,
          regio,
          district,
          locatie_code,
          locatie_omschrijving,
          locatie_plaats,
          gebouwcode,
          gebouw,
          terreinsectorcode,
          terreinsector,
          verdiepingcode,
          ruimtenr,
          werkplekvolgnr,
          werkplek,
          uitleenbaar,
          uitgeleend,
          res_opmerking,
          beheerder,
          vervaldatum,
          actief,
          aantal,
          state,
          statedate,
          fclt_3d_discipline_key,
          fclt_3d_afdeling_key,
          fclt_3d_locatie_key,
          ins_deelsrtcontrole_key,
          ins_srtcontrole_key,
          srtcontrole_omschrijving,
          ins_deelsrtcontrole_datum,
          controlemode_omschrijving,
          ins_deelsrtcontrole_opmerking,
          perslid,
          ins_deelsrtcontrole_datum_org,
          ins_deelsrtcontrole_plandatum,
          deelsrtcontrole_status
     FROM ins_v_udr_deelinspect
   UNION ALL
   SELECT ud.deel_key,
          ud.discipline,
          ud.soort,
          ud.groep,
          ud.soortcode,
          ud.omschrijving,
          ud.plaatseigenaar,
          ud.plaatseigenaartype,
          ud.plaatsaanduiding,
          ud.eigenaar,
          ud.eigenaar_key,
          ud.opmerking,
          ud.regio,
          ud.district,
          ud.locatie_code,
          ud.locatie_omschrijving,
          ud.locatie_plaats,
          ud.gebouwcode,
          ud.gebouw,
          ud.terreinsectorcode,
          ud.terreinsector,
          ud.verdiepingcode,
          ud.ruimtenr,
          ud.werkplekvolgnr,
          ud.werkplek,
          ud.uitleenbaar,
          ud.uitgeleend,
          ud.res_opmerking,
          ud.beheerder,
          ud.vervaldatum,
          ud.actief,
          ud.aantal,
          ud.state,
          ud.statedate,
          ud.fclt_3d_discipline_key,
          ud.fclt_3d_afdeling_key,
          ud.fclt_3d_locatie_key,
          NULL,
          sc.ins_srtcontrole_key,
          sc.ins_srtcontrole_omschrijving,
          NULL,
          'Nog niet gepland',
          NULL,
          NULL,
          NULL,
          fac.nextcyclusdatedeel (d.ins_deel_key, sc.ins_srtcontrole_key),
          NULL
     FROM ins_v_udr_deel ud,
          ins_deel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          ins_tab_discipline disc,
          ins_srtcontrole sc
    WHERE     d.ins_deel_key = ud.deel_key
          AND sd.ins_srtdeel_key = d.ins_srtdeel_key
          AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
          AND disc.ins_discipline_key = sg.ins_discipline_key
          AND ( (sd.ins_srtdeel_key = sc.ins_srtinstallatie_key
                 AND ins_srtcontrole_niveau = 'S')
               OR (sg.ins_srtgroep_key = sc.ins_srtinstallatie_key
                   AND ins_srtcontrole_niveau = 'G')
               OR (disc.ins_discipline_key = sc.ins_srtinstallatie_key
                   AND ins_srtcontrole_niveau = 'D'));           


-- Notificaties obv periodieke taken naar objectbeheerders
CREATE OR REPLACE VIEW stch_v_rap_ctrbeh
(
   plaats,
   gebouw,
   verdieping,
   ruimte,
   discipline,
   objectgroep,
   objectsoort,
   deel_key,
   objectomschrijving,
   plandatum,
   extra_key,
   taakomschrijving,
   status,
   beheerder_key,
   beheerder_email
)
AS
     SELECT di.locatie_plaats,
            di.gebouw,
            di.verdiepingcode,
            di.ruimtenr,
            di.discipline,
            di.groep,
            di.soort,
            di.deel_key,
            di.omschrijving,
            TRUNC (di.ins_deelsrtcontrole_plandatum),
            dsc.ins_deelsrtcontrole_key,
            di.srtcontrole_omschrijving,
            di.deelsrtcontrole_status,
            p.prs_perslid_key,
            p.prs_perslid_email
       FROM stch_v_rap_deelinspect di,
            ins_deel d,
            prs_perslid p,
            ins_deelsrtcontrole dsc,
            ins_tab_discipline disc,
            fac_usrtab ut,
            fac_usrdata ud
      WHERE     di.ins_deelsrtcontrole_datum IS NULL
            AND (di.vervaldatum > SYSDATE OR di.vervaldatum IS NULL)
            AND d.prs_perslid_key_beh = p.prs_perslid_key(+)
            AND d.ins_deel_key = di.deel_key
            AND dsc.ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key
            AND d.ins_discipline_key = disc.ins_discipline_key
            AND UPPER (ut.fac_usrtab_naam) = 'NOTI_CUST11'
            AND ut.fac_usrtab_verwijder IS NULL
            AND ut.fac_usrtab_key = ud.fac_usrtab_key
            AND fac.safe_to_number (ud.fac_usrdata_code) = d.ins_discipline_key
   ORDER BY di.ins_deelsrtcontrole_datum,
            TRUNC (di.ins_deelsrtcontrole_plandatum),
            di.controlemode_omschrijving,
            p.prs_perslid_email;
            
-- STCH#87363 QR-code rapportage
CREATE OR REPLACE VIEW stch_v_ins_qrc_mld
AS
   SELECT i.ins_deel_omschrijving hide_f_sort,
          l.alg_locatie_code||' '||l.alg_locatie_omschrijving fclt_f_locatie,
          o.alg_gebouw_omschrijving fclt_f_gebouw,
          o.alg_plaatsaanduiding fclt_f_plaats,
          d.ins_discipline_omschrijving fclt_f_discipline,
          g.ins_srtgroep_omschrijving fclt_f_objectgroep,
          s.ins_srtdeel_omschrijving fclt_f_objectsoort,
          i.ins_deel_omschrijving fclt_f_identificatie,
          d.ins_discipline_omschrijving||' / '||sm.mld_stdmelding_omschrijving fclt_f_melding,
          sm.mld_stdmelding_key mld_key,
          i.ins_deel_key,
          s.ins_srtdeel_key,
          o.alg_gebouw_code,
          o.alg_verdieping_code,
          i.ins_discipline_key fclt_3d_discipline_key,
          l.alg_locatie_key fclt_3d_locatie_key,
          i.ins_alg_ruimte_type,
          i.ins_alg_ruimte_key,
          b.fac_bookmark_id hide_f_bookmark_id
     FROM ins_deel i,
          ins_v_alg_overzicht o,
          ins_srtdeel s,
          ins_srtgroep g,
          ins_discipline d,
          alg_locatie l,
          fac_bookmark b,
          mld_stdmelding sm,
          mld_stdmelding_srtinst si
    WHERE b.fac_bookmark_naam = 'QRC_MELDING'
      AND (b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE)
      AND ins_deel_verwijder IS NULL
      AND i.ins_deel_module = 'INS'
      AND i.ins_deel_parent_key IS NULL
      AND s.ins_srtdeel_key = i.ins_srtdeel_key
      AND g.ins_srtgroep_key = s.ins_srtgroep_key
      AND d.ins_discipline_key = g.ins_discipline_key
      AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
      AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
      AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
      AND o.alg_locatie_key = i.ins_alg_locatie_key
      AND i.ins_alg_locatie_key = l.alg_locatie_key
      AND sm.mld_stdmelding_key = si.mld_stdmelding_key
      AND si.ins_srtinstallatie_key = DECODE(si.ins_srtinstallatie_niveau,
                                      'S', i.ins_srtdeel_key,
                                      'G', s.ins_srtgroep_key,
                                      'D', g.ins_discipline_key);

--Notificaties obv periodieke taken naar objectbeheerders
CREATE OR REPLACE VIEW stch_v_noti_ctrbeh_wk
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT DISTINCT
          'CUST11' AS code,
          NULL,
          beheerder_key,
          'Herinnering: '
          || discipline
          || ' - '
          || objectgroep
          || ' - '
          || taakomschrijving
          || ', dient uiterlijk '
          || TO_CHAR (plandatum, 'DD-MM-YYYY')
          || ' te worden afgehandeld',
          (SELECT fac_usrrap_key
             FROM fac_usrrap
            WHERE UPPER (fac_usrrap_code) = 'STCH_V_RAP_CTRBEH')
             rapportnr,
          extra_key
     FROM stch_v_rap_ctrbeh
    WHERE TRUNC (plandatum) = TRUNC (SYSDATE) + 7;


-- Opdracht ook via mail naar interne mailbox wanneer verstuurd aan een technische leverancier.
CREATE OR REPLACE VIEW stch_v_noti_opdracht
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT 'ORDSNT', -- Opdracht verzonden naar leverancier
          NULL,
          NULL,
          'Opdracht met nummer '|| TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr || 'is verzonden naar ' || b.prs_bedrijf_naam,
          o.mld_opdr_key,
          NULL,
          NULL,
          'werkvergunningen.facility@sitech.nl',
          NULL,
          NULL
     FROM mld_opdr o, fac_tracking t, prs_bedrijf b, fac_usrdata f
     WHERE o.mld_opdr_key = t.fac_tracking_refkey
         AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
         AND f.fac_usrtab_key = 661
         AND f.fac_usrdata_code = b.prs_bedrijf_key
         AND t.fac_srtnotificatie_key = 131 -- ORDSNT
         AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                                   - fac_notificatie_job_interval
                                                     / 24
                                              FROM fac_notificatie_job
                                             WHERE UPPER(fac_notificatie_job_view) =
                                                      'STCH_V_NOTI_OPDRACHT')
                                       AND  (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE UPPER(fac_notificatie_job_view) =
                                                       'STCH_V_NOTI_OPDRACHT');

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