/*  FAC_VIE.SRC
 *  $Revision$
 *  $Id$
 */

DEFINIEER_VIEW_AANWEZIG(fac_usrdata, fac_usrdata_verwijder,
    fac_v_aanwezigusrdata,0);

CREATE_VIEW (fac_v_webgebruiker, 0) AS
   SELECT gg.prs_perslid_key, g.fac_functie_key,
          g.ins_discipline_key,
          MIN (fac_gebruiker_prs_level_read) fac_gebruiker_prs_level_read,
          MIN (fac_gebruiker_prs_level_write) fac_gebruiker_prs_level_write,
          MIN (fac_gebruiker_alg_level_read) fac_gebruiker_alg_level_read,
          MIN (fac_gebruiker_alg_level_write) fac_gebruiker_alg_level_write
     FROM fac_groeprechten g, fac_gebruikersgroep gg
    WHERE g.fac_groep_key = gg.fac_groep_key
 GROUP BY gg.prs_perslid_key, g.fac_functie_key, g.ins_discipline_key;

-- Rapportages
CREATE_VIEW(fac_v_rap_groeprechten, 0)
 (naam,
  fclt_f_login,
  fclt_f_funcode,
  fclt_f_functie,
  fclt_f_aspect,
  fclt_f_groep,
  or_ow_ar_aw
)
AS
   SELECT -- GROEPEN MET DISCIPLINES
          p.prs_perslid_naam, p.prs_perslid_oslogin,
          f.fac_functie_code,
          COALESCE(fac_locale_xsl_cust, fac_locale_xsl_tekst, f.fac_functie_omschrijving),
            (CASE WHEN ins_srtdiscipline_prefix IS NULL THEN '' ELSE ins_srtdiscipline_prefix||'-' END) ||
             decode(a.ins_discipline_module, 'BES', 'Categorie ',
                     'INS', 'Discipline ',
                     'MLD', 'Vakgroep ',
                     'RES', 'Catalogus ',
                     ins_discipline_module || ' '
                    )
          || ins_discipline_omschrijving omschrijving,
          gr.fac_groep_omschrijving,
             '(' || TO_CHAR(g.fac_gebruiker_prs_level_read)  || ', '
                 || TO_CHAR(g.fac_gebruiker_prs_level_write) || ', '
                 || TO_CHAR(g.fac_gebruiker_alg_level_read)  || ', '
                 || TO_CHAR(g.fac_gebruiker_alg_level_write) || ')' or_ow_ar_aw
     FROM fac_groeprechten g,
          fac_gebruikersgroep gg,
          prs_v_aanwezigperslid p,
          fac_functie f,
          ins_srtdiscipline isd,
          ins_tab_discipline a,
          fac_groep gr,
          fac_locale_xsl flx
    WHERE g.ins_discipline_key = a.ins_discipline_key
      AND g.fac_groep_key = gr.fac_groep_key
      AND p.prs_perslid_key = gg.prs_perslid_key
      AND gg.fac_groep_key = gr.fac_groep_key
      AND isd.ins_srtdiscipline_key(+) = a.ins_srtdiscipline_key
      AND f.fac_functie_key = g.fac_functie_key
      AND f.fac_functie_discipline = 1
      AND ins_discipline_verwijder IS NULL
      AND flx.fac_locale_xsl_label (+)= f.fac_functie_omschrijving
      AND flx.fac_locale_xsl_lang (+)= 'NL'
      AND flx.fac_locale_xsl_module (+)= 'ASP'
   UNION ALL -- GROEPEN ZONDER DISCIPLINES
   SELECT p.prs_perslid_naam, p.prs_perslid_oslogin,
          f.fac_functie_code,
          COALESCE(fac_locale_xsl_cust, fac_locale_xsl_tekst, f.fac_functie_omschrijving),
          NULL omschrijving,
          gr.fac_groep_omschrijving,
             '(' || TO_CHAR(g.fac_gebruiker_prs_level_read)  || ', '
                 || TO_CHAR(g.fac_gebruiker_prs_level_write) || ', '
                 || TO_CHAR(g.fac_gebruiker_alg_level_read)  || ', '
                 || TO_CHAR(g.fac_gebruiker_alg_level_write) || ')' or_ow_ar_aw
     FROM fac_groeprechten g,
          fac_functie f,
          fac_gebruikersgroep gg,
          prs_v_aanwezigperslid p,
          fac_groep gr,
          fac_locale_xsl flx -- lcl.l gebruik was extreem traag dus maar hardcoded
    WHERE fac_functie_module <> 'LAN'
      AND fac_functie_discipline = 0
      AND g.fac_functie_key = f.fac_functie_key
      AND g.fac_groep_key = gg.fac_groep_key
      AND gg.fac_groep_key = gr.fac_groep_key
      AND p.prs_perslid_key = gg.prs_perslid_key
      AND flx.fac_locale_xsl_label (+)= f.fac_functie_omschrijving
      AND flx.fac_locale_xsl_lang (+)= 'NL'
      AND flx.fac_locale_xsl_module (+)= 'ASP';

CREATE_VIEW(fac_v_rap_groeprechten2, 0)
 (fclt_f_groep,
  fclt_f_funcode,
  fclt_f_functie,
  fclt_f_aspect,
  or_ow_ar_aw
)
AS
SELECT -- GROEPEN MET DISCIPLINES
          gr.fac_groep_omschrijving,
          f.fac_functie_code,
          COALESCE(fac_locale_xsl_cust, fac_locale_xsl_tekst, f.fac_functie_omschrijving),
          (CASE WHEN ins_srtdiscipline_prefix IS NULL THEN '' ELSE ins_srtdiscipline_prefix||'-' END) ||
             DECODE( a.ins_discipline_module ,  'BES' ,  'Categorie ' ,
                     'INS' ,  'Discipline ' ,
                     'MLD' ,  'Vakgroep ' ,
                     'RES' ,  'Catalogus ' ,
                     ins_discipline_module  ||  ' '
                     )
           ||  ins_discipline_omschrijving omschrijving,
             '('  ||  TO_CHAR(g.fac_gebruiker_prs_level_read)   ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_prs_level_write)  ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_alg_level_read)   ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_alg_level_write)  ||  ')' or_ow_ar_aw
     FROM FAC_GROEPRECHTEN g,
          FAC_FUNCTIE f,
          INS_TAB_DISCIPLINE a,
          ins_srtdiscipline isd,
          FAC_GROEP gr,
          fac_locale_xsl flx
    WHERE g.ins_discipline_key = a.ins_discipline_key
      AND g.fac_groep_key = gr.fac_groep_key
      AND isd.ins_srtdiscipline_key(+) = a.ins_srtdiscipline_key
      AND f.fac_functie_key = g.fac_functie_key
      AND f.fac_functie_discipline = 1
      AND ins_discipline_verwijder IS NULL
      AND flx.fac_locale_xsl_label (+)= f.fac_functie_omschrijving
      AND flx.fac_locale_xsl_lang (+)= 'NL'
      AND flx.fac_locale_xsl_module (+)= 'ASP'
   UNION ALL -- GROEPEN ZONDER DISCIPLINES
   SELECT gr.fac_groep_omschrijving,
          f.fac_functie_code,
          COALESCE(fac_locale_xsl_cust, fac_locale_xsl_tekst, f.fac_functie_omschrijving),
          NULL omschrijving,
             '('  ||  TO_CHAR(g.fac_gebruiker_prs_level_read)   ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_prs_level_write)  ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_alg_level_read)   ||  ', '
                  ||  TO_CHAR(g.fac_gebruiker_alg_level_write)  ||  ')' or_ow_ar_aw
     FROM FAC_GROEPRECHTEN g,
          FAC_FUNCTIE f,
          FAC_GROEP gr,
          fac_locale_xsl flx
    WHERE fac_functie_module <> 'LAN'
      AND g.fac_groep_key = gr.fac_groep_key
      AND fac_functie_discipline = 0
      AND g.fac_functie_key = f.fac_functie_key
      AND flx.fac_locale_xsl_label (+)= f.fac_functie_omschrijving
      AND flx.fac_locale_xsl_lang (+)= 'NL'
      AND flx.fac_locale_xsl_module (+)= 'ASP';

CREATE_VIEW(fac_v_rap_groepleden, 0)
 (naam,
  fclt_f_login,
  fclt_f_groep,
  aantal_rechten
 )
AS SELECT p.prs_perslid_naam, p.prs_perslid_oslogin,
          gr.fac_groep_omschrijving, to_char(count(*))
     FROM fac_gebruikersgroep gg,
          prs_v_aanwezigperslid p,
          fac_groep gr,
          fac_groeprechten grr
    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
      GROUP BY p.prs_perslid_naam, p.prs_perslid_oslogin,
          gr.fac_groep_omschrijving;

-- Levert precies het formaat van de importsheet "Inventarisatie Gebruikersgroepen"
CREATE_VIEW(fac_v_rap_gebruikersgroepen1, 0)
(
   fclt_f_groep,
   code,
   fclt_x_module,
   fclt_f_vakgroeptype,
   fclt_f_vakgroep,
   org_lezen,
   org_schrijven,
   plaats_lezen,
   plaats_schrijven
)
AS
   SELECT                                                                                     -- GROEPEN MET DISCIPLINES
         gr .fac_groep_omschrijving,
            f.fac_functie_code,
            f.fac_functie_module,
            sd.ins_srtdiscipline_omschrijving,
            a.ins_discipline_omschrijving,
            TO_CHAR(COALESCE(g.fac_gebruiker_prs_level_read, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_prs_level_write, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_alg_level_read, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_alg_level_write, -1))
     FROM   fac_groeprechten g, fac_functie f, ins_tab_discipline a, ins_srtdiscipline sd, fac_groep gr
    WHERE       g.ins_discipline_key = a.ins_discipline_key
            AND a.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
            AND g.fac_groep_key = gr.fac_groep_key
            AND f.fac_functie_key = g.fac_functie_key
            AND f.fac_functie_discipline = 1
            AND ins_discipline_verwijder IS NULL
   UNION ALL                                                                               -- GROEPEN ZONDER DISCIPLINES
   SELECT   gr.fac_groep_omschrijving,
            f.fac_functie_code,
            f.fac_functie_module,
            NULL,
            NULL,
            TO_CHAR(COALESCE(g.fac_gebruiker_prs_level_read, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_prs_level_write, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_alg_level_read, -1)),
            TO_CHAR(COALESCE(g.fac_gebruiker_alg_level_write, -1))
     FROM   fac_groeprechten g, fac_functie f, fac_groep gr
    WHERE   g.fac_groep_key = gr.fac_groep_key AND fac_functie_discipline = 0 AND g.fac_functie_key = f.fac_functie_key;


CREATE_VIEW (fac_v_perfmon, 0) (fclt_f_datum,
                                drempelwaarde,
                                aantal,
                                gemiddelde,
                                users
                               )
AS
   SELECT fac_perfmon_datum, fac_perfmon_threshold,
          fac_perfmon_AANTAL, ROUND(fac_perfmon_waarde / fac_perfmon_aantal),
          fac_perfmon_users
     FROM fac_perfmon;




// perfmon.asp basic sample reports
-- de platte waarden
CREATE_VIEW(fac_v_perfmon_samplewaarde, 0) (fclt_f_datum,
                                                   waarde1,
                                                   waarde2,
                                                   waarde3,
                                                   waarde4,
                                                   waarde5,
                                                   waarde6,
                                                   waarde7,
                                                   waarde8,
                                                   waarde9,
                                                   fclt_f_ipadres,
                                                   fclt_f_gebruiker
                                                  )
AS
   SELECT fac_perfmon_sample_datum,
          fac_perfmon_sample_waarde1, fac_perfmon_sample_waarde2,
          fac_perfmon_sample_waarde3, fac_perfmon_sample_waarde4,
          fac_perfmon_sample_waarde5, fac_perfmon_sample_waarde6,
          fac_perfmon_sample_waarde7, fac_perfmon_sample_waarde8,
          fac_perfmon_sample_waarde9, fac_perfmon_sample_ip,
          pf.prs_perslid_naam_full
     FROM fac_perfmon_sample s, prs_v_perslid_fullnames_all pf
    WHERE s.prs_perslid_key = pf.prs_perslid_key;

/*
 *
 *
 * Definities van notificatie_job views met naamgeving FAC_V_NOTI_[mod][naam] voor de standaard/defaults
 * Voor klantspecifieke notificaties wordt [cust]_V_NOTI_[mod][naam] toegepast.
 * en (minimaal) verplicht de kolommen sender, receiver, text, code, key, xkey
 * als achtereenvolgens perslid_key, perslid_key, subject, srtnotificatiecode, entiteitkey
 * Als text niet null is, wordt die gebruikt ipv de tekst bij code.
 */
