-- Script containing customer specific configuration sql statements for Asito Digitaal Logboek
-- $Revision$
-- $Id$


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

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

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


CREATE OR REPLACE PACKAGE asdl
AS
   FUNCTION check_valid_schedule (p_deel_key IN NUMBER)
                          RETURN VARCHAR2;

   FUNCTION get_bits_str (p_eenheid      IN     NUMBER,
                          p_bits         IN     NUMBER)
                          RETURN VARCHAR2;

   FUNCTION get_bits_value (p_eenheid      IN     NUMBER,
                          p_rangorde    IN NUMBER,
                          p_dagen         IN     VARCHAR2)
                          RETURN NUMBER;

   FUNCTION get_bits_rangorde (p_eenheid      IN     NUMBER,
                          p_bits         IN     NUMBER)
                          RETURN NUMBER;

   FUNCTION get_kenmerks (p_module           IN VARCHAR2,
                          p_srtkenmerk_key   IN NUMBER,
                          p_soort_key        IN NUMBER,
                          p_soort_niveau     IN VARCHAR2,
                          p_link_key         IN NUMBER)
                          RETURN VARCHAR2;

   FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                         p_kenmerk_key   IN NUMBER,
                         p_link_key      IN NUMBER)
                         RETURN VARCHAR2;

   FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2,
                               p_kenmerkdomein_key NUMBER,
                               p_kenmerk_waarde VARCHAR2)
                              RETURN VARCHAR2;
END;
/

CREATE OR REPLACE PACKAGE BODY asdl
AS
   FUNCTION check_valid_schedule (p_deel_key IN NUMBER)
      RETURN VARCHAR2
   AS
      v_srtcontrole_key   NUMBER;
      v_dummydate         DATE;
      v_error_string      VARCHAR2 (200);
   BEGIN
      SELECT ins_srtcontrole_key
        INTO v_srtcontrole_key
        FROM ins_srtcontroledl_xcp x
       WHERE x.ins_deel_key = p_deel_key;

      BEGIN
         SELECT TRUNC (
                   fac.nextcyclusdatedeel (p_deel_key, v_srtcontrole_key, 1))
           INTO v_dummydate
           FROM DUAL;

         v_error_string := NULL;
      EXCEPTION
         WHEN OTHERS
         THEN
            v_error_string := SUBSTR (SQLERRM, 1, 200);
      END;

      RETURN v_error_string;
   END;

   FUNCTION get_bits_str (p_eenheid      IN     NUMBER,
                          p_bits         IN     NUMBER) RETURN VARCHAR2
   AS
      v_result VARCHAR2(100);
      m_bits NUMBER;
   BEGIN

      IF p_eenheid = 0
      THEN
         -- uurlijks doen we nog even niets mee
         NULL;
      ELSIF p_eenheid = 1
      THEN
      -- dagelijks doen we nog even niets mee
         NULL;
      ELSIF p_eenheid = 2
      THEN
         -- wekelijks
         IF BITAND (p_bits, 2) <> 0 THEN v_result := 'Ma'; END IF;
         IF BITAND (p_bits, 4) <> 0 THEN v_result := v_result || 'Di'; END IF;
         IF BITAND (p_bits, 8) <> 0 THEN v_result := v_result || 'Wo'; END IF;
         IF BITAND (p_bits, 16) <> 0 THEN v_result := v_result || 'Do'; END IF;
         IF BITAND (p_bits, 32) <> 0 THEN v_result := v_result || 'Vr'; END IF;
         IF BITAND (p_bits, 64) <> 0 THEN v_result := v_result || 'Za'; END IF;
         IF BITAND (p_bits, 1) <> 0 THEN v_result := v_result || 'Zo'; END IF;
         IF BITAND (p_bits, 128) <> 0 THEN v_result := v_result || 'NF'; END IF;
      ELSIF p_eenheid = 3
      THEN
         -- maandelijks
                 IF BITAND (p_bits, 2) <> 0 THEN v_result := 'Ma'; END IF;
         IF BITAND (p_bits, 4) <> 0 THEN v_result := v_result || 'Di'; END IF;
         IF BITAND (p_bits, 8) <> 0 THEN v_result := v_result || 'Wo'; END IF;
         IF BITAND (p_bits, 16) <> 0 THEN v_result := v_result || 'Do'; END IF;
         IF BITAND (p_bits, 32) <> 0 THEN v_result := v_result || 'Vr'; END IF;
         IF BITAND (p_bits, 64) <> 0 THEN v_result := v_result || 'Za'; END IF;
         IF BITAND (p_bits, 1) <> 0 THEN v_result := v_result || 'Zo'; END IF;
         IF BITAND (p_bits, 128) <> 0 THEN v_result := v_result || 'NF'; END IF;
      END IF;
      RETURN v_result;
   END;

   FUNCTION get_bits_value (p_eenheid      IN     NUMBER,
                          p_rangorde    IN NUMBER,
                          p_dagen         IN     VARCHAR2) RETURN NUMBER
      AS
        v_result NUMBER;
        BEGIN
        v_result := 0;
          IF INSTR(UPPER(p_dagen), 'MA') > 0 THEN v_result := v_result + 2; END IF;
          IF INSTR(UPPER(p_dagen), 'DI') > 0 THEN v_result := v_result + 4; END IF;
          IF INSTR(UPPER(p_dagen), 'WO') > 0 THEN v_result := v_result + 8; END IF;
          IF INSTR(UPPER(p_dagen), 'DO') > 0 THEN v_result := v_result + 16; END IF;
          IF INSTR(UPPER(p_dagen), 'VR') > 0 THEN v_result := v_result + 32; END IF;
          IF INSTR(UPPER(p_dagen), 'ZA') > 0 THEN v_result := v_result + 64; END IF;
          IF INSTR(UPPER(p_dagen), 'ZO') > 0 THEN v_result := v_result + 1; END IF;
          IF INSTR(UPPER(p_dagen), 'NF') > 0 THEN v_result := v_result + 128; END IF;
          IF p_rangorde IS NOT NULL
          THEN
              v_result := v_result + (p_rangorde * 256);
          END IF;
        RETURN v_result;
    END;

   FUNCTION get_bits_rangorde (p_eenheid      IN     NUMBER,
                          p_bits         IN     NUMBER) RETURN NUMBER
   AS
      m_bits NUMBER;
   BEGIN

      IF p_eenheid = 3
      THEN
         -- maandelijks
         m_bits := BITAND(p_bits, 256 + 512 + 1024) / 256;
      END IF;
      RETURN m_bits;
   END;

   FUNCTION get_kenmerks (p_module           IN VARCHAR2,
                          p_srtkenmerk_key   IN NUMBER,
                          p_soort_key        IN NUMBER,
                          p_soort_niveau     IN VARCHAR2,
                          p_link_key         IN NUMBER)
                          RETURN VARCHAR2
   AS
      v_kenmerk_key     mld_srtkenmerk.mld_srtkenmerk_key%TYPE;
   BEGIN
      CASE p_module
         WHEN 'MLD'
         THEN
            SELECT k.mld_kenmerk_key
              INTO v_kenmerk_key
              FROM mld_kenmerk k
             WHERE k.mld_kenmerk_verwijder IS NULL
               AND mld_srtkenmerk_key = p_srtkenmerk_key
               AND mld_stdmelding_key = p_soort_key
               AND mld_kenmerk_niveau = p_soort_niveau;
         WHEN 'INS'
         THEN
            SELECT k.ins_kenmerk_key
              INTO v_kenmerk_key
              FROM ins_kenmerk k
             WHERE k.ins_kenmerk_verwijder IS NULL
               AND ins_srtkenmerk_key = p_srtkenmerk_key
               AND ins_srtinstallatie_key = p_soort_key
               AND ins_kenmerk_niveau = p_soort_niveau;
      END CASE;

      RETURN asdl.get_kenmerk (p_module,
                               v_kenmerk_key,
                               p_link_key);
   END;


   FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                         p_kenmerk_key   IN NUMBER,
                         p_link_key      IN NUMBER)
   RETURN VARCHAR2
   AS
      v_kenmerk_type     mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
      v_kenmerk_waarde   mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
      v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
      v_kenmerk_niveau   ins_kenmerk.ins_kenmerk_niveau%TYPE;
   BEGIN
      CASE p_module
         WHEN 'MLD'
         THEN
            SELECT mld_srtkenmerk_kenmerktype,
                   sk.fac_kenmerkdomein_key,
                   km.mld_kenmerkmelding_waarde
              INTO v_kenmerk_type,
                   v_kenmerkdomein_key,
                   v_kenmerk_waarde
              FROM mld_v_aanwezigkenmerkmelding km,
                   mld_kenmerk k,
                   mld_srtkenmerk sk
             WHERE km.mld_melding_key = p_link_key
               AND km.mld_kenmerk_key = p_kenmerk_key
               AND km.mld_kenmerk_key = k.mld_kenmerk_key
               AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
         WHEN 'CNT'
         THEN
            SELECT cnt_srtkenmerk_kenmerktype,
                   sk.fac_kenmerkdomein_key,
                   kc.cnt_kenmerkcontract_waarde
              INTO v_kenmerk_type,
                   v_kenmerkdomein_key,
                   v_kenmerk_waarde
              FROM cnt_kenmerkcontract kc,
                   cnt_kenmerk k,
                   cnt_srtkenmerk sk
             WHERE kc.cnt_contract_key = p_link_key
               AND kc.cnt_kenmerk_key = p_kenmerk_key
               AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
               AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key;
         WHEN 'ALG'
         THEN
            SELECT alg_kenmerk_kenmerktype,
                   k.fac_kenmerkdomein_key,
                   aogk.alg_onrgoedkenmerk_waarde
              INTO v_kenmerk_type,
                   v_kenmerkdomein_key,
                   v_kenmerk_waarde
              FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
             WHERE aogk.alg_onrgoed_key = p_link_key
               AND aogk.alg_kenmerk_key = p_kenmerk_key
               AND aogk.alg_kenmerk_key = k.alg_kenmerk_key;
         WHEN 'PRS'
         THEN
            SELECT prs_kenmerk_kenmerktype,
                   k.fac_kenmerkdomein_key,
                   pkl.prs_kenmerklink_waarde
              INTO v_kenmerk_type,
                   v_kenmerkdomein_key,
                   v_kenmerk_waarde
              FROM prs_kenmerklink pkl, prs_kenmerk k
             WHERE pkl.prs_link_key = p_link_key
               AND pkl.prs_kenmerk_key = p_kenmerk_key
               AND pkl.prs_kenmerk_key = k.prs_kenmerk_key;
         WHEN 'INS'
         THEN
            SELECT k.ins_kenmerk_niveau
              INTO v_kenmerk_niveau
              FROM ins_kenmerk k
             WHERE ins_kenmerk_key = p_kenmerk_key;

            IF v_kenmerk_niveau = 'C' THEN
               SELECT sk.ins_srtkenmerk_kenmerktype,
                      sk.fac_kenmerkdomein_key,
                      ikds.ins_kmdeelsrtcontr_waarde
                 INTO v_kenmerk_type,
                      v_kenmerkdomein_key,
                      v_kenmerk_waarde
                 FROM ins_kmdeelsrtcontr ikds, ins_kenmerk k, ins_srtkenmerk sk
                WHERE ikds.ins_kmdeelsrtcontr_key = p_link_key
                  AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL
                  AND ikds.ins_kenmerk_key = p_kenmerk_key
                  AND ikds.ins_kenmerk_key = k.ins_kenmerk_key
                  AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
            ELSE
               SELECT sk.ins_srtkenmerk_kenmerktype,
                      sk.fac_kenmerkdomein_key,
                      ikd.ins_kenmerkdeel_waarde
                 INTO v_kenmerk_type,
                      v_kenmerkdomein_key,
                      v_kenmerk_waarde
                 FROM ins_kenmerkdeel ikd, ins_kenmerk k, ins_srtkenmerk sk
                WHERE ikd.ins_deel_key = p_link_key
                  AND ikd.ins_kenmerkdeel_verwijder IS NULL
                  AND ikd.ins_kenmerk_key = p_kenmerk_key
                  AND ikd.ins_kenmerk_key = k.ins_kenmerk_key
                  AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
            END IF;
      END CASE;

      RETURN asdl.get_kenmerkwaarde (v_kenmerk_type,
                                     v_kenmerkdomein_key,
                                     v_kenmerk_waarde);
   END;


   FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2,
                               p_kenmerkdomein_key NUMBER,
                               p_kenmerk_waarde VARCHAR2)
                              RETURN VARCHAR2
   AS
      v_result VARCHAR2(4000);
   BEGIN
   	IF p_kenmerk_type = 'R' OR p_kenmerk_type = 'S' THEN
       v_result := fac.getdomeinwaarde (p_kenmerkdomein_key,
                      p_kenmerk_waarde);
     ELSIF p_kenmerk_type = 'D' THEN
       v_result := TO_CHAR (fac.safe_to_date (p_kenmerk_waarde, 'dd-mm-yyyy'), 'yyyy-mm-dd');
     ELSE
       v_result := p_kenmerk_waarde;
     END IF;
     return v_result;
   END;
END;
/

CREATE OR REPLACE VIEW asdl_v_perslid_2250
(
   prs_perslid_key,
   prs_perslid_naam_full,
   prs_perslid_verwijder
)
AS
   SELECT p.prs_perslid_key,
          pf.prs_perslid_naam_full,
          p.prs_perslid_verwijder
     FROM prs_v_perslid_fullnames_all pf, prs_perslid p
    WHERE pf.prs_perslid_key = p.prs_perslid_key AND p.prs_afdeling_key = 62;


