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

DEFINE thisfile = 'HPJI.SQL'
DEFINE dbuser   = '^HPJI'
DEFINE custid   = 'HPJI'

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


CREATE OR REPLACE PACKAGE HPJI
AS
   -- PACKAGES voor de HPJI specifieke ondersteuning
   TYPE t_cursor IS REF CURSOR;

   PROCEDURE rap_it_inventaris_jaar (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2,
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor);
END;
/


CREATE OR REPLACE PACKAGE BODY HPJI
AS
   PROCEDURE rap_it_inventaris_jaar (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2, -- Let wel: formaat '24-06-1965'
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor)
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT grid.onderdeel || '-' || grid.rubriek hide_f_regel,
                  grid.onderdeel fclt_f_onderdeel,
                  grid.rubriek fclt_f_rubriek,
                  grid.jaar fclt_f_aanschafjaar,
                  COALESCE (x.aantal, 0) aantal
             FROM    (SELECT a.prs_afdeling_key onderdeel_key,
                             sd.ins_srtdeel_key rubriek_key,
                             j.jaar jaar,
                             a.prs_afdeling_omschrijving onderdeel,
                             sd.ins_srtdeel_omschrijving rubriek
                        FROM (SELECT prs_afdeling_key,
                                     prs_afdeling_omschrijving
                                FROM prs_v_aanwezigafdeling
                               WHERE prs_afdeling_parentkey IS NULL
                              UNION ALL
                              SELECT -1 prs_afdeling_key,
                                     'Onbekend' prs_afdeling_omschrijving
                                FROM DUAL) a,
                             ins_v_aanwezigsrtdeel sd,
                             ins_v_aanwezigsrtgroep sg,
                             (SELECT DISTINCT
                                     TO_CHAR (
                                        fac.safe_to_date (
                                           ins_kenmerkdeel_waarde,
                                           'dd-mm-yyyy'),
                                        'yyyy')
                                        jaar
                                FROM ins_v_aanwezigkenmerkdeel
                               WHERE ins_kenmerk_key = 101    -- Aanschafdatum
                                     AND fac.safe_to_date (
                                           ins_kenmerkdeel_waarde,
                                           'dd-mm-yyyy') BETWEEN v_datum_van
                                                             AND  v_datum_tot)
                             j
                       WHERE sd.ins_srtgroep_key = sg.ins_srtgroep_key
                             AND sg.ins_discipline_key = 401) grid -- Hardware
                  LEFT JOIN
                     (  SELECT asd.prs_afdeling_key1 onderdeel_key,
                               asd.ins_srtdeel_key rubriek_key,
                               j.jaar jaar,
                               COUNT ( * ) aantal
                          FROM    (SELECT DECODE (ra.aantal,
                                                  1, ab.prs_afdeling_key1,
                                                  -1)
                                             prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d,
                                          alg_v_allonrgoed_gegevens aog,
                                          (  SELECT alg_ruimte_key,
                                                    MAX (prs_afdeling_key)
                                                       prs_afdeling_key,
                                                    COUNT ( * ) aantal
                                               FROM prs_ruimteafdeling
                                           GROUP BY alg_ruimte_key) ra,
                                          prs_v_afdeling_boom ab
                                    WHERE d.ins_alg_ruimte_type NOT IN
                                                ('A', 'P', 'W')
                                          AND d.ins_alg_ruimte_key =
                                                aog.alg_onroerendgoed_keys
                                          AND aog.alg_ruimte_key =
                                                ra.alg_ruimte_key
                                          AND ra.prs_afdeling_key =
                                                ab.prs_afdeling_key
                                   UNION ALL
                                   SELECT -1 prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d,
                                          alg_v_allonrgoed_gegevens aog
                                    WHERE d.ins_alg_ruimte_type NOT IN
                                                ('A', 'P', 'W')
                                          AND d.ins_alg_ruimte_key =
                                                aog.alg_onroerendgoed_keys
                                          AND (aog.alg_ruimte_key IS NULL
                                               OR NOT EXISTS
                                                    (SELECT 1
                                                       FROM prs_ruimteafdeling ra
                                                      WHERE ra.alg_ruimte_key =
                                                               aog.alg_ruimte_key))
                                   UNION ALL
                                   SELECT ab.prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d,
                                          prs_v_afdeling_boom ab
                                    WHERE d.ins_alg_ruimte_type = 'A'
                                          AND d.ins_alg_ruimte_key =
                                                ab.prs_afdeling_key
                                   UNION ALL
                                   SELECT ab.prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab
                                    WHERE d.ins_alg_ruimte_type = 'P'
                                          AND d.ins_alg_ruimte_key =
                                                p.prs_perslid_key
                                          AND p.prs_afdeling_key =
                                                ab.prs_afdeling_key
                                   UNION ALL
                                   SELECT DECODE (ra.aantal,
                                                  1, ab.prs_afdeling_key1,
                                                  -1)
                                             prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d,
                                          prs_werkplek w,
                                          (  SELECT alg_ruimte_key,
                                                    MAX (prs_afdeling_key)
                                                       prs_afdeling_key,
                                                    COUNT ( * ) aantal
                                               FROM prs_ruimteafdeling
                                           GROUP BY alg_ruimte_key) ra,
                                          prs_v_afdeling_boom ab
                                    WHERE d.ins_alg_ruimte_type = 'W'
                                          AND d.ins_alg_ruimte_key =
                                                w.prs_werkplek_key
                                          AND w.prs_alg_ruimte_key =
                                                ra.alg_ruimte_key
                                          AND ra.prs_afdeling_key =
                                                ab.prs_afdeling_key
                                   UNION ALL
                                   SELECT -1 prs_afdeling_key1,
                                          d.ins_srtdeel_key,
                                          d.ins_deel_key
                                     FROM ins_v_aanwezigdeel d, prs_werkplek w
                                    WHERE d.ins_alg_ruimte_type = 'W'
                                          AND d.ins_alg_ruimte_key =
                                                w.prs_werkplek_key
                                          AND NOT EXISTS
                                                (SELECT 1
                                                   FROM prs_ruimteafdeling ra
                                                  WHERE ra.alg_ruimte_key =
                                                           w.prs_alg_ruimte_key))
                                  asd
                               LEFT JOIN
                                  (SELECT ins_deel_key,
                                          fac.safe_to_date (
                                             ins_kenmerkdeel_waarde,
                                             'dd-mm-yyyy')
                                             datum,
                                          TO_CHAR (
                                             fac.safe_to_date (
                                                ins_kenmerkdeel_waarde,
                                                'dd-mm-yyyy'),
                                             'yyyy')
                                             jaar
                                     FROM ins_v_aanwezigkenmerkdeel
                                    WHERE ins_kenmerk_key = 101) j -- Aanschafdatum
                               ON asd.ins_deel_key = j.ins_deel_key
                         WHERE j.datum BETWEEN v_datum_van AND v_datum_tot
                      GROUP BY asd.prs_afdeling_key1,
                               asd.ins_srtdeel_key,
                               j.jaar) x
                  ON     grid.onderdeel_key = x.onderdeel_key
                     AND grid.rubriek_key = x.rubriek_key
                     AND grid.jaar = x.jaar
         ORDER BY 1,
                  2,
                  3,
                  4;
   END rap_it_inventaris_jaar;
END;
/

CREATE OR REPLACE VIEW hpji_v_import_log
AS
   SELECT imp_log_status fclt_f_status,
          imp_log_omschrijving omschrijving,
          imp_log_hint opmerking
     FROM imp_log l
    WHERE l.fac_import_key = (SELECT MAX (fac_import_key)
                                FROM fac_import
                               WHERE fac_import_app_key = 41);