// Voor een contactpersoon alle reserveringen binnen 4-5 werkdagen na nu, zowel ruimte, voorzieningen als catering
CREATE_VIEW (fac_v_noti_resreminder, 0) (code, sender, receiver, text, key, xkey)
AS
SELECT 'RESINF'
     , NULL
     , rsvr.res_rsv_ruimte_contact_key
     , 'Reservering '
         ||   res.res_reservering_key
         ||   ': U heeft op '
         ||   DATE_TO_CHAR (rsvr.res_rsv_ruimte_van, 'DD-MM')
         ||   ' van '
         ||   DATE_TO_CHAR (rsvr.res_rsv_ruimte_van, 'HH24:MI')
         ||   ' tot '
         ||   DATE_TO_CHAR (rsvr.res_rsv_ruimte_tot, 'HH24:MI')
         ||   ' ruimte '
         ||   r.res_ruimte_nr
         ||   ' gereserveerd.'
     , res.res_reservering_key
     , rsvr.res_rsv_ruimte_key
  FROM res_v_aanwezigreservering res
     , res_v_aanwezigrsv_ruimte rsvr
     , res_ruimte_opstelling opst
     , res_disc_params rdp
     , res_ruimte r
 WHERE r.res_discipline_key = rdp.res_ins_discipline_key
   AND rdp.res_disc_params_noti_dagen IS NOT NULL
   AND res.res_reservering_key = rsvr.res_reservering_key
   AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key
   AND opst.res_ruimte_key = r.res_ruimte_key
   AND rsvr.res_status_fo_key <= 5
   AND rsvr.res_rsv_ruimte_van BETWEEN fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen, 'DAGEN')
                                   AND fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen+1, 'DAGEN')
   AND fac.getweekdaynum(sysdate) NOT IN (1,7)
   AND rsvr.res_rsv_ruimte_van >= SYSDATE
UNION ALL
SELECT 'RESINF'
     , NULL
     , res_rsv_ruimte_contact_key
     , 'Reservering '
          || res_reservering_key
          || ': U heeft op '
          || DATE_TO_CHAR(min(van), 'dd-mm')
          || DECODE (min(van), max(tot), ' om ' || DATE_TO_CHAR(min(van), 'hh24:mi') , ' van '
          || DATE_TO_CHAR(min(van), 'hh24:mi')
          || ' tot '
          || DATE_TO_CHAR(max(tot), 'hh24:mi'))
          || ' in ruimte ('
          || (SELECT alg_gebouw_code || '-' || alg_verdieping_code || '-' || alg_ruimte_nr FROM alg_v_onroerendgoed_gegevens arg WHERE arg.alg_ruimte_key = ruimte_key)
          || ') '
          || count(res_reservering_key)
          || ' voorziening(en) gereserveerd.'
     , res_reservering_key
     , res_rsv_ruimte_key
  FROM (
    SELECT rsvr.res_rsv_ruimte_contact_key
         , res.res_reservering_key
         , rsvd.res_rsv_deel_van van
         , rsvd.res_rsv_deel_tot tot
         , rsvr.res_rsv_ruimte_key
         , rsvr.alg_ruimte_key ruimte_key
      FROM res_v_aanwezigreservering res
         , res_v_aanwezigrsv_ruimte rsvr
         , res_disc_params rdp
         , res_rsv_deel rsvd
         , res_deel rd
     WHERE rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
       AND rd.res_deel_key = rsvd.res_deel_key
       AND rd.res_discipline_key = rdp.res_ins_discipline_key
       AND rdp.res_disc_params_noti_dagen IS NOT NULL
       AND res.res_reservering_key = rsvr.res_reservering_key
       AND rsvr.res_ruimte_opstel_key IS NULL
       AND rsvr.res_status_fo_key <= 5
       AND rsvd.res_rsv_deel_verwijder IS NULL
       AND rsvd.res_rsv_deel_van BETWEEN fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen, 'DAGEN')
                                     AND fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen+1, 'DAGEN')
       AND fac.getweekdaynum(sysdate) NOT IN (1,7)
       AND rsvd.res_rsv_deel_van >= SYSDATE
    UNION ALL
    SELECT rsvr.res_rsv_ruimte_contact_key
         , res.res_reservering_key
         , rsva.res_rsv_artikel_levering van
         , rsva.res_rsv_artikel_levering tot
         , rsvr.res_rsv_ruimte_key
         , rsvr.alg_ruimte_key ruimte_key
      FROM res_v_aanwezigreservering res
         , res_v_aanwezigrsv_ruimte rsvr
         , res_disc_params rdp
         , res_rsv_artikel rsva
         , res_artikel ra
     WHERE rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
       AND ra.res_discipline_key = rdp.res_ins_discipline_key
       AND rsva.res_artikel_key = ra.res_artikel_key
       AND rdp.res_disc_params_noti_dagen IS NOT NULL
       AND res.res_reservering_key = rsvr.res_reservering_key
       AND rsvr.res_ruimte_opstel_key IS NULL
       AND rsvr.res_status_fo_key <= 5
       AND rsva.res_rsv_artikel_verwijder IS NULL
       AND rsva.res_rsv_artikel_levering BETWEEN fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen, 'DAGEN')
                                             AND fac.datumtijdplusuitvoertijd (SYSDATE, res_disc_params_noti_dagen+1, 'DAGEN')
       AND fac.getweekdaynum(sysdate) NOT IN (1,7)
       AND rsva.res_rsv_artikel_levering >= SYSDATE
    )
GROUP BY res_rsv_ruimte_contact_key, res_reservering_key, res_rsv_ruimte_key, ruimte_key;


CREATE_VIEW (fac_v_noti_cntreminder, 0) (code, sender, receiver, text, key, par1, par2, xkey)
AS
   SELECT '', '', c.prs_perslid_key_beh,
             'Rappel: Contract '
          || c.cnt_contract_nummer_intern||DECODE(cnt_contract_versie, NULL, '', '.'||cnt_contract_versie)
          || ' ('
          || c.cnt_contract_omschrijving
          || ' '
          || b.prs_bedrijf_naam
          || ')'
          || ' moet uiterlijk per '
          || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND cnt_contract_verwijder IS NULL
      AND cnt_contract_status = 0 /* actief */
      AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key));

-- notificatie van ongeldige reserveringen gericht aan de contactpersoon. View kan ook
-- als rapportage toegevoegd worden. View levert alleen toekomstige reserveringen.
-- NB: View bevat Nederlandstalige teksten. Beter zou zijn content en presentatie te scheiden.
CREATE_VIEW(fac_v_noti_resdirty, 0) (
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   contact
   )
AS
   SELECT 'RESDIR',
          NULL,
          rm.res_rsv_ruimte_contact_key,
             'Letop! Reservering '
          || rm.res_reservering_key
          || '/'
          || rm.res_rsv_ruimte_volgnr
          || ': op '
          || TO_CHAR (rm.res_rsv_ruimte_van, 'DD-MM')
          || ' van '
          || TO_CHAR (rm.res_rsv_ruimte_van, 'HH24:MI')
          || ' tot '
          || TO_CHAR (rm.res_rsv_ruimte_tot, 'HH24:MI')
          || ' ruimte '
          || COALESCE (r.res_ruimte_nr, 'Werkplek')
          || ' is ongeldig.',
          rm.res_reservering_key,
          rm.res_rsv_ruimte_key,
          (SELECT prs_perslid_naam_full
           FROM prs_v_perslid_fullnames_all pf
           WHERE pf.prs_perslid_key = rm.res_rsv_ruimte_contact_key)
             contact
   FROM res_rsv_ruimte rm,
        res_ruimte_opstelling ro,
        res_ruimte r,
        (SELECT ra.res_rsv_ruimte_key, COUNT ( * ) count_dirty
         FROM res_rsv_artikel ra
         WHERE res_rsv_artikel_verwijder IS NULL
               AND res_rsv_artikel_dirtlevel > 255
         GROUP BY res_rsv_ruimte_key) art,
        (SELECT res_rsv_ruimte_key, COUNT ( * ) count_dirty
         FROM res_rsv_deel rd
         WHERE res_rsv_deel_verwijder IS NULL AND res_rsv_deel_dirtlevel > 255
         GROUP BY res_rsv_ruimte_key) deel
   WHERE     rm.res_rsv_ruimte_key = art.res_rsv_ruimte_key(+)
         AND rm.res_rsv_ruimte_key = deel.res_rsv_ruimte_key(+)
         AND rm.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)
         AND ro.res_ruimte_key = r.res_ruimte_key(+)
         AND res_rsv_ruimte_verwijder IS NULL
         AND res_rsv_ruimte_van > SYSDATE
         AND (   res_rsv_ruimte_dirtlevel > 255
              OR art.count_dirty > 0
              OR deel.count_dirty > 0)
   GROUP BY res_reservering_key,
            res_rsv_ruimte_van,
            res_rsv_ruimte_tot,
            rm.res_rsv_ruimte_key,
            res_ruimte_nr,
            res_rsv_ruimte_volgnr,
            res_rsv_ruimte_contact_key
   ORDER BY res_rsv_ruimte_van, res_rsv_ruimte_key;

-- Notificatie voor opdrachten in de queue die al meer dan S(puo_failalert_threshold) minuten gefaald zijn
CREATE_VIEW(fac_v_noti_facorderqueuefails, 0)
(
   sender,
   receiver,
   text,
   par1,
   code,
   key,
   xkey
)
AS
     SELECT '',
            wg.prs_perslid_key,
            LTRIM(lcl.L('lcl_facilitor_appl')) || ' alert: transmission of '
            || DECODE (
                  fac_srtnotificatie_code,
                  'ORDSNX',
                  'Order '
                  || (SELECT    mld_melding_key
                             || '/'
                             || mld_opdr_bedrijfopdr_volgnr
                             || ' to '
                             || COALESCE (prs_bedrijf_naam, '??')
                        FROM mld_opdr o, prs_bedrijf b
                       WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key(+) AND mld_opdr_key = key),
                  'BES2SX',
                  'Procurement order '
                  || (SELECT bes_bestelopdr_id || ' to ' || prs_bedrijf_naam
                        FROM bes_bestelopdr o, prs_bedrijf b
                       WHERE o.prs_bedrijf_key = b.prs_bedrijf_key AND bes_bestelopdr_key = key),
                  key)
            || ' has failed '
            || COUNT ( * )
            || ' times since '
            || TO_CHAR (MIN (ft.fac_tracking_datum), 'DD-MM-YYYY HH24:MI')
            || ' (' || MIN(fac_version_cust) || ')',
            NULL,
            NULL,
            NULL,
            NULL
       FROM fac_v_orderqueue q,
            fac_tracking ft,
            fac_srtnotificatie fs,
            fac_functie f,
            fac_v_webgebruiker wg,
            fac_version
      WHERE     f.fac_functie_key = wg.fac_functie_key
            AND f.fac_functie_code = 'WEB_PRSSYS'
            AND ft.fac_srtnotificatie_key = fs.fac_srtnotificatie_key
            AND ft.fac_tracking_refkey = q.key
            AND fac_srtnotificatie_code IN ('ORDSNX', 'BES2SX')
   GROUP BY xmlnode,
            key,
            fac_srtnotificatie_code,
            wg.prs_perslid_key
     HAVING (SYSDATE - MIN (ft.fac_tracking_datum)) * 24 * 60 > fac.getSetting('puo_failalert_threshold');

CREATE_VIEW(fac_v_notifyqueue, 0)
AS
SELECT fac_notificatie_receiver_email, fac_notificatie_receiver_phone, fac_notificatie_oms, fac_notificatie_status,
       fac_notificatie_key, fac_notificatie_refkey, fac_notificatie_datum, fac_srtnotificatie_code, fac_srtnotificatie_xmlnode,
       fac_notificatie_extrakey, fac_notificatie_sender_email, fac_notificatie_lang, fac_notificatie_systeemadres,
       fac_notificatie_attachments, fac_srtnotificatie_delay, fac_srtnotificatie_srtkm_key, prs_perslid_key_receiver
  FROM fac_notificatie n
  LEFT OUTER JOIN fac_srtnotificatie sn ON n.fac_srtnotificatie_key = sn.fac_srtnotificatie_key;