CREATE OR REPLACE VIEW asdl_v_rap_werkprogramma
(
   alg_district_omschrijving,
   alg_locatie_code,
   [REDACTED],
   alg_locatie_omschrijving,
   ins_srtdeel_code,
   ins_srtcontrole_omschrijving,
   ins_srtcontroledl_xcp_eenheid,
   ins_srtcontroledl_xcp_periode,
   frequentie,
   afwijking,
   uitvoering,
   info
)
AS
   SELECT alg_district_omschrijving,
          alg_locatie_code,
          l.alg_locatie_key,
          alg_locatie_omschrijving,
          ins_srtdeel_code,
          ins_srtcontrole_omschrijving,
          DECODE (ins_srtcontroledl_xcp_eenheid,
                  2, 'week',
                  3, 'maand',
                  'jaar'),
          ins_srtcontroledl_xcp_periode,
          DECODE (ins_srtcontroledl_xcp_eenheid, 2, 52, 3, 12, 1)
          / ins_srtcontroledl_xcp_periode,
          (SELECT alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk aogk
            WHERE alg_onrgoedkenmerk_verwijder IS NULL
              AND aogk.alg_onrgoed_key = l.alg_locatie_key
              AND aogk.alg_kenmerk_key = 1000)
             afw,
          (SELECT alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk aogk
            WHERE alg_onrgoedkenmerk_verwijder IS NULL
              AND aogk.alg_onrgoed_key = l.alg_locatie_key
              AND aogk.alg_kenmerk_key = 1020)
             uitv,
          REPLACE (
             REPLACE (
                REPLACE (REPLACE (ins_srtcontrole_info, '[table]'),
                         '[/table]'),
                '[',
                '<'),
             ']',
             '>')
     FROM alg_locatie l,
          alg_district d,
          ins_srtdeel sd,
          ins_v_deel_gegevens dg,
          ins_srtcontroledl_xcp x,
          ins_srtcontrole sc
    WHERE l.alg_district_key = d.alg_district_key
      AND l.alg_locatie_key = dg.alg_locatie_key
      AND dg.ins_srtdeel_key = sc.ins_srtinstallatie_key
      AND x.ins_srtcontrole_key = sc.ins_srtcontrole_key
      AND x.ins_deel_key = dg.ins_deel_key
      AND dg.ins_srtdeel_key = sd.ins_srtdeel_key;

-- Schoonmaakacties voor vandaag.
CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_today
(
   aantal,
   eerste,
   ruimte_key,
   ruimte_nr,
   alg_ruimte_omschrijving,
   ins_deel_omschrijving,
   alg_gebouw_omschrijving,
   alg_gebouw_upper,
   alg_locatie_omschrijving,
   alg_locatie_key,
   ins_deel_key,
   ins_srtcontroledl_xcp_groep,
   [REDACTED],
   alg_locatie_x,
   ins_srtcontrole_key,
   maand,
   periodiek,
   ins_deelsrtcontrole_key
)
AS
     SELECT COUNT (isc.ins_srtcontrole_key) aantal_srtcontoles,
            MIN (isc.ins_srtcontrole_key) min_srtcontrole_key,
            r.alg_ruimte_key,
            r.alg_ruimte_nr,
            'Wekelijks onderhoud',
            REPLACE (d.ins_deel_omschrijving, alg_gebouw_upper || '-'),
            REPLACE (alg_gebouw_omschrijving, alg_gebouw_upper || ' - '),
            alg_gebouw_upper,
            l.alg_locatie_omschrijving,
            l.alg_locatie_key,
            id.ins_deel_key,
            ins_srtcontroledl_xcp_groep,
            COALESCE (p.prs_perslid_key, -1) prs_perslid_key,
            alg_locatie_x,
            isc.ins_srtcontrole_key,
            DECODE (ins_srtcontroledl_xcp_eenheid, 3, 1, 0) maand,
            DECODE (ins_srtcontroledl_xcp_eenheid, 3, ' Periodiek', '') periodiek,
            (SELECT MAX (ins_deelsrtcontrole_key) ins_deelsrtcontrole_key
               FROM ins_deelsrtcontrole dsc
              WHERE dsc.ins_deel_key = id.ins_deel_key
                AND dsc.ins_srtcontrole_key = isc.ins_srtcontrole_key
                AND ins_deelsrtcontrole_status NOT IN (5,6))
               ins_deelsrtcontrole_key
       FROM ins_v_deel_gegevens id,
            ins_deel d,
            ins_srtcontrole isc,
            ins_srtcontroledl_xcp xcp,
            prs_kenmerklink kl,
            alg_ruimte r,
            alg_locatie l,
            prs_perslid p
      WHERE id.alg_locatie_key = l.alg_locatie_key
        AND p.alg_onroerendgoed_keys(+) = l.alg_locatie_key
        AND xcp.ins_deel_key = id.ins_deel_key
        AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key
        AND xcp.ins_srtcontroledl_xcp_eenheid IS NOT NULL
        AND (isc.ins_srtcontrole_niveau = 'S'
         AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key
          OR isc.ins_srtcontrole_niveau = 'G'
         AND isc.ins_srtinstallatie_key = id.ins_srtgroep_key
          OR isc.ins_srtcontrole_niveau = 'D'
         AND isc.ins_srtinstallatie_key = id.ins_discipline_key)
        AND kl.prs_kenmerk_key = 1000
        AND kl.prs_kenmerklink_waarde = xcp.ins_srtcontroledl_xcp_groep
        AND id.alg_ruimte_key = r.alg_ruimte_key
        AND kl.prs_link_key = p.prs_perslid_key
        AND id.ins_deel_key = d.ins_deel_key
        AND COALESCE (d.ins_deel_vervaldatum, SYSDATE) >= SYSDATE
        AND ( (  TRUNC (fac.nextcyclusdatedeel (id.ins_deel_key, isc.ins_srtcontrole_key, 1)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) -- periodieke werkzaamheden mag ik de gehele week afmelden.
                 AND NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_status
                          FROM ins_deelsrtcontrole idsc
                         WHERE idsc.ins_deelsrtcontrole_status < 5
                           AND idsc.ins_deel_key = d.ins_deel_key
                           AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key
                            )
                            )
             OR EXISTS (SELECT idsc.ins_deelsrtcontrole_status
                          FROM ins_deelsrtcontrole idsc
                         WHERE idsc.ins_deelsrtcontrole_status < 5
                           AND idsc.ins_deel_key = d.ins_deel_key
                           AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key
                           AND TRUNC(COALESCE(ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_datum_org)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) ) )
   GROUP BY r.alg_ruimte_key,
            r.alg_ruimte_nr,
            kl.prs_link_key,
            isc.ins_srtcontrole_omschrijving,
            alg_gebouw_omschrijving,
            alg_gebouw_upper,
            l.alg_locatie_key,
            d.ins_deel_omschrijving,
            l.alg_locatie_omschrijving,
            id.ins_deel_key,
            ins_srtcontroledl_xcp_groep,
            p.prs_perslid_key,
            alg_locatie_x,
            isc.ins_srtcontrole_key,
            ins_srtcontroledl_xcp_eenheid;

-- Schoonmaak acties voor vandaag op mijn route.
CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_today1
(
   aantal,
   eerste,
   ruimte_key,
   ruimte_nr,
   alg_ruimte_omschrijving,
   ins_deel_omschrijving,
   alg_gebouw_omschrijving,
   alg_gebouw_upper,
   alg_locatie_omschrijving,
   alg_locatie_key,
   alg_district_key,
   alg_regio_key,
   ins_deel_key,
   ins_discipline_key,
   ins_srtcontroledl_xcp_groep,
   [REDACTED],
   alg_locatie_x,
   ins_srtcontrole_key,
   volgorde,
   maand
)
AS
     SELECT COUNT (isc.ins_srtcontrole_key) aantal_srtcontoles,
            MIN (isc.ins_srtcontrole_key) min_srtcontrole_key,
            r.alg_ruimte_key,
            r.alg_ruimte_nr,
            alg_ruimte_omschrijving,
            REPLACE (d.ins_deel_omschrijving, alg_gebouw_upper || '-'),
            REPLACE (alg_gebouw_omschrijving, alg_gebouw_upper || ' - '),
            alg_gebouw_upper,
            l.alg_locatie_omschrijving,
            l.alg_locatie_key,
            di.alg_district_key,
            di.alg_regio_key,
            id.ins_deel_key,
            id.ins_discipline_key,
            ins_srtcontroledl_xcp_groep,
            kl.prs_link_key,
            alg_locatie_x,
            isc.ins_srtcontrole_key,
            w.volgorde,
            DECODE(ins_srtcontroledl_xcp_eenheid, 3, 1, 0) maand
       FROM ins_v_deel_gegevens id,
            ins_deel d,
            ins_srtcontrole isc,
            ins_srtcontroledl_xcp xcp,
            prs_kenmerklink kl,
            alg_ruimte r,
            alg_locatie l,
            alg_district di,
            (SELECT alg_onrgoedkenmerk_waarde volgorde, alg_onrgoed_key
               FROM alg_onrgoedkenmerk aogk
              WHERE aogk.alg_kenmerk_key = DECODE (MOD(TO_CHAR(SYSDATE, 'IW'),2), 1, 1043, 0, 1042)
                AND aogk.alg_onrgoedkenmerk_verwijder IS NULL) w
      WHERE id.alg_locatie_key = l.alg_locatie_key
        AND l.alg_district_key = di.alg_district_key
        AND l.alg_locatie_key = w.alg_onrgoed_key(+)
        AND xcp.ins_deel_key = id.ins_deel_key
        AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key
        AND xcp.ins_srtcontroledl_xcp_eenheid IS NOT NULL
        AND (isc.ins_srtcontrole_niveau = 'S'
         AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key
          OR isc.ins_srtcontrole_niveau = 'G'
         AND isc.ins_srtinstallatie_key = id.ins_srtgroep_key
          OR isc.ins_srtcontrole_niveau = 'D'
         AND isc.ins_srtinstallatie_key = id.ins_discipline_key)
        AND kl.prs_kenmerk_key = 1000
        AND kl.prs_kenmerklink_waarde = xcp.ins_srtcontroledl_xcp_groep
        AND id.alg_ruimte_key = r.alg_ruimte_key
        AND id.ins_deel_key = d.ins_deel_key
        AND COALESCE(d.ins_deel_vervaldatum, SYSDATE) >= SYSDATE
        AND ( (  TRUNC (fac.nextcyclusdatedeel (id.ins_deel_key, isc.ins_srtcontrole_key, 1)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) -- periodieke werkzaamheden mag ik de gehele week afmelden.
                 AND NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_status
                          FROM ins_deelsrtcontrole idsc
                         WHERE idsc.ins_deelsrtcontrole_status < 5
                           AND idsc.ins_deel_key = d.ins_deel_key
                           AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key
                            )
                            )
             OR EXISTS (SELECT idsc.ins_deelsrtcontrole_status
                          FROM ins_deelsrtcontrole idsc
                         WHERE idsc.ins_deelsrtcontrole_status < 5
                           AND idsc.ins_deel_key = d.ins_deel_key
                           AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key
                           AND TRUNC(COALESCE(ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_datum_org)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) ) )
   GROUP BY r.alg_ruimte_key,
            r.alg_ruimte_nr,
            kl.prs_link_key,
            alg_ruimte_omschrijving,
            alg_gebouw_omschrijving,
            alg_gebouw_upper,
            l.alg_locatie_key,
            di.alg_district_key,
            di.alg_regio_key,
            d.ins_deel_omschrijving,
            l.alg_locatie_omschrijving,
            id.ins_deel_key,
            id.ins_discipline_key,
            ins_srtcontroledl_xcp_groep,
            alg_locatie_x,
            isc.ins_srtcontrole_key,
            w.volgorde,
            ins_srtcontroledl_xcp_eenheid;

CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_result
(
   alg_regio_key,
   alg_regio_omschrijving,
   alg_district_key,
   alg_district_omschrijving,
   fclt_3d_locatie_key,
   alg_locatie_code,
   alg_locatie_omschrijving,
   laatste_schoonmaak,
   schoonmaker
)
AS
SELECT r.alg_regio_key,
       r.alg_regio_omschrijving,
       di.alg_district_key,
       di.alg_district_omschrijving,
       l.alg_locatie_key,
       l.alg_locatie_code,
       l.alg_locatie_omschrijving,
       idc.ins_deelsrtcontrole_datum laatste_schoonmaak,
       pf.prs_perslid_naam_full
  FROM (SELECT ins_alg_locatie_key alg_locatie_key,
               prs_perslid_key,
               ins_deelsrtcontrole_datum
          FROM ins_deelsrtcontrole idc1, ins_deel d1
         WHERE idc1.ins_deel_key = d1.ins_deel_key
           AND NOT EXISTS
                  (SELECT ins_deelsrtcontrole_key
                     FROM ins_deelsrtcontrole idc2, ins_deel d2
                    WHERE idc2.ins_deel_key = d2.ins_deel_key
                      AND d1.ins_alg_locatie_key = d2.ins_alg_locatie_key
                      AND idc1.ins_deelsrtcontrole_key <
                             idc2.ins_deelsrtcontrole_key)) idc,
       alg_locatie l,
       alg_district di,
       alg_regio r,
       prs_v_perslid_fullnames pf
 WHERE idc.alg_locatie_key = l.alg_locatie_key
   AND l.alg_locatie_verwijder IS NULL
   AND l.alg_district_key = di.alg_district_key
   AND di.alg_regio_key = r.alg_regio_key
   AND idc.prs_perslid_key = pf.prs_perslid_key;