CREATE OR REPLACE VIEW hpji_v_ruimtekaartjes
(
   fclt_f_opmaak,
   fclt_f_loc_code,
   fclt_f_geb_code,
   fclt_f_ver_code,
   fclt_f_ruimte_nr,
   hide_f_ruimte_key,
   ruimtesoort,
   opp,
   titel,
   naam,
   tussenvoegsel,
   voorletters,
   voornaam,
   functie,
   aantal
)
AS
   (SELECT e.opmaak,
           a.alg_locatie_code,
           a.alg_gebouw_code,
           a.alg_verdieping_code,
           a.alg_ruimte_nr,
           TO_CHAR (a.alg_ruimte_key) || e.opmaak,
           b.ruimtesoort,
           a.opp,
           c.prs_perslid_titel,
           c.prs_perslid_naam,
           c.prs_perslid_tussenvoegsel,
           c.prs_perslid_voorletters,
           c.prs_perslid_voornaam,
           c.prs_srtperslid_omschrijving,
           d.aantal
      FROM          (SELECT r.alg_ruimte_key,
                            r.alg_ruimte_nr,
                            v.alg_verdieping_code,
                            g.alg_gebouw_code,
                            l.alg_locatie_code,
                            d.alg_district_omschrijving,
                            r.alg_ruimte_bruto_vloeropp opp
                       FROM alg_v_aanwezigruimte r,
                            alg_verdieping v,
                            alg_gebouw g,
                            alg_locatie l,
                            alg_district d
                      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_district_key = d.alg_district_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                                  -- personen op ruimte
                 (SELECT DISTINCT wp.prs_alg_ruimte_key,
                                  p.prs_perslid_titel,
                                  p.prs_perslid_naam,
                                  p.prs_perslid_voorletters,
                                  p.prs_perslid_tussenvoegsel,
                                  p.prs_perslid_voornaam,
                                  sp.prs_srtperslid_omschrijving
                    FROM prs_werkplek wp,
                         prs_perslidwerkplek pw,
                         prs_v_aanwezigperslid p,
                         prs_srtperslid sp
                   WHERE     wp.prs_werkplek_key = pw.prs_werkplek_key
                         AND pw.prs_perslid_key = p.prs_perslid_key
                         AND p.prs_srtperslid_key = sp.prs_srtperslid_key) c
              ON a.alg_ruimte_key = c.prs_alg_ruimte_key
           LEFT JOIN                              -- aantal personen op ruimte
              (  SELECT wp.prs_alg_ruimte_key,
                        COUNT (pw.prs_perslid_key) aantal
                   FROM prs_werkplek wp, prs_perslidwerkplek pw
                  WHERE wp.prs_werkplek_key = pw.prs_werkplek_key
               GROUP BY wp.prs_alg_ruimte_key) d
           ON a.alg_ruimte_key = d.prs_alg_ruimte_key,
           (SELECT 'Wilster' opmaak FROM DUAL
            UNION ALL
            SELECT 'Portalis' opmaak FROM DUAL
            UNION ALL
            SELECT 'Juvaid' opmaak FROM DUAL
            UNION ALL
            SELECT 'Het Poortje' opmaak FROM DUAL
            UNION ALL
            SELECT 'DOK3' opmaak FROM DUAL) e);


CREATE OR REPLACE VIEW hpji_v_ruimtekaartjes2
(
   fclt_f_opmaak,
   fclt_f_loc_code,
   fclt_f_geb_code,
   fclt_f_ver_code,
   fclt_f_ruimte_nr,
   hide_f_ruimte_key,
   ruimtesoort
)
AS
   SELECT DISTINCT fclt_f_opmaak,
                   fclt_f_loc_code,
                   fclt_f_geb_code,
                   fclt_f_ver_code,
                   fclt_f_ruimte_nr,
                   hide_f_ruimte_key,
                   ruimtesoort
     FROM hpji_v_ruimtekaartjes
/

CREATE OR REPLACE VIEW hpji_v_label_ruimteafd (alg_ruimte_key, waarde)
AS
   SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_naam1
     FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
    WHERE ra.prs_afdeling_key = a.prs_afdeling_key
   UNION
   SELECT DISTINCT r.alg_ruimte_key, '[Onbekend]'       -- ruimten zonder afd.
     FROM alg_v_aanwezigruimte r
    WHERE NOT EXISTS (                        -- waar geen afd. binnen bestaat
                      SELECT  ra.alg_ruimte_key
                         FROM prs_v_aanwezigruimteafdeling ra
                        WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/

CREATE OR REPLACE VIEW hpji_v_label_ruimteafd_nr (alg_ruimte_key, waarde)
AS
   SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_naam
     FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
    WHERE ra.prs_afdeling_key = a.prs_afdeling_key
   UNION
   SELECT DISTINCT r.alg_ruimte_key, '[Onbekend]'       -- ruimten zonder afd.
     FROM alg_v_aanwezigruimte r
    WHERE NOT EXISTS (                        -- waar geen afd. binnen bestaat
                      SELECT  ra.alg_ruimte_key
                         FROM prs_v_aanwezigruimteafdeling ra
                        WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/

CREATE OR REPLACE VIEW hpji_v_label_ruimteafd_oms (alg_ruimte_key, waarde)
AS
   SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_omschrijving
     FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
    WHERE ra.prs_afdeling_key = a.prs_afdeling_key
   UNION
   SELECT DISTINCT r.alg_ruimte_key, '[Onbekend]'       -- ruimten zonder afd.
     FROM alg_v_aanwezigruimte r
    WHERE NOT EXISTS (                        -- waar geen afd. binnen bestaat
                      SELECT  ra.alg_ruimte_key
                         FROM prs_v_aanwezigruimteafdeling ra
                        WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/

CREATE OR REPLACE FORCE VIEW hpji_v_thema_ruimteafd
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
                  NULL, '[Onbekend]',
                  1, SUBSTR (y.afd, 1, 60),
                  'Meer dan 1 afdeling!'),
          DECODE (y.aantal, NULL, -1, 1, y.afd_key, NULL)
     FROM    (SELECT r.alg_ruimte_key
                FROM alg_v_aanwezigruimte r) x
          LEFT JOIN
             (  SELECT ra.alg_ruimte_key,
                       MIN (a.prs_afdeling_naam1) afd,
                       MIN (a.prs_afdeling_key) afd_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
              GROUP BY ra.alg_ruimte_key) y
          ON x.alg_ruimte_key = y.alg_ruimte_key
   UNION ALL
   SELECT NULL, a.prs_afdeling_naam1, a.prs_afdeling_key
     FROM prs_v_aanwezigafdeling a
    WHERE NOT EXISTS (SELECT ra.prs_afdeling_key
                        FROM prs_v_aanwezigruimteafdeling ra
                       WHERE ra.prs_afdeling_key = a.prs_afdeling_key)
/

CREATE OR REPLACE TRIGGER hpji_t_thema_ruimteafd_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON hpji_v_thema_ruimteafd
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
      IF :new.waarde_key <> -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;
/


CREATE OR REPLACE FORCE VIEW hpji_v_thema_ruimteafd1
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
                  NULL, '[Onbekend]',
                  1, SUBSTR (y.afd, 1, 60),
                  'Meer dan 1 afdeling!'),
          DECODE (y.aantal, 1, y.afd_key, NULL)
     FROM    (SELECT r.alg_ruimte_key
                FROM alg_v_aanwezigruimte r) x
          LEFT JOIN
             (  SELECT ra.alg_ruimte_key,
                       MIN (a.prs_afdeling_naam1) afd,
                       MIN (a.prs_afdeling_key) afd_key,
                       COUNT (ra.prs_afdeling_key) aantal
                  FROM prs_v_aanwezigruimteafdeling ra,
                       prs_v_afdeling_boom b,
                       prs_v_aanwezigafdeling a
                 WHERE ra.prs_afdeling_key = b.prs_afdeling_key
                       AND b.prs_afdeling_key1 = a.prs_afdeling_key
              GROUP BY ra.alg_ruimte_key) y
          ON x.alg_ruimte_key = y.alg_ruimte_key
/


CREATE OR REPLACE VIEW hpji_v_thema_vloerafw
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT a.alg_ruimte_key,
          COALESCE (b.vloerafw, '[Onbekend]'),
          COALESCE (b.vloerafw_key, -1)
     FROM    (SELECT r.alg_ruimte_key
                FROM alg_v_aanwezigruimte r) a
          LEFT JOIN
             (SELECT ok.alg_onrgoed_key,
                     ud.fac_usrdata_omschr vloerafw,
                     ud.fac_usrdata_key vloerafw_key
                FROM alg_onrgoedkenmerk ok, fac_usrdata ud
               WHERE     ok.alg_kenmerk_key = 1020           -- vloerafwerking
                     AND ok.alg_onrgoed_niveau = 'R'
                     AND ok.alg_onrgoedkenmerk_verwijder IS NULL
                     AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) b
          ON a.alg_ruimte_key = b.alg_onrgoed_key
   UNION ALL
   SELECT NULL,
          ud.fac_usrdata_omschr vloerafw,
          ud.fac_usrdata_key vloerafw_key
     FROM fac_usrdata ud
    WHERE ud.fac_usrtab_key = 21
          AND NOT EXISTS
                (SELECT 1
                   FROM alg_onrgoedkenmerk ok
                  WHERE ok.alg_kenmerk_key = 1020            -- vloerafwerking
                        AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key)
/


CREATE OR REPLACE TRIGGER hpji_t_thema_vloerafw_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON hpji_v_thema_vloerafw
BEGIN
   IF UPDATING           -- oude hard weggooien; dus DELETE (lekker opruimen)!
   THEN
      DELETE FROM alg_onrgoedkenmerk
            WHERE alg_onrgoed_key = :new.alg_ruimte_key
                  AND alg_onrgoedkenmerk_waarde <> :new.waarde_key;
   END IF;

   BEGIN
      IF :new.waarde_key <> -1
      THEN
         INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
                                         alg_onrgoed_niveau,
                                         alg_kenmerk_key,
                                         alg_onrgoedkenmerk_waarde)
             VALUES (:new.alg_ruimte_key,
                     'R',
                     1020,
                     :new.waarde_key);
      END IF;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX                                 -- was al aanwezig
      THEN
         NULL;
   END;
END;
/


CREATE OR REPLACE VIEW hpji_v_thema_ruimtefunc
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT r.alg_ruimte_key ruimte_key,
          COALESCE (sr.alg_srtruimte_omschrijving, '[Onbekend]') waarde,
          COALESCE (sr.alg_srtruimte_key, -1) waarde_key
     FROM alg_v_aanwezigruimte r, alg_srtruimte sr
    WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
   UNION ALL
   SELECT NULL ruimte_key,
          sr.alg_srtruimte_omschrijving waarde,
          sr.alg_srtruimte_key waarde_key
     FROM alg_srtruimte sr
    WHERE NOT EXISTS (SELECT 1
                        FROM alg_v_aanwezigruimte r
                       WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key)
/


CREATE OR REPLACE TRIGGER hpji_t_thema_ruimtefunc_i_iu
   INSTEAD OF UPDATE
   ON hpji_v_thema_ruimtefunc
   FOR EACH ROW
BEGIN
   UPDATE alg_ruimte
      SET alg_srtruimte_key = :new.waarde_key
    WHERE alg_ruimte_key = :new.alg_ruimte_key
          AND alg_srtruimte_key <> :new.waarde_key;
END;
/


CREATE OR REPLACE FORCE VIEW hpji_v_thema_legewp (alg_ruimte_key, waarde)
AS
   SELECT x.prs_alg_ruimte_key, (100 - ROUND (wp_bez / wp_tot * 100)) leeg_p
     FROM    (  SELECT wp.prs_alg_ruimte_key, COUNT ( * ) wp_tot
                  FROM prs_werkplek wp
              GROUP BY wp.prs_alg_ruimte_key) x
          LEFT JOIN
             (  SELECT wp.prs_alg_ruimte_key, COUNT ( * ) wp_bez
                  FROM prs_werkplek wp
                 WHERE EXISTS
                          (SELECT 1
                             FROM prs_perslidwerkplek pw
                            WHERE pw.prs_werkplek_key = wp.prs_werkplek_key)
              GROUP BY wp.prs_alg_ruimte_key) y
          ON x.prs_alg_ruimte_key = y.prs_alg_ruimte_key;

/


CREATE OR REPLACE FORCE VIEW hpji_v_thema_objecten (alg_ruimte_key, waarde)
AS
     SELECT d.ins_alg_ruimte_key, COUNT ( * ) aantal
       FROM ins_deel d
      WHERE d.ins_alg_ruimte_type = 'R'
   GROUP BY d.ins_alg_ruimte_key
/


CREATE OR REPLACE VIEW HPJI_V_RAP_OPROGNOSEACTIVITEIT
(
   FCLT_F_SOORTACTIVITEIT,
   FCLT_F_JAAR,
   ACTIVITEITEN,
   BUDGET
)
AS
     SELECT mld_stdmelding_omschrijving,
            TO_CHAR (mld_melding_datum, 'yyyy') fclt_f_jaar,
            COUNT (mld_melding_key),
            SUM (fac.safe_to_number (prijs)) budget
       FROM fac_v_oprognosegegevens
   GROUP BY mld_stdmelding_omschrijving, TO_CHAR (mld_melding_datum, 'yyyy');


CREATE OR REPLACE VIEW HPJI_V_RAP_OPROGNOSEGEBOUW
(
   FCLT_F_GEBOUW,
   FCLT_F_JAAR,
   ACTIVITEITEN,
   BUDGET
)
AS
     SELECT    op.alg_locatie_code
            || ' - '
            || g.alg_gebouw_code
            || ' / '
            || g.alg_gebouw_naam
               gebouw,
            TO_CHAR (op.mld_melding_datum, 'yyyy') fclt_f_jaar,
            COUNT (op.mld_melding_key),
            SUM (fac.safe_to_number (op.prijs)) budget
       FROM fac_v_oprognosegegevens op, alg_gebouw g
      WHERE op.alg_gebouw_key = g.alg_gebouw_key
   GROUP BY    op.alg_locatie_code
            || ' - '
            || g.alg_gebouw_code
            || ' / '
            || g.alg_gebouw_naam,
            TO_CHAR (op.mld_melding_datum, 'yyyy');


CREATE OR REPLACE FORCE VIEW HPJI_V_RAP_OPROGNOSEVOORTGANG
(
   FCLT_F_GEBOUW,
   FCLT_F_JAAR,
   MELDINGNR,
   SOORTACTIVITEIT,
   ACTIVITEIT,
   STATUS,
   BUDGET
)
AS
   SELECT alg_locatie_gebouw_naam gebouw,
          TO_CHAR (mld_melding_datum, 'yyyy') fclt_f_jaar,
          TO_CHAR (mld_melding_key) meldingnr,
          mld_stdmelding_omschrijving,
          mld_melding_omschrijving melding,
          mld_statuses_omschrijving status,
          fac.safe_to_number (prijs) budget
     FROM fac_v_oprognosegegevens;


CREATE OR REPLACE VIEW hpji_v_inkoopdata
(
   maand,
   afgemeld_op,
   soort_bestelling,
   bestel_id,
   status,
   besteld_op,
   besteld_bij,
   commentaar,
   kosten
)
AS
   SELECT DISTINCT
          DECODE (b.bes_bestelling_status,
                  6, TO_CHAR (bo.bes_bestelopdr_leverdatum, 'yyyy-mm'),
                  --               TO_CHAR (fac.gettrackingdate ('BESOTV', b.bes_bestelling_key),
                  --                        'yyyy-mm'),
                  'Lopend')
             maand,
          --            TO_CHAR (fac.gettrackingdate ('BESOTV', b.bes_bestelling_key),
          --                     'dd-mm-yyyy')
          TO_CHAR (bo.bes_bestelopdr_leverdatum, 'dd-mm-yyyy') afgemeld_op,
          'Catalogus',
          TO_CHAR (b.bes_bestelling_key) bestel_id,
          s.bes_bestellingstatuses_omschr status,
          TO_CHAR (b.bes_bestelling_datum, 'dd-mm-yyyy') besteld_op,
          l.prs_bedrijf_naam,
          bo.bes_bestelopdr_delivery_opmerk,
          0 kosten
     FROM bes_bestelling b,
          bes_bestellingstatuses s,
          bes_bestelling_item bi,
          bes_bestelopdr_item boi,
          bes_bestelopdr bo,
          prs_bedrijf l
    WHERE     b.bes_bestelling_status = s.bes_bestellingstatuses_key
          AND b.bes_bestelling_key = bi.bes_bestelling_key
          AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key(+)
          AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
          AND bo.prs_bedrijf_key = l.prs_bedrijf_key
   UNION ALL
   SELECT DECODE (
             a.mld_statusopdr_key,
             6,
             TO_CHAR (fac.gettrackingdate ('ORDAFM', a.mld_opdr_key),
                      'yyyy-mm'),
             'Lopend')
             maand,
          TO_CHAR (fac.gettrackingdate ('ORDAFM', a.mld_opdr_key),
                   'dd-mm-yyyy')
             afgemeld_op,
          'Incidenteel',
          a.bestel_id,
          a.status,
          TO_CHAR (a.besteld_op, 'dd-mm-yyyy'),
          a.prs_bedrijf_naam,
          DECODE (b.fac_usrdata_key,
                  41, b.ontvangststatus || CHR (13) || CHR (10),
                  42, b.ontvangststatus || CHR (13) || CHR (10),
                  43, b.ontvangststatus || CHR (13) || CHR (10),
                  '')
          || COALESCE (c.commentaar, ''),
          a.kosten
     FROM (SELECT o.mld_opdr_key,
                  o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
                     bestel_id,
                  o.mld_statusopdr_key,
                  s.mld_statusopdr_omschrijving status,
                  o.mld_opdr_datumbegin besteld_op,
                  o.mld_opdr_verzonden,
                  u.prs_bedrijf_naam,
                  o.mld_opdr_kosten kosten
             FROM mld_opdr o, mld_statusopdr s, prs_bedrijf u
            WHERE     o.mld_typeopdr_key = 182
                  AND o.mld_statusopdr_key = s.mld_statusopdr_key
                  AND o.mld_uitvoerende_keys = u.prs_bedrijf_key) a
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            ud.fac_usrdata_key,
                            ud.fac_usrdata_omschr ontvangststatus
                       FROM mld_v_aanwezigkenmerkopdr ko, fac_usrdata ud
                      WHERE ko.mld_kenmerk_key = 1
                            AND fac.safe_to_number (
                                  ko.mld_kenmerkopdr_waarde) =
                                  ud.fac_usrdata_key) b
             ON a.mld_opdr_key = b.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            ko.mld_kenmerkopdr_waarde commentaar
                       FROM mld_v_aanwezigkenmerkopdr ko
                      WHERE ko.mld_kenmerk_key = 2) c
             ON a.mld_opdr_key = c.mld_opdr_key;