-- Queue met naar leveranciers te verzenden opdrachten tbv PutOrders: wat-moet-naar-wie-en-hoe
-- status=2: mail, status=4: sms (yet unused)
CREATE_VIEW(fac_v_orderqueue, 0)
(prs_bedrijf_key, alg_locatie_key, xmlnode, key, status, reference, sender)
AS
   SELECT b.prs_bedrijf_key, l.alg_locatie_key, 'bestelopdr', o.bes_bestelopdr_key, 2, o.bes_bestelopdr_id, alg_locatie_email
     FROM prs_bedrijf b, bes_bestelopdr o, mld_adres ma, alg_locatie l
    WHERE b.prs_bedrijf_key = o.prs_bedrijf_key
      AND o.mld_adres_key_lev = ma.mld_adres_key
      AND ma.alg_locatie_key = l.alg_locatie_key(+)
      AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'B')
      AND o.bes_bestelopdr_status = 3
   UNION ALL
   SELECT b.prs_bedrijf_key, COALESCE (l1.alg_locatie_key, l2.alg_locatie_key), 'opdracht', o.mld_opdr_key, 2,
          o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr, COALESCE (l1.alg_locatie_email, l2.alg_locatie_email)
     FROM prs_bedrijf b, mld_opdr o, mld_melding m, mld_adres ma, alg_locatie l1, alg_locatie l2
    WHERE b.prs_bedrijf_key = o.mld_uitvoerende_keys
      AND o.mld_melding_key = m.mld_melding_key
      AND m.mld_adres_key = ma.mld_adres_key(+)
      AND ma.alg_locatie_key = l1.alg_locatie_key(+)
      AND m.mld_alg_locatie_key = l2.alg_locatie_key(+)
      AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'O')
      AND (((o.mld_statusopdr_key = 5 OR o.mld_statusopdr_key = 4) AND o.mld_opdr_teverzenden = 1)
        OR (o.mld_opdr_teverzenden = 2))
      AND o.mld_opdr_verzonden IS NULL
   UNION ALL
   SELECT b.prs_bedrijf_key, l.alg_locatie_key, 'contract', c.cnt_contract_key, 2, cnt_contract_nummer_intern, COALESCE (l.alg_locatie_email, ins_discipline_email)
     FROM prs_bedrijf b, cnt_contract c, ins_tab_discipline d, alg_locatie l,
          ( SELECT cnt_contract_key,
                   DECODE (MIN (cp1.cnt_alg_plaats_code),
                           'L', MIN (cp1.cnt_alg_plaats_key),
                           MIN (alg_boom.alg_locatie_key)) cnt_locatie_key
              FROM cnt_contract_plaats cp1,
                   (SELECT alg_r.alg_ruimte_key, alg_r.alg_verdieping_key, alg_v.alg_gebouw_key, alg_g.alg_locatie_key, 'R' alg_type
                      FROM alg_ruimte alg_r, alg_verdieping alg_v, alg_gebouw alg_g
                     WHERE alg_r.alg_verdieping_key = alg_v.alg_verdieping_key AND alg_v.alg_gebouw_key = alg_g.alg_gebouw_key
                    UNION
                    SELECT TO_NUMBER (NULL), alg_v.alg_verdieping_key, alg_v.alg_gebouw_key, alg_g.alg_locatie_key, 'V' alg_type
                      FROM alg_verdieping alg_v, alg_gebouw alg_g
                     WHERE alg_v.alg_gebouw_key = alg_g.alg_gebouw_key
                    UNION
                    SELECT TO_NUMBER (NULL), TO_NUMBER (NULL), alg_g.alg_gebouw_key, alg_g.alg_locatie_key, 'G' alg_type
                      FROM alg_gebouw alg_g) alg_boom
             WHERE cp1.cnt_alg_plaats_key =
                       CASE cp1.cnt_alg_plaats_code
                           WHEN 'G' THEN alg_boom.alg_gebouw_key(+)
                           WHEN 'V' THEN alg_boom.alg_verdieping_key(+)
                           WHEN 'R' THEN alg_boom.alg_ruimte_key(+)
                       END
               AND cp1.cnt_alg_plaats_code = alg_boom.alg_type(+)
               AND cp1.cnt_contract_plaats_verwijder IS NULL
          GROUP BY cnt_contract_key HAVING COUNT (1) = 1) cp
    WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND d.ins_discipline_key = c.ins_discipline_key
      AND c.cnt_contract_key = cp.cnt_contract_key(+)
      AND cp.cnt_locatie_key = l.alg_locatie_key(+)
      AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'C')
      AND c.cnt_contract_verwijder IS NULL
      AND c.cnt_contract_looptijd_tot > SYSDATE
      AND c.cnt_contract_teverzenden = 1;

// PLANMATIG ONDERHOUDS views (OPROGNOSE)
-- Basisview voor intern gebruik
CREATE_VIEW(fac_v_oprognosegegevens, 0) AS
SELECT op.*,
       (SELECT prijs
          FROM (SELECT km.mld_melding_key, km.mld_kenmerk_key, km.mld_kenmerkmelding_waarde prijs
                  FROM mld_kenmerkmelding km,
                       (SELECT MAX (k.mld_kenmerk_key) mld_kenmerk_key
                          FROM mld_srtkenmerk sk, mld_kenmerk k
                         WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                           AND sk.mld_srtkenmerk_upper = 'PRIJS'
                           AND k.mld_kenmerk_verwijder IS NULL) k
                 WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND km.mld_kenmerkmelding_verwijder IS NULL) pk
         WHERE op.mld_melding_key = pk.mld_melding_key) prijs
  FROM (SELECT   m.mld_melding_key, MIN (s.mld_statuses_omschrijving) mld_statuses_omschrijving,
                 MIN (std.mld_stdmelding_omschrijving) mld_stdmelding_omschrijving,
                 MIN (m.mld_melding_omschrijving) mld_melding_omschrijving, MIN (m.mld_melding_datum) mld_melding_datum,
                 MIN (l.alg_locatie_code) alg_locatie_code, MIN (v.alg_gebouw_key) alg_gebouw_key,
                 MIN (v.alg_gebouw_naam) alg_gebouw_naam,
                 MIN (l.alg_locatie_code || ' - ' || v.alg_gebouw_naam) alg_locatie_gebouw_naam,
                 SUM (o.mld_opdr_kosten) mld_opdr_kosten, SUM (o.mld_opdr_kosten_raming) mld_opdr_kosten_raming
            FROM mld_melding m,
                 mld_statuses s,
                 mld_stdmelding std,
                 alg_v_onroerendgoed_gegevens v,
                 alg_locatie l,
                 mld_discipline md,
                 ins_srtdiscipline sd,
                 (SELECT o.mld_opdr_key, o.mld_opdr_kosten, 0 mld_opdr_kosten_raming, o.mld_melding_key
                    FROM mld_opdr o
                   WHERE o.mld_statusopdr_key IN (6, 7, 9)
                  UNION ALL
                  SELECT o.mld_opdr_key, 0 mld_opdr_kosten, o.mld_opdr_kosten mld_opdr_kosten_raming, o.mld_melding_key
                    FROM mld_opdr o
                   WHERE o.mld_statusopdr_key IN (4, 5, 3, 10, 8)) o
           WHERE std.mld_stdmelding_key = m.mld_stdmelding_key
             AND m.mld_melding_status = s.mld_statuses_key
             AND m.mld_melding_key = o.mld_melding_key(+)                        -- Dus ook meldingen zonder opdrachten!
             AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
             AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
             AND m.mld_melding_status IN (1, 2, 3, 4, 5, 6, 7)                         -- Alle huidige melding statussen
             AND m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys(+)
             AND md.ins_discipline_key IN (SELECT ins_discipline_key
                                             FROM ins_tab_discipline
                                            WHERE UPPER (ins_discipline_omschrijving) = 'PLANMATIG ONDERHOUD')
             AND std.mld_ins_discipline_key = md.ins_discipline_key
        GROUP BY m.mld_melding_key) op;

/* Formatted on 13/08/2008 12:59 (Formatter Plus v4.8.7) */
CREATE_VIEW(fac_v_oprognosevoortgang, 0) (fclt_f_gebouw,
                                                 fclt_f_jaar,
                                                 meldingnr,
                                                 soortactiviteit,
                                                 activiteit,
                                                 status,
                                                 budget,
                                                 kostengemaakt,
                                                 kostenbegroot,
                                                 saldo
                                                )
AS
   SELECT alg_locatie_gebouw_naam gebouw, TO_CHAR (mld_melding_datum, 'yyyy') fclt_f_jaar,
          TO_CHAR (mld_melding_key) meldingnr, mld_stdmelding_omschrijving, mld_melding_omschrijving melding,
          mld_statuses_omschrijving status, fac.safe_to_number (prijs) budget, mld_opdr_kosten kosten_verwerkt,
          mld_opdr_kosten_raming kosten, (prijs - mld_opdr_kosten - mld_opdr_kosten_raming) saldo
     FROM fac_v_oprognosegegevens;

CREATE_VIEW(fac_v_oprognosegebouw, 0) (fclt_f_gebouw,
                                              fclt_f_jaar,
                                              activiteiten,
                                              budget,
                                              kostengemaakt,
                                              kostenbegroot,
                                              saldo
                                             )
AS
   SELECT   alg_locatie_gebouw_naam gebouw, TO_CHAR (mld_melding_datum, 'yyyy') fclt_f_jaar, COUNT (mld_melding_key),
            SUM (fac.safe_to_number (prijs)) budget, SUM (mld_opdr_kosten) kostengemaakt,
            SUM (mld_opdr_kosten_raming) kostenbegroot, SUM (prijs - mld_opdr_kosten - mld_opdr_kosten_raming) saldo
       FROM fac_v_oprognosegegevens
   GROUP BY alg_locatie_gebouw_naam, TO_CHAR (mld_melding_datum, 'yyyy');

/* Formatted on 13/08/2008 13:04 (Formatter Plus v4.8.7) */
CREATE_VIEW(fac_v_oprognoseactiviteit, 0) (fclt_f_soortactiviteit,
                                                  fclt_f_jaar,
                                                  activiteiten,
                                                  budget,
                                                  kostengemaakt,
                                                  kostenbegroot,
                                                  saldo
                                                 )
AS
   SELECT   mld_stdmelding_omschrijving, TO_CHAR (mld_melding_datum, 'yyyy') fclt_f_jaar, COUNT (mld_melding_key),
            SUM (fac.safe_to_number (prijs)) budget, SUM (mld_opdr_kosten) kostengemaakt,
            SUM (mld_opdr_kosten_raming) kostenbegroot, SUM (prijs - mld_opdr_kosten - mld_opdr_kosten_raming) saldo
       FROM fac_v_oprognosegegevens
   GROUP BY mld_stdmelding_omschrijving, TO_CHAR (mld_melding_datum, 'yyyy');

CREATE_VIEW(FAC_QVW_LOCALE_XSL, 0)
(FAC_LOCALE_XSL_LABEL, FAC_LOCALE_XSL_MODULE, FAC_LOCALE_XSL_LANG, FAC_LOCALE_XSL_TEKST)
AS
   SELECT FAC_LOCALE_XSL_LABEL, FAC_LOCALE_XSL_MODULE, FAC_LOCALE_XSL_LANG,
          COALESCE(FAC_LOCALE_XSL_CUST, FAC_LOCALE_XSL_TEKST)
     FROM FAC_LOCALE_XSL;

CREATE_VIEW(FAC_V_QVW_ALLAUTH, 0)(PRS_PERSLID_KEY, FAC_QLIKVIEW_QVW_NAME, FAC_QLIKVIEW_OMSCHRIJVING, AANTAL)
AS
SELECT   pp.prs_perslid_key, upper(fac_qlikview_qvw_name) fac_qlikview_qvw_name, fac_qlikview_omschrijving, COUNT (*) aantal
    FROM prs_v_aanwezigperslid pp, fac_qlikview fqv, fac_v_webgebruiker w
   WHERE w.fac_functie_key = fqv.fac_functie_key
     AND w.prs_perslid_key = pp.prs_perslid_key
GROUP BY pp.prs_perslid_key, fac_qlikview_qvw_name, fac_qlikview_omschrijving;

CREATE_VIEW(fac_v_qvw_algauth, 0)(prs_perslid_key, alg_locatie_key, fac_qlikview_qvw_name)
AS
SELECT   pp.prs_perslid_key, fml.alg_locatie_key,
            UPPER (fqv.fac_qlikview_qvw_name)
       FROM (SELECT alg_locatie_key, prs_perslid_key, -1 niveau
               FROM alg_v_aanweziglocatie, PRS_PERSLID
             UNION
             SELECT alg_locatie_key, prs_perslid_key, niveau
               FROM fac_v_my_locations) fml,
            prs_v_aanwezigperslid pp,
            fac_qlikview fqv,
            (SELECT   prs_perslid_key, fac_functie_key,
                      COALESCE (MIN (fac_gebruiker_alg_level_read),
                                9
                               ) autlevel
                 FROM fac_v_webgebruiker w
             GROUP BY prs_perslid_key, fac_functie_key) thelevel
      WHERE thelevel.prs_perslid_key = fml.prs_perslid_key
        AND thelevel.fac_functie_key = fqv.fac_functie_key
        AND fml.prs_perslid_key = pp.prs_perslid_key
        AND (niveau = autlevel OR autlevel = -1)
   GROUP BY pp.prs_perslid_key, fml.alg_locatie_key,
            fqv.fac_qlikview_qvw_name;

CREATE_VIEW(fac_v_qvw_prsauth, 0)(prs_perslid_key, prs_bedrijf_key, fac_qlikview_qvw_name)
AS
-- Niveau -1, 'Alle' bedrijven
   SELECT prs_perslid_key, prs_bedrijf_key, UPPER (fqv.fac_qlikview_qvw_name)
     FROM prs_bedrijf,
          fac_qlikview fqv,
          (SELECT   prs_perslid_key, fac_functie_key,
                    MIN (fac_gebruiker_alg_level_read) autlevel
               FROM fac_v_webgebruiker w
           GROUP BY prs_perslid_key, fac_functie_key) thelevel
    WHERE autlevel = -1 AND thelevel.fac_functie_key = fqv.fac_functie_key
   UNION ALL                             -- Niveau 0 of hoger, 'Eigen' bedrijf
   SELECT pp.prs_perslid_key, prs_bedrijf_key,
          UPPER (fqv.fac_qlikview_qvw_name)
     FROM prs_v_afdeling pva,
          prs_perslid pp,
          fac_qlikview fqv,
          (SELECT   prs_perslid_key, fac_functie_key,
                    MIN (fac_gebruiker_alg_level_read) autlevel
               FROM fac_v_webgebruiker w
           GROUP BY prs_perslid_key, fac_functie_key) thelevel
    WHERE autlevel > -1
      AND thelevel.prs_perslid_key = pp.prs_perslid_key
      AND thelevel.fac_functie_key = fqv.fac_functie_key
      AND pva.prs_afdeling_key = pp.prs_afdeling_key;