CREATE OR REPLACE VIEW asdl_v_rap_persoonsgegevens
AS
SELECT pf.prs_perslid_naam_full naam,
       prs_afdeling_naam,
       p.prs_perslid_key,
       prs_perslid_email email,
       prs_srtperslid_omschrijving,
       prs_srtperslid_opp,
       asdl.get_kenmerk ('PRS', 1000, p.prs_perslid_key) route,
       asdl.get_kenmerk ('PRS', 1023, p.prs_perslid_key) geboortedatum,
       asdl.get_kenmerk ('PRS', 1024, p.prs_perslid_key) VGM,
       asdl.get_kenmerk ('PRS', 1055, p.prs_perslid_key) resgerichtsch,
       asdl.get_kenmerk ('PRS', 1056, p.prs_perslid_key) resgerichtschbeh,
       asdl.get_kenmerk ('PRS', 1057, p.prs_perslid_key) duurzaamsch,
       asdl.get_kenmerk ('PRS', 1058, p.prs_perslid_key) duurzaamschbeh,
       asdl.get_kenmerk ('PRS', 1059, p.prs_perslid_key) gastvrijheid,
       asdl.get_kenmerk ('PRS', 1060, p.prs_perslid_key) gastvrijheidbeh,
       asdl.get_kenmerk ('PRS', 1026, p.prs_perslid_key) hospitality,
       asdl.get_kenmerk ('PRS', 1045, p.prs_perslid_key) hospitalitybeh,
       asdl.get_kenmerk ('PRS', 1027, p.prs_perslid_key) nederl_taaltrjct,
       asdl.get_kenmerk ('PRS', 1046, p.prs_perslid_key) nederl_taalbeh,
       asdl.get_kenmerk ('PRS', 1030, p.prs_perslid_key) svsbasis,
       asdl.get_kenmerk ('PRS', 1047, p.prs_perslid_key) svsbasisbeh,
       asdl.get_kenmerk ('PRS', 1031, p.prs_perslid_key) svsleid,
       asdl.get_kenmerk ('PRS', 1048, p.prs_perslid_key) svsleidbeh,
       asdl.get_kenmerk ('PRS', 1032, p.prs_perslid_key) svsstation,
       asdl.get_kenmerk ('PRS', 1049, p.prs_perslid_key) svsstationbeh,
       asdl.get_kenmerk ('PRS', 1033, p.prs_perslid_key) taakeigenveilig,
       asdl.get_kenmerk ('PRS', 1050, p.prs_perslid_key) taakeigenveiligbeh,
       asdl.get_kenmerk ('PRS', 1034, p.prs_perslid_key) taakeigenveiliggeldigtot,
       DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1034, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1) taakeigenveiliggeldig,
       asdl.get_kenmerk ('PRS', 1052, p.prs_perslid_key) vca_b,
       asdl.get_kenmerk ('PRS', 1053, p.prs_perslid_key) vca_bbeh,
       asdl.get_kenmerk ('PRS', 1054, p.prs_perslid_key) vca_bgeldigtot,
       DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1054, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1)  vca_bgeldig,
       asdl.get_kenmerk ('PRS', 1036, p.prs_perslid_key) dvp,
     --  asdl.get_kenmerk ('PRS', 1053) vca_bbeh,
       asdl.get_kenmerk ('PRS', 1037, p.prs_perslid_key) dvpgeldigtot,
       DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1037, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1) dvpgeldig,
       asdl.get_kenmerk ('PRS', 1039, p.prs_perslid_key) idchecker,
       asdl.get_kenmerk ('PRS', 1041, p.prs_perslid_key) wavpas,
       fac.safe_to_date(asdl.get_kenmerk ('PRS', 1100, p.prs_perslid_key), 'yyyy-mm-dd') wavpasgeldigtot,
       d.alg_district_omschrijving,
       asdl.get_kenmerk ('PRS', 1142, p.prs_perslid_key)
               pvhs_verloop_datum
  FROM prs_perslid p,
       prs_afdeling a,
       prs_srtperslid sp,
       prs_v_perslid_fullnames pf,
       ( SELECT prs_perslid_key, alg_district_key
           FROM prs_v_perslidwerkplek_gegevens pwg, alg_locatie l
          WHERE pwg.alg_locatie_key = l.alg_locatie_key
            AND alg_district_key <> 21 -- Algemene Asito locatie
          GROUP BY prs_perslid_key, l.alg_district_key) wp,
       alg_district d
 WHERE p.prs_perslid_key = pf.prs_perslid_key
   AND p.prs_afdeling_key = a.prs_afdeling_key
   AND p.prs_srtperslid_key = sp.prs_srtperslid_key
   AND p.prs_perslid_key = wp.prs_perslid_key(+)
   AND wp.alg_district_key = d.alg_district_key(+)
   AND prs_afdeling_naam = '2250';

CREATE OR REPLACE VIEW asdl_v_rap_wiezitwaar
AS
   SELECT prs_afd_perslid_naam,
          alg_locatie_omschrijving,
          wp.prs_werkplek_getekend,
          l.alg_locatie_key fclt_3d_locatie_key,
          pwg.prs_perslid_key
     FROM prs_v_perslidwerkplek_gegevens pwg, prs_werkplek wp, alg_locatie l, prs_perslid p
    WHERE pwg.prs_werkplek_key = wp.prs_werkplek_key
      AND prs_werkplek_type = 1
      AND pwg.prs_perslid_key = p.prs_perslid_key
      AND p.prs_perslid_verwijder IS NULL
      AND pwg.alg_locatie_key = l.alg_locatie_key;

-- rapportage van deelnemers aan de toolboxsessie.
-- Kenmerk 101 tot en met 120 zijn deelnemers.
CREATE OR REPLACE VIEW asdl_v_rap_toolboxsessie
AS
   SELECT m.mld_melding_key melding,
          mld_melding_datum datum,
          mld_melding_onderwerp onderwerp,
          mld_melding_omschrijving omschrijving,
          prs_perslid_naam_full deelnemer
     FROM mld_kenmerkmelding km, prs_v_perslid_fullnames_all pf, mld_melding m
    WHERE mld_kenmerk_key BETWEEN 101 AND 120
      AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) = pf.prs_perslid_key
      AND km.mld_melding_key = m.mld_melding_key;


CREATE OR REPLACE VIEW asdl_v_rap_importsheet
(
   disciplineomschrijving,
   disciplinekostensoort,
   groepsoortomschrijving,
   objectsoortcode,
   objectsoortomschrijving,
   objectomschrijving,
   objectopmerking,
   ins_deel_key,
   reserveerbaar,
   eenheid,
   prijs,
   locatiecode,
   gebouwcode,
   bouwlaagvolgnummer,
   ruimtenummer,
   reserveringscope,
   catalogusnaam,
   cataloguskostensoort,
   persoonmatchcode,
   persoonmatchwaarde,
   district,
   locatie,
   frequentie,
   oppervlakte,
   vloersoort,
   dagen,
   route,
   uitvoeringsmoment,
   afwijkingen,
   eerstvolgendeschoonmaak
)
AS
   SELECT d.ins_discipline_omschrijving,
          NULL disciplinekostensoort,
          d.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_code,
          sd.ins_srtdeel_omschrijving,
          d.ins_deel_omschrijving,
          NULL objectopmerking,
          d.ins_deel_key,
          NULL reserveerbaar,
          NULL eenheid,
          NULL prijs,
          alg_locatie_code,
          alg_gebouw_upper,
          alg_verdieping_volgnr,
          alg_ruimte_nr,
          NULL reserveringscope,
          NULL catalogusnaam,
          NULL cataloguskostensoort,
          NULL persoonmatchcode,
          NULL persoonmatchwaarde,
          alg_district_omschrijving,
          alg_locatie_omschrijving,
          COALESCE(fac.safe_to_number(asdl.get_kenmerks ('INS', 44, d.ins_discipline_key, 'D', d.ins_deel_key)),
                   DECODE (ins_srtcontroledl_xcp_eenheid, 2, 52, 3, 12, 1)
                        / ins_srtcontroledl_xcp_periode),
          asdl.get_kenmerks ('INS', 41, d.ins_discipline_key, 'D', d.ins_deel_key) oppervlakte,
          asdl.get_kenmerks ('INS', 42, d.ins_discipline_key, 'D', d.ins_deel_key) vloersoort,
          COALESCE( asdl.get_kenmerks ('INS', 43, d.ins_discipline_key, 'D', d.ins_deel_key), asdl.get_bits_str(ins_srtcontroledl_xcp_eenheid, ins_srtcontroledl_xcp_bits)) dagen,
          ins_srtcontroledl_xcp_groep,
          asdl.get_kenmerk ('ALG', 1020, l.alg_locatie_key) uitv,
          asdl.get_kenmerk ('ALG', 1000, l.alg_locatie_key) afw,
          DECODE (
             id.ins_deel_vervaldatum,
             NULL,
             TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key,
                                           x.ins_srtcontrole_key,
                                           1)),
             NULL)
             eerste
     FROM ins_v_deel_gegevens d,
          ins_srtdeel sd,
          alg_locatie l,
          alg_verdieping v,
          alg_district di,
          ins_srtcontroledl_xcp x,
          ins_deel id
    WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
      AND d.alg_locatie_key = l.alg_locatie_key
      AND d.ins_deel_key = x.ins_deel_key
      AND d.ins_deel_key = id.ins_deel_key
      AND d.alg_verdieping_key = v.alg_verdieping_key
      AND l.alg_district_key = di.alg_district_key;

-- ASDL#37757
CREATE OR REPLACE VIEW asdl_v_rap_obj_route_details
(
   discipline,
   groep,
   objectsoort,
   object,
   district,
   locatie_omschrijving,
   locatie_code,
   oppervlakte,
   vloersoort,
   route,
   uitvoeringsmoment,
   afwijkende_schoonmaak,
   eerstvolgende_moment,
   volgnummer_even_weken,
   volgnummer_oneven_weken
)
AS
   SELECT d.ins_discipline_omschrijving,
          d.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_omschrijving,
          d.ins_deel_omschrijving,
          alg_district_omschrijving,
          alg_locatie_omschrijving,
          alg_locatie_code,
          asdl.get_kenmerks ('INS',
                             41,
                             d.ins_discipline_key,
                             'D',
                             d.ins_deel_key)
             oppervlakte,
          asdl.get_kenmerks ('INS',
                             42,
                             d.ins_discipline_key,
                             'D',
                             d.ins_deel_key)
             vloersoort,
          ins_srtcontroledl_xcp_groep,
          asdl.get_kenmerk ('ALG', 1020, l.alg_locatie_key) uitv,
          asdl.get_kenmerk ('ALG', 1000, l.alg_locatie_key) afw,
          DECODE (
             id.ins_deel_vervaldatum,
             NULL,
             TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key,
                                           x.ins_srtcontrole_key,
                                           1)),
             NULL
          )
             eerste,
          asdl.get_kenmerk ('ALG', 1042, l.alg_locatie_key) volgnr_even,
          asdl.get_kenmerk ('ALG', 1043, l.alg_locatie_key) volgnr_oneven
     FROM ins_v_deel_gegevens d,
          ins_srtdeel sd,
          alg_locatie l,
          alg_district di,
          ins_srtcontroledl_xcp x,
          ins_deel id
    WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
      AND d.alg_locatie_key = l.alg_locatie_key
      AND d.ins_deel_key = x.ins_deel_key
      AND d.ins_deel_key = id.ins_deel_key
      AND l.alg_district_key = di.alg_district_key;

CREATE OR REPLACE VIEW asdl_v_rap_check_schedule
AS
SELECT d.*
  FROM ins_v_deel_gegevens d, ins_srtcontroledl_xcp x
 WHERE x.ins_deel_key = d.ins_deel_key
   AND asdl.check_valid_schedule (d.ins_deel_key) IS NOT NULL;

-- Basisrapportage om per locatie te zien of hier schoongemaakt is.
-- Om te bepalen of er uberhaupt schoongemaakt moest worden kijken we in de xcp bits.
CREATE OR REPLACE VIEW asdl_v_rap_ns_stat
(
   datum,
   locatie,
   perceel,
   schoongemaakt
)
AS
   SELECT dsc.ins_deelsrtcontrole_datum,
          alg_locatie_omschrijving,
          alg_district_omschrijving,
          DECODE (
             (SELECT COUNT ( * )
                FROM ins_deelsrtcontrole dsca, ins_deel da
               WHERE dsca.ins_deel_key = da.ins_deel_key
                 AND ins_controlemode_key = 10
                 AND TRUNC (dsca.ins_deelsrtcontrole_datum_org) =
                        dsc.ins_deelsrtcontrole_datum
                 AND da.ins_alg_locatie_key = l.alg_locatie_key),
             0,
             0,
             1)
             schoongemaakt
     FROM alg_locatie l,
          alg_district d,
          (  SELECT TRUNC (ins_deelsrtcontrole_datum) ins_deelsrtcontrole_datum,
                    POWER (2, TO_CHAR (ins_deelsrtcontrole_datum, 'D') - 1)
                       mask
               FROM ins_deelsrtcontrole
           GROUP BY TRUNC (ins_deelsrtcontrole_datum),
                    POWER (2, TO_CHAR (ins_deelsrtcontrole_datum, 'D') - 1))
          dsc,
          (  SELECT ins_alg_locatie_key alg_locatie_key,
                    ins_srtcontroledl_xcp_bits
               FROM ins_srtcontroledl_xcp x,
                    ins_deel d,
                    ins_srtdeel sd,
                    ins_srtgroep sg
              WHERE d.ins_deel_key = x.ins_deel_key
                AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                AND sg.ins_discipline_key = 121   -- NS Schoonmaak
           GROUP BY ins_alg_locatie_key, ins_srtcontroledl_xcp_bits) dcg
    WHERE l.alg_locatie_key = dcg.alg_locatie_key
      AND ins_deelsrtcontrole_datum >= TO_DATE ('20160701', 'yyyymmdd') -- we zijn het contract op 1 juli begonnen
      AND l.alg_locatie_verwijder IS NULL
      AND l.alg_district_key = d.alg_district_key
      AND BITAND (ins_srtcontroledl_xcp_bits, dsc.mask) <> 0;

-- Groepering om grafiek met percentages te tonen
CREATE OR REPLACE VIEW asdl_v_rap_ns_stat_tot (datum, percentage)
AS
     SELECT datum, ROUND ( (SUM (schoongemaakt) / COUNT ( * )) * 100)
       FROM asdl_v_rap_ns_stat
   GROUP BY datum;

CREATE OR REPLACE VIEW asdl_v_rap_ns_stat_perceel
(
    datum,
    perceel,
    percentage
)
AS
      SELECT datum, perceel, ROUND ((SUM (schoongemaakt) / COUNT (*)) * 100)
        FROM asdl_v_rap_ns_stat
    GROUP BY datum, perceel;

-- Groepering om grafiek met percentages te tonen per perceel
CREATE OR REPLACE FORCE VIEW asdl_v_training
(
   PERCEEL,
   STATUS,
   PRS_KENMERK_KEY,
   FAC_USRDATA_KEY,
   LEIDING
)
AS
   SELECT
            alg_district_omschrijving,
          fac_usrdata_volgnr || '.' || fac_usrdata_omschr status,
          prs_kenmerk_key,
          ud.fac_usrdata_key,
          DECODE (sp.prs_srtperslid_key, 62, 1, 0)
     FROM prs_kenmerklink kl,
          fac_usrdata ud,
          prs_perslid p,
          prs_afdeling a,
          prs_srtperslid sp,
          (  SELECT prs_perslid_key, alg_district_key
               FROM prs_perslidwerkplek pw,
                    prs_werkplek wp,
                    alg_ruimte r,
                    alg_verdieping v,
                    alg_gebouw g,
                    alg_locatie l
              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 = l.alg_locatie_key
                    AND alg_district_key <> 21       -- Algemene Asito locatie
           GROUP BY prs_perslid_key, l.alg_district_key) wp,
          alg_district d
    WHERE     p.prs_afdeling_key = a.prs_afdeling_key
          AND p.prs_srtperslid_key = sp.prs_srtperslid_key
          AND p.prs_perslid_key = wp.prs_perslid_key(+)
          AND wp.alg_district_key = d.alg_district_key(+)
          AND prs_afdeling_naam = '2250'
          AND fac.safe_to_number (kl.prs_kenmerklink_waarde) =
                ud.fac_usrdata_key
          AND kl.prs_link_key = p.prs_perslid_key;