CREATE OR REPLACE VIEW hpji_v_rap_inkoop_opm
(
   fclt_f_maand,
   hide_f_afgemeld_op,
   fclt_f_soort_bestelling,
   bestel_id,
   status,
   besteld_op,
   fclt_f_leverancier,
   klacht
)
AS
   SELECT v.maand,
          v.afgemeld_op,
          v.soort_bestelling,
          v.bestel_id,
          v.status,
          v.besteld_op,
          v.besteld_bij,
          v.commentaar
     FROM hpji_v_inkoopdata v
    WHERE v.maand = 'Lopend' OR v.commentaar IS NOT NULL;


CREATE OR REPLACE VIEW hpji_v_rap_inkoop_ppi
(
   fclt_f_maand,
   fclt_f_leverancier,
   totaal_aantal,
   klacht_aantal,
   percentage
)
AS
   SELECT sums.maand,
          sums.besteld_bij,
          sums.totaal_aant,
          sums.klacht_aant,
          REPLACE (
             TO_CHAR (sums.klacht_aant / sums.totaal_aant * 100, '999990D9'),
             '.',
             ',')
          || '%'
     FROM (  SELECT x.maand,
                    x.besteld_bij,
                    SUM (x.totaal_aant) totaal_aant,
                    SUM (x.klacht_aant) klacht_aant
               FROM (  SELECT v.maand,
                              v.besteld_bij,
                              COUNT ( * ) totaal_aant,
                              0 klacht_aant
                         FROM hpji_v_inkoopdata v
                        WHERE v.maand <> 'Lopend'
                     GROUP BY v.maand, v.besteld_bij
                     UNION ALL
                       SELECT v.maand,
                              v.besteld_bij,
                              0 totaal_aant,
                              COUNT ( * ) klacht_aant
                         FROM hpji_v_inkoopdata v
                        WHERE v.maand <> 'Lopend' AND v.commentaar IS NOT NULL
                     GROUP BY v.maand, v.besteld_bij) x
           GROUP BY x.maand, x.besteld_bij) sums
    WHERE sums.totaal_aant > 0;




