--
-- $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;
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 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_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,
   periode,
   aanvrager,
   organisatie,
   categorie,
   opdracht_gereeddatum,
   kostensoortgroep,
   kostensoortnr,
   kostensoort,
   melding,
   meldingsgroep,
   kostenplaatsnummer,
   rema_budget
)
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,
          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,
          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 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 = 1021))
             rema_budget
     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
    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');

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;
          
CREATE OR REPLACE VIEW stch_v_rap_sapchecklist
(
   MLD_OPDR_KEY,
   CONTRACT_NUMMER,
   EXTERN_NUMMER,
   UITVOERENDE,
   BEDRAG,
   KOSTENPLAATS,
   KOSTENPLAATS_CODE,
   OPDRACHTNR,
   GOEDGEKEURD,
   OPDRACHT_AFGEROND
)
AS
   SELECT mo.mld_opdr_key,
          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,
          DECODE (sub.mld_kenmerkopdr_waarde,
                  '142', 'Ja',
                  '143', 'Nee',
                  'Leeg'),
          mld.getopdrachtstatusdate (mo.mld_opdr_key, 9)
     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,
          (SELECT mld_opdr_key, mld_kenmerkopdr_waarde
             FROM mld_kenmerkopdr
            WHERE mld_kenmerk_key IN (1621, 1641, 1642)) sub
    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 = sub.mld_opdr_key(+)
          AND TRUNC (mld.getopdrachtstatusdate (mo.mld_opdr_key, 9)) >
                TRUNC (SYSDATE - 14)
          AND mo.mld_opdr_kosten IS NOT NULL
          AND mo.mld_opdr_kosten NOT LIKE '0';

CREATE OR REPLACE VIEW stch_v_export_sap
(
   result,
   result_order
)
AS
   SELECT    '"PO Nummer"'
          || ';"opdrachtnummer"'
          || ';"kostenplaats"'
          || ';"kostenplaatscode"'          
          || ';"bedrag"'
          || ';"uitvoerende"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || extern_nummer
          || '";"'
          || opdrachtnr
          || '";"'
          || kostenplaats
          || '";"'
          || kostenplaats_code
          || '";"'
          || bedrag
          || '";"'
          || uitvoerende
          || '"',
          1
     FROM stch_v_rap_opdrkosten;
      
CREATE OR REPLACE VIEW stch_v_export_sap_xml
(
   result,
   result_order
)
AS
   SELECT '<?xml version="1.0" encoding="UTF-8"?>', 0 FROM DUAL
   UNION ALL
   SELECT '<ns0:MT_SES xmlns:ns0="http://sitech.nl/FACILITOR/ServiceEntrySheet">', 1 FROM DUAL
   UNION ALL
   SELECT    '<SES>'
          || '<Ordernr>'
          || SUBSTR (extern_nummer, 1, 10)
          || '</Ordernr>'
          || '<Order_pos>'
          || SUBSTR (contract_nummer, -4, INSTR (contract_nummer, '-') - 1)
          || '</Order_pos>'
          || '<Text_hdr>'
          || uitvoerende
          || '</Text_hdr>'
          || '<Text_line>'
          || kostenplaats_code
          || '_'
          || opdrachtnr
          || '</Text_line>'
          || '<Quantity>1</Quantity>'
          || '<Unit>AU</Unit>'
          || '<Price_gross>'
          || bedrag
          || '</Price_gross>'
          || '</SES>',
          2
    FROM stch_v_rap_opdrkosten
    UNION ALL
    SELECT '</ns0:MT_SES>', 3 FROM DUAL;
    
-- Rapport voor het controleren van keyusers        
CREATE OR REPLACE VIEW stch_v_rap_keyusers
(
   perslid_key,
   naam,
   keyuser,
   laatste_login
)
AS
   SELECT pf.prs_perslid_key,
          pf.prs_perslid_naam_full,
          DECODE (fl.prs_perslid_key, NULL, 'Nee', 'Ja'),
          p.prs_perslid_login
     FROM fac_v_lcrap_key_stats fl, prs_v_perslid_fullnames pf, prs_perslid p
    WHERE pf.prs_perslid_key = p.prs_perslid_key
          AND pf.prs_perslid_key = fl.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);

   -- 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);
         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
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF     UPPER (TRIM (v_mld_opdr_key_tekst)) = 'REFERENCEID'
               AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
               AND UPPER (TRIM (v_status_code)) = 'TYPEID'
               AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
               AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Fout 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
-- For future use
--                  WHEN v_status_code = '40'                     -- uitgeprijst
--                  THEN
--                     v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '70'
                  THEN
                     v_status := 1;                             -- geannuleerd
                  WHEN v_status_code = '80'
                  THEN
                     v_status := 1;                               -- afgewezen
                  ELSE
                     v_status := NULL;
                     v_ongeldig := 1;   -- nog te bezien.
               END CASE;
            END IF;

            -- 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)
                      VALUES (v_mld_opdr_key,
                              v_extern_nummer,
                              v_status,
                              v_datumtijd,
                              v_opmerking);

                  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
          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);
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 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 = 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';

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