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

DEFINE thisfile = 'SKHF.SQL'
DEFINE dbuser   = 'SKHF'

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

-------------------------------
--- DOMEIN-VIEWS --------------
-------------------------------

CREATE OR REPLACE VIEW skhf_v_bedrijven
(
    PRS_BEDRIJF_KEY,
    PRS_BEDRIJF_NAAM,
    PRS_BEDRIJF_ACTIEF,
    PRS_BEDRIJF_VERWIJDER
)
AS
SELECT prs_bedrijf_key,
       prs_bedrijf_naam,
       CASE
           WHEN     prs_bedrijf_leverancier IS NULL
                AND prs_bedrijf_uitvoerende IS NULL
                AND prs_bedrijf_contract IS NULL
           THEN
               'na'                                    -- geen actieve relatie
           ELSE
               'a'                                     -- actieve relatie
       END    prs_bedrijf_actief,
       prs_bedrijf_verwijder
  FROM prs_bedrijf
 WHERE prs_bedrijf_intern IS NULL;


CREATE OR REPLACE VIEW skhf_v_kostenplaatsen
(
    PRS_KOSTENPLAATS_KEY,
    PRS_KOSTENPLAATS_OMSCHRIJVING,
    PRS_KOSTENPLAATS_VERWIJDER
)
AS
    SELECT k.prs_kostenplaats_key,
           CASE
               WHEN (   prs_kostenplaats_verwijder IS NOT NULL
                     OR (    prs_kostenplaats_eind IS NOT NULL
                         AND prs_kostenplaats_eind < TRUNC (SYSDATE)))
               THEN
                   k.prs_kostenplaats_nr || ' - ' || k.prs_kostenplaats_omschrijving || ' - oud!'
               ELSE
                   k.prs_kostenplaats_nr || ' - ' || k.prs_kostenplaats_omschrijving
                   END
                   prs_kostenplaats_omschrijving,
           k.prs_kostenplaats_verwijder
      FROM prs_kostenplaats k ;
    
CREATE OR REPLACE VIEW skhf_v_personenlijst
(
    PRS_PERSLID_KEY,
    NAAM,
    PERSONEELSNUMMER,
    EMAIL,
    PRS_PERSLID_VERWIJDER
)
AS
    SELECT
       p.prs_perslid_key,
       CASE WHEN p.prs_perslid_tussenvoegsel IS NULL
            THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')' 
            ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
            END
         naam,
       p.prs_perslid_nr,
       p.prs_perslid_email,
       p.prs_perslid_verwijder
    FROM
    prs_perslid    p,
    prs_srtperslid sp,
    prs_v_afdeling a,
    prs_bedrijf    b
    WHERE
    p.prs_afdeling_key = a.prs_afdeling_key
    AND a.prs_bedrijf_key = b.prs_bedrijf_key  
    AND b.prs_bedrijf_key = 21  --  bedrijfs_key SKH
    AND p.prs_srtperslid_key = sp.prs_srtperslid_key
    ORDER BY sp.prs_srtperslid_omschrijving DESC, p.prs_perslid_voornaam, p.prs_perslid_naam
    ;

CREATE OR REPLACE VIEW skhf_v_locatielijst
(
    ALG_LOCATIE_KEY,
    ALG_LOCATIE_NAAM,
    ALG_LOCATIE_CODE
)
AS
    SELECT
       l.alg_locatie_key,
       l.alg_locatie_omschrijving || ' ' || l.alg_locatie_adres
        alg_locatie_naam,
       l.alg_locatie_code
    FROM
    alg_locatie    l
    WHERE
    COALESCE(l.alg_locatie_verwijder, l.alg_locatie_vervaldatum, TRUNC(SYSDATE)) >= TRUNC(SYSDATE)
    ORDER BY l.alg_locatie_omschrijving
    ;

CREATE OR REPLACE VIEW skhf_v_it_simkaarten
(
    INS_DEEL_KEY,
    SIMKAART
)
AS
SELECT
    v.ins_deel_key,
    v.ins_deel_upper
     simkaart
FROM ins_v_deel_gegevens v, ins_deel d 
WHERE  v.ins_discipline_key = 82 -- IT-Intern
   AND v.ins_srtdeel_key = 21    -- SIM-kaarten
   AND v.ins_deel_key = d.ins_deel_key
   AND d.ins_deel_verwijder IS NULL
   AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) ) ;

----------------------------------------
--- AUTOCAD-THEMA'S en LABELS ----------
----------------------------------------


-------------------------------
--- PROCEDURES  ---------------
-------------------------------

-- Kinderopvang Huizen registreert op de ruimtes in haar Facilitor vastgoed de M2 en de M2 bestemd voor LRK wn wettelijke toegestane hoeveelheid kindplekken
--- Op locatieniveau wordt de totalisatie gedaan mbv exportfunctie locatie_m2
----- Locatiekaart, waar ook locatieleiders rechten op hebben, is in hun Facilitor de bron van vele relevante gegevens.
----- Verdere rapportage die voor bijvoorbeeld GGD moet verstrekken, dienen zelf op basis UDR gemaakt te worden. 

