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

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


-- View voor UDR en Doorlooptijdbewaking workflows - Dus inclusief Melding_start_key
-- Aangevuld met Externe nummer ivm geimporteerde topdeskmeldingen
-- Indien in de standaard udr-meldingen deze velden zijn toegevoegd dan deze views uit deze cust-sql halen!
CREATE OR REPLACE VIEW UBRH_V_UDR_MELDING
(
    MELDING_KEY,
    MELDINGNUMMER,
    MELDING_REGIO,
    MELDING_DISTRICT,
    MELDING_LOCATIECODE,
    MELDING_LOCATIE,
    MELDING_LOCATIEPLAATS,
    FCLT_3D_LOCATIE_KEY,
    MELDING_GEBOUWCODE,
    MELDING_GEBOUW,
    MELDING_VERDIEPING,
    MELDING_RUIMTENR,
    MELDING_RUIMTE,
    MELDING_ORDERNR,
    KOSTENSOORTGROEP,
    KOSTENSOORT,
    KOSTENPLAATS,
    KOSTENPLAATS_OMS,
    MELDER,
    MELDER_KEY,
    AFDELING,
    AFDELING_OMSCHRIJVING,
    FCLT_3D_AFDELING_KEY,
    BEDRIJF_KEY,
    INVOERDER,
    MELDBRON,
    SOORTMELDING,
    FCLT_3D_DISCIPLINE_KEY,
    PRODUCTGROEP,
    SUBPRODUCTGROEP,
    BEHANDELGROEP,
    BEHANDELAAR,
    BEHANDELAAR_KEY,
    SUBPRODUCTGROEPGROEP,
    FCLT_3D_DISCIPLINE2_KEY,
    ACTIEVE_BEHANDELGROEP,
    ACTIEVE_BEHANDELAAR_KEY,
    ACTIEVE_BEHANDELAAR,
    MELDING_STATUS,
    SLA_NVT,
    SLA_WERKDGN,
    SLA_WERKUREN,
    SLA_RESPIJTDGN,
    SLA_RESPIJTUREN,
    SLA_ACCPTDGN,
    SLA_ACCPTUREN,
    PLAN_UITVOERTIJD_SLA,
    MELDING_DATUM,
    MELDING_EINDDATUM,
    MELDING_ACCEPTDATUM,
    MELDING_AFGEMELD,
    MELDING_ACCEPTED,
    DOORLOOPTIJD_WERKDGN,
    DOORLOOPTIJD_WERKUREN,
    ONDERWERP,
    VOMSCHRIJVING,
    MELDING_OPMERKING,
    PRIORITEIT,
    PRIORITEITTXT,
    RATING,
    RATING_OPMERKING,
    BOLLETJE,
    ACCEPT_SLA_DAGEN,
    ACCEPT_SLA_UREN,
    UITVOERING_SLA_DAGEN,
    UITVOERING_SLA_UREN,
    AFSPRAAK_SLA_DAGEN,
    AFSPRAAK_SLA_UREN,
    ACCEPT_SLA_OPTIJD,
    UITVOERING_SLA_OPTIJD,
    AFSPRAAK_SLA_OPTIJD,
    SELFSERVICE,
    WORKFLOW_START,
    EXTERN_NUMMER
)
AS
    SELECT mld_melding_key,
           meldingnummer,
           alg_regio_omschrijving,
           alg_district_omschrijving,
           locatie,
           locatie_omschrijving,
           locatie_plaats,
           alg_locatie_key,
           gebouw,
           gebouw_naam,
           verdieping,
           ruimte,
           ruimte_omschrijving,
           melding_ordernr,
           kostensoortgroep,
           kostensoort,
           kostenplaats,
           kostenplaats_oms,
           melder,
           prs_perslid_key,
           afdeling,
           afdeling_omschrijving,
           afdeling_key,
           prs_bedrijf_key,
           invoerder,
           meldbron,
           soortmelding,
           stdm_ins_discipline_key,
           productgroep,
           subproductgroep,
           behandelgroep,
           behandelaar,
           behandelaar_key,
           subproductgroepgroep,
           mld_ins_discipline_key,
           actieve_behandelgroep,
           actieve_behandelaar_key,
           actieve_behandelaar,
           status,
           sla_nvt,
           sla_werkdgn,
           sla_werkuren,
           sla_respijtdgn,
           sla_respijturen,
           sla_accptdgn,
           sla_accpturen,
           plan_uitvoertijd_sla,
           datum,
           einddatum,
           acceptdatum,
           afgemeld,
           accepted,
           DECODE (x.t_doorlooptijd.eenheid,
                   'D', x.t_doorlooptijd.tijdsduur,
                   NULL)
               doorlooptijd_werkdgn,
           DECODE (x.t_doorlooptijd.eenheid,
                   'U', x.t_doorlooptijd.tijdsduur,
                   NULL)
               doorlooptijd_werkuren,
           onderwerp,
           omschrijving,
           opmerking,
           mld_melding_spoed
               prioriteit,
           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')),
           mld_melding_satisfaction,
           mld_melding_satisfaction_op,
           mld_melding_flag,
           DECODE (x.t_doorlooptijd.eenheid,
                   'D', acceptdatum - COALESCE (accepted, afgemeld),
                   NULL)
               accept_sla_dagen,
           CAST (
               DECODE (
                   x.t_doorlooptijd.eenheid,
                   'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                   NULL) AS NUMBER (7, 2))
               accept_sla_uren,
           DECODE (
               x.t_doorlooptijd.eenheid,
               'D',   mld.geteinddatum (mld_melding_key)
                    - COALESCE (afgemeld, SYSDATE)
                    + COALESCE (sla_respijtdgn, 0),
               NULL)
               uitvoering_sla_dagen,
           CAST (
               DECODE (
                   x.t_doorlooptijd.eenheid,
                   'U',   (  (  mld.geteinddatum (mld_melding_key)
                              - COALESCE (afgemeld, SYSDATE))
                           * 24)
                        + COALESCE (sla_respijturen, 0),
                   NULL) AS NUMBER (7, 2))
               uitvoering_sla_uren,
           DECODE (
               x.t_doorlooptijd.eenheid,
               'D',   einddatum
                    - COALESCE (afgemeld, SYSDATE)
                    + COALESCE (sla_respijtdgn, 0),
               NULL)
               afspraak_sla_dagen,
           CAST (
               DECODE (
                   x.t_doorlooptijd.eenheid,
                   'U',   ((einddatum - COALESCE (afgemeld, SYSDATE)) * 24)
                        + COALESCE (sla_respijtdgn, 0),
                   NULL) AS NUMBER (7, 2))
               afspraak_sla_uren,
           CASE
               WHEN    acceptdatum IS NULL
                    OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd.
                         DECODE (
                             x.t_doorlooptijd.eenheid,
                             'D', acceptdatum - COALESCE (accepted, afgemeld),
                             0)
                       + DECODE (
                             x.t_doorlooptijd.eenheid,
                             'U',   (  acceptdatum
                                     - COALESCE (accepted, afgemeld))
                                  * 24,
                             0) >=
                       0
               THEN
                   lcl.l ('lcl_yes')
               ELSE
                   lcl.l ('lcl_no')
           END
               accept_sla_optijd,
           CASE
               WHEN   DECODE (
                          x.t_doorlooptijd.eenheid,
                          'D',   mld.geteinddatum (mld_melding_key)
                               - COALESCE (afgemeld, SYSDATE)
                               + COALESCE (sla_respijtdgn, 0),
                          0)
                    + DECODE (
                          x.t_doorlooptijd.eenheid,
                          'U',   (  (  mld.geteinddatum (mld_melding_key)
                                     - COALESCE (afgemeld, SYSDATE))
                                  * 24)
                               + COALESCE (sla_respijturen, 0),
                          0) >=
                    0
               THEN
                   lcl.l ('lcl_yes')
               ELSE
                   lcl.l ('lcl_no')
           END
               uitvoering_sla_optijd,
           CASE
               WHEN   DECODE (
                          x.t_doorlooptijd.eenheid,
                          'D',   einddatum
                               - COALESCE (afgemeld, SYSDATE)
                               + COALESCE (sla_respijtdgn, 0),
                          0)
                    + DECODE (
                          x.t_doorlooptijd.eenheid,
                          'U',   (  (einddatum - COALESCE (afgemeld, SYSDATE))
                                  * 24)
                               + COALESCE (sla_respijtdgn, 0),
                          0) >=
                    0
               THEN
                   lcl.l ('lcl_yes')
               ELSE
                   lcl.l ('lcl_no')
           END
               afspraak_sla_optijd,
           DECODE (invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no'))
               selfservice,
               mld_melding_start_key,
               mld_melding_externnr
      FROM (SELECT m.mld_melding_key,
                   m.prs_perslid_key,
                   sd.ins_srtdiscipline_prefix || m.mld_melding_key
                       meldingnummer,
                   alg_regio_omschrijving,
                   alg_district_omschrijving,
                   alg_locatie_code
                       locatie,
                   alg_locatie_omschrijving
                       locatie_omschrijving,
                   alg_locatie_plaats
                       locatie_plaats,
                   l.alg_locatie_key,
                   og.alg_gebouw_code
                       gebouw,
                   og.alg_gebouw_naam
                       gebouw_naam,
                   og.alg_verdieping_code
                       verdieping,
                   og.alg_ruimte_nr
                       ruimte,
                   og.alg_ruimte_omschrijving
                       ruimte_omschrijving,
                   m.mld_melding_ordernr
                       melding_ordernr,
                   (SELECT ksg.prs_kostensoortgrp_oms
                      FROM prs_kostensoortgrp ksg, prs_kostensoort ks
                     WHERE     ksg.prs_kostensoortgrp_key =
                               ks.prs_kostensoortgrp_key
                           AND ks.prs_kostensoort_key =
                               (SELECT COALESCE (sm.prs_kostensoort_key,
                                                 disc.prs_kostensoort_key)
                                  FROM mld_stdmelding sm, mld_discipline disc
                                 WHERE     sm.mld_ins_discipline_key =
                                           disc.ins_discipline_key
                                       AND sm.mld_stdmelding_key =
                                           s.mld_stdmelding_key))
                       kostensoortgroep,
                   (SELECT ks.prs_kostensoort_oms
                      FROM prs_kostensoort ks
                     WHERE ks.prs_kostensoort_key =
                           (SELECT COALESCE (sm.prs_kostensoort_key,
                                             disc.prs_kostensoort_key)
                              FROM mld_stdmelding sm, mld_discipline disc
                             WHERE     sm.mld_ins_discipline_key =
                                       disc.ins_discipline_key
                                   AND sm.mld_stdmelding_key =
                                       s.mld_stdmelding_key))
                       kostensoort,
                   (SELECT k.prs_kostenplaats_nr
                      FROM prs_kostenplaats k
                     WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                       kostenplaats,
                   (SELECT k.prs_kostenplaats_omschrijving
                      FROM prs_kostenplaats k
                     WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                       kostenplaats_oms,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = m.prs_perslid_key)
                       melder,
                   (SELECT prs_afdeling_naam
                      FROM prs_afdeling afd, prs_perslid pp
                     WHERE     afd.prs_afdeling_key = pp.prs_afdeling_key
                           AND pp.prs_perslid_key = m.prs_perslid_key)
                       afdeling,
                   (SELECT prs_afdeling_omschrijving
                      FROM prs_afdeling afd, prs_perslid pp
                     WHERE     afd.prs_afdeling_key = pp.prs_afdeling_key
                           AND pp.prs_perslid_key = m.prs_perslid_key)
                       afdeling_omschrijving,
                   (SELECT prs_afdeling_key
                      FROM prs_perslid pp
                     WHERE pp.prs_perslid_key = m.prs_perslid_key)
                       afdeling_key,
                   (SELECT prs_bedrijf_key
                      FROM prs_v_afdeling pva, prs_perslid pp
                     WHERE     pva.prs_afdeling_key = pp.prs_afdeling_key
                           AND pp.prs_perslid_key = m.prs_perslid_key)
                       prs_bedrijf_key,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key =
                           mld.getmeldinguser (m.mld_melding_key))
                       invoerder,
                   (SELECT mb.mld_meldbron_omschrijving
                      FROM mld_meldbron mb
                     WHERE mb.mld_meldbron_key = m.mld_meldbron_key)
                       meldbron,
                   m.mld_meldbron_key,
                   sd.ins_srtdiscipline_key
                       ins_srtdiscipline_key,
                   sd.ins_srtdiscipline_omschrijving
                       soortmelding,
                   md.ins_discipline_key
                       stdm_ins_discipline_key,
                   md.ins_discipline_omschrijving
                       productgroep,
                   s.mld_stdmelding_omschrijving
                       subproductgroep,
                   smg.mld_stdmeldinggroep_naam
                       subproductgroepgroep,
                   mbg.mld_behandelgroep_naam
                       behandelgroep,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key)
                       behandelaar,
                   m.mld_melding_behandelaar_key
                       behandelaar_key,
                   m.mld_ins_discipline_key
                       mld_ins_discipline_key,
                   (SELECT md2.ins_discipline_omschrijving
                      FROM mld_discipline md2
                     WHERE md2.ins_discipline_key = m.mld_ins_discipline_key)
                       actieve_behandelgroep,
                   m.mld_melding_behandelaar2_key
                       actieve_behandelaar_key,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key =
                           m.mld_melding_behandelaar2_key)
                       actieve_behandelaar,
                   (SELECT mld_statuses_omschrijving
                      FROM mld_statuses sta
                     WHERE sta.mld_statuses_key = m.mld_melding_status)
                       status,
                   CASE
                       WHEN m.mld_melding_einddatum >
                            COALESCE (
                                fac.gettrackingdate ('MLDAFM',
                                                     m.mld_melding_key),
                                fac.gettrackingdate ('MLDREJ',
                                                     m.mld_melding_key),
                                SYSDATE)
                       THEN
                           1
                       ELSE
                           0
                   END
                       plan_uitvoertijd_sla,
                   CASE
                       WHEN    m.mld_melding_indult = 1
                            OR s.mld_stdmelding_slabewaken = 0
                       THEN
                           1
                       ELSE
                           0
                   END
                       sla_nvt,
                   DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                           'D', m.mld_melding_t_uitvoertijd.tijdsduur,
                           NULL)
                       sla_werkdgn,
                   DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                           'U', m.mld_melding_t_uitvoertijd.tijdsduur,
                           NULL)
                       sla_werkuren,
                   DECODE (m.mld_melding_t_respijt.eenheid,
                           'D', m.mld_melding_t_respijt.tijdsduur,
                           NULL)
                       sla_respijtdgn,
                   DECODE (m.mld_melding_t_respijt.eenheid,
                           'U', m.mld_melding_t_respijt.tijdsduur,
                           NULL)
                       sla_respijturen,
                   DECODE (m.mld_melding_t_accepttijd.eenheid,
                           'D', m.mld_melding_t_accepttijd.tijdsduur,
                           NULL)
                       sla_accptdgn,
                   DECODE (m.mld_melding_t_accepttijd.eenheid,
                           'U', m.mld_melding_t_accepttijd.tijdsduur,
                           NULL)
                       sla_accpturen,
                   m.mld_melding_datum
                       datum,
                   CASE
                       WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE (NULL)
                       ELSE m.mld_melding_einddatum
                   END
                       einddatum,
                   mld.getacceptdatum (m.mld_melding_datum,
                                       m.mld_stdmelding_key,
                                       og.alg_onroerendgoed_keys)
                       acceptdatum,
                   COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                             mld.getmeldingstatusdate (m.mld_melding_key, 1))
                       afgemeld,
                   COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4),
                             mld.getmeldingstatusdate (m.mld_melding_key, 1))
                       accepted,
                   mld.getactualuitvoer (m.mld_melding_key)
                       t_doorlooptijd,
                   m.mld_melding_onderwerp
                       onderwerp,
                   m.mld_melding_omschrijving
                       omschrijving,
                   m.mld_melding_opmerking
                       opmerking,
                   m.mld_melding_spoed,
                   m.mld_melding_satisfaction,
                   m.mld_melding_satisfaction_op,
                   m.mld_melding_flag,
                   m.mld_melding_start_key,
                   m.mld_melding_externnr
              FROM mld_melding                m,
                   mld_stdmelding             s,
                   alg_locatie                l,
                   alg_district               d,
                   alg_regio                  r,
                   alg_v_allonrgoed_gegevens  og,
                   mld_discipline             md,
                   mld_disc_params            mdp,
                   mld_behandelgroep          mbg,
                   ins_srtdiscipline          sd,
                   mld_stdmeldinggroep        smg
             WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
                   AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                   AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
                   AND md.ins_discipline_key = s.mld_ins_discipline_key
                   AND md.ins_discipline_key = mdp.mld_ins_discipline_key
                   AND s.mld_stdmeldinggroep_key =
                       smg.mld_stdmeldinggroep_key(+)
                   AND mdp.mld_behandelgroep_key =
                       mbg.mld_behandelgroep_key(+)
                   AND l.alg_district_key = d.alg_district_key(+)
                   AND d.alg_regio_key = r.alg_regio_key(+)
                   AND m.mld_alg_onroerendgoed_keys =
                       og.alg_onroerendgoed_keys(+)
                   AND m.fac_activiteit_key IS NULL
                   AND m.mld_melding_datum >=
                       TO_DATE ('01-01-2010', 'DD-MM-YYYY')) x;

