/* Formatted on 24/1/2024 15:33:01 (QP5 v5.336) */
--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust)
--                       - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
--                       - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)

DEFINE thisfile = 'BAUS.SQL'
DEFINE dbuser   = 'BAUS'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;

SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL;

SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;

SELECT adm.checkscriptcust ('&dbuser') AS fcltcusttxt FROM DUAL;

WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF

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

CREATE OR REPLACE VIEW BAUS_V_RAP_TAKEN
(
    ins_deel_key,
    ins_deel_omschrijving,
    ins_deel_opmerking,
    inspectie,
    laatste_controle,
    volgende_controle,
    status,
    verantwoordelijke
)
AS
    SELECT ctr.ins_deel_key,
           ctr.ins_deel_omschrijving,
           ctr.ins_deel_opmerking,
           ctr.ins_srtcontrole_omschrijving,
           TRUNC (last_insp.ins_deelsrtcontrole_datum)     laatste_insp,
           TRUNC (ctr.ins_deelsrtcontrole_datum)           volgende_insp,
           ctr.status,
           d.prs_dienst_omschrijving
      FROM (SELECT d.ins_srtcontrole_key,
                   d.ins_deel_key,
                      d.ins_srtdeel_omschrijving
                   || ' '
                   || d.ins_deel_omschrijving    ins_deel_omschrijving,
                   d.ins_deel_opmerking,
                   d.ins_srtcontrole_omschrijving,
                   fac.nextcyclusdatedeel (d.ins_deel_key,
                                           d.ins_srtcontrole_key,
                                           1)    ins_deelsrtcontrole_datum,
                   ''                            AS ctrmode,
                   prs_perslid_naam_full         perslid,
                   ''                            AS status
              FROM (SELECT sc.ins_srtcontrole_key,
                           d.ins_deel_key,
                           d.ins_deel_omschrijving,
                           d.ins_deel_opmerking,
                           sc.ins_srtcontrole_periode,
                           sd.ins_srtdeel_omschrijving,
                           sc.ins_srtcontrole_omschrijving,
                           pfa.prs_perslid_key,
                           pfa.prs_perslid_naam_full
                      FROM ins_srtcontrole              sc,
                           ins_discipline               di,
                           ins_v_aanwezigsrtgroep       sg,
                           ins_v_aanwezigsrtdeel        sd,
                           ins_v_aanwezigdeel           d,
                           prs_perslid                  p,
                           prs_v_perslid_fullnames_all  pfa
                     WHERE     sd.ins_srtdeel_key = d.ins_srtdeel_key
                           AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
                           AND di.ins_discipline_key = sg.ins_discipline_key
                           AND COALESCE (d.ins_deel_vervaldatum, SYSDATE + 1) >=
                               SYSDATE
                           AND p.prs_perslid_key = 101
                           AND pfa.prs_perslid_key = 101) d
                   LEFT OUTER JOIN ins_srtcontroledl_xcp xcp
                       ON     xcp.ins_deel_key = d.ins_deel_key
                          AND xcp.ins_srtcontrole_key = d.ins_srtcontrole_key
             WHERE     COALESCE (xcp.ins_srtcontroledl_xcp_periode,
                                 d.ins_srtcontrole_periode) >
                       0
                   AND fac.nextcyclusdatedeel (d.ins_deel_key,
                                               d.ins_srtcontrole_key,
                                               1) <=
                       (SYSDATE + 42)
                   AND d.ins_deel_key NOT IN --- als een inspectie al is ingepland weegt dat zwaarder dan de oorspronkelijke datum, object komt op de lijst als plandatum komende maand is
                           (SELECT ins_deel_key
                              FROM ins_v_udr_deelinspect ins, ins_deel d
                             WHERE     ins_deelsrtcontrole_plandatum
                                           IS NOT NULL
                                   AND ins_deelsrtcontrole_datum IS NULL
                                   AND d.ins_deel_key = ins.deel_key
                                   AND d.ins_deel_verwijder IS NULL)
            UNION ALL
            SELECT ins.ins_srtcontrole_key,
                   d.ins_deel_key,
                      sd.ins_srtdeel_omschrijving
                   || ' '
                   || d.ins_deel_omschrijving    ins_deel_omschrijving,
                   d.ins_deel_opmerking,
                   ins.srtcontrole_omschrijving,
                   ins_deelsrtcontrole_plandatum,
                   ''                            ctrmode,
                   perslid,
                   deelsrtcontrole_status
              FROM ins_v_udr_deelinspect ins, ins_deel d, ins_srtdeel sd
             WHERE     ins_deelsrtcontrole_plandatum IS NOT NULL
                   AND ins_deelsrtcontrole_datum IS NULL
                   AND d.ins_deel_key = ins.deel_key
                   AND d.ins_deel_verwijder IS NULL
                   AND sd.ins_srtdeel_key = d.ins_srtdeel_key
                   AND actief = 'ja'
                   AND ins_deelsrtcontrole_plandatum <= (SYSDATE + 42) --  AND ins_deelsrtcontrole_plandatum >= SYSDATE
                                                                      ) ctr,
           (  SELECT MAX (sc.ins_deelsrtcontrole_datum)
                         ins_deelsrtcontrole_datum,
                     sc.ins_deel_key,
                     MAX (sc.ins_deelsrtcontrole_key)
                         ins_deelsrtcontrole_key
                FROM ins_deelsrtcontrole sc
               WHERE sc.ins_deelsrtcontrole_status = 6
            GROUP BY sc.ins_deel_key) last_insp,
           (SELECT c.ins_srtcontrole_key, d.prs_dienst_omschrijving
              FROM ins_srtcontrole c, prs_dienst d
             WHERE d.prs_dienst_key = c.prs_dienst_key) d
     WHERE     ctr.ins_deel_key = last_insp.ins_deel_key(+)
           AND ctr.ins_srtcontrole_key = d.ins_srtcontrole_key(+)
           AND TRUNC (ctr.ins_deelsrtcontrole_datum) < TRUNC (SYSDATE + 42);