-- Hulpview bij exportfunctie LOCATIE_M2
CREATE OR REPLACE VIEW SKHF_V_LOCATIE_M2
(
    ALG_LOCATIE_KEY,
    ALG_LOCATIE_OMSCHRIJVING,
    ALG_RUIMTE_KEY,
    ALG_RUIMTE_NR,
    ALG_RUIMTE_OMSCHRIJVING,
    ALG_RUIMTE_BRUTO_VLOEROPP,
    ALG_SRTRUIMTE_UPPER,
    ALG_SRTRUIMTE_CODE,
    RUIMTE_M2_NETTO,
    RUIMTE_M2_NETTO_LRK,
    RUIMTE_KINDPLAATSEN_TOT, -- op basis alle/totaal m2
    RUIMTE_KINDPLAATSEN_LRK  -- op basis opvang / LRK - ruimtes
)
AS
    SELECT l.alg_locatie_key,
           l.alg_locatie_omschrijving,
           r.alg_ruimte_key,
           r.alg_ruimte_nr,
           r.alg_ruimte_omschrijving,
           r.alg_ruimte_bruto_vloeropp,
           sr.alg_srtruimte_upper,
           sr.alg_srtruimte_code,
           fac.safe_to_number(FLX.getflex ('ALG', 1105, r.alg_ruimte_key, 'R'))
            ruimte_M2_netto,
           fac.safe_to_number(DECODE (sr.alg_srtruimte_code, 'LRK', FLX.getflex ('ALG', 1105, r.alg_ruimte_key, 'R'), NULL))  
            ruimte_M2_netto_lrk,
           fac.safe_to_number(FLX.getflex ('ALG', 1107, r.alg_ruimte_key, 'R'))
            ruimte_kindplaatsen_tot,
           fac.safe_to_number(DECODE (sr.alg_srtruimte_code, 'LRK', FLX.getflex ('ALG', 1107, r.alg_ruimte_key, 'R'), NULL))  
            ruimte_kindplaatsen_lrk
      FROM alg_ruimte      r,
           alg_verdieping  v,
           alg_gebouw      g,
           alg_locatie     l,
           alg_srtruimte   sr
     WHERE     r.alg_verdieping_key = v.alg_verdieping_key
           AND v.alg_gebouw_key = g.alg_gebouw_key
           AND g.alg_locatie_key = l.alg_locatie_key
           AND r.alg_srtruimte_key = sr.alg_srtruimte_key
           AND l.alg_locatie_verwijder IS NULL AND g.alg_gebouw_verwijder IS NULL AND v.alg_verdieping_verwijder IS NULL AND r.alg_ruimte_verwijder IS NULL
           AND (
                l.alg_locatie_vervaldatum IS NULL 
                OR 
                l.alg_locatie_vervaldatum > TRUNC(SYSDATE)
               )           
           AND (
                g.alg_gebouw_vervaldatum IS NULL 
                OR 
                g.alg_gebouw_vervaldatum > TRUNC(SYSDATE)
               )
;

-- Exportfunctie LOCATIE_M2
CREATE OR REPLACE VIEW skhf_v_export_locatie_m2
(
    result,
    result_order
)
AS
    SELECT    '"SYNC - Locatie en m2"'
           || ';"Bijgewerkt"',
           0
      FROM DUAL
     UNION
     SELECT 'ERROR: Datum '|| TO_CHAR(imp_log_datum) || ' - ' || imp_log_omschrijving || ' - ' || imp_log_hint,
            1
      FROM imp_log
     WHERE imp_log_applicatie = 'LOCATIE_M2' ;

CREATE OR REPLACE PROCEDURE skhf_select_locatie_m2
(
    p_applname   IN VARCHAR2,
    p_applrun    IN VARCHAR2
)
AS

    CURSOR c
    IS
    SELECT l.alg_locatie_key,
           COALESCE(FLX.getflex ('ALG',
                    1121,
                    l.alg_locatie_key,
                    'L'), NULL)
             locatie_M2_netto_totaal,
           COALESCE(FLX.getflex ('ALG',
                    1120,
                    l.alg_locatie_key,
                    'L'), NULL)
             locatie_M2_LRK,
           COALESCE(FLX.getflex ('ALG',
                    1140,
                    l.alg_locatie_key,
                    'L'), NULL)
             locatie_kindplaatsen_tot,
           COALESCE(FLX.getflex ('ALG',
                    1160,
                    l.alg_locatie_key,
                    'L'), NULL)
             locatie_kindplaatsen_lrk,             
           COALESCE(FLX.getflex ('ALG',
                    1120,
                    l.alg_locatie_key,
                    'L'), NULL)
             locatie_m2_update -- laatste update_datum uit exportfunctie
      FROM alg_ruimte      r,
           alg_verdieping  v,
           alg_gebouw      g,
           alg_locatie     l
     WHERE     r.alg_verdieping_key = v.alg_verdieping_key
           AND v.alg_gebouw_key = g.alg_gebouw_key
           AND g.alg_locatie_key = l.alg_locatie_key
           AND l.alg_locatie_verwijder IS NULL AND g.alg_gebouw_verwijder IS NULL AND v.alg_verdieping_verwijder IS NULL AND r.alg_ruimte_verwijder IS NULL
           AND (
                 l.alg_locatie_vervaldatum IS NULL 
                 OR 
                 l.alg_locatie_vervaldatum > TRUNC(SYSDATE)
               )
           AND (
                 g.alg_gebouw_vervaldatum IS NULL 
                 OR 
                 g.alg_gebouw_vervaldatum > TRUNC(SYSDATE)
               )
  GROUP BY l.alg_locatie_key ;
      
    v_errormsg                      VARCHAR2 (1000);
    v_errorhint                     VARCHAR2 (1000);
    oracle_err_mes                  VARCHAR2 (200);
    oracle_err_num                  NUMBER;
    currentversion                  fac_module.fac_module_version%TYPE;
    v_aanduiding                    VARCHAR2 (1000);
    v_count                         NUMBER;

    v_locatie_m2_netto_totaal       NUMBER;
    v_locatie_m2_lrk                NUMBER;
    v_locatie_kindplaatsen_tot      NUMBER;       	
    v_locatie_kindplaatsen_lrk      NUMBER;
    v_datum_export                  DATE;
    v_mutatiedatum                  NUMBER(1) := 0 ; -- false
    