-- Hieronder de views voor de definitieve rapportage voor Contactcentrum - bewaking Flows
-- Twee hulpviews
-- Twee basisviews - Hoofd + Detail

-- Hulpview 1 workflows - Route weergave
CREATE OR REPLACE VIEW UBRH_V_WORKFLOW_1
(
    MLD_MELDING_START_KEY,
    TRAJECT_ROUTE
)
AS
      SELECT m.mld_melding_start_key,
             LISTAGG (
                    md.ins_discipline_omschrijving
                 || '('
                 || TO_CHAR (m.mld_melding_key)
                 || ')',
                 ' / ')
                 WITHIN GROUP (ORDER BY m.mld_melding_key)
                 AS Route
        FROM mld_melding m, mld_stdmelding sm, mld_discipline md
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = md.ins_discipline_key
             AND m.mld_melding_datum > SYSDATE - 19
             AND m.mld_melding_start_key IS NOT NULL
             AND md.ins_srtdiscipline_key IN (21, 22) --  21, 22 is info en inkoopaanvraag. 23 is ADR (nog even erbuiten laten...)
    GROUP BY m.mld_melding_start_key;

-- Hulpview 2 workflows - Alle informatievelden / kenmerkvelden die in flow gevuld worden
CREATE OR REPLACE VIEW UBRH_V_WORKFLOW_2
(
    MLD_MELDING_START_KEY,
    TRAJECT_TYPE,
    MLD_MELDING_KEY,
    MLD_STDMELINDG_KEY,
    MLD_STDMELDING_OMSCHRIJVING,
    MLD_MELDING_STATUS,
    BESTEMD_VOORTEAM,
    SOORT_TRAJECT,
    SOORT_TRAJECT_HERZIEN,
    CONTROLESTAPPEN,
    WORKFLOW_AFBREKEN,
    AANGEVRAAGD_VOOR,
    UITERSTE_DATUM_CONT,
    KLANTCONTACT_GEHAD,
    KLANTCONTACT_DATUM,
    NUMMER_INKOOPAANVRAAGFORM,
    CONTRACTNR_SYNERGY,
    ONDERHANDELINGSNR_DIGIINK,
    ORDERNR_DIGIINK,
    DATUM_CONTRACTVERSTUURD,
    DATUM_CONTRACTRETOUR
)
AS
      SELECT m.mld_melding_start_key,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21 THEN 'Inkooptraject'
                  WHEN md.ins_srtdiscipline_key = 22 THEN 'Informatietraject'
                  ELSE ''
              END)
                 AS TrajectType,
             m.mld_melding_key,
             sm.mld_stdmelding_key,
             sm.mld_stdmelding_omschrijving,
             m.mld_melding_status,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT fu.fac_usrdata_omschr
                         FROM mld_kenmerkmelding mkm,
                              mld_kenmerk       k,
                              fac_usrdata       fu
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND mkm.mld_kenmerkmelding_waarde =
                                  fu.fac_usrdata_key
                              AND k.mld_srtkenmerk_key = 85)
                  WHEN md.ins_srtdiscipline_key = 22
                  THEN
                      (SELECT fu.fac_usrdata_omschr
                         FROM mld_kenmerkmelding mkm,
                              mld_kenmerk       k,
                              fac_usrdata       fu
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND mkm.mld_kenmerkmelding_waarde =
                                  fu.fac_usrdata_key
                              AND k.mld_srtkenmerk_key = 66)
                  ELSE
                      'nvt'
              END)
                 AS BestemdVoorTeam, -- 'Bestemd voor uitvoeringsteam (INK / INF)'
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT fu.fac_usrdata_omschr
                         FROM mld_kenmerkmelding mkm,
                              mld_kenmerk       k,
                              fac_usrdata       fu
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND mkm.mld_kenmerkmelding_waarde =
                                  fu.fac_usrdata_key
                              AND k.mld_srtkenmerk_key = 86)
                  WHEN md.ins_srtdiscipline_key = 22
                  THEN
                      (SELECT fu.fac_usrdata_omschr
                         FROM mld_kenmerkmelding mkm,
                              mld_kenmerk       k,
                              fac_usrdata       fu
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND mkm.mld_kenmerkmelding_waarde =
                                  fu.fac_usrdata_key
                              AND k.mld_srtkenmerk_key = 67)
                  ELSE
                      'nvt'
              END)
                 AS SoortTrajectOfVraag, -- 'Soort inkooptraject / Soort informatievraag'
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 161)
                  WHEN md.ins_srtdiscipline_key = 22
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 74)
                  ELSE
                      'nvt'
              END)
                 AS SoortTraject_Herzien, -- 'Soort inkoop/informatietraject (herzien)'
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT fu.fac_usrdata_omschr
                         FROM mld_kenmerkmelding mkm,
                              mld_kenmerk       k,
                              fac_usrdata       fu
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND mkm.mld_kenmerkmelding_waarde =
                                  fu.fac_usrdata_key
                              AND k.mld_srtkenmerk_key = 87)
                  ELSE
                      'nvt'
              END)
                 AS ControleStappen,            --  'Controlestappen Workflow'
             (SELECT fu.fac_usrdata_omschr
                FROM mld_kenmerkmelding mkm, mld_kenmerk k, fac_usrdata fu
               WHERE     mkm.mld_melding_key = m.mld_melding_key
                     AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                     AND mkm.mld_kenmerkmelding_waarde = fu.fac_usrdata_key
                     AND k.mld_srtkenmerk_key = 62)
                 AS WorkflowAfbreken,                   --  'Workflow stoppen'
             (SELECT afd.prs_afdeling_keuzelijst
                FROM mld_kenmerkmelding   mkm,
                     mld_kenmerk          k,
                     UBRH_V_AFDELINGKIEZEN afd
               WHERE     mkm.mld_melding_key = m.mld_melding_key
                     AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                     AND k.mld_srtkenmerk_key = 68
                     AND fac.safe_to_number (mkm.mld_kenmerkmelding_waarde) =
                         afd.prs_afdeling_key)
                 AS VoorWieAangevraagd,             --  'Voor wie aangevraagd'
             (SELECT TO_DATE (mkm.mld_kenmerkmelding_waarde, 'dd-mm-yyyy')
                FROM mld_kenmerkmelding mkm, mld_kenmerk k
               WHERE     mkm.mld_melding_key = m.mld_melding_key
                     AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                     AND k.mld_srtkenmerk_key = 69)
                 AS UitersteDatumContactKlant,
             (CASE
                  WHEN (SELECT mkm.mld_kenmerkmelding_waarde
                          FROM mld_kenmerkmelding mkm, mld_kenmerk k
                         WHERE     mkm.mld_melding_key = m.mld_melding_key
                               AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                               AND k.mld_srtkenmerk_key = 100) =
                       1
                  THEN
                      'Ja'
                  ELSE
                      'Nee'
              END)
                 AS KlantcontactGehad,
             (SELECT mkm.mld_kenmerkmelding_waarde
                FROM mld_kenmerkmelding mkm, mld_kenmerk k
               WHERE     mkm.mld_melding_key = m.mld_melding_key
                     AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                     AND k.mld_srtkenmerk_key = 101)
                 AS Klantcontact_Datum,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 88)
                  ELSE
                      'nvt'
              END)
                 AS NummerInkoopaanvraagformulier,
             (SELECT mkm.mld_kenmerkmelding_waarde
                FROM mld_kenmerkmelding mkm, mld_kenmerk k
               WHERE     mkm.mld_melding_key = m.mld_melding_key
                     AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                     AND k.mld_srtkenmerk_key = 65)
                 AS Contractnr_Synergynr,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 90)
                  ELSE
                      'nvt'
              END)
                 AS Onderhandelingsnr_DigiInk,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 181)
                  ELSE
                      'nvt'
              END)
                 AS Ordernr_DigiInk,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 104)
                  ELSE
                      'nvt'
              END)
                 AS Datum_ContractVerstuurd,
             (CASE
                  WHEN md.ins_srtdiscipline_key = 21
                  THEN
                      (SELECT mkm.mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding mkm, mld_kenmerk k
                        WHERE     mkm.mld_melding_key = m.mld_melding_key
                              AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 105)
                  ELSE
                      'nvt'
              END)
                 AS Datum_ContractRetour
        FROM mld_melding   m,
             mld_stdmelding sm,
             mld_discipline md,
             (  SELECT MAX (mm.mld_melding_key) max_key, mm.mld_melding_start_key
                  FROM mld_melding mm
              GROUP BY mm.mld_melding_start_key) sub
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = md.ins_discipline_key
             -- AND m.mld_melding_datum > TO_DATE (sysdate-19)
             AND m.mld_melding_start_key IS NOT NULL
             AND md.ins_srtdiscipline_key IN (21, 22)
             AND sm.mld_stdmelding_key NOT IN (124) -- Uitsluiten DigiInkoop ivm parallel
             AND m.mld_melding_start_key = sub.mld_melding_start_key
             AND m.mld_melding_key = sub.max_key
             AND m.mld_melding_start_key > 54051
    ORDER BY m.mld_melding_start_key;

