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

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

--=============================================================================
-- IMPORTFUNCTIES
-------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE klim_import_perslid_mut (p_import_key IN NUMBER)
AS
   v_seq_of_columns   VARCHAR (255);
BEGIN
   v_seq_of_columns := '0;0;0;0;0;0;6;3;2;1;0;0;0;0;11;12;13;10;0;5;9;4;0;0;0;0;7';
   -- kenmerk1 = afdeling omschrijving
   -- Toch maar geen header
   prs.import_perslid (
      p_import_key,
      v_seq_of_columns,
      '"Voornaam";"Tussenvoegsel";"Achternaam";"login";"Personeelsnummer";"Afdelingscode";"Afdeling";"FunctieCode";"Functie";"Email";"Geslacht";"Telelfoonnummer";"Mobielnummer"%');
END klim_import_perslid_mut;
/

CREATE OR REPLACE PROCEDURE klim_update_perslid_mut (p_import_key IN NUMBER)
IS
   CURSOR c_del
   IS
          SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
            FROM prs_perslid p,
                 fac_imp_perslid i,
                 prs_v_afdeling a,
                 prs_v_perslid_fullnames_all pf
           WHERE     p.prs_perslid_verwijder IS NULL
                 AND p.prs_perslid_email IS NOT NULL
                 AND p.prs_perslid_email = i.prs_perslid_email(+)
                 AND i.prs_perslid_email IS NULL
                 AND p.prs_afdeling_key = a.prs_afdeling_key
                 AND a.prs_bedrijf_key = 2941                           -- Klimmendaal
                 AND p.prs_perslid_key = pf.prs_perslid_key
                 AND p.prs_perslid_key NOT IN
                          (SELECT fac.safe_to_number (km.mld_kenmerkmelding_waarde)
                             FROM mld_kenmerkmelding km,
                                  mld_kenmerk k,
                                  mld_srtkenmerk sk,
                                  fac_kenmerkdomein fk,
                                  mld_melding m
                            WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                                  AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                  AND sk.fac_kenmerkdomein_key =
                                        fk.fac_kenmerkdomein_key
                                  AND m.mld_melding_key = km.mld_melding_key
                                  AND m.mld_melding_status IN (0, 2, 3, 4, 7) -- 1e lijn, nieuw, te accepteren, in behandelng, uitgegeven
                                  AND UPPER (fac_kenmerkdomein_xmlnode) = 'PERSLID')
        ORDER BY 2;

   v_count   NUMBER;
BEGIN
   -- Generic update
   SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;

   IF v_count < 100
   THEN
      fac.imp_writelog (
         p_import_key,
         'E',
         'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')',
         'Zie Specificatie');
      RETURN;
   END IF;

   -- Mensen onder bedrijf met key=2941 (Klimmendaal) die niet meer in de import voorkomen worden verwijderd.
   FOR rec IN c_del
   LOOP
      BEGIN
         prs.delete_perslid (p_import_key, rec.prs_perslid_key);
      END;
   END LOOP;
/*
   INSERT INTO fac_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_omschrijving)
      (SELECT DISTINCT (SELECT prs_bedrijf_naam FROM prs_bedrijf WHERE prs_bedrijf_key = 2941), prs_afdeling_naam, prs_kenmerk1
         FROM fac_imp_perslid);

   fac_update_organisatie (p_import_key);
*/
   prs.update_perslid (p_import_key, 'EMAIL', NULL);

   -- Tijdelijke aanpassing aan de objecten om de werkpleknummers er voor te krijgen.
   UPDATE ins_deel
      SET ins_deel_omschrijving =
             (SELECT prs_werkplek_omschrijving || '/' || ins_deel_opmerking
                FROM prs_werkplek wp
               WHERE ins_alg_ruimte_key = wp.prs_werkplek_key)
    WHERE EXISTS
             (SELECT ins_deel_key, ins_deel_opmerking, prs_werkplek_omschrijving
                FROM prs_werkplek wp
               WHERE     ins_alg_ruimte_key = wp.prs_werkplek_key
                     AND ins_alg_ruimte_type = 'W'
                     AND ins_deel_opmerking IS NOT NULL
                     AND ins_deel_omschrijving <> prs_werkplek_omschrijving || '/' || ins_deel_opmerking);

   COMMIT;

   -- Verwijder ongebruikte functies; deze import bepaalt de functies!
   UPDATE prs_srtperslid sp
      SET sp.prs_srtperslid_verwijder = SYSDATE
    WHERE NOT EXISTS (SELECT 1
                        FROM prs_perslid p
                       WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key);

   COMMIT;

   -- Op nadrukkelijk verzoek van Klimmendaal is/wordt iedereen gemandateerd om
   -- te boeken op alle kostenplaatsen!?
   INSERT INTO prs_perslidkostenplaats (prs_perslid_key,
                                        prs_kostenplaats_key,
                                        prs_perslidkostenplaats_boeken,
                                        prs_perslidkostenplaats_inzage)
      SELECT p.prs_perslid_key, NULL, 1, 0
        FROM prs_v_aanwezigperslid p, prs_afdeling a
       WHERE p.prs_afdeling_key = a.prs_afdeling_key
             AND a.prs_bedrijf_key = 2941                      -- Klimmendaal!
             AND NOT EXISTS (SELECT 1
                               FROM prs_perslidkostenplaats
                              WHERE prs_perslid_key = p.prs_perslid_key);