BEGIN
    v_count := 0;
    v_datum_export := SYSDATE;

    FOR rec IN c
    LOOP
        BEGIN
        	
        	-- vullen variabelen
        	v_aanduiding := 'Updaten m2/kindplaatsen bij locatie_key : ' || rec.alg_locatie_key ; 
        	v_locatie_m2_netto_totaal := 0 ;
        	v_locatie_m2_lrk := 0 ;
        	v_locatie_kindplaatsen_tot := 0 ;        	
        	v_locatie_kindplaatsen_lrk := 0 ;
        	
        	-- per locatie kijken wat de totalen nu zijn...
            SELECT sum(v.ruimte_m2_netto), sum(v.ruimte_m2_netto_lrk), FLOOR(sum(v.ruimte_kindplaatsen_tot)), FLOOR(sum(v.ruimte_kindplaatsen_lrk)) 
              INTO v_locatie_m2_netto_totaal, v_locatie_m2_lrk, v_locatie_kindplaatsen_tot, v_locatie_kindplaatsen_lrk  
              FROM skhf_v_locatie_m2 v 
             WHERE    v.alg_locatie_key = rec.alg_locatie_key 
             GROUP BY v.alg_locatie_key ;
            
            -- updaten locatiekaart als aantallen verschillen met huidige waarden
            IF COALESCE(rec.locatie_m2_netto_totaal, 0) <> v_locatie_m2_netto_totaal
            THEN

               v_errorhint := 'bijwerken kenmerkveld locatie_M2_netto_totaal' ;
               alg.upsertkenmerk (1121, rec.alg_locatie_key, [REDACTED]);
               
               BEGIN fac.trackaction('ALGLUP', rec.alg_locatie_key, 3, NULL, 'Uit auto-export: M2 totaal (netto) ' || TO_CHAR(COALESCE(rec.locatie_m2_netto_totaal, 0)) || ' --> ' || TO_CHAR(v_locatie_M2_netto_totaal)); END;
           
               v_mutatiedatum := 1 ;
                
            END IF;
            
            IF COALESCE(rec.locatie_m2_lrk, 0) <> v_locatie_m2_lrk
            THEN

               v_errorhint := 'bijwerken kenmerkveld locatie_M2_LRK' ;
               alg.upsertkenmerk (1120, rec.alg_locatie_key, [REDACTED]);

               BEGIN fac.trackaction('ALGLUP', rec.alg_locatie_key, 3, NULL, 'Uit auto-export: M2 LRK ' || TO_CHAR(COALESCE(rec.locatie_m2_lrk, 0)) || ' --> ' || TO_CHAR(v_locatie_M2_lrk)); END;

               v_mutatiedatum := 1 ;
            
            END IF;
               
            IF COALESCE(rec.locatie_kindplaatsen_tot, 0) <> v_locatie_kindplaatsen_tot
            THEN

               v_errorhint := 'bijwerken kenmerkveld locatie_kindplaatsen_tot' ;
               alg.upsertkenmerk (1140, rec.alg_locatie_key, v_locatie_kindplaatsen_tot);

               BEGIN fac.trackaction('ALGLUP', rec.alg_locatie_key, 3, NULL, 'Uit auto-export: Kindplaatsen TOT ' || TO_CHAR(COALESCE(rec.locatie_kindplaatsen_tot, 0)) || ' --> ' || TO_CHAR(v_locatie_kindplaatsen_tot)); END;

               v_mutatiedatum := 1 ;
            
            END IF;   

            IF COALESCE(rec.locatie_kindplaatsen_lrk, 0) <> v_locatie_kindplaatsen_lrk
            THEN

               v_errorhint := 'bijwerken kenmerkveld locatie_kindplaatsen_lrk' ;
               alg.upsertkenmerk (1160, rec.alg_locatie_key, v_locatie_kindplaatsen_lrk);

               BEGIN fac.trackaction('ALGLUP', rec.alg_locatie_key, 3, NULL, 'Uit auto-export: Kindplaatsen LRK ' || TO_CHAR(COALESCE(rec.locatie_kindplaatsen_lrk, 0)) || ' --> ' || TO_CHAR(v_locatie_kindplaatsen_lrk)); END;

               v_mutatiedatum := 1 ;
            
            END IF;
            
            IF v_mutatiedatum = 1
            THEN

               -- datum in locatiekaart zetten wanneer deze voor het laatste automatisch is geupdate
               v_errorhint := 'bijwerken kenmerkveld locatie_m2_update' ;             
               alg.upsertkenmerk (1180, rec.alg_locatie_key, v_datum_export);             
            
            END IF;
          
        END;
    END LOOP;

EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
            'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
        fac.writelog (p_applname,
                      'E',
                      v_errormsg,
                      v_aanduiding || ' - HINT: ' || v_errorhint);

END;
/


-------------------------------
--- NOTI-JOBS   ---------------
-------------------------------



-------------------------------
--- RAPPORTAGES ---------------
-------------------------------

-- Rapportage beheer simkaarten en mobiel
CREATE OR REPLACE VIEW skhf_v_it_simkaarten_man
(
    MOBIEL_NUMMER,
    SIMKAART_NUMMER,
    PUK_CODE,
    STATUS,
    ICT_OBJECT,
    ICT_OBJECT_VERVALDATUM,
    GEKOPPELD_AAN_TYPE,
    GEKOPPELD_AAN,
    NR_INS_DEEL_KEY,
    OBJ_INS_DEEL_KEY
)
AS
SELECT nr.ins_deel_upper,
       flx.getflex ('INS', 21, nr.ins_deel_key)    simkaart_nummer,
       flx.getflex ('INS', 25, nr.ins_deel_key)    puk_code,
       CASE
           WHEN d.ins_deel_upper IS NOT NULL THEN 'Gekoppeld'
           ELSE 'Vrij'
       END                                         status,
       d.ins_deel_upper,
       d.ins_deel_vervaldatum,
       d.gekoppeld_aan_type,
       d.gekoppeld_aan,
       nr.ins_deel_key,
       d.ins_deel_key
  FROM (SELECT v.ins_deel_key, v.ins_deel_upper
          FROM ins_v_deel_gegevens v, ins_deel d
         WHERE     v.ins_discipline_key = 82                      -- IT-Intern
               AND v.ins_srtdeel_key = 21                       -- SIM-kaarten
               AND v.ins_deel_key = d.ins_deel_key
               AND d.ins_deel_verwijder IS NULL
               AND (   d.ins_deel_vervaldatum IS NULL
                    OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))) nr,
       (SELECT d.ins_deel_key,
               d.ins_deel_upper,
               kw.ins_kenmerkdeel_waarde,
               num.ins_deel_upper
                nummer_gekoppeld,
               DECODE (d.ins_alg_ruimte_type,
                       'R', 'Locatie',
                       'A', 'Afdeling',
                       'P', 'Persoon/Teamaccount',
                       '')                        gekoppeld_aan_type,
               v.alg_plaatsaanduiding,
               d.ins_deel_vervaldatum,
               DECODE (d.ins_alg_ruimte_type,
                       'R', l.alg_locatie_omschrijving,
                       v.alg_plaatsaanduiding)    gekoppeld_aan
          FROM ins_deel             d,
               ins_kenmerkdeel      kw,
               ins_kenmerk          k,
               ins_deel             num,
               ins_v_deel_gegevens  v,
               alg_locatie          l
         WHERE     d.ins_deel_key = kw.ins_deel_key
               AND kw.ins_kenmerk_key = k.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 61 -- SIM_kaart gekoppeld bij Mobiel
               AND kw.ins_kenmerkdeel_verwijder IS NULL
               AND kw.ins_kenmerkdeel_verwijder IS NULL
               AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) =
                   num.ins_deel_key
               AND d.ins_deel_key = v.ins_deel_key
               AND d.ins_alg_locatie_key = l.alg_locatie_key(+)
               ) d
WHERE
   nr.ins_deel_upper = d.nummer_gekoppeld(+) ;