-- Basisview Workflows - De hoofdview met per traject 1 totaalregel
CREATE OR REPLACE VIEW UBRH_V_WORKFLOW_HOOFD
(
    TRAJECT_NR,
    TRAJECT_TYPE,
    DATUM_INVOER,
    INGEVOERD_DOOR,
    AANVRAGER,
    DEPARTEMENT_KP,
    AANGEVRAAGD_VOOR,
    ONDERWERP,
    OMSCHRIJVING,
    BESTEMD_VOORTEAM,
    SOORT_TRAJECT,
    CONTROLESTAPPEN,
    KLANTCONT_UITERLIJK,
    KLANTCONT_GEHAD,
    KLANTCONT_DATUM,
    CONTROLE_1,
    CONTROLE_2,
    TRAJECT_STATUS,
    TRAJECT_ROUTE,
    TRAJECT_STREEDATUMGEREED,
    TRAJECT_DATUMGEREED,
    DOORLOOPTIJD_WERKDAGEN
)
AS
    SELECT m.mld_melding_key
               AS Traject_Nummer,
           sd.ins_srtdiscipline_omschrijving
               AS Type_aanvraag,
           m.mld_melding_datum
               AS Datum_Invoer,
           (SELECT pp.prs_perslid_naam
              FROM fac_tracking ft, prs_perslid pp
             WHERE     m.mld_melding_key = ft.fac_tracking_refkey
                   AND ft.fac_srtnotificatie_key = 49                -- MLDNEW
                   AND ft.prs_perslid_key = pp.prs_perslid_key)
               AS IngevoerdDoor,
           (SELECT pp.prs_perslid_naam
              FROM prs_perslid pp
             WHERE pp.prs_perslid_key = m.prs_perslid_key)
               AS Aanvrager,
           (SELECT pk.prs_kostenplaats_omschrijving
              FROM prs_kostenplaats pk
             WHERE m.prs_kostenplaats_key = pk.prs_kostenplaats_key)
               AS Departement_KP,
           w2.aangevraagd_voor
               AS AangevraagdVoor,
           m.mld_melding_onderwerp
               AS Onderwerp,
           m.mld_melding_omschrijving
               AS Omschrijving,
           w2.bestemd_voorteam
               AS BestemdVoorTeam,
           w2.soort_traject
               AS SoortTrajectVraag,
           w2.controlestappen
               AS ControleStappen,
           w2.uiterste_datum_cont
               AS UiterlijkeDatumKlantcontact,
           w2.klantcontact_gehad
               AS KlantcontactGehad,
           w2.klantcontact_datum
               AS KlantcontactDatum,
           (CASE
                WHEN     w2.klantcontact_gehad = 'Nee'
                     AND w2.uiterste_datum_cont IS NOT NULL
                     AND (w2.uiterste_datum_cont) > TRUNC (SYSDATE)
                THEN
                    'Nog binnen termijn'
                WHEN     w2.klantcontact_gehad = 'Nee'
                     AND w2.uiterste_datum_cont IS NOT NULL
                     AND (w2.uiterste_datum_cont) = TRUNC (SYSDATE)
                THEN
                    'Vandaag doen'
                WHEN     w2.klantcontact_gehad = 'Nee'
                     AND w2.uiterste_datum_cont IS NOT NULL
                     AND (w2.uiterste_datum_cont) < TRUNC (SYSDATE)
                THEN
                    'Te laat'
                ELSE
                    ''
            END)
               AS Controle_Doorlooptijd_1,
           (CASE
                WHEN     w2.klantcontact_gehad = 'Ja'
                     AND (w2.uiterste_datum_cont) >= (w2.klantcontact_datum)
                THEN
                    'Doel gehaald'
                WHEN     w2.klantcontact_gehad = 'Ja'
                     AND (w2.uiterste_datum_cont) < (w2.klantcontact_datum)
                THEN
                    'Doel NIET gehaald'
                ELSE
                    ''
            END)
               AS Controle_Doorlooptijd_2,
           (CASE
                WHEN     m.mld_melding_status = 4
                     AND w2.workflow_afbreken = 'Nee'
                THEN
                    'Loopt'
                WHEN     m.mld_melding_status = 4
                     AND w2.workflow_afbreken = 'Ja - Afgebroken'
                THEN
                    'Loopt! - Workflow stoppen staat op Afgebroken. Laatste melding in route nog gereed melden om traject ook echt af te breken'
                WHEN     m.mld_melding_status = 5
                     AND w2.workflow_afbreken = 'Nee'
                THEN
                    'Gereed'
                WHEN     m.mld_melding_status = 5
                     AND w2.workflow_afbreken = 'Ja - Afgebroken'
                THEN
                    'Afgebroken'
                ELSE
                    'Check veld Workflow stoppen!'
            END)
               AS Status,
           w1.traject_route
               AS RouteTraject,
           (m.mld_melding_einddatum)
               AS StreefdatumGereed,
           (SELECT ft.fac_tracking_datum
              FROM fac_tracking ft
             WHERE     ft.fac_tracking_refkey = m.mld_melding_start_key
                   AND ft.fac_srtnotificatie_key = 44                -- MLDAFM
                                                     )
               AS Afmelddatum,
           (CASE
                WHEN m.mld_melding_status = 4
                THEN
                    fac.count_Work_Days (m.mld_melding_datum, SYSDATE)
                WHEN m.mld_melding_status = 5
                THEN
                    fac.count_Work_Days (
                        m.mld_melding_datum,
                        (SELECT ft.fac_tracking_datum
                           FROM fac_tracking ft
                          WHERE     ft.fac_tracking_refkey =
                                    m.mld_melding_start_key
                                AND ft.fac_srtnotificatie_key = 44)) -- MLDAFM
                ELSE
                    0
            END)
               AS Doorlooptijd_Werkdagen_TRAJECT
      FROM mld_melding        m,
           mld_stdmelding     sm,
           mld_discipline     md,
           ins_srtdiscipline  sd,
           UBRH_V_WORKFLOW_1  w1,
           UBRH_V_WORKFLOW_2  w2
     WHERE     m.mld_melding_key = m.mld_melding_start_key
           AND m.mld_stdmelding_key = sm.mld_stdmelding_key
           AND sm.mld_ins_discipline_key = md.ins_discipline_key
           AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
           AND m.mld_melding_start_key = w1.mld_melding_start_key
           AND m.mld_melding_start_key = w2.mld_melding_start_key
           AND m.mld_melding_start_key > 54051
           AND m.mld_melding_start_key IS NOT NULL
           AND md.ins_srtdiscipline_key IN (21, 22) --  21, 22 is info en inkoopaanvraag. 23 is ADR