CREATE OR REPLACE VIEW hpji_v_noti_goederenontvangst
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##OPDR##',
                   o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr),
          o.mld_opdr_key,
          NULL,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_kenmerkopdr ko,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE     o.mld_statusopdr_key IN (4, 5, 8)   -- Gefiat./Uitgeg./Geaccept.
          AND o.mld_typeopdr_key = 182
          AND TRUNC (ko.mld_kenmerkopdr_aanmaak) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (ko.mld_kenmerkopdr_aanmaak, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND o.mld_opdr_key = ko.mld_opdr_key
          AND ko.mld_kenmerk_key = 1                        -- Ontvangststatus
          AND ko.mld_kenmerkopdr_waarde IN ('41')                   -- Onjuist
          AND sn.fac_srtnotificatie_code = 'CUST01'
          AND gg.fac_groep_key = 81
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##OPDR##',
                   o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr),
          o.mld_opdr_key,
          NULL,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_v_aanwezigkenmerkopdr ko1,
          mld_v_aanwezigkenmerkopdr ko2,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE o.mld_statusopdr_key IN (4, 5, 8)       -- Gefiat./Uitgeg./Geaccept.
                                           AND o.mld_typeopdr_key = 182
          AND TRUNC (fac.gettrackingdate ('ORDUPD', o.mld_opdr_key)) =
                TRUNC (SYSDATE)
          AND TO_NUMBER(TO_CHAR (
                           fac.gettrackingdate ('ORDUPD', o.mld_opdr_key),
                           'HH24'))
             + 1 = TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND o.mld_opdr_key = ko1.mld_opdr_key
          AND ko1.mld_kenmerk_key = 1                       -- Ontvangststatus
          AND ko1.mld_kenmerkopdr_waarde IN ('42', '43')    -- Retour/Goedgek.
          AND o.mld_opdr_key = ko2.mld_opdr_key
          AND ko2.mld_kenmerk_key = 101                        -- Afleveradres
          AND sn.fac_srtnotificatie_code = 'CUST01'
          AND gg.fac_groep_key = 86
          AND gg.prs_perslid_key IN
                   (SELECT pw.prs_perslid_key
                      FROM prs_perslidwerkplek pw,
                           prs_werkplek wp,
                           alg_ruimte r,
                           alg_verdieping v,
                           alg_gebouw g
                     WHERE     pw.prs_werkplek_key = wp.prs_werkplek_key
                           AND wp.prs_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 =
                                 DECODE (ko2.mld_kenmerkopdr_waarde,
                                         '121', 2,          -- Afleveradres GR
                                         '122', 1,          -- Afleveradres VH
                                         NULL));

-- Bevat CUST02-reminders naar groepen bij aanmaken specifieke WF-meldingen:
-- Nieuwe Medewerker (NM), Vertrek Medewerker (VM) en Kleine Verhuizing (KV).
-- Periodiciteit: elk uur (mbt. in het voorgaande uur aangemaakte meldingen)!

CREATE OR REPLACE VIEW hpji_v_noti_wf_reminder
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS                                                         -- Systeembeheer=89
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (281,     -- verzorgen netwerkacc.+appl.
                                           288,       -- toewijzen telefoonnr.
                                               292,    -- plaatsen PC+randapp.
                                                   300,   -- deact. acc.+appl.
                                                       306    -- patchen netw.
                                                          )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 89
   UNION ALL                                                          -- PZ=93
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (282,             -- opvoeren Persmaster
                                           293,         -- wijzigen Persmaster
                                               297   -- innemen vervoersbewijs
                                                  )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 93
   UNION ALL                                                 -- Huisvesting=82
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (283,              -- toewijzen werkplek
                                           302     -- plannen kleine verhuzing
                                              )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 82
   UNION ALL                                            -- Applicatiebeheer=21
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (287,           -- verzorgen spec. appl.
                                           299      -- deactiveren spec. appl.
                                              )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 21
   UNION ALL                                      -- Managementassistentes=121
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (289,        -- bestellen visitekaartjes
                                           298          -- aankondigen vertrek
                                              )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 121
   UNION ALL                                 -- AD ontvangst en veiligheid=122
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms,
                   '##STDM##',
                   sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_gebruikersgroep gg
    WHERE m.mld_melding_status IN (2, 3)                     -- Te behandelen!
          AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
          AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
                TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
          AND m.mld_stdmelding_key IN (285,        -- verzorgen toegang+pieper
                                           295       -- innemen toegang+pieper
                                              )
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND gg.fac_groep_key = 122;


CREATE OR REPLACE VIEW hpji_v_ruimteaanduiding (ruimtekey, ruimteaanduiding)
AS
   SELECT pa.alg_onroerendgoed_keys, pa.alg_plaatsaanduiding
     FROM alg_v_plaatsaanduiding pa
    WHERE pa.alg_onroerendgoed_type = 'R'
   UNION ALL
   SELECT -1, 'GR-000 (Onbekend)' FROM DUAL
   UNION ALL
   SELECT -1, 'VH-000 (Onbekend)' FROM DUAL;


CREATE OR REPLACE VIEW hpji_v_rap_ruimteoverzicht
(
   fclt_f_locatie,
   fclt_f_gebouw,
   fclt_f_verdieping,
   ruimtenr,
   fclt_f_ruimtefunctie,
   fclt_f_vloerafwerking,
   fclt_f_specialisatie,
   fclt_f_afdeling,
   teken_opp
)
AS
   (SELECT a.alg_locatie_code,
           a.alg_gebouw_code,
           a.alg_verdieping_code,
           a.alg_ruimte_nr,
           a.ruimtefunctie,
           b.vloerafw,
           c.specialisatie,
           d.afdeling,
           a.opp
      FROM (SELECT r.alg_ruimte_key,
                   r.alg_ruimte_nr,
                   r.alg_ruimte_omschrijving,
                   v.alg_verdieping_code,
                   g.alg_gebouw_code,
                   l.alg_locatie_code,
                   sr.alg_srtruimte_omschrijving ruimtefunctie,
                   r.alg_ruimte_bruto_vloeropp opp
              FROM alg_v_aanwezigruimte 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(+)) a
           LEFT JOIN (SELECT ok.alg_onrgoed_key,
                             ud.fac_usrdata_omschr vloerafw
                        FROM alg_onrgoedkenmerk ok, fac_usrdata ud
                       WHERE ok.alg_kenmerk_key = 1020       -- vloerafwerking
                             AND ok.alg_onrgoed_niveau = 'R'
                             AND ok.alg_onrgoedkenmerk_waarde =
                                   ud.fac_usrdata_key) b
              ON a.alg_ruimte_key = b.alg_onrgoed_key
           LEFT JOIN (SELECT ra.alg_ruimte_key,
                             a.prs_afdeling_naam1 specialisatie
                        FROM prs_v_aanwezigruimteafdeling ra,
                             prs_v_afdeling_boom b,
                             prs_v_aanwezigafdeling a
                       WHERE ra.prs_afdeling_key = b.prs_afdeling_key
                             AND b.prs_afdeling_key1 = a.prs_afdeling_key) c
              ON a.alg_ruimte_key = c.alg_ruimte_key
           LEFT JOIN (SELECT ra.alg_ruimte_key, a.prs_afdeling_naam1 afdeling
                        FROM prs_v_aanwezigruimteafdeling ra,
                             prs_v_aanwezigafdeling a
                       WHERE ra.prs_afdeling_key = a.prs_afdeling_key) d
              ON a.alg_ruimte_key = d.alg_ruimte_key);