-- Specifieke rapportages.
CREATE OR REPLACE VIEW asdl_v_training_perceel
(
   PERCEEL,
   OMSCHRIJVING,
   STATUS,
   PERC,
   AANTAL
)
AS
   SELECT alg_district_omschrijving,
          DECODE (prs_kenmerk_key,
                  1049, 'SVS perron & stationsreiniging',
                  1050, 'Taak Eigen Veiligheid',
                  1053, 'VCA (B-VCA)',
                  1120, 'WAV pas',
                  1122, 'Digitaal Veiligheid Paspoort')
             omschrijving,
          fac_usrdata_volgnr || '.' || fac_usrdata_omschr,
          ROUND (
             ( (SELECT COUNT ( * )
                  FROM asdl_v_training t
                 WHERE     k.prs_kenmerk_key = t.prs_kenmerk_key
                       AND ud.fac_usrdata_key = t.fac_usrdata_key
                       AND perceel = alg_district_omschrijving)
              / (SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
                   FROM asdl_v_training t
                  WHERE k.prs_kenmerk_key = t.prs_kenmerk_key
                        AND perceel = alg_district_omschrijving)
              * 100),
             2)
             perc,
          (SELECT COUNT ( * )
             FROM asdl_v_training t
            WHERE     k.prs_kenmerk_key = t.prs_kenmerk_key
                  AND ud.fac_usrdata_key = t.fac_usrdata_key
                  AND perceel = alg_district_omschrijving)
             aantal
     FROM fac_usrdata ud, prs_kenmerk k, alg_district d
    WHERE     ud.fac_usrtab_key = 1
          AND k.prs_kenmerk_key IN (1049, 1050, 1053, 1120, 1122)
          AND d.alg_district_key IN (41, 42, 43, 44);

CREATE OR REPLACE VIEW asdl_v_training_totaal
(
   OMSCHRIJVING,
   STATUS,
   PERC,
   AANTAL
)
AS
     SELECT DECODE  (prs_kenmerk_key,
                  1049, 'SVS perron & stationsreiniging',
                  1050, 'Taak Eigen Veiligheid',
                  1053, 'VCA (B-VCA)',
                  1120, 'WAV pas',
                  1122, 'Digitaal Veiligheid Paspoort')
               omschrijving,
            fac_usrdata_volgnr || '.' || fac_usrdata_omschr,
            ROUND (
               ( (SELECT COUNT ( * )
                    FROM asdl_v_training t
                   WHERE k.prs_kenmerk_key = t.prs_kenmerk_key
                         AND ud.fac_usrdata_key = t.fac_usrdata_key)
                / (SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
                     FROM asdl_v_training t
                    WHERE k.prs_kenmerk_key = t.prs_kenmerk_key)
                * 100),
               2)
               perc,
            (SELECT COUNT ( * )
               FROM asdl_v_training t
              WHERE k.prs_kenmerk_key = t.prs_kenmerk_key
                    AND ud.fac_usrdata_key = t.fac_usrdata_key)
               aantal
       FROM fac_usrdata ud, prs_kenmerk k, alg_district d
      WHERE     ud.fac_usrtab_key = 1
            AND k.prs_kenmerk_key IN (1049, 1050, 1053, 1120, 1122)
            AND d.alg_district_key IN (41, 42, 43, 44)
   GROUP BY prs_kenmerk_key,
            fac_usrdata_volgnr,
            fac_usrdata_omschr,
            fac_usrdata_key;



-- view om een listbox met locatiebeheerders te vullen
CREATE OR REPLACE VIEW asdl_v_list_locatiebeheerder
(
   prs_perslid_naam_full,
   prs_perslid_key,
   prs_perslid_verwijder
)
AS
   SELECT prs_perslid_naam_full, pf.prs_perslid_key, NULL
     FROM prs_v_perslid_fullnames pf, fac_gebruikersgroep gg
    WHERE pf.prs_perslid_key = gg.prs_perslid_key AND fac_groep_key = 241
   UNION ALL
   SELECT prs_perslid_naam_full, prs_perslid_key, SYSDATE
     FROM prs_v_perslid_fullnames_all pf
    WHERE pf.prs_perslid_key NOT IN
                (SELECT prs_perslid_key
                   FROM fac_gebruikersgroep gg
                  WHERE gg.prs_perslid_key = pf.prs_perslid_key AND fac_groep_key = 241);