CREATE OR REPLACE PROCEDURE baus_import_taak_km (p_import_key IN NUMBER)
AS
BEGIN
    NULL;
END baus_import_taak_km;
/

CREATE OR REPLACE PROCEDURE baus_update_taak_km (p_import_key IN NUMBER)
IS
    v_aanduiding     VARCHAR2 (200);
    v_errorhint      VARCHAR2 (1000);
    v_errormsg       VARCHAR2 (1000);
    oracle_err_num   NUMBER;
    oracle_err_mes   VARCHAR2 (200);
    v_count          NUMBER;

    CURSOR c IS
        SELECT i.fac_import_key,
               fac.safe_to_number (i.fac_imp_csv_col01)
                   ins_srtkenmerk_key,
               fac.safe_to_number (i.fac_imp_csv_col02)
                   ins_srtinstallatie_key,
               i.fac_imp_csv_col03
                   ins_kenmerk_niveau,                          -- is altijd C
               i.fac_imp_csv_col04
                   ins_kenmerk_bewerkniveau,                    -- is altijd D
               fac.safe_to_number (i.fac_imp_csv_col05)
                   ins_kenmerkvolgnummer,
               i.fac_imp_csv_col06
                   ins_kenmerk_omschrijving,
               i.fac_imp_csv_col07
                   ins_kenmerk_regexp,
               i.fac_imp_csv_col08
                   ins_kenmerk_default
          FROM fac_imp_csv i
         WHERE i.fac_import_key = p_import_key;
BEGIN
    FOR rec IN c
    LOOP
        BEGIN
            v_count := 0;

            SELECT COUNT (*)
              INTO v_count
              FROM INS_KENMERK k
             WHERE     k.ins_srtkenmerk_key = rec.ins_srtkenmerk_key
                   AND k.ins_srtinstallatie_key = rec.ins_srtinstallatie_key
                   AND (   k.ins_kenmerk_omschrijving =
                           rec.ins_kenmerk_omschrijving -- als er een alternatieve omschrijving is
                        OR (    k.ins_kenmerk_omschrijving IS NULL
                            AND rec.ins_kenmerk_omschrijving IS NULL)) -- of juist niet
                   AND k.ins_kenmerk_niveau = 'C'
                   AND k.ins_kenmerk_bewerkniveau = 'D';

            IF     v_count = 0
               AND UPPER (rec.ins_srtkenmerk_key) <> 'INS_SRTKENMERK_KEY'
            THEN
                BEGIN
                    v_errorhint :=
                           'Fout bij kenmerk voor taak '
                        || rec.ins_srtinstallatie_key;

                    INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                             ins_srtinstallatie_key,
                                             ins_kenmerk_niveau,
                                             ins_kenmerk_bewerkniveau,
                                             ins_kenmerk_volgnummer,
                                             ins_kenmerk_omschrijving,
                                             ins_kenmerk_regexp,
                                             ins_kenmerk_default)
                         VALUES (rec.ins_srtkenmerk_key,
                                 rec.ins_srtinstallatie_key,
                                 'C',
                                 'D',
                                 rec.ins_kenmerkvolgnummer,
                                 rec.ins_kenmerk_omschrijving,
                                 rec.ins_kenmerk_regexp,
                                 rec.ins_kenmerk_default);
                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,
                            'Kenmerk kan niet worden aangemaakt');
                        COMMIT;
                END;
            END IF;
        END;
    END LOOP;

    -- we ruimen de import tabel direct weer netjes op aangezien dit een generieke importtabel is
    DELETE FAC_IMP_CSV i
     WHERE i.fac_import_key = p_import_key;
END baus_update_taak_km;
/