CREATE OR REPLACE VIEW hpji_v_rap_verplichtingen
(
   bestel_id,
   status,
   omschrijving,
   besteld_op,
   fclt_f_leverancier,
   ontvangststatus,
   kosten
)
AS
   SELECT a.bestel_id,
          a.status,
          a.mld_opdr_omschrijving,
          TO_CHAR (a.besteld_op, 'dd-mm-yyyy'),
          a.prs_bedrijf_naam,
          DECODE (b.fac_usrdata_key,
                  41, b.ontvangststatus || CHR (13) || CHR (10),
                  42, b.ontvangststatus || CHR (13) || CHR (10),
                  43, b.ontvangststatus || CHR (13) || CHR (10),
                  '')
          || COALESCE (c.commentaar, ''),
          a.kosten
     FROM (SELECT o.mld_opdr_key,
                  o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
                     bestel_id,
                  o.mld_statusopdr_key,
                  s.mld_statusopdr_omschrijving status,
                  o.mld_opdr_omschrijving,
                  o.mld_opdr_datumbegin besteld_op,
                  o.mld_opdr_verzonden,
                  u.prs_bedrijf_naam,
                  o.mld_opdr_kosten kosten
             FROM mld_opdr o, mld_statusopdr s, prs_bedrijf u
            WHERE     o.mld_typeopdr_key = 182
                  AND o.mld_statusopdr_key <> 6
                  AND o.mld_statusopdr_key = s.mld_statusopdr_key
                  AND o.mld_uitvoerende_keys = u.prs_bedrijf_key) a
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            ud.fac_usrdata_key,
                            ud.fac_usrdata_omschr ontvangststatus
                       FROM mld_v_aanwezigkenmerkopdr ko, fac_usrdata ud
                      WHERE ko.mld_kenmerk_key = 1
                            AND fac.safe_to_number (
                                  ko.mld_kenmerkopdr_waarde) =
                                  ud.fac_usrdata_key) b
             ON a.mld_opdr_key = b.mld_opdr_key
          LEFT JOIN (SELECT ko.mld_opdr_key,
                            ko.mld_kenmerkopdr_waarde commentaar
                       FROM mld_v_aanwezigkenmerkopdr ko
                      WHERE ko.mld_kenmerk_key = 2) c
             ON a.mld_opdr_key = c.mld_opdr_key;


CREATE OR REPLACE FUNCTION hpji_res_deel_maandbez (p_reskey   IN NUMBER,
                                                   yyyymm     IN VARCHAR2)
   RETURN NUMBER
IS
   v_bez         NUMBER;
   v_van_date    DATE;
   v_van_uur     NUMBER;
   v_tot_date    DATE;
   v_tot_uur     NUMBER;
   v_loop_date   DATE;
   v_count       NUMBER;
BEGIN
   v_bez := 0;

   SELECT TRUNC (res_rsv_deel_van),
          DECODE (
             SIGN (
                ( (res_rsv_deel_van - TRUNC (res_rsv_deel_van)) * 24) - 8),
             -1,
             8,
             DECODE (
                SIGN( ( (res_rsv_deel_van - TRUNC (res_rsv_deel_van)) * 24)
                     - 18),
                -1,
                ( (res_rsv_deel_van - TRUNC (res_rsv_deel_van)) * 24),
                18)),
          TRUNC (res_rsv_deel_tot),
          DECODE (
             SIGN (
                ( (res_rsv_deel_tot - TRUNC (res_rsv_deel_tot)) * 24) - 8),
             -1,
             8,
             DECODE (
                SIGN( ( (res_rsv_deel_tot - TRUNC (res_rsv_deel_tot)) * 24)
                     - 18),
                -1,
                ( (res_rsv_deel_tot - TRUNC (res_rsv_deel_tot)) * 24),
                18))
     INTO v_van_date,
          v_van_uur,
          v_tot_date,
          v_tot_uur
     FROM res_rsv_deel
    WHERE res_rsv_deel_key = p_reskey;

   IF (TO_CHAR (v_van_date, 'yyyy-mm') = yyyymm)
   THEN
      v_loop_date := v_van_date;
   ELSE
      v_loop_date := TO_DATE (yyyymm || '01', 'yyyy-mmdd');
   END IF;

   WHILE (v_loop_date <= v_tot_date
          AND TO_CHAR (v_loop_date, 'yyyy-mm') = yyyymm)
   LOOP
      SELECT COUNT ( * )
        INTO v_count
        FROM mld_vrije_dagen
       WHERE mld_vrije_dagen_datum = v_loop_date;

      IF (v_count = 0 AND TO_CHAR (v_loop_date, 'd') NOT IN ('1', '7'))
      THEN
         CASE
            WHEN v_van_date = v_tot_date
            THEN
               v_bez := v_bez + (v_tot_uur - v_van_uur);
            WHEN v_loop_date = v_van_date
            THEN
               v_bez := v_bez + v_van_uur - 8;
            WHEN v_loop_date = v_tot_date
            THEN
               v_bez := v_bez + v_tot_uur - 8;
            ELSE
               v_bez := v_bez + 10;
         END CASE;
      END IF;

      v_loop_date := v_loop_date + 1;
   END LOOP;

   RETURN v_bez;
END;
/


CREATE OR REPLACE VIEW hpji_v_rap_res_deel_maandbez
(
   fclt_f_maand,
   fclt_f_catalogus,
   fclt_f_voorziening,
   gebruik,
   beschikbaar,
   bezetting
)
AS
   SELECT a.maand,
          a.catalogus,
          a.voorziening,
          a.gebruik,
          b.beschikbaar,
          REPLACE (TO_CHAR (a.gebruik / b.beschikbaar * 100, '990D9'),
                   '.',
                   ',')
          || '%'
     FROM    (  SELECT hist.maand,
                       td.ins_discipline_omschrijving catalogus,
                       ins_d.ins_deel_omschrijving voorziening,
                       rd.res_deel_key,
                       SUM(hpji_res_deel_maandbez (rd.res_rsv_deel_key,
                                                   hist.maand))
                          gebruik
                  FROM res_v_aanwezigrsv_deel rd,
                       res_deel res_d,
                       ins_deel ins_d,
                       ins_tab_discipline td,
                       (SELECT DISTINCT
                               TO_CHAR (res_rsv_deel_van, 'yyyy-mm') maand
                          FROM res_rsv_deel
                         WHERE TO_CHAR (res_rsv_deel_van, 'yyyymmdd') <
                                  TO_CHAR (SYSDATE, 'yyyymm') || '01') hist
                 WHERE     rd.res_deel_key = res_d.res_deel_key
                       AND res_d.res_ins_deel_key = ins_d.ins_deel_key
                       AND res_d.res_discipline_key = td.ins_discipline_key
                       AND TO_CHAR (rd.res_rsv_deel_van, 'yyyy-mm') <=
                             hist.maand
                       AND TO_CHAR (rd.res_rsv_deel_tot, 'yyyy-mm') >=
                             hist.maand
              GROUP BY hist.maand,
                       td.ins_discipline_omschrijving,
                       ins_d.ins_deel_omschrijving,
                       rd.res_deel_key) a
          LEFT JOIN
             (SELECT hist.maand,
                     fac.count_work_days (
                        TO_DATE (hist.maand || '01', 'yyyy-mmdd'),
                        LAST_DAY (TO_DATE (hist.maand || '01', 'yyyy-mmdd'))
                        + 1)
                     * 10
                        beschikbaar
                FROM (SELECT DISTINCT
                             TO_CHAR (res_rsv_deel_van, 'yyyy-mm') maand
                        FROM res_rsv_deel
                       WHERE TO_CHAR (res_rsv_deel_van, 'yyyymmdd') <
                                TO_CHAR (SYSDATE, 'yyyymm') || '01') hist) b
          ON a.maand = b.maand;