CREATE OR REPLACE VIEW skhf_v_rap_opdrachten
(
    INTERN,
    TYPE,
    MLD_OPDR_KEY,
    MLD_UITVOERENDE_KEY,
    OPDRACHTNR,
    STATUS,
    MELDING,
    BEHANDELAAR,
    LOCATIE_PLAATS,
    LOCATIE_OMSCHRIJVING,
    OPDRACHT_AANMAAKDATUM,
    GEPLANDE_AANVANG,
    GEPLANDE_AANVANG_B,     -- berekend voor kalenderweergave
    GEPLANDE_EINDDATUM,
    GEPLANDE_EINDDATUM_B,   -- berekend voor kalenderweergave
    OPDRACHT_EINDDATUM,
    MELDING_EINDDATUM,
    OMSCHRIJVING,
    PRS_PERSLID_KEY,
    NAAM_UITVOERDER,
    UREN_BESTEED,
    AFMELD_DATUM,
    OPDRACHT_TYPE,
    TD_NAAM,
    PRIORITEIT,
    STATUS_KALENDER          -- t.b.v. kalenderweergave
)
AS
    SELECT mu.intern,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN 'Poule-opdracht'
               WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN 'Klus-opdracht'
               WHEN mu.intern = 0 THEN 'Externe opdracht'
               ELSE '<?>'
           END
               TYPE,
           o.mld_opdr_key,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN mu.mld_uitvoerende_key
               WHEN mu.TYPE = 'P' AND mu.intern = 1  THEN o.prs_perslid_key
               WHEN mu.intern = 0 THEN mu.mld_uitvoerende_key
               ELSE NULL
           END
               mld_uitvoerende_key,
              TO_CHAR (o.mld_melding_key)
           || '/'
           || o.mld_opdr_bedrijfopdr_volgnr
               opdrachtnummer,
           DECODE (
               os.mld_statusopdr_key,
               8, DECODE (o.mld_opdr_halted,
                          1, 'Onderbroken',
                          os.mld_statusopdr_omschrijving),
               os.mld_statusopdr_omschrijving)
               status,
           std.mld_stdmelding_omschrijving,
           COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
            behandelaar,
           l.alg_locatie_plaats,
           l.alg_locatie_omschrijving,
           o.mld_opdr_datumbegin,
           o.mld_opdr_plandatum
            geplande_aanvang,
           CASE WHEN o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum ELSE o.mld_opdr_datumbegin END 
             geplande_aanvang_b,
           o.mld_opdr_plandatum2
            geplande_einddatum,
           CASE WHEN o.mld_opdr_plandatum2 IS NOT NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum2
                WHEN o.mld_opdr_plandatum2 IS NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum + 2/24
                ELSE o.mld_opdr_datumbegin + 2/24
                END
             geplande_einddatum_b,
           o.mld_opdr_einddatum,
           m.mld_melding_einddatum,
           TRIM (
                  REGEXP_REPLACE (
                      REGEXP_SUBSTR (o.mld_opdr_omschrijving,
                                     '(([^ ]*)( |$)*){10}'),
                      '[[:space:]]',
                      ' '))
            || '...'
            omschrijving,
           p.prs_perslid_key,
           mu.naam
            naam_uitvoerder,
           (SELECT ko.mld_kenmerkopdr_waarde
              FROM mld_kenmerkopdr ko
             WHERE     ko.mld_opdr_key = o.mld_opdr_key
                   AND ko.mld_kenmerk_key = 203)        -- kenmerk Uren_besteed
             uren_besteed,
           (SELECT MAX (ft.fac_tracking_datum)
              FROM fac_tracking ft
             WHERE     ft.fac_tracking_refkey = o.mld_opdr_key
                   AND ft.fac_srtnotificatie_key = 78)  -- ORDAFM
             afmeld_datum, 
           ot.mld_typeopdr_omschrijving,
           CASE
               WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
               WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN mu.naam
               ELSE ''
               END td_naam,
           CASE WHEN mu.intern = 1 THEN COALESCE(v.prioriteit,'3 - NORMAAL')
                ELSE 'nvt'
                END
            prioriteit,
           CASE 
               WHEN mu.intern = 1 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NULL THEN 'Nog inplannen'
               WHEN mu.intern = 1 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NOT NULL THEN 'Ingepland'
               WHEN mu.intern = 0 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NULL THEN 'Nog niet bevestigd'
               WHEN mu.intern = 0 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NOT NULL THEN 'Bevestigd'
               WHEN os.mld_statusopdr_omschrijving = 'Afgewezen' THEN 'Afgewezen'
               WHEN os.mld_statusopdr_omschrijving = 'Afgemeld' THEN 'Afgemeld'               
               WHEN os.mld_statusopdr_omschrijving = 'Afgerond' THEN 'Afgerond'        
               ELSE ''
               END status_kalender
      FROM mld_opdr                 o,
           mld_melding              m,
           mld_typeopdr             ot,
           prs_v_perslid_fullnames  p,
           ins_tab_discipline       d,
           mld_stdmelding           std,
           alg_locatie              l,
           alg_district             d,
           mld_v_uitvoerende        mu,
           mld_statusopdr           os,
           (
            SELECT ko.mld_opdr_key, ud.fac_usrdata_code || ' - ' || ud.fac_usrdata_omschr prioriteit
              FROM mld_kenmerkopdr ko, fac_usrdata ud
             WHERE fac.safe_to_number(ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key
                   AND fac_usrtab_key = 1             -- keuzelijst eigen tabel Prioriteit 
                   AND ko.mld_kenmerk_key = 6         -- kenmerk Prioriteit
                   ) v
     WHERE     o.mld_melding_key = m.mld_melding_key(+)
           AND o.prs_perslid_key = p.prs_perslid_key(+)
           AND o.mld_typeopdr_key = ot.mld_typeopdr_key
           AND ot.mld_typeopdr_isofferte = 0          -- Alleen werkopdrachten
           AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
           AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
           AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie
           AND l.alg_district_key = d.alg_district_key
           AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
           AND os.mld_statusopdr_key = o.mld_statusopdr_key
           AND o.mld_opdr_key = v.mld_opdr_key(+);

CREATE OR REPLACE VIEW skhf_v_cal_opdrachten
(
 USER_KEY,
 TITLE,
 VAN,
 TOT,
 ITEM_KEY,
 COLOR,
 TEXTCOLOR,
 NAAM_UITVOERRDER,
 LOCATIE_PLAATS,
 STATUS_KALENDER,
 INTERN,
 OPDRACHT_TYPE
)
AS 
SELECT mld_uitvoerende_key,
       ' - ' || opdrachtnr || CHR(10)
             || naam_uitvoerder || CHR(10)
             || locatie_omschrijving || CHR(10)
             || 'Status: ' || status_kalender || CHR(10) 
             || CASE WHEN geplande_einddatum IS NOT NULL THEN DECODE(intern, 1, 'Ingepland tot ', 'Bevestigd voor ') || TO_CHAR(geplande_einddatum_b) || CHR(10) ELSE '' END
             || CASE WHEN intern = 1 THEN CHR(10) || 'Prio: ' || prioriteit ELSE '' END
           title,
       geplande_aanvang_b
        van,
       geplande_einddatum_b
        tot,
       mld_opdr_key,
       DECODE (intern, 1,
                       DECODE (status_kalender,
                               'Afgewezen', '#C0C0C0',                                   -- grijs
                               'Afgemeld', '#C0C0C0',                                    -- grijs
                               'Nog inplannen', '#f58a20',                               -- oranje
                               'Ingepland', '#20b2f5',                                   -- lichtblauw
                               'Afgerond', '#C0C0C0',                                    -- grijs
                               '#0000FF'),
                       0,
                       DECODE (status_kalender,
                               'Afgewezen', '#C0C0C0',                                   -- grijs
                               'Afgemeld', '#C0C0C0',                                    -- grijs
                               'Nog niet bevestigd', '#F5ED5D',                          -- lichtgeel
                               'Bevestigd', '#DED304',                                   -- donkergeel
                               'Afgerond', '#C0C0C0',                                    -- grijs
                               '#0000FF'),
                       '#0000FF'
                         ) color,                                         -- 
       DECODE (intern, 1,
                       DECODE (status_kalender,
                               'Afgewezen', '#bf0b3b',                                   -- rood
                               'Afgemeld', '#000000',                                    -- zwart
                               'Afgerond', '#000000',                                    -- zwart                               
                               'Nog inplannen', '#FFFFFF',                               -- wit,
                               'Ingepland',                                   
                                         DECODE (LOWER(prioriteit),
                                                  '3 - normaal', '#FFFFFF',              -- wit
                                                  '4 - laag',  '#FFFFFF',                -- wit
                                                  '2 - hoog',  '#f58a20',                -- oranje
                                                  '1 - kritiek',  '#bf0b3b',             -- rood
                                                  '#000000'),
                               '#000000'),
                        0,
                        DECODE (status_kalender,
                               'Afgewezen', '#bf0b3b',                                   -- rood
                               'Afgemeld', '#000000',                                    -- zwart
                               'Afgerond', '#000000',                                    -- zwart
                               'Nog niet bevestigd', '#000000',                          -- zwart
                               'Bevestigd', '#000000',                                   -- zwart
                               'Toegekend', '#FFFFFF',                                   -- wit,
                               '#0000FF'),                        
                     '#000000'
                     ) textcolor,
           naam_uitvoerder,
           locatie_plaats,
           status_kalender,
           intern,
           opdracht_type
FROM skhf_v_rap_opdrachten
ORDER BY geplande_aanvang_b ;

-- Investeringsbegrotingen - ticket SKHF#87200
CREATE OR REPLACE VIEW skhf_v_meldingen_inv
AS
SELECT m.mld_melding_key,
       sm.mld_stdmelding_omschrijving,
       sm.mld_stdmelding_key,
       p.prs_perslid_naam_friendly
           aanvrager,
       l.alg_locatie_key
        fclt_3d_locatie_key,           
       l.alg_locatie_omschrijving
           locatie,
       l.alg_locatie_adres
           locatie_adres,
       CASE WHEN m4.mld_melding_key IS NOT NULL AND m1.status <> 'Afgemeld' THEN '4. Uitvoering'
            WHEN m4.mld_melding_key IS NOT NULL AND m1.status = 'Afgemeld' THEN '4. Uitvoering - Afgerond'
            WHEN m4.mld_melding_key IS NULL AND m3.mld_melding_key IS NOT NULL AND m1.status = 'Afgemeld' THEN '3. Afgekeurd'
            WHEN m4.mld_melding_key IS NULL AND m3.mld_melding_key IS NOT NULL AND m1.status <> 'Afgemeld' THEN '3. Ter beoordeling'
            WHEN m4.mld_melding_key IS NULL AND m3.mld_melding_key IS NULL AND m2.mld_melding_key IS NOT NULL THEN '2. Inventarisatie'
            ELSE '<?>'
          END
          workflow_status,
       kp.prs_kostenplaats_nr || ' - ' || kp.prs_kostenplaats_omschrijving
        kostenplaats,  
       -- status en standaard mld-velden in workflow per stap
       m1.mld_melding_key
           stap1_melding,
       m1.mld_melding_datum
           melding_datum_1,
       m1.status
           status_1,
       m1.mld_melding_einddatum
           melding_einddatum_1,
       m1.mld_melding_markering
           melding_markering_1,           
       m1.mld_melding_opmerking
           afhandelingstekst_1,
       m2.mld_melding_key
           stap2_melding,
       m2.mld_melding_datum
           melding_datum_2,
       m2.status
           status_2,
       m2.mld_melding_einddatum
           melding_einddatum_2,
       m2.mld_melding_markering
           melding_markering_2,
       m2.mld_melding_opmerking
           afhandelingstekst_2,
       m3.mld_melding_key
           stap3_melding,
       m3.mld_melding_datum
           melding_datum_3,
       m3.status
           status_3,
       m3.mld_melding_markering
           melding_markering_3,
       m3.mld_melding_einddatum
           melding_einddatum_3,
       m3.mld_melding_opmerking
           afhandelingstekst_3,
       m4.mld_melding_key
           stap4_melding,
       m4.mld_melding_datum
           melding_datum_4,
       m4.status
           status_4,
       m4.mld_melding_einddatum
           melding_einddatum_4,
       m4.mld_melding_markering
           melding_markering_4,           
       m4.mld_melding_opmerking
           afhandelingstekst_4,
       -- alle kenmerkvelden - BLOK INTAKE EN INVENTARISATIE
       m2.uitvoeringsjaar,
       m2.investeringsbegroting_srt,
       m2.investeringsbegroting_srt_afw,
       m2.uitvoerings_oms,
       fac.safe_to_number(m2.bedrag_begroot)
        bedrag_begroot,
       m2.prioriteit,
       -- alle kenmerkvelden - BLOK BEOORDELING
       m3.akkoord,
       m3.toelichting_nietakkoord,
       m3.uitvoerings_oms_definitief,
       fac.safe_to_number(m3.bedrag_begroot_definitief)
        bedrag_begroot_definitief,
       -- alle kenmerkvelden - BLOK UITVOERING - OFFERTE
       m4.offerte_start
           offerte_start,
       m4.offerte_selectie
           offerte_selectie,
       fac.safe_to_number(m4.offerte_bedrag)
           offerte_bedrag,
       m4.offerte_toelichting
           offerte_toelichting,
       -- alle kenmerkvelden - BLOK UITVOERING - REALISATIE
       m4.plandatum_gereed
           plandatum_gereed,
       m4.opdrachten_toelichting
           opdrachten_toelichting,
       -- Opdrachten_totaal
       (  SELECT COUNT (*)
            FROM mld_opdr
           WHERE mld_melding_key = m4.mld_melding_key
        GROUP BY mld_melding_key)
           opdracht_aantal,
       (  SELECT SUM (mld_opdr_kosten)
            FROM mld_opdr
           WHERE mld_melding_key = m4.mld_melding_key
        GROUP BY mld_melding_key)
           opdracht_kosten_totaal,
       (  SELECT SUM (mld_opdr_kosten)
            FROM mld_opdr
           WHERE     mld_melding_key = m4.mld_melding_key
                 AND mld_statusopdr_key IN (3, 4, 5, 8,10)
        GROUP BY mld_melding_key)
           opdracht_kosten_lopend,
       (  SELECT SUM (mld_opdr_kosten)
            FROM mld_opdr
           WHERE     mld_melding_key = m4.mld_melding_key
                 AND mld_statusopdr_key IN (6)
        GROUP BY mld_melding_key)
           opdracht_kosten_afgemeld,                     -- technisch voltooid
       (  SELECT SUM (mld_opdr_kosten)
            FROM mld_opdr
           WHERE     mld_melding_key = m4.mld_melding_key
                 AND mld_statusopdr_key IN (7, 9)
        GROUP BY mld_melding_key)
           opdracht_kosten_voltooid,                       -- factuur ontvangen
        -- algemeen
        COALESCE(m4.mld_melding_markering, m3.mld_melding_markering, m2.mld_melding_markering, m1.mld_melding_markering, 'geen actieve markering in workflow-stappen')
         melding_markering_actief
  FROM mld_melding                  m,
       mld_stdmelding               sm,
       prs_v_perslid_fullnames_all  p,
       alg_locatie                  l,
       prs_kostenplaats             kp,
       (SELECT m.mld_melding_start_key,
               m.mld_workflowstep_key,
               m.mld_melding_key,
               m.mld_melding_datum,
               m.mld_melding_einddatum,
               (CASE WHEN m.mld_melding_flag>0 THEN 'Fase traject - ' || Lcl.L('lcl_mld_flag' || m.mld_melding_flag)
                ELSE ''
                END) mld_melding_markering,               
               m.mld_melding_opmerking,
               (SELECT s.mld_statuses_omschrijving
                  FROM mld_statuses s
                 WHERE s.mld_statuses_key = m.mld_melding_status)
                   status
          FROM mld_melding m 
         WHERE m.mld_stdmelding_key = 301                     -- start-melding
                                         ) m1,
       (SELECT m.mld_melding_start_key,
               m.mld_workflowstep_key,
               m.mld_melding_key,
               m.mld_melding_datum,
               m.mld_melding_einddatum,
               (CASE WHEN m.mld_melding_flag>0 THEN 'Fase complementeren - ' || Lcl.L('lcl_mld_flag' || m.mld_melding_flag) 
                ELSE ''
                END) mld_melding_markering, 
               m.mld_melding_opmerking,
               (SELECT s.mld_statuses_omschrijving
                  FROM mld_statuses s
                 WHERE s.mld_statuses_key = m.mld_melding_status)
                   status,
               -- blok intake
               flx.getflex ('MLD', 341, m.mld_melding_key)
                   uitvoeringsjaar,
               flx.getdomeinwaarde (
                   201,
                   (flx.getflex ('MLD', 301, m.mld_melding_key)))
                   investeringsbegroting_srt,
               flx.getflex ('MLD', 324, m.mld_melding_key)
                   investeringsbegroting_srt_afw,
               flx.getflex ('MLD', 481, m.mld_melding_key)
                   uitvoerings_oms,
               flx.getflex ('MLD', 561, m.mld_melding_key)
                   bedrag_begroot,
               flx.getdomeinwaarde (
                   221,
                   (flx.getflex ('MLD', 501, m.mld_melding_key)))
                   prioriteit
          FROM mld_melding m
         WHERE m.mld_stdmelding_key = 302            -- melding complementeren
                                         ) m2,
       (SELECT m.mld_melding_start_key,
               m.mld_workflowstep_key,
               m.mld_melding_key,
               m.mld_melding_datum,
               m.mld_melding_einddatum,
               (CASE WHEN m.mld_melding_flag>0 THEN 'Fase beoordeling - ' || Lcl.L('lcl_mld_flag' || m.mld_melding_flag)
                ELSE ''
                END) mld_melding_markering,               
               m.mld_melding_opmerking,
               (SELECT s.mld_statuses_omschrijving
                  FROM mld_statuses s
                 WHERE s.mld_statuses_key = m.mld_melding_status)
                   status,
               -- blok beoordeling
               flx.getdomeinwaarde (
                   241,
                   (flx.getflex ('MLD', 541, m.mld_melding_key)))
                   akkoord,
               flx.getflex ('MLD', 641, m.mld_melding_key)
                   toelichting_nietakkoord,
               flx.getflex ('MLD', 521, m.mld_melding_key)
                   uitvoerings_oms_definitief,
               flx.getflex ('MLD', 562, m.mld_melding_key)
                   bedrag_begroot_definitief
          FROM mld_melding m
         WHERE m.mld_stdmelding_key = 303           -- beoordeling investering
                                         ) m3,
       (SELECT m.mld_melding_start_key,
               m.mld_workflowstep_key,
               m.mld_melding_key,
               m.mld_melding_datum,
               m.mld_melding_einddatum,
               (CASE WHEN m.mld_melding_flag>0 THEN 'Fase uitvoering - ' || Lcl.L('lcl_mld_flag' || m.mld_melding_flag)
                ELSE ''
                END) mld_melding_markering,               
               m.mld_melding_opmerking,
               (SELECT s.mld_statuses_omschrijving
                  FROM mld_statuses s
                 WHERE s.mld_statuses_key = m.mld_melding_status)
                   status,
               -- blok uitvoering
               flx.getflex ('MLD', 361, m.mld_melding_key)
                   offerte_start,
               flx.getflex ('MLD', 401, m.mld_melding_key)
                   offerte_selectie,
               flx.getflex ('MLD', 403, m.mld_melding_key)
                   offerte_bedrag,
               flx.getflex ('MLD', 381, m.mld_melding_key)
                   offerte_toelichting,
               flx.getflex ('MLD', 461, m.mld_melding_key)
                   plandatum_gereed,
               flx.getflex ('MLD', 441, m.mld_melding_key)
                   opdrachten_toelichting
          FROM mld_melding m
         WHERE m.mld_stdmelding_key = 304            -- uitvoering investering
                                         ) m4
 WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
       AND sm.mld_stdmelding_key = 301                       -- trajectmelding
       AND m.prs_perslid_key = p.prs_perslid_key
       AND m.mld_alg_locatie_key = l.alg_locatie_key
       AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key (+)
       AND m.mld_melding_start_key = m1.mld_melding_start_key -- kenmerkvelden intitieel gevuld in trajectmelding
       AND m.mld_melding_start_key = m2.mld_melding_start_key(+)
       AND m.mld_melding_start_key = m3.mld_melding_start_key(+)
       AND m.mld_melding_start_key = m4.mld_melding_start_key(+)
       ;


-------------------------------
--- DAILY SKHF  ---------------
-------------------------------

CREATE OR REPLACE PROCEDURE skhf_daily
AS
   v_errormsg          VARCHAR2 (1000);
   oracle_err_num      NUMBER;
   oracle_err_mes      VARCHAR2 (200);
BEGIN

   -- exportfunctie om de m2 en kindplekken op locatiekaart bij te werken
   skhf_select_locatie_m2 ('LOCATIE_M2', SYSDATE);

END skhf_daily;
/



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