END klim_update_perslid_mut;
/

-- VIAR#31661
/* Formatted on 19-10-2016 15:05:10 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW klim_v_res_daglijst
(
   fclt_3d_locatie_key,
   hide_f_key,
   resnr,
   fclt_f_locatie,
   fclt_f_ruimte,
   fclt_f_datum,
   van,
   tot,
   activiteit,
   omschrijving,
   gastheer_vrouw,
   aantal_pers,
   opstelling,
   voorziening
)
AS
   SELECT r2a.alg_locatie_key,
          rrr.res_rsv_ruimte_key,
          rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr resnr,
          r2a.locatie_oms,
          r2a.ruimte_nr,
          TO_CHAR (rrr.res_rsv_ruimte_van, 'DD-MM') datum,
          TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24.MI') van,
          TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24.MI') tot,
          ra.res_activiteit_omschrijving activiteit,
          rrr.res_rsv_ruimte_omschrijving omschrijving,
          pf.prs_perslid_naam_full gastheer_vrouw,
          rrr.res_rsv_ruimte_bezoekers pers,
          r2a.opstelling,
          voorzieningen
     FROM res_v_aanwezigrsv_ruimte rrr,
          (  SELECT res_ruimte_opstel_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ra.alg_ruimte_key) alg_ruimte_key,
                    MAX (rr.res_ruimte_nr) ruimte_nr,
                    MAX (r.alg_locatie_key) alg_locatie_key,
                    MAX (r.alg_locatie_omschrijving) locatie_oms
               FROM res_ruimte_opstelling ro,
                    res_opstelling o,
                    res_ruimte rr,
                    res_alg_ruimte ra,
                    alg_v_ruimte_gegevens_all r
              WHERE     ro.res_opstelling_key = o.res_opstelling_key
                    AND ro.res_ruimte_key = rr.res_ruimte_key
                    AND rr.res_ruimte_key = ra.res_ruimte_key
                    AND ra.alg_ruimte_key = r.alg_ruimte_key
           GROUP BY res_ruimte_opstel_key) r2a,
          --alg_ruimte r,
          --alg_verdieping v,
          --alg_gebouw g,
          res_activiteit ra,
          prs_v_perslid_fullnames pf,
          (  SELECT res_rsv_ruimte_key,
                    LISTAGG (voorziening, CHR (13) || CHR (10))
                       WITHIN GROUP (ORDER BY voorziening)
                       AS voorzieningen
               FROM (SELECT rrd.res_rsv_ruimte_key,
                            rd.res_deel_omschrijving
                               voorziening
                       FROM res_rsv_deel rrd, res_deel rd
                      WHERE rrd.res_rsv_deel_verwijder IS NULL
                            AND rd.res_deel_key = rrd.res_deel_key
                     UNION ALL
                     SELECT rra.res_rsv_ruimte_key,
                            rra.res_rsv_artikel_aantal || ' * ' || ra.res_artikel_omschrijving
                               voorziening
                       FROM res_rsv_artikel rra, res_artikel ra
                      WHERE rra.res_rsv_artikel_verwijder IS NULL
                            AND ra.res_artikel_key = rra.res_artikel_key)
           GROUP BY res_rsv_ruimte_key) voorz
    WHERE rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 4)
          AND rrr.res_ruimte_opstel_key = r2a.res_ruimte_opstel_key
          --AND r2a.alg_ruimte_key = r.alg_ruimte_key
          --AND r.alg_verdieping_key = v.alg_verdieping_key
          --AND v.alg_gebouw_key = g.alg_gebouw_key
          AND rrr.res_activiteit_key = ra.res_activiteit_key
          AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
          AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key(+);

/* Formatted on 13-12-2016 14:05:55 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW klim_v_noti_leidinggevende
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          sn.fac_srtnotificatie_oms,
          m.mld_melding_key,
          NULL,
          p.prs_perslid_email,
          NULL
     FROM mld_melding m,
          prs_v_aanwezigperslid p,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE     m.mld_stdmelding_key = 142                -- Afmelden ICT & Fac.
          AND m.prs_perslid_key = p.prs_perslid_key
          AND sn.fac_srtnotificatie_code = 'CUST01'
          AND nj.fac_notificatie_job_view = 'KLIM_V_NOTI_LEIDINGGEVENDE'
          AND m.mld_melding_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          sn.fac_srtnotificatie_oms,
          m.mld_melding_key,
          NULL,
          'inkoop@klimmendaal.nl',
          NULL
     FROM mld_melding m, fac_srtnotificatie sn, fac_notificatie_job nj
    WHERE     m.mld_stdmelding_key = 142                -- Afmelden ICT & Fac.
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND nj.fac_notificatie_job_view = 'klim_V_NOTI_LEIDINGGEVENDE'
          AND m.mld_melding_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun;

-- KLIM#55882: CMDB-export
CREATE OR REPLACE VIEW klim_v_rap_cmdb
(
   disciplineomschrijving,
   groepsoortomschrijving,
   objectsoortcode,
   objectsoortomschrijving,
   objectid,
   objectmemo,
   locatiecode,
   gebouwcode,
   bouwlaagvolgnummer,
   ruimtenr,
   afdeling,
   persoon,
   vervaldatum,
   merk,
   type,
   ingericht_als_tc,
   ingericht_als_fc,
   serienummer,
   mac_adres,
   mac_adres_wifi,
   leverancier,
   aanschafdatum,
   aanschafprijs,
   outlet,
   mer,
   switch_poort,
   werkplek,
   werkplekomschrijving
)
AS
   SELECT x.ins_discipline_omschrijving,
          x.ins_srtgroep_omschrijving,
          x.ins_srtdeel_code,
          x.ins_srtdeel_omschrijving,
          x.ins_deel_omschrijving,
          x.ins_deel_opmerking,
          x.alg_locatie_code,
          x.alg_gebouw_code,
          x.alg_verdieping_volgnr,
          x.alg_ruimte_nr,
          x.prs_afdeling_naam,
          x.prs_perslid_oslogin,
          x.ins_deel_vervaldatum,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = mrk.ins_kenmerkdeel_waarde), -- Merk
          typ.ins_kenmerkdeel_waarde,                                  -- Type
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = itc.ins_kenmerkdeel_waarde), -- Ingericht als TC
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = ifc.ins_kenmerkdeel_waarde), -- Ingericht als FC
          snr.ins_kenmerkdeel_waarde,                           -- Serienummer
          ma1.ins_kenmerkdeel_waarde,                             -- MAC-adres
          ma2.ins_kenmerkdeel_waarde,                        -- MAC-adres Wifi
          lev.ins_kenmerkdeel_waarde,                           -- Leverancier
          ada.ins_kenmerkdeel_waarde,                         -- Aanschafdatum
          apr.ins_kenmerkdeel_waarde,                         -- Aanschafprijs
          otl.ins_kenmerkdeel_waarde,                                -- Outlet
          mer.ins_kenmerkdeel_waarde,                                   -- MER
          swp.ins_kenmerkdeel_waarde,                          -- Switch/Poort
          wp1.ins_kenmerkdeel_waarde,                              -- Werkplek
          wp2.ins_kenmerkdeel_waarde                   -- Werkplekomschrijving
     FROM (SELECT d.ins_deel_key,
                  td.ins_discipline_omschrijving,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_deel_omschrijving,
                  d.ins_deel_opmerking,
                  a.prs_afdeling_naam,
                  NULL prs_perslid_oslogin,
                  NULL alg_locatie_code,
                  NULL alg_gebouw_code,
                  NULL alg_verdieping_volgnr,
                  NULL alg_ruimte_nr,
                  d.ins_deel_vervaldatum
             FROM ins_v_aanwezigdeel d,
                  ins_srtdeel sd,
                  ins_srtgroep sg,
                  ins_tab_discipline td,
                  prs_afdeling a
            WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = td.ins_discipline_key
                  AND td.ins_discipline_key = 501                      -- CMDB
                  AND d.ins_alg_ruimte_type = 'A'
                  AND d.ins_alg_ruimte_key = a.prs_afdeling_key
           UNION ALL
           SELECT d.ins_deel_key,
                  td.ins_discipline_omschrijving,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_deel_omschrijving,
                  d.ins_deel_opmerking,
                  NULL prs_afdeling_naam,
                  p.prs_perslid_oslogin,
                  NULL alg_locatie_code,
                  NULL alg_gebouw_code,
                  NULL alg_verdieping_volgnr,
                  NULL alg_ruimte_nr,
                  d.ins_deel_vervaldatum
             FROM ins_v_aanwezigdeel d,
                  ins_srtdeel sd,
                  ins_srtgroep sg,
                  ins_tab_discipline td,
                  prs_perslid p
            WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = td.ins_discipline_key
                  AND td.ins_discipline_key = 501                      -- CMDB
                  AND d.ins_alg_ruimte_type = 'P'
                  AND d.ins_alg_ruimte_key = p.prs_perslid_key
           UNION ALL
           SELECT d.ins_deel_key,
                  td.ins_discipline_omschrijving,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_deel_omschrijving,
                  d.ins_deel_opmerking,
                  NULL prs_afdeling_naam,
                  NULL prs_perslid_oslogin,
                  l.alg_locatie_code,
                  g.alg_gebouw_code,
                  v.alg_verdieping_volgnr,
                  r.alg_ruimte_nr,
                  d.ins_deel_vervaldatum
             FROM ins_v_aanwezigdeel d,
                  ins_srtdeel sd,
                  ins_srtgroep sg,
                  ins_tab_discipline td,
                  alg_ruimte r,
                  alg_verdieping v,
                  alg_gebouw g,
                  alg_locatie l
            WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = td.ins_discipline_key
                  AND td.ins_discipline_key = 501                      -- CMDB
                  AND d.ins_alg_ruimte_type = 'R'
                  AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                  AND r.alg_verdieping_key = v.alg_verdieping_key
                  AND v.alg_gebouw_key = g.alg_gebouw_key
                  AND g.alg_locatie_key = l.alg_locatie_key) x
          LEFT JOIN ins_v_aanwezigkenmerkdeel mrk
             ON x.ins_deel_key = mrk.ins_deel_key
                AND mrk.ins_kenmerk_key = 89                           -- Merk
          LEFT JOIN ins_v_aanwezigkenmerkdeel typ
             ON x.ins_deel_key = typ.ins_deel_key
                AND typ.ins_kenmerk_key = 96                           -- Type
          LEFT JOIN ins_v_aanwezigkenmerkdeel itc
             ON x.ins_deel_key = itc.ins_deel_key
                AND itc.ins_kenmerk_key = 84               -- Ingericht als TC
          LEFT JOIN ins_v_aanwezigkenmerkdeel ifc
             ON x.ins_deel_key = ifc.ins_deel_key
                AND ifc.ins_kenmerk_key = 83               -- Ingericht als FC
          LEFT JOIN ins_v_aanwezigkenmerkdeel snr
             ON x.ins_deel_key = snr.ins_deel_key
                AND snr.ins_kenmerk_key = 94                    -- Serienummer
          LEFT JOIN ins_v_aanwezigkenmerkdeel ma1
             ON x.ins_deel_key = ma1.ins_deel_key
                AND ma1.ins_kenmerk_key = 86                      -- MAC-adres
          LEFT JOIN ins_v_aanwezigkenmerkdeel ma2
             ON x.ins_deel_key = ma2.ins_deel_key
                AND ma2.ins_kenmerk_key = 87                 -- MAC-adres Wifi
          LEFT JOIN ins_v_aanwezigkenmerkdeel lev
             ON x.ins_deel_key = lev.ins_deel_key
                AND lev.ins_kenmerk_key = 85                    -- Leverancier
          LEFT JOIN ins_v_aanwezigkenmerkdeel ada
             ON x.ins_deel_key = ada.ins_deel_key
                AND ada.ins_kenmerk_key = 81                  -- Aanschafdatum
          LEFT JOIN ins_v_aanwezigkenmerkdeel apr
             ON x.ins_deel_key = apr.ins_deel_key
                AND apr.ins_kenmerk_key = 82                  -- Aanschafprijs
          LEFT JOIN ins_v_aanwezigkenmerkdeel otl
             ON x.ins_deel_key = otl.ins_deel_key
                AND otl.ins_kenmerk_key = 92                         -- Outlet
          LEFT JOIN ins_v_aanwezigkenmerkdeel mer
             ON x.ins_deel_key = mer.ins_deel_key
                AND mer.ins_kenmerk_key = 88                            -- MER
          LEFT JOIN ins_v_aanwezigkenmerkdeel swp
             ON x.ins_deel_key = swp.ins_deel_key
                AND swp.ins_kenmerk_key = 95                   -- Switch/Poort
          LEFT JOIN ins_v_aanwezigkenmerkdeel wp1
             ON x.ins_deel_key = wp1.ins_deel_key
                AND wp1.ins_kenmerk_key = 97                       -- Werkplek
          LEFT JOIN ins_v_aanwezigkenmerkdeel wp2
             ON x.ins_deel_key = wp2.ins_deel_key
                AND wp2.ins_kenmerk_key = 98           -- Werkplekomschrijving
;

CREATE OR REPLACE VIEW klim_v_export_cmdb
(
   result,
   result_order
)
AS
   SELECT    'disciplineomschrijving'
          || ';groepsoortomschrijving'
          || ';objectsoortcode'
          || ';objectsoortomschrijving'
          || ';objectid'
          || ';objectmemo'
          || ';locatiecode'
          || ';gebouwcode'
          || ';bouwlaagvolgnummer'
          || ';ruimtenr'
          || ';afdeling'
          || ';persoon'
          || ';vervaldatum'
          || ';merk'
          || ';type'
          || ';ingericht_als_tc'
          || ';ingericht_als_fc'
          || ';serienummer'
          || ';mac_adres'
          || ';mac_adres_wifi'
          || ';leverancier'
          || ';aanschafdatum'
          || ';aanschafprijs'
          || ';outlet'
          || ';mer'
          || ';switch_poort'
          || ';werkplek'
          || ';werkplekomschrijving',
          0
     FROM DUAL
   UNION ALL
   SELECT    disciplineomschrijving
          || ';'
          || groepsoortomschrijving
          || ';'
          || objectsoortcode
          || ';'
          || objectsoortomschrijving
          || ';'
          || objectid
          || ';'
          || objectmemo
          || ';'
          || locatiecode
          || ';'
          || gebouwcode
          || ';'
          || bouwlaagvolgnummer
          || ';'
          || ruimtenr
          || ';'
          || afdeling
          || ';'
          || persoon
          || ';'
          || vervaldatum
          || ';'
          || merk
          || ';'
          || type
          || ';'
          || ingericht_als_tc
          || ';'
          || ingericht_als_fc
          || ';'
          || serienummer
          || ';'
          || mac_adres
          || ';'
          || mac_adres_wifi
          || ';'
          || leverancier
          || ';'
          || aanschafdatum
          || ';'
          || REPLACE (aanschafprijs, '.', ',')
          || ';'
          || outlet
          || ';'
          || mer
          || ';'
          || switch_poort
          || ';'
          || werkplek
          || ';'
          || werkplekomschrijving,
          ROWNUM
     FROM (  SELECT *
               FROM klim_v_rap_cmdb
           ORDER BY disciplineomschrijving,
                    groepsoortomschrijving,
                    objectsoortcode,
                    objectsoortomschrijving,
                    objectid);

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