CREATE OR REPLACE VIEW hpji_v_rap_it_inventaris_jaar
(
   hide_f_regel,
   fclt_f_onderdeel,
   fclt_f_rubriek,
   fclt_f_aanschafjaar,
   aantal
)
AS
   SELECT grid.onderdeel || '-' || grid.rubriek regel,
          grid.onderdeel,
          grid.rubriek,
          grid.jaar,
          COALESCE (x.aantal, 0)
     FROM    (SELECT a.prs_afdeling_key onderdeel_key,
                     sd.ins_srtdeel_key rubriek_key,
                     j.jaar jaar,
                     a.prs_afdeling_omschrijving onderdeel,
                     sd.ins_srtdeel_omschrijving rubriek
                FROM (SELECT prs_afdeling_key, prs_afdeling_omschrijving
                        FROM prs_v_aanwezigafdeling
                       WHERE prs_afdeling_parentkey IS NULL
                      UNION ALL
                      SELECT -1 prs_afdeling_key,
                             'Onbekend' prs_afdeling_omschrijving
                        FROM DUAL) a,
                     ins_v_aanwezigsrtdeel sd,
                     ins_v_aanwezigsrtgroep sg,
                     (SELECT DISTINCT
                             TO_CHAR (
                                fac.safe_to_date (ins_kenmerkdeel_waarde,
                                                  'dd-mm-yyyy'),
                                'yyyy')
                                jaar
                        FROM ins_v_aanwezigkenmerkdeel
                       WHERE ins_kenmerk_key = 101) j         -- Aanschafdatum
               WHERE sd.ins_srtgroep_key = sg.ins_srtgroep_key
                     AND sg.ins_discipline_key = 401) grid         -- Hardware
          LEFT JOIN
             (  SELECT asd.prs_afdeling_key1 onderdeel_key,
                       asd.ins_srtdeel_key rubriek_key,
                       j.jaar jaar,
                       COUNT ( * ) aantal
                  FROM    (SELECT DECODE (ra.aantal,
                                          1, ab.prs_afdeling_key1,
                                          -1)
                                     prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d,
                                  alg_v_allonrgoed_gegevens aog,
                                  (  SELECT alg_ruimte_key,
                                            MAX (prs_afdeling_key)
                                               prs_afdeling_key,
                                            COUNT ( * ) aantal
                                       FROM prs_ruimteafdeling
                                   GROUP BY alg_ruimte_key) ra,
                                  prs_v_afdeling_boom ab
                            WHERE d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
                                  AND d.ins_alg_ruimte_key =
                                        aog.alg_onroerendgoed_keys
                                  AND aog.alg_ruimte_key = ra.alg_ruimte_key
                                  AND ra.prs_afdeling_key = ab.prs_afdeling_key
                           UNION ALL
                           SELECT -1 prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d,
                                  alg_v_allonrgoed_gegevens aog
                            WHERE d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
                                  AND d.ins_alg_ruimte_key =
                                        aog.alg_onroerendgoed_keys
                                  AND (aog.alg_ruimte_key IS NULL
                                       OR NOT EXISTS
                                            (SELECT 1
                                               FROM prs_ruimteafdeling ra
                                              WHERE ra.alg_ruimte_key =
                                                       aog.alg_ruimte_key))
                           UNION ALL
                           SELECT ab.prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d, prs_v_afdeling_boom ab
                            WHERE d.ins_alg_ruimte_type = 'A'
                                  AND d.ins_alg_ruimte_key =
                                        ab.prs_afdeling_key
                           UNION ALL
                           SELECT ab.prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d,
                                  prs_perslid p,
                                  prs_v_afdeling_boom ab
                            WHERE     d.ins_alg_ruimte_type = 'P'
                                  AND d.ins_alg_ruimte_key = p.prs_perslid_key
                                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                           UNION ALL
                           SELECT DECODE (ra.aantal,
                                          1, ab.prs_afdeling_key1,
                                          -1)
                                     prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d,
                                  prs_werkplek w,
                                  (  SELECT alg_ruimte_key,
                                            MAX (prs_afdeling_key)
                                               prs_afdeling_key,
                                            COUNT ( * ) aantal
                                       FROM prs_ruimteafdeling
                                   GROUP BY alg_ruimte_key) ra,
                                  prs_v_afdeling_boom ab
                            WHERE     d.ins_alg_ruimte_type = 'W'
                                  AND d.ins_alg_ruimte_key = w.prs_werkplek_key
                                  AND w.prs_alg_ruimte_key = ra.alg_ruimte_key
                                  AND ra.prs_afdeling_key = ab.prs_afdeling_key
                           UNION ALL
                           SELECT -1 prs_afdeling_key1,
                                  d.ins_srtdeel_key,
                                  d.ins_deel_key
                             FROM ins_v_aanwezigdeel d, prs_werkplek w
                            WHERE d.ins_alg_ruimte_type = 'W'
                                  AND d.ins_alg_ruimte_key = w.prs_werkplek_key
                                  AND NOT EXISTS
                                        (SELECT 1
                                           FROM prs_ruimteafdeling ra
                                          WHERE ra.alg_ruimte_key =
                                                   w.prs_alg_ruimte_key)) asd
                       LEFT JOIN
                          (SELECT ins_deel_key,
                                  TO_CHAR (
                                     fac.safe_to_date (ins_kenmerkdeel_waarde,
                                                       'dd-mm-yyyy'),
                                     'yyyy')
                                     jaar
                             FROM ins_v_aanwezigkenmerkdeel
                            WHERE ins_kenmerk_key = 101) j    -- Aanschafdatum
                       ON asd.ins_deel_key = j.ins_deel_key
              GROUP BY asd.prs_afdeling_key1, asd.ins_srtdeel_key, j.jaar) x
          ON     grid.onderdeel_key = x.onderdeel_key
             AND grid.rubriek_key = x.rubriek_key
             AND grid.jaar = x.jaar;

CREATE OR REPLACE  VIEW HPJI_V_RAP_CNT_HUURCONTRACT
(
    CNT_CONTRACT_KEY,
    CNT_CONTRACT_NUMMER,
    CNT_CONTRACT_NUMMER_INTERN,
    CNT_CONTRACT_VERSIE,
    ALG_LOCATIE_KEY,
    ALG_LOCATIE_OMSCHRIJVING,
    ALG_LOCATIE_ADRES,
    ALG_LOCATIE_POSTCODE,
    ALG_LOCATIE_PLAATS,
    ALG_GEBOUW_KEY,
    ALG_GEBOUW_CODE,
    ALG_GEBOUW_NAAM,
    PRS_KOSTENPLAATS_NR_GEB,
    PRS_KOSTENPLAATS_OMS_GEB,
    CNT_CONTRACT_OPMERKING,
    CONTRACTPARTIJ,
    CNT_CONTRACT_LOOPTIJD_VAN,
    CNT_RAPPELDATUM,
    CNT_OPZEGDATUM,
    CNT_CONTRACT_LOOPTIJD_TOT,
    FASE_ACTIEF,
    CNT_CONTRACT_STATUS,
    KOSTEN,
    CNT_CONTRACT_TERMIJNKOSTEN,
    FACTUURTERMIJN,
    JAARKOSTEN,
    CNT_CONTRACT_KORTING,
    BEDDEN,
    ZORGSOORT,
    BEHEERDER,
    KALE_HUUR_MAAND,
    NAAM_HUURDER_GEB_DAT,
    TUIN,
    MAINENERGIE,
    WATERBEDRIJF,
    ZIGGO,
    TOTALGAS
)
AS
    SELECT c.cnt_contract_key,
           cnt_contract_nummer,
           cnt_contract_nummer_intern,
           cnt_contract_versie,
           alg_locatie_key,
           cp.alg_locatie_omschrijving,
           alg_locatie_adres,
           alg_locatie_postcode,
           alg_locatie_plaats,
           alg_gebouw_key,
           alg_gebouw_code,
           alg_gebouw_naam,
           pk.prs_kostenplaats_nr,
           pk.prs_kostenplaats_omschrijving,
           cnt_contract_opmerking,
           COALESCE (prs_bedrijf_naam, pf1.prs_perslid_naam_full)
               contractpartij,
           cnt_contract_looptijd_van,
           cnt.cnt_getrappeldatum (c.cnt_contract_key)
               cnt_rappeldatum,
           cnt.cnt_getopzegdatum (c.cnt_contract_key)
               cnt_opzegdatum,
           cnt_contract_looptijd_tot,
           DECODE (cnt.cnt_contract_status (
                       c.cnt_contract_looptijd_van,
                       cnt.cnt_getrappeldatum (c.cnt_contract_key),
                       cnt.cnt_getopzegdatum (c.cnt_contract_key),
                       c.cnt_contract_looptijd_tot),
                   0, lcl.l ('lcl_cnt_future'),
                   1, lcl.l ('lcl_cnt_topical'),
                   2, lcl.l ('lcl_cnt_warn'),
                   3, lcl.l ('lcl_cnt_cancel'),
                   4, lcl.l ('lcl_cnt_past'))
               fase_actief,
           DECODE (
               c.cnt_contract_status,
               0, DECODE (fac.getsetting ('cnt_contract_approval'),
                          1, lcl.l ('lcl_cnt_active_approval'),
                          lcl.l ('lcl_cnt_active')),
               1, lcl.l ('lcl_cnt_inactive'),
               2, lcl.l ('lcl_cnt_new'),
               3, lcl.l ('lcl_cnt_forapproval'))
               cnt_contract_status,
           ROUND (
               DECODE (
                   fac.getsetting ('cnt_scopeverdeling'),
                   1, cp.cnt_contract_plaats_gewicht,
                   0,   COALESCE (cp.cnt_contract_plaats_gewicht, 1)
                      * c.cnt_contract_kosten
                      / (SELECT DECODE (
                                    SUM (
                                        COALESCE (
                                            cnt_contract_plaats_gewicht,
                                            0)),
                                    0, 1,
                                    SUM (cnt_contract_plaats_gewicht))
                           FROM cnt_contract_plaats ccp
                          WHERE ccp.cnt_contract_key = cnt_contract_key),
                   c.cnt_contract_kosten),
               2)
               kosten,
           c.cnt_contract_termijnkosten,
           (SELECT lcl.x ('cnt_termijn_omschrijving',
                          cnt_termijn_key,
                          cnt_termijn_omschrijving)
              FROM cnt_termijn
             WHERE cnt_termijn_key = c.cnt_contract_termijntermijn)
               factuurtermijn,
           DECODE (
               cnt.termijnjaarfactor (c.cnt_contract_termijntermijn),
               -1, TO_NUMBER (NULL),
                 cnt.termijnjaarfactor (c.cnt_contract_termijntermijn)
               * cnt_contract_termijnkosten)
               jaarkosten,
           c.cnt_contract_korting,
           (SELECT cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract ck
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 281)
               bedden,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 241
                   AND ud.fac_usrtab_key = 385
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               zorgsoort,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 301
                   AND ud.fac_usrtab_key = 541
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               beheerder,
           (SELECT cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract ck
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 341)
               kale_huur_maand,
           (SELECT cnt_kenmerkcontract_waarde
              FROM cnt_kenmerkcontract ck
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 342)
               naam_huurder_geb_dat,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 423
                   AND ud.fac_usrtab_key = 643
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               tuin,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 421
                   AND ud.fac_usrtab_key = 641
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               mainenergie,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 422
                   AND ud.fac_usrtab_key = 642
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               waterbedrijf,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 561
                   AND ud.fac_usrtab_key = 681
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               ziggo,
           (SELECT fac_usrdata_omschr
              FROM cnt_kenmerkcontract ck, fac_usrdata ud
             WHERE     cnt_contract_key = c.cnt_contract_key
                   AND cnt_kenmerk_key = 581
                   AND ud.fac_usrtab_key = 81
                   AND cnt_kenmerkcontract_waarde = fac_usrdata_key)
               totalgas
      FROM cnt_contract                 c,
           (SELECT cp_1.cnt_contract_key,
                   l.alg_locatie_key,
                   l.alg_locatie_omschrijving,
                   l.alg_locatie_code,
                   l.alg_locatie_adres,
                   l.alg_locatie_postcode,
                   l.alg_locatie_plaats,
                   g.alg_gebouw_key,
                   g.alg_gebouw_code,
                   g.alg_gebouw_naam,
                   g.prs_kostenplaats_key,
                   cp_1.cnt_contract_plaats_gewicht
              FROM cnt_contract_plaats cp_1,
                   alg_gebouw g,
                   alg_locatie l
             WHERE     cp_1.cnt_contract_plaats_verwijder IS NULL
                   AND cp_1.cnt_alg_plaats_key = g.alg_gebouw_key
                   AND g.alg_locatie_key = l.alg_locatie_key
                   AND cp_1.cnt_alg_plaats_code = 'G'
            UNION ALL
            SELECT cp_2.cnt_contract_key,
                   l.alg_locatie_key,
                   l.alg_locatie_omschrijving,
                   l.alg_locatie_code,
                   l.alg_locatie_adres,
                   l.alg_locatie_postcode,
                   l.alg_locatie_plaats,
                   NULL,
                   NULL,
                   NULL,
                   NULL,
                   cp_2.cnt_contract_plaats_gewicht
              FROM cnt_contract_plaats cp_2,
                   alg_locatie l
             WHERE     cp_2.cnt_contract_plaats_verwijder IS NULL
                   AND cp_2.cnt_alg_plaats_key = l.alg_locatie_key
                   AND cp_2.cnt_alg_plaats_code = 'L') cp,
           prs_bedrijf                  b,
           prs_v_perslid_fullnames_all  pf1,
           prs_kostenplaats             pk
     WHERE     c.ins_discipline_key = 1101
           AND c.cnt_contract_verwijder IS NULL
           AND c.cnt_contract_key = cp.cnt_contract_key(+)
           AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key(+)
           AND c.cnt_prs_perslid_key = pf1.prs_perslid_key(+)
           AND cp.prs_kostenplaats_key = pk.prs_kostenplaats_key(+);