CREATE OR REPLACE VIEW BAUS_V_RAP_GEPLANDE_TAKEN
(
    DEEL_KEY,
    DISCIPLINE,
    SOORT,
    GROEP,
    SOORTCODE,
    OMSCHRIJVING,
    PLAATSEIGENAAR,
    PLAATSEIGENAARTYPE,
    PLAATSAANDUIDING,
    EIGENAAR,
    EIGENAAR_KEY,
    OPMERKING,
    REGIO,
    DISTRICT,
    LOCATIE_CODE,
    LOCATIE_OMSCHRIJVING,
    LOCATIE_PLAATS,
    GEBOUWCODE,
    GEBOUW,
    TERREINSECTORCODE,
    TERREINSECTOR,
    VERDIEPINGCODE,
    RUIMTENR,
    WERKPLEKVOLGNR,
    WERKPLEK,
    UITLEENBAAR,
    UITGELEEND,
    RES_OPMERKING,
    BEHEERDER,
    VERVALDATUM,
    ACTIEF,
    AANTAL,
    [REDACTED],
    [REDACTED],
    FCLT_3D_LOCATIE_KEY,
    INS_DEELSRTCONTROLE_KEY,
    INS_SRTCONTROLE_KEY,
    CTR_DISCIPLINE_OMSCHRIJVING,
    SRTCONTROLE_OMSCHRIJVING,
    INS_DEELSRTCONTROLE_DATUM,
    CONTROLEMODE_OMSCHRIJVING,
    INS_DEELSRTCONTROLE_OPMERKING,
    PERSLID,
    INS_DEELSRTCONTROLE_DATUM_ORG,
    INS_DEELSRTCONTROLE_PLANDATUM,
    DEELSRTCONTROLE_STATUS,
    INS_DEELSRTCONTROLE_STATUS,
    VERANTWOORDELIJKE,
    DOCUMENT_VEREIST,
    DOCUMENT_BIJGESLOTEN,
    BEDRIJF,
    INSTRUCTIES
)
AS
    SELECT udr.deel_key,
           udr.discipline,
           udr.soort,
           udr.groep,
           udr.soortcode,
           udr.omschrijving,
           udr.plaatseigenaar,
           udr.plaatseigenaartype,
           udr.plaatsaanduiding,
           udr.eigenaar,
           udr.eigenaar_key,
           udr.opmerking,
           udr.regio,
           udr.district,
           udr.locatie_code,
           udr.locatie_omschrijving,
           udr.locatie_plaats,
           udr.gebouwcode,
           udr.gebouw,
           udr.terreinsectorcode,
           udr.terreinsector,
           udr.verdiepingcode,
           udr.ruimtenr,
           udr.werkplekvolgnr,
           udr.werkplek,
           udr.uitleenbaar,
           udr.uitgeleend,
           udr.res_opmerking,
           udr.beheerder,
           udr.vervaldatum,
           udr.actief,
           udr.aantal,
           udr.fclt_3d_discipline_key,
           udr.fclt_3d_afdeling_key,
           udr.fclt_3d_locatie_key,
           udr.ins_deelsrtcontrole_key,
           udr.ins_srtcontrole_key,
           udr.ctr_discipline_omschrijving,
           udr.srtcontrole_omschrijving,
           udr.ins_deelsrtcontrole_datum,
           udr.controlemode_omschrijving,
           udr.ins_deelsrtcontrole_opmerking,
           udr.perslid,
           udr.ins_deelsrtcontrole_datum_org,
           udr.ins_deelsrtcontrole_plandatum,
           udr.deelsrtcontrole_status,
           udr.ins_deelsrtcontrole_status,
           dienst.prs_dienst_omschrijving,
           COALESCE (doc.document_vereist, 'Nee')
               document_vereist,
           COALESCE (doc.document_ontvangen, 'N.v.t.')
               document_bijgesloten,
           bedrijf.bedrijf,
           instructie.instructies
      FROM ins_v_udr_deelinspect  udr,
           (SELECT sc.ins_srtcontrole_key,
                   'Ja'                document_vereist,
                   COALESCE (DECODE (kw.ins_kmdeelsrtcontr_waarde, 1, 'Ja'),
                             'Nee')    AS document_ontvangen
              FROM ins_srtkenmerk      sk,
                   ins_kenmerk         k,
                   ins_srtcontrole     sc,
                   ins_kmdeelsrtcontr  kw
             WHERE     k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                   AND k.ins_kenmerk_bewerkniveau = 'D'
                   AND k.ins_kenmerk_niveau = 'C'
                   AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key
                   AND k.ins_kenmerk_verwijder IS NULL
                   AND sk.ins_srtkenmerk_key = 161
                   AND kw.ins_kenmerk_key(+) = k.ins_kenmerk_key
                   AND UPPER (k.ins_kenmerk_omschrijving) =
                       'DOCUMENT ONTVANGEN') doc,
           (  SELECT d.ins_deel_key,
                     LISTAGG (b.prs_bedrijf_naam, CHR (10)) ---- scheidingsteken een enter
                         WITHIN GROUP (ORDER BY d.ins_deel_key)    bedrijf
                FROM ins_srtkenmerk sk,
                     ins_kenmerk    k,
                     ins_kenmerkdeel kd,
                     ins_deel       d,
                     prs_bedrijf    b
               WHERE     sk.ins_srtkenmerk_key = 41
                     AND sk.ins_srtkenmerk_key = k.ins_srtkenmerk_key
                     AND k.ins_kenmerk_key = kd.ins_kenmerk_key
                     AND kd.ins_deel_key = d.ins_deel_key
                     AND k.ins_kenmerk_bewerkniveau = 'D'
                     AND k.ins_kenmerk_verwijder IS NULL
                     AND b.prs_bedrijf_key =
                         fac.safe_to_number (kd.ins_kenmerkdeel_waarde)
            GROUP BY d.ins_deel_key) bedrijf,
           (  SELECT sc.ins_srtcontrole_key,
                     LISTAGG (
                            k.ins_kenmerk_omschrijving
                         || ' '
                         || REPLACE (k.ins_kenmerk_default, '<br/>', CHR (10)),
                         CHR (10) || CHR (10))
                     WITHIN GROUP (ORDER BY sc.ins_srtcontrole_key)    instructies
                FROM ins_srtkenmerk sk, ins_kenmerk k, ins_srtcontrole sc
               WHERE     k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                     AND k.ins_kenmerk_bewerkniveau = 'D'
                     AND k.ins_kenmerk_niveau = 'C'
                     AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key
                     AND k.ins_kenmerk_verwijder IS NULL
                     AND sk.ins_srtkenmerk_key = 61
            GROUP BY sc.ins_srtcontrole_key) instructie,
           (SELECT c.ins_srtcontrole_key, d.prs_dienst_omschrijving
              FROM ins_srtcontrole c, prs_dienst d
             WHERE d.prs_dienst_key = c.prs_dienst_key) dienst
     WHERE     bedrijf.ins_deel_key(+) = udr.deel_key
           AND instructie.ins_srtcontrole_key(+) = udr.ins_srtcontrole_key
           AND doc.ins_srtcontrole_key(+) = udr.ins_srtcontrole_key
           AND dienst.ins_srtcontrole_key(+) = udr.ins_srtcontrole_key;