;

-- Basisview Workflows - De detailview met per traject alle aangemaakte meldingen
CREATE OR REPLACE VIEW UBRH_V_WORKFLOW_DETAIL
(
    TRAJECT_NR,
    TRAJECT_TYPE,
    ONDERWERP,
    MELDING_NR,
    MELDING_OMS,
    MELDING_AANMAAKDATUM,
    STATUS,
    DATUM_ACCEPTATIE,
    BEHANDELAAR,
    BEHANDELAAR_DATUM,
    DATUM_GEREED,
    DOORLOOPTIJD_WERKDAGEN
)
AS
      SELECT m.mld_melding_start_key,
             md.ins_discipline_omschrijving,
             m.mld_melding_onderwerp
                 AS Onderwerp,
             m.mld_melding_key,
             sm.mld_stdmelding_omschrijving,
             m.mld_melding_datum
                 AS Aanmaakdatum,
             (CASE
                  WHEN m.mld_melding_status < 4 THEN 'Nog accepteren'
                  WHEN m.mld_melding_status = 4 THEN 'Loopt'
                  WHEN m.mld_melding_status > 4 THEN 'Gereed'
                  ELSE 'Onbekend'
              END)
                 AS Status,
             (SELECT ft.fac_tracking_datum
                FROM fac_tracking ft
               WHERE     ft.fac_tracking_refkey = m.mld_melding_key
                     AND ft.fac_srtnotificatie_key = 43             --  MLDACP
                                                       )
                 AS Acceptatiedatum,
             (SELECT pp.prs_perslid_naam
                FROM prs_perslid pp
               WHERE m.mld_melding_behandelaar_key = pp.prs_perslid_key)
                 AS Behandelaar,
             (SELECT MAX (ft.fac_tracking_datum)
                FROM fac_tracking ft
               WHERE     ft.fac_tracking_refkey = m.mld_melding_key
                     AND ft.fac_srtnotificatie_key = 57              -- MLDBEH
                                                       )
                 AS Behandelaar_Datum,           --  LAATSTE EBHANDELAARSDATUM
             (SELECT ft.fac_tracking_datum
                FROM fac_tracking ft
               WHERE     ft.fac_tracking_refkey = m.mld_melding_key
                     AND ft.fac_srtnotificatie_key = 44              -- MLDAFM
                                                       )
                 AS Afmelddatum,
             (CASE
                  WHEN m.mld_melding_status = 4
                  THEN
                      fac.count_Work_Days (m.mld_melding_datum, SYSDATE)
                  WHEN m.mld_melding_status = 5
                  THEN
                      fac.count_Work_Days (
                          m.mld_melding_datum,
                          (SELECT ft.fac_tracking_datum
                             FROM fac_tracking ft
                            WHERE     ft.fac_tracking_refkey =
                                      m.mld_melding_key
                                  AND ft.fac_srtnotificatie_key = 44)) -- MLDAFM
                  ELSE
                      0
              END)
                 AS Doorlooptijd_Werkdagen_ACTIE
        FROM mld_melding m, mld_stdmelding sm, mld_discipline md
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = md.ins_discipline_key
             AND m.mld_melding_start_key > 54051
             AND m.mld_melding_start_key IS NOT NULL
             AND md.ins_srtdiscipline_key IN (21, 22) --  21, 22 is info en inkoopaanvraag. 23 is ADR (nog even erbuiten laten...)
    ORDER BY m.mld_melding_start_key, m.mld_melding_key ASC; 