CREATE OR REPLACE VIEW hpji_v_rap_it_inventaris_stuk
(
   fclt_f_onderdeel,
   fclt_f_rubriek,
   obj_id,
   fclt_f_merk,
   fclt_f_model,
   fclt_d_aanschafdatum,
   fclt_f_vestiging,
   ruimte_nr,
   ruimte_oms
)
AS
   SELECT a.prs_afdeling_omschrijving,
          sd.ins_srtdeel_omschrijving,
          asd.ins_deel_omschrijving,
          x.merk,
          y.model,
          TO_CHAR (z.datum, 'dd-mm-yyyy'),
          asd.vestiging,
          asd.ruimte_nr,
          asd.ruimte_oms
     FROM (SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  DECODE (rv.aantal, 1, rv.prs_afdeling_key1, -1)
                     prs_afdeling_key1,
                  aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
                     vestiging,
                  aog.alg_ruimte_nr ruimte_nr,
                  aog.alg_ruimte_omschrijving ruimte_oms
             FROM ins_v_aanwezigdeel d,
                  alg_v_allonrgoed_gegevens aog,
                  (  SELECT alg_ruimte_key,
                            MAX (prs_afdeling_key1) prs_afdeling_key1,
                            COUNT ( * ) aantal
                       FROM prs_ruimteafdeling ra, prs_v_afdeling_boom ab
                      WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
                   GROUP BY ra.alg_ruimte_key) rv
            WHERE     d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
                  AND d.ins_alg_ruimte_key = aog.alg_onroerendgoed_keys
                  AND aog.alg_ruimte_key = rv.alg_ruimte_key
           UNION ALL
           SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  -1 prs_afdeling_key1,
                  aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
                     vestiging,
                  aog.alg_ruimte_nr ruimte_nr,
                  aog.alg_ruimte_omschrijving ruimte_oms
             FROM ins_v_aanwezigdeel d, alg_v_allonrgoed_gegevens aog
            WHERE d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
                  AND d.ins_alg_ruimte_key = aog.alg_onroerendgoed_keys
                  AND (aog.alg_ruimte_key IS NULL
                       OR NOT EXISTS
                            (SELECT 1
                               FROM prs_ruimteafdeling ra
                              WHERE ra.alg_ruimte_key = aog.alg_ruimte_key))
           UNION ALL
           SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  ab.prs_afdeling_key1,
                  'Onbekend',
                  NULL ruimte_nr,
                  NULL ruimte_oms
             FROM ins_v_aanwezigdeel d, prs_v_afdeling_boom ab
            WHERE d.ins_alg_ruimte_type = 'A'
                  AND d.ins_alg_ruimte_key = ab.prs_afdeling_key
           UNION ALL
           SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  ab.prs_afdeling_key1,
                  'Onbekend',
                  NULL ruimte_nr,
                  NULL ruimte_oms
             FROM ins_v_aanwezigdeel d, prs_perslid p, prs_v_afdeling_boom ab
            WHERE     d.ins_alg_ruimte_type = 'P'
                  AND d.ins_alg_ruimte_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
           UNION ALL
           SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  DECODE (rv.aantal, 1, rv.prs_afdeling_key1, -1)
                     prs_afdeling_key1,
                  aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
                     vestiging,
                  aog.alg_ruimte_nr ruimte_nr,
                  aog.alg_ruimte_omschrijving ruimte_oms
             FROM ins_v_aanwezigdeel d,
                  prs_werkplek w,
                  (  SELECT alg_ruimte_key,
                            MAX (prs_afdeling_key1) prs_afdeling_key1,
                            COUNT ( * ) aantal
                       FROM prs_ruimteafdeling ra, prs_v_afdeling_boom ab
                      WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
                   GROUP BY ra.alg_ruimte_key) rv,
                  alg_v_allonrgoed_gegevens aog
            WHERE     d.ins_alg_ruimte_type = 'W'
                  AND d.ins_alg_ruimte_key = w.prs_werkplek_key
                  AND w.prs_alg_ruimte_key = rv.alg_ruimte_key
                  AND rv.alg_ruimte_key = aog.alg_ruimte_key
           UNION ALL
           SELECT d.ins_srtdeel_key,
                  d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  -1 prs_afdeling_key1,
                  aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
                     vestiging,
                  aog.alg_ruimte_nr ruimte_nr,
                  aog.alg_ruimte_omschrijving ruimte_oms
             FROM ins_v_aanwezigdeel d,
                  prs_werkplek w,
                  alg_v_allonrgoed_gegevens aog
            WHERE d.ins_alg_ruimte_type = 'W'
                  AND d.ins_alg_ruimte_key = w.prs_werkplek_key
                  AND NOT EXISTS
                        (SELECT 1
                           FROM prs_ruimteafdeling ra
                          WHERE ra.alg_ruimte_key = w.prs_alg_ruimte_key)
                  AND w.prs_alg_ruimte_key = aog.alg_ruimte_key) asd,
          ins_srtdeel sd,
          ins_srtgroep sg,
          (SELECT prs_afdeling_key, prs_afdeling_omschrijving
             FROM prs_v_aanwezigafdeling
            WHERE prs_afdeling_parentkey IS NULL
           UNION ALL
           SELECT -1 prs_afdeling_key, 'Onbekend' prs_afdeling_omschrijving
             FROM DUAL) a,
          (SELECT ins_deel_key, ins_kenmerkdeel_waarde merk
             FROM ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
            WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
                  AND k.ins_srtkenmerk_key = 21) x,                    -- Merk
          (SELECT ins_deel_key, ins_kenmerkdeel_waarde model
             FROM ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
            WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
                  AND k.ins_srtkenmerk_key = 22) y,                   -- Model
          (SELECT ins_deel_key,
                  fac.safe_to_date (ins_kenmerkdeel_waarde, 'dd-mm-yyyy')
                     datum
             FROM ins_v_aanwezigkenmerkdeel
            WHERE ins_kenmerk_key = 101) z                    -- Aanschafdatum
    WHERE     asd.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = 401                          -- Hardware
          AND asd.prs_afdeling_key1 = a.prs_afdeling_key
          AND asd.ins_deel_key = x.ins_deel_key(+)
          AND asd.ins_deel_key = y.ins_deel_key(+)
          AND asd.ins_deel_key = z.ins_deel_key(+);