CREATE_VIEW(fac_v_qvw_insauth, 0)(prs_perslid_key, ins_discipline_key, fac_qlikview_qvw_name)
AS
   SELECT prs_perslid_key, ins_discipline_key,
          UPPER (fqv.fac_qlikview_qvw_name)
     FROM fac_qlikview fqv, fac_v_webgebruiker w
    WHERE w.fac_functie_key = fqv.fac_functie_key;

CREATE_VIEW (fac_v_imp_res_artikel_sync ,0)  (hide_f_artikel_catalogus,
                                              hide_f_artikel_omschrijving,
                                              artikelKey,
                                              catalogusNaam,
                                              catalogusKostensoort,
                                              artikelNummer,
                                              artikelOmschrijving,
                                              artikelEenheid,
                                              artikelPrijs,
                                              artikelPrijsVast,
                                              artikelInkoopprijs,
                                              artikelPersoneelkosten,
                                              artikelAlgemenekosten,
                                              artikelBTW,
                                              artikelOpmerking,
                                              artikelGroep,
                                              artikelVolgnummer,
                                              artikelIngangsdatum,
                                              artikelVervaldatum,
                                              artikelMinimum
                                             )
AS
   SELECT (SELECT ins_discipline_omschrijving
             FROM ins_tab_discipline d
            WHERE d.ins_discipline_key = res_discipline_key),
          res_artikel_omschrijving,
          TO_CHAR (res_artikel_key),
          (SELECT ins_discipline_omschrijving
             FROM ins_tab_discipline d
            WHERE d.ins_discipline_key = res_discipline_key),
          (SELECT prs_kostensoort_oms
             FROM ins_tab_discipline d, prs_kostensoort k
            WHERE d.ins_discipline_key = res_discipline_key
              AND d.prs_kostensoort_key = k.prs_kostensoort_key),
          res_artikel_nr,
          res_artikel_omschrijving,
          res_artikel_eenheid,
          TO_CHAR (res_artikel_prijs),
          TO_CHAR (res_artikel_prijs_vast),
          TO_CHAR (res_artikel_inkoopprijs),
          TO_CHAR (res_artikel_kostenpersoneel),
          TO_CHAR (res_artikel_kostenalgemeen),
          TO_CHAR (res_artikel_btw),
          res_artikel_opmerking,
          res_artikel_groep,
          TO_CHAR (res_artikel_volgnummer),
          TO_CHAR (res_artikel_ingangsdatum, 'YYYYMMDD'),
          TO_CHAR (res_artikel_vervaldatum, 'YYYYMMDD'),
          TO_CHAR (res_artikel_minimum)
     FROM res_v_aanwezigartikel;

/* View met het maximale actuele menu van de huidige configuratie */
CREATE_VIEW (fac_v_menu, 0)
AS
   SELECT   fac_menu_key,
            COALESCE (fac_menu_altgroep, fac_menuitems_groep) groep,
            COALESCE (fac_menu_altlabel, fac_menuitems_label) label,
            COALESCE (fac_menu_alturl, fac_menuitems_url) url,
            COALESCE (fac_menu_image, fac_menuitems_image) image,
            fac_menuitems_module,
            COALESCE (mi.fac_menuitems_srtdisc, 0) fac_menuitems_srtdisc,
            COALESCE (mi.fac_menuitems_disc, 0) fac_menuitems_disc,
            fac_menu_volgnr,
            COALESCE (m.fac_functie_key, mi.fac_functie_key) fac_functie_key,
            COALESCE (mi.fac_menuitems_rw, 'R') fac_menuitems_rw,
            fac_menu_info,
            fac_menu_level,
            fac_menu_portal,
            m.ins_srtdiscipline_key,
            m.ins_discipline_key
     FROM   fac_menu m, fac_menuitems mi
    WHERE   m.fac_menuitems_key = mi.fac_menuitems_key(+);

/* View met alle mogelijkheden voor het menu, al dan niet al ingebruik */
CREATE_VIEW (fac_v_menuitems, 0)
AS
   SELECT   mi.fac_menuitems_key,
            COALESCE (fac_menu_altgroep, fac_menuitems_groep) groep,
            COALESCE (fac_menu_altlabel, fac_menuitems_label) label,
            COALESCE (fac_menu_alturl, fac_menuitems_url) url,
            mi.fac_menuitems_module,
            COALESCE (mi.fac_menuitems_srtdisc, 0) fac_menuitems_srtdisc,
            COALESCE (mi.fac_menuitems_disc, 0) fac_menuitems_disc,
            fac_menu_volgnr,
            mi.fac_functie_key,
            COALESCE (mi.fac_menuitems_rw, 'R') fac_menuitems_rw,
            fac_menu_info,
            m.fac_menu_key
     FROM   fac_menu m, fac_menuitems mi
    WHERE   m.fac_menuitems_key(+) = mi.fac_menuitems_key;

CREATE_VIEW (fac_v_locale_lcl, 0)
(
   fac_localeitems_dialect_id,
   fac_localeitems_lcl,
   fac_locale_dialect_key,
   fac_locale_lang,
   fac_locale_tekst
)
AS
     SELECT   i.fac_localeitems_dialect_id, i.fac_localeitems_lcl, l.fac_locale_dialect_key, l.fac_locale_lang, l.fac_locale_tekst
       FROM   fac_locale l, fac_localeitems i
      WHERE   l.fac_localeitems_key(+) = i.fac_localeitems_key
   ORDER BY   i.fac_localeitems_dialect_id, i.fac_localeitems_lcl, l.fac_locale_dialect_key;

CREATE_VIEW(fac_v_locale_kolom, 0)
(
   fac_locale_kolomnaam,
   fac_locale_kolomkeyval,
   fac_locale_default,
   fac_locale_lang,
   fac_locale_tekst
)
AS
SELECT   l.fac_locale_kolomnaam,
            l.fac_locale_kolomkeyval,
            x.mld_typeopdr_omschrijving,
            l.fac_locale_lang,
            l.fac_locale_tekst
     FROM   fac_locale l, mld_typeopdr x
    WHERE   l.fac_locale_kolomkeyval = x.mld_typeopdr_key AND l.fac_locale_kolomnaam = 'MLD_TYPEOPDR_KEY'
   UNION ALL
   SELECT   l.fac_locale_kolomnaam,
            l.fac_locale_kolomkeyval,
            x.res_ruimte_omschrijving,
            l.fac_locale_lang,
            l.fac_locale_tekst
     FROM   fac_locale l, res_ruimte x
    WHERE   l.fac_locale_kolomkeyval = x.res_ruimte_key AND l.fac_locale_kolomnaam = 'RES_RUIMTE_OMSCHRIJVING'
   UNION ALL
   SELECT   l.fac_locale_kolomnaam,
            l.fac_locale_kolomkeyval,
            x.ins_srtdiscipline_omschrijving,
            l.fac_locale_lang,
            l.fac_locale_tekst
     FROM   fac_locale l, ins_srtdiscipline x
    WHERE   l.fac_locale_kolomkeyval = x.ins_srtdiscipline_key
            AND l.fac_locale_kolomnaam = 'INS_SRTDISCIPLINE_OMSCHRIJVING';

CREATE_VIEW(fac_v_rap_putorderslog, 0)
AS
   SELECT   imp_log_datum hide_f_imp_log_datum,
            TO_CHAR (imp_log_datum, 'YYYYMMDD') fclt_f_datum,
            TO_CHAR (imp_log_datum, 'HH24:MI:SS') tijdstip,
            DECODE (imp_log_status, 'F', 'Fatal', 'E', 'Error', 'W', 'Warning', 'I', 'Informative', '-') fclt_f_niveau,
            imp_log_omschrijving fclt_f_omschrijving
     FROM   imp_log
    WHERE   imp_log_applicatie = '$PutOrders$' AND imp_log_datum > SYSDATE - 10;

CREATE_VIEW (fac_v_lcrap_fe_vs_key, 0)
(
   tijdstip,
   all_users,
   fe_users,
   key_users,
   xdfe_users,
   xdkey_users,
   recent_login
)
AS
   SELECT TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss') tijdstip,
          SUM (x.login) all_users,
          SUM (x.login) - SUM (DECODE (a.key_user, NULL, DECODE (b.xd_user, NULL, 0, 1), 1)) fe_users,
          SUM (DECODE (a.key_user, NULL, 0, DECODE (b.xd_user, NULL, 1, 0))) key_users,
          SUM (DECODE (a.key_user, NULL, DECODE (b.xd_user, NULL, 0, 1), 0)) xdfe_users,
          SUM (DECODE (a.key_user, NULL, 0, DECODE (b.xd_user, NULL, 0, 1))) xdkey_users,
          SUM (x.recent_login) recent_login
     FROM (SELECT p.prs_perslid_key,
                  COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) oslogin,
                  1 login,             -- 1=user heeft login + groep + rechten
                  DECODE (
                     SIGN(TRUNC(COALESCE (p.prs_perslid_login + 100, SYSDATE - 1)) - TRUNC (SYSDATE)),
                     -1, 0,
                     1)              -- 1=user heeft laatste 100 dagen ingelogd
                     recent_login
             FROM prs_v_aanwezigperslid p
            WHERE EXISTS               -- op basis van login + groep + rechten
                     (SELECT 1
                        FROM fac_v_webgebruiker gg
                       WHERE gg.prs_perslid_key = p.prs_perslid_key)
           UNION ALL   -- FSN#24029: Soms ook personen zonder login meetellen!
           SELECT p.prs_perslid_key,
                  NULL oslogin,
                  1 login,          -- 1=user telt mee, want allow_for_others!
                  0 recent_login      -- geen login, dus nooit recent ingelogd
             FROM prs_v_aanwezigperslid p
            WHERE COALESCE (p.prs_perslid_oslogin, p.prs_perslid_oslogin2) IS NULL
                  AND (fac.getSetting ('mld_allow_for_others') = 1
                       OR EXISTS (SELECT 1
                                    FROM bes_disc_params dp, bes_discipline bd
                                   WHERE dp.bes_disc_params_for_others = 1
                                     AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                                     AND bd.ins_discipline_verwijder IS NULL))
           UNION ALL   -- FSN#27315: En ook eventuele "sensorusers" meetellen!
           SELECT NULL prs_perslid_key,
                  NULL oslogin,
                  COUNT ( * ) login,       -- elke sensoruser telt mee als FE!
                  1 recent_login        -- recent actief dus tellen als recent
             FROM ins_v_aanwezigdeel d
            WHERE ins_deel_statedate > TRUNC (SYSDATE - 30)) x
          LEFT JOIN           -- 1=user heeft schrijfrechten op key-codes=notFE-codes
                    (SELECT DISTINCT prs_perslid_oslogin, 1 key_user
                       FROM fac_v_webgebruiker g, fac_functie f, prs_v_aanwezigperslid p
                      WHERE g.fac_functie_key = f.fac_functie_key
                        AND f.fac_functie_groep IN (1, 2)
                        AND p.prs_perslid_key = g.prs_perslid_key
                        AND g.fac_gebruiker_prs_level_write < 9
                        AND g.fac_gebruiker_alg_level_write < 9) a
             ON x.oslogin = a.prs_perslid_oslogin
          LEFT JOIN             -- FSN#30404: 1=user is cross-domain (xd) user
                    (SELECT p.prs_perslid_key, 1 xd_user
                       FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
                      WHERE p.prs_afdeling_key = ab.prs_afdeling_key
                        AND p.prs_perslid_apikey IS NOT NULL
                        AND ab.prs_bedrijf_key = fac.safe_to_number(fac.getSetting('xd_primary_bedrijfkey'))) b
             ON x.prs_perslid_key = b.prs_perslid_key;