-- View om bij de meldingen de Afdeling te kunnen kiezen vanuit 1e niveau Ministerie en daaronder de echte afdeling (laagste niveau)

CREATE OR REPLACE VIEW UBRH_V_AFDELINGKIEZEN
(
    PRS_AFDELING_KEY,
    PRS_AFDELING_OMSCHRIJVING,
    PRS_DEPARTEMENT_KEY,
    PRS_DEPARTEMENT_OMSCHRIJVING,
    PRS_DEPARTEMENT_CODE,
    PRS_AFDELING_KEUZELIJST
)
AS
      SELECT b.prs_afdeling_key
                 AS Key_EigenAfdeling,
             (SELECT a.prs_afdeling_omschrijving
                FROM prs_afdeling a
               WHERE a.prs_afdeling_key = b.prs_afdeling_key)
                 AS EigenAfdelingsNaam,
             b.prs_afdeling_key1
                 AS Key_Departement,
             a.prs_afdeling_omschrijving
                 AS Naam_Departement,
             a.prs_afdeling_naam
                 AS Code_Departement,
                a.prs_afdeling_naam
             || ' / '
             || (SELECT a.prs_afdeling_omschrijving
                   FROM prs_afdeling a
                  WHERE a.prs_afdeling_key = b.prs_afdeling_key)
                 AS Naam_Keuzelijst
        FROM prs_v_afdeling_boom b, prs_afdeling a
       WHERE     b.prs_afdeling_key1 = a.prs_afdeling_key
             AND a.prs_afdeling_verwijder IS NULL
    ORDER BY Naam_Keuzelijst ASC;