-------------------------------------------------------------------------------------------
--
-- Notificatiejobs
--
-------------------------------------------------------------------------------------------
-- Notificatie naar leidinggevende op dag dat medewerker jarig is.
CREATE OR REPLACE VIEW asdl_v_noti_verjaardag
(
   sender,
   receiver,
   text,
   code,
   fac_srtnotificatie_key,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT NULL,
          p.prs_perslid_key,
             'Let op: Uw medewerker '
          || prs_perslid_naam_friendly
          || ' is vandaag ('
          || RTRIM (TO_CHAR (SYSDATE, 'dd month'))
          || ') jarig.',
          'PRSMAI' code,
          NULL fac_srtnotificatie_key,
          NULL key,
          NULL xkey,
          NULL xemail,
          NULL xmobiel
     FROM prs_kenmerklink klg,
          prs_v_perslid_fullnames pf,
          prs_kenmerklink kll,
          prs_perslid p
    WHERE klg.prs_kenmerk_key = 1023
      AND klg.prs_kenmerklink_verwijder IS NULL
      AND klg.prs_link_key = pf.prs_perslid_key
      AND SUBSTR (klg.prs_kenmerklink_waarde, 1, 5) =
             TO_CHAR (SYSDATE, 'dd-mm')
      AND kll.prs_kenmerk_key = 1061
      AND kll.prs_kenmerklink_verwijder IS NULL
      AND kll.prs_link_key = pf.prs_perslid_key
      AND fac.safe_to_number (kll.prs_kenmerklink_waarde) = p.prs_perslid_key;

CREATE OR REPLACE VIEW asdl_v_noti_opleiding
(
   sender,
   receiver,
   text,
   code,
   fac_srtnotificatie_key,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT NULL,
          701 prs_perslid_key,                       -- NS Asito administratie
             'Let op: Opleiding/pas '
          || opleiding
          || ' van medewerker '
          || prs_perslid_naam_friendly
          || ' is bijna verlopen ('
          || prs_kenmerklink_waarde
          || ')',
          'PRSMAI' code,
          NULL fac_srtnotificatie_key,
          NULL key,
          NULL xkey,
          NULL xemail,
          NULL xmobiel
     FROM prs_v_perslid_fullnames pf,
          (SELECT 'VCA vol' opleiding, prs_link_key, prs_kenmerklink_waarde
             FROM prs_kenmerklink
            WHERE prs_kenmerk_key = 1095
                  AND TRUNC (SYSDATE) IN
                           (fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (12 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (10 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (8 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (6 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (4 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (2 * 7))
           UNION
           SELECT 'DVP (digitaal veiligheids paspoort)',
                  prs_link_key,
                  prs_kenmerklink_waarde
             FROM prs_kenmerklink
            WHERE prs_kenmerk_key = 1037
                  AND TRUNC (SYSDATE) IN
                           (fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (8 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (6 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (4 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (2 * 7))
           UNION
           SELECT 'WAV (wet arbeid vreemdelingen)',
                  prs_link_key,
                  prs_kenmerklink_waarde
             FROM prs_kenmerklink
            WHERE prs_kenmerk_key = 1100
                  AND TRUNC (SYSDATE) IN
                           (fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (8 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (6 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (4 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (2 * 7))
           UNION
           SELECT 'VCA Basis', prs_link_key, prs_kenmerklink_waarde
             FROM prs_kenmerklink
            WHERE prs_kenmerk_key = 1054
                  AND TRUNC (SYSDATE) IN
                           (fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (12 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (10 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (8 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (6 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (4 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (2 * 7))
           UNION
           SELECT 'Taak eigen veiligheid',
                  prs_link_key,
                  prs_kenmerklink_waarde
             FROM prs_kenmerklink
            WHERE prs_kenmerk_key = 1034
                  AND TRUNC (SYSDATE) IN
                           (fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (8 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (6 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (4 * 7),
                            fac.safe_to_date (prs_kenmerklink_waarde,
                                              'dd-mm-yyyy')
                            - (2 * 7))) o
    WHERE o.prs_link_key = pf.prs_perslid_key;

-- Afschrift naar gebruiker 	NS Asito administratie
-- na afmelden 'Graffiti verwijderen'-meldingen!
CREATE OR REPLACE VIEW asdl_v_noti_administratie
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          701 prs_perslid_key,                       -- NS Asito administratie
          REPLACE (
             REPLACE (
                REPLACE (sn.fac_srtnotificatie_oms,
                         '##KEY##',
                         m.mld_melding_key),
                '##DISC##',
                md.ins_discipline_omschrijving),
             '##STDMLD##',
             sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          NULL,
          NULL,
          NULL
     FROM fac_tracking t,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE     t.fac_srtnotificatie_key = 38                          -- MLDAFM
          AND t.fac_tracking_refkey = m.mld_melding_key
          AND m.mld_stdmelding_key = 81                -- Graffiti verwijderen
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND sn.fac_srtnotificatie_code = 'CUST01'
          AND nj.fac_notificatie_job_view = 'ASDL_V_NOTI_ADMINISTRATIE'
          AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24);

-- Notificatie naar de locatiebeheerder om de actie goed te keuren of af te wijzen.
CREATE OR REPLACE VIEW asdl_v_noti_glas_locatiebeheer
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number(mld_kenmerkmelding_waarde) prs_perslid_key,                       -- NS Asito administratie
          'Glasbewassing op locatie ' || alg_locatie_omschrijving || ' is uitgevoerd.',
          m.mld_melding_key,
          NULL,
          NULL,
          NULL
     FROM fac_tracking t,
          mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_notificatie_job nj,
          mld_kenmerkmelding km,
          mld_kenmerk k,
          alg_locatie l
    WHERE     t.fac_srtnotificatie_key = 43                          -- MLDNEW
          AND t.fac_tracking_refkey = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = 241
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND k.mld_srtkenmerk_key = 121  -- locatiebeheerder
          AND km.mld_melding_key = m.mld_melding_key
          AND km.mld_kenmerk_key = k.mld_kenmerk_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key
          AND UPPER(nj.fac_notificatie_job_view) = 'ASDL_V_NOTI_GLAS_LOCATIEBEHEER'
          AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24);

--
-- Notificatie naar de administratie om glasbewassing te factureren en de voortgang te volgen.
CREATE OR REPLACE VIEW asdl_v_noti_glas_factuur
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT sn.fac_srtnotificatie_code,
           NULL,
           2561   prs_perslid_key,                               -- NS Asito 2250
            DECODE (t.fac_srtnotificatie_key,
                      37, 'Glasbewassing' || ' (' || sm.MLD_STDMELDING_OMSCHRIJVING  ||') '|| 'op locatie'  || alg_locatie_omschrijving || ' kan gefactureerd worden. ',
                      44,'Glasbewassing op locatie ' || alg_locatie_omschrijving || ' is afgekeurd.',
                      43,'Glasbewassing op locatie ' || alg_locatie_omschrijving || ' is aangemaakt.'),
           m.mld_melding_key,
           NULL,
           NULL,
           NULL
      FROM fac_tracking         t,
           mld_melding          m,
           mld_stdmelding       sm,
           fac_srtnotificatie   sn,
           fac_notificatie_job  nj,
           alg_locatie          l
     WHERE     t.fac_srtnotificatie_key IN (37, 44, 43) -- MLDACP, MLDREJ, MLDNEW
           AND t.fac_tracking_refkey = m.mld_melding_key
           AND m.mld_stdmelding_key = sm.mld_stdmelding_key
           AND sm.mld_ins_discipline_key = 241
           AND sn.fac_srtnotificatie_code = 'MLDMAI'
           AND m.mld_alg_locatie_key = l.alg_locatie_key
           AND UPPER (nj.fac_notificatie_job_view) =  'ASDL_V_NOTI_GLAS_FACTUUR'
          AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24);

-------------------------------------------------------------------------------------------
--
-- Importsheets
--
-------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE asdl_import_perslid (p_import_key IN NUMBER)
AS
   CURSOR c
   IS
      SELECT * FROM fac_imp_perslid;

   v_seq_of_columns   VARCHAR (255);
   v_index_eigen      NUMBER;
   v_index_partner    NUMBER;
   v_code             NUMBER;
   v_index            NUMBER;
   v_voorletters      VARCHAR2 (100);
BEGIN
   v_seq_of_columns :=
      '0;0;0;0;0;0;1;10;12;14;9;11;13;0;0;0;0;7;0;2;5;0;0;0;0;0;16;15;0;8;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46';
   prs.import_perslid (
      p_import_key,
      v_seq_of_columns,
      'WERKS;PERNR;STELL;SHORT;STEXT;E_MAIL_P;E_MAIL_Z;ENAME;INITS;NACHN;NAME2;VORSW;VORS2;RUFNM;GBDAT;PERNR_OL%');

   -- Even het personeelsnummer voorzien van de nodig voorloopnullen. Die Excel toch...
   -- en ook het nummer van de leidinggevende
   UPDATE fac_imp_perslid i
      SET prs_perslid_nr = LPAD(prs_perslid_nr, 8, '0'),
          prs_kenmerk1 = LPAD(prs_kenmerk1, 8, '0'),
          prs_perslid_oslogin = (SELECT MAX(prs_perslid_oslogin) FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL and p.prs_perslid_nr = LPAD(i.prs_perslid_nr, 8, '0')),
          prs_srtperslid_omschrijving = DECODE (SUBSTR(REPLACE(UPPER(prs_srtperslid_omschrijving), 'MEDEWERKER '),1,10),
                                                'OBJECTLEID', 'Objectleider',
                                                'PROJECTLEI', 'Objectleider',
                                                'KWALITEIT ', 'Vestigingsmanager en ondersteuning',
                                                              'Schoonmaker');

   -- koppel iedereen aan afdeling 2250
   -- UPDATE fac_imp_perslid SET prs_afdeling_naam = '2250';

   -- Zorg dat de juiste naam getoond wordt
   -- Codering naamgebruik FACILITOR:
   -- 0 - Gebruik eigennaam
   -- 1 - Gebruik partnernaam - eigennaam
   -- 2 - Gebruik partnernaam
   -- 3 - Gebruik eigennaam - partnernaam
   -- PRS_PERSLID_NAAMGEBRUIK_CODE
   -- Kenmerk4 is de volledige naam.

   FOR rec IN c
   LOOP
      v_index_eigen := INSTR (rec.prs_kenmerk4, rec.prs_perslid_naam);

      -- als de partnernaam leeg is wil dat hetzelfde zeggen als dat deze niet voorkomt in de display naam.
      IF rec.prs_perslid_partner_naam IS NULL
      THEN
         v_index_partner := 0;
      ELSE
         v_index_partner :=
            INSTR (rec.prs_kenmerk4, rec.prs_perslid_partner_naam);
      END IF;

      IF v_index_eigen = 0
      THEN
         v_code := 2;
      ELSE
         IF v_index_partner = 0
         THEN
            v_code := 0;
         ELSE
            IF v_index_eigen < v_index_partner
            THEN
               v_code := 3;
            ELSE
               v_code := 1;
            END IF;
         END IF;
      END IF;

      UPDATE fac_imp_perslid
         SET prs_perslid_naamgebruik_code = v_code
       WHERE prs_perslid_nr = rec.prs_perslid_nr;

      -- even netjes de punten plaatsen in de voorletters.
      v_voorletters := NULL;

      FOR v_index IN 1 .. LENGTH (rec.prs_perslid_voorletters)
      LOOP
         v_voorletters :=
               v_voorletters
            || SUBSTR (rec.prs_perslid_voorletters, v_index, 1)
            || '.';
      END LOOP;

      UPDATE fac_imp_perslid
         SET prs_perslid_voorletters = SUBSTR (v_voorletters, 1, 15)
       WHERE prs_perslid_nr = rec.prs_perslid_nr;
   END LOOP;
END asdl_import_perslid;
/


CREATE OR REPLACE PROCEDURE asdl_update_perslid (p_import_key IN NUMBER)
IS
   CURSOR c_flex
   IS
      SELECT i.prs_perslid_key, prs_kenmerk3 leid_key, prs_kenmerk2 geboorte
        FROM fac_imp_perslid i;

   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 p.prs_perslid_nr = i.prs_perslid_nr(+)
           AND pf.prs_perslid_key = p.prs_perslid_key
           AND p.prs_perslid_nr IS NOT NULL
           AND i.prs_perslid_nr IS NULL
           AND p.prs_perslid_verwijder IS NULL
      ORDER BY 2;

   v_perslid_key       NUMBER;
   v_perslid_nr        VARCHAR2 (100);
   v_kostenplaats_nr   VARCHAR2 (100);
   v_count             NUMBER;
   v_errorhint         VARCHAR2 (1000);
BEGIN
   SELECT count(*)
     INTO v_count
     FROM fac_imp_perslid;

   IF v_count > 0 THEN

       -- generic update
       prs.update_perslid (p_import_key, 'NR', NULL);

       FOR rec IN c_del
       LOOP
          BEGIN
             -- Niet gebruik maken van de standaard functie omdat we geen medewerkers
             -- hard willen verwijderen.
             -- prs.delete_perslid (p_import_key, rec.prs_perslid_key);

             -- Controleer of er ACTUELE verplichtingen zijn
             SELECT COUNT ( * )
               INTO v_count
               FROM prs_v_verplichting_keys vp
              WHERE vp.prs_perslid_key = rec.prs_perslid_key;

             IF v_count > 0
             THEN
                UPDATE prs_perslid
                   SET prs_perslid_naam =
                          SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 60),
                       prs_perslid_oslogin = NULL,
                       prs_perslid_oslogin2 = NULL
                 WHERE prs_perslid_key = rec.prs_perslid_key
                       AND prs_perslid_naam NOT LIKE 'INACTIEF:%';

                 IF rec.prs_perslid_naam_full NOT LIKE '%INACTIEF%'
                 THEN
                    fac.trackaction ('PRSUPD', rec.prs_perslid_key, NULL, SYSDATE, 'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.' );
                 END IF;

                 fac.imp_writelog (
                   p_import_key,
                   'I',
                   'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.',
                      'Achternaam/persoonsnr: '
                   || rec.prs_perslid_naam_full
                   || '/'
                   || rec.prs_perslid_nr);
             ELSE
                BEGIN
                   UPDATE prs_perslid
                      SET prs_perslid_verwijder = SYSDATE
                    WHERE prs_perslid_key = rec.prs_perslid_key;
                    fac.imp_writelog (
                      p_import_key,
                      'I',
                      'Persoon ge�nactiveerd.',
                         'Achternaam/persoonsnr: '
                      || rec.prs_perslid_naam_full
                      || '/'
                      || rec.prs_perslid_nr);
                                    fac.trackaction ('PRSDEL', rec.prs_perslid_key, NULL, SYSDATE, NULL );
                EXCEPTION
                   WHEN OTHERS
                   THEN
                      -- Kennelijk heeft de persoon toch ernstige verplichtingen
                      v_errorhint :=
                            'Persoon heeft nog (max. '
                         || TO_CHAR (v_count)
                         || ') verplichtingen. Naam/persoonsnr: '
                         || rec.prs_perslid_naam_full
                         || '/'
                         || rec.prs_perslid_nr;
                      fac.imp_writelog (p_import_key,
                                        'I',
                                        'Inactiveren persoon is niet gelukt',
                                        v_errorhint);
                END;
             END IF;
          END;
       END LOOP;

       UPDATE fac_imp_perslid i
          SET prs_kenmerk3 =
                 (SELECT prs_perslid_key
                    FROM prs_perslid p
                   WHERE p.prs_perslid_verwijder IS NULL
                     AND p.prs_perslid_nr = i.prs_kenmerk1);

       FOR rec IN c_flex
       LOOP
          BEGIN
             prs.upsertkenmerk (1061, rec.prs_perslid_key, rec.leid_key);
             prs.upsertkenmerk (1023, rec.prs_perslid_key, rec.geboorte);
          EXCEPTION
             WHEN OTHERS
             THEN
                NULL;                                                    -- Jammer
          END;
       END LOOP;
   END IF;
END asdl_update_perslid;
/


CREATE OR REPLACE PROCEDURE asdl_import_wiezitwaar (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
      SELECT   *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline          VARCHAR2 (1000);
   v_aanduiding       VARCHAR2 (1000);                                                                   -- Import line
   v_field            VARCHAR2 (100);                                                                   -- Import field
   v_fielddelimitor   VARCHAR2 (1);                                                                  -- Field seperator
   v_errormsg         VARCHAR (200);
   v_errorhint        VARCHAR (200);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_skipfield        VARCHAR2 (100);
   -- De importvelden
   v_perslid_nr       VARCHAR2 (100);
   v_locatie_code     VARCHAR2 (100);
   v_locatie_omschrijving VARCHAR2(100);
   v_datum_str        VARCHAR2 (100);
   v_perslid_key      NUMBER;
   v_locatie_key      NUMBER;
   v_datum            DATE;
   v_ruimte_key       NUMBER;
   v_werkplek_key     NUMBER;
   v_perslidwerkplek_key NUMBER;
   v_max_werkplek_volgnr NUMBER;
   header_found       BOOLEAN;

BEGIN
   -- Init
   header_found := FALSE;
   v_fielddelimitor := ';';

   FOR rec1 IN c_cursor
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_aanduiding := v_newline;

         IF SUBSTR (v_newline, 1, 3) = '?'
         THEN
            -- EF BB BF aangetroffen
            fac.imp_writelog (p_import_key,
                              'W',
                              'Byte Order Mark aangetroffen',
                              'Bestand heeft onbehandeld UTF-8 formaat.'
                             );
            v_newline := SUBSTR (v_newline, 4);
         END IF;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_code);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_str);

         v_aanduiding := 'Persoon: ' || v_perslid_nr || ' - Locatie: ' || v_locatie_code;

         -- Skip until a valid header is found
         IF     UPPER(v_perslid_nr)   = 'PERNR'
            AND UPPER(v_locatie_code) = 'STRNO'
            AND UPPER(v_datum_str)    = 'DATUM'
         THEN
            -- Sla de kopregel over.
            header_found := TRUE;
         ELSIF (header_found AND v_perslid_nr IS NOT NULL)
         THEN
            v_errorhint := 'Datum omzetten naar intern formaat';
            v_datum := to_date(v_datum_str, 'dd-mm-yyyy');

            -- personeelsnummer voorzien van voorloopnullen
            v_perslid_nr := LPAD(v_perslid_nr, 8, '0');

            v_errorhint := 'Vind de juiste persoon';
            SELECT prs_perslid_key
              INTO v_perslid_key
              FROM prs_perslid p
             WHERE prs_perslid_verwijder IS NULL
               AND prs_perslid_nr = v_perslid_nr;

            v_errorhint := 'Vind de juiste locatie (op postcode)';
            BEGIN
               SELECT alg_locatie_key
                 INTO v_locatie_key
                 FROM alg_locatie
                WHERE alg_locatie_verwijder IS NULL
                  AND REPLACE(alg_locatie_code, ' ') = SUBSTR(v_locatie_code, 1, 6);
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Vind de juiste locatie (op omschrijving)';
               SELECT alg_locatie_key
                 INTO v_locatie_key
                 FROM alg_locatie
                WHERE alg_locatie_verwijder IS NULL
                  AND UPPER(v_locatie_omschrijving) like '%' || UPPER(alg_locatie_omschrijving);
            END;

            v_errorhint := 'Vind de juiste ruimte';
            SELECT MIN(alg_ruimte_key)
              INTO v_ruimte_key
              FROM alg_v_ruimte_gegevens rg
             WHERE alg_locatie_key = v_locatie_key;

            BEGIN
            v_errorhint := 'Check of er al een werkplek voor deze persoon bestaat.';
            SELECT wp.prs_werkplek_key, prs_perslidwerkplek_key
              INTO v_werkplek_key, v_perslidwerkplek_key
              FROM prs_werkplek wp,
                   prs_perslidwerkplek pwp
             WHERE wp.prs_werkplek_key = pwp.prs_werkplek_key
               AND wp.prs_alg_ruimte_key = v_ruimte_key
               AND pwp.prs_perslid_key = v_perslid_key
               AND prs_werkplek_type = 1           -- we gebruikten type flex om conflict met echter wp te voorkomen.
               AND prs_werkplek_virtueel = 1;

            v_errorhint := 'Pas de datum aan bij de werkplek';
            UPDATE prs_werkplek SET prs_werkplek_getekend = v_datum WHERE prs_werkplek_key = v_werkplek_key;

            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Bepaal max werkplekvolgnummer';
               SELECT MAX(prs_werkplek_volgnr)
                 INTO v_max_werkplek_volgnr
                 FROM prs_werkplek
                WHERE prs_alg_ruimte_key = v_ruimte_key;

               v_errorhint := 'Toevoegen werkplek';
               INSERT INTO prs_werkplek
                       ( prs_alg_ruimte_key,
                         prs_werkplek_volgnr,
                         prs_werkplek_omschrijving,
                         prs_werkplek_getekend,
                         prs_werkplek_type,
                         prs_werkplek_virtueel)
               VALUES ( v_ruimte_key,
                        COALESCE(v_max_werkplek_volgnr, 0) + 1,
                        v_perslid_nr,
                        v_datum,
                        1,
                        1)
               RETURNING prs_werkplek_key INTO v_werkplek_key;

               v_errorhint := 'Toevoegen perslidwerkplek';
               INSERT INTO prs_perslidwerkplek
                       ( prs_werkplek_key,
                         prs_perslid_key)
               VALUES ( v_werkplek_key,
                        v_perslid_key);
            END;
         END IF;

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

   IF NOT header_found
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Geen geldige header aangetroffen',
                        'Bestand is geen geldig ruimtesoort importbestand.'
                       );
   END IF;

   -- Werkplekken ouder dan 18 maanden gaan we weggooien.
   DELETE prs_perslidwerkplek pwp
    WHERE pwp.prs_werkplek_key IN (SELECT prs_werkplek_key
                                     FROM prs_werkplek
                                    WHERE ADD_MONTHS (
                                             COALESCE (prs_werkplek_getekend,
                                                       SYSDATE),
                                             18) < SYSDATE);

   DELETE prs_werkplek wp
    WHERE ADD_MONTHS (
             COALESCE (prs_werkplek_getekend,
                       SYSDATE),
             18) < SYSDATE;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
END;
/


CREATE OR REPLACE PROCEDURE asdl_update_wiezitwaar (p_import_key IN NUMBER)
AS
BEGIN
   fac.imp_writelog (p_import_key, 'I', 'Verwerk hoeft bij WieZitWaar import niet uitgevoerd te worden', NULL);
END;
/

-- import van template met schoonmaakgegevens
CREATE OR REPLACE PROCEDURE asdl_import_ins (p_import_key IN NUMBER)
AS

   CURSOR c
   IS
        SELECT alg_locatie_code, ins_deel_omschrijving
          FROM fac_imp_ins
      GROUP BY alg_locatie_code, ins_deel_omschrijving
        HAVING COUNT (ins_deel_omschrijving) > 1;

   CURSOR c2 (
      p_locatie_code                      VARCHAR2,
      p_deel_omschrijving                 VARCHAR2)
   IS
      SELECT alg_locatie_code, ins_deel_omschrijving, ins_kenmerkwaarde20
        FROM fac_imp_ins
       WHERE alg_locatie_code = p_locatie_code
         AND ins_deel_omschrijving = p_deel_omschrijving;

   v_count   NUMBER;
BEGIN
   fac_import_ins(p_import_key);

   -- vul een volgnummer in kenmerk20
   UPDATE fac_imp_ins
   SET ins_kenmerkwaarde20 = ROWNUM;

   -- markeer objecten die niet uniek zijn met *<volgnummer>
   FOR rec IN c
   LOOP
      v_count := 1;

      FOR rec2 IN c2 (rec.alg_locatie_code, rec.ins_deel_omschrijving)
      LOOP
         UPDATE fac_imp_ins
            SET ins_deel_omschrijving =
                   ins_deel_omschrijving || '*' || v_count
          WHERE ins_kenmerkwaarde20 = rec2.ins_kenmerkwaarde20;

         v_count := v_count + 1;
      END LOOP;
   END LOOP;

   -- soms wordt een , als decimaal scheidingsteken opgegeven. Dat passen we even aan.
   UPDATE fac_imp_ins
      SET ins_kenmerkwaarde1 = REPLACE(ins_kenmerkwaarde1, ',', '.');
   COMMIT;
END;
/



CREATE OR REPLACE PROCEDURE asdl_update_ins (p_import_key IN NUMBER)
AS
   CURSOR c
   IS
      SELECT * FROM fac_imp_ins;

   CURSOR c_insp
   IS
      SELECT DISTINCT sdg.*
        FROM ins_v_srtdeel_gegevens sdg, fac_imp_ins i
       WHERE UPPER (sdg.ins_discipline_omschrijving) =
                UPPER (TRIM (i.ins_discipline_omschrijving))
         AND sdg.ins_srtgroep_upper =
                UPPER (TRIM (i.ins_srtgroep_omschrijving))
         AND UPPER (sdg.ins_srtdeel_code) = UPPER (TRIM (i.ins_srtdeel_code));

   v_errormsg                VARCHAR (200);
   v_aanduiding              VARCHAR (200);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);

   v_count                   NUMBER;
   v_regio_key               alg_regio.alg_regio_key%TYPE;
   v_district_key            alg_district.alg_district_key%TYPE;
   v_locatie_key             alg_locatie.alg_locatie_key%TYPE;
   v_gebouw_key              alg_gebouw.alg_gebouw_key%TYPE;
   v_verdieping_key          alg_verdieping.alg_verdieping_key%TYPE;
   v_ruimte_key              alg_ruimte.alg_ruimte_key%TYPE;
   v_locatie_code            alg_locatie.alg_locatie_code%TYPE;
   v_regio                   alg_regio.alg_regio_omschrijving%TYPE;
   v_district                alg_district.alg_district_omschrijving%TYPE;
   v_locatie                 alg_locatie.alg_locatie_omschrijving%TYPE;
   v_srtcontrole_key         ins_srtcontrole.ins_srtcontrole_key%TYPE;
   v_srtcontroledl_xcp_key   ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_key%TYPE;
   v_deel_key                ins_deel.ins_deel_key%TYPE;
   v_srtdeel_key             ins_srtdeel.ins_srtdeel_key%TYPE;
   v_kenmerk_key             ins_kenmerk.ins_kenmerk_key%TYPE;
BEGIN

   SELECT COUNT ( * )
     INTO v_count
     FROM imp_log
    WHERE fac_import_key = p_import_key AND imp_log_status = 'E';

   IF v_count > 0
   THEN
      RETURN;
   END IF;

   FOR rec IN c
   LOOP
      BEGIN
         v_regio := SUBSTR (rec.ins_kenmerkwaarde2, 1, 30);
         v_district := SUBSTR (rec.ins_kenmerkwaarde3, 1, 30);
         v_locatie := SUBSTR (rec.ins_kenmerkwaarde4, 1, 60);
         v_locatie_code := rec.alg_locatie_code;

         v_aanduiding := 'Locatiecode: ' || v_locatie_code || ' - Locatie omschrijving: ' || v_locatie;

         SELECT alg_regio_key
           INTO v_regio_key
           FROM alg_regio
          WHERE alg_regio_upper = UPPER (TRIM (v_regio))
            AND alg_regio_verwijder IS NULL;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO alg_regio (alg_regio_omschrijving)
                VALUES (TRIM (v_regio))
             RETURNING alg_regio_key
                  INTO v_regio_key;
      END;

      IF v_regio_key IS NOT NULL
      THEN
         BEGIN
            SELECT alg_district_key
              INTO v_district_key
              FROM alg_district
             WHERE alg_district_upper = UPPER (TRIM (v_district))
               AND alg_regio_key = v_regio_key
               AND alg_district_verwijder IS NULL;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               INSERT INTO alg_district (alg_regio_key,
                                         alg_district_omschrijving)
                   VALUES (v_regio_key, TRIM (v_district))
                RETURNING alg_district_key
                     INTO v_district_key;
         END;
      END IF;

      IF v_district_key IS NOT NULL
      THEN
         BEGIN
            SELECT alg_locatie_key
              INTO v_locatie_key
              FROM alg_locatie
             WHERE UPPER (alg_locatie_code) = UPPER (TRIM (v_locatie_code))
               AND alg_district_key = v_district_key
               AND alg_locatie_verwijder IS NULL;

            BEGIN
               UPDATE alg_locatie
                  SET alg_locatie_omschrijving = v_locatie
                WHERE alg_locatie_key = v_locatie_key;
            EXCEPTION WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
               v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
               fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
            END;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               BEGIN
                  INSERT INTO alg_locatie (alg_district_key,
                                           alg_locatie_code,
                                           alg_locatie_omschrijving)
                      VALUES (v_district_key,
                              TRIM (v_locatie_code),
                              TRIM (v_locatie))
                   RETURNING alg_locatie_key
                        INTO v_locatie_key;
                EXCEPTION WHEN OTHERS
                THEN
                   v_locatie_key := -1;
                   oracle_err_num := SQLCODE;
                   oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                   v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                   fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
                END;
         END;
      END IF;

      IF v_locatie_key <> -1
      THEN
      BEGIN
         SELECT alg_gebouw_key
           INTO v_gebouw_key
           FROM alg_gebouw
          WHERE alg_locatie_key = v_locatie_key
            AND alg_gebouw_naam = '_'
            AND alg_gebouw_verwijder IS NULL;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO alg_gebouw (alg_locatie_key,
                                    alg_gebouw_naam,
                                    alg_gebouw_code)
                VALUES (v_locatie_key, '_', '_')
             RETURNING alg_gebouw_key
                  INTO v_gebouw_key;
      END;

      BEGIN
         SELECT alg_verdieping_key
           INTO v_verdieping_key
           FROM alg_verdieping
          WHERE alg_gebouw_key = v_gebouw_key
            AND alg_verdieping_volgnr = 1
            AND alg_verdieping_verwijder IS NULL;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO alg_verdieping (alg_gebouw_key,
                                        alg_verdieping_omschrijving,
                                        alg_verdieping_volgnr,
                                        alg_verdieping_code)
                VALUES (v_gebouw_key,
                        'Verdieping 1',
                        1,
                        '_')
             RETURNING alg_verdieping_key
                  INTO v_verdieping_key;
      END;

      BEGIN
         SELECT alg_ruimte_key
           INTO v_ruimte_key
           FROM alg_ruimte
          WHERE alg_verdieping_key = v_verdieping_key
            AND alg_ruimte_nr = '_'
            AND alg_ruimte_verwijder IS NULL;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO alg_ruimte (alg_verdieping_key,
                                    alg_srtruimte_key,
                                    alg_ruimte_nr,
                                    alg_ruimte_omschrijving)
                VALUES (v_verdieping_key,
                        1,
                        '_',
                        '_')
             RETURNING alg_ruimte_key
                  INTO v_ruimte_key;
      END;
   END IF;
   END LOOP;

   fac_update_ins (p_import_key);

   FOR rec IN c_insp
   LOOP
      -- pas de binding van de objecttypes aan zodat we alleen aan ruimten kunnen koppelen.
      UPDATE ins_srtdeel sd
         SET ins_srtdeel_binding = 1          -- alleen aan ruimte te koppelen
       WHERE ins_srtdeel_key = rec.ins_srtdeel_key;

      BEGIN
         SELECT ins_srtcontrole_key
           INTO v_srtcontrole_key
           FROM ins_srtcontrole sc
          WHERE sc.ins_srtcontrole_niveau = 'S'
            AND sc.ins_srtinstallatie_key = rec.ins_srtdeel_key;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
                                         ins_srtcontrole_niveau,
                                         ins_srtcontrole_omschrijving,
                                         ins_srtcontrole_periode,
                                         ins_srtcontrole_eenheid,
                                         ins_srtcontrole_mode,
                                         ctr_discipline_key)
                VALUES (rec.ins_srtdeel_key,
                        'S',
                        rec.ins_srtdeel_omschrijving,
                        0,
                        0,
                        0,
                        181)
               RETURNING ins_srtcontrole_key INTO v_srtcontrole_key;
      END;

      BEGIN
         -- Kijk of het kenmerk bijlage al bestaat
         SELECT ins_kenmerk_key
           INTO v_kenmerk_key
           FROM ins_kenmerk
          WHERE ins_srtkenmerk_key = 21   -- bijlage
            AND ins_srtinstallatie_key = v_srtcontrole_key
            AND ins_kenmerk_niveau = 'C'
            AND ins_kenmerk_bewerkniveau = 'D'
            AND ins_kenmerk_verwijder IS NULL;
      EXCEPTION WHEN NO_DATA_FOUND
      THEN
         INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                  ins_srtinstallatie_key,
                                  ins_kenmerk_niveau,
                                  ins_kenmerk_bewerkniveau,
                                  ins_kenmerk_groep,
                                  ins_kenmerk_volgnummer)
             VALUES (21,
                     v_srtcontrole_key,
                     'C',
                     'D',
                     0,
                     100);
      END;
   END LOOP;

   FOR rec IN c
   LOOP
      BEGIN
      SELECT sdg.ins_deel_key, sdg.ins_srtdeel_key
        INTO v_deel_key, v_srtdeel_key
        FROM ins_v_deel_gegevens sdg, alg_locatie l, ins_srtdeel sd
       WHERE sdg.alg_locatie_key = l.alg_locatie_key
         AND sdg.ins_srtdeel_key = sd.ins_srtdeel_key
         AND UPPER (sdg.ins_discipline_omschrijving) =
                UPPER (TRIM (rec.ins_discipline_omschrijving))
         AND sdg.ins_srtgroep_upper =
                UPPER (TRIM (rec.ins_srtgroep_omschrijving))
         AND sd.ins_srtdeel_code_upper = UPPER (TRIM (rec.ins_srtdeel_code))
         AND UPPER(l.alg_locatie_code) = UPPER(rec.alg_locatie_code)
         AND UPPER (sdg.ins_deel_omschrijving) =
                UPPER (TRIM (rec.ins_deel_omschrijving));

      BEGIN
         SELECT ins_srtcontrole_key
           INTO v_srtcontrole_key
           FROM ins_srtcontrole sc
          WHERE sc.ins_srtcontrole_niveau = 'S'
            AND sc.ins_srtinstallatie_key = v_srtdeel_key
            AND UPPER (sc.ins_srtcontrole_omschrijving) =
                   UPPER (TRIM (rec.ins_srtdeel_omschrijving));

         SELECT ins_srtcontroledl_xcp_key
           INTO v_srtcontroledl_xcp_key
           FROM ins_srtcontroledl_xcp
          WHERE ins_deel_key = v_deel_key
            AND ins_srtcontrole_key = v_srtcontrole_key;

         UPDATE ins_srtcontroledl_xcp
            SET ins_srtcontroledl_xcp_bits =
                   asdl.get_bits_value (rec.ins_kenmerkwaarde11,
                                        rec.ins_kenmerkwaarde13,
                                        rec.ins_kenmerkwaarde12),
                ins_srtcontroledl_xcp_periode = rec.ins_kenmerkwaarde10,
                ins_srtcontroledl_xcp_eenheid = rec.ins_kenmerkwaarde11,
                ins_srtcontroledl_xcp_groep = rec.ins_kenmerkwaarde7
          WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
                                               ins_srtcontrole_key,
                                               ins_srtcontroledl_xcp_bits,
                                               ins_srtcontroledl_xcp_periode,
                                               ins_srtcontroledl_xcp_eenheid,
                                               ins_srtcontroledl_xcp_groep)
                VALUES (v_deel_key,
                        v_srtcontrole_key,
                        asdl.get_bits_value (rec.ins_kenmerkwaarde11,
                                             rec.ins_kenmerkwaarde13,
                                             rec.ins_kenmerkwaarde12),
                        rec.ins_kenmerkwaarde10,
                        rec.ins_kenmerkwaarde11,
                        rec.ins_kenmerkwaarde7);
      END;
      EXCEPTION WHEN OTHERS THEN
         fac.imp_writelog (p_import_key, 'E', 'Niet gelukt om schoonmaakactie toe te voegen',
                           'alg_locatie_code: ' || rec.alg_locatie_code || ' - ' ||
                           'ins_srtdeel_code: ' || rec.ins_srtdeel_code || ' - ' ||
                           'ins_srtgroep_omschrijving: ' || rec.ins_srtgroep_omschrijving || ' - ' ||
                           'ins_discipline_omschrijving: ' || rec.ins_discipline_omschrijving);
     END;
   END LOOP;

   COMMIT;
END;
/


--
-- Export FREEZE (iedere eerste dag van de maand
--

CREATE OR REPLACE PROCEDURE asdl_export_schoonmaak_freeze (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
   INSERT INTO asdl_schoonmaak_freeze (freeze_datum,
                                       freeze_q,
                                       ins_discipline_omschrijving,
                                       ins_srtgroep_omschrijving,
                                       ins_srtdeel_code,
                                       ins_srtdeel_omschrijving,
                                       ins_deel_omschrijving,
                                       alg_locatie_code,
                                       alg_locatie_omschrijving,
                                       perceel,
                                       frequentie,
                                       oppervlakte,
                                       vloersoort,
                                       dagen,
                                       route,
                                       uitvoeringsmoment,
                                       afwijkingen,
                                       ins_deel_key)
      SELECT SYSDATE,
             TO_CHAR(sysdate, 'YYYYQ'),
             disciplineomschrijving,
             groepsoortomschrijving,
             objectsoortcode,
             objectsoortomschrijving,
             objectomschrijving,
             locatiecode,
             locatie,
             district,
             frequentie,
             oppervlakte,
             vloersoort,
             dagen,
             route,
             uitvoeringsmoment,
             afwijkingen,
             ins_deel_key
        FROM asdl_v_rap_importsheet
       WHERE disciplineomschrijving LIKE '%NS%';
   COMMIT;
END;
/


CREATE OR REPLACE PROCEDURE asdl_export_daily_task  (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS

   CURSOR c
   IS
      SELECT m.mld_melding_key
        FROM mld_melding m, mld_stdmelding sm
       WHERE mld_melding_status = 4    -- geaccepteerd dus in behandeing
         AND m.mld_stdmelding_key = sm.mld_stdmelding_key
         AND sm.mld_ins_discipline_key = 241;

BEGIN
   FOR rec in c
   LOOP
      BEGIN
         -- nu de status op afgemeld zetten.
         mld.setmeldingstatus(rec.mld_melding_key, 5, NULL);
      END;
   END LOOP;

BEGIN ASDL_EXPORT_GLASBON_MELDING('GLASBON_MELDING',SYSDATE,'-1',''); END;

END;
/

CREATE OR REPLACE VIEW asdl_v_rap_locatie_mismatch(alg_locatie_code, alg_locatie_omschrijving)
AS
SELECT DISTINCT locatie, locatieoms
  FROM (
     SELECT SUBSTR(fac_imp_file_line,
                   INSTR(fac_imp_file_line, ';', 1, 3)+1,
                   INSTR(fac_imp_file_line, ';', 1, 4)- INSTR(fac_imp_file_line, ';', 1, 3)-1) locatie,
            SUBSTR(fac_imp_file_line,
                   INSTR(fac_imp_file_line, ';', 1, 4)+1,
                   INSTR(fac_imp_file_line, ';', 1, 5)- INSTR(fac_imp_file_line, ';', 1, 4)-1) locatieoms
       FROM fac_imp_file f, fac_import i
      WHERE f.fac_import_key = i.fac_import_key
        AND fac_import_app_key = 81) im
 WHERE SUBSTR(im.locatie, 1, 6) NOT IN (SELECT alg_locatie_code
                                          FROM alg_locatie
                                         WHERE alg_locatie_verwijder IS NULL);

CREATE OR REPLACE VIEW asdl_v_rap_mi_glas
(
   mld_melding_key,
   prioriteit,
   nummer,
   datum,
   tijd,
   district,
   plaats,
   onderwerp,
   vakgroep,
   melding,
   omschrijving,
   afhandeling,
   behandelaar,
   melder,
   status,
   datum_afgemeld_afgewezen,
   tijd_afgemeld_afgewezen,
   naam_afmelden_afwijzen,
   datum_geaccepteerd,
   tijd_geaccepteerd,
   naam_accepteren,
   notitie,
   organisatie,
   kostenplaats,
   stationsmanager,
   uitvoerdatum,
   geplande_uitvoeringsweek,
   uitvoerder
)
AS
   SELECT mld_melding_key,
          DECODE (mld_melding_spoed,
                  3, lcl.l ('lcl_mld_urg_normaal'),
                  1, lcl.l ('lcl_mld_urg_kritiek'),
                  2, lcl.l ('lcl_mld_urg_hoog'),
                  4, lcl.l ('lcl_mld_urg_laag'))
             prioriteit,
          sd.ins_srtdiscipline_prefix || m.mld_melding_key nummer,
          mld_melding_datum datum,
          mld_melding_datum tijd,
          alg_district_omschrijving district,
          alg_locatie_code || ' (' || alg_locatie_omschrijving || ')' plaats,
          mld_melding_onderwerp onderwerp,
          ins_discipline_omschrijving vakgroep,
          mld_stdmelding_omschrijving melding,
          mld_melding_omschrijving omschrijving,
          mld_melding_opmerking afhandeling,
          pfb.prs_perslid_naam_full behandelaar,
          pfm.prs_perslid_naam_full melder,
          st.mld_statuses_omschrijving status,
          mafm.fac_tracking_datum,
          mafm.fac_tracking_datum,
          mafm.prs_perslid_naam_full,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft
            WHERE fac_srtnotificatie_key = 37
                  AND m.mld_melding_key = ft.fac_tracking_refkey)
             accept_datum,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft
            WHERE fac_srtnotificatie_key = 37
                  AND m.mld_melding_key = ft.fac_tracking_refkey)
             accept_datum,
          (SELECT prs_perslid_naam_full
             FROM fac_tracking ft, prs_v_perslid_fullnames_all p
            WHERE     fac_srtnotificatie_key = 37
                  AND p.prs_perslid_key = ft.prs_perslid_key
                  AND m.mld_melding_key = ft.fac_tracking_refkey
                  AND ft.fac_tracking_key =
                        (  SELECT MAX (fac_tracking_key)
                             FROM fac_tracking
                            WHERE fac_srtnotificatie_key = 37
                                  AND ft.fac_tracking_refkey =
                                        m.mld_melding_key
                         GROUP BY mld_melding_key))
             accepteur,
          (SELECT mld_melding_note_omschrijving
             FROM mld_melding_note mn
            WHERE mn.mld_melding_key = m.mld_melding_key
                  AND mn.mld_melding_note_key =
                        (SELECT MAX (mld_melding_note_key)
                           FROM mld_melding_note mn
                          WHERE mn.mld_melding_key = m.mld_melding_key))
             notitie,
          (SELECT prs_afdeling_naam
             FROM prs_v_afdeling d
            WHERE p.prs_afdeling_key = d.prs_afdeling_key)
             organisatie,
          (SELECT prs_kostenplaats_omschrijving
             FROM prs_kostenplaats k
            WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
             kostenplaats,
          (SELECT prs_perslid_naam_full
             FROM mld_kenmerkmelding mk,
                  mld_kenmerk k,
                  asdl_v_list_locatiebeheerder lb
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 121
                  AND mld_kenmerkmelding_waarde = TO_CHAR (prs_perslid_key)
                  AND mk.mld_melding_key = m.mld_melding_key)
             stationsmanager,
          (SELECT TO_DATE (mk.mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 122
                  AND m.mld_melding_key = mk.mld_melding_key)
             uitvoerdatum,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 161
                  AND m.mld_melding_key = mk.mld_melding_key)
             geplande_uitvoeringsweek,
          CASE
                     WHEN (SELECT mld_kenmerkmelding_waarde
                             FROM mld_kenmerkmelding mk, mld_kenmerk k
                            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                                  AND k.mld_srtkenmerk_key = 201
                                  AND m.mld_melding_key = mk.mld_melding_key) IS NOT NULL
                     THEN
                        (SELECT f.fac_usrdata_omschr
                           FROM fac_usrdata f,
                                (SELECT mk.mld_kenmerkmelding_waarde waarde,
                                        mk.mld_melding_key sleutel
                                   FROM mld_kenmerkmelding mk, mld_kenmerk k
                                  WHERE mk.mld_kenmerk_key =
                                           k.mld_kenmerk_key
                                        AND k.mld_srtkenmerk_key = 201) sub
                          WHERE f.fac_usrdata_key = fac.safe_to_number(sub.waarde)
                                AND m.mld_melding_key = sub.sleutel)
                     ELSE
                        (SELECT mld_kenmerkmelding_waarde
                           FROM mld_kenmerkmelding mk, mld_kenmerk k
                          WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                                AND k.mld_srtkenmerk_key = 141
                                AND m.mld_melding_key = mk.mld_melding_key)
                  END
                     uitvoerder
     FROM mld_melding m,
          mld_stdmelding std,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_district d,
          prs_v_perslid_fullnames_all pfb,
          prs_v_perslid_fullnames_all pfm,
          mld_statuses st,
          prs_perslid p,
         (SELECT fac_tracking_datum, fac_tracking_refkey, prs_perslid_naam_full
            FROM fac_tracking ft, prs_v_perslid_fullnames_all pft
           WHERE fac_srtnotificatie_key IN (38, 44)
                 AND ft.prs_perslid_key = pft.prs_perslid_key) mafm
    WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND l.alg_district_key = d.alg_district_key(+)
          AND m.mld_melding_behandelaar_key = pfb.prs_perslid_key(+)
          AND m.prs_perslid_key = p.prs_perslid_key
          AND p.prs_perslid_key = pfm.prs_perslid_key
          AND st.mld_statuses_key = m.mld_melding_status
          AND m.mld_melding_key = mafm.fac_tracking_refkey(+)
          AND sd.ins_srtdiscipline_key = 141;

CREATE OR REPLACE PROCEDURE ASDL_IMPORT_GLASBON (p_import_key IN NUMBER)
IS
   c_fielddelimitor                VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);
   v_header                        VARCHAR2 (1000);
   v_aanduiding                    VARCHAR2 (200);
   v_errorhint                     VARCHAR2 (1000);
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_ongeldig                      NUMBER (1);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_count                         NUMBER :=1;
   v_count_melding              NUMBER :=1;
   v_count_alglocatie              NUMBER :=1;
   v_count_weeknr              NUMBER :=1;
   v_count_stationsmanager             NUMBER :=1;
   v_count_uitvoerder             NUMBER :=1;
   -- De importvelden:
   v_fac_import_key         VARCHAR (256);
   v_fac_import_index       VARCHAR (256);
   v_mld_stdmelding_key         VARCHAR (256);
   v_mld_stdmelding_oms         VARCHAR (256);
   v_alg_locatie_code         VARCHAR (256);
   v_alg_locatie_oms         VARCHAR (256);
   v_stationsmanager_key         VARCHAR (256);
   v_stationsmanager         VARCHAR (256);
   v_uitvoerjaar         VARCHAR (256);
   v_uitvoerweek         VARCHAR (256);
   v_uitvoermaand         VARCHAR (256);
   v_uitvoerder         VARCHAR (256);
   v_uitvoerdernaam           VARCHAR(256);
   v_serviceordernr         VARCHAR (256);
   v_onderwerp         VARCHAR (256);
   v_omschrijving         VARCHAR (256);
   v_datum_melding         VARCHAR (256);
   v_meldingnr         VARCHAR (256);

   CURSOR c
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   CURSOR l
   IS
        SELECT *
        FROM alg_locatie;

BEGIN
    DELETE FROM asdl_imp_glas;
    COMMIT;

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   FOR rec IN c
   LOOP
      BEGIN
         v_newline := rec.fac_imp_file_line;
         v_fac_import_key := rec.fac_import_key;
         v_fac_import_index := rec.fac_imp_file_index;
         v_aanduiding := '';
         v_errorhint := 'Fout bij opvragen te importeren rij';
         v_ongeldig := 0;
         v_count := 0;

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_key); -- Soort melding key
         fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_oms); -- Soort melding omschrijving
         fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- Locatie key
         fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_oms); -- Locatieomschrijving
         fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager_key); --  Key Stationsmanager
         fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager); -- Stationsmanager
         fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerjaar); -- Uitvoerjaar
         fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerweek); -- Uitvoerweek
         fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerder); -- Uitvoerder
         fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerdernaam); -- Uitvoerdernaam
         fac.imp_getfield (v_newline, c_fielddelimitor, v_serviceordernr); -- Nummer serviceorder
         fac.imp_getfield (v_newline, c_fielddelimitor, v_onderwerp); -- Onderwerp
         fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving); -- Omschrijving

         IF (fac.safe_to_number (v_uitvoerweek) < 10)
         THEN
            v_uitvoerweek := (0 || v_uitvoerweek);
         END IF;

         v_aanduiding :=
               '['
            || v_mld_stdmelding_key
            || '|'
            || v_alg_locatie_code
            || '|'
            || v_uitvoerjaar
            || '|'
            || v_uitvoerweek
            || '] ';

          v_count_tot := v_count_tot + 1;

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.


         IF (header_is_valid = 0)
         THEN
            IF
             UPPER (v_mld_stdmelding_key) = 'MELDING'
             AND UPPER (v_mld_stdmelding_oms) = 'MELDINGOMSCHRIJVING'
             AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
             AND UPPER (v_alg_locatie_oms) = 'LOCATIE'
             AND UPPER (v_stationsmanager_key) = 'SMNR'
             AND UPPER (v_stationsmanager) = 'STATIONSMANAGER'
             AND UPPER (v_uitvoerjaar) = 'UITVOERJAAR'
             AND UPPER (v_uitvoerweek) = 'UITVOERWEEK'
             AND UPPER (v_uitvoerder) = 'UITVOERDER'
             AND UPPER (v_uitvoerdernaam) = 'UITVOERDERNAAM'
             AND UPPER (v_serviceordernr) = 'SERVICEORDERNUMMER'       --Lengte max 50
             AND UPPER (v_onderwerp) = 'ONDERWERP'                              --Lengte max 80
             AND UPPER (v_omschrijving) = 'OMSCHRIJVING'                        --Lengte max 4000
            THEN
               header_is_valid := 1;
            END IF;
         ELSE

            --Controle of de opgegeven stdmelding wel aanwezig is
            SELECT COUNT ( * )
              INTO v_count_melding
              FROM mld_stdmelding sm
             WHERE v_mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = 241;                           -- Vakgroep GL-Glasbewassing

            IF v_count_melding = 0
            THEN v_ongeldig := 1;
                fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Meldingnummer bestaat niet',
                     'Melding wordt niet ingelezen!');
            END IF;

            --Controle of de opgegeven locatie (postcode) wel aanwezig is
            SELECT COUNT ( * )
              INTO v_count_alglocatie
              FROM alg_locatie l
             WHERE l.alg_locatie_code = v_alg_locatie_code;

            IF v_count_alglocatie = 0
            THEN v_ongeldig := 1;
                fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Locatie (postcode) bestaat niet',
                     'Melding wordt niet ingelezen!');
            END IF;

            --Controle of de opgegeven stationsmanager wel aanwezig is
            SELECT COUNT ( * )
              INTO v_count_stationsmanager
              FROM asdl_v_list_locatiebeheerder lb
             WHERE lb.prs_perslid_key = v_stationsmanager_key
             AND lb.prs_perslid_verwijder IS NULL;

            IF v_count_stationsmanager = 0
            THEN v_ongeldig := 1;
                fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Stationsmanager bestaat niet',
                     'Melding wordt niet ingelezen!');
            END IF;

            --Controle of de opgegeven uitvoerder wel aanwezig is
            SELECT COUNT ( * )
              INTO v_count_uitvoerder
              FROM fac_usrdata uv
             WHERE uv.fac_usrdata_key = v_uitvoerder
             AND uv.fac_usrtab_key = 21
             AND uv.fac_usrdata_verwijder IS NULL;


            IF v_count_uitvoerder = 0
            THEN v_ongeldig := 1;
                fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Uitvoerder bestaat niet',
                     'Melding wordt niet ingelezen!');
            END IF;

            --Controle of de melding al is aangemaakt.
            IF TO_NUMBER(TO_CHAR(v_uitvoerjaar)||TO_CHAR(v_uitvoerweek)) <= TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')||TO_CHAR(SYSDATE, 'WW'))+1
            THEN v_ongeldig := 1;
                fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Melding in volgende of voorgaande weken',
                   'Melding wordt niet ingelezen!');
            END IF;

            IF LENGTH (v_serviceordernr) > 50
            THEN
               v_serviceordernr := SUBSTR (v_serviceordernr, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Nummer serviceorder te lang',
                     'Nummer serviceorder wordt afgebroken tot ['
                  || v_serviceordernr
                  || ']');
            END IF;

            IF LENGTH (v_onderwerp) > 80
            THEN
               v_onderwerp := SUBSTR (v_onderwerp, 1, 80);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Onderwerp te lang',
                     'Onderwerp wordt afgebroken tot ['
                  || v_onderwerp
                  || ']');
            END IF;

            IF LENGTH (v_omschrijving) > 4000
            THEN
               v_onderwerp := SUBSTR (v_omschrijving, 1, 4000);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Omschrijving te lang',
                     'Omschrijving wordt afgebroken tot ['
                  || v_omschrijving
                  || ']');
            END IF;


             -- Insert geformatteerde import record
                IF header_is_valid = 1
                AND v_ongeldig = 0
                THEN
                   BEGIN
                      v_errorhint :=
                         'Fout bij toevoegen regel aan importtabel ASDL_IMP_GLAS';

                      INSERT INTO ASDL_IMP_GLAS (
                                                fac_import_key,
                                                fac_import_index,
                                                fac_import_datum,
                                                mld_stdmelding_key,
                                                mld_stdmelding_oms,
                                                alg_locatie_code,
                                                alg_locatie_oms,
                                                stationsmanager_key,
                                                stationsmanager,
                                                uitvoerdatum,
                                                uitvoerweek,
                                                uitvoermaand,
                                                uitvoerjaar,
                                                uitvoerder,
                                                serviceordernr,
                                                onderwerp,
                                                omschrijving)
                          VALUES (
                                  v_fac_import_key,
                                  v_fac_import_index,
                                  SYSDATE,
                                  TO_NUMBER(v_mld_stdmelding_key),
                                  v_mld_stdmelding_oms,
                                  v_alg_locatie_code,
                                  v_alg_locatie_oms,
                                  TO_NUMBER(v_stationsmanager_key),
                                  v_stationsmanager,
                                  NEXT_DAY(TO_DATE('04-jan-' || v_uitvoerjaar, 'dd-mm-yyyy' ) + (v_uitvoerweek-2)*7, 'maan'),
                                  v_uitvoerweek,
                                  v_uitvoermaand,
                                  v_uitvoerjaar,
                                  TO_NUMBER(v_uitvoerder),
                                  v_serviceordernr,
                                  v_onderwerp,
                                  v_omschrijving);

                      COMMIT;

                      v_count_import := v_count_import + 1;
                   EXCEPTION
                      WHEN OTHERS
                      THEN
                         oracle_err_num := SQLCODE;
                         oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                         v_errormsg :=
                               v_errorhint
                            || ' ORACLE (error '
                            || oracle_err_num
                            || '/'
                            || oracle_err_mes
                            || ')';
                         fac.imp_writelog (
                            p_import_key,
                            'W',
                            v_aanduiding || v_errormsg,
                            'Ingelezen regel kan niet worden weggeschreven!');
                         COMMIT;
                   END;
                END IF;
         END IF;
      END;
    END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (
         p_import_key,
         'S',
         'GLASBON/#ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'GLASBON/#ongeldige niet ingelezen importregels incl header: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

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


CREATE OR REPLACE PROCEDURE ASDL_UPDATE_GLASBON (p_import_key IN NUMBER)
IS

    BEGIN

        DELETE FROM asdl_imp_glas2
        WHERE asdl_imp_glas2.mld_melding_key IS NULL;
        COMMIT;

        INSERT INTO asdl_imp_glas2 (
                                                                fac_import_key,
                                                                fac_import_index,
                                                                fac_import_datum,
                                                                mld_stdmelding_key,
                                                                mld_stdmelding_oms,
                                                                alg_locatie_key,
                                                                alg_locatie_oms,
                                                                stationsmanager_key,
                                                                stationsmanager,
                                                                uitvoerdatum,
                                                                uitvoerweek,
                                                                uitvoermaand,
                                                                uitvoerjaar,
                                                                uitvoerder,
                                                                serviceordernr,
                                                                onderwerp,
                                                                omschrijving,
                                                                mld_melding_key)
        SELECT                                             fac_import_key,
                                                            fac_import_index,
                                                                fac_import_datum,
                                                                mld_stdmelding_key,
                                                                mld_stdmelding_oms,
                                                                l.alg_locatie_key,
                                                                alg_locatie_oms,
                                                                stationsmanager_key,
                                                                stationsmanager,
                                                                uitvoerdatum,
                                                                uitvoerweek,
                                                                uitvoermaand,
                                                                uitvoerjaar,
                                                                uitvoerder,
                                                                serviceordernr,
                                                                onderwerp,
                                                                omschrijving,
                                                                mld_melding_key
        FROM asdl_imp_glas imp, alg_locatie l
        WHERE l.alg_locatie_code = imp.alg_locatie_code;

    END;
/



CREATE OR REPLACE PROCEDURE ASDL_EXPORT_GLASBON_MELDING
(
   p_applname  IN   VARCHAR2,
   p_applrun  IN    VARCHAR2,
   p_filedir   IN   VARCHAR2,
   p_filename  IN   VARCHAR2
)

AS

CURSOR cmld
   IS
 SELECT *
        FROM asdl_imp_glas2
        WHERE TRUNC(TO_DATE(uitvoerdatum)) <= SYSDATE+7
        AND mld_melding_key IS NULL;

   v_fac_import_key  NUMBER(10);
   v_fac_import_index  NUMBER(10);
   v_fac_import_datum    DATE;
   v_mld_melding_key  NUMBER(10);
   v_mld_stdmelding_key  NUMBER(10);
   v_mld_melding_datum DATE;
   v_mld_error VARCHAR(256);

BEGIN

FOR recmld IN cmld
   LOOP
        BEGIN

            INSERT INTO mld_melding (prs_perslid_key,
                                                    mld_melding_module,
                                                    mld_meldbron_key,
                                                    mld_alg_locatie_key,
                                                    mld_melding_datum,
                                                    mld_melding_omschrijving,
                                                    mld_stdmelding_key,
                                                    mld_melding_einddatum,
                                                    mld_melding_status,
                                                    mld_melding_spoed,
                                                    mld_melding_onderwerp)
            VALUES                             (3,
                                                    'MLD',
                                                    6,                                                  --Bron = Systeem
                                                    recmld.alg_locatie_key,
                                                    SYSDATE,
                                                    recmld.omschrijving,
                                                    recmld.mld_stdmelding_key,
                                                    SYSDATE + 7,
                                                    2,                                                  --Status = Nieuw
                                                    3,                                                  --Prioriteit = Normaal
                                                    recmld.onderwerp)
           RETURNING                        mld_melding_key, mld_stdmelding_key, mld_melding_datum INTO v_mld_melding_key, v_mld_stdmelding_key, v_mld_melding_datum;

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                recmld.stationsmanager_key                                                                -- Waarde Stationsmanager uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 121;                                                       -- Kenmerksoort Stationsmanager

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                TO_CHAR(recmld.uitvoerdatum,'DD-MM-YYYY')                                      -- Waarde Uitvoerdatum uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 122;                                                       -- Kenmerksoort Uitvoerdatum

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                recmld.uitvoerweek                                                                              -- Waarde Uitvoerweek uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 161;                                                       -- Kenmerksoort Uitvoerweek

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                recmld.serviceordernr                                                                          -- Waarde Nummer serviceorder uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 181;                                                       -- Kenmerksoort Nummer serviceorder

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                recmld.uitvoerder                                                                                -- Waarde Uitvoerder uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 201;                                              -- Kenmerksoort Uitvoerder

            INSERT INTO  mld_kenmerkmelding
                                (mld_melding_key,
                                mld_kenmerk_key,
                                mld_kenmerkmelding_waarde)
            SELECT         v_mld_melding_key,
                                k.mld_kenmerk_key,
                                recmld.uitvoermaand                                                                           -- Waarde Uitvoeringsmaand uit import-tabel
            FROM           mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
            WHERE         k.mld_stdmelding_key = s.mld_stdmelding_key
                                AND k.mld_stdmelding_key = v_mld_stdmelding_key
                                AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                                AND s.mld_ins_discipline_key = 241                                                      -- Discipline Glasbewassing
                                AND mld_kenmerk_verwijder IS NULL
                                AND sk.mld_srtkenmerk_key = 221;                                                       -- Kenmerksoort Uitvoeringsmaand

          UPDATE                          asdl_imp_glas imp1
           SET                               imp1.mld_melding_key = v_mld_melding_key,
                                               imp1.mld_melding_datum = v_mld_melding_datum
           WHERE                          imp1.fac_import_key = recmld.fac_import_key
           AND                              imp1.fac_import_index = recmld.fac_import_index;

          UPDATE                          asdl_imp_glas2 imp2
           SET                               imp2.mld_melding_key = v_mld_melding_key,
                                               imp2.mld_melding_datum = v_mld_melding_datum
           WHERE                          imp2.fac_import_key = recmld.fac_import_key
           AND                              imp2.fac_import_index = recmld.fac_import_index;

           END;
      END LOOP;
END;
/


CREATE OR REPLACE VIEW ASDL_V_RAP_STATBEH
(
   PRS_PERSLID_KEY,
   PRS_PERSLID_NAAM_FULL
)
AS
SELECT
    prs_perslid_key, prs_perslid_naam_full
    FROM asdl_v_list_locatiebeheerder
    WHERE prs_perslid_verwijder IS NULL
    ORDER BY prs_perslid_key;
	
--ASDL#59441 - Rapportage tbv stationsmanagers met nieuwe glasbewassingen
CREATE OR REPLACE VIEW asdl_v_rap_myfac_statmanager
(
   mld_melding_key,
   prioriteit,
   nummer,
   datum,
   tijd,
   district,
   plaats,
   onderwerp,
   vakgroep,
   melding,
   omschrijving,
   afhandeling,
   behandelaar,
   melder,
   status,
   datum_afgemeld_afgewezen,
   tijd_afgemeld_afgewezen,
   naam_afmelden_afwijzen,
   datum_geaccepteerd,
   tijd_geaccepteerd,
   naam_accepteren,
   notitie,
   organisatie,
   kostenplaats,
   prs_perslid_key,
   stationsmanager,
   uitvoerdatum,
   geplande_uitvoeringsweek,
   uitvoerder,
   melding_verstuurd
)
AS
   SELECT mld_melding_key,
          DECODE (mld_melding_spoed,
                  3, lcl.l ('lcl_mld_urg_normaal'),
                  1, lcl.l ('lcl_mld_urg_kritiek'),
                  2, lcl.l ('lcl_mld_urg_hoog'),
                  4, lcl.l ('lcl_mld_urg_laag'))
             prioriteit,
          sd.ins_srtdiscipline_prefix || m.mld_melding_key nummer,
          mld_melding_datum datum,
          mld_melding_datum tijd,
          alg_district_omschrijving district,
          alg_locatie_code || ' (' || alg_locatie_omschrijving || ')' plaats,
          mld_melding_onderwerp onderwerp,
          ins_discipline_omschrijving vakgroep,
          mld_stdmelding_omschrijving melding,
          mld_melding_omschrijving omschrijving,
          mld_melding_opmerking afhandeling,
          pfb.prs_perslid_naam_full behandelaar,
          pfm.prs_perslid_naam_full melder,
          st.mld_statuses_omschrijving status,
          mafm.fac_tracking_datum,
          mafm.fac_tracking_datum,
          mafm.prs_perslid_naam_full,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft
            WHERE fac_srtnotificatie_key = 37
                  AND m.mld_melding_key = ft.fac_tracking_refkey)
             accept_datum,
          (SELECT MAX (fac_tracking_datum)
             FROM fac_tracking ft
            WHERE fac_srtnotificatie_key = 37
                  AND m.mld_melding_key = ft.fac_tracking_refkey)
             accept_datum,
          (SELECT prs_perslid_naam_full
             FROM fac_tracking ft, prs_v_perslid_fullnames_all p
            WHERE     fac_srtnotificatie_key = 37
                  AND p.prs_perslid_key = ft.prs_perslid_key
                  AND m.mld_melding_key = ft.fac_tracking_refkey
                  AND ft.fac_tracking_key =
                        (  SELECT MAX (fac_tracking_key)
                             FROM fac_tracking
                            WHERE fac_srtnotificatie_key = 37
                                  AND ft.fac_tracking_refkey =
                                        m.mld_melding_key
                         GROUP BY mld_melding_key))
             accepteur,
          (SELECT mld_melding_note_omschrijving
             FROM mld_melding_note mn
            WHERE mn.mld_melding_key = m.mld_melding_key
                  AND mn.mld_melding_note_key =
                        (SELECT MAX (mld_melding_note_key)
                           FROM mld_melding_note mn
                          WHERE mn.mld_melding_key = m.mld_melding_key))
             notitie,
          (SELECT prs_afdeling_naam
             FROM prs_v_afdeling d
            WHERE p.prs_afdeling_key = d.prs_afdeling_key)
             organisatie,
          (SELECT prs_kostenplaats_omschrijving
             FROM prs_kostenplaats k
            WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
             kostenplaats,
          (SELECT fac.safe_to_number (mk.mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 121
                  AND mk.mld_melding_key = m.mld_melding_key)
             stationsmanager_key,
          (SELECT prs_perslid_naam_full
             FROM mld_kenmerkmelding mk,
                  mld_kenmerk k,
                  asdl_v_list_locatiebeheerder lb
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 121
                  AND mld_kenmerkmelding_waarde = TO_CHAR (prs_perslid_key)
                  AND mk.mld_melding_key = m.mld_melding_key)
             stationsmanager,
          (SELECT TO_DATE (mk.mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 122
                  AND m.mld_melding_key = mk.mld_melding_key)
             uitvoerdatum,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 161
                  AND m.mld_melding_key = mk.mld_melding_key)
             geplande_uitvoeringsweek,
          CASE
             WHEN (SELECT mld_kenmerkmelding_waarde
                     FROM mld_kenmerkmelding mk, mld_kenmerk k
                    WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                          AND k.mld_srtkenmerk_key = 201
                          AND m.mld_melding_key = mk.mld_melding_key) IS NOT NULL
             THEN
                (SELECT f.fac_usrdata_omschr
                   FROM fac_usrdata f,
                        (SELECT mk.mld_kenmerkmelding_waarde waarde,
                                mk.mld_melding_key sleutel
                           FROM mld_kenmerkmelding mk, mld_kenmerk k
                          WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key
                                AND k.mld_srtkenmerk_key = 201) sub
                  WHERE f.fac_usrdata_key = fac.safe_to_number (sub.waarde)
                        AND m.mld_melding_key = sub.sleutel)
             ELSE
                (SELECT mld_kenmerkmelding_waarde
                   FROM mld_kenmerkmelding mk, mld_kenmerk k
                  WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                        AND k.mld_srtkenmerk_key = 141
                        AND m.mld_melding_key = mk.mld_melding_key)
          END
             uitvoerder,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding mk, mld_kenmerk k
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 241
                  AND m.mld_melding_key = mk.mld_melding_key)
             melding_verstuurd
     FROM mld_melding m,
          mld_stdmelding std,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_district d,
          prs_v_perslid_fullnames_all pfb,
          prs_v_perslid_fullnames_all pfm,
          mld_statuses st,
          prs_perslid p,
          (SELECT fac_tracking_datum,
                  fac_tracking_refkey,
                  prs_perslid_naam_full
             FROM fac_tracking ft, prs_v_perslid_fullnames_all pft
            WHERE fac_srtnotificatie_key IN (38, 44)
                  AND ft.prs_perslid_key = pft.prs_perslid_key) mafm
    WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND l.alg_district_key = d.alg_district_key(+)
          AND m.mld_melding_behandelaar_key = pfb.prs_perslid_key(+)
          AND m.prs_perslid_key = p.prs_perslid_key
          AND p.prs_perslid_key = pfm.prs_perslid_key
          AND st.mld_statuses_key = m.mld_melding_status
          AND m.mld_melding_key = mafm.fac_tracking_refkey(+)
          AND sd.ins_srtdiscipline_key = 141; 

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