CREATE_VIEW (fac_v_lcrap_key_stats, 0)
(
   prs_perslid_key,
   prs_perslid_naam_full,
   xd_user,
   lev_write_cnt,
   max_alg_write,
   max_prs_write,
   lev_read_cnt,
   max_alg_read,
   max_prs_read,
   aut_groep_cnt,
   funcodes
)
AS
    SELECT x.prs_perslid_key,
          x.prs_perslid_naam_full,
          DECODE (xd.prs_bedrijf_key, NULL, NULL, 'Ja'),
          COALESCE (y.lev_write_cnt, 0) lev_write_cnt,
          y.max_alg_write,
          y.max_prs_write,
          COALESCE (z.lev_read_cnt, 0) lev_read_cnt,
          z.max_alg_read,
          z.max_prs_read,
          x.aut_groep_cnt,
          pfcs.funcodes
     FROM (  SELECT p.prs_perslid_key, p.prs_afdeling_key, fn.prs_perslid_naam_full,
                    p.prs_perslid_apikey,
                    COUNT (DISTINCT gg.fac_groep_key) aut_groep_cnt
               FROM prs_v_aanwezigperslid p, prs_v_perslid_fullnames fn, fac_gebruikersgroep gg
              WHERE     p.prs_perslid_oslogin IS NOT NULL
                    AND p.prs_perslid_key = fn.prs_perslid_key
                    AND p.prs_perslid_key = gg.prs_perslid_key
           GROUP BY p.prs_perslid_key, p.prs_perslid_apikey, p.prs_afdeling_key, fn.prs_perslid_naam_full) x
          LEFT JOIN prs_v_afdeling_boom xd
             ON x.prs_afdeling_key = xd.prs_afdeling_key
                AND x.prs_perslid_apikey IS NOT NULL
                AND xd.prs_bedrijf_key = fac.safe_to_number (fac.getSetting ('xd_primary_bedrijfkey'))
          LEFT JOIN (  SELECT gg.prs_perslid_key,
                              COUNT (DISTINCT gr.fac_groeprechten_key) lev_write_cnt,
                              MIN (gr.fac_gebruiker_alg_level_write) max_alg_write,
                              MIN (gr.fac_gebruiker_prs_level_write) max_prs_write
                         FROM fac_gebruikersgroep gg, fac_groeprechten gr, fac_functie f
                        WHERE     gg.fac_groep_key = gr.fac_groep_key
                              AND gr.fac_functie_key = f.fac_functie_key
                              AND fac_functie_groep IN (1, 2)
                              AND gr.fac_gebruiker_alg_level_write < 9
                              AND gr.fac_gebruiker_prs_level_write < 9
                     GROUP BY gg.prs_perslid_key) y
             ON x.prs_perslid_key = y.prs_perslid_key
          LEFT JOIN (  SELECT gg.prs_perslid_key,
                              COUNT (DISTINCT gr.fac_groeprechten_key) lev_read_cnt,
                              MIN (gr.fac_gebruiker_alg_level_read) max_alg_read,
                              MIN (gr.fac_gebruiker_prs_level_read) max_prs_read
                         FROM fac_gebruikersgroep gg, fac_groeprechten gr, fac_functie f
                        WHERE     gg.fac_groep_key = gr.fac_groep_key
                              AND gr.fac_functie_key = f.fac_functie_key
                              AND fac_functie_groep IN (1, 2)
                              AND gr.fac_gebruiker_alg_level_read < 9
                              AND gr.fac_gebruiker_prs_level_read < 9
                     GROUP BY gg.prs_perslid_key) z
             ON x.prs_perslid_key = z.prs_perslid_key
          LEFT JOIN (  SELECT pfc.prs_perslid_key,
                              LISTAGG (pfc.fac_functie_code, ', ') WITHIN GROUP (ORDER BY pfc.fac_functie_code) AS funcodes
                         FROM (SELECT DISTINCT gg.prs_perslid_key, SUBSTR (f.fac_functie_code, 5) fac_functie_code
                                 FROM fac_gebruikersgroep gg,
                                      fac_groeprechten gr,
                                      fac_functie f
                                WHERE gg.fac_groep_key = gr.fac_groep_key
                                      AND gr.fac_functie_key =
                                            f.fac_functie_key
                                      AND fac_functie_groep IN (1, 2)) pfc
                     GROUP BY pfc.prs_perslid_key) pfcs
             ON x.prs_perslid_key = pfcs.prs_perslid_key
    WHERE (COALESCE (y.lev_write_cnt, 0) > 0 OR COALESCE (z.lev_read_cnt, 0) > 0)
          AND INSTR (pfcs.funcodes, 'FACFAC') = 0;

CREATE_VIEW (fac_v_lcrap_grp_stats, 0)
(
   fac_groep_omschrijving,
   lev_write_cnt,
   max_alg_write,
   max_prs_write,
   lev_read_cnt,
   max_alg_read,
   max_prs_read,
   in_groep_cnt
)
AS
   SELECT   x.fac_groep_omschrijving,
            COALESCE (y.lev_write_cnt, 0) lev_write_cnt,
            y.max_alg_write,
            y.max_prs_write,
            COALESCE (z.lev_read_cnt, 0) lev_read_cnt,
            z.max_alg_read,
            z.max_prs_read,
            x.in_groep_cnt
     FROM         (  SELECT   gg.fac_groep_key,
                              g.fac_groep_omschrijving,
                              COUNT (gg.prs_perslid_key) in_groep_cnt
                       FROM   fac_gebruikersgroep gg, fac_groep g
                      WHERE   gg.fac_groep_key = g.fac_groep_key
                   GROUP BY   gg.fac_groep_key, g.fac_groep_omschrijving) x
               LEFT JOIN
                  (  SELECT   gr.fac_groep_key,
                              COUNT (DISTINCT gr.fac_groeprechten_key)
                                 lev_write_cnt,
                              MIN (gr.fac_gebruiker_alg_level_write)
                                 max_alg_write,
                              MIN (gr.fac_gebruiker_prs_level_write)
                                 max_prs_write
                       FROM   fac_groeprechten gr, fac_functie f
                      WHERE   gr.fac_functie_key = f.fac_functie_key
                              AND fac_functie_groep IN (1, 2)
                              AND gr.fac_gebruiker_alg_level_write < 9
                              AND gr.fac_gebruiker_prs_level_write < 9
                   GROUP BY   gr.fac_groep_key) y
               ON x.fac_groep_key = y.fac_groep_key
            LEFT JOIN
               (  SELECT   gr.fac_groep_key,
                           COUNT (DISTINCT gr.fac_groeprechten_key)
                              lev_read_cnt,
                           MIN (gr.fac_gebruiker_alg_level_read) max_alg_read,
                           MIN (gr.fac_gebruiker_prs_level_read) max_prs_read
                    FROM   fac_groeprechten gr, fac_functie f
                   WHERE   gr.fac_functie_key = f.fac_functie_key
                           AND fac_functie_groep IN (1, 2)
                           AND gr.fac_gebruiker_alg_level_read < 9
                           AND gr.fac_gebruiker_prs_level_read < 9
                GROUP BY   gr.fac_groep_key) z
            ON x.fac_groep_key = z.fac_groep_key
   UNION ALL
   SELECT   '<Geen groep>',
            NULL lev_write_cnt,
            NULL,
            NULL,
            NULL lev_read_cnt,
            NULL,
            NULL,
            COUNT ( * )
     FROM   prs_v_aanwezigperslid p
    WHERE   p.prs_perslid_oslogin IS NOT NULL
            AND NOT EXISTS (SELECT   1
                              FROM   fac_gebruikersgroep
                             WHERE   prs_perslid_key = p.prs_perslid_key);

CREATE_VIEW(fac_v_lcrap_saldo, 1)
(
   tijdstip,
   fe_saldo,
   key_saldo,
   fe_diff_pct,
   key_diff_pct
)
AS
   SELECT TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss') tijdstip,
          fac.getsetting ('licensed_fe_users') - fe_users fe_saldo,
          fac.getsetting ('licensed_key_users') - key_users key_saldo,
          DECODE(fac.getsetting ('licensed_fe_users'),0,100,100*(fac.getsetting ('licensed_fe_users') - fe_users)/fac.getsetting ('licensed_fe_users')),
          DECODE(fac.getsetting ('licensed_key_users'),0,100,100*(fac.getsetting ('licensed_key_users') - fe_users)/fac.getsetting ('licensed_key_users'))
     FROM fac_v_lcrap_fe_vs_key;

CREATE_VIEW (FAC_V_NOTI_LICENTIE, 0)
(
   sender,
   receiver,
   text,
   code,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT NULL sender,
          NULL receiver,
          'Usercheck '|| v.fac_version_cust||': '
          || fvl.key_users
          || '/'
          || fac.getsetting ('licensed_key_users')
          || ' key-users en '
          || fvl.fe_users
          || '/'
          || fac.getsetting ('licensed_fe_users')
          || ' frontend-users in gebruik',
          'ADMLIC' code,
          NULL key,
          NULL xkey,
          'info@facilitor.nl' xemail,
          NULL xmobile
     FROM fac_v_lcrap_fe_vs_key fvl, fac_version v
    WHERE (fvl.key_users > fac.getsetting ('licensed_key_users')
           OR fvl.fe_users > fac.getsetting ('licensed_fe_users'))
          AND (fac.getsetting ('licensed_key_users') > 0
               OR fac.getsetting ('licensed_key_users') > 0);


/* KTO-views naar mld gemoved */

/*****************************************************************************/
/*****************************************************************************/
/*          Grafiek views voor dashboards e.d. REAL TIME MONITORING          */
/*****************************************************************************/
/*****************************************************************************/
// De volgende conventies worden gehanteerd:
// fclt_xas_XASNAAM     x value
// fclt_yas_YASNAAM     y value
// fclt_yas2_YA2SNAAM   y2 value (not yet so supported)
// fclt_url             url to follow on click
// ..
// fclt_3d_discipline_key is de discipline key die tbv autorisatie wordt gematcht
//                        met de de fac_functie_key cf. fac_usrgraph
//

-- Aantal lopende meldingen per discipline
CREATE_VIEW(fac_v_graph_busyxdiscipline, 0)
(
   fclt_xas_,
   fclt_yas_,
   fclt_url,
   fclt_3d_discipline_key
)
AS
     SELECT   discipline_omschrijving,
              SUM (aantal),
              'appl/mld/mld_search.asp?urole=fo&autosearch=1&disc_key_str=' || ins_discipline_key,
              ins_discipline_key
       FROM   (SELECT   d.ins_discipline_key,
                        sd.ins_srtdiscipline_prefix || '-' || d.ins_discipline_omschrijving discipline_omschrijving,
                        aantal
                 FROM   (  SELECT   mld_stdmelding_key, COUNT ( * ) aantal
                             FROM   mld_melding
                            WHERE   mld_melding_status IN (2, 3, 4, 7, 0)
                         GROUP BY   mld_stdmelding_key) m2,
                        mld_stdmelding std,
                        ins_tab_discipline d,
                        ins_srtdiscipline sd
                WHERE       m2.mld_stdmelding_key(+) = std.mld_stdmelding_key
                        AND std.mld_ins_discipline_key = d.ins_discipline_key
                        AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                        AND aantal IS NOT NULL)
   GROUP BY   discipline_omschrijving, ins_discipline_key;

-- Aantal open (te behandelen) meldingen per discipline
CREATE OR REPLACE FORCE VIEW fac_v_graph_todoxdiscipline
(
   fclt_xas_,
   fclt_yas_,
   fclt_url,
   fclt_3d_discipline_key
)
AS
     SELECT   discipline_omschrijving,
              SUM (aantal),
              'appl/mld/mld_search.asp?urole=bo&autosearch=1&disc_key_str=' || ins_discipline_key,  /* moet bo ipv fo, maar waarom snap ik niet */
              ins_discipline_key
       FROM   (SELECT   d.ins_discipline_key,
                        sd.ins_srtdiscipline_prefix || '-' || d.ins_discipline_omschrijving discipline_omschrijving,
                        aantal
                 FROM   (  SELECT   mld_stdmelding_key, COUNT ( * ) aantal
                             FROM   mld_melding
                            WHERE   mld_melding_status IN (2, 3)
                         GROUP BY   mld_stdmelding_key) m2,
                        mld_stdmelding std,
                        ins_tab_discipline d,
                        ins_srtdiscipline sd
                WHERE       m2.mld_stdmelding_key(+) = std.mld_stdmelding_key
                        AND std.mld_ins_discipline_key = d.ins_discipline_key
                        AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                        AND aantal IS NOT NULL)
   GROUP BY   discipline_omschrijving, ins_discipline_key;

-- Aantal lopende meldingen per srtdiscipline
CREATE_VIEW(fac_v_graph_busyxsrtdis, 0)
(
   fclt_xas_,
   fclt_yas_,
   fclt_3d_discipline_key,
   fclt_url
)
AS
   SELECT   srtdiscipline_omschrijving,
            aantal,
            ins_srtdiscipline_key,
            'appl/mld/mld_search.asp?urole=fo&autosearch=1&srtdisc=' || ins_srtdiscipline_key
     FROM   (  SELECT   sd.ins_srtdiscipline_omschrijving srtdiscipline_omschrijving,
                        COUNT (sd.ins_srtdiscipline_omschrijving) aantal,
                        sd.ins_srtdiscipline_key
                 FROM   mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd
                WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                        AND std.mld_ins_discipline_key = d.ins_discipline_key
                        AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                        AND mld_melding_status IN (2, 3, 4, 7, 0)
             GROUP BY   sd.ins_srtdiscipline_key, sd.ins_srtdiscipline_omschrijving);

-- Aantal open meldingen per srtdiscipline
CREATE_VIEW(fac_v_graph_busyxsrtdis, 0)
(
   fclt_xas_,
   fclt_yas_,
   fclt_3d_discipline_key,
   fclt_url
)
AS
   SELECT   srtdiscipline_omschrijving,
            aantal,
            ins_srtdiscipline_key,
            'appl/mld/mld_search.asp?urole=bo&autosearch=1&srtdisc=' || ins_srtdiscipline_key  /* moet bo ipv fo, maar waarom snap ik niet */
     FROM   (  SELECT   sd.ins_srtdiscipline_omschrijving srtdiscipline_omschrijving,
                        COUNT (sd.ins_srtdiscipline_omschrijving) aantal,
                        sd.ins_srtdiscipline_key
                 FROM   mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd
                WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                        AND std.mld_ins_discipline_key = d.ins_discipline_key
                        AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                        AND mld_melding_status IN (2, 3)
             GROUP BY   sd.ins_srtdiscipline_key, sd.ins_srtdiscipline_omschrijving);

CREATE_VIEW(fac_v_graph_afgemeldxdisctoday, 0)
(
   fclt_xas_,
   fclt_yas_,
   fclt_3d_discipline_key
   )
AS
   SELECT MIN(sd.ins_srtdiscipline_prefix) || '-' || MIN(d.ins_discipline_omschrijving) discipline_omschrijving,
                COUNT (d.ins_discipline_omschrijving) aantal,
                d.ins_discipline_key
         FROM  mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
               fac_tracking t, fac_srtnotificatie sn
         WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
         AND   std.mld_ins_discipline_key = d.ins_discipline_key
         AND   d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
         AND   m.mld_melding_key = t.fac_tracking_refkey
         AND   t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
         AND   sn.fac_srtnotificatie_code = 'MLDAFM'
         AND   TRUNC(t.fac_tracking_datum) = TRUNC(SYSDATE)
         GROUP BY d.ins_discipline_key;


CREATE_VIEW(fac_v_graph_mldnieuw_verloop, 0)
(
   fclt_xas_,
   fclt_yas_
   )
AS
SELECT   tijd || ':00', 0
  FROM   (    SELECT   TRIM (TO_CHAR (LEVEL, '09')) tijd, LEVEL nivo
                FROM   DUAL
          CONNECT BY   LEVEL <= 24)
 WHERE   nivo >= 7 AND nivo <= 19
         AND NOT EXISTS
               (SELECT   ''
                  FROM   mld_melding m
                 WHERE   TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE) AND TO_CHAR (m.mld_melding_datum, 'hh24') = tijd)