CREATE OR REPLACE VIEW BAUS_V_RAP_UDR_TAKEN
AS
    SELECT ig.discipline,
           ig.soort,
           ig.groep,
           ig.soortcode,
           ig.ins_deel_key,
           ig.omschrijving
               object,
           ig.opmerking,
           ig.locatie_omschrijving
               locatie,
           ig.gebouw,
           ig.ruimtenr,
           ig.perslid
               persoon,
           ig.ins_srtcontrole_key,
           ig.srtcontrole_omschrijving
               taak,
           ig.taaksoort,
           ig.ins_deelsrtcontrole_key,
           ig.ins_deelsrtcontrole_datum_org
               orginele_datum,
           ig.ins_deelsrtcontrole_plandatum
               geplande_uitvoerdatum,
           ig.ins_deelsrtcontrole_datum
               inspectiedatum,
           ig.controlemode_omschrijving,
           ig.ins_deelsrtcontrole_opmerking
               inspectie_opmerking,
           ins_deelsrtcontrole_status,
           ins_deelsrtcontrole_status_omschr,
           deelsrtcontrole_result,
           CASE ins_deelsrtcontrole_status
               WHEN 0 THEN TO_CHAR (ig.volgendedatum, 'MM')
               WHEN 5 THEN TO_CHAR (ig.volgende_keer, 'MM')
               WHEN 6 THEN TO_CHAR (ig.volgende_keer, 'MM')
               ELSE TO_CHAR (ig.volgendedatum, 'MM')
           END
               maand,
           CASE ins_deelsrtcontrole_status
               WHEN 0 THEN TO_CHAR (ig.volgendedatum, 'YYYY')
               WHEN 5 THEN TO_CHAR (ig.volgende_keer, 'YYYY')
               WHEN 6 THEN TO_CHAR (ig.volgende_keer, 'YYYY')
               ELSE TO_CHAR (ig.volgendedatum, 'YYYY')
           END
               jaar,
           CASE ins_deelsrtcontrole_status
               WHEN 0 THEN TO_CHAR (ig.volgendedatum, 'YYYY-MM')
               WHEN 5 THEN TO_CHAR (ig.volgende_keer, 'YYYY-MM')
               WHEN 6 THEN TO_CHAR (ig.volgende_keer, 'YYYY-MM')
               ELSE TO_CHAR (ig.volgendedatum, 'YYYY-MM')
           END
               jaarmaand,
           ig.vervaldatum,
           CASE ins_deelsrtcontrole_status
               WHEN 0 THEN TRUNC (ig.volgendedatum)
               WHEN 5 THEN TRUNC (ig.volgende_keer)
               WHEN 6 THEN TRUNC (ig.volgende_keer)
               ELSE ig.volgendedatum
           END
               eerstvolgende_actie,
           dienst.prs_dienst_omschrijving,
           COALESCE (doc_vereist.document_vereist, 'Nee')
               document_vereist,
           CASE
               WHEN COALESCE (doc_vereist.document_vereist, 'Nee') = 'Nee'
               THEN
                   'N.v.t.'
               ELSE
                   COALESCE (doc.document_ontvangen, 'Nee')
           END
               document_bijgesloten,
           bedrijf.bedrijf,
           instructie.instructies,
           CASE
               WHEN     ins_deelsrtcontrole_status = 6
                    AND TRUNC (ins_deelsrtcontrole_datum_org) <
                        TRUNC (ins_deelsrtcontrole_datum)
               THEN
                   'Te laat'
               WHEN     ins_deelsrtcontrole_status = 6
                    AND TRUNC (ins_deelsrtcontrole_datum_org) >=
                        TRUNC (ins_deelsrtcontrole_datum)
               THEN
                   'Op tijd'
               WHEN     ins_deelsrtcontrole_status = 5
                    AND TRUNC (ins_deelsrtcontrole_datum_org) <
                        TRUNC (ins_deelsrtcontrole_datum)
               THEN
                   'Te laat'
               WHEN     ins_deelsrtcontrole_status = 5
                    AND TRUNC (ins_deelsrtcontrole_datum_org) >=
                        TRUNC (ins_deelsrtcontrole_datum)
               THEN
                   'Op tijd'
               WHEN     ins_deelsrtcontrole_status = 0
                    AND TRUNC (ins_deelsrtcontrole_datum_org) >
                        TRUNC (SYSDATE)
               THEN
                   'Op tijd'
               WHEN     ins_deelsrtcontrole_status = 0
                    AND TRUNC (ins_deelsrtcontrole_datum_org) <=
                        TRUNC (SYSDATE)
               THEN
                   'Te laat'
           END
               optijd
      FROM (WITH
                comps (ins_deel_key,
                       ins_srtcontrole_key,
                       ins_deelsrtcontrole_datum,
                       volgendedatum,
                       volgende_keer,
                       discipline,
                       soort,
                       groep,
                       soortcode,
                       omschrijving,
                       opmerking,
                       locatie_omschrijving,
                       gebouw,
                       ruimtenr,
                       srtcontrole_omschrijving,
                       taaksoort,
                       ins_deelsrtcontrole_datum_org,
                       controlemode_omschrijving,
                       ins_deelsrtcontrole_opmerking,
                       perslid,
                       ins_deelsrtcontrole_plandatum,
                       ins_deelsrtcontrole_status,
                       ins_deelsrtcontrole_status_omschr,
                       ins_controlemode_success,
                       deelsrtcontrole_result,
                       vervaldatum,
                       ins_deelsrtcontrole_key)
                AS
                    (SELECT *
                       FROM (SELECT di.deel_key
                                        ins_deel_key,
                                    xcp.ins_srtcontrole_key,
                                    di.ins_deelsrtcontrole_datum,
                                    COALESCE (
                                        di.ins_deelsrtcontrole_plandatum,
                                        CASE
                                            WHEN     di.ins_deelsrtcontrole_status IN
                                                         (2, 3)
                                                 AND di.ins_deelsrtcontrole_datum_org
                                                         IS NULL
                                            THEN -- Gestart(2) en de allereerste inspectie (ins_deelsrtcontrole_datum_org is NULL).
                                                CASE
                                                    WHEN xcp.ctr_controle_type =
                                                         1
                                                    THEN       -- Controle(1).
                                                        CASE
                                                            WHEN     xcp.ins_srtcontroledl_xcp_startdat
                                                                         IS NOT NULL
                                                                 AND xcp.ins_srtcontroledl_xcp_startdat >=
                                                                     xcp.ins_deel_aanmaak
                                                            THEN
                                                                xcp.ins_srtcontroledl_xcp_startdat
                                                            ELSE
                                                                xcp.ins_deel_aanmaak
                                                        END
                                                    ELSE -- Vervanging(2), Certificering(3).
                                                        CASE
                                                            WHEN     xcp.ins_srtcontroledl_xcp_startdat
                                                                         IS NOT NULL
                                                                 AND xcp.ins_srtcontroledl_xcp_startdat >=
                                                                     xcp.ins_deel_aanmaak
                                                            THEN
                                                                xcp.ins_srtcontroledl_xcp_startdat
                                                            ELSE
                                                                fac.nextcyclusdate (
                                                                    COALESCE (
                                                                        NULL,
                                                                        GREATEST (
                                                                            COALESCE (
                                                                                xcp.ins_srtcontroledl_xcp_startdat,
                                                                                xcp.ins_deel_aanmaak),
                                                                            COALESCE (
                                                                                xcp.ins_deel_aanmaak,
                                                                                xcp.ins_srtcontroledl_xcp_startdat))),
                                                                    xcp.ins_srtcontrole_mode,
                                                                    xcp.ins_srtcontrole_eenheid,
                                                                    xcp.ins_srtcontrole_periode,
                                                                    xcp.ins_srtcontrole_bits,
                                                                    1, -- steps. De eerste inspectie is nog niet geweest dus 1 periode verder dan startdatum/aanmaakdatum.
                                                                    0) -- Er geldt dat (ctr_ismjob = 0)
                                                        END
                                                END
                                            WHEN     di.ins_deelsrtcontrole_status IN
                                                         (2, 3)
                                                 AND di.ins_deelsrtcontrole_datum_org
                                                         IS NOT NULL
                                            THEN -- Gestart(2) en niet de allereerste inspectie.
                                                di.ins_deelsrtcontrole_datum_org
                                            ELSE -- Status is Gereed gemeld(5) of Voltooid(6).
                                                CASE xcp.ins_srtcontrole_mode
                                                    WHEN 0
                                                    THEN -- Moment mode: ga uit van de originele berekende inspectiedatum.
                                                        di.ins_deelsrtcontrole_datum_org
                                                    ELSE -- Interval mode: ga uit van de werkelijke inspectiedatum.
                                                        di.ins_deelsrtcontrole_datum
                                                END
                                        END)
                                        volgendedatum,
                                    fac.nextcyclusdatedeel (
                                        di.deel_key,
                                        xcp.ins_srtcontrole_key,
                                        0)
                                        volgende_keer,
                                    discipline,
                                    soort,
                                    groep,
                                    soortcode,
                                    omschrijving,
                                    opmerking,
                                    locatie_omschrijving,
                                    gebouw,
                                    ruimtenr,
                                    srtcontrole_omschrijving,
                                    ctr_discipline_omschrijving
                                        taaksoort,
                                    ins_deelsrtcontrole_datum_org,
                                    controlemode_omschrijving,
                                    ins_deelsrtcontrole_opmerking,
                                    perslid,
                                    ins_deelsrtcontrole_plandatum,
                                    di.ins_deelsrtcontrole_status,
                                    CASE di.ins_deelsrtcontrole_status
                                        WHEN 0
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controle_pending')
                                        WHEN 2
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controle_gestart')
                                        WHEN 3
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controle_ter_uitvoer')
                                        WHEN 5
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controle_afgemeld')
                                        WHEN 6
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controle_afgerond')
                                    END
                                        deelsrtcontrole_status,
                                    COALESCE (
                                        (SELECT icm.ins_controlemode_success
                                           FROM ins_controlemode icm
                                          WHERE icm.ins_controlemode_key =
                                                (SELECT di2.ins_controlemode_key
                                                   FROM ins_deelsrtcontrole
                                                        di2
                                                  WHERE di2.ins_deelsrtcontrole_key =
                                                        di.ins_deelsrtcontrole_key)),
                                        -1)
                                        ins_controlemode_success,
                                    CASE
                                        WHEN ((SELECT icm.ins_controlemode_success
                                                 FROM ins_controlemode icm
                                                WHERE icm.ins_controlemode_key =
                                                      (SELECT di2.ins_controlemode_key
                                                         FROM ins_deelsrtcontrole
                                                              di2
                                                        WHERE di2.ins_deelsrtcontrole_key =
                                                              di.ins_deelsrtcontrole_key)) =
                                              1)
                                        THEN
                                            lcl.L (
                                                'lcl_ins_controlemode_approved')
                                        ELSE
                                            lcl.L (
                                                'lcl_ins_controlemode_deprecated')
                                    END
                                        resultaat,
                                    xcp.ins_srtcontrole_eind
                                        vervaldatum,
                                    di.ins_deelsrtcontrole_key
                               FROM ins_v_udr_deelinspect      di,
                                    ins_v_defined_inspect_xcp  xcp,
                                    ctr_disc_params            dp
                              WHERE     di.ins_srtcontrole_key =
                                        xcp.ins_srtcontrole_key
                                    AND di.deel_key = xcp.ins_deel_key
                                    AND xcp.ctr_discipline_key =
                                        dp.ctr_ins_discipline_key
                                    AND dp.ctr_disc_params_ismjob = 0
                                    --   AND xcp.ins_srtcontrole_eenheid > 2
                                    AND xcp.ins_scenario_key = 1
                                    AND xcp.ins_srtcontrole_periode > 0
                                    AND di.ins_deelsrtcontrole_key =
                                        (SELECT MAX (ins_deelsrtcontrole_key)
                                           FROM ins_deelsrtcontrole id2
                                          WHERE     id2.ins_deel_key =
                                                    di.deel_key
                                                AND id2.ins_srtcontrole_key =
                                                    di.ins_srtcontrole_key
                                                AND id2.ins_scenario_key = 1)
                             UNION ALL
                             --- dit zijn de niet geplande taken?
                             SELECT d.deel_key
                                        ins_deel_key,
                                    xcp.ins_srtcontrole_key,
                                    NULL,
                                    CASE
                                        WHEN xcp.ctr_controle_type = 1
                                        THEN                   -- Controle(1).
                                            CASE
                                                WHEN     xcp.ins_srtcontroledl_xcp_startdat
                                                             IS NOT NULL
                                                     AND xcp.ins_srtcontroledl_xcp_startdat >=
                                                         xcp.ins_deel_aanmaak
                                                THEN
                                                    xcp.ins_srtcontroledl_xcp_startdat
                                                ELSE
                                                    xcp.ins_deel_aanmaak
                                            END
                                        ELSE -- Vervanging(2), Certificering(3).
                                            CASE
                                                WHEN     xcp.ins_srtcontroledl_xcp_startdat
                                                             IS NOT NULL
                                                     AND xcp.ins_srtcontroledl_xcp_startdat >=
                                                         xcp.ins_deel_aanmaak
                                                THEN
                                                    xcp.ins_srtcontroledl_xcp_startdat
                                                ELSE
                                                    fac.nextcyclusdate (
                                                        COALESCE (
                                                            NULL,
                                                            GREATEST (
                                                                COALESCE (
                                                                    xcp.ins_srtcontroledl_xcp_startdat,
                                                                    xcp.ins_deel_aanmaak),
                                                                COALESCE (
                                                                    xcp.ins_deel_aanmaak,
                                                                    xcp.ins_srtcontroledl_xcp_startdat))),
                                                        xcp.ins_srtcontrole_mode,
                                                        xcp.ins_srtcontrole_eenheid,
                                                        xcp.ins_srtcontrole_periode,
                                                        xcp.ins_srtcontrole_bits,
                                                        1, -- steps. De eerste inspectie is nog niet geweest dus 1 periode verder dan startdatum/aanmaakdatum.
                                                        0) -- Er geldt dat (ctr_ismjob = 0)
                                            END
                                    END
                                        volgendedatum,
                                    fac.nextcyclusdatedeel (
                                        d.deel_key,
                                        xcp.ins_srtcontrole_key,
                                        0)
                                        volgende_keer,
                                    d.discipline,
                                    d.soort,
                                    d.groep,
                                    d.soortcode,
                                    d.omschrijving,
                                    d.opmerking,
                                    d.locatie_omschrijving,
                                    d.gebouw,
                                    d.ruimtenr,
                                    (SELECT isc.ins_srtcontrole_omschrijving
                                       FROM ins_srtcontrole isc
                                      WHERE isc.ins_srtcontrole_key =
                                            xcp.ins_srtcontrole_key)
                                        srtcontrole_omschrijving,
                                    (SELECT cd.ins_discipline_omschrijving
                                       FROM ctr_discipline   cd,
                                            ins_srtcontrole  isc
                                      WHERE     isc.ins_srtcontrole_key =
                                                xcp.ins_srtcontrole_key
                                            AND isc.ctr_discipline_key =
                                                cd.ins_discipline_key)
                                        taaksoort,
                                    ins_deelsrtcontrole_datum_org,
                                    NULL
                                        controlemode_omschrijving,
                                    ins_deelsrtcontrole_opmerking,
                                    NULL
                                        perslid,
                                    ins_deelsrtcontrole_plandatum,
                                    ---  -1 ins_deelsrtcontrole_status,
                                    ins_deelsrtcontrole_status,
                                    lcl.L ('lcl_ins_controlemode_notplaned')
                                        deelsrtcontrole_status,
                                    0
                                        ins_controlemode_success,
                                    ''
                                        resultaat,
                                    xcp.ins_srtcontrole_eind
                                        vervaldatum,
                                    NULL
                                        ins_deelsrtcontrole_key
                               FROM ins_v_udr_deel             d,
                                    ins_deelsrtcontrole        idsc,
                                    ins_v_defined_inspect_xcp  xcp,
                                    ctr_disc_params            dp
                              WHERE     xcp.ins_srtcontrole_key =
                                        idsc.ins_srtcontrole_key(+)
                                    AND xcp.ins_deel_key =
                                        idsc.ins_deel_key(+)
                                    AND xcp.ins_scenario_key =
                                        idsc.ins_scenario_key(+)
                                    AND xcp.ins_deel_key = d.deel_key
                                    AND xcp.ctr_discipline_key =
                                        dp.ctr_ins_discipline_key
                                    AND dp.ctr_disc_params_ismjob = 0
                                    --    AND xcp.ins_srtcontrole_eenheid > 2
                                    AND xcp.ins_scenario_key = 1
                                    AND idsc.ins_deel_key IS NULL
                                    AND idsc.ins_srtcontrole_key IS NULL
                                    AND xcp.ins_srtcontrole_periode > 0
                                    AND (   idsc.ins_deelsrtcontrole_key
                                                IS NULL
                                         OR idsc.ins_deelsrtcontrole_key =
                                            (SELECT MAX (
                                                        ins_deelsrtcontrole_key)
                                               FROM ins_deelsrtcontrole id2
                                              WHERE     id2.ins_deel_key =
                                                        d.deel_key
                                                    AND id2.ins_srtcontrole_key =
                                                        xcp.ins_srtcontrole_key
                                                    AND id2.ins_scenario_key =
                                                        1))))
            SELECT *
              FROM comps) ig,
           ins_deel  d,
           (SELECT kw.ins_deelsrtcontrole_key,
                   DECODE (kw.ins_kmdeelsrtcontr_waarde, 1, 'Ja')    AS document_ontvangen
              FROM ins_srtkenmerk      sk,
                   ins_kenmerk         k,
                   ins_srtcontrole     sc,
                   ins_kmdeelsrtcontr  kw
             WHERE     k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                   AND k.ins_kenmerk_bewerkniveau = 'D'
                   AND k.ins_kenmerk_niveau = 'C'
                   AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key
                   AND k.ins_kenmerk_verwijder IS NULL
                   AND sk.ins_srtkenmerk_key = 161
                   AND kw.ins_kenmerk_key = k.ins_kenmerk_key
                   AND UPPER (k.ins_kenmerk_omschrijving) =
                       'DOCUMENT ONTVANGEN') doc,
           (SELECT 'Ja' document_vereist, sc.ins_srtcontrole_key
              FROM ins_srtkenmerk sk, ins_kenmerk k, ins_srtcontrole sc
             WHERE     k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                   AND k.ins_kenmerk_bewerkniveau = 'D'
                   AND k.ins_kenmerk_niveau = 'C'
                   AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key
                   AND k.ins_kenmerk_verwijder IS NULL
                   AND sk.ins_srtkenmerk_key = 161
                   AND UPPER (k.ins_kenmerk_omschrijving) =
                       'DOCUMENT ONTVANGEN') doc_vereist,
           (  SELECT d.ins_deel_key,
                     LISTAGG (b.prs_bedrijf_naam, CHR (10)) ---- scheidingsteken een enter
                         WITHIN GROUP (ORDER BY d.ins_deel_key)    bedrijf
                FROM ins_srtkenmerk sk,
                     ins_kenmerk    k,
                     ins_kenmerkdeel kd,
                     ins_deel       d,
                     prs_bedrijf    b
               WHERE     sk.ins_srtkenmerk_key = 41
                     AND sk.ins_srtkenmerk_key = k.ins_srtkenmerk_key
                     AND k.ins_kenmerk_key = kd.ins_kenmerk_key
                     AND kd.ins_deel_key = d.ins_deel_key
                     AND k.ins_kenmerk_bewerkniveau = 'D'
                     AND k.ins_kenmerk_verwijder IS NULL
                     AND b.prs_bedrijf_key =
                         fac.safe_to_number (kd.ins_kenmerkdeel_waarde)
            GROUP BY d.ins_deel_key) bedrijf,
           (  SELECT sc.ins_srtcontrole_key,
                     LISTAGG (
                            k.ins_kenmerk_omschrijving
                         || ' '
                         || REPLACE (k.ins_kenmerk_default, '<br/>', CHR (10)),
                         CHR (10) || CHR (10))
                     WITHIN GROUP (ORDER BY sc.ins_srtcontrole_key)    instructies
                FROM ins_srtkenmerk sk, ins_kenmerk k, ins_srtcontrole sc
               WHERE     k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                     AND k.ins_kenmerk_bewerkniveau = 'D'
                     AND k.ins_kenmerk_niveau = 'C'
                     AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key
                     AND k.ins_kenmerk_verwijder IS NULL
                     AND sk.ins_srtkenmerk_key = 61
            GROUP BY sc.ins_srtcontrole_key) instructie,
           (SELECT c.ins_srtcontrole_key, d.prs_dienst_omschrijving
              FROM ins_srtcontrole c, prs_dienst d
             WHERE d.prs_dienst_key = c.prs_dienst_key) dienst
     WHERE     (ig.vervaldatum IS NULL OR ig.vervaldatum > ig.volgendedatum)
           AND d.ins_deel_key = ig.ins_deel_key
           AND d.ins_deel_verwijder IS NULL
           AND (   d.ins_deel_vervaldatum IS NULL
                OR d.ins_deel_vervaldatum > ig.volgendedatum)
           AND bedrijf.ins_deel_key(+) = ig.ins_deel_key
           AND instructie.ins_srtcontrole_key(+) = ig.ins_srtcontrole_key
           AND doc_vereist.ins_srtcontrole_key(+) = ig.ins_srtcontrole_key
           AND doc.ins_deelsrtcontrole_key(+) = ig.ins_deelsrtcontrole_key
           AND dienst.ins_srtcontrole_key(+) = ig.ins_srtcontrole_key;

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