-- View voor kennisbank, de verantwoordelijke mensen voor vastlegging en onderhoud.
-- LET OP - ID autorisatiegroep nog in PROD goedzetten

CREATE OR REPLACE VIEW ubrh_v_mdw_kennisbank
(
   PRS_PERSLID_KEY,
   NAAM
)
AS
   SELECT DISTINCT p.prs_perslid_key, N.PRS_PERSLID_NAAM_FRIENDLY
     FROM fac_gebruikersgroep gg,
          prs_v_aanwezigperslid p,
          fac_groep gr,
          fac_groeprechten grr,
          prs_v_perslid_fullnames n
    WHERE     p.prs_perslid_key = gg.prs_perslid_key
          AND gg.fac_groep_key = gr.fac_groep_key
          AND gr.FAC_GROEP_KEY = grr.fac_groep_key
          AND n.prs_perslid_key = p.prs_perslid_key
          AND gr.FAC_GROEP_KEY = 42;

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

   v_newline                 VARCHAR2 (1000);                   -- Import line
   v_field                   VARCHAR2 (100);                   -- Import field
   v_fielddelimitor          VARCHAR2 (1) := ';';           -- Field seperator
   v_count_import            NUMBER (10);
   v_count                   NUMBER;
   v_errormsg                VARCHAR2 (2000);
   v_errorhint               VARCHAR2 (2000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (2000);
   -- De importvelden vanuit Topdesk
   v_meldingnummer           VARCHAR2 (100);
   v_naam_aanmelder          VARCHAR2 (100);
   v_extern_nummer           VARCHAR2 (100);
   v_aanmaker_kaart          VARCHAR2 (100);
   v_naam_behandelaar        VARCHAR2 (100);
   v_datumtijd_van_aanmaak   VARCHAR2 (100);
   v_afgemeld                VARCHAR2 (100);
   v_korte_omschrijving      VARCHAR2 (100);
   v_soort_binnenkomst       VARCHAR2 (100);
   v_soort_melding           VARCHAR2 (100);
   v_status                  VARCHAR2 (100);
   v_streefdatum             VARCHAR2 (100);
   v_categorie               VARCHAR2 (100);
   v_subcategorie            VARCHAR2 (100);
   v_urgentie                VARCHAR2 (100);

   header_found              BOOLEAN := FALSE;
BEGIN
   -- Eerder geïmporteerde regels verwijderen
   DELETE FROM ubrh_imp_topdesk;

   v_count_import := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_meldingnummer);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_naam_aanmelder);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_extern_nummer);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_aanmaker_kaart);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_naam_behandelaar);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_categorie);
         fac.imp_getfield (v_newline,
                           v_fielddelimitor,
                           v_datumtijd_van_aanmaak);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_afgemeld);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_korte_omschrijving);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_soort_binnenkomst);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_soort_melding);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_status);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_streefdatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_subcategorie);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_urgentie);

         -- Skip until the header is found
         IF (header_found = FALSE)
         THEN
            IF     UPPER (v_meldingnummer) = 'MELDINGNUMMER'
               AND UPPER (v_naam_aanmelder) = 'NAAM AANMELDER'
               AND UPPER (v_extern_nummer) = 'EXTERN NUMMER'
               AND UPPER (v_aanmaker_kaart) = 'AANMAKER VAN DE KAART'
               AND UPPER (v_naam_behandelaar) = 'BEHANDELAAR'
               AND UPPER (v_categorie) = 'CATEGORIE'
               AND UPPER (v_datumtijd_van_aanmaak) =
                     'DATUM / TIJD VAN AANMAAK'
               AND UPPER (v_afgemeld) = 'DATUM AFGEMELD'
               AND UPPER (v_korte_omschrijving) =
                     'KORTE OMSCHRIJVING (DETAILS)'
               AND UPPER (v_soort_binnenkomst) = 'SOORT BINNENKOMST'
               AND UPPER (v_soort_melding) = 'SOORT MELDING'
               AND UPPER (v_status) = 'STATUS'
               AND UPPER (v_streefdatum) = 'STREEFDATUM'
               AND UPPER (v_subcategorie) = 'SUBCATEGORIE'
               AND UPPER (v_urgentie) = 'URGENTIE'
            THEN
               header_found := TRUE;
            END IF;
         ELSE
            INSERT INTO ubrh_imp_topdesk (meldingnummer,
                                          naam_aanmelder,
                                          extern_nummer,
                                          aanmaker_kaart,
                                          behandelaar,
                                          datum_aanmaak,
                                          datum_afgemeld,
                                          korte_omschrijving,
                                          soort_binnenkomst,
                                          soort_melding,
                                          status,
                                          streefdatum,
                                          categorie,
                                          subcategorie,
                                          urgentie)
                VALUES (v_meldingnummer,
                        v_naam_aanmelder,
                        SUBSTR (v_extern_nummer, 1, 30),
                        v_aanmaker_kaart,
                        v_naam_behandelaar,
                        fac.safe_to_date (v_datumtijd_van_aanmaak,
                                          'YYYY-MM-DD HH24:MI'),
                        fac.safe_to_date (v_afgemeld,
                        									'YYYY-MM-DD HH24:MI'),
                        v_korte_omschrijving,
                        v_soort_binnenkomst,
                        v_soort_melding,
                        v_status,
                        fac.safe_to_date (v_streefdatum,
                        								'YYYY-MM-DD HH24:MI'),
                        v_categorie,
                        v_subcategorie,
                        v_urgentie);

            v_count_import := v_count_import + 1;

         END IF;
      END;
   END LOOP ;


            --- MELDING KEY ERBIJ HALEN
            UPDATE ubrh_imp_topdesk  u
               SET u.subcategorie_key =
                      (SELECT DISTINCT mld_stdmelding_key
                         FROM mld_stdmelding m, ins_tab_discipline d
                        WHERE m.mld_ins_discipline_key = d.ins_discipline_key
                              AND d.ins_discipline_module = 'MLD'
                              AND UPPER (d.ins_discipline_omschrijving) =
                                    UPPER (u.categorie)
                              AND m.mld_stdmelding_upper =
                                    UPPER (u.subcategorie))  ;

            --- INDIEN GEEN MELDINGKEY ACHTERHAALD KAN WORDEN TERUGVALLEN OP DUMMY MELDING
            --- MLD KEY  ACCEPT = 321, PROD = 61, dus voor het gemak op de omschrijving van de stdmelding
            UPDATE ubrh_imp_topdesk
               SET subcategorie_key =
                      (SELECT mld_stdmelding_key
                         FROM mld_stdmelding
                        WHERE mld_stdmelding_upper = 'REST TD')
             WHERE subcategorie_key IS NULL;

            --- STATUS KEY
            UPDATE ubrh_imp_topdesk
               SET status_key =
                      DECODE (UPPER (status),
                              'NIEUW', 2,
                              'DIGIINKOOP - LOGIUS', 7,
                              'IN BEHANDELING', 4,
                              'WACHT OP GEBRUIKER', 4,
                              'AFGEMELD', 5,
                              'INGEPLAND', 4,
                              'WACHT OP LEVERANCIER', 4);

            ---  PRIO KEY
            UPDATE ubrh_imp_topdesk
               SET urgentie_key =
                      DECODE (UPPER (urgentie),
                              'LAAG', 4,
                              'NORMAAL', 3,
                              'HOOG', 2,
                              'URGENT',1
                              );

            --- PERSLID KEY AANMELDER
            UPDATE ubrh_imp_topdesk u
						   SET u.melderkey =
						           (SELECT MAX (p.prs_perslid_key)
						              FROM prs_perslid p
						             WHERE UPPER (p.prs_perslid_naam) = UPPER (u.naam_aanmelder))
						 WHERE EXISTS
						           (SELECT 1
						              FROM prs_perslid p
						             WHERE UPPER (p.prs_perslid_naam) = UPPER (u.naam_aanmelder))       ;


            --- PERSLID KEY AANMAKER VD KAART
            UPDATE ubrh_imp_topdesk u
               SET aanmaker_kaartkey =
                      (SELECT MAX (p.prs_perslid_key)
                         FROM prs_perslid p
                        WHERE UPPER (p.prs_perslid_naam) =
                                 UPPER (u.aanmaker_kaart))
						 WHERE EXISTS
						           (SELECT 1
						              FROM prs_perslid p
						             WHERE UPPER (p.prs_perslid_naam) = UPPER (u.aanmaker_kaart))         ;


            -- PERSLID KEY BEHANDELAAR
            UPDATE ubrh_imp_topdesk u
               SET behandelaar_key =
                      (SELECT MAX (p.prs_perslid_key)
                         FROM prs_perslid p
                        WHERE UPPER (p.prs_perslid_naam) =
                                 UPPER (u.behandelaar))
						 WHERE EXISTS
						           (SELECT 1
						              FROM prs_perslid p
						             WHERE UPPER (p.prs_perslid_naam) = UPPER (u.behandelaar))         ;



            -- KEY SOORT BINNENKOMST ERBIJ HALEN
            UPDATE ubrh_imp_topdesk u
               SET soort_binnenkomstkey =
                      (SELECT udata.fac_usrdata_key
                         FROM fac_usrtab utab, fac_usrdata udata
                        WHERE UPPER (fac_usrtab_omschrijving) =
                                 'SOORT BINNENKOMST'
                              AND UPPER (u.soort_binnenkomst) =
                                    fac_usrdata_upper
                              AND udata.fac_usrtab_key = utab.fac_usrtab_key)   ;


   IF (header_found = FALSE)
   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',
         'Aantal ingelezen regels: ' || TO_CHAR (v_count_import),
         '');
   END IF;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'OTHERS_I (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        '');