UNION
  SELECT   TO_CHAR (m.mld_melding_datum, 'hh24') || ':00', COUNT ( * ) aantal
    FROM   mld_melding m
   WHERE   TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
GROUP BY   TO_CHAR (m.mld_melding_datum, 'hh24');

CREATE_VIEW(fac_v_graph_mldklaar_verloop, 0)
(
   fclt_xas_,
   fclt_yas_
   )
AS
SELECT   tijd || ':00', 0
  FROM   (SELECT   tijd
            FROM   (    SELECT   TRIM (TO_CHAR (LEVEL, '09')) tijd, LEVEL nivo
                          FROM   DUAL
                    CONNECT BY   LEVEL <= 24)
           WHERE   nivo >= 7 AND nivo <= 19)
 WHERE   NOT EXISTS
            (SELECT   tijd
               FROM   (  SELECT   TO_CHAR (t.fac_tracking_datum, 'hh24') tijd, COUNT ( * ) aantal
                           FROM   mld_melding m, fac_tracking t, fac_srtnotificatie sn
                          WHERE       m.mld_melding_key = t.fac_tracking_refkey
                                  AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                                  AND sn.fac_srtnotificatie_code = 'MLDAFM'
                                  AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE)
                       GROUP BY   TO_CHAR (t.fac_tracking_datum, 'hh24')) x
              WHERE   x.tijd = tijd)
UNION
SELECT   tijd || ':00', aantal
  FROM   (  SELECT   TO_CHAR (t.fac_tracking_datum, 'hh24') tijd, COUNT ( * ) aantal
              FROM   mld_melding m, fac_tracking t, fac_srtnotificatie sn
             WHERE       m.mld_melding_key = t.fac_tracking_refkey
                     AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                     AND sn.fac_srtnotificatie_code = 'MLDAFM'
                     AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE)
          GROUP BY   TO_CHAR (t.fac_tracking_datum, 'hh24'));

CREATE_VIEW(fac_v_graph_mld_ppi_accept, 0)
(
   fclt_xas_aantal,
   fclt_yas_totaal,
   fclt_3d_discipline_key
)
AS
   SELECT                                        -- ROUND ( (SUM (acceptoptijd) / COUNT (mld_key)) * 100)  acceptoptijd,
         TO_CHAR (SUM (acceptoptijd)) aantal, COUNT (mld_key) totaal, MAX (ins_discipline_key)
     FROM   (SELECT   DISTINCT
                      m.mld_melding_key mld_key,
                      md.ins_discipline_key,
                      CASE SIGN(fac.datumtijdplusuitvoertijd (fac.gettrackingdate ('MLDNEW', m.mld_melding_key),
                                                              std.mld_stdmelding_t_accepttijd.tijdsduur,
                                                              DECODE (std.mld_stdmelding_t_accepttijd.eenheid,'U', 'UREN', 'DAGEN')
                                                             )
                                - SYSDATE)
                         WHEN -1
                         THEN
                            0
                         ELSE
                            1
                      END
                         acceptoptijd
               FROM   mld_melding m, mld_discipline md, mld_stdmelding std
              WHERE       md.ins_discipline_key = std.mld_ins_discipline_key
                      AND std.mld_stdmelding_key = m.mld_stdmelding_key
                      AND mld_melding_status IN (2, 3));

-- Voor flexplekbezetting, per verdieping hoeveel vrij en bezet (staaf)
CREATE_VIEW(fac_v_graph_prs_flexplekken, 0)
AS
     SELECT   alg_gebouw_key fclt_3d_gebouw_key,
              alg_verdieping_code fclt_xas_,
              SUM (bezet) fclt_yas_,
              SUM (vrij) fclt_yas2_
       FROM   prs_v_flexplekken f, alg_verdieping v
      WHERE   f.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_verwijder IS NULL
   GROUP BY   alg_gebouw_key, alg_verdieping_code;

-- Voor flexplekbezetting, per gebouw hoeveel vrij en bezet (taart)
CREATE_VIEW(fac_v_graph_prs_flexgebouw, 0)
AS
     SELECT   alg_gebouw_key fclt_3d_gebouw_key, 'Vrij' fclt_xas_, SUM (vrij) fclt_yas_
       FROM   prs_v_flexplekken f, alg_verdieping v
      WHERE   f.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_verwijder IS NULL
   GROUP BY   alg_gebouw_key
   UNION
     SELECT   alg_gebouw_key fclt_3d_gebouw_key, 'Bezet' fclt_xas_, SUM (bezet) fclt_yas_
       FROM   prs_v_flexplekken f, alg_verdieping v
      WHERE   f.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_verwijder IS NULL
   GROUP BY   alg_gebouw_key;


/* KTO export: het samenstellen van kto-uitnodigingen a.d.h.v. een populatie MLD/RES/BES gebaseerd op percentage/drempel */
CREATE_VIEW(fac_v_export_kto_kandidaten, 0)
(
   result,
   result_order
)
AS
SELECT 'Meldingnummer;Vakgroep;Melding', 0 FROM DUAL
UNION ALL
SELECT    '"'
       || m.mld_melding_key
       || '";"'
       || d.ins_discipline_omschrijving
       || '";"'
       || s.mld_stdmelding_omschrijving
       || '"',
       m.mld_melding_key
  FROM mld_melding m, ins_tab_discipline d, mld_stdmelding s
 WHERE s.mld_ins_discipline_key = d.ins_discipline_key
       AND m.mld_stdmelding_key = s.mld_stdmelding_key
       AND TRUNC (m.mld_melding_kto_verstuurd) =
             TRUNC (
                (SELECT MAX (mld_melding_kto_verstuurd) FROM mld_melding))
UNION ALL
SELECT    '"'
       || rrr.res_reservering_key
       || '/'
       || rrr.res_rsv_ruimte_volgnr
       || '";"'
       || d.ins_discipline_omschrijving
       || '";"'
       || rr.res_ruimte_nr
       || '"',
       10000000 + rrr.res_rsv_ruimte_key
  FROM res_rsv_ruimte rrr,
       res_ruimte_opstelling ro,
       res_ruimte rr,
       ins_tab_discipline d
 WHERE     rrr.res_rsv_ruimte_verwijder IS NULL
       AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
       AND ro.res_ruimte_key = rr.res_ruimte_key
       AND rr.res_discipline_key = d.ins_discipline_key
       AND TRUNC (rrr.res_rsv_ruimte_kto_verstuurd) =
             TRUNC( (SELECT MAX (res_rsv_ruimte_kto_verstuurd)
                       FROM res_rsv_ruimte))
UNION ALL
SELECT    '"'
       || b.bes_bestelling_key
       || '";"'
       || d.ins_discipline_omschrijving
       || '";"'
       || ''
       || '"',
       99999999 + b.bes_bestelling_key
  FROM bes_bestelling b,
       bes_bestelling_item bi,
       bes_srtdeel sd,
       bes_srtgroep sg,
       bes_discipline d
 WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
       AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
       AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
       AND sg.ins_discipline_key = d.ins_discipline_key
       AND TRUNC (b.bes_bestelling_kto_verstuurd) =
             TRUNC( (SELECT MAX (bes_bestelling_kto_verstuurd)
                       FROM bes_bestelling));

/* EXPORT views voor de transfer functies */
CREATE_VIEW(fac_v_exp_eigen_tabel, 0)
AS
     SELECT fac_usrtab_naam fclt_f_tabelnaam,
            fac_usrdata_code waarde_code,
            fac_usrdata_omschr waarde_oms,
            fac_usrdata_volgnr volgnr,
            fac_usrdata_prijs prijs,
            fac_usrdata_vervaldatum vervaldatum
       FROM fac_usrdata ud, fac_usrtab ut
      WHERE fac_usrdata_verwijder IS NULL
        AND ud.fac_usrtab_key = ut.fac_usrtab_key;

CREATE_VIEW(fac_v_exp_menu, 0)
AS
     SELECT fac_menu_volgnr menu_volgnr,
            fac_menuitems_label menuitems_label,
            fac_menuitems_groep menuitems_groep,
            fac_menuitems_url menuitems_url,
            fac_menu_info menu_info,
            fac_menu_altlabel menu_altlabel,
            fac_menu_alturl menu_alturl,
            fac_menu_altgroep menu_altgroep,
            ff.fac_functie_code functie_code,
            ins_discipline_omschrijving discipline_omschr,
            ins_srtdiscipline_omschrijving srtdiscipline_omschr,
            fac_menu_image menu_image,
            fac_menu_level menu_level,
            fac_menu_portal menu_portal
       FROM fac_menu fm, fac_menuitems fmi,
            fac_functie ff,
            ins_tab_discipline itd, ins_srtdiscipline isd
      WHERE     fmi.fac_menuitems_key(+) = fm.fac_menuitems_key
            AND ff.fac_functie_key(+) = fm.fac_functie_key
            AND itd.ins_discipline_key(+) = fm.ins_discipline_key
            AND isd.ins_srtdiscipline_key(+) = fm.ins_srtdiscipline_key
            AND fac_menu_volgnr IS NOT NULL;

CREATE_VIEW(fac_v_exp_flex_res, 0)
AS
     SELECT fac_kenmerkdomein_omschrijving,
            fac_kenmerkdomein_objectnaam,
            fac_kenmerkdomein_kolomnaam,
            fac_kenmerkdomein_kolomtxt,
            fac_usrtab_naam,
            kms.res_srtkenmerk_omschrijving srtkenmerk_omschrijving,
            kms.res_srtkenmerk_kenmerktype srtkenmerk_kenmerktype,
            kms.res_srtkenmerk_systeem srtkenmerk_systeem,
            kms.res_srtkenmerk_lengte srtkenmerk_lengte,
            kms.res_srtkenmerk_dec srtkenmerk_dec,
            kms.res_srtkenmerk_nmin srtkenmerk_nmin,
            kms.res_srtkenmerk_nmax srtkenmerk_nmax,
            kms.res_srtkenmerk_dimensie srtkenmerk_dimensie,
            NULL kenmerk_type,
            km.res_kenmerk_niveau kenmerk_niveau,
            km.res_kenmerk_verplicht kenmerk_verplicht,
            km.res_kenmerk_groep kenmerk_groep,
            km.res_kenmerk_volgnummer kenmerk_volgnummer,
            km.res_kenmerk_default kenmerk_default,
            km.res_kenmerk_toonbaar kenmerk_toonbaar,
            km.res_kenmerk_uniek kenmerk_uniek,
            km.res_kenmerk_hint kenmerk_hint,
            km.res_kenmerk_regexp kenmerk_regexp,
            TO_CHAR(km.res_kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS') kenmerk_verwijder,
            sa.res_srtactiviteit_omschrijving fclt_f_activiteitsoort,
            act.res_activiteit_omschrijving fclt_f_activiteit
       FROM res_kenmerk km,
            res_srtkenmerk kms,
            fac_kenmerkdomein kmd,
            fac_usrtab fut,
            res_activiteit act,
            res_srtactiviteit sa
      WHERE     act.res_activiteit_key = km.res_activiteit_key
            AND sa.res_srtactiviteit_key = act.res_srtactiviteit_key
            AND kms.res_srtkenmerk_key = km.res_srtkenmerk_key
            AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
            AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
            AND act.res_activiteit_verwijder IS NULL
            AND sa.res_srtactiviteit_verwijder IS NULL;

CREATE_VIEW(fac_v_exp_flex_bes, 0)
AS
   SELECT   fac_kenmerkdomein_omschrijving,
            fac_kenmerkdomein_objectnaam,
            fac_kenmerkdomein_kolomnaam,
            fac_kenmerkdomein_kolomtxt,
            fac_usrtab_naam,
            bes_srtkenmerk_omschrijving srtkenmerk_omschrijving,
            bes_srtkenmerk_kenmerktype srtkenmerk_kenmerktype,
            bes_srtkenmerk_systeem srtkenmerk_systeem,
            bes_srtkenmerk_lengte srtkenmerk_lengte,
            bes_srtkenmerk_dec srtkenmerk_dec,
            bes_srtkenmerk_nmin srtkenmerk_nmin,
            bes_srtkenmerk_nmax srtkenmerk_nmax,
            bes_srtkenmerk_dimensie srtkenmerk_dimensie,
            bes_kenmerk_type kenmerk_type,
            bes_kenmerk_niveau kenmerk_niveau,
            bes_kenmerk_verplicht kenmerk_verplicht,
            bes_kenmerk_groep kenmerk_groep,
            bes_kenmerk_volgnummer kenmerk_volgnummer,
            bes_kenmerk_default kenmerk_default,
            bes_kenmerk_toonbaar kenmerk_toonbaar,
            bes_kenmerk_uniek kenmerk_uniek,
            bes_kenmerk_hint kenmerk_hint,
            bes_kenmerk_regexp kenmerk_regexp,
            TO_CHAR (bes_kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS') kenmerk_verwijder,
            ins_discipline_omschrijving fclt_f_catalogus,
            bes_srtgroep_omschrijving fclt_f_groep,
            bes_srtdeel_omschrijving fclt_f_artikel
     FROM   (SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      cat.ins_discipline_omschrijving,
                      NULL bes_srtgroep_omschrijving,
                      NULL bes_srtdeel_omschrijving
               FROM   bes_kenmerk km, bes_srtkenmerk kms, fac_kenmerkdomein kmd, fac_usrtab fut, bes_discipline cat
              WHERE       bes_kenmerk_niveau = 'D'
                      AND km.bes_srtinstallatie_key = cat.ins_discipline_key
                      AND kms.bes_srtkenmerk_key = km.bes_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND cat.ins_discipline_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      cat.ins_discipline_omschrijving,
                      grp.bes_srtgroep_omschrijving,
                      NULL bes_srtdeel_omschrijving
               FROM   bes_kenmerk km,
                      bes_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      bes_discipline cat,
                      bes_srtgroep grp
              WHERE       bes_kenmerk_niveau = 'G'
                      AND grp.ins_discipline_key = cat.ins_discipline_key
                      AND km.bes_srtinstallatie_key = grp.bes_srtgroep_key
                      AND kms.bes_srtkenmerk_key = km.bes_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND cat.ins_discipline_verwijder IS NULL
                      AND grp.bes_srtgroep_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      cat.ins_discipline_omschrijving,
                      grp.bes_srtgroep_omschrijving,
                      art.bes_srtdeel_omschrijving
               FROM   bes_kenmerk km,
                      bes_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      bes_discipline cat,
                      bes_srtgroep grp,
                      bes_srtdeel art
              WHERE       bes_kenmerk_niveau = 'S'
                      AND grp.ins_discipline_key = cat.ins_discipline_key
                      AND art.bes_srtgroep_key = grp.bes_srtgroep_key
                      AND km.bes_srtinstallatie_key = art.bes_srtdeel_key
                      AND kms.bes_srtkenmerk_key = km.bes_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND cat.ins_discipline_verwijder IS NULL
                      AND grp.bes_srtgroep_verwijder IS NULL
                      AND art.bes_srtdeel_verwijder IS NULL);

CREATE_VIEW(fac_v_exp_flex_mld, 0)
AS
   SELECT   fac_kenmerkdomein_omschrijving,
            fac_kenmerkdomein_objectnaam,
            fac_kenmerkdomein_kolomnaam,
            fac_kenmerkdomein_kolomtxt,
            fac_usrtab_naam,
            mld_srtkenmerk_omschrijving srtkenmerk_omschrijving,
            mld_srtkenmerk_kenmerktype srtkenmerk_kenmerktype,
            mld_srtkenmerk_systeem srtkenmerk_systeem,
            mld_srtkenmerk_lengte srtkenmerk_lengte,
            mld_srtkenmerk_dec srtkenmerk_dec,
            mld_srtkenmerk_nmin srtkenmerk_nmin,
            mld_srtkenmerk_nmax srtkenmerk_nmax,
            mld_srtkenmerk_dimensie srtkenmerk_dimensie,
            NULL kenmerk_type,
            mld_kenmerk_niveau kenmerk_niveau,
            mld_kenmerk_verplicht kenmerk_verplicht,
            mld_kenmerk_groep kenmerk_groep,
            mld_kenmerk_volgnummer kenmerk_volgnummer,
            mld_kenmerk_default kenmerk_default,
            mld_kenmerk_toonbaar kenmerk_toonbaar,
            mld_kenmerk_uniek kenmerk_uniek,
            mld_kenmerk_hint kenmerk_hint,
            mld_kenmerk_regexp kenmerk_regexp,
            TO_CHAR (mld_kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS') kenmerk_verwijder,
            ins_srtdiscipline_omschrijving fclt_f_vakgroeptype,
            ins_discipline_omschrijving fclt_f_vakgroep,
            mld_stdmelding_omschrijving fclt_f_melding,
            mld_typeopdr_omschrijving fclt_f_opdrachttype
     FROM   (SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vgt.ins_srtdiscipline_omschrijving,
                      '' ins_discipline_omschrijving,
                      '' mld_stdmelding_omschrijving,
                      '' mld_typeopdr_omschrijving
               FROM   mld_kenmerk km, mld_srtkenmerk kms, fac_kenmerkdomein kmd, fac_usrtab fut, ins_srtdiscipline vgt
              WHERE       mld_kenmerk_niveau = 'T'
                      AND km.mld_stdmelding_key = vgt.ins_srtdiscipline_key
                      AND kms.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vgt.ins_srtdiscipline_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vgt.ins_srtdiscipline_omschrijving,
                      grp.ins_discipline_omschrijving,
                      '' mld_stdmelding_omschrijving,
                      '' mld_typeopdr_omschrijving
               FROM   mld_kenmerk km,
                      mld_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      ins_srtdiscipline vgt,
                      mld_discipline grp
              WHERE       mld_kenmerk_niveau = 'D'
                      AND grp.ins_srtdiscipline_key = vgt.ins_srtdiscipline_key
                      AND km.mld_stdmelding_key = grp.ins_discipline_key
                      AND kms.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vgt.ins_srtdiscipline_verwijder IS NULL
                      AND grp.ins_discipline_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vgt.ins_srtdiscipline_omschrijving,
                      grp.ins_discipline_omschrijving,
                      stdm.mld_stdmelding_omschrijving,
                      '' mld_typeopdr_omschrijving
               FROM   mld_kenmerk km,
                      mld_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      ins_srtdiscipline vgt,
                      mld_discipline grp,
                      mld_stdmelding stdm
              WHERE       mld_kenmerk_niveau = 'S'
                      AND grp.ins_srtdiscipline_key = vgt.ins_srtdiscipline_key
                      AND stdm.mld_ins_discipline_key = grp.ins_discipline_key
                      AND km.mld_stdmelding_key = stdm.mld_stdmelding_key
                      AND kms.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vgt.ins_srtdiscipline_verwijder IS NULL
                      AND grp.ins_discipline_verwijder IS NULL
                      AND stdm.mld_stdmelding_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      '' ins_srtdiscipline_omschrijving,
                      '' ins_discipline_omschrijving,
                      '' mld_stdmelding_omschrijving,
                      opd.mld_typeopdr_omschrijving
               FROM   mld_kenmerk km, mld_srtkenmerk kms, fac_kenmerkdomein kmd, fac_usrtab fut, mld_typeopdr opd
              WHERE       mld_kenmerk_niveau = 'O'
                      AND km.mld_typeopdr_key = opd.mld_typeopdr_key
                      AND kms.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key);

CREATE_VIEW(fac_v_exp_flex_cnt, 0)
AS
   SELECT   fac_kenmerkdomein_omschrijving,
            fac_kenmerkdomein_objectnaam,
            fac_kenmerkdomein_kolomnaam,
            fac_kenmerkdomein_kolomtxt,
            fac_usrtab_naam,
            kms.cnt_srtkenmerk_omschrijving srtkenmerk_omschrijving,
            kms.cnt_srtkenmerk_kenmerktype srtkenmerk_kenmerktype,
            kms.cnt_srtkenmerk_systeem srtkenmerk_systeem,
            kms.cnt_srtkenmerk_lengte srtkenmerk_lengte,
            kms.cnt_srtkenmerk_dec srtkenmerk_dec,
            kms.cnt_srtkenmerk_nmin srtkenmerk_nmin,
            kms.cnt_srtkenmerk_nmax srtkenmerk_nmax,
            kms.cnt_srtkenmerk_dimensie srtkenmerk_dimensie,
            NULL kenmerk_type,
            km.cnt_kenmerk_niveau kenmerk_niveau,
            km.cnt_kenmerk_verplicht kenmerk_verplicht,
            km.cnt_kenmerk_groep kenmerk_groep,
            km.cnt_kenmerk_volgnummer kenmerk_volgnummer,
            km.cnt_kenmerk_default kenmerk_default,
            km.cnt_kenmerk_toonbaar kenmerk_toonbaar,
            km.cnt_kenmerk_uniek kenmerk_uniek,
            km.cnt_kenmerk_hint kenmerk_hint,
            km.cnt_kenmerk_regexp kenmerk_regexp,
            TO_CHAR (km.cnt_kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS')
               kenmerk_verwijder,
            cd.ins_discipline_omschrijving fclt_f_contractsoort
     FROM   cnt_kenmerk km,
            cnt_srtkenmerk kms,
            fac_kenmerkdomein kmd,
            fac_usrtab fut,
            cnt_discipline cd
    WHERE       km.cnt_srtkenmerk_key = kms.cnt_srtkenmerk_key
            AND kms.fac_kenmerkdomein_key = kmd.fac_kenmerkdomein_key(+)
            AND kmd.fac_usrtab_key = fut.fac_usrtab_key(+)
            AND km.cnt_srtcontract_key = cd.ins_discipline_key
            AND km.cnt_kenmerk_verwijder IS NULL
            AND kms.cnt_srtkenmerk_verwijder IS NULL
            AND kmd.fac_kenmerkdomein_verwijder IS NULL
            AND cd.ins_discipline_verwijder IS NULL;

-- UWVA#32742:  flexkenmerken transport voor objecten
CREATE_VIEW(fac_v_exp_flex_ins, 0)
AS
   SELECT   fac_kenmerkdomein_omschrijving,
            fac_kenmerkdomein_objectnaam,
            fac_kenmerkdomein_kolomnaam,
            fac_kenmerkdomein_kolomtxt,
            fac_usrtab_naam,
            ins_srtkenmerk_omschrijving srtkenmerk_omschrijving,
            ins_srtkenmerk_kenmerktype srtkenmerk_kenmerktype,
            ins_srtkenmerk_systeem srtkenmerk_systeem,
            ins_srtkenmerk_lengte srtkenmerk_lengte,
            ins_srtkenmerk_dec srtkenmerk_dec,
            ins_srtkenmerk_nmin srtkenmerk_nmin,
            ins_srtkenmerk_nmax srtkenmerk_nmax,
            ins_srtkenmerk_dimensie srtkenmerk_dimensie,
            ins_kenmerk_bewerkniveau kenmerk_type,
            ins_kenmerk_niveau kenmerk_niveau,
            ins_kenmerk_verplicht kenmerk_verplicht,
            ins_kenmerk_groep kenmerk_groep,
            ins_kenmerk_volgnummer kenmerk_volgnummer,
            ins_kenmerk_default kenmerk_default,
            ins_kenmerk_toonbaar kenmerk_toonbaar,
            ins_kenmerk_uniek kenmerk_uniek,
            ins_kenmerk_hint kenmerk_hint,
            ins_kenmerk_regexp kenmerk_regexp,
            TO_CHAR (ins_kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS') kenmerk_verwijder,
            ins_discipline_omschrijving fclt_f_discipline,
            ins_srtgroep_omschrijving fclt_f_groep,
            ins_srtdeel_omschrijving fclt_f_objectsoort
     FROM   (SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vak.ins_discipline_omschrijving,
                      NULL ins_srtgroep_omschrijving,
                      NULL ins_srtdeel_omschrijving
               FROM   ins_kenmerk km, ins_srtkenmerk kms, fac_kenmerkdomein kmd, fac_usrtab fut, ins_discipline vak
              WHERE       ins_kenmerk_niveau = 'D'
                      AND km.ins_srtinstallatie_key = vak.ins_discipline_key
                      AND kms.ins_srtkenmerk_key = km.ins_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vak.ins_discipline_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vak.ins_discipline_omschrijving,
                      grp.ins_srtgroep_omschrijving,
                      NULL ins_srtdeel_omschrijving
               FROM   ins_kenmerk km,
                      ins_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      ins_discipline vak,
                      ins_srtgroep grp
              WHERE       ins_kenmerk_niveau = 'G'
                      AND grp.ins_discipline_key = vak.ins_discipline_key
                      AND km.ins_srtinstallatie_key = grp.ins_srtgroep_key
                      AND kms.ins_srtkenmerk_key = km.ins_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vak.ins_discipline_verwijder IS NULL
                      AND grp.ins_srtgroep_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      vak.ins_discipline_omschrijving,
                      grp.ins_srtgroep_omschrijving,
                      sd.ins_srtdeel_omschrijving
               FROM   ins_kenmerk km,
                      ins_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      ins_discipline vak,
                      ins_srtgroep grp,
                      ins_srtdeel sd
              WHERE       ins_kenmerk_niveau = 'S'
                      AND grp.ins_discipline_key = vak.ins_discipline_key
                      AND sd.ins_srtgroep_key = grp.ins_srtgroep_key
                      AND km.ins_srtinstallatie_key = sd.ins_srtdeel_key
                      AND kms.ins_srtkenmerk_key = km.ins_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND vak.ins_discipline_verwijder IS NULL
                      AND grp.ins_srtgroep_verwijder IS NULL
                      AND sd.ins_srtdeel_verwijder IS NULL
             UNION
             SELECT   kmd.*,
                      kms.*,
                      km.*,
                      fut.fac_usrtab_naam,
                      (SELECT loc.fac_locale_xsl_tekst FROM fac_version v, fac_locale_xsl loc
                      				WHERE COALESCE(v.fac_version_lang, 'NL') = LOC.FAC_LOCALE_XSL_LANG
                      				AND LOC.FAC_LOCALE_XSL_LABEL = 'lcl_ins_inspectie'
                      )
                      || ' - ' ||
                      (SELECT loc.fac_locale_xsl_tekst FROM fac_version v, fac_locale_xsl loc
                      				WHERE COALESCE(v.fac_version_lang, 'NL') = LOC.FAC_LOCALE_XSL_LANG
                      				AND LOC.FAC_LOCALE_XSL_LABEL = DECODE(ctr_disc_params_controle_type, 1, 'lcl_ins_srtcontrole_insp', 2, 'lcl_ins_srtcontrole_repl', 3, 'lcl_ins_srtcontrole_cert' , '?')
                      ) ins_discipline_omschrijving,
                      sc.ins_srtcontrole_omschrijving ins_srtgroep_omschrijving,
                      TO_CHAR(cdp.ctr_disc_params_controle_type) ins_srtdeel_omschrijving
               FROM   ins_kenmerk km,
                      ins_srtkenmerk kms,
                      fac_kenmerkdomein kmd,
                      fac_usrtab fut,
                      ins_srtcontrole sc,
                      ctr_disc_params cdp
              WHERE       ins_kenmerk_niveau = 'C'
                      AND km.ins_srtinstallatie_key = sc.ins_srtcontrole_key
                      AND kms.ins_srtkenmerk_key = km.ins_srtkenmerk_key
                      AND kmd.fac_kenmerkdomein_key(+) = kms.fac_kenmerkdomein_key
                      AND fut.fac_usrtab_key(+) = kmd.fac_usrtab_key
                      AND sc.ctr_discipline_key = cdp.ctr_ins_discipline_key);


-- Rapporten worden niet standaard aangemaakt bij gebruikerrs
CREATE_VIEW(fac_v_rap_lcl_lang, 0) AS
   SELECT nl.fac_locale_xsl_label fclt_f_label,
          nl.fac_locale_xsl_module module,
          nl.fac_locale_xsl_lang fclt_f_language1,
          nl.fac_locale_xsl_tekst translation1,
          en.fac_locale_xsl_lang fclt_f_language2,
          en.fac_locale_xsl_tekst translation2,
          de.fac_locale_xsl_lang fclt_f_language3,
          de.fac_locale_xsl_tekst translation3,
          fr.fac_locale_xsl_lang fclt_f_language4,
          fr.fac_locale_xsl_tekst translation4
     FROM fac_locale_xsl nl,
          fac_locale_xsl en,
          fac_locale_xsl de,
          fac_locale_xsl fr
    WHERE     nl.fac_locale_xsl_lang = 'NL'
          AND en.fac_locale_xsl_lang = 'EN'
          AND de.fac_locale_xsl_lang = 'DE'
          AND fr.fac_locale_xsl_lang = 'FR'
          AND en.fac_locale_xsl_label = nl.fac_locale_xsl_label
          AND de.fac_locale_xsl_label = nl.fac_locale_xsl_label
          AND fr.fac_locale_xsl_label = nl.fac_locale_xsl_label
          AND en.fac_locale_xsl_module = nl.fac_locale_xsl_module
          AND de.fac_locale_xsl_module = nl.fac_locale_xsl_module
          AND fr.fac_locale_xsl_module = nl.fac_locale_xsl_module;

CREATE_VIEW(fac_v_rap_lcl_xref, 0) AS
SELECT fac_locale_xref_filepath FCLT_F_BESTAND,
       fac_locale_xsl_label  FCLT_F_LABEL,
       fac_locale_xsl_tekst  FCLT_F_TEKST,
       fac_locale_xsl_cust OVERRULE,
       fac_locale_xref_client CLIENTSIDE
  FROM fac_locale_xsl xsl, fac_locale_xref xref
 WHERE     xsl.fac_locale_xsl_key = xref.fac_locale_xsl_key
       AND fac_locale_xsl_lang = 'NL'
       AND fac_locale_xsl_module = 'ASP';

-- Standard sample report shows GUI usage (menu, reports, search) stats of last 100 days
CREATE_VIEW(fac_v_rap_gui_usage_last100, 0) AS
     SELECT fac_gui_counter_group fclt_f_action,
            COALESCE (fac_gui_counter_info,
                      fac_menu_altlabel,
                      lcl.l (fac_menuitems_label),
                      fac_usrrap_omschrijving)
               detail,
            COALESCE (r.fac_usrrap_view_name, m.fac_menu_alturl, mi.fac_menuitems_url) techdetail,
            SUM (fac_gui_counter_count) total
       FROM fac_gui_counter c
            LEFT JOIN fac_menu m
               ON c.fac_gui_counter_group = 'menu' AND c.fac_gui_counter_refkey = m.fac_menu_key
            LEFT OUTER JOIN fac_menuitems mi
               ON m.fac_menuitems_key = mi.fac_menuitems_key
            LEFT JOIN fac_usrrap r
               ON c.fac_gui_counter_group = 'report' AND c.fac_gui_counter_refkey = r.fac_usrrap_key
      WHERE fac_gui_counter_group NOT IN ('searchresult', 'searchchoice')
            AND c.fac_gui_counter_date > SYSDATE - 100
   GROUP BY fac_gui_counter_group,
            fac_gui_counter_info,
            fac_menu_altlabel,
            fac_menuitems_label,
            fac_usrrap_omschrijving,
            r.fac_usrrap_view_name,
            m.fac_menu_alturl,
            mi.fac_menuitems_url
     HAVING SUM (fac_gui_counter_count) > 1;

CREATE_VIEW(fac_v_rap_gui_usage_device, 0)
(
   action,
   fclt_f_device,
   total
)
AS
     SELECT COALESCE (fac_gui_counter_info, fac_menu_altlabel, lcl.l (fac_menuitems_label)) detail,
            DECODE (COALESCE (m.fac_menu_altgroep, mi.fac_menuitems_groep), 3, 'Mobile', 'Default')
               device,
            SUM (fac_gui_counter_count) total
       FROM fac_gui_counter c
            LEFT JOIN fac_menu m
               ON c.fac_gui_counter_group = 'menu' AND c.fac_gui_counter_refkey = m.fac_menu_key
            LEFT OUTER JOIN fac_menuitems mi
               ON m.fac_menuitems_key = mi.fac_menuitems_key
      WHERE fac_gui_counter_group IN ('menu') AND c.fac_gui_counter_date > SYSDATE - 100
   GROUP BY fac_gui_counter_group,
            fac_gui_counter_info,
            fac_menu_altlabel,
            fac_menuitems_label,
            m.fac_menu_altgroep,
            mi.fac_menuitems_groep;

CREATE_VIEW(fac_v_rap_language, 0)
(
 label, module, fclt_f_language, translation, fclt_f_undefined
)
AS
   SELECT fac_locale_xsl_label,
          fac_locale_xsl_module,
          fac_locale_xsl_lang,
          fac_locale_xsl_tekst,
          CASE WHEN fac_locale_xsl_isvalid <> 1 THEN 'X' ELSE '' END
     FROM fac_locale_xsl;

CREATE_VIEW(fac_v_rap_auditfail, 0)
AS
   SELECT *
     FROM fac_auditfail;

CREATE_VIEW(fac_v_udr_faq, 1)
AS
SELECT f.fac_faq_key
           kb_key,
       f.fac_faq_question
           vraag,
       f.fac_faq_answer
           antwoord,
       f.fac_faq_datum
           datum,
       f.fac_faq_source
           oorsprong,
       f.fac_faq_url
           url,
       f.fac_faq_lang
           taal,
       DECODE (f.fac_faq_level,
               1, lcl.l ('lcl_faq_level1'),
               2, lcl.l ('lcl_faq_level2'),
               3, lcl.l ('lcl_faq_level3'))
           zichtbaar,
       f.fac_faq_level
           zichtbaar_code,
       (SELECT MIN (
                      CASE
                          WHEN sd.ins_srtdiscipline_prefix IS NULL THEN ''
                          ELSE sd.ins_srtdiscipline_prefix || '-'
                      END
                   || m1.ins_discipline_omschrijving)
          FROM mld_v_aanwezigdiscipline  m1,
               ins_srtdiscipline         sd,
               mld_stdmeldingfaq         mf
         WHERE     m1.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
               AND m1.ins_discipline_key = mf.ins_discipline_key
               AND mf.fac_faq_key = f.fac_faq_key)
           productgroep,
       (SELECT MIN (sm.mld_stdmelding_omschrijving)
          FROM mld_stdmeldingfaq mf, mld_stdmelding sm
         WHERE     mf.mld_stdmelding_key = sm.mld_stdmelding_key(+)
               AND mf.fac_faq_key = f.fac_faq_key)
           subproductgroep,
       fac_faq_hint
           zoekwoorden,
       pf.prs_perslid_naam_full
           invoerder,
       (SELECT MIN (NVL (o.alg_type, 'L'))
          FROM alg_v_allonroerendgoed o, alg_algfaq af
         WHERE     af.alg_onroerendgoed_keys = o.alg_onroerendgoed_keys(+)
               AND af.fac_faq_key = f.fac_faq_key)
           scope,
       (SELECT MIN (
                      l.alg_locatie_code
                   || DECODE (o.alg_plaatsaanduiding,
                              NULL, NULL,
                              '-' || o.alg_plaatsaanduiding))
          FROM alg_v_aanweziglocatie         l,
               alg_v_onroerendgoed_gegevens  o,
               alg_algfaq                    af
         WHERE     af.alg_onroerendgoed_keys = o.alg_onroerendgoed_keys(+)
               AND af.alg_locatie_key = l.alg_locatie_key
               AND af.fac_faq_key = f.fac_faq_key)
           plaats,
       (SELECT COUNT (*)
          FROM mld_stdmeldingfaq mf
         WHERE mf.fac_faq_key = f.fac_faq_key)
           aantalmeldingen,
       (SELECT COUNT (*)
          FROM alg_algfaq af
         WHERE af.fac_faq_key = f.fac_faq_key)
           aantalplaatsen
  FROM fac_faq f, prs_v_perslid_fullnames_all pf
 WHERE f.prs_perslid_key = pf.prs_perslid_key;

CREATE_VIEW(fac_v_udr_faqkenmerk_cnd, 1)
AS
    SELECT f.*,
           lcl.x ('km.faq_kenmerk_omschrijving',
                  km.faq_kenmerk_key,
                  faq_kenmerk_omschrijving)
               kenmerk,
           CASE
               WHEN    km.faq_kenmerk_kenmerktype = 'R'
                    OR km.faq_kenmerk_kenmerktype = 'S'
               THEN
                   flx.getdomeinwaarde (km.fac_kenmerkdomein_key,
                                        kw.faq_kenmerkwaarde_waarde)
               WHEN    km.faq_kenmerk_kenmerktype = 'C'
                    OR km.faq_kenmerk_kenmerktype = 'F'
               THEN
                   kw.faq_kenmerkwaarde_waarde
               ELSE
                   NULL
           END
               waarde_c,
           CASE
               WHEN km.faq_kenmerk_kenmerktype IN ('N', 'B')
               THEN
                   TO_NUMBER (kw.faq_kenmerkwaarde_waarde)
               ELSE
                   TO_NUMBER (NULL)
           END
               waarde_n,
           CASE
               WHEN km.faq_kenmerk_kenmerktype = 'D'
               THEN
                   TO_DATE (kw.faq_kenmerkwaarde_waarde, 'DD-MM-YYYY')
               ELSE
                   TO_DATE (NULL)
           END
               waarde_d
      FROM fac_v_udr_faq f, faq_kenmerkwaarde kw, faq_kenmerk km
     WHERE     kw.fac_faq_key = f.kb_key
           AND kw.faq_kenmerkwaarde_verwijder IS NULL
           AND km.faq_kenmerk_verwijder IS NULL
           AND km.faq_kenmerk_key = f.kb_key(+);

REGISTERRUN('$Id$')