-- HPJI#28971 Geleverde bestellingen bloemen automatisch afmelden

CREATE OR REPLACE PROCEDURE hpji_export_bes_afmeld (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2,
                                                    p_filedir    IN VARCHAR2,
                                                    p_filename   IN VARCHAR2)
AS
   -- De bestelopdrachten die ik als compleet geleverd veronderstel,
   -- die zouden in principe meer werkdagen geleden geleverd zijn dan
   -- de 'notidagen' van de catalogus aangeeft.
   -- bes_discipline    201   Bloemen Groningen
   -- bes_discipline    202   Bloemen Veenhuizen
   CURSOR cbopi
   IS
      SELECT boi.bes_bestelopdr_item_key,
             bo.bes_bestelopdr_key,
             b.bes_bestelling_key
        FROM bes_bestelopdr bo,
             bes_bestelopdr_item boi,
             bes_bestelling_item bi,
             bes_bestelling b,
             bes_srtdeel sd,
             bes_srtgroep sg,
             bes_disc_params bdp
       WHERE     bo.bes_bestelopdr_status = 4                 -- In bestelling
             AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
             AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
             AND bi.bes_bestelling_key = b.bes_bestelling_key
             AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
             AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key = bdp.bes_ins_discipline_key
             AND sg.ins_discipline_key IN (201, 202)
             AND bdp.bes_disc_params_noti_dagen IS NOT NULL
             AND (b.bes_bestelling_leverdatum IS NULL
                  OR fac.datumtijdplusuitvoertijd (
                       b.bes_bestelling_leverdatum,
                       bdp.bes_disc_params_noti_dagen,
                       'DAGEN') < SYSDATE);

   -- Alle bestelaanvragen die (nu) geheel geleverd zijn sluiten we af.
   CURSOR cbesi
   IS
      SELECT bi.bes_bestelling_item_key, b.bes_bestelling_key
        FROM bes_bestelling b,
             bes_bestelling_item bi,
             bes_bestelopdr_item boi,
             bes_srtdeel sd,
             bes_srtgroep sg
       WHERE     b.bes_bestelling_status = 5                        -- Besteld
             AND b.bes_bestelling_key = bi.bes_bestelling_key
             AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND boi.bes_bestelopdr_item_aantal =
                   boi.bes_bestelopdr_item_aantalontv
             AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
             AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key IN (201, 202);

   v_errorhint      VARCHAR2 (1000);
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   FOR r IN cbopi
   LOOP
      -- Zeg dat alles geleverd is wat besteld is.
      UPDATE bes_bestelopdr_item
         SET bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal
       WHERE bes_bestelopdr_item_key = r.bes_bestelopdr_item_key;

      bes.updatebestelopdrstatus (r.bes_bestelopdr_key, NULL);
   END LOOP;

   FOR r IN cbesi
   LOOP
      -- Sluit alle aanvraagregels af die nu geheel geleverd zijn.
      UPDATE bes_bestelling_item
         SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal
       WHERE bes_bestelling_item_key = r.bes_bestelling_item_key;

      bes.updatebestellingstatus (r.bes_bestelling_key, NULL);
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      ROLLBACK;
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname,
                    'E',
                    'Proces afmelden bestellingen afgebroken!',
                    v_errormsg);
      COMMIT;
END;
/

/* Formatted on 12-3-2018 15:47:37 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE hpji_import_prs (p_import_key IN NUMBER)
AS
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_errormsg         VARCHAR2 (400);
   v_errorhint        VARCHAR2 (400);
   v_aantal_in_FCLT   NUMBER;
BEGIN
   v_errorhint := 'Generieke update';
   -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;7;2;3;5;'
      || '4;0;0;0;0;11;12;13;0;6;'
      || '8;1;0;0;0;0;14;15;16;0;'
      || '0;0;0;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      'Loginnaam;Naam;Tussenvoegsel;Voorletters;Voornaam;Personeelsnummer;Afdelingscode;Functie;Locatie;Ruimte;Telefoon;Mobiel;Email;Datum in dienst;Datum uit dienst;Domain%');

   -- op basis van het bedrijf wordt straks de autorisatie groep bepaald
   -- het bedrijf dus maar vast bepalen
   UPDATE fac_imp_perslid i
      SET prs_kenmerk5 =
             (SELECT DISTINCT b.prs_bedrijf_key
                FROM prs_v_afdeling a, prs_bedrijf b
               WHERE UPPER (i.prs_afdeling_naam) = a.prs_afdeling_upper
                     AND a.prs_bedrijf_key = b.prs_bedrijf_key);
                     
   -- Zie #55445: personen met een alternatieve inlogcode moeten worden uitgesloten van bijwerken
   -- Deze worden dus uit de importtabel verwijderd, tenzij ze een einddatum hebben in het verleden, dan moeten ze wel netjes beëindigd worden
     DELETE  fac_imp_perslid
          WHERE fac.safe_to_date (prs_kenmerk2, 'dd-mm-yyyy') > SYSDATE
          AND upper(prs_perslid_oslogin) IN (SELECT upper(prs_perslid_oslogin)
                                     FROM prs_perslid p
                                    WHERE p.prs_perslid_oslogin2 IS NOT NULL);

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_errorhint);
END hpji_import_prs;
/


CREATE OR REPLACE PROCEDURE hpji_update_prs (p_import_key IN NUMBER)
IS
   -- Alle personen verwijderen die in het import import bestand voorkomen met een einddatum < vandaag
   -- Personen in de juiste autorisatiegroep zetten.
   -- Match bij HPJI is oslogin, hieronder de query om alle personen te verwijderen die:

   CURSOR c_del
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
        FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
       WHERE UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin)
             AND pf.prs_perslid_key = p.prs_perslid_key    
             AND i.prs_kenmerk2 IS NOT NULL             
             AND fac.safe_to_date (i.prs_kenmerk2, 'dd-mm-yyyy') < SYSDATE;


   v_count   NUMBER;
BEGIN
   -- generic update
   -- 'LOGIN' betekent dat op basis van Login wordt gematched.
   -- 'NR' betekent dat op basis van Personeelsnummer wordt gematched.
   -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
   prs.update_perslid (p_import_key, 'LOGIN', NULL);

   hpji_post_update_perslid(p_import_key);

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



END hpji_update_prs;
/

CREATE OR REPLACE PROCEDURE hpji_post_update_perslid (p_import_key IN NUMBER)
AS
   --- prsleden die vallen onder Elker (28580) of de combi (29670) moeten toegevoegd worden aan de _default groep (1)
   --- als ze daar nog niet in zitten
   CURSOR c_auth_default
   IS
      SELECT DISTINCT prs_perslid_key, prs_kenmerk5
        FROM fac_imp_perslid
       WHERE     prs_kenmerk5 IN (28580, 29670)
             AND fac_import_key = p_import_key
             AND prs_perslid_key IS NOT NULL
             AND prs_perslid_key NOT IN (SELECT prs_perslid_key
                                           FROM fac_gebruikersgroep
                                          WHERE fac_groep_key = 1);

   -- prsleden die vallen onder Het Poortje (21) of de combi (29670) moeten worden toegevoegd aan de groep Bestellen Poortje (721)
   -- als ze daar nog niet in zitten
   CURSOR c_auth_bestellen
   IS
      SELECT DISTINCT prs_perslid_key, prs_kenmerk5
        FROM fac_imp_perslid
       WHERE     prs_kenmerk5 IN (21, 29670)
             AND fac_import_key = p_import_key
             AND prs_perslid_key IS NOT NULL
             AND prs_perslid_key NOT IN (SELECT prs_perslid_key
                                           FROM fac_gebruikersgroep
                                          WHERE fac_groep_key = 721);
BEGIN
   -- plaats personen in de juiste autorisatie groepen
   FOR rec IN c_auth_default
   LOOP
      BEGIN
         INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
             VALUES (rec.prs_perslid_key, 1);
      END;
   END LOOP;

   FOR rec IN c_auth_bestellen
   LOOP
      BEGIN
         INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
             VALUES (rec.prs_perslid_key, 721);

         -- Medewerkers van mogen Het Poortje (21) mogen niet in de _default groep
         -- Dus als zij daar in zitten moeten zij daar uit
         DELETE FAC_GEBRUIKERSGROEP
          WHERE     prs_perslid_key = rec.prs_perslid_key
                AND rec.prs_kenmerk5 = 21
                AND fac_groep_key = 1;
      END;
   END LOOP;

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