END;
/


CREATE OR REPLACE PROCEDURE ubrh_update_topdesk (p_import_key IN NUMBER)
AS
    CURSOR c1
    IS
        SELECT * FROM ubrh_imp_topdesk;

    v_count_import   NUMBER (10);
    v_errormsg       VARCHAR2 (2000);
    v_errorhint      VARCHAR2 (2000);
    oracle_err_num   NUMBER;
    oracle_err_mes   VARCHAR2 (2000);

    v_melding_key    NUMBER (10);
    v_kenmerk_key    NUMBER (10);
    v_lange_oms      VARCHAR2 (4000);
BEGIN
    v_count_import := 0;

    FOR rec1 IN c1
    LOOP
        BEGIN
            v_errorhint :=
                'Aanmaken melding extern nummer: ' || rec1.meldingnummer;

            INSERT INTO mld_melding (mld_melding_externnr,
                                     mld_melding_module,
                                     mld_melding_onderwerp,
                                     mld_meldbron_key,
                                     mld_melding_datum,
                                     --   mld_melding_omschrijving,
                                     mld_melding_behandelaar_key,
                                     mld_stdmelding_key,
                                     prs_perslid_key,
                                     mld_melding_status,
                                     mld_melding_einddatum,
                                     mld_melding_spoed)
                 VALUES (rec1.meldingnummer,
                         'MLD',
                         SUBSTR (rec1.korte_omschrijving, 1, 80), --lang genoeg?
                         6,
                         rec1.datum_aanmaak,
                         COALESCE (rec1.behandelaar_key, 3),
                         rec1.subcategorie_key,
                         COALESCE (rec1.melderkey,
                                   rec1.aanmaker_kaartkey,
                                   rec1.behandelaar_key,
                                   3),
                         rec1.status_key,
                         rec1.streefdatum,
                         rec1.urgentie_key)
              RETURNING mld_melding_key
                   INTO v_melding_key;

            v_errorhint :=
                   'Zoek kenmerk (extern nummer (logius) extern nummer: '
                || rec1.meldingnummer;

            SELECT MAX (km.mld_kenmerk_key)
              INTO v_kenmerk_key
              FROM mld_srtkenmerk      sk,
                   mld_kenmerk         km,
                   mld_stdmelding      sm,
                   ins_tab_discipline  d
             WHERE     sk.mld_srtkenmerk_upper = 'EXTERN NUMMER (LOGIUS)'
                   AND sk.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                   AND km.mld_kenmerk_niveau = 'T'
                   AND km.mld_stdmelding_key = d.ins_srtdiscipline_key
                   AND d.ins_discipline_key = sm.mld_ins_discipline_key
                   AND km.mld_kenmerk_verwijder IS NULL
                   AND sm.mld_stdmelding_key = rec1.subcategorie_key;

            v_errorhint :=
                   'Aanmaak kenmerk (extern nummer (logius) extern nummer: '
                || rec1.meldingnummer;

            IF v_kenmerk_key IS NOT NULL AND rec1.extern_nummer IS NOT NULL
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_melding_key,
                                 v_kenmerk_key,
                                 rec1.extern_nummer);
            END IF;


            v_errorhint :=
                   'Zoek kenmerk (soort binnenkomst) extern nummer: '
                || rec1.meldingnummer;

            SELECT MAX (km.mld_kenmerk_key)
              INTO v_kenmerk_key
              FROM mld_srtkenmerk      sk,
                   mld_kenmerk         km,
                   mld_stdmelding      sm,
                   ins_tab_discipline  d
             WHERE     sk.mld_srtkenmerk_upper = 'SOORT BINNENKOMST'
                   AND sk.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                   AND km.mld_kenmerk_niveau = 'T'
                   AND km.mld_stdmelding_key = d.ins_srtdiscipline_key
                   AND d.ins_discipline_key = sm.mld_ins_discipline_key
                   AND km.mld_kenmerk_verwijder IS NULL
                   AND sm.mld_stdmelding_key = rec1.subcategorie_key;

            v_errorhint :=
                   'Aanmaak kenmerk (soort binnenkomst) extern nummer: '
                || rec1.meldingnummer;

            IF     v_kenmerk_key IS NOT NULL
               AND rec1.soort_binnenkomstkey IS NOT NULL
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_melding_key,
                                 v_kenmerk_key,
                                 rec1.soort_binnenkomstkey);
            END IF;


            -- De omschrijving van de melding moet, ivm de mogelijke lengte, uit de UBRH tabel met lange omschrijvingen gehaald worden
            -- Het gaat daarbij alleen om meldingen die uit Topdesk komen, dus matchen op een externnummer
            --SELECT MAX(TO_CHAR(SUBSTR (lange_omschrijving, 1, 4000)))
            --  INTO v_lange_oms
            --  FROM ubrh_imp_mld_omschrijvingen o
            -- WHERE o.meldingnummer = rec1.meldingnummer;

            --UPDATE mld_melding m
            --   SET mld_melding_omschrijving = v_lange_oms
            -- WHERE mld_melding_key = v_melding_key;

            -- bij meldingen uit Topdesk met de status wacht op gebruiker of wacht op leverancier
            -- moet het bolletje ''reactie melder gevraagd" aangezet worden
            IF rec1.status = 'WACHT OP GEBRUIKER' OR rec1.status = 'WACHT OP LEVERANCIER'
            THEN
                UPDATE mld_melding m
                   SET m.mld_melding_flag = 1
                 WHERE m.mld_melding_key = v_melding_key;
            END IF;

            v_count_import := v_count_import + 1;
            COMMIT;

        END;
    END LOOP;


    COMMIT;
    fac.imp_writelog (
        p_import_key,
        'S',
        'Aantal ingelezen regels: ' || TO_CHAR (v_count_import),
        '');
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
        v_errormsg :=
               'OTHERS_U (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_errormsg,
                          v_errorhint);
END ubrh_update_topdesk;
/

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