--
-- $Id$
--
-- Script containing customer specific sql for UWVA (UWV Amsterdam)
-- related to BROC/SCH/FACTUUR.

DEFINE thisfile = 'UWVA_FIN.SQL'
DEFINE dbuser   = '^UWVA'

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

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

/* Formatted on 3-6-2013 20:42:53 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE uwva_imp_writelog (p_import_key   IN NUMBER,
                                               p_severity     IN VARCHAR2,
                                               p_errormsg     IN VARCHAR2,
                                               p_errorhint    IN VARCHAR2)
AS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   fac.imp_writelog (p_import_key,
                     p_severity,
                     p_errormsg,
                     p_errorhint);
   COMMIT;
END;
/

/* Formatted on 8-3-2012 14:30:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_cat_factuur
AS
     SELECT   exportdatum fclt_f_exportdatum,
              leverancier,
              gebouw,
              SUM (bedrag) bedrag
       FROM   (SELECT   exportdatum,
                        SUBSTR (
                           detail.ins_discipline_omschrijving,
                           INSTR (detail.ins_discipline_omschrijving, ' (') + 1
                        )
                           leverancier,
                        DECODE (
                           detail.alg_ruimte_key,
                           NULL,
                           'Onbekend',
                           (SELECT   alg_gebouw_code
                              FROM   alg_gebouw g,
                                     alg_verdieping v,
                                     alg_ruimte r
                             WHERE   detail.alg_ruimte_key = r.alg_ruimte_key
                                     AND r.alg_verdieping_key =
                                           v.alg_verdieping_key
                                     AND v.alg_gebouw_key = g.alg_gebouw_key)
                        )
                           gebouw,
                        bedrag
                 FROM   (  SELECT   exportdatum,
                                    ins_discipline_omschrijving,
                                    alg_ruimte_key,
                                    SUM (bedrag) bedrag
                             FROM   (SELECT   COALESCE(rar1.alg_ruimte_key,rar2.alg_ruimte_key) alg_ruimte_key,
                                              rd.ins_discipline_omschrijving,
                                              rra.res_rsv_artikel_prijs bedrag,
                                              TO_CHAR (res_rsv_artikel_verwerkt,
                                                       'YYYY-MM-DD')
                                                 exportdatum
                                       FROM   res_v_aanwezigrsv_artikel rra,
                                              res_artikel ra,
                                              res_discipline rd,
                                              res_rsv_ruimte rrr,
                                              res_ruimte_opstelling ro,
                                              (  SELECT   res_ruimte_key,
                                                          MAX (alg_ruimte_key)
                                                             alg_ruimte_key
                                                   FROM   res_alg_ruimte
                                                  WHERE   res_alg_ruimte_verwijder IS NULL
                                               GROUP BY   res_ruimte_key) rar1,
                                              (  SELECT   res_ruimte_key,
                                                          MAX (alg_ruimte_key)
                                                             alg_ruimte_key
                                                   FROM   res_alg_ruimte
                                                  WHERE   res_alg_ruimte_verwijder IS NOT NULL
                                               GROUP BY   res_ruimte_key) rar2
                                      WHERE   rra.res_artikel_key =
                                                 ra.res_artikel_key
                                              AND ra.res_discipline_key =
                                                    rd.ins_discipline_key
                                              AND rra.res_rsv_ruimte_key =
                                                    rrr.res_rsv_ruimte_key
                                              AND rrr.res_ruimte_opstel_key =
                                                    ro.res_ruimte_opstel_key
                                              AND ro.res_ruimte_key =
                                                    rar1.res_ruimte_key(+)
                                              AND ro.res_ruimte_key =
                                                    rar2.res_ruimte_key(+)
                                              AND rra.res_rsv_artikel_verwerkt >
                                                    SYSDATE - 365
                                     UNION ALL
                                     SELECT   rrr.alg_ruimte_key,
                                              rd.ins_discipline_omschrijving,
                                              rra.res_rsv_artikel_prijs bedrag,
                                              TO_CHAR (res_rsv_artikel_verwerkt,
                                                       'YYYY-MM-DD')
                                                 exportdatum
                                       FROM   res_rsv_ruimte rrr,
                                              res_v_aanwezigrsv_artikel rra,
                                              res_artikel ra,
                                              res_discipline rd
                                      WHERE   rrr.res_ruimte_opstel_key IS NULL
                                              AND rrr.res_rsv_ruimte_key =
                                                    rra.res_rsv_ruimte_key
                                              AND rra.res_artikel_key =
                                                    ra.res_artikel_key
                                              AND ra.res_discipline_key =
                                                    rd.ins_discipline_key
                                              AND rra.res_rsv_artikel_verwerkt >
                                                    SYSDATE - 365)
                         GROUP BY   exportdatum,
                                    ins_discipline_omschrijving,
                                    alg_ruimte_key) detail)
   GROUP BY   leverancier, gebouw, exportdatum;


-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- Oa. VVO_KORTING + GLASWAS_FREQ vervallen!
-- UWVA#38882/MS2.0: Per 26-02-2017 kavels en fin. gegevens (tarief) vervallen!
CREATE OR REPLACE VIEW UWVA_V_SCH_ACTUAL
(
   REGIO,                                                         -- Was KAVEL
   DISTRICT,
   GEBOUW,
   GEBOUW_KEY,
   VERDIEPING,
   RUIMTE_NR,
   RUIMTESOORT,
   RUIMTEGEBRUIK,
   LEEG,
   RC_TYPE,
   SCH_NIVEAU,
   VVO
)
AS
   SELECT   r.alg_regio_omschrijving,
            d.alg_district_omschrijving,
            g.alg_gebouw_code,
            g.alg_gebouw_key,
            x.alg_verdieping_code,
            x.alg_ruimte_nr,
            x.ruimtesoort,
            x.ruimtegebruik,
            x.leeg,
            x.rc_type,
            x.sch_niveau,   -- NULL voor contract-m2 of ruimtegebruik onbekend
            ROUND (x.vvo, 2)
     FROM      (  SELECT   a.alg_gebouw_key,
                           a.alg_verdieping_code,
                           a.alg_ruimte_nr,
                           b.ruimtesoort,
                           c.ruimtegebruik,
                           d.sch_niveau_key,
                           d.sch_niveau,
                           DECODE (SUBSTR (e.div_kpn, 1, 4), 'LEEG', 1, 0) leeg,
                           'R' rc_type,
                           SUM(a.vvo * COALESCE (e.div_bez, 1) / COALESCE (f.tot_bez, 1)) vvo
                    FROM                  (SELECT   r.alg_ruimte_key,
                                                    r.alg_ruimte_nr,
                                                    v.alg_verdieping_code,
                                                    v.alg_gebouw_key,
                                                    (SELECT   ok.alg_onrgoedkenmerk_waarde
                                                       FROM   alg_onrgoedkenmerk ok
                                                      WHERE   ok.alg_kenmerk_key = 1300 -- R/C/N
                                                              AND ok.alg_onrgoed_niveau = 'G'
                                                              AND ok.alg_onrgoed_key = v.alg_gebouw_key)
                                                       m2_bepaling,
                                                    COALESCE (r.alg_ruimte_opp_alt1, r.alg_ruimte_bruto_vloeropp, 0) vvo
                                             FROM   alg_v_aanwezigruimte r, alg_verdieping v
                                            WHERE   r.alg_verdieping_key = v.alg_verdieping_key) a
                                       LEFT JOIN
                                          (SELECT   r.alg_ruimte_key,
                                                    sr.alg_srtruimte_omschrijving ruimtesoort
                                             FROM   alg_v_aanwezigruimte r, alg_srtruimte sr
                                            WHERE   r.alg_srtruimte_key = sr.alg_srtruimte_key) b
                                       ON a.alg_ruimte_key = b.alg_ruimte_key
                                    LEFT JOIN
                                       (SELECT   ok.alg_onrgoed_key,
                                                 ud.fac_usrdata_key ruimtegebruik_key,
                                                 ud.fac_usrdata_omschr ruimtegebruik,
                                                 ud.fac_usrdata_parentkey sch_niveau_key
                                          FROM   alg_v_aanwezigonrgoedkenmerk ok, fac_usrdata ud
                                         WHERE   ok.alg_kenmerk_key = 1240 -- ruimtegebr.
                                                 AND ok.alg_onrgoed_niveau = 'R'
                                                 AND ok.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) c
                                    ON a.alg_ruimte_key = c.alg_onrgoed_key
                                 LEFT JOIN
                                    (SELECT   ud.fac_usrdata_key sch_niveau_key,
                                              ud.fac_usrdata_omschr sch_niveau
                                       FROM   fac_v_aanwezigusrdata ud
                                      WHERE   ud.fac_usrtab_key = 942) d -- SCH-niveau
                                 ON c.sch_niveau_key = d.sch_niveau_key
                              LEFT JOIN                   -- divisie op ruimte
                                 (SELECT   ra.alg_ruimte_key,
                                           afd.prs_afdeling_naam div_kpn,
                                           ra.prs_ruimteafdeling_bezetting div_bez
                                    FROM   prs_v_aanwezigruimteafdeling ra, prs_v_afdeling_boom ab, prs_afdeling afd
                                   WHERE   ra.prs_afdeling_key = ab.prs_afdeling_key
                                           AND ab.prs_afdeling_key1 = afd.prs_afdeling_key) e
                              ON a.alg_ruimte_key = e.alg_ruimte_key
                           LEFT JOIN                       -- bezettingstotaal
                              (  SELECT   ra.alg_ruimte_key,
                                          SUM (ra.prs_ruimteafdeling_bezetting) tot_bez
                                   FROM   prs_v_aanwezigruimteafdeling ra
                                  WHERE   ra.prs_ruimteafdeling_bezetting > 0
                               GROUP BY   ra.alg_ruimte_key) f
                           ON a.alg_ruimte_key = f.alg_ruimte_key
                   WHERE   m2_bepaling = '3581'                    -- R(uimte)
                           --AND COALESCE (m2_bepaling, '3581') = '3581' -- R(uimte)
                           AND COALESCE (c.ruimtegebruik_key, -1) != 3250 -- NIET: lift
                           AND COALESCE (c.sch_niveau_key, -1) != 7267 -- niet schoonmaken
                GROUP BY   a.alg_gebouw_key,
                           a.alg_verdieping_code,
                           a.alg_ruimte_nr,
                           b.ruimtesoort,
                           c.ruimtegebruik,
                           d.sch_niveau_key,
                           d.sch_niveau,
                           DECODE (SUBSTR (e.div_kpn, 1, 4), 'LEEG', 1, 0),
                           'R'
                UNION ALL   -- alleen de lift op BG moet worden schoongemaakt!
                SELECT   a.alg_gebouw_key,
                         a.alg_verdieping_code,
                         a.alg_ruimte_nr,
                         b.ruimtesoort,
                         c.ruimtegebruik,
                         d.sch_niveau_key,
                         d.sch_niveau,
                         0 leeg,
                         'R' rc_type,
                         a.vvo
                  FROM            (SELECT   r.alg_ruimte_key,
                                            r.alg_ruimte_nr,
                                            v.alg_verdieping_code,
                                            v.alg_gebouw_key,
                                            (SELECT   ok.alg_onrgoedkenmerk_waarde
                                               FROM   alg_onrgoedkenmerk ok
                                              WHERE   ok.alg_kenmerk_key = 1300 -- R/C/N
                                                      AND ok.alg_onrgoed_niveau = 'G'
                                                      AND ok.alg_onrgoed_key = v.alg_gebouw_key)
                                               m2_bepaling,
                                            COALESCE (r.alg_ruimte_opp_alt1, r.alg_ruimte_bruto_vloeropp, 0) vvo
                                     FROM   alg_v_aanwezigruimte r, alg_verdieping v
                                    WHERE   r.alg_srtruimte_key = 307 -- v. verk.
                                            AND r.alg_verdieping_key = v.alg_verdieping_key
                                            AND v.alg_verdieping_code IN ('0', '00', 'BG')) a
                               LEFT JOIN
                                  (SELECT   r.alg_ruimte_key,
                                            sr.alg_srtruimte_omschrijving ruimtesoort
                                     FROM   alg_v_aanwezigruimte r, alg_srtruimte sr
                                    WHERE   r.alg_srtruimte_key = sr.alg_srtruimte_key) b
                               ON a.alg_ruimte_key = b.alg_ruimte_key
                            LEFT JOIN
                               (SELECT   ok.alg_onrgoed_key,
                                         ud.fac_usrdata_key ruimtegebruik_key,
                                         ud.fac_usrdata_omschr ruimtegebruik,
                                         ud.fac_usrdata_parentkey sch_niveau_key
                                  FROM   alg_v_aanwezigonrgoedkenmerk ok, fac_usrdata ud
                                 WHERE   ok.alg_kenmerk_key = 1240 -- ruimtegebr.
                                         AND ok.alg_onrgoed_niveau = 'R'
                                         AND ok.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) c
                            ON a.alg_ruimte_key = c.alg_onrgoed_key
                         LEFT JOIN
                            (SELECT   ud.fac_usrdata_key sch_niveau_key,
                                      ud.fac_usrdata_omschr sch_niveau
                               FROM   fac_v_aanwezigusrdata ud
                              WHERE   ud.fac_usrtab_key = 942) d -- SCH-niveau
                         ON c.sch_niveau_key = d.sch_niveau_key
                 WHERE   m2_bepaling = '3581'                      -- R(uimte)
                         --AND COALESCE (m2_bepaling, '3581') = '3581' -- R(uimte)
                         AND c.ruimtegebruik_key = 3250           -- WEL: lift
                         AND COALESCE (c.sch_niveau_key, -1) != 7267 -- niet schoonmaken
                UNION ALL -- huurcontract info bij gebouw; soms >1 per gebouw?
                  SELECT   a.alg_gebouw_key,
                           '-' alg_verdieping_code,
                           '-' alg_ruimte_nr,
                           NULL ruimtesoort,
                           NULL ruimtegebruik,
                           NULL sch_niveau_key,
                           NULL sch_niveau,
                           0 leeg,
                           'C' rc_type,
                           SUM (b.aantal) opp
                    FROM      (SELECT   cc.cnt_contract_key,
                                        ccp.cnt_alg_plaats_key alg_gebouw_key
                                 FROM   cnt_v_aanwezigcontract cc,
                                        cnt_kenmerkcontract kc,
                                        cnt_contract_plaats ccp,
                                        alg_v_aanwezigonrgoedkenmerk ok
                                WHERE   cc.ins_discipline_key = 198 -- hr.cnt.
                                        AND cc.cnt_contract_key = kc.cnt_contract_key
                                        AND kc.cnt_kenmerk_key = 184 -- actief
                                        AND kc.cnt_kenmerkcontract_waarde = '1221'
                                        AND cc.cnt_contract_key = ccp.cnt_contract_key
                                        AND ccp.cnt_alg_plaats_code = 'G'
                                        AND ccp.cnt_contract_plaats_verwijder IS NULL
                                        AND ccp.cnt_alg_plaats_key = ok.alg_onrgoed_key
                                        AND ok.alg_kenmerk_key = 1300 -- R/C/N
                                        AND ok.alg_onrgoedkenmerk_waarde = '3582') a -- C(ontract)
                           LEFT JOIN
                              (  SELECT   regels.cntkey,
                                          SUM (regels.aantal) aantal
                                   FROM   (SELECT   cr1.cnt_contract_key cntkey,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr1.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 202)
                                                       aantal,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr1.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 201)
                                                       rubriek
                                             FROM   cnt_contract cr1
                                            WHERE   cr1.ins_discipline_key = 198
                                           UNION ALL
                                           SELECT   cr2.cnt_contract_key cntkey,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr2.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 261)
                                                       aantal,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr2.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 241)
                                                       rubriek
                                             FROM   cnt_contract cr2
                                            WHERE   cr2.ins_discipline_key = 198
                                           UNION ALL
                                           SELECT   cr3.cnt_contract_key cntkey,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr3.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 321)
                                                       aantal,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr3.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 302)
                                                       rubriek
                                             FROM   cnt_contract cr3
                                            WHERE   cr3.ins_discipline_key = 198
                                           UNION ALL
                                           SELECT   cr4.cnt_contract_key cntkey,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr4.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 395)
                                                       aantal,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr4.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 394)
                                                       rubriek
                                             FROM   cnt_contract cr4
                                            WHERE   cr4.ins_discipline_key = 198
                                           UNION ALL
                                           SELECT   cr5.cnt_contract_key cntkey,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr5.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 399)
                                                       aantal,
                                                    (SELECT   fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
                                                       FROM   cnt_kenmerkcontract kc
                                                      WHERE   kc.cnt_contract_key = cr5.cnt_contract_key
                                                              AND kc.cnt_kenmerk_key = 398)
                                                       rubriek
                                             FROM   cnt_contract cr5
                                            WHERE   cr5.ins_discipline_key = 198) regels
                                  WHERE   regels.rubriek = 2407
                               GROUP BY   regels.cntkey) b
                           ON a.cnt_contract_key = b.cntkey
                GROUP BY   a.alg_gebouw_key,
                           NULL,
                           'Contractmeters',
                           NULL,
                           NULL,
                           NULL,
                           NULL,
                           0,
                           'C') x,
            alg_v_aanweziggebouw g,
            alg_locatie l,
            alg_district d,
            alg_regio r
    WHERE   x.alg_gebouw_key = g.alg_gebouw_key
            AND g.alg_locatie_key = l.alg_locatie_key
            AND l.alg_district_key = d.alg_district_key
            AND d.alg_regio_key = r.alg_regio_key;

-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- UWVA#38882: Per 26-02-2017 van kavel naar regio (en zonder fin. gegevens)!
/* Formatted on 1-2-2017 14:48:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_gebouw
(
   fclt_3d_locatie_key,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_district,                                       -- Was fclt_f_regio!
   fclt_f_gebouw,
   adres,
   fclt_f_plaats,
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
   SELECT b.alg_locatie_key,
          b.regio,                                              -- Was a.kavel
          b.district,                                           -- Was b.regio
          b.alg_gebouw_code,
          COALESCE (c.adres, b.adres) adres,
          COALESCE (c.plaats, b.plaats) plaats,
          a.sch_niveau,
          DECODE (COALESCE (a.tot_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (a.tot_opp, 2)),
          DECODE (COALESCE (a.leeg_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (a.leeg_opp, 2)),
          DECODE (COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0), 2))
     FROM (  SELECT v.gebouw_key, v.sch_niveau,
                    SUM (v.vvo) tot_opp,
                    SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp
               FROM uwva_v_sch_actual v
              WHERE v.leeg IN (0, 1) AND v.ruimte_nr <> '000'
           GROUP BY v.gebouw_key, v.sch_niveau) a
          LEFT JOIN                          -- regio/district info bij gebouw
                    (SELECT g.alg_gebouw_key,
                            g.alg_gebouw_code,
                            l.alg_locatie_key,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats,
                            d.alg_district_omschrijving district,
                            r.alg_regio_omschrijving regio
                       FROM alg_gebouw g, alg_locatie l, alg_district d, alg_regio r
                      WHERE g.alg_locatie_key = l.alg_locatie_key
                            AND l.alg_district_key = d.alg_district_key
                            AND d.alg_regio_key = r.alg_regio_key) b
             ON a.gebouw_key = b.alg_gebouw_key
          LEFT JOIN                                   -- adres info bij gebouw
                    (SELECT g.alg_gebouw_key,
                            a.mld_adres_bezoek_adres adres,
                            a.mld_adres_bezoek_plaats plaats
                       FROM alg_gebouw g, mld_adres a
                      WHERE g.mld_adres_key = a.mld_adres_key
                            AND a.mld_adres_verwijder IS NULL) c
             ON a.gebouw_key = c.alg_gebouw_key;

-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- UWVA#38882: Tot 26-02-2017!
/* Formatted on 20-12-2012 16:32:32 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_gebouwfrozen
(
   fclt_f_kavel,
   fclt_f_datum,
   fclt_f_regio,
   fclt_f_gebouw,
   hide_f_volgorde,
   adres,
   fclt_f_plaats,
   fclt_f_rcgp_code,
   fclt_f_categorie,
   vvo_korting,
   schvvo,
   leegstd_m2,
   schoonmaak_m2,
   huur_uren,
   glaswas_freq,
   halfmaand_bedrag
)
AS
   SELECT   a.kavel,
            TO_CHAR (a.freeze_datum, 'YYYY-MM-DD') datum,
            COALESCE (b.regio, 'Onbekend'),
            a.gebouw,
            '1',
            COALESCE (c.adres, b.adres, 'Onbekend') adres,
            COALESCE (c.plaats, b.plaats, 'Onbekend') plaats,
            a.rc_type,
            a.sch_niveau,
            TO_CHAR (a.vvo_korting) || '%',
            DECODE (COALESCE (a.tot_opp, 0),
                    0, TO_NUMBER (NULL),
                    ROUND (a.tot_opp, 2)),
            DECODE (COALESCE (a.leeg_opp, 0),
                    0, TO_NUMBER (NULL),
                    ROUND (a.leeg_opp, 2)),
            DECODE (
               COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0),
               0,
               TO_NUMBER (NULL),
               ROUND (COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0), 2)
            ),
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            DECODE (
               COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0),
               0,
               TO_NUMBER (NULL),
               ROUND (
                    (a.tot_opp - COALESCE (a.leeg_opp, 0))
                  * a.sch_tarief
                  * (100 - COALESCE (a.vvo_korting, 0))
                  / 2400,
                  2
               )
            )
     FROM         (  SELECT   v.kavel,
                              v.gebouw,
                              v.freeze_datum,
                              v.rc_type,
                              v.sch_niveau,
                              v.vvo_korting,
                              v.sch_tarief,
                              SUM (v.vvo) tot_opp,
                              SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp
                       FROM   uwva_sch_freeze v
                      WHERE   v.leeg IN (0, 1) AND v.ruimte_nr <> '000'
                              AND v.freeze_datum < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                   GROUP BY   v.kavel,
                              v.gebouw,
                              v.freeze_datum,
                              v.rc_type,
                              v.sch_niveau,
                              v.vvo_korting,
                              v.sch_tarief) a
               LEFT JOIN                              -- regio info bij gebouw
                  (SELECT   g.alg_gebouw_code,
                            d.alg_district_omschrijving regio,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats
                     FROM   alg_v_aanweziggebouw g,
                            alg_locatie l,
                            alg_district d
                    WHERE   g.alg_locatie_key = l.alg_locatie_key
                            AND l.alg_district_key = d.alg_district_key) b
               ON a.gebouw = b.alg_gebouw_code
            LEFT JOIN                                 -- adres info bij gebouw
               (SELECT   g.alg_gebouw_code,
                         a.mld_adres_bezoek_adres adres,
                         a.mld_adres_bezoek_plaats plaats
                  FROM   alg_v_aanweziggebouw g, mld_adres a
                 WHERE   g.mld_adres_key = a.mld_adres_key
                         AND a.mld_adres_verwijder IS NULL) c
            ON a.gebouw = c.alg_gebouw_code
   UNION ALL
   SELECT   NULL,
            TO_CHAR (a.freeze_datum, 'YYYY-MM-DD') datum,
            COALESCE (c.regio, 'Onbekend'),
            a.gebouw,
            '2',
            COALESCE (d.adres, c.adres, 'Onbekend') adres,
            COALESCE (d.plaats, c.plaats, 'Onbekend') plaats,
            a.rc_type,
            a.sch_niveau,
            NULL,
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            DECODE (SUBSTR (a.ruimtesoort, 1, 10),
                    'HOOGWERKER', TO_NUMBER (NULL),
                    ROUND (COALESCE (a.tot_opp, 0), 2)),
            DECODE (SUBSTR (a.ruimtesoort, 1, 10),
                    'HOOGWERKER', ROUND (COALESCE (a.tot_opp, 0), 2),
                    TO_NUMBER (NULL)),
            a.glaswas_freq,
            DECODE (COALESCE (a.tot_opp, 0),
                    0, TO_NUMBER (NULL),
                    ROUND (a.tot_opp * a.sch_tarief / 24, 2))
     FROM         (  SELECT   v.gebouw,
                              v.freeze_datum,
                              v.ruimtesoort,
                              v.rc_type,
                              v.sch_niveau,
                              v.sch_tarief,
                              v.glaswas_freq,
                              SUM (v.vvo) tot_opp
                       FROM   uwva_sch_freeze v
                      WHERE   v.rc_type = 'G'
                   GROUP BY   v.gebouw,
                              v.freeze_datum,
                              v.ruimtesoort,
                              v.rc_type,
                              v.sch_niveau,
                              v.sch_tarief,
                              v.glaswas_freq) a
               LEFT JOIN                              -- regio info bij gebouw
                  (SELECT   g.alg_gebouw_code,
                            d.alg_district_omschrijving regio,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats
                     FROM   alg_v_aanweziggebouw g,
                            alg_locatie l,
                            alg_district d
                    WHERE   g.alg_locatie_key = l.alg_locatie_key
                            AND l.alg_district_key = d.alg_district_key) c
               ON a.gebouw = c.alg_gebouw_code
            LEFT JOIN                                 -- adres info bij gebouw
               (SELECT   g.alg_gebouw_code,
                         a.mld_adres_bezoek_adres adres,
                         a.mld_adres_bezoek_plaats plaats
                  FROM   alg_v_aanweziggebouw g, mld_adres a
                 WHERE   g.mld_adres_key = a.mld_adres_key
                         AND a.mld_adres_verwijder IS NULL) d
            ON a.gebouw = d.alg_gebouw_code
   UNION ALL
   SELECT   NULL,
            TO_CHAR (a.freeze_datum, 'YYYY-MM-DD') datum,
            COALESCE (c.regio, 'Onbekend'),
            a.gebouw,
            '3',
            COALESCE (d.adres, c.adres, 'Onbekend') adres,
            COALESCE (d.plaats, c.plaats, 'Onbekend') plaats,
            a.rc_type,
            a.sch_niveau,
            NULL,
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            TO_NUMBER (NULL),
            ROUND (COALESCE (a.sch_tarief, 0) / 24, 2)
     FROM         (SELECT   v.gebouw,
                            v.freeze_datum,
                            v.rc_type,
                            v.sch_niveau,
                            v.sch_tarief
                     FROM   uwva_sch_freeze v
                    WHERE   v.rc_type = 'P') a
               LEFT JOIN                              -- regio info bij gebouw
                  (SELECT   g.alg_gebouw_code,
                            d.alg_district_omschrijving regio,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats
                     FROM   alg_v_aanweziggebouw g,
                            alg_locatie l,
                            alg_district d
                    WHERE   g.alg_locatie_key = l.alg_locatie_key
                            AND l.alg_district_key = d.alg_district_key) c
               ON a.gebouw = c.alg_gebouw_code
            LEFT JOIN                                 -- adres info bij gebouw
               (SELECT   g.alg_gebouw_code,
                         a.mld_adres_bezoek_adres adres,
                         a.mld_adres_bezoek_plaats plaats
                  FROM   alg_v_aanweziggebouw g, mld_adres a
                 WHERE   g.mld_adres_key = a.mld_adres_key
                         AND a.mld_adres_verwijder IS NULL) d
            ON a.gebouw = d.alg_gebouw_code;

-- UWVA#38882: Per 26-02-2017!
/* Formatted on 1-2-2017 15:28:32 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_gebfrozen_ms20
(
   fclt_3d_locatie_key,
   fclt_f_datum,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_district,                                       -- Was fclt_f_regio!
   fclt_f_gebouw,
   adres,
   fclt_f_plaats,
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
   SELECT b.alg_locatie_key,
          TO_CHAR (a.freeze_datum, 'YYYY-MM-DD') datum,
          a.kavel,
          COALESCE (a.district, 'Onbekend'),
          a.gebouw,
          COALESCE (c.adres, b.adres, 'Onbekend') adres,
          COALESCE (c.plaats, b.plaats, 'Onbekend') plaats,
          a.sch_niveau,
          DECODE (COALESCE (a.tot_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (a.tot_opp, 2)),
          DECODE (COALESCE (a.leeg_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (a.leeg_opp, 2)),
          DECODE (COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0),
                  0, TO_NUMBER (NULL),
                  ROUND (COALESCE (a.tot_opp, 0) - COALESCE (a.leeg_opp, 0), 2))
     FROM (  SELECT v.freeze_datum, v.kavel, v.district, v.gebouw, v.sch_niveau,
                    SUM (v.vvo) tot_opp,
                    SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp
               FROM uwva_sch_freeze v
              WHERE v.leeg IN (0, 1)
                    AND v.ruimte_nr <> '000'
                    AND v.freeze_datum > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
           GROUP BY v.freeze_datum, v.kavel, v.district, v.gebouw, v.sch_niveau) a
          LEFT JOIN                          -- regio/district info bij gebouw
                    (SELECT g.alg_gebouw_code,
                            l.alg_locatie_key,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats
                       FROM alg_v_aanweziggebouw g, alg_locatie l
                      WHERE g.alg_locatie_key = l.alg_locatie_key) b
             ON a.gebouw = b.alg_gebouw_code
          LEFT JOIN                                   -- adres info bij gebouw
                    (SELECT g.alg_gebouw_code,
                            a.mld_adres_bezoek_adres adres,
                            a.mld_adres_bezoek_plaats plaats
                       FROM alg_v_aanweziggebouw g, mld_adres a
                      WHERE g.mld_adres_key = a.mld_adres_key
                            AND a.mld_adres_verwijder IS NULL) c
             ON a.gebouw = c.alg_gebouw_code;

-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- UWVA#38882: Tot 26-02-2017!
/* Formatted on 11-12-2012 9:50:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_gebgebrfrozen
(
   fclt_f_datum,
   fclt_f_kavel,
   fclt_f_gebouw,
   fclt_f_ruimtesoort,
   fclt_f_ruimtegebruik,
   fclt_f_categorie,
   vvo_korting,
   m2_jaartarief,
   m2_halfmaandtarief,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
   (  SELECT   TO_CHAR (x.freeze_datum, 'YYYY-MM-DD') datum,
               x.kavel,
               x.gebouw,
               x.ruimtesoort,
               x.ruimtegebruik,
               x.sch_niveau,
               TO_CHAR (x.vvo_korting) || '%',
               REPLACE (TO_CHAR (x.sch_tarief, '999990D99'), '.', ','),
               REPLACE (TO_CHAR (x.sch_tarief / 24, '999990D99'), '.', ','),
               DECODE (SUM (x.tot_opp),
                       0, TO_NUMBER (NULL),
                       ROUND (SUM (x.tot_opp), 2)),
               DECODE (SUM (x.leeg_opp),
                       0, TO_NUMBER (NULL),
                       ROUND (SUM (x.leeg_opp), 2)),
               DECODE (SUM (x.tot_opp - x.leeg_opp),
                       0, TO_NUMBER (NULL),
                       ROUND (SUM (x.tot_opp - x.leeg_opp), 2))
        FROM   (  SELECT   v.kavel,
                           v.gebouw,
                           v.freeze_datum,
                           v.ruimtesoort,
                           v.ruimtegebruik,
                           v.sch_niveau,
                           v.vvo_korting,
                           v.sch_tarief,
                           SUM (v.vvo) tot_opp,
                           SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp
                    FROM   uwva_sch_freeze v
                   WHERE   v.leeg IN (0, 1) AND v.ruimte_nr <> '000'
                           AND v.freeze_datum < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                GROUP BY   v.kavel,
                           v.gebouw,
                           v.freeze_datum,
                           v.ruimtesoort,
                           v.ruimtegebruik,
                           v.sch_niveau,
                           v.vvo_korting,
                           v.sch_tarief) x
    GROUP BY   x.freeze_datum,
               x.kavel,
               x.gebouw,
               x.ruimtesoort,
               x.ruimtegebruik,
               x.sch_niveau,
               TO_CHAR (x.vvo_korting) || '%',
               x.sch_tarief);

-- UWVA#38882: Per 26-02-2017!
/* Formatted on 1-2-2017 15:58:02 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_gebgfrozen_ms20
(
   fclt_3d_locatie_key,
   fclt_f_datum,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_gebouw,
   fclt_f_ruimtesoort,
   fclt_f_ruimtegebruik,
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
   SELECT x.alg_locatie_key,
          TO_CHAR (x.freeze_datum, 'YYYY-MM-DD') datum,
          x.kavel,
          x.gebouw,
          x.ruimtesoort,
          x.ruimtegebruik,
          x.sch_niveau,
          DECODE (x.tot_opp, 0, TO_NUMBER (NULL), ROUND (x.tot_opp, 2)),
          DECODE (x.leeg_opp, 0, TO_NUMBER (NULL), ROUND (x.leeg_opp, 2)),
          DECODE (x.tot_opp - x.leeg_opp, 0, TO_NUMBER (NULL), ROUND (x.tot_opp - x.leeg_opp, 2))
     FROM (  SELECT g.alg_locatie_key, v.freeze_datum, v.kavel, v.gebouw, v.ruimtesoort, v.ruimtegebruik, v.sch_niveau,
                    SUM (v.vvo) tot_opp,
                    SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp
               FROM uwva_sch_freeze v, alg_v_aanweziggebouw g
              WHERE v.leeg IN (0, 1)
                    AND v.ruimte_nr <> '000'
                    AND v.gebouw = g.alg_gebouw_code(+)
                    AND v.freeze_datum > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
           GROUP BY g.alg_locatie_key, v.freeze_datum, v.kavel, v.gebouw, v.ruimtesoort, v.ruimtegebruik, v.sch_niveau) x;

-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- UWVA#38882: Per 26-02-2017 van kavel naar regio (en zonder fin. gegevens) en per UWVA106 aggregatie op regio-niveau!
/* Formatted on 1-2-2017 16:18:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_foto
(
   fclt_3d_regio_key,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
     SELECT d.alg_regio_key, v.regio, v.sch_niveau,
            ROUND (SUM (v.vvo), 2) tot_opp,
            ROUND (SUM (DECODE (v.leeg, 1, v.vvo, 0)), 2) leeg_opp,
            ROUND (SUM (DECODE (v.leeg, 0, v.vvo, 0)), 2) sch_opp
       FROM uwva_v_sch_actual v, alg_gebouw g, alg_locatie l, alg_district d
      WHERE v.leeg IN (0, 1)
            AND v.ruimte_nr <> '000'
            AND v.gebouw_key = g.alg_gebouw_key
            AND g.alg_locatie_key = l.alg_locatie_key
            AND l.alg_district_key = d.alg_district_key
   GROUP BY d.alg_regio_key, v.regio, v.sch_niveau;

-- UWVA#24721/Schoonmaak per aanbesteding 2013 (2 kavels).
-- 35319 -> Facilicom
-- 64141 -> Eurest
-- UWVA#38882: Tot 26-02-2017!
/* Formatted on 18-12-2012 12:45:54 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_fotofrozen
(
   fclt_f_datum,
   hide_f_volgorde,
   hide_f_bedrijf_key,
   fclt_f_kavel,
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2,
   halfmaand_bedrag
)
AS
     SELECT   TO_CHAR (x.freeze_datum, 'YYYY-MM-DD') datum,
              '1',
              DECODE (x.kavel, 'Noord', 35319, 64141) bedrijf_key,
              x.kavel,
              x.sch_niveau,
              ROUND (SUM (x.tot_opp), 2),
              ROUND (SUM (x.leeg_opp), 2),
              ROUND (SUM (x.tot_opp) - SUM (x.leeg_opp), 2),
              ROUND (SUM (x.bedrag) / 2400, 2)
       FROM   (  SELECT   v.freeze_datum,
                          v.kavel,
                          v.sch_niveau,
                          v.sch_tarief,
                          SUM (v.vvo) tot_opp,
                          SUM (DECODE (v.leeg, 1, v.vvo, 0)) leeg_opp,
                          SUM(  DECODE (v.leeg, 0, COALESCE (v.vvo, 0), 0)
                              * v.sch_tarief
                              * (100 - COALESCE (v.vvo_korting, 0)))
                             bedrag
                   FROM   uwva_sch_freeze v
                  WHERE   v.leeg IN (0, 1) AND v.ruimte_nr <> '000'
                          AND v.freeze_datum < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
               GROUP BY   v.freeze_datum,
                          v.kavel,
                          v.sch_niveau,
                          v.sch_tarief) x
   GROUP BY   x.freeze_datum,
              DECODE (x.kavel, 'Noord', 35319, 64141),
              x.kavel,
              x.sch_niveau,
              x.sch_tarief
   UNION ALL
     SELECT   TO_CHAR (v.freeze_datum, 'YYYY-MM-DD') datum,
              '2',
              NULL,
              v.kavel,
              'Glasbewassing',
              TO_NUMBER (NULL),
              TO_NUMBER (NULL),
              TO_NUMBER (NULL),
              ROUND (SUM (v.vvo * v.sch_tarief) / 24, 2)
       FROM   uwva_sch_freeze v
      WHERE   v.rc_type = 'G'
   GROUP BY   v.freeze_datum, v.kavel
   UNION ALL
     SELECT   TO_CHAR (v.freeze_datum, 'YYYY-MM-DD') datum,
              '3',
              NULL,
              v.kavel,
              v.sch_niveau,
              TO_NUMBER (NULL),
              TO_NUMBER (NULL),
              TO_NUMBER (NULL),
              ROUND (SUM (v.sch_tarief) / 24, 2)
       FROM   uwva_sch_freeze v
      WHERE   v.rc_type = 'P'
   GROUP BY   v.freeze_datum,
              v.kavel,
              v.sch_niveau,
              v.sch_tarief;

-- UWVA#38882: Per 26-02-2017 en per UWVA106 aggregatie op regio-niveau!
/* Formatted on 1-2-2017 16:30:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_fotofrozen_ms20
(
   fclt_3d_regio_key,
   fclt_f_datum,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_categorie,
   schvvo,
   leegstd_m2,
   schoonmaak_m2
)
AS
     SELECT r.alg_regio_key, TO_CHAR (v.freeze_datum, 'YYYY-MM-DD'), v.kavel, v.sch_niveau,
            ROUND (SUM (v.vvo), 2) tot_opp,
            ROUND (SUM (DECODE (v.leeg, 1, v.vvo, 0)), 2) leeg_opp,
            ROUND (SUM (DECODE (v.leeg, 0, v.vvo, 0)), 2) sch_opp
       FROM uwva_sch_freeze v, alg_v_aanwezigregio r
      WHERE     v.leeg IN (0, 1)
            AND v.ruimte_nr <> '000'
            AND UPPER (v.kavel) = r.alg_regio_upper(+)
            AND v.freeze_datum > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
   GROUP BY r.alg_regio_key, TO_CHAR (v.freeze_datum, 'YYYY-MM-DD'), v.kavel, v.sch_niveau;

/* Formatted on 1-2-2017 16:58:02 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_sch_leegst_delta
(
   fclt_3d_locatie_key,
   fclt_f_regio,                                          -- Was fclt_f_kavel!
   fclt_f_gebouw,
   fclt_f_plaats,
   adres,
   fclt_f_verdieping,
   ruimte_nr,
   fclt_f_ruimtesoort,
   fclt_f_ruimtegebruik,
   fclt_f_mutatievlag,
   m2_vorig,
   m2_nieuw,
   m2_delta
)
AS
   SELECT b.alg_locatie_key,
          b.regio,
          delta.geb,
          COALESCE (c.plaats, b.plaats) plaats,
          COALESCE (c.adres, b.adres) adres,
          delta.ver,
          delta.rui,
          delta.soort,
          delta.gebruik,
          delta.mutatievlag,
          delta.m2_vorig,
          delta.m2_nieuw,
          DECODE (delta.m2_delta, 0, TO_NUMBER (NULL), delta.m2_delta)
     FROM (SELECT DISTINCT z.geb, z.ver, z.rui, z.soort, z.gebruik,
                  DECODE (z.leeg_delta, 0, NULL, 'X') mutatievlag,
                  DECODE (z.leeg_old, 1, TO_NUMBER (NULL), COALESCE (z.m2_old, 0))
                     m2_vorig,
                  DECODE (z.leeg_new, 1, TO_NUMBER (NULL), COALESCE (z.m2_new, 0))
                     m2_nieuw,
                  DECODE (z.leeg_new, 1, 0, COALESCE (z.m2_new, 0)) - DECODE (z.leeg_old, 1, 0, COALESCE (z.m2_old, 0))
                     m2_delta
             FROM (SELECT COALESCE (x.gebouw, y.gebouw) geb,
                          COALESCE (x.verdieping, y.verdieping) ver,
                          COALESCE (x.ruimte_nr, y.ruimte_nr) rui,
                          DECODE (
                             x.ruimtesoort,
                             COALESCE (y.ruimtesoort, x.ruimtesoort), x.ruimtesoort,
                             '***GEWIJZIGD: ' || COALESCE (x.ruimtesoort, ''))
                             soort,
                          DECODE (
                             x.ruimtegebruik,
                             COALESCE (y.ruimtegebruik, x.ruimtegebruik), x.ruimtegebruik,
                             '***GEWIJZIGD: ' || COALESCE (x.ruimtegebruik, ''))
                             gebruik,
                          x.leeg leeg_new,
                          y.leeg leeg_old,
                          DECODE (y.leeg, NULL, 1 - x.leeg, y.leeg - x.leeg) leeg_delta,
                          x.vvo m2_new,
                          y.vvo m2_old,
                          (COALESCE (x.vvo, 0) - COALESCE (y.vvo, 0)) m2_delta,
                          x.freeze_datum fr_new,
                          y.freeze_datum fr_old
                     FROM    (SELECT v.gebouw,
                                     v.verdieping,
                                     v.ruimte_nr,
                                     v.leeg,
                                     v.ruimtesoort,
                                     v.ruimtegebruik,
                                     v.vvo,
                                     v.freeze_datum
                                FROM uwva_sch_freeze v
                               WHERE v.leeg IN (0, 1)
                                     AND v.ruimte_nr <> '000'
                                     AND v.rc_type = 'R'
                                     AND TRUNC (v.freeze_datum) =
                                           (SELECT TRUNC (MAX (w.freeze_datum))
                                              FROM uwva_sch_freeze w)) x
                          LEFT JOIN
                             (SELECT v.gebouw,
                                     v.verdieping,
                                     v.ruimte_nr,
                                     v.leeg,
                                     v.ruimtesoort,
                                     v.ruimtegebruik,
                                     v.vvo,
                                     v.freeze_datum
                                FROM uwva_sch_freeze v
                               WHERE v.leeg IN (0, 1)
                                     AND v.ruimte_nr <> '000'
                                     AND v.rc_type = 'R'
                                     AND TRUNC (v.freeze_datum) =
                                           (SELECT TRUNC (MAX (w.freeze_datum))
                                              FROM uwva_sch_freeze w
                                             WHERE w.freeze_datum <>
                                                      (SELECT MAX(freeze_datum)
                                                         FROM uwva_sch_freeze))) y
                          ON x.gebouw = y.gebouw
                             AND x.verdieping = y.verdieping
                             AND x.ruimte_nr = y.ruimte_nr
                   UNION
                   SELECT COALESCE (x.gebouw, y.gebouw) geb,
                          COALESCE (x.verdieping, y.verdieping) ver,
                          COALESCE (x.ruimte_nr, y.ruimte_nr) rui,
                          DECODE (
                             y.ruimtesoort,
                             COALESCE (x.ruimtesoort, y.ruimtesoort), y.ruimtesoort,
                             '***GEWIJZIGD: ' || COALESCE (x.ruimtesoort, ''))
                             soort,
                          DECODE (
                             y.ruimtegebruik,
                             COALESCE (x.ruimtegebruik, y.ruimtegebruik), y.ruimtegebruik,
                             '***GEWIJZIGD: ' || COALESCE (x.ruimtegebruik, ''))
                             gebruik,
                          x.leeg leeg_new,
                          y.leeg leeg_old,
                          DECODE (x.leeg, NULL, y.leeg - 1, y.leeg - x.leeg) leeg_delta,
                          x.vvo m2_new,
                          y.vvo m2_old,
                          (COALESCE (x.vvo, 0) - COALESCE (y.vvo, 0)) m2_delta,
                          x.freeze_datum fr_new,
                          y.freeze_datum fr_old
                     FROM    (SELECT v.gebouw,
                                     v.verdieping,
                                     v.ruimte_nr,
                                     v.leeg,
                                     v.ruimtesoort,
                                     v.ruimtegebruik,
                                     v.vvo,
                                     v.freeze_datum
                                FROM uwva_sch_freeze v
                               WHERE v.leeg IN (0, 1)
                                     AND v.ruimte_nr <> '000'
                                     AND v.rc_type = 'R'
                                     AND TRUNC (v.freeze_datum) =
                                           (SELECT TRUNC (MAX (w.freeze_datum))
                                              FROM uwva_sch_freeze w)) x
                          RIGHT JOIN
                             (SELECT v.gebouw,
                                     v.verdieping,
                                     v.ruimte_nr,
                                     v.leeg,
                                     v.ruimtesoort,
                                     v.ruimtegebruik,
                                     v.vvo,
                                     v.freeze_datum
                                FROM uwva_sch_freeze v
                               WHERE v.leeg IN (0, 1)
                                     AND v.ruimte_nr <> '000'
                                     AND v.rc_type = 'R'
                                     AND TRUNC (v.freeze_datum) =
                                           (SELECT TRUNC (MAX (w.freeze_datum))
                                              FROM uwva_sch_freeze w
                                             WHERE w.freeze_datum <>
                                                      (SELECT MAX(freeze_datum)
                                                         FROM uwva_sch_freeze))) y
                          ON x.gebouw = y.gebouw
                             AND x.verdieping = y.verdieping
                             AND x.ruimte_nr = y.ruimte_nr) z
            WHERE z.leeg_new = 1 OR z.leeg_old = 1) delta
          LEFT JOIN                          -- regio/district info bij gebouw
                    (SELECT g.alg_gebouw_upper,
                            l.alg_locatie_key,
                            l.alg_locatie_adres adres,
                            l.alg_locatie_plaats plaats,
                            d.alg_district_omschrijving district,
                            r.alg_regio_omschrijving regio
                       FROM alg_v_aanweziggebouw g, alg_locatie l, alg_district d, alg_regio r
                      WHERE g.alg_locatie_key = l.alg_locatie_key
                            AND l.alg_district_key = d.alg_district_key
                            AND d.alg_regio_key = r.alg_regio_key) b
             ON UPPER (delta.geb) = b.alg_gebouw_upper
          LEFT JOIN                                   -- adres info bij gebouw
                    (SELECT g.alg_gebouw_upper,
                            a.mld_adres_bezoek_adres adres,
                            a.mld_adres_bezoek_plaats plaats
                       FROM alg_v_aanweziggebouw g, mld_adres a
                      WHERE g.mld_adres_key = a.mld_adres_key
                            AND a.mld_adres_verwijder IS NULL) c
             ON UPPER (delta.geb) = c.alg_gebouw_upper;

---- EXPORT
-- UWVA#22192/UWVA67
-- Alle afdelingskostenplaatsen (ooit) met daarbij of die nog ACTIEF is en, indien
-- INACTIEF, dan de eerste bovenliggende afdelingskostenplaats die wel ACTIEF is (als
-- die bestaat)!
/* Formatted on 20-4-2012 15:44:44 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_actkpn_per_afdkpn
(
   allkpn_key,
   allkpn_upp,
   allkpn_oms,
   actkpn_key,
   actkpn_upp,
   actkpn_oms,
   actief
)
AS
   SELECT   kp.prs_kostenplaats_key curkpn_key,
            kp.prs_kostenplaats_upper curkpn_upp,
            kp.prs_kostenplaats_omschrijving curkpn_oms,
            kp.prs_kostenplaats_key actkpn_key,
            kp.prs_kostenplaats_upper actkpn_upp,
            kp.prs_kostenplaats_omschrijving actkpn_oms,
            'Ja'
     FROM   prs_v_aanwezigkostenplaats kp
    WHERE   kp.prs_kostenplaats_module = 'PRS'
            AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
            AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                 OR kp.prs_kostenplaats_eind IS NULL)
   UNION ALL
   SELECT   x.oldkpn_key,
            x.oldkpn_upp,
            x.oldkpn_oms,
            COALESCE (y1.kpn_key,
                      y2.kpn_key,
                      y3.kpn_key,
                      y4.kpn_key)
               actkpn_key,
            COALESCE (y1.prs_kostenplaats_upper,
                      y2.prs_kostenplaats_upper,
                      y3.prs_kostenplaats_upper,
                      y4.prs_kostenplaats_upper)
               actkpn_upp,
            COALESCE (y1.prs_kostenplaats_omschrijving,
                      y2.prs_kostenplaats_omschrijving,
                      y3.prs_kostenplaats_omschrijving,
                      y4.prs_kostenplaats_omschrijving)
               actkpn_oms,
            'Nee'
     FROM               (  SELECT   kp.prs_kostenplaats_key oldkpn_key,
                                    kp.prs_kostenplaats_upper oldkpn_upp,
                                    kp.prs_kostenplaats_omschrijving oldkpn_oms,
                                    MAX (a.prs_afdeling_key) afd_key, -- laatst aangemaakt
                                    COUNT ( * ) afd_aant
                             FROM   prs_kostenplaats kp,
                                    (SELECT   prs_afdeling_key,
                                              prs_kostenplaats_key
                                       FROM   prs_afdeling a1
                                      WHERE   a1.prs_afdeling_verwijder IS NULL -- alle aanwezige afdelingen
                                              OR (a1.prs_afdeling_verwijder IS NOT NULL -- alle verwijderde afdelingen
                                                  AND NOT EXISTS -- en geen aanwezige afdeling met zelfde kostenplaats
                                                        (SELECT   1
                                                           FROM   prs_afdeling a2
                                                          WHERE   a2.prs_afdeling_key <>
                                                                     a1.prs_afdeling_key
                                                                  AND a2.prs_kostenplaats_key =
                                                                        a1.prs_kostenplaats_key)))
                                    a
                            WHERE   kp.prs_kostenplaats_module = 'PRS'
                                    AND (kp.prs_kostenplaats_omschrijving LIKE
                                            'INACTIEF%'
                                         OR kp.prs_kostenplaats_eind <=
                                              TRUNC (SYSDATE)
                                         OR kp.prs_kostenplaats_verwijder IS NOT NULL)
                                    AND kp.prs_kostenplaats_key =
                                          a.prs_kostenplaats_key(+)
                         GROUP BY   kp.prs_kostenplaats_key,
                                    kp.prs_kostenplaats_upper,
                                    kp.prs_kostenplaats_omschrijving) x
                     LEFT JOIN
                        (SELECT   a.prs_afdeling_key afd_key,
                                  kp.prs_kostenplaats_key kpn_key,
                                  kp.prs_kostenplaats_upper,
                                  kp.prs_kostenplaats_omschrijving
                           FROM   prs_afdeling a,
                                  prs_afdeling ap,
                                  prs_v_aanwezigkostenplaats kp
                          WHERE   a.prs_afdeling_parentkey =
                                     ap.prs_afdeling_key
                                  AND ap.prs_kostenplaats_key =
                                        kp.prs_kostenplaats_key
                                  AND kp.prs_kostenplaats_module = 'PRS'
                                  AND kp.prs_kostenplaats_omschrijving NOT LIKE
                                        'INACTIEF%'
                                  AND (kp.prs_kostenplaats_eind >
                                          TRUNC (SYSDATE)
                                       OR kp.prs_kostenplaats_eind IS NULL))
                        y1
                     ON x.afd_key = y1.afd_key
                  LEFT JOIN
                     (SELECT   a.prs_afdeling_key afd_key,
                               kp.prs_kostenplaats_key kpn_key,
                               kp.prs_kostenplaats_upper,
                               kp.prs_kostenplaats_omschrijving
                        FROM   prs_afdeling a,
                               prs_afdeling ap,
                               prs_afdeling app,
                               prs_v_aanwezigkostenplaats kp
                       WHERE   a.prs_afdeling_parentkey = ap.prs_afdeling_key
                               AND ap.prs_afdeling_parentkey =
                                     app.prs_afdeling_key
                               AND app.prs_kostenplaats_key =
                                     kp.prs_kostenplaats_key
                               AND kp.prs_kostenplaats_module = 'PRS'
                               AND kp.prs_kostenplaats_omschrijving NOT LIKE
                                     'INACTIEF%'
                               AND (kp.prs_kostenplaats_eind >
                                       TRUNC (SYSDATE)
                                    OR kp.prs_kostenplaats_eind IS NULL)) y2
                  ON x.afd_key = y2.afd_key
               LEFT JOIN
                  (SELECT   a.prs_afdeling_key afd_key,
                            kp.prs_kostenplaats_key kpn_key,
                            kp.prs_kostenplaats_upper,
                            kp.prs_kostenplaats_omschrijving
                     FROM   prs_afdeling a,
                            prs_afdeling ap,
                            prs_afdeling app,
                            prs_afdeling appp,
                            prs_v_aanwezigkostenplaats kp
                    WHERE   a.prs_afdeling_parentkey = ap.prs_afdeling_key
                            AND ap.prs_afdeling_parentkey =
                                  app.prs_afdeling_key
                            AND app.prs_afdeling_parentkey =
                                  appp.prs_afdeling_key
                            AND appp.prs_kostenplaats_key =
                                  kp.prs_kostenplaats_key
                            AND kp.prs_kostenplaats_module = 'PRS'
                            AND kp.prs_kostenplaats_omschrijving NOT LIKE
                                  'INACTIEF%'
                            AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                                 OR kp.prs_kostenplaats_eind IS NULL)) y3
               ON x.afd_key = y3.afd_key
            LEFT JOIN
               (SELECT   a.prs_afdeling_key afd_key,
                         kp.prs_kostenplaats_key kpn_key,
                         kp.prs_kostenplaats_upper,
                         kp.prs_kostenplaats_omschrijving
                  FROM   prs_afdeling a,
                         prs_afdeling ap,
                         prs_afdeling app,
                         prs_afdeling appp,
                         prs_afdeling apppp,
                         prs_v_aanwezigkostenplaats kp
                 WHERE   a.prs_afdeling_parentkey = ap.prs_afdeling_key
                         AND ap.prs_afdeling_parentkey = app.prs_afdeling_key
                         AND app.prs_afdeling_parentkey =
                               appp.prs_afdeling_key
                         AND appp.prs_afdeling_parentkey =
                               apppp.prs_afdeling_key
                         AND apppp.prs_kostenplaats_key =
                               kp.prs_kostenplaats_key
                         AND kp.prs_kostenplaats_module = 'PRS'
                         AND kp.prs_kostenplaats_omschrijving NOT LIKE
                               'INACTIEF%'
                         AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                              OR kp.prs_kostenplaats_eind IS NULL)) y4
            ON x.afd_key = y4.afd_key;

-- View gebruikt in BROC-export en HV-export om voor alle kostenplaatsen de journaalgegevens te
-- bepalen.
-- LET OP: Dit gebeurt -helaas- op basis van de KPN_PRJ-importtabel, omdat elke PRJ-kostenplaats
--         in deze tabel (de meeste PRJ-kostenplaatsen lopen binnen via de KPN-importtabel) bij
--         het genereren van een journaalbestand op speciale wijze moeten worden gelinkt aan een
--         andere PRJ-kostenplaats en deze relatie bestaat alleen in het KPN_PRJ-importbestand.
--         Verder komen PRJ-kostenplaatsen soms voor in zowel het KPN- als KPN_PRJ-bestand. Bij
--         import geldt dat KPN_PRJ dominant is over KPN (UWVA#18127)!
-- Per closing-the-loop (UWVA53) geen verschil meer tussen actieve en inactieve kostenplaatsen;
-- "tooling/ondersteuning rond journaallader weet dat preciezer dan Facilitor" (quote MvE).
-- Toch alleen aanwezige actieve kostenplaatsen, want bovenstaande pas in journaallader oplossen
-- "zou stap terug zijn" (quote PF/EdV).
-- Per UWVA#22192 (UWVA67) wordt igv. INACTIEVE kostenplaatsen omhoog gezocht in de organisatie-
-- boom naar de eerste ACTIEVE kostenplaats en wordt deze -dan maar- gebruikt! Dat op deze wijze
-- geen enkele ACTIEVE kostenplaats wordt gevonden is beoordeeld als "hypothetisch geval"!
/* Formatted on 25-4-2012 11:55:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_afd_plus_prj_kpn
(
   kostenplaats_key,
   kostenplaats,
   afd_kostenplaats,
   afd_omschrijving,
   prj_kostenplaats,
   prj_omschrijving
)
AS
   WITH afdkpn AS (SELECT * FROM uwva_v_actkpn_per_afdkpn)
   SELECT   kp.allkpn_key kostenplaats_key,
            kp.allkpn_upp kostenplaats,
            kp.actkpn_upp afd_kostenplaats,
            kp.actkpn_oms afd_omschrijving,
            NULL prj_kostenplaats,
            NULL prj_omschrijving
     FROM   afdkpn kp                      -- Alleen PRS-kpn
    WHERE   kp.actkpn_key IS NOT NULL
            AND NOT EXISTS
                  (SELECT   1
                     FROM   uwva_imp_kpn_prj prj
                    WHERE   prj.status = 'A' AND prj.project = kp.actkpn_upp)
   UNION ALL
   SELECT   kp.prs_kostenplaats_key kostenplaats_key,
            kp.prs_kostenplaats_upper kostenplaats,
            kp.prs_kostenplaats_upper afd_kostenplaats,
            kp.prs_kostenplaats_omschrijving afd_omschrijving,
            NULL prj_kostenplaats,
            NULL prj_omschrijving
     FROM   prs_v_aanwezigkostenplaats kp
    WHERE   kp.prs_kostenplaats_module = 'ALG'               -- Alleen ALG-kpn
            AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
            AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                 OR kp.prs_kostenplaats_eind IS NULL)
   UNION ALL
   SELECT   DISTINCT kp1.prs_kostenplaats_key kostenplaats_key,
                     kp1.prs_kostenplaats_upper kostenplaats,
                     kp2.actkpn_upp afd_kostenplaats,
                     kp2.actkpn_oms afd_omschrijving,
                     NULL prj_kostenplaats,
                     NULL prj_omschrijving
     FROM   prs_kostenplaats kp1,
            uwva_imp_kpn kpn,
            afdkpn kp2
    WHERE   kp1.prs_kostenplaats_module = 'ALG'              -- Alleen ALG-kpn
            AND (   kp1.prs_kostenplaats_omschrijving LIKE 'INACTIEF%'
                 OR kp1.prs_kostenplaats_eind <= TRUNC (SYSDATE)
                 OR kp1.prs_kostenplaats_verwijder IS NOT NULL)
            AND kp1.prs_kostenplaats_upper = UPPER (kpn.afdeling)
            AND UPPER (kpn.niv2_code) = kp2.allkpn_upp
            AND kp2.actkpn_key IS NOT NULL
   UNION ALL
   SELECT   kp.prs_kostenplaats_key kostenplaats_key,
            kp.prs_kostenplaats_upper kostenplaats,
            kp.prs_kostenplaats_upper afd_kostenplaats,
            kp.prs_kostenplaats_omschrijving afd_omschrijving,
            NULL prj_kostenplaats,
            NULL prj_omschrijving
     FROM   prs_v_aanwezigkostenplaats kp
    WHERE   kp.prs_kostenplaats_module = 'PRJ'               -- Alleen PRJ-kpn
            AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
            AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                 OR kp.prs_kostenplaats_eind IS NULL)
            AND NOT EXISTS
                  (SELECT   1
                     FROM   uwva_imp_kpn_prj prj
                    WHERE   prj.status = 'A'
                            AND prj.project = kp.prs_kostenplaats_upper)
   UNION ALL
   SELECT   DISTINCT kp1.prs_kostenplaats_key kostenplaats_key,
                     kp1.prs_kostenplaats_upper kostenplaats,
                     kp2.actkpn_upp afd_kostenplaats,
                     kp2.actkpn_oms afd_omschrijving,
                     NULL prj_kostenplaats,
                     NULL prj_omschrijving
     FROM   prs_kostenplaats kp1,
            uwva_imp_kpn kpn,
            afdkpn kp2
    WHERE   kp1.prs_kostenplaats_module = 'PRJ'              -- Alleen PRJ-kpn
            AND (   kp1.prs_kostenplaats_omschrijving LIKE 'INACTIEF%'
                 OR kp1.prs_kostenplaats_eind <= TRUNC (SYSDATE)
                 OR kp1.prs_kostenplaats_verwijder IS NOT NULL)
            AND kp1.prs_kostenplaats_upper = UPPER (kpn.afdeling)
            AND UPPER (kpn.niv2_code) = kp2.allkpn_upp
            AND kp2.actkpn_key IS NOT NULL
            AND NOT EXISTS
                  (SELECT   1
                     FROM   uwva_imp_kpn_prj prj
                    WHERE   prj.status = 'A'
                            AND prj.project = kp1.prs_kostenplaats_upper)
   UNION ALL
   SELECT   DISTINCT kp1.prs_kostenplaats_key,
                     kp1.prs_kostenplaats_upper kostenplaats,
                     kp2.prs_kostenplaats_upper afd_kostenplaats,
                     NULL afd_omschrijving,     -- Niet van belang bij linking
                     prj.project prj_kostenplaats,
                     prj.omschrijving prj_omschrijving
     FROM   uwva_imp_kpn_prj prj,
            prs_kostenplaats kp1,
            prs_v_aanwezigkostenplaats kp2
    WHERE       prj.status = 'A'
            AND prj.project = kp1.prs_kostenplaats_upper
            --AND kp1.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
            --AND (kp1.prs_kostenplaats_eind > TRUNC (SYSDATE)
            --     OR kp1.prs_kostenplaats_eind IS NULL)
            AND prj.afdeling = kp2.prs_kostenplaats_upper
            AND kp2.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
            AND (kp2.prs_kostenplaats_eind > TRUNC (SYSDATE)
                 OR kp2.prs_kostenplaats_eind IS NULL)
   UNION ALL
   SELECT   DISTINCT kp1.prs_kostenplaats_key,
                     kp1.prs_kostenplaats_upper kostenplaats,
                     kp3.actkpn_upp afd_kostenplaats,
                     kp3.actkpn_oms afd_omschrijving,
                     NULL prj_kostenplaats,
                     NULL prj_omschrijving
     FROM   uwva_imp_kpn_prj prj,
            prs_kostenplaats kp1,
            prs_kostenplaats kp2,
            uwva_imp_kpn kpn,
            afdkpn kp3
    WHERE       prj.status = 'A'
            AND prj.project = kp1.prs_kostenplaats_upper
            AND prj.afdeling = kp2.prs_kostenplaats_upper
            AND (   kp2.prs_kostenplaats_omschrijving LIKE 'INACTIEF%'
                 OR kp2.prs_kostenplaats_eind <= TRUNC (SYSDATE)
                 OR kp2.prs_kostenplaats_verwijder IS NOT NULL)
            AND kp2.prs_kostenplaats_upper = UPPER (kpn.afdeling)
            AND UPPER (kpn.niv2_code) = kp3.allkpn_upp
            AND kp3.actkpn_key IS NOT NULL;

-- SCH-export; doel is de actuele SCH-gegevens (de 8e en 23e)
-- te bevriezen in UWVA_SCH_FREEZE en een journaalbestand te
-- exporteren!
/* Formatted on 16-8-2012 12:15:45 (QP5 v5.115.810.9015) */
/*
CREATE OR REPLACE VIEW uwva_v_sch_journaalregels
(
   export_appl,
   export_datum,
   export_index,
   export_regel
)
AS
   SELECT   rjr.export_appl,
            rjr.export_datum,
            rjr.export_index,
               '"'
            || rjr.export_index                              -- A: regelnummer
            || '";""'                                              -- B: empty
            || ';""'                                               -- C: empty
            || ';""'                                               -- D: empty
            || ';""'                                               -- E: empty
            || ';""'                                               -- F: empty
            || ';""'                                               -- G: empty
            || ';""'                                               -- H: empty
            || ';"00UWV"'                                  -- I: business unit
            || ';"'
            || ud1.fac_usrdata_omschr                             -- J: ledger
            || '";"'
            || rjr.kostensoort_oms                              -- K: rekening
            || '";"";"";"'                                   -- L+M: empty 1+2
            || ud2.fac_usrdata_omschr                             -- N: valuta
            || '";"'
            || REPLACE (rjr.bedrag, '.', ',')                     -- O: bedrag
            || '";"";"";"";"";"";"";"'                 -- Pt/mU: empty 3 t/m 8
            || SUBSTR (
                     ud3.fac_usrdata_omschr
                  || ' '
                  || TO_CHAR (rjr.export_datum, 'dd-mm-yyyy'),
                  1,
                  20
               )                   -- V: omschrijving (UWVA#23919: W bij BROC)
            || '";"'
            || rjr.kostensoort_refcode     -- W: ref. (UWVA#23919: V bij BROC)
            || '";"";"";"'                                  -- X+Y: empty 9+10
            || rjr.afd_kpn                                    -- Z: department
            || '";""'                                             -- AA: empty
            || ';""'                                              -- AB: empty
            || ';""'                                              -- AC: empty
            || ';"";"'                                            -- AD: empty
            || rjr.prj_kpn                                 -- AE: project code
            || '";""'                                             -- AF: empty
            || ';""'                                              -- AG: empty
            || ';""'                                              -- AH: empty
            || ';""'                                              -- AI: empty
            || ';""'                                              -- AJ: empty
            || ';""'                                              -- AK: empty
            || ';"";"'                                            -- AL: empty
            || DECODE (rjr.prj_kpn, NULL, NULL, '00UWV') -- AM: project business unit
            || '";"'
            || rjr.prj_activiteit                    -- AN: project activiteit
            || '";""'                                             -- AO: empty
            || ';""'                                              -- AP: empty
            || ';"";"'                                            -- AQ: empty
            || rjr.prj_analyse                                  -- AR: analyse
            || '"'
               export_regel
     FROM   uwva_raw_journaalregels rjr,
            fac_usrdata ud1,
            fac_usrdata ud2,
            fac_usrdata ud3
    WHERE       ud1.fac_usrdata_key = 426                    -- Ledger-setting
            AND ud2.fac_usrdata_key = 427                    -- Valuta-setting
            AND ud3.fac_usrdata_key = 429              -- Omschrijving-setting
*/

/* Formatted on 11-10-2010 17:20:34 (QP5 v5.115.810.9015) */
/*
CREATE OR REPLACE VIEW uwva_v_export_sch (RESULT, result_order)
AS
--   SELECT   e.export_regel, e.regelnummer
--     FROM   uwva_exp_sch e
   SELECT   jr.export_regel, jr.export_index
     FROM   uwva_v_sch_journaalregels jr
    WHERE   jr.export_appl = 'SCH' AND jr.export_datum > SYSDATE - 0.5
*/

/* Formatted on 11-12-2012 10:08:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE uwva_select_sch (p_applname   IN VARCHAR2,
                                             p_applrun    IN VARCHAR2)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   freeze_date      DATE := SYSDATE;
   v_count          NUMBER;
BEGIN
   -- IF 8e van de maand THEN                                       => UWVA#38882: Per 26-02-2017 23e vervallen!
   -- 1. Clear log                                                  => Vervallen?
   -- 2. Clear export-tabel                                         => UWVA#38882: Per 26-02-2017 export vervallen!
   -- 3. T-freeze; insert T-regels in sch-freeze
   -- 4. E-export; insert E-regels in export-tabel (uit sch-freeze) => UWVA#38882: Per 26-02-2017 export vervallen!
   -- 5. F-freeze; zet T-regels in sch-freeze op F
   -- END IF;
   IF TO_CHAR (freeze_date, 'dd') IN ('08')
   THEN
      SELECT COUNT (*)
        INTO v_count
        FROM uwva_v_sch_actual;

      -- 3. T-freeze; insert T-regels in sch-freeze
      -- Bewaar SCH-gegevens en parkeer deze in freeze tabel om aansluitend de
      -- export (= doorbelasting) op te baseren.
      -- In deze tabel zijn ook gegevens van voorgaande doorbelastingen met de
      -- status F(rozen) aanwezig; deze krijgen eerst de status T(emporary). =>
      -- Per "Closing the loop" worden SCH-gegevens hier eerst bevroren op T en
      -- na vullen export-tabel direct op F gezet.
      INSERT INTO uwva_sch_freeze (kavel,
                                   district,
                                   gebouw,
                                   verdieping,
                                   ruimte_nr,
                                   ruimtesoort,
                                   ruimtegebruik,
                                   leeg,
                                   rc_type,
                                   sch_niveau,
                                   vvo,
                                   freeze_datum,
                                   freeze_state)
         SELECT   regio,
                  district,
                  gebouw,
                  verdieping,
                  ruimte_nr,
                  ruimtesoort,
                  SUBSTR (ruimtegebruik, 1, 60),
                  leeg,
                  rc_type,
                  sch_niveau,
                  vvo,
                  freeze_date,
                  'T'
           FROM   uwva_v_sch_actual;

      COMMIT;

      -- 5. F-freeze; zet T-regels in sch-freeze op F
      UPDATE   uwva_sch_freeze
         SET   freeze_state = 'F'
       WHERE   freeze_state = 'T';

      COMMIT;

      fac.writelog (p_applname, 'S', 'Aantal SCH-regels/DEFINITIEF: ' || TO_CHAR (v_count), '');
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname, 'E', 'Proces SCH_FREEZE afgebroken!', v_errormsg);
END;
/


-- UWVA#21947
/* Formatted on 6-2-2012 11:20:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_fin_accordeergedrag
(
   fclt_f_nr,
   fclt_d_factuurdatum,
   fclt_f_uitvoerende,
   fclt_f_factuurnr,
   soort,
   opdrachtnr,
   excl_btw,
   incl_btw,
   fclt_f_status,
   budgethouder,
   kostenplaats,
   akkoorddatum,
   fclt_f_doorloop
)
AS
   SELECT   TO_CHAR (x.factuurnr_intern),
            TO_CHAR (x.factuur_datum, 'DD-MM-YYYY'),
            x.uitvoerende,
            x.factuurnr_extern,
            x.ftype,
            x.opdrachtnr,
            x.bedrag_excl_BTW,
            x.bedrag_incl_BTW,
            x.fin_factuur_statuses_omschr,
            x.budgethouder,
            x.kostenplaats,
            TO_CHAR (finfok.min_datum, 'DD-MM-YYYY HH24:MI'),
            DECODE (
               finfok.aant,
               NULL,
               '-',
               1,
               DECODE (
                  FLOOR( (finfok.min_datum
                          - COALESCE (finnew.fac_tracking_datum,
                                      x.factuur_datum))
                        * 24
                        * 60),
                  0,
                  DECODE (finfok.prs_perslid_key,
                          NULL, 'Automatisch-0',
                          'Handmatig-0'),
                  DECODE (finfok.prs_perslid_key,
                          NULL, 'Automatisch-1',
                          'Handmatig-1')
               ),
               'Handmatig-' || TO_CHAR (finfok.aant)
            )
     FROM         (SELECT   f.fin_factuur_key factuurnr_intern,
                            f.fin_factuur_statuses_key,
                            f.fin_factuur_datum factuur_datum,
                            (SELECT   b.prs_bedrijf_naam
                               FROM   prs_bedrijf b
                              WHERE   prs_bedrijf_key =
                                         COALESCE (o.mld_uitvoerende_keys,
                                                   c.cnt_prs_bedrijf_key,
                                                   bo.prs_bedrijf_key))
                               uitvoerende,
                            f.fin_factuur_nr factuurnr_extern,
                            COALESCE (
                               NVL2 (
                                  f.mld_opdr_key,
                                     'Opdracht'
                                  || CHR (13)
                                  || CHR (10)
                                  || sm.mld_stdmelding_omschrijving,
                                  NULL
                               ),
                               NVL2 (
                                  f.cnt_contract_key,
                                     'Contract'
                                  || CHR (13)
                                  || CHR (10)
                                  || cd.ins_discipline_omschrijving,
                                  NULL
                               ),
                               NVL2 (
                                  f.bes_bestelopdr_key,
                                  'Bestelling' || CHR (13) || CHR (10)
                                  || (SELECT   MIN(bd.ins_discipline_omschrijving)
                                        FROM   bes_bestelopdr_item boi,
                                               bes_bestelling_item bi,
                                               bes_srtdeel bs,
                                               bes_srtgroep bg,
                                               bes_discipline bd
                                       WHERE   boi.bes_bestelopdr_key =
                                                  bo.bes_bestelopdr_key
                                               AND boi.bes_bestelopdr_item_key =
                                                     bi.bes_bestelopdr_item_key
                                               AND bi.bes_srtdeel_key =
                                                     bs.bes_srtdeel_key
                                               AND bs.bes_srtgroep_key =
                                                     bg.bes_srtgroep_key
                                               AND bg.ins_discipline_key =
                                                     bd.ins_discipline_key),
                                  NULL
                               ),
                               NULL
                            )
                               ftype,
                            COALESCE (
                               NVL2 (
                                  f.mld_opdr_key,
                                     sd.ins_srtdiscipline_prefix
                                  || TO_CHAR (o.mld_melding_key)
                                  || '/'
                                  || o.mld_opdr_bedrijfopdr_volgnr,
                                  NULL
                               ),
                               NVL2 (
                                  f.cnt_contract_key,
                                  'C' || c.cnt_contract_nummer_intern
                                  || NVL2 (c.cnt_contract_versie,
                                           '.' || c.cnt_contract_versie,
                                           ''),
                                  NULL
                               ),
                               NVL2 (f.bes_bestelopdr_key,
                                     bo.bes_bestelopdr_id,
                                     NULL),
                               NULL
                            )
                               opdrachtnr,
                            f.fin_factuur_totaal bedrag_excl_BTW,
                            f.fin_factuur_totaal + f.fin_factuur_totaal_btw
                               bedrag_incl_BTW,
                            fs.fin_factuur_statuses_omschr,
                            (SELECT   pf.prs_perslid_naam_full
                               FROM   prs_v_perslid_fullnames_all pf
                              WHERE   pf.prs_perslid_key = f.budgethouder)
                               budgethouder,
                               k.prs_kostenplaats_nr
                            || ' '
                            || k.prs_kostenplaats_omschrijving
                               kostenplaats
                     FROM   (SELECT   prs.getkpverantwoordelijke (
                                         prs_kostenplaats_key,
                                         2,
                                         -1
                                      )
                                         budgethouder,
                                      f.*
                               FROM   (SELECT   fin.getfactuurkostenplaats (
                                                   f.fin_factuur_key
                                                )
                                                   prs_kostenplaats_key,
                                                f.*
                                         FROM   fin_factuur f) f) f,
                            prs_kostenplaats k,
                            fin_factuur_statuses fs,
                            mld_opdr o,
                            mld_melding m,
                            mld_discipline d,
                            mld_stdmelding sm,
                            ins_srtdiscipline sd,
                            cnt_contract c,
                            cnt_discipline cd,
                            bes_bestelopdr bo
                    WHERE   f.prs_kostenplaats_key =
                               k.prs_kostenplaats_key(+)
                            AND f.fin_factuur_statuses_key =
                                  fs.fin_factuur_statuses_key
                            AND f.mld_opdr_key = o.mld_opdr_key(+)
                            AND o.mld_melding_key = m.mld_melding_key(+)
                            AND m.mld_stdmelding_key =
                                  sm.mld_stdmelding_key(+)
                            AND sm.mld_ins_discipline_key =
                                  d.ins_discipline_key(+)
                            AND d.ins_srtdiscipline_key =
                                  sd.ins_srtdiscipline_key(+)
                            AND f.cnt_contract_key = c.cnt_contract_key(+)
                            AND c.ins_discipline_key =
                                  cd.ins_discipline_key(+)
                            AND f.bes_bestelopdr_key =
                                  bo.bes_bestelopdr_key(+)) x
               LEFT JOIN                                 -- Tracking toevoegen
                  fac_tracking finnew
               ON x.factuurnr_intern = finnew.fac_tracking_refkey
                  AND finnew.fac_srtnotificatie_key = 141
            LEFT JOIN
               (  SELECT   fac_tracking_refkey,
                           MIN (fac_tracking_datum) min_datum,
                           MIN (prs_perslid_key) prs_perslid_key,
                           COUNT ( * ) aant         -- >1, dan niet standaard!
                    FROM   fac_tracking
                   WHERE   fac_srtnotificatie_key = 143
                GROUP BY   fac_tracking_refkey) finfok
            ON x.factuurnr_intern = finfok.fac_tracking_refkey;

-- UWVA#21949
/* Formatted on 9-1-2013 13:38:26 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_fin_factureergedrag
(
   fclt_f_nr,
   fclt_d_factuurdatum,
   fclt_f_uitvoerende,
   fclt_f_factuurnr,
   soort,
   opdrachtnr,
   opdrachtkosten,
   excl_btw,
   incl_btw,
   fclt_f_status,
   budgethouder,
   kostenplaats,
   fclt_f_doorloop
)
AS
   SELECT   TO_CHAR (x.factuurnr_intern) nr,
            TO_CHAR (x.factuur_datum, 'DD-MM-YYYY'),
            x.uitvoerende,
            x.factuurnr_extern,
            x.ftype,
            x.opdrachtnr,
            x.opdrachtkosten,
            x.bedrag_excl_BTW,
            x.bedrag_incl_BTW,
            x.fin_factuur_statuses_omschr,
            x.budgethouder,
            x.kostenplaats,
            DECODE (
               finupd.aant,
               NULL,                                -- Factuur nooit gemuteerd
               DECODE (
                  finfun.aant,
                  NULL,                           -- Akkoord nooit geannuleerd
                  DECODE (
                     finfok.aant,
                     NULL,                                 -- Nog niet akkoord
                     DECODE (
                        x.disckey,
                        NULL,
                        'Wit/Speciaal',
                        DECODE (fin.tolerantiematch (x.disckey,
                                                     SUBSTR (x.ftype, 1, 1),
                                                     x.bedrag_incl_BTW,
                                                     x.opdrachtkosten),
                                1, 'Groen/Nog niet akkoord',
                                'Rood/Nog niet akkoord')
                     ),
                     1,                                       -- In 1x akkoord
                     DECODE (
                        FLOOR( (finfok.min_datum
                                - COALESCE (finnew.fac_tracking_datum,
                                            x.factuur_datum))
                              * 24
                              * 60),
                        DECODE (finfok.prs_perslid_key, NULL, 0, NULL),
                        'Glad/Direct akkoord', -- Binnen minuut door Facilitor
                        DECODE (fin.tolerantiematch (x.disckey,
                                                     SUBSTR (x.ftype, 1, 1),
                                                     x.bedrag_incl_BTW,
                                                     x.opdrachtkosten),
                                1, 'Groen/Later akkoord',
                                'Rood/Later akkoord')
                     ),
                     'Wit/Speciaal' -- >1 akkoord/nooit geannuleerd; kan niet?
                  ),
                  'Wit/Speciaal'                       -- Akkoord geannuleerd!
               ),
               'Wit/Speciaal'                            -- Factuur gemuteerd!
            )
     FROM               (SELECT   f.fin_factuur_key factuurnr_intern,
                                  f.fin_factuur_statuses_key,
                                  f.fin_factuur_datum factuur_datum,
                                  (SELECT   b.prs_bedrijf_naam
                                     FROM   prs_bedrijf b
                                    WHERE   prs_bedrijf_key =
                                               COALESCE (
                                                  o.mld_uitvoerende_keys,
                                                  c.cnt_prs_bedrijf_key,
                                                  bo.prs_bedrijf_key
                                               ))
                                     uitvoerende,
                                  f.fin_factuur_nr factuurnr_extern,
                                  COALESCE (
                                     NVL2 (f.mld_opdr_key,
                                           md.ins_discipline_key,
                                           NULL),
                                     NVL2 (f.cnt_contract_key,
                                           cd.ins_discipline_key,
                                           NULL),
                                     NVL2 (f.bes_bestelopdr_key,
                                           bg.ins_discipline_key,
                                           NULL),
                                     TO_NUMBER (NULL)
                                  )
                                     disckey,
                                  COALESCE (
                                     NVL2 (
                                        f.mld_opdr_key,
                                           'Opdracht'
                                        || CHR (13)
                                        || CHR (10)
                                        || sm.mld_stdmelding_omschrijving,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.cnt_contract_key,
                                           'Contract'
                                        || CHR (13)
                                        || CHR (10)
                                        || cd.ins_discipline_omschrijving,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.bes_bestelopdr_key,
                                           'Bestelling'
                                        || CHR (13)
                                        || CHR (10)
                                        || bd.ins_discipline_omschrijving,
                                        NULL
                                     ),
                                     NULL
                                  )
                                     ftype,
                                  COALESCE (
                                     NVL2 (
                                        f.mld_opdr_key,
                                           sd.ins_srtdiscipline_prefix
                                        || TO_CHAR (o.mld_melding_key)
                                        || '/'
                                        || o.mld_opdr_bedrijfopdr_volgnr,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.cnt_contract_key,
                                        'C' || c.cnt_contract_nummer_intern
                                        || NVL2 (
                                              c.cnt_contract_versie,
                                              '.' || c.cnt_contract_versie,
                                              ''
                                           ),
                                        NULL
                                     ),
                                     NVL2 (f.bes_bestelopdr_key,
                                           bo.bes_bestelopdr_id,
                                           NULL),
                                     NULL
                                  )
                                     opdrachtnr,
                                  COALESCE (
                                     NVL2 (f.mld_opdr_key,
                                           o.mld_opdr_kosten,
                                           NULL),
                                     NVL2 (f.cnt_contract_key,
                                           TO_NUMBER (NULL),
                                           NULL),
                                     NVL2 (
                                        f.bes_bestelopdr_key,
                                        (  SELECT   SUM(bes_bestelopdr_item_aantal
                                                        * bes_bestelopdr_item_prijs)
                                             FROM   bes_bestelopdr_item
                                            WHERE   bes_bestelopdr_key =
                                                       f.bes_bestelopdr_key
                                         GROUP BY   bes_bestelopdr_key),
                                        NULL
                                     ),
                                     TO_NUMBER (NULL)
                                  )
                                     opdrachtkosten,
                                  f.fin_factuur_totaal bedrag_excl_BTW,
                                  f.fin_factuur_totaal
                                  + f.fin_factuur_totaal_btw
                                     bedrag_incl_BTW,
                                  fs.fin_factuur_statuses_omschr,
                                  (SELECT   prs_perslid_naam_full
                                     FROM   prs_v_perslid_fullnames_all
                                    WHERE   prs_perslid_key =
                                               (prs.getkpverantwoordelijke (
                                                   COALESCE (
                                                      o.prs_kostenplaats_key,
                                                      c.prs_kostenplaats_key,
                                                      bb.prs_kostenplaats_key
                                                   ),
                                                   2,
                                                   -1
                                                )))
                                     budgethouder,
                                  (SELECT      prs_kostenplaats_nr
                                            || ' '
                                            || prs_kostenplaats_omschrijving
                                     FROM   prs_kostenplaats
                                    WHERE   prs_kostenplaats_key =
                                               COALESCE (
                                                  o.prs_kostenplaats_key,
                                                  c.prs_kostenplaats_key,
                                                  bb.prs_kostenplaats_key
                                               ))
                                     kostenplaats
                           FROM   fin_factuur f,
                                  fin_factuur_statuses fs,
                                  mld_opdr o,
                                  mld_melding m,
                                  mld_stdmelding sm,
                                  mld_discipline md,
                                  ins_srtdiscipline sd,
                                  cnt_contract c,
                                  cnt_discipline cd,
                                  bes_bestelopdr bo,
                                  bes_bestelopdr_item boi,
                                  bes_bestelling_item bi,
                                  bes_bestelling bb,
                                  bes_srtdeel bs,
                                  bes_srtgroep bg,
                                  bes_discipline bd
                          WHERE   f.fin_factuur_statuses_key =
                                     fs.fin_factuur_statuses_key
                                  AND f.mld_opdr_key = o.mld_opdr_key(+)
                                  AND o.mld_melding_key =
                                        m.mld_melding_key(+)
                                  AND m.mld_stdmelding_key =
                                        sm.mld_stdmelding_key(+)
                                  AND sm.mld_ins_discipline_key =
                                        md.ins_discipline_key(+)
                                  AND md.ins_srtdiscipline_key =
                                        sd.ins_srtdiscipline_key(+)
                                  AND f.cnt_contract_key =
                                        c.cnt_contract_key(+)
                                  AND c.ins_discipline_key =
                                        cd.ins_discipline_key(+)
                                  AND f.bes_bestelopdr_key =
                                        bo.bes_bestelopdr_key(+)
                                  AND bo.bes_bestelopdr_key =
                                        boi.bes_bestelopdr_key(+)
                                  AND boi.bes_bestelopdr_item_posnr(+) = 1
                                  AND boi.bes_bestelopdr_item_key =
                                        bi.bes_bestelopdr_item_key(+)
                                  AND bi.bes_bestelling_key =
                                        bb.bes_bestelling_key(+)
                                  AND bi.bes_srtdeel_key =
                                        bs.bes_srtdeel_key(+)
                                  AND bs.bes_srtgroep_key =
                                        bg.bes_srtgroep_key(+)
                                  AND bg.ins_discipline_key =
                                        bd.ins_discipline_key(+)) x
                     LEFT JOIN                           -- Tracking toevoegen
                        fac_tracking finnew
                     ON x.factuurnr_intern = finnew.fac_tracking_refkey
                        AND finnew.fac_srtnotificatie_key = 141
                  LEFT JOIN
                     (  SELECT   fac_tracking_refkey, COUNT ( * ) aant
                          FROM   fac_tracking
                         WHERE   fac_srtnotificatie_key = 142
                      GROUP BY   fac_tracking_refkey) finupd
                  ON x.factuurnr_intern = finupd.fac_tracking_refkey
               LEFT JOIN
                  (  SELECT   fac_tracking_refkey,
                              MIN (fac_tracking_datum) min_datum,
                              MIN (prs_perslid_key) prs_perslid_key,
                              COUNT ( * ) aant      -- >1, dan niet standaard!
                       FROM   fac_tracking
                      WHERE   fac_srtnotificatie_key = 143
                   GROUP BY   fac_tracking_refkey) finfok
               ON x.factuurnr_intern = finfok.fac_tracking_refkey
            LEFT JOIN
               (  SELECT   fac_tracking_refkey, COUNT ( * ) aant
                    FROM   fac_tracking
                   WHERE   fac_srtnotificatie_key = 153
                GROUP BY   fac_tracking_refkey) finfun
            ON x.factuurnr_intern = finfun.fac_tracking_refkey;
/* OUDE VERSIE
CREATE OR REPLACE VIEW uwva_v_rap_fin_factureergedrax
(
   fclt_f_nr,
   fclt_d_factuurdatum,
   fclt_f_uitvoerende,
   fclt_f_factuurnr,
   soort,
   opdrachtnr,
   opdrachtkosten,
   excl_btw,
   incl_btw,
   fclt_f_status,
   budgethouder,
   kostenplaats,
   fclt_f_doorloop
)
AS
   SELECT   TO_CHAR (x.factuurnr_intern),
            TO_CHAR (x.factuur_datum, 'DD-MM-YYYY'),
            x.uitvoerende,
            x.factuurnr_extern,
            x.ftype,
            x.opdrachtnr,
            x.opdrachtkosten,
            x.bedrag_excl_BTW,
            x.bedrag_incl_BTW,
            x.fin_factuur_statuses_omschr,
            x.budgethouder,
            x.kostenplaats,
            DECODE (
               finupd.aant,
               NULL,                                -- Factuur nooit gemuteerd
               DECODE (
                  finfun.aant,
                  NULL,                           -- Akkoord nooit geannuleerd
                  DECODE (
                     finfok.aant,
                     NULL,                                 -- Nog niet akkoord
                     DECODE (
                        x.disckey,
                        NULL,
                        'Wit/Speciaal',
                        DECODE (fin.tolerantiematch (x.disckey,
                                                     SUBSTR (x.ftype, 1, 1),
                                                     x.bedrag_incl_BTW,
                                                     x.opdrachtkosten),
                                1, 'Groen/Nog niet akkoord',
                                'Rood/Nog niet akkoord')
                     ),
                     1,                                       -- In 1x akkoord
                     DECODE (
                        FLOOR( (finfok.min_datum
                                - COALESCE (finnew.fac_tracking_datum,
                                            x.factuur_datum))
                              * 24
                              * 60),
                        DECODE (finfok.prs_perslid_key, NULL, 0, NULL),
                        'Glad/Direct akkoord', -- Binnen minuut door Facilitor
                        DECODE (fin.tolerantiematch (x.disckey,
                                                     SUBSTR (x.ftype, 1, 1),
                                                     x.bedrag_incl_BTW,
                                                     x.opdrachtkosten),
                                1, 'Groen/Later akkoord',
                                'Rood/Later akkoord')
                     ),
                     'Wit/Speciaal' -- >1 akkoord/nooit geannuleerd; kan niet?
                  ),
                  'Wit/Speciaal'                       -- Akkoord geannuleerd!
               ),
               'Wit/Speciaal'                            -- Factuur gemuteerd!
            )
     FROM               (SELECT   f.fin_factuur_key factuurnr_intern,
                                  f.fin_factuur_statuses_key,
                                  f.fin_factuur_datum factuur_datum,
                                  (SELECT   b.prs_bedrijf_naam
                                     FROM   prs_bedrijf b
                                    WHERE   prs_bedrijf_key =
                                               COALESCE (
                                                  o.mld_uitvoerende_keys,
                                                  c.cnt_prs_bedrijf_key,
                                                  bo.prs_bedrijf_key
                                               ))
                                     uitvoerende,
                                  f.fin_factuur_nr factuurnr_extern,
                                  COALESCE (
                                     NVL2 (f.mld_opdr_key,
                                           md.ins_discipline_key,
                                           NULL),
                                     NVL2 (f.cnt_contract_key,
                                           cd.ins_discipline_key,
                                           NULL),
                                     NVL2 (
                                        f.bes_bestelopdr_key,
                                        (SELECT   MIN (bg.ins_discipline_key)
                                           FROM   bes_bestelopdr_item boi,
                                                  bes_bestelling_item bi,
                                                  bes_srtdeel bs,
                                                  bes_srtgroep bg
                                          WHERE   boi.bes_bestelopdr_key =
                                                     bo.bes_bestelopdr_key
                                                  AND boi.bes_bestelopdr_item_key =
                                                        bi.bes_bestelopdr_item_key
                                                  AND bi.bes_srtdeel_key =
                                                        bs.bes_srtdeel_key
                                                  AND bs.bes_srtgroep_key =
                                                        bg.bes_srtgroep_key),
                                        NULL
                                     ),
                                     TO_NUMBER (NULL)
                                  )
                                     disckey,
                                  COALESCE (
                                     NVL2 (
                                        f.mld_opdr_key,
                                           'Opdracht'
                                        || CHR (13)
                                        || CHR (10)
                                        || sm.mld_stdmelding_omschrijving,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.cnt_contract_key,
                                           'Contract'
                                        || CHR (13)
                                        || CHR (10)
                                        || cd.ins_discipline_omschrijving,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.bes_bestelopdr_key,
                                        'Bestelling' || CHR (13) || CHR (10)
                                        || (SELECT   MIN(ins_discipline_omschrijving)
                                              FROM   bes_bestelopdr_item boi,
                                                     bes_bestelling_item bi,
                                                     bes_srtdeel bs,
                                                     bes_srtgroep bg,
                                                     bes_discipline bd
                                             WHERE   boi.bes_bestelopdr_key =
                                                        bo.bes_bestelopdr_key
                                                     AND boi.bes_bestelopdr_item_key =
                                                           bi.bes_bestelopdr_item_key
                                                     AND bi.bes_srtdeel_key =
                                                           bs.bes_srtdeel_key
                                                     AND bs.bes_srtgroep_key =
                                                           bg.bes_srtgroep_key
                                                     AND bg.ins_discipline_key =
                                                           bd.ins_discipline_key),
                                        NULL
                                     ),
                                     NULL
                                  )
                                     ftype,
                                  COALESCE (
                                     NVL2 (
                                        f.mld_opdr_key,
                                           sd.ins_srtdiscipline_prefix
                                        || TO_CHAR (o.mld_melding_key)
                                        || '/'
                                        || o.mld_opdr_bedrijfopdr_volgnr,
                                        NULL
                                     ),
                                     NVL2 (
                                        f.cnt_contract_key,
                                        'C' || c.cnt_contract_nummer_intern
                                        || NVL2 (
                                              c.cnt_contract_versie,
                                              '.' || c.cnt_contract_versie,
                                              ''
                                           ),
                                        NULL
                                     ),
                                     NVL2 (f.bes_bestelopdr_key,
                                           bo.bes_bestelopdr_id,
                                           NULL),
                                     NULL
                                  )
                                     opdrachtnr,
                                  COALESCE (
                                     NVL2 (f.mld_opdr_key,
                                           o.mld_opdr_kosten,
                                           NULL),
                                     NVL2 (f.cnt_contract_key,
                                           TO_NUMBER (NULL),
                                           NULL),
                                     NVL2 (
                                        f.bes_bestelopdr_key,
                                        (  SELECT   SUM(bes_bestelopdr_item_aantal
                                                        * bes_bestelopdr_item_prijs)
                                             FROM   bes_bestelopdr_item
                                            WHERE   bes_bestelopdr_key =
                                                       f.bes_bestelopdr_key
                                         GROUP BY   bes_bestelopdr_key),
                                        NULL
                                     ),
                                     TO_NUMBER (NULL)
                                  )
                                     opdrachtkosten,
                                  f.fin_factuur_totaal bedrag_excl_BTW,
                                  f.fin_factuur_totaal
                                  + f.fin_factuur_totaal_btw
                                     bedrag_incl_BTW,
                                  fs.fin_factuur_statuses_omschr,
                                  (SELECT   pf.prs_perslid_naam_full
                                     FROM   prs_v_perslid_fullnames_all pf
                                    WHERE   pf.prs_perslid_key =
                                               f.budgethouder)
                                     budgethouder,
                                     k.prs_kostenplaats_nr
                                  || ' '
                                  || k.prs_kostenplaats_omschrijving
                                     kostenplaats
                           FROM   (SELECT   prs.getkpverantwoordelijke (
                                               prs_kostenplaats_key,
                                               2,
                                               -1
                                            )
                                               budgethouder,
                                            f.*
                                     FROM   (SELECT   fin.getfactuurkostenplaats(f.fin_factuur_key)
                                                         prs_kostenplaats_key,
                                                      f.*
                                               FROM   fin_factuur f) f) f,
                                  prs_kostenplaats k,
                                  fin_factuur_statuses fs,
                                  mld_opdr o,
                                  mld_melding m,
                                  mld_stdmelding sm,
                                  mld_discipline md,
                                  ins_srtdiscipline sd,
                                  cnt_contract c,
                                  cnt_discipline cd,
                                  bes_bestelopdr bo
                          WHERE   f.prs_kostenplaats_key =
                                     k.prs_kostenplaats_key(+)
                                  AND f.fin_factuur_statuses_key =
                                        fs.fin_factuur_statuses_key
                                  AND f.mld_opdr_key = o.mld_opdr_key(+)
                                  AND o.mld_melding_key =
                                        m.mld_melding_key(+)
                                  AND m.mld_stdmelding_key =
                                        sm.mld_stdmelding_key(+)
                                  AND sm.mld_ins_discipline_key =
                                        md.ins_discipline_key(+)
                                  AND md.ins_srtdiscipline_key =
                                        sd.ins_srtdiscipline_key(+)
                                  AND f.cnt_contract_key =
                                        c.cnt_contract_key(+)
                                  AND c.ins_discipline_key =
                                        cd.ins_discipline_key(+)
                                  AND f.bes_bestelopdr_key =
                                        bo.bes_bestelopdr_key(+)) x
                     LEFT JOIN                           -- Tracking toevoegen
                        fac_tracking finnew
                     ON x.factuurnr_intern = finnew.fac_tracking_refkey
                        AND finnew.fac_srtnotificatie_key = 141
                  LEFT JOIN
                     (  SELECT   fac_tracking_refkey, COUNT ( * ) aant
                          FROM   fac_tracking
                         WHERE   fac_srtnotificatie_key = 142
                      GROUP BY   fac_tracking_refkey) finupd
                  ON x.factuurnr_intern = finupd.fac_tracking_refkey
               LEFT JOIN
                  (  SELECT   fac_tracking_refkey,
                              MIN (fac_tracking_datum) min_datum,
                              MIN (prs_perslid_key) prs_perslid_key,
                              COUNT ( * ) aant      -- >1, dan niet standaard!
                       FROM   fac_tracking
                      WHERE   fac_srtnotificatie_key = 143
                   GROUP BY   fac_tracking_refkey) finfok
               ON x.factuurnr_intern = finfok.fac_tracking_refkey
            LEFT JOIN
               (  SELECT   fac_tracking_refkey, COUNT ( * ) aant
                    FROM   fac_tracking
                   WHERE   fac_srtnotificatie_key = 153
                GROUP BY   fac_tracking_refkey) finfun
            ON x.factuurnr_intern = finfun.fac_tracking_refkey;
*/

CREATE OR REPLACE VIEW UWVA_V_RAP_FIN_DUBBEL_FACTUREN
(
   FCLT_F_BOC_TYPE,
   FCLT_F_OPDRACHTNR,
   SERVICEPUNT,
   PANDCODE,
   KOSTENPLAATS,
   PRODUCTGROEP,
   MELDING,
   OMSCHRIJVING,
   FACTUUR_DATUM,
   FACTUUR_NR,
   FACTUUR_STATUS
)
AS
   SELECT   boc.boc,
            DECODE (boc.boc, 'Bestelling', TO_CHAR (boc.opdr_id), TO_CHAR (boc.opdr_nr)),
            (SELECT   alg_district_omschrijving
               FROM   alg_locatie l, alg_district d
              WHERE   l.alg_locatie_key = loc_key
                      AND l.alg_district_key = d.alg_district_key),
            (SELECT   alg_locatie_code
               FROM   alg_locatie
              WHERE   alg_locatie_key = loc_key),
            boc.kpn,
            boc.productgroep,
            boc.melding,
            boc.oms,
            boc.factuur_datum,
            boc.factuur_nr,
            boc.factuur_status
     FROM      (                                                 -- B-facturen
                SELECT    'Bestelling' boc,
                          f.bes_bestelopdr_key opdr_nr,
                          bo.bes_bestelopdr_id opdr_id,
                          x.loc_key,
                          x.kpn,
                          x.productgroep,
                          NULL melding,
                          NULL oms,
                          f.fin_factuur_datum factuur_datum,
                          f.fin_factuur_nr factuur_nr,
                          fs.fin_factuur_statuses_omschr factuur_status
                   FROM   fin_factuur f,
                          (  SELECT   boi.bes_bestelopdr_key,
                                      kp.prs_kostenplaats_nr kpn,
                                      td.ins_discipline_omschrijving
                                         productgroep,
                                      DECODE (COUNT ( * ),
                                              1, MIN (pw.alg_locatie_key),
                                              NULL)
                                         loc_key
                               FROM   bes_bestelopdr_item boi,
                                      bes_bestelling_item bbi,
                                      bes_srtdeel sd,
                                      bes_srtgroep sg,
                                      ins_tab_discipline td,
                                      prs_kostensoort ks,
                                      bes_bestelling b,
                                      prs_v_aanwezigkostenplaats kp,
                                      prs_v_werkplekperslid_gegevens pw,
                                      alg_locatie l
                              WHERE   boi.bes_bestelopdr_item_key =
                                         bbi.bes_bestelopdr_item_key
                                      AND bbi.bes_srtdeel_key =
                                            sd.bes_srtdeel_key
                                      AND sd.bes_srtgroep_key =
                                            sg.bes_srtgroep_key
                                      AND sg.ins_discipline_key =
                                            td.ins_discipline_key
                                      AND td.prs_kostensoort_key =
                                            ks.prs_kostensoort_key(+)
                                      AND bbi.bes_bestelling_key =
                                            b.bes_bestelling_key
                                      AND b.prs_kostenplaats_key =
                                            kp.prs_kostenplaats_key
                                      AND b.prs_perslid_key =
                                            pw.prs_perslid_key(+)
                           GROUP BY   boi.bes_bestelopdr_key,
                                      kp.prs_kostenplaats_nr,
                                      td.ins_discipline_omschrijving) x,
                          bes_bestelopdr bo,
                          fin_factuur_statuses fs
                  WHERE   f.bes_bestelopdr_key = x.bes_bestelopdr_key
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND f.fin_factuur_statuses_key =
                                fs.fin_factuur_statuses_key
                UNION ALL                                        -- O-facturen
                SELECT   'Opdracht',
                         f.mld_opdr_key opdr_nr,
                         NULL opdr_id,
                         m.mld_alg_locatie_key,
                         kp.prs_kostenplaats_nr kpn,
                         td.ins_discipline_omschrijving,
                         sm.mld_stdmelding_omschrijving melding,
                         o.mld_opdr_omschrijving oms,
                         f.fin_factuur_datum factuur_datum,
                         f.fin_factuur_nr factuur_nr,
                         fs.fin_factuur_statuses_omschr factuur_status
                  FROM   fin_factuur f,
                         mld_opdr o,
                         mld_melding m,
                         mld_stdmelding sm,
                         ins_tab_discipline td,
                         prs_v_aanwezigkostenplaats kp,
                         fin_factuur_statuses fs
                 WHERE       f.mld_opdr_key = o.mld_opdr_key
                         AND o.mld_melding_key = m.mld_melding_key
                         AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                         AND sm.mld_ins_discipline_key =
                               td.ins_discipline_key
                         AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
                         AND f.fin_factuur_statuses_key =
                               fs.fin_factuur_statuses_key
                UNION ALL                                        -- C-facturen
                SELECT   'Contract',
                         f.cnt_contract_key opdr_nr,
                         NULL opdr_id,
                         NULL loc_key,
                         kp.prs_kostenplaats_nr kpn,
                         td.ins_discipline_omschrijving,
                         NULL,
                         NULL,
                         f.fin_factuur_datum factuur_datum,
                         f.fin_factuur_nr factuur_nr,
                         fs.fin_factuur_statuses_omschr factuur_status
                  FROM   fin_factuur f,
                         cnt_contract c,
                         ins_tab_discipline td,
                         prs_v_aanwezigkostenplaats kp,
                         fin_factuur_statuses fs
                 WHERE       f.cnt_contract_key = c.cnt_contract_key
                         AND c.ins_discipline_key = td.ins_discipline_key
                         AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key
                         AND f.fin_factuur_statuses_key =
                               fs.fin_factuur_statuses_key) boc
            LEFT JOIN
               (  SELECT   COALESCE (f.bes_bestelopdr_key,
                                     f.mld_opdr_key,
                                     f.cnt_contract_key)
                              opdr_nr,
                           COUNT ( * ) aantal
                    FROM   fin_factuur f
                GROUP BY   COALESCE (f.bes_bestelopdr_key,
                                     f.mld_opdr_key,
                                     f.cnt_contract_key)) fact
            ON boc.opdr_nr = fact.opdr_nr
    WHERE   fact.aantal > 1;


-- UWVA#24721/Catering-kavels per 2013!
-- UWVA#38882/MS2.0: Per 26-02-2017 kavels vervallen.
/* Formatted on 10-2-2014 11:36:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_cat_actual
(
   fclt_3d_locatie_key,
   fclt_f_regio,                                           -- Was fclt_f_kavel
   fclt_f_lev_datum,
   fclt_f_gebouwcode,
   fclt_3d_discipline_key,
   fclt_f_catalogus,
   fclt_f_voorziening,
   aantal,
   prijs_per_stuk,
   btw_perc,
   tot_excl,
   tot_afgemeld_excl,
   tot_afgemeld_btw,
   tot_afgemeld_incl,
   res_id,
   fclt_f_kostenplaats_nr,
   kostenplaats_oms
)
AS
     SELECT alg_locatie_key,
            alg_regio_omschrijving,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            SUM (aantal),
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (SUM (prijs), '9999990.99'), '.', ','),
            SUM (verw_prijs),
            SUM (btw),
            SUM (verw_prijs + btw),
            res_id,
            kostenplaats_nr,
            kostenplaats_oms
       FROM (SELECT rg.alg_locatie_key,
                    r.alg_regio_omschrijving,
                    TO_CHAR (x.res_rsv_artikel_levering, 'YYYY-MM-DD') lev_datum,
                    DECODE (x.alg_ruimte_key, NULL, 'Onbekend', rg.alg_gebouw_upper) gebouw_code,
                    x.ins_discipline_key,
                    x.ins_discipline_omschrijving,
                    x.res_item_key,
                    x.res_voorziening,
                    x.aantal,
                    x.stuksprijs,
                    x.btw_perc,
                    x.prijs,
                    x.verw_prijs,
                    ROUND ( (x.verw_prijs * x.btw_perc) / 100, 2) btw,
                    x.res_id,
                    COALESCE (actkpn.afd_kostenplaats, '*VERVALLEN[' || x.prs_kostenplaats_upper || ']')
                       kostenplaats_nr,
                    COALESCE (actkpn.afd_omschrijving, '*VERVALLEN[' || x.prs_kostenplaats_omschrijving || ']')
                       kostenplaats_oms
               FROM (SELECT COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            ra.res_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               res_id,
                            rrr.prs_kostenplaats_key,
                            kp.prs_kostenplaats_upper,
                            kp.prs_kostenplaats_omschrijving
                       FROM res_rsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NULL
                             GROUP BY res_ruimte_key) rar1,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NOT NULL
                             GROUP BY res_ruimte_key) rar2,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd,
                            prs_kostensoort ks,
                            prs_kostenplaats kp
                      WHERE rrr.alg_ruimte_key IS NULL
                            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                            AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                            AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_status_bo_key = 5
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (   rd.ins_discipline_omschrijving LIKE '%(N)'
                                 OR rd.ins_discipline_omschrijving LIKE '%(E)'
                                 OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rd.prs_kostensoort_key = ks.prs_kostensoort_key
                            AND ks.prs_kostensoort_doorbelasten = 1
                            AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key
                     UNION ALL
                     SELECT rrr.alg_ruimte_key,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            ra.res_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs
                               prijs,
                            rra.res_rsv_artikel_prijs verw_prijs,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               resid,
                            rrr.prs_kostenplaats_key,
                            kp.prs_kostenplaats_upper,
                            kp.prs_kostenplaats_omschrijving
                       FROM res_rsv_ruimte rrr,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd,
                            prs_kostensoort ks,
                            prs_kostenplaats kp
                      WHERE     rrr.res_ruimte_opstel_key IS NULL
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_status_bo_key = 5
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (   rd.ins_discipline_omschrijving LIKE '%(N)'
                                 OR rd.ins_discipline_omschrijving LIKE '%(E)'
                                 OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rd.prs_kostensoort_key = ks.prs_kostensoort_key
                            AND ks.prs_kostensoort_doorbelasten = 1
                            AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key) x,
                    uwva_v_afd_plus_prj_kpn actkpn,
                    alg_v_ruimte_gegevens_all rg,
                    alg_district d,
                    alg_regio r
              WHERE x.prs_kostenplaats_key = actkpn.kostenplaats_key(+)
                AND x.alg_ruimte_key = rg.alg_ruimte_key
                AND rg.alg_district_key = d.alg_district_key
                AND d.alg_regio_key = r.alg_regio_key)
   GROUP BY alg_locatie_key,
            alg_regio_omschrijving,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            res_id,
            kostenplaats_nr,
            kostenplaats_oms;

-- UWVA#38882: Tot 26-02-2017!
/* Formatted on 10-2-2014 11:36:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_cat_frozen
(
   fclt_f_exp_datum,
   fclt_f_kavel,
   fclt_f_gebouwcode,
   fclt_3d_discipline_key,
   fclt_f_catalogus,
   fclt_f_voorziening,
   aantal,
   prijs_per_stuk,
   btw_perc,
   tot_excl,
   tot_verwerkt_excl,
   tot_verwerkt_btw,
   tot_verwerkt_incl
)
AS
     SELECT exp_datum,
            kavel,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            SUM (aantal),
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (SUM (prijs), '9999990.99'), '.', ','),
            SUM (verw_prijs),
            SUM (btw),
            SUM (verw_prijs + btw)
       FROM (SELECT TO_CHAR (x.exp_datum, 'YYYY-MM-DD') exp_datum,
                    z.kavel,
                    DECODE (x.alg_ruimte_key, NULL, 'Onbekend', y.alg_gebouw_upper) gebouw_code,
                    x.ins_discipline_key,
                    x.ins_discipline_omschrijving,
                    x.res_item_key,
                    x.res_voorziening,
                    x.aantal,
                    x.stuksprijs,
                    x.btw_perc,
                    x.prijs,
                    x.verw_prijs,
                    ROUND ( (x.verw_prijs * x.btw_perc) / 100, 2) btw
               FROM (SELECT COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NULL
                             GROUP BY res_ruimte_key) rar1,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NOT NULL
                             GROUP BY res_ruimte_key) rar2,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.alg_ruimte_key IS NULL
                            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                            AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                            AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(E)')
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
                     UNION ALL
                     SELECT rrr.alg_ruimte_key alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE     rrr.res_ruimte_opstel_key IS NULL
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(E)')
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')) x
                    LEFT JOIN alg_v_ruimte_gegevens_all y
                       ON x.alg_ruimte_key = y.alg_ruimte_key
                    LEFT JOIN (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr kavel
                                 FROM alg_v_aanwezigonrgoedkenmerk ok, fac_v_aanwezigusrdata ud
                                WHERE ok.alg_kenmerk_key = 1420       -- kavel
                                      AND ok.alg_onrgoed_niveau = 'G'
                                      AND ok.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) z
                       ON y.alg_gebouw_key = z.alg_onrgoed_key)
   GROUP BY exp_datum,
            kavel,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ',');

-- UWVA#38882: Per 26-02-2017!
CREATE OR REPLACE VIEW uwva_v_rap_cat_frozen_ms20
(
   fclt_3d_locatie_key,
   fclt_f_exp_datum,
   fclt_f_regio,                                           -- Was fclt_f_kavel
   fclt_f_gebouwcode,
   fclt_3d_discipline_key,
   fclt_f_catalogus,
   fclt_f_voorziening,
   aantal,
   prijs_per_stuk,
   btw_perc,
   tot_excl,
   tot_verwerkt_excl,
   tot_verwerkt_btw,
   tot_verwerkt_incl
)
AS
     SELECT alg_locatie_key,
            exp_datum,
            alg_regio_omschrijving,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            SUM (aantal),
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (SUM (prijs), '9999990.99'), '.', ','),
            SUM (verw_prijs),
            SUM (btw),
            SUM (verw_prijs + btw)
       FROM (SELECT rg.alg_locatie_key,
                    TO_CHAR (x.exp_datum, 'YYYY-MM-DD') exp_datum,
                    r.alg_regio_omschrijving,
                    DECODE (x.alg_ruimte_key, NULL, 'Onbekend', rg.alg_gebouw_upper) gebouw_code,
                    x.ins_discipline_key,
                    x.ins_discipline_omschrijving,
                    x.res_item_key,
                    x.res_voorziening,
                    x.aantal,
                    x.stuksprijs,
                    x.btw_perc,
                    x.prijs,
                    x.verw_prijs,
                    ROUND ( (x.verw_prijs * x.btw_perc) / 100, 2) btw
               FROM (SELECT COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NULL
                             GROUP BY res_ruimte_key) rar1,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NOT NULL
                             GROUP BY res_ruimte_key) rar2,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.alg_ruimte_key IS NULL
                            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                            AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                            AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rra.res_rsv_artikel_verwerkt > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
                     UNION ALL
                     SELECT rrr.alg_ruimte_key alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE     rrr.res_ruimte_opstel_key IS NULL
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rra.res_rsv_artikel_verwerkt > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')) x,
                    alg_v_ruimte_gegevens_all rg,
                    alg_district d,
                    alg_regio r
              WHERE x.alg_ruimte_key = rg.alg_ruimte_key
                AND rg.alg_district_key = d.alg_district_key
                AND d.alg_regio_key = r.alg_regio_key)
   GROUP BY alg_locatie_key,
            exp_datum,
            alg_regio_omschrijving,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ',');

-- UWVA#30468
-- UWVA#38882: Tot 26-02-2017!
/* Formatted on 23-9-2014 16:54:06 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_cat_frozen_details
(
   fclt_f_exp_datum,
   fclt_f_kavel,
   res_id,
   fclt_f_lev_datum,
   fclt_f_gebouwcode,
   fclt_3d_discipline_key,
   fclt_f_catalogus,
   fclt_f_voorziening,
   aantal,
   prijs_per_stuk,
   btw_perc,
   tot_excl,
   tot_verwerkt_excl,
   tot_verwerkt_btw,
   tot_verwerkt_incl
)
AS
     SELECT exp_datum,
            kavel,
            res_id,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            SUM (aantal),
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (SUM (prijs), '9999990.99'), '.', ','),
            SUM (verw_prijs),
            SUM (btw),
            SUM (verw_prijs + btw)
       FROM (SELECT TO_CHAR (x.exp_datum, 'YYYY-MM-DD') exp_datum,
                    z.kavel,
                    x.res_id,
                    TO_CHAR (x.res_rsv_artikel_levering, 'YYYY-MM-DD') lev_datum,
                    DECODE (x.alg_ruimte_key, NULL, 'Onbekend', y.alg_gebouw_upper) gebouw_code,
                    x.ins_discipline_key,
                    x.ins_discipline_omschrijving,
                    x.res_item_key,
                    x.res_voorziening,
                    x.aantal,
                    x.stuksprijs,
                    x.btw_perc,
                    x.prijs,
                    x.verw_prijs,
                    ROUND ( (x.verw_prijs * x.btw_perc) / 100, 2) btw
               FROM (SELECT COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               res_id,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NULL
                             GROUP BY res_ruimte_key) rar1,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NOT NULL
                             GROUP BY res_ruimte_key) rar2,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.alg_ruimte_key IS NULL
                            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                            AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                            AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(E)')
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
                     UNION ALL
                     SELECT rrr.alg_ruimte_key alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               res_id,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.res_ruimte_opstel_key IS NULL
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(E)')
                            AND rra.res_rsv_artikel_verwerkt < TO_DATE ('04-03-2017', 'dd-mm-yyyy') -- UWVA#38882
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')) x
                    LEFT JOIN alg_v_ruimte_gegevens_all y
                       ON x.alg_ruimte_key = y.alg_ruimte_key
                    LEFT JOIN (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr kavel
                                 FROM alg_v_aanwezigonrgoedkenmerk ok, fac_v_aanwezigusrdata ud
                                WHERE ok.alg_kenmerk_key = 1420       -- kavel
                                      AND ok.alg_onrgoed_niveau = 'G'
                                      AND ok.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) z
                       ON y.alg_gebouw_key = z.alg_onrgoed_key)
   GROUP BY exp_datum,
            kavel,
            res_id,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ',');

-- UWVA#38882: Per 26-02-2017!
CREATE OR REPLACE VIEW uwva_v_rap_cat_frozen_det_ms20
(
   fclt_3d_locatie_key,
   fclt_f_exp_datum,
   fclt_f_regio,                                           -- Was fclt_f_kavel
   res_id,
   fclt_f_lev_datum,
   fclt_f_gebouwcode,
   fclt_3d_discipline_key,
   fclt_f_catalogus,
   fclt_f_voorziening,
   aantal,
   prijs_per_stuk,
   btw_perc,
   tot_excl,
   tot_verwerkt_excl,
   tot_verwerkt_btw,
   tot_verwerkt_incl
)
AS
     SELECT alg_locatie_key,
            exp_datum,
            alg_regio_omschrijving,
            res_id,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            SUM (aantal),
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (SUM (prijs), '9999990.99'), '.', ','),
            SUM (verw_prijs),
            SUM (btw),
            SUM (verw_prijs + btw)
       FROM (SELECT rg.alg_locatie_key,
                    TO_CHAR (x.exp_datum, 'YYYY-MM-DD') exp_datum,
                    r.alg_regio_omschrijving,
                    x.res_id,
                    TO_CHAR (x.res_rsv_artikel_levering, 'YYYY-MM-DD') lev_datum,
                    DECODE (x.alg_ruimte_key, NULL, 'Onbekend', rg.alg_gebouw_upper) gebouw_code,
                    x.ins_discipline_key,
                    x.ins_discipline_omschrijving,
                    x.res_item_key,
                    x.res_voorziening,
                    x.aantal,
                    x.stuksprijs,
                    x.btw_perc,
                    x.prijs,
                    x.verw_prijs,
                    ROUND ( (x.verw_prijs * x.btw_perc) / 100, 2) btw
               FROM (SELECT COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key) alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               res_id,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NULL
                             GROUP BY res_ruimte_key) rar1,
                            (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
                                 FROM res_alg_ruimte
                                WHERE res_alg_ruimte_verwijder IS NOT NULL
                             GROUP BY res_ruimte_key) rar2,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.alg_ruimte_key IS NULL
                            AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                            AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                            AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rra.res_rsv_artikel_verwerkt > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
                     UNION ALL
                     SELECT rrr.alg_ruimte_key alg_ruimte_key,
                            TRUNC (rra.res_rsv_artikel_verwerkt) exp_datum,
                               rrr.res_reservering_key
                            || '/'
                            || rrr.res_rsv_ruimte_volgnr
                               res_id,
                            rra.res_rsv_artikel_levering,
                            rd.ins_discipline_key,
                            rd.ins_discipline_omschrijving,
                            res_rsv_artikel_key res_item_key,
                               LTRIM (ra.res_artikel_omschrijving)
                            || ' ('
                            || COALESCE (ra.res_artikel_eenheid, '')
                            || ')'
                               res_voorziening,
                            rra.res_rsv_artikel_aantal aantal,
                            ra.res_artikel_prijs stuksprijs,
                            rra.res_rsv_artikel_btw btw_perc,
                            rra.res_rsv_artikel_aantal * ra.res_artikel_prijs prijs,
                            rra.res_rsv_artikel_prijs verw_prijs
                       FROM res_rsv_ruimte rrr,
                            res_v_aanwezigrsv_artikel rra,
                            res_artikel ra,
                            res_discipline rd
                      WHERE rrr.res_ruimte_opstel_key IS NULL
                            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                            AND rra.res_artikel_key = ra.res_artikel_key
                            AND ra.res_discipline_key = rd.ins_discipline_key
                            AND (rd.ins_discipline_omschrijving LIKE '%(N)' OR rd.ins_discipline_omschrijving LIKE '%(Z)')
                            AND rra.res_rsv_artikel_verwerkt > TO_DATE ('26-02-2017', 'dd-mm-yyyy')
                            AND rra.res_rsv_artikel_verwerkt > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')) x,
                    alg_v_ruimte_gegevens_all rg,
                    alg_district d,
                    alg_regio r
              WHERE x.alg_ruimte_key = rg.alg_ruimte_key
                AND rg.alg_district_key = d.alg_district_key
                AND d.alg_regio_key = r.alg_regio_key)
   GROUP BY alg_locatie_key,
            exp_datum,
            alg_regio_omschrijving,
            res_id,
            lev_datum,
            gebouw_code,
            ins_discipline_key,
            ins_discipline_omschrijving,
            res_voorziening,
            REPLACE (TO_CHAR (stuksprijs, '9999990.99'), '.', ','),
            REPLACE (TO_CHAR (btw_perc, '9999990.99'), '.', ',');


-- BROC-export; doel is een BROC-journaalbestand (1e en 3e
-- werkdag resp. CONCEPT en DEFINITIEF) te exporteren en de
-- BOC-facturen + R-reserveringen die hieraan ten grondslag
-- liggen op AV te zetten!
/* Formatted on 13-9-2010 16:30:08 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_broc_journaalregels
(
   export_appl,
   export_datum,
   export_index,
   export_regel
)
AS
   SELECT   rjr.export_appl,
            rjr.export_datum,
            rjr.export_index,
               '"'
            || rjr.export_index                              -- A: regelnummer
            || '";""'                                              -- B: empty
            || ';""'                                               -- C: empty
            || ';""'                                               -- D: empty
            || ';""'                                               -- E: empty
            || ';""'                                               -- F: empty
            || ';""'                                               -- G: empty
            || ';""'                                               -- H: empty
            || ';"00UWV"'                                  -- I: business unit
            || ';"'
            || ud1.fac_usrdata_omschr                             -- J: ledger
            || '";"'
            || rjr.kostensoort_oms                              -- K: rekening
            || '";"";"";"'                                   -- L+M: empty 1+2
            || ud2.fac_usrdata_omschr                             -- N: valuta
            || '";"'
            || REPLACE (rjr.bedrag, '.', ',')                     -- O: bedrag
            || '";"";"";"";"";"";"";"'                 -- Pt/mU: empty 3 t/m 8
            || rjr.kostensoort_refcode                         -- V: reference
            || '";"'
            || SUBSTR (
                     ud3.fac_usrdata_omschr
                  || ' '
                  || TO_CHAR (rjr.export_datum, 'dd-mm-yyyy'),
                  1,
                  20
               )                                            -- W: omschrijving
            || '";"";"";"'                                  -- X+Y: empty 9+10
            || rjr.afd_kpn                                    -- Z: department
            || '";""'                                             -- AA: empty
            || ';""'                                              -- AB: empty
            || ';""'                                              -- AC: empty
            || ';"";"'                                            -- AD: empty
            || rjr.prj_kpn                                 -- AE: project code
            || '";""'                                             -- AF: empty
            || ';""'                                              -- AG: empty
            || ';""'                                              -- AH: empty
            || ';""'                                              -- AI: empty
            || ';""'                                              -- AJ: empty
            || ';""'                                              -- AK: empty
            || ';"";"'                                            -- AL: empty
            || DECODE (rjr.prj_kpn, NULL, NULL, '00UWV') -- AM: project business unit
            || '";"'
            || rjr.prj_activiteit                    -- AN: project activiteit
            || '";""'                                             -- AO: empty
            || ';""'                                              -- AP: empty
            || ';"";"'                                            -- AQ: empty
            || rjr.prj_analyse                                  -- AR: analyse
            || '"'
               export_regel
     FROM   uwva_raw_journaalregels rjr,
            fac_usrdata ud1,
            fac_usrdata ud2,
            fac_usrdata ud3
    WHERE       ud1.fac_usrdata_key = 426                    -- Ledger-setting
            AND ud2.fac_usrdata_key = 427                    -- Valuta-setting
            AND ud3.fac_usrdata_key = 429              -- Omschrijving-setting
/

/* Formatted on 11-10-2010 17:20:34 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_export_broc (RESULT, result_order)
AS
--   SELECT   e.export_regel, e.regelnummer
--     FROM   uwva_exp_broc e
   SELECT   jr.export_regel, jr.export_index
     FROM   uwva_v_broc_journaalregels jr
    WHERE   jr.export_appl = 'BROC' AND jr.export_datum > SYSDATE - 0.5
/

/* Formatted on 20-4-2012 14:30:12 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_broc_actual
(
   factuur_key,
   bes_opdr_key,
   mld_opdr_key,
   cnt_key,
   res_art_key,
   res_deel_key,
   rekening,
   refcode,
   doorbelasten,
   lev_kpn_key,
   afn_kpn,
   bedrag
)
AS                         -- B-facturen (nieuw sinds UWVA53/Closing the loop)
     WITH afdkpn AS (SELECT * FROM uwva_v_afd_plus_prj_kpn)
     SELECT   f.fin_factuur_key factuur_key,
              f.bes_bestelopdr_key bes_opdr_key,
              NULL mld_opdr_key,
              NULL cnt_key,
              NULL res_art_key,
              NULL res_deel_key,
              x.prs_kostensoort_upper rekening,
              x.prs_kostensoort_refcode refcode,
              COALESCE (x.prs_kostensoort_doorbelasten, 0) doorbelasten,
              x.prs_kostenplaats_key lev_kpn_key,
              x.kostenplaats afn_kpn,
              --SUM(DECODE (x.prs_kostensoort_btw,
              --            1, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
              --            f.fin_factuur_totaal))
              SUM(DECODE (ud.fac_usrdata_key,
                          NULL, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
                          f.fin_factuur_totaal)) -- Uitzondering, dan excl. BTW!
                 bedrag
       FROM   fin_factuur f,
              (SELECT   DISTINCT boi.bes_bestelopdr_key,
                                 ks.prs_kostensoort_upper,
                                 ks.prs_kostensoort_refcode,
                                 ks.prs_kostensoort_doorbelasten,
                                 ks.prs_kostensoort_btw,
                                 ks.prs_kostenplaats_key,
                                 actief.kostenplaats
                 FROM   bes_bestelopdr_item boi,
                        bes_bestelling_item bbi,
                        bes_srtdeel sd,
                        bes_srtgroep sg,
                        ins_tab_discipline td,
                        prs_kostensoort ks,
                        bes_bestelling b,
                        afdkpn actief
                WHERE   boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
                        AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key
                        AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                        AND sg.ins_discipline_key = td.ins_discipline_key
                        AND td.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                        AND bbi.bes_bestelling_key = b.bes_bestelling_key
                        AND b.prs_kostenplaats_key = actief.kostenplaats_key) x,
              (SELECT * FROM fac_v_aanwezigusrdata WHERE fac_usrtab_key = 1523) ud -- Kostensrt.ExBTW
      WHERE   f.fin_factuur_statuses_key = 6                        -- Akkoord
              AND f.fin_factuur_verwijder IS NULL
              AND f.bes_bestelopdr_key = x.bes_bestelopdr_key
              AND x.prs_kostensoort_upper = ud.fac_usrdata_upper(+)
   GROUP BY   f.fin_factuur_key,
              f.bes_bestelopdr_key,
              NULL,
              NULL,
              NULL,
              NULL,
              x.prs_kostensoort_upper,
              x.prs_kostensoort_refcode,
              COALESCE (x.prs_kostensoort_doorbelasten, 0),
              x.prs_kostenplaats_key,
              x.kostenplaats
   UNION ALL               -- O-facturen (nieuw sinds UWVA53/Closing the loop)
     SELECT   f.fin_factuur_key factuur_key,
              NULL bes_opdr_key,
              f.mld_opdr_key mld_opdr_key,
              NULL cnt_key,
              NULL res_art_key,
              NULL res_deel_key,
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostensoort_upper,
                      ksv.prs_kostensoort_upper)
                 rekening,
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostensoort_refcode,
                      ksv.prs_kostensoort_refcode)
                 refcode,
              COALESCE (ksm.prs_kostensoort_doorbelasten,
                        ksv.prs_kostensoort_doorbelasten,
                        0)
                 doorbelasten,
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostenplaats_key,
                      ksv.prs_kostenplaats_key)
                 lev_kpn_key,
              actief.kostenplaats afn_kpn,
              --SUM(DECODE (
              --       ksm.prs_kostensoort_doorbelasten,
              --       1,
              --       DECODE (ksm.prs_kostensoort_btw,
              --               1, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
              --               f.fin_factuur_totaal),
              --       DECODE (ksv.prs_kostensoort_btw,
              --               1, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
              --               f.fin_factuur_totaal)
              --    ))
              SUM(DECODE (
                     ksm.prs_kostensoort_doorbelasten,
                     1,
                     DECODE (ud.fac_usrdata_key,
                             NULL, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
                             f.fin_factuur_totaal), -- Uitzondering, dan excl. BTW!
                     DECODE (ud.fac_usrdata_key,
                             NULL, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
                             f.fin_factuur_totaal)  -- Uitzondering, dan excl. BTW!
                  ))
                 bedrag
       FROM   fin_factuur f,
              mld_opdr o,
              mld_melding m,
              mld_stdmelding sm,
              ins_tab_discipline td,
              prs_kostensoort ksm,
              prs_kostensoort ksv,
              (SELECT * FROM fac_v_aanwezigusrdata WHERE fac_usrtab_key = 1523) ud, -- Kostensrt.ExBTW
              afdkpn actief
      WHERE       f.fin_factuur_statuses_key = 6                    -- Akkoord
              AND f.fin_factuur_verwijder IS NULL
              AND f.mld_opdr_key = o.mld_opdr_key
              AND o.mld_melding_key = m.mld_melding_key
              AND m.mld_stdmelding_key = sm.mld_stdmelding_key
              AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
              AND sm.mld_ins_discipline_key = td.ins_discipline_key
              AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
              AND DECODE (ksm.prs_kostensoort_doorbelasten, 1, ksm.prs_kostensoort_upper, ksv.prs_kostensoort_upper) = ud.fac_usrdata_upper(+)
              AND o.prs_kostenplaats_key = actief.kostenplaats_key
   GROUP BY   f.fin_factuur_key,
              NULL,
              f.mld_opdr_key,
              NULL,
              NULL,
              NULL,
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostensoort_upper,
                      ksv.prs_kostensoort_upper),
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostensoort_refcode,
                      ksv.prs_kostensoort_refcode),
              COALESCE (ksm.prs_kostensoort_doorbelasten,
                        ksv.prs_kostensoort_doorbelasten,
                        0),
              DECODE (ksm.prs_kostensoort_doorbelasten,
                      1, ksm.prs_kostenplaats_key,
                      ksv.prs_kostenplaats_key),
              actief.kostenplaats
   UNION ALL               -- C-facturen (nieuw sinds UWVA53/Closing the loop)
     SELECT   f.fin_factuur_key factuur_key,
              NULL bes_opdr_key,
              NULL mld_opdr_key,
              f.cnt_contract_key cnt_key,
              NULL res_art_key,
              NULL res_deel_key,
              ks.prs_kostensoort_upper rekening,
              ks.prs_kostensoort_refcode refcode,
              COALESCE (ks.prs_kostensoort_doorbelasten, 0) doorbelasten,
              ks.prs_kostenplaats_key lev_kpn_key,
              actief.kostenplaats afn_kpn,
              --SUM(DECODE (ks.prs_kostensoort_btw,
              --            1, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
              --            f.fin_factuur_totaal))
              SUM(DECODE (ud.fac_usrdata_key,
                          NULL, f.fin_factuur_totaal + f.fin_factuur_totaal_btw,
                          f.fin_factuur_totaal)) -- Uitzondering, dan excl. BTW!
                 bedrag
       FROM   fin_factuur f,
              cnt_contract c,
              ins_tab_discipline td,
              prs_kostensoort ks,
              (SELECT * FROM fac_v_aanwezigusrdata WHERE fac_usrtab_key = 1523) ud, -- Kostensrt.ExBTW
              afdkpn actief
      WHERE       f.fin_factuur_statuses_key = 6                    -- Akkoord
              AND f.fin_factuur_verwijder IS NULL
              AND f.cnt_contract_key = c.cnt_contract_key
              AND c.ins_discipline_key = td.ins_discipline_key
              AND td.prs_kostensoort_key = ks.prs_kostensoort_key(+)
              AND ks.prs_kostensoort_upper = ud.fac_usrdata_upper(+)
              AND c.prs_kostenplaats_key = actief.kostenplaats_key
   GROUP BY   f.fin_factuur_key,
              NULL,
              NULL,
              f.cnt_contract_key,
              NULL,
              NULL,
              ks.prs_kostensoort_upper,
              ks.prs_kostensoort_refcode,
              COALESCE (ks.prs_kostensoort_doorbelasten, 0),
              ks.prs_kostenplaats_key,
              actief.kostenplaats
   UNION ALL             -- Separate R-artikelen (zoals voor Closing the loop)
   SELECT   NULL factuur_key,
            NULL bes_opdr_key,
            NULL mld_opdr_key,
            NULL cnt_key,
            ra.res_rsv_artikel_key res_art_key,
            NULL res_deel_key,
            ks.prs_kostensoort_upper rekening,
            ks.prs_kostensoort_refcode refcode,
            COALESCE (ks.prs_kostensoort_doorbelasten, 0) doorbelasten,
            ks.prs_kostenplaats_key lev_kpn_key,
            actief.kostenplaats afn_kpn,
            ra.res_rsv_artikel_prijs bedrag     -- BTW afh. van kostensoort???
     FROM   res_v_aanwezigrsv_ruimte rr,
            res_v_aanwezigrsv_artikel ra,
            res_artikel a,
            res_discipline rdi,
            prs_kostensoort ks,
            afdkpn actief
    WHERE       rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
            AND ra.res_status_bo_key = 5
            --AND TRUNC (ra.res_rsv_artikel_levering) <= TRUNC(SYSDATE)???
            --AND ra.res_rsv_artikel_prijs <> 0
            --AND ra.res_rsv_artikel_prijs IS NOT NULL
            AND ra.res_artikel_key = a.res_artikel_key
            AND a.res_discipline_key = rdi.ins_discipline_key
            AND rdi.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND rr.prs_kostenplaats_key = actief.kostenplaats_key
   UNION ALL                 -- Separate R-delen (zoals voor Closing the loop)
   SELECT   NULL factuur_key,
            NULL bes_opdr_key,
            NULL mld_opdr_key,
            NULL cnt_key,
            NULL res_art_key,
            rd.res_rsv_deel_key res_deel_key,
            ks.prs_kostensoort_upper rekening,
            ks.prs_kostensoort_refcode refcode,
            COALESCE (ks.prs_kostensoort_doorbelasten, 0) doorbelasten,
            ks.prs_kostenplaats_key lev_kpn_key,
            actief.kostenplaats afn_kpn,
            rd.res_rsv_deel_prijs bedrag        -- BTW afh. van kostensoort???
     FROM   res_v_aanwezigrsv_ruimte rr,
            res_v_aanwezigrsv_deel rd,
            res_deel d,
            res_discipline rdi,
            prs_kostensoort ks,
            afdkpn actief
    WHERE       rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
            AND rd.res_status_bo_key = 5
            --AND TRUNC (rd.res_rsv_deel_tot) <= TRUNC(SYSDATE)???
            --AND rd.res_rsv_deel_prijs <> 0
            --AND rd.res_rsv_deel_prijs IS NOT NULL
            AND rd.res_deel_key = d.res_deel_key
            AND d.res_discipline_key = rdi.ins_discipline_key
            AND rdi.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND rr.prs_kostenplaats_key = actief.kostenplaats_key;

-- Zonder de R van BROC, want daarin geven de 'uwva_v_rap_cat...'-raps inzicht!
/* Formatted on 3-11-2017 14:54:06 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW uwva_v_rap_broc_frozen
(
   fclt_f_exportdatum,
   fclt_f_leverancier,
   fclt_f_factuurnr,
   fclt_f_status,
   fclt_f_kostensoort,
   fclt_f_kostenplaats,
   broc_type,
   facilitornr,
   bedrag_incl,
   bedrag_excl
)
AS                         -- B-facturen (nieuw sinds UWVA53/Closing the loop)
     SELECT TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd') exportdatum,
            b.prs_bedrijf_naam,
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            x.prs_kostensoort_upper,         -- Incl. prs_kostensoort_refcode?
            x.prs_kostenplaats_nr afn_kpn,
            'Bestelling' broc_type,
            TO_CHAR (x.bes_bestelling_key),    -- Of liever bes_bestelopdr_id?
            SUM (f.fin_factuur_totaal + f.fin_factuur_totaal_btw) bedrag_incl,
            SUM (f.fin_factuur_totaal) bedrag_excl
       FROM fin_factuur f,
            fin_factuur_statuses fs,
            fac_tracking t,
            (SELECT DISTINCT boi.bes_bestelopdr_key,
                             ks.prs_kostensoort_upper,
                             ks.prs_kostensoort_refcode,
                             ks.prs_kostensoort_doorbelasten,
                             ks.prs_kostensoort_btw,
                             ks.prs_kostenplaats_key,
                             b.bes_bestelling_key,
                             kp.prs_kostenplaats_nr
               FROM bes_bestelopdr_item boi,
                    bes_bestelling_item bbi,
                    bes_srtdeel sd,
                    bes_srtgroep sg,
                    ins_tab_discipline td,
                    prs_kostensoort ks,
                    bes_bestelling b,
                    prs_kostenplaats kp
              WHERE boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
                    AND bbi.bes_srtdeel_key = sd.bes_srtdeel_key
                    AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                    AND sg.ins_discipline_key = td.ins_discipline_key
                    AND td.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                    AND bbi.bes_bestelling_key = b.bes_bestelling_key
                    AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key) x,
            bes_bestelopdr bo,
            prs_bedrijf b
      WHERE     f.fin_factuur_statuses_key = 7                     -- Verwerkt
            AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
            AND f.fin_factuur_key = t.fac_tracking_refkey
            AND t.fac_srtnotificatie_key = 145                       -- FINVER
            AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
            AND f.bes_bestelopdr_key = x.bes_bestelopdr_key
            AND x.bes_bestelopdr_key = bo.bes_bestelopdr_key
            AND bo.prs_bedrijf_key = b.prs_bedrijf_key
   GROUP BY TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd'),
            b.prs_bedrijf_naam,
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            x.prs_kostensoort_upper,
            x.prs_kostenplaats_nr,
            'Bestelling',
            x.bes_bestelling_key
   UNION ALL               -- O-facturen (nieuw sinds UWVA53/Closing the loop)
     SELECT TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd') exportdatum,
            COALESCE (b.prs_bedrijf_naam, pf.prs_perslid_naam_full) prs_bedrijf_naam,
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            COALESCE (ksm.prs_kostensoort_upper, ksv.prs_kostensoort_upper), -- Incl. prs_kostensoort_refcode?
            kp.prs_kostenplaats_nr afn_kpn,
            'Opdracht' broc_type,
            o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
            SUM (f.fin_factuur_totaal + f.fin_factuur_totaal_btw) bedrag_incl,
            SUM (f.fin_factuur_totaal) bedrag_excl
       FROM fin_factuur f,
            fin_factuur_statuses fs,
            fac_tracking t,
            mld_opdr o,
            mld_melding m,
            mld_stdmelding sm,
            ins_tab_discipline td,
            prs_kostensoort ksm,
            prs_kostensoort ksv,
            prs_kostenplaats kp,
            prs_bedrijf b,
            prs_v_perslid_fullnames_all pf
      WHERE     f.fin_factuur_statuses_key = 7                     -- Verwerkt
            AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
            AND f.fin_factuur_key = t.fac_tracking_refkey
            AND t.fac_srtnotificatie_key = 145                       -- FINVER
            AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
            AND f.mld_opdr_key = o.mld_opdr_key
            AND o.mld_melding_key = m.mld_melding_key
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
            AND sm.mld_ins_discipline_key = td.ins_discipline_key
            AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
            AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
            AND o.mld_uitvoerende_keys = pf.prs_perslid_key(+)
   GROUP BY TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd'),
            COALESCE (b.prs_bedrijf_naam, pf.prs_perslid_naam_full),
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            COALESCE (ksm.prs_kostensoort_upper, ksv.prs_kostensoort_upper),
            kp.prs_kostenplaats_nr,
            'Opdracht',
            o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
   UNION ALL               -- C-facturen (nieuw sinds UWVA53/Closing the loop)
     SELECT TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd') exportdatum,
            b.prs_bedrijf_naam,
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            ks.prs_kostensoort_upper,        -- Incl. prs_kostensoort_refcode?
            kp.prs_kostenplaats_nr afn_kpn,
            'Contract' broc_type,
            c.cnt_contract_nummer_intern,
            SUM (f.fin_factuur_totaal + f.fin_factuur_totaal_btw) bedrag_incl,
            SUM (f.fin_factuur_totaal) bedrag_excl
       FROM fin_factuur f,
            fin_factuur_statuses fs,
            fac_tracking t,
            cnt_contract c,
            ins_tab_discipline td,
            prs_kostensoort ks,
            prs_kostenplaats kp,
            prs_bedrijf b
      WHERE     f.fin_factuur_statuses_key = 7                     -- Verwerkt
            AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
            AND f.fin_factuur_key = t.fac_tracking_refkey
            AND t.fac_srtnotificatie_key = 145                       -- FINVER
            AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
            AND f.cnt_contract_key = c.cnt_contract_key
            AND c.ins_discipline_key = td.ins_discipline_key
            AND td.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND c.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
   GROUP BY TO_CHAR (t.fac_tracking_datum, 'yyyy-mm-dd'),
            b.prs_bedrijf_naam,
            f.fin_factuur_nr,
            fs.fin_factuur_statuses_omschr,
            ks.prs_kostensoort_upper,
            kp.prs_kostenplaats_nr,
            'Contract',
            c.cnt_contract_nummer_intern;

/* Formatted on 7-5-2012 18:02:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE uwva_select_broc (p_applname   IN VARCHAR2,
                                              p_applrun    IN VARCHAR2)
AS
   -- Cursor loopt over een tijdelijke tabel met daarin opgebouwd alle regels
   -- van de doorbelasting gebaseerd op BOC-facturen en R-reserveringen.
   CURSOR c1
   IS
      WITH uba AS (SELECT   * FROM uwva_v_broc_actual),
          afdkpn AS (SELECT   * FROM uwva_v_afd_plus_prj_kpn)
        SELECT   groepering,
                 kpn,
                 rekening,
                 refcode,
                 prj_code,
                 prj_activiteit,
                 analyse,
                 TO_CHAR (bedrag, '999999999D99') bedrag
          FROM   (                         -- Doorbelasting B-facturen per kpn
                  SELECT     '#1' groepering,
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn) kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             aprj.prj_kostenplaats prj_code,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST')
                                prj_activiteit,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                                analyse,
                             SUM (v.bedrag) bedrag
                      FROM   uba v, afdkpn aprj
                     WHERE       v.factuur_key IS NOT NULL
                             AND v.bes_opdr_key IS NOT NULL
                             AND v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                  GROUP BY   '#1',
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn),
                             v.rekening,
                             v.refcode,
                             aprj.prj_kostenplaats,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST'),
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                  UNION ALL                -- Doorbelasting O-facturen per kpn
                    SELECT   '#2' groepering,
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn) kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             aprj.prj_kostenplaats prj_code,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'DIENST')
                                prj_activiteit,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                                analyse,
                             SUM (v.bedrag) bedrag
                      FROM   uba v, afdkpn aprj
                     WHERE       v.factuur_key IS NOT NULL
                             AND v.mld_opdr_key IS NOT NULL
                             AND v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                  GROUP BY   '#2',
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn),
                             v.rekening,
                             v.refcode,
                             aprj.prj_kostenplaats,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST'),
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                  UNION ALL                -- Doorbelasting C-facturen per kpn
                    SELECT   '#3' groepering,
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn) kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             aprj.prj_kostenplaats prj_code,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'DIENST')
                                prj_activiteit,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                                analyse,
                             SUM (v.bedrag) bedrag
                      FROM   uba v, afdkpn aprj
                     WHERE       v.factuur_key IS NOT NULL
                             AND v.cnt_key IS NOT NULL
                             AND v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                  GROUP BY   '#3',
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn),
                             v.rekening,
                             v.refcode,
                             aprj.prj_kostenplaats,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST'),
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                  UNION ALL               -- Doorbelasting R-artikelen per kpn
                    SELECT   '#4' groepering,
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn) kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             aprj.prj_kostenplaats prj_code,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'DIENST')
                                prj_activiteit,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                                analyse,
                             SUM (v.bedrag) bedrag
                      FROM   uba v, afdkpn aprj
                     WHERE       v.factuur_key IS NULL
                             AND v.res_art_key IS NOT NULL
                             AND v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                  GROUP BY   '#4',
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn),
                             v.rekening,
                             v.refcode,
                             aprj.prj_kostenplaats,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST'),
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                  UNION ALL                   -- Doorbelasting R-delen per kpn
                    SELECT   '#5' groepering,
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn) kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             aprj.prj_kostenplaats prj_code,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'DIENST')
                                prj_activiteit,
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                                analyse,
                             SUM (v.bedrag) bedrag
                      FROM   uba v, afdkpn aprj
                     WHERE       v.factuur_key IS NULL
                             AND v.res_deel_key IS NOT NULL
                             AND v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                  GROUP BY   '#5',
                             COALESCE (aprj.afd_kostenplaats, v.afn_kpn),
                             v.rekening,
                             v.refcode,
                             aprj.prj_kostenplaats,
                             DECODE (aprj.prj_kostenplaats,
                                     NULL, NULL,
                                     'DIENST'),
                             DECODE (aprj.prj_kostenplaats, NULL, NULL, 'GLE')
                  UNION ALL                         -- Tegenwaarde BROC-kosten
                    SELECT   '#9' groepering,
                             kp.prs_kostenplaats_upper kpn,
                             v.rekening rekening,
                             v.refcode refcode,
                             NULL prj_code,
                             NULL prj_activiteit,
                             'GLE' analyse,
                             SUM (v.bedrag) * -1 bedrag
                      FROM   uba v, afdkpn aprj, prs_kostenplaats kp
                     WHERE       v.doorbelasten = 1
                             AND v.afn_kpn = aprj.kostenplaats -- alleen actieve kpn!
                             AND v.lev_kpn_key = kp.prs_kostenplaats_key(+)
                  GROUP BY   '#9',
                             kp.prs_kostenplaats_upper,
                             v.rekening,
                             v.refcode,
                             NULL,
                             NULL,
                             'GLE') x
         WHERE   x.rekening IS NOT NULL AND x.refcode IS NOT NULL
      ORDER BY   groepering, kpn, bedrag;

   -- Cursor loopt over een tijdelijke tabel met daarin alle BOC-facturen
   -- die op AV moeten worden gezet.
   CURSOR c2a
   IS
        SELECT   v.factuur_key
          FROM   uwva_v_broc_actual v
         WHERE   v.factuur_key IS NOT NULL                          -- Akkoord
      ORDER BY   v.factuur_key;

   -- Cursor loopt over een tijdelijke tabel met daarin alle R-artikelen
   -- die op AV moeten worden gezet.
   CURSOR c2b
   IS
        SELECT   ra.res_rsv_ruimte_key, v.res_art_key
          FROM   uwva_v_broc_actual v, res_rsv_artikel ra
         WHERE       v.factuur_key IS NULL
                 AND v.res_art_key IS NOT NULL
                 AND v.res_art_key = ra.res_rsv_artikel_key
      ORDER BY   ra.res_rsv_ruimte_key, v.res_art_key;

   -- Cursor loopt over een tijdelijke tabel met daarin alle R-delen
   -- die op AV moeten worden gezet.
   CURSOR c2c
   IS
        SELECT   rd.res_rsv_ruimte_key, v.res_deel_key
          FROM   uwva_v_broc_actual v, res_rsv_deel rd
         WHERE       v.factuur_key IS NULL
                 AND v.res_deel_key IS NOT NULL
                 AND v.res_deel_key = rd.res_rsv_deel_key
      ORDER BY   rd.res_rsv_ruimte_key, v.res_deel_key;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   export_date      DATE;
   v_holiday        NUMBER;
   regelnr          NUMBER;
BEGIN
   -- IF 3e werkdag van de maand THEN
   -- 1. Clear log
   -- 2. Clear export-tabel
   -- 3. E-export; insert E-regels in export-tabel (uit broc-actual)
   -- 4. F-freeze; zet BOC-facturen op AV
   -- 5. F-freeze; zet R-artikelen op AV
   -- 6. F-freeze; zet R-delen op AV
   -- END IF;
   -- NB. Status/levering van onderliggende BROCs speelt bij journalisering
   --     géén rol (binnen UWV); bij matching en in rapportage-sfeer wel!

   export_date := SYSDATE;

   SELECT   COUNT ( * )
     INTO   v_holiday
     FROM   MLD_VRIJE_DAGEN
    WHERE   TRUNC (MLD_VRIJE_DAGEN_DATUM) = TRUNC (export_date);

   -- IF 3e werkdag van de maand (én geen weekend én ook geen vrije dag)!
   -- count_work_days(d1,d2) bepaalt #werkdagen van d1 tot d2 (als d1=d2,
   -- dan return 0); daarom bepalen tov. laatste dag van vorige maand!
   IF     FAC.count_work_days (
             TO_DATE (TO_CHAR (export_date, 'yyyymm') || '01', 'yyyymmdd')
             - 1,
             export_date
          ) = 3
      AND TO_CHAR (export_date, 'd') BETWEEN '2' AND '6'
      AND v_holiday = 0
   THEN
      -- 2. Clear export-tabel
      DELETE FROM   uwva_raw_journaalregels
            WHERE   export_appl = p_applname;

      COMMIT;

      regelnr := 0;

      -- 3. E-export; insert E-regels in export-tabel (uit broc-actual)
      FOR rec1 IN c1
      LOOP
         INSERT INTO uwva_raw_journaalregels (export_appl,
                                              export_datum,
                                              export_index,
                                              kostensoort_oms,
                                              bedrag,
                                              kostensoort_refcode,
                                              afd_kpn,
                                              prj_kpn,
                                              prj_activiteit,
                                              prj_analyse,
                                              functie)
           VALUES   (p_applname,
                     export_date,
                     regelnr,
                     rec1.rekening,
                     rec1.bedrag,
                     rec1.refcode,
                     rec1.kpn,
                     rec1.prj_code,
                     rec1.prj_activiteit,
                     rec1.analyse,
                     'E');

         regelnr := regelnr + 1;

         COMMIT;
      END LOOP;

      fac.writelog (p_applname,
                    'S',
                    'Aantal BROC-regels/DEFINITIEF: ' || TO_CHAR (regelnr),
                    '');

      COMMIT;

      -- 4. F-freeze; zet BOC-facturen op AV
      FOR rec1 IN c2a
      LOOP
         UPDATE   fin_factuur f
            SET   fin_factuur_statuses_key = 7                           -- AV
          WHERE   f.fin_factuur_key = rec1.factuur_key;

         fac.trackaction ('FINVER',
                          rec1.factuur_key,
                          33759,                               -- Facilitor???
                          NULL,
                          NULL);

         COMMIT;
      END LOOP;

      -- 5. F-freeze; zet R-artikelen op AV
      FOR rec1 IN c2b
      LOOP
         UPDATE   res_rsv_artikel ra
            SET   ra.res_status_bo_key = 6                               -- AV
          WHERE   ra.res_rsv_artikel_key = rec1.res_art_key;

         fac.trackaction ('RESVER',
                          rec1.res_rsv_ruimte_key,
                          33759,                               -- Facilitor???
                          NULL,
                          NULL);

         COMMIT;
      END LOOP;

      -- 6. F-freeze; zet R-delen op AV
      FOR rec1 IN c2c
      LOOP
         UPDATE   res_rsv_deel rd
            SET   rd.res_status_bo_key = 6                               -- AV
          WHERE   rd.res_rsv_deel_key = rec1.res_deel_key;

         fac.trackaction ('RESVER',
                          rec1.res_rsv_ruimte_key,
                          33759,                               -- Facilitor???
                          NULL,
                          NULL);

         COMMIT;
      END LOOP;

      -- Let op: 3e param is 'E' omdat deze regel bedoeld is als feedback voor
      --         Infobeheer!
      v_errormsg :=
         'BROC export AV verklaren is beëindigd zonder foutmeldingen';
      fac.writelog (p_applname,
                    'E',
                    v_errormsg,
                    '');

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


/* Formatted on 25-5-2012 10:00:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_rap_fin_afloop_factuur
(
   fclt_f_uitvoerende,
   fclt_f_boc_type,
   fclt_f_factuurnr,
   fclt_f_exportdatum,
   openstaand,
   doorbelast,
   totaal
)
AS
   WITH finver
          AS (  SELECT   fac_tracking_refkey,
                         MAX (fac_tracking_datum) fac_tracking_datum
                  FROM   fac_tracking
                 WHERE   fac_srtnotificatie_key = 145                -- FINVER
                         AND fac_tracking_datum >
                               TRUNC (ADD_MONTHS (SYSDATE, -24), 'YYYY')
              GROUP BY   fac_tracking_refkey)
     SELECT   x.prs_bedrijf_naam uitvoerende,
              x.broc_type boc_type,
              x.fin_factuur_nr factuurnr,
              MAX (TO_CHAR (x.last_av, 'dd-mm-yyyy')) laatste_db,
              SUM (x.ingevoerd) + SUM (x.goedgekeurd) openstaand,
              SUM (x.doorbelast) doorbelast,
              SUM (x.ingevoerd) + SUM (x.goedgekeurd) + SUM (x.doorbelast)
                 totaal
       FROM   (  SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Bestelling' broc_type,
                          MAX (t.fac_tracking_datum) last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          bes_bestelopdr bo,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Bestelling'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Bestelling'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Bestelling'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Bestelling'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Opdracht' broc_type,
                          MAX (t.fac_tracking_datum) last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          mld_opdr o,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Opdracht'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Opdracht'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Opdracht'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Opdracht'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Contract' broc_type,
                          MAX (t.fac_tracking_datum) last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          cnt_contract c,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Contract'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Contract'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Contract'
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          f.fin_factuur_nr,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, f.fin_factuur_nr, 'Contract') x
   GROUP BY   x.prs_bedrijf_naam, x.fin_factuur_nr, x.broc_type;

CREATE OR REPLACE VIEW uwva_v_rap_fin_afloop_bedrijf
(
   fclt_f_uitvoerende,
   fclt_f_boc_type,
   fclt_f_exportdatum,
   openstaand,
   doorbelast,
   totaal
)
AS
   WITH finver
          AS (  SELECT   fac_tracking_refkey,
                         MAX (fac_tracking_datum) fac_tracking_datum
                  FROM   fac_tracking
                 WHERE   fac_srtnotificatie_key = 145                -- FINVER
                         AND fac_tracking_datum >
                               TRUNC (ADD_MONTHS (SYSDATE, -24), 'YYYY')
              GROUP BY   fac_tracking_refkey)
     SELECT   x.prs_bedrijf_naam uitvoerende,
              x.broc_type boc_type,
              TO_CHAR (x.last_av, 'dd-mm-yyyy') exportdatum,
              SUM (x.ingevoerd) + SUM (x.goedgekeurd) openstaand,
              SUM (x.doorbelast) doorbelast,
              SUM (x.ingevoerd) + SUM (x.goedgekeurd) + SUM (x.doorbelast)
                 totaal
       FROM   (  SELECT   b.prs_bedrijf_naam,
                          'Bestelling' broc_type,
                          t.fac_tracking_datum last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          bes_bestelopdr bo,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam,
                          'Bestelling',
                          t.fac_tracking_datum
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Bestelling', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Bestelling', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Bestelling' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, bes_bestelopdr bo, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
                          AND bo.prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Bestelling', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Opdracht' broc_type,
                          t.fac_tracking_datum last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          mld_opdr o,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Opdracht', t.fac_tracking_datum
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Opdracht', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Opdracht', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Opdracht' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, mld_opdr o, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.mld_opdr_key = o.mld_opdr_key
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Opdracht', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Contract' broc_type,
                          t.fac_tracking_datum last_av,
                          SUM (f.fin_factuur_totaal) doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f,
                          finver t,
                          cnt_contract c,
                          prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 7
                          AND f.fin_factuur_key = t.fac_tracking_refkey
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Contract', t.fac_tracking_datum
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          SUM (f.fin_factuur_totaal) goedgekeurd,
                          0 ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 6
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Contract', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          SUM (f.fin_factuur_totaal) ingevoerd,
                          0 afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 2
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Contract', NULL
               UNION ALL
                 SELECT   b.prs_bedrijf_naam,
                          'Contract' broc_type,
                          NULL last_av,
                          0 doorbelast,
                          0 goedgekeurd,
                          0 ingevoerd,
                          SUM (f.fin_factuur_totaal) afgekeurd
                   FROM   fin_factuur f, cnt_contract c, prs_bedrijf b
                  WHERE       f.fin_factuur_statuses_key = 1
                          AND f.cnt_contract_key = c.cnt_contract_key
                          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
               GROUP BY   b.prs_bedrijf_naam, 'Contract', NULL) x
   GROUP BY   x.prs_bedrijf_naam,
              x.broc_type,
              TO_CHAR (x.last_av, 'dd-mm-yyyy');


-- UWVA#16763
-- Procedure voor de import van facturen (van leverancier)
/* Formatted on 10-6-2013 13:24:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE uwva_import_factuur (p_import_key IN NUMBER)
AS
   c_delim            VARCHAR2 (1) := ';';
   v_newline          fac_imp_file.fac_imp_file_line%TYPE;
   v_errormsg         VARCHAR2 (1000);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   header_is_valid    NUMBER;
   -- De importvelden
   v_bestelnummer     VARCHAR2 (100);
   v_regelnummer      VARCHAR2 (100);
   v_besteldatum      VARCHAR2 (100);
   v_omschrijving     VARCHAR2 (1000);
   v_nrbesteld        VARCHAR2 (100);
   v_stukexcl         VARCHAR2 (100);
   v_stukincl         VARCHAR2 (100);
   v_eenheid          VARCHAR2 (100);
   v_afleverdatum     VARCHAR2 (100);
   v_nrgeleverd       VARCHAR2 (100);
   v_kostenplaats     VARCHAR2 (100);
   v_totaalexcl       VARCHAR2 (100);
   v_btwcode          VARCHAR2 (100);
   v_totaalbtw        VARCHAR2 (100);
   v_totaalincl       VARCHAR2 (100);
   v_factuurnr        VARCHAR2 (100);
   v_check_dec_sign   NUMBER (5, 2);

   CURSOR cfactuur
   IS
        SELECT   fac_imp_file_line,
                 LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, '')))
                    regellengte
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;

   v_rec              cfactuur%ROWTYPE;
BEGIN
   header_is_valid := 0;

   DELETE FROM   uwva_imp_factuur;

   DELETE   imp_log
    WHERE   imp_log_applicatie = 'FACTUUR';

   -- Check the client decimal settings.
   -- Do not convert the ',' to a '.' if the client decimal separator is a ','!
   SELECT   fac.safe_to_number ('2,5') INTO v_check_dec_sign FROM DUAL;

   FOR v_rec IN cfactuur
   LOOP
      v_newline := v_rec.fac_imp_file_line;

      fac.imp_getfield (v_newline, c_delim, v_bestelnummer);
      fac.imp_getfield (v_newline, c_delim, v_regelnummer);
      fac.imp_getfield (v_newline, c_delim, v_besteldatum);
      fac.imp_getfield (v_newline, c_delim, v_omschrijving);
      fac.imp_getfield (v_newline, c_delim, v_nrbesteld);
      fac.imp_getfield (v_newline, c_delim, v_stukexcl);
      fac.imp_getfield (v_newline, c_delim, v_stukincl);
      fac.imp_getfield (v_newline, c_delim, v_eenheid);
      fac.imp_getfield (v_newline, c_delim, v_afleverdatum);
      fac.imp_getfield (v_newline, c_delim, v_nrgeleverd);
      fac.imp_getfield (v_newline, c_delim, v_kostenplaats);
      fac.imp_getfield (v_newline, c_delim, v_totaalexcl);
      fac.imp_getfield (v_newline, c_delim, v_btwcode);
      fac.imp_getfield (v_newline, c_delim, v_totaalbtw);
      fac.imp_getfield (v_newline, c_delim, v_totaalincl);
      fac.imp_getfield (v_newline, c_delim, v_factuurnr);

      -- We skippen alles todat we een geldige header tegenkomen (zie specs
      -- UWVA#16763).
      IF (header_is_valid = 0)
      THEN
         IF     UPPER (v_bestelnummer) = 'BESTELNUMMER'
            AND UPPER (v_regelnummer) = 'OPDRACHTREGELNUMMER'
            AND UPPER (v_besteldatum) = 'BESTELDATUM'
            AND UPPER (v_omschrijving) = 'ARTIKEL OMSCHRIJVING'
            AND UPPER (v_btwcode) = 'BTW CODE'
            AND UPPER (v_factuurnr) = 'FACTUURNR'
         THEN
            header_is_valid := 1;
         END IF;
      ELSIF (v_rec.regellengte > 1)                  -- Lege regels overslaan!
      THEN
         IF v_check_dec_sign IS NULL
         THEN
            v_nrbesteld := REPLACE (SUBSTR (v_nrbesteld, 1, 11), ',', '.');
            v_stukexcl := REPLACE (SUBSTR (v_stukexcl, 1, 11), ',', '.');
            v_stukincl := REPLACE (SUBSTR (v_stukincl, 1, 11), ',', '.');
            v_nrgeleverd := REPLACE (SUBSTR (v_nrgeleverd, 1, 11), ',', '.');
            v_totaalexcl := REPLACE (SUBSTR (v_totaalexcl, 1, 11), ',', '.');
            v_totaalbtw := REPLACE (SUBSTR (v_totaalbtw, 1, 11), ',', '.');
            v_totaalincl := REPLACE (SUBSTR (v_totaalincl, 1, 11), ',', '.');
         ELSE
            v_nrbesteld := SUBSTR (v_nrbesteld, 1, 11);
            v_stukexcl := SUBSTR (v_stukexcl, 1, 11);
            v_stukincl := SUBSTR (v_stukincl, 1, 11);
            v_nrgeleverd := SUBSTR (v_nrgeleverd, 1, 11);
            v_totaalexcl := SUBSTR (v_totaalexcl, 1, 11);
            v_totaalbtw := SUBSTR (v_totaalbtw, 1, 11);
            v_totaalincl := SUBSTR (v_totaalincl, 1, 11);
         END IF;

         INSERT INTO uwva_imp_factuur (bestelnummer,
                                       regelnummer,
                                       besteldatum,
                                       omschrijving,
                                       nrbesteld,
                                       stukexcl,
                                       stukincl,
                                       eenheid,
                                       afleverdatum,
                                       nrgeleverd,
                                       kostenplaats,
                                       totaalexcl,
                                       btwcode,
                                       totaalbtw,
                                       totaalincl,
                                       factuurnr)
           VALUES   (RTRIM (SUBSTR (v_bestelnummer, 1, 15)),
                     RTRIM (SUBSTR (v_regelnummer, 1, 5)),
                     RTRIM (SUBSTR (v_besteldatum, 1, 8)),
                     RTRIM (SUBSTR (v_omschrijving, 1, 60)),
                     RTRIM (SUBSTR (v_nrbesteld, 1, 10)),
                     RTRIM (SUBSTR (v_stukexcl, 1, 10)),
                     RTRIM (SUBSTR (v_stukincl, 1, 10)),
                     RTRIM (SUBSTR (v_eenheid, 1, 30)),
                     RTRIM (SUBSTR (v_afleverdatum, 1, 8)),
                     RTRIM (SUBSTR (v_nrgeleverd, 1, 10)),
                     RTRIM (SUBSTR (v_kostenplaats, 1, 8)),
                     RTRIM (SUBSTR (v_totaalexcl, 1, 10)),
                     RTRIM (SUBSTR (v_btwcode, 1, 1)),
                     RTRIM (SUBSTR (v_totaalbtw, 1, 10)),
                     RTRIM (SUBSTR (v_totaalincl, 1, 10)),
                     RTRIM (SUBSTR (v_factuurnr, 1, 30)));

         COMMIT;
      END IF;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'Error: ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        'Inleesproces facturen afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE uwva_update_factuur (p_import_key IN NUMBER)
AS
   -- Een factuur(record) wordt aangemaakt voor iedere factuurnr/bestelnummer-
   -- combinatie en dan wordt voor iedere regel een regel(record) aangemaakt.
   CURSOR cfactuurregel
   IS
        SELECT   imp.*, btw.*
          FROM      (SELECT   factuurnr,
                              bestelnummer,
                              regelnummer,
                              fac.safe_to_date (besteldatum, 'yyyymmdd')
                                 besteldatum,
                              fac.safe_to_number (totaalexcl) totaalexcl,
                              --fac.safe_to_number (totaalbtw) totaalbtw,
                              fac.safe_to_number (COALESCE (totaalbtw, '0'))
                                 totaalbtw,
                              fac.safe_to_number (nrbesteld) nrbesteld,
                              fac.safe_to_number (nrgeleverd) nrgeleverd,
                              afleverdatum,
                                 omschrijving
                              || ' ('
                              || nrbesteld
                              || '/'
                              || nrgeleverd
                              || ')'
                                 omschrijving,
                              eenheid,
                              kostenplaats,
                              btwcode
                       FROM   uwva_imp_factuur) imp
                 LEFT JOIN
                    fin_btwtabelwaarde btw
                 ON imp.btwcode = btw.fin_btwtabelwaarde_code
                    AND btw.fin_btwtabel_key = 1               -- NL standaard
      ORDER BY   imp.factuurnr, imp.bestelnummer, imp.regelnummer;

   v_errormsg             VARCHAR2 (1000);
   oracle_err_mes         VARCHAR2 (200);
   c_i                    NUMBER;
   c_teller               NUMBER;
   c_newfactuurkey        NUMBER;
   c_factuurregel         NUMBER;
   c_fac_type             VARCHAR2 (1);
   c_prefix1              VARCHAR2 (1);
   c_bestelnummer_index   NUMBER;
   c_bestelnummer_s1      VARCHAR2 (20);
   c_bestelnummer_s2      VARCHAR2 (20);
   c_bestelnummer_t       VARCHAR2 (40);
   c_old_bestelnummer     uwva_imp_factuur.bestelnummer%TYPE;
   c_old_factuurnr        uwva_imp_factuur.factuurnr%TYPE;
   --c_write_bestelnummer   VARCHAR2 (20);
   c_bestelopdr_id        VARCHAR2 (20);
   c_fact_tot             NUMBER;
   c_fact_totbtw          NUMBER;
   c_find                 BOOLEAN;
   --c_find_bestelnummer    BOOLEAN;
   c_mld_opdr_key         NUMBER (10);
   c_cnt_contract_key     NUMBER (10);
   c_bes_bestelopdr_key   NUMBER (10);
   c_prs_bedrijf_naam     VARCHAR2 (100);
   --c_opmerking            VARCHAR2 (200);
   c_fact_datum           DATE;
   c_rollback             BOOLEAN;

   FUNCTION getfactype (pbestelnr IN VARCHAR2)
      RETURN VARCHAR2
   IS
      c_prefix1   VARCHAR2 (1);
      lfactype    VARCHAR2 (1);
   BEGIN
      IF LENGTH (pbestelnr) = 0
      THEN
         RETURN '';
      END IF;

      c_prefix1 := SUBSTR (pbestelnr, 1, 1);

      IF SUBSTR (pbestelnr, 1, 2) = 'O-'
      THEN
         lfactype := 'B';                                        -- Bestelling
      ELSIF ( ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90) OR (ASCII(c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122)) AND ASCII(c_prefix1) != 67 AND ASCII(c_prefix1) != 99)
      THEN
         lfactype := 'O';                                -- Opdracht (Melding)
      ELSIF (ASCII (c_prefix1) = 67 OR ASCII (c_prefix1) = 99)
      THEN
         lfactype := 'C';                                          -- Contract
      ELSE
         uwva_imp_writelog (p_import_key,
                            'I',
                            'Kan besteltype niet bepalen voor ' || pbestelnr,
                            pbestelnr);
      END IF;

      RETURN lfactype;
   END;
BEGIN
   c_old_bestelnummer := '';
   c_old_factuurnr := '';
   c_teller := 0;
   c_fact_datum := SYSDATE;
   c_rollback := FALSE;

   -- Facturen
   FOR rc IN cfactuurregel
   LOOP
      IF rc.bestelnummer = c_old_bestelnummer
         AND rc.factuurnr = c_old_factuurnr
      THEN
         -- Toevoegen nieuwe factuurregel; c_newfactuurkey nog steeds actueel!
         c_factuurregel := c_factuurregel + 1;

         BEGIN
            INSERT INTO fin_factuurregel (
                                             fin_factuur_key,
                                             fin_factuurregel_nr,
                                             fin_factuurregel_totaal,
                                             fin_factuurregel_btw,
                                             fin_factuurregel_omschrijving,
                                             fin_factuurregel_referentie,
                                             fin_btwtabelwaarde_key
                       )
              VALUES   (
                           c_newfactuurkey,
                           rc.regelnummer,
                           rc.totaalexcl,
                           rc.totaalbtw,
                           SUBSTR (rc.omschrijving, 1, 60),
                           rc.kostenplaats,
                           DECODE (rc.totaalbtw,
                                   0, 1,                 -- NL standaard 0/Nul
                                   rc.fin_btwtabelwaarde_key)
                       );

            uwva_imp_writelog (
               p_import_key,
               'I',
                  'Factuurregel '
               || c_factuurregel
               || ' toegevoegd aan factuur '
               || c_newfactuurkey,
               rc.bestelnummer || ' / ' || rc.factuurnr
            );
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg := 'Error ' || oracle_err_mes;
               uwva_imp_writelog (
                  p_import_key,
                  'W',
                  'Kan factuur(regel) niet toevoegen! ' || v_errormsg,
                  rc.bestelnummer || ' / ' || rc.factuurnr
               );
               c_rollback := TRUE;
         END;

         c_teller := c_teller + 1;
      ELSE
         -- Toevoegen nieuwe factuur + factuurregel!
         c_old_bestelnummer := rc.bestelnummer;
         c_old_factuurnr := rc.factuurnr;
         c_factuurregel := 1;
         c_bestelnummer_index := INSTR (rc.bestelnummer, '/');
         c_mld_opdr_key := NULL;
         c_cnt_contract_key := NULL;
         c_bes_bestelopdr_key := NULL;

         IF c_bestelnummer_index = 0
         THEN
            c_bestelnummer_s1 := rc.bestelnummer;
            c_bestelnummer_s2 := '';
         ELSE
            c_bestelnummer_s1 :=
               SUBSTR (rc.bestelnummer, 1, c_bestelnummer_index - 1);
            c_bestelnummer_s2 :=
               SUBSTR (rc.bestelnummer, c_bestelnummer_index + 1);
         END IF;

         c_find := FALSE;
         --c_find_bestelnummer := FALSE;
         c_fac_type := '';

         c_fac_type := getfactype (rc.bestelnummer);

         IF c_fac_type = 'O'
         THEN
            IF     c_bestelnummer_index != 0
               AND ASCII (c_prefix1) >= 48
               AND ASCII (c_prefix1) <= 57
            -- Geen prefix maar het is wel een opdracht (afgedwongen door /).
            THEN
               -- c_bestelnummer_s1 bevat geen prefix
               -- c_bestelnummer_s2 bevat het gedeelte na de /
               c_find := TRUE;
            ELSE
               c_i := 1;

               LOOP
                  IF (ASCII (SUBSTR (c_bestelnummer_s1, c_i, 1)) >= 48
                      AND ASCII (SUBSTR (c_bestelnummer_s1, c_i, 1)) <= 57)
                  THEN
                     c_find := TRUE;
                  ELSE
                     c_i := c_i + 1;
                  END IF;

                  EXIT WHEN (c_find OR c_i > LENGTH (c_bestelnummer_s1));
               END LOOP;

               IF c_find
               THEN
                  c_bestelnummer_s1 := SUBSTR (c_bestelnummer_s1, c_i);
               ELSE
                  uwva_imp_writelog (
                     p_import_key,
                     'W',
                     'Kan bestelnummer niet bepalen!',
                     rc.bestelnummer || ' / ' || rc.factuurnr
                  );
                  c_rollback := TRUE;
               END IF;
            END IF;
         ELSIF c_fac_type = 'C'
         THEN
            -- Haal prefix 'C' of 'c' eraf.
            c_bestelnummer_s1 := SUBSTR (c_bestelnummer_s1, 2);
            c_find := TRUE;
         ELSIF c_fac_type = 'B'
         THEN
            -- Haal prefix O- eraf; c_bestelnummer_s2 is goed.
            c_bestelnummer_s1 := SUBSTR (c_bestelnummer_s1, 3);
            c_find := TRUE;
         END IF;

         -- c_bestelnummer_s1 bevat ordernummer
         -- c_bestelnummer_s2 bevat volgnummer van de (bestel)opdracht; bij
         -- contracten is deze waarde leeg
         -- Vind nu de onderliggende 'O', 'C' of 'B'.
         IF c_fac_type = 'O'
         THEN
            -- Bestaat de opdracht wel én is deze geldig!?
            BEGIN
               SELECT mld_opdr_key
                 INTO c_mld_opdr_key
                 FROM mld_opdr o, mld_typeopdr mto
                WHERE mld_melding_key = fac.safe_to_number (c_bestelnummer_s1)
                      AND mld_opdr_bedrijfopdr_volgnr = fac.safe_to_number (c_bestelnummer_s2)
                      AND mld_statusopdr_key NOT IN (1, 2, 3, 10) -- Ongeldige opdrachten (nog)
                      AND o.mld_typeopdr_key = mto.mld_typeopdr_key
                      AND mto.mld_typeopdr_kosten = 1;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg := 'Error ' || oracle_err_mes;
                  uwva_imp_writelog (
                     p_import_key,
                     'I',
                        'Kan opdrachtreferentie '
                     || rc.bestelnummer
                     || ' niet vinden! '
                     || v_errormsg,
                     c_bestelnummer_s1 || '/' || c_bestelnummer_s2
                  );
                  c_find := FALSE;
            END;
         ELSIF c_fac_type = 'C'
         THEN
            -- Bestaat het contract wel (zie ook UWVA#23124 + UWVA#24359 + UWVA#25579)!?
            BEGIN
               SELECT   cnt_contract_key
                 INTO   c_cnt_contract_key
                 FROM   (SELECT   cnt_contract_key
                           FROM   cnt_v_aanwezigcontract c
                          WHERE   c.cnt_contract_nummer_intern =
                                     c_bestelnummer_s1
                                  AND c.ins_discipline_key != 360 -- Abonnementen
                                  AND c.cnt_contract_status = 0 -- NIET Gesloten!
                                  AND (NOT EXISTS -- Bij >1 versie relevantste irt. besteldatum!
                                          (SELECT   1
                                             FROM   cnt_v_aanwezigcontract
                                            WHERE   cnt_contract_nummer_intern =
                                                       c.cnt_contract_nummer_intern
                                                    AND cnt_contract_versie !=
                                                          c.cnt_contract_versie)
                                       OR rc.besteldatum BETWEEN TRUNC(c.cnt_contract_looptijd_van)
                                                             AND  TRUNC(c.cnt_contract_looptijd_tot))
                         UNION ALL -- UWVA#25579: Voor abonnementen altijd laatste versie!
                         SELECT   c.cnt_contract_key
                           FROM   cnt_v_aanwezigcontract c
                          WHERE   c.cnt_contract_nummer_intern =
                                     c_bestelnummer_s1
                                  AND c.ins_discipline_key = 360 -- Abonnementen
                                  AND c.cnt_contract_status = 0 -- NIET Gesloten!
                                  AND NOT EXISTS -- Alleen laatste versies van contracten!
                                        (SELECT   1
                                           FROM   cnt_v_aanwezigcontract
                                          WHERE   cnt_contract_nummer_intern =
                                                     c.cnt_contract_nummer_intern
                                                  AND cnt_contract_versie >
                                                        c.cnt_contract_versie));
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg := 'Error ' || oracle_err_mes;
                  uwva_imp_writelog (
                     p_import_key,
                     'I',
                        'Kan contractreferentie '
                     || rc.bestelnummer
                     || ' niet vinden! '
                     || v_errormsg,
                     c_bestelnummer_s1
                  );
                  c_find := FALSE;
            END;
         ELSIF c_fac_type = 'B'
         THEN
            -- Bestaat de bestelopdracht wel én is deze geldig!?
            BEGIN
               IF c_bestelnummer_s2 IS NULL            -- Kan dat (nog) wel???
               THEN
                  c_bestelnummer_t := c_bestelnummer_s1;
               ELSE
                  c_bestelnummer_t :=
                     c_bestelnummer_s1 || '/' || c_bestelnummer_s2;
               END IF;

               -- UWVA#22649: Om igv. voorkomens met dezelfde bestelopdr_id de
               -- juiste te pakken, hier filteren op een status waarin een
               -- factuur mag worden ontvangen (In Bestelling/4, Geleverd/6 of
               -- Verwerkt/7).
               -- UWVA#24723: Je vind één bestelopdracht of anders handmatig
               -- maar oppakken! -> Later nog maar eens dieper analyseren of
               -- het mogelijk is in 1x de enige juiste te vinden...
               SELECT   bes_bestelopdr_key
                 INTO   c_bes_bestelopdr_key
                 FROM   bes_bestelopdr
                WHERE   bes_bestelopdr_id = c_bestelnummer_t
                        AND bes_bestelopdr_status IN (4, 6, 7); -- Geldige bestelopdrachten
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg := 'Error ' || oracle_err_mes;
                  uwva_imp_writelog (
                     p_import_key,
                     'I',
                        'Kan bestelopdrachtreferentie '
                     || rc.bestelnummer
                     || ' niet vinden! '
                     || v_errormsg,
                     c_bestelnummer_s1 || '/' || c_bestelnummer_s2
                  );
                  c_find := FALSE;
            END;
         END IF;

         --c_opmerking := '';

         BEGIN
            SELECT   fin_s_fin_factuur_key.NEXTVAL
              INTO   c_newfactuurkey
              FROM   DUAL;

            SELECT   SUM (fac.safe_to_number (totaalexcl)) totaal,
                     SUM (fac.safe_to_number (COALESCE (totaalbtw, '0')))
                        totaalbtw
              INTO   c_fact_tot, c_fact_totbtw
              FROM   uwva_imp_factuur
             WHERE   bestelnummer = rc.bestelnummer
                     AND factuurnr = rc.factuurnr;

            INSERT INTO fin_factuur (
                                        fin_factuur_key,
                                        fin_factuur_totaal,
                                        fin_factuur_totaal_btw,
                                        mld_opdr_key,
                                        cnt_contract_key,
                                        bes_bestelopdr_key,
                                        prs_perslid_key_user,
                                        fin_factuur_datum,
                                        fin_factuur_opmerking,
                                        fin_factuur_statuses_key,
                                        fin_factuur_nr,
                                        fin_factuur_boekmaand,
                                        fin_factuur_bron -- UWVA#38195: 1=Excel
                       )
              VALUES   (
                           c_newfactuurkey,
                           c_fact_tot,
                           c_fact_totbtw,
                           c_mld_opdr_key,
                           c_cnt_contract_key,
                           c_bes_bestelopdr_key,
                           NULL,
                           c_fact_datum,
                           'Geïmporteerde factuur',       -- ' || c_opmerking,
                           2,
                           rc.factuurnr,
                              SUBSTR (rc.afleverdatum, 1, 4)
                           || '-'
                           || SUBSTR (rc.afleverdatum, 5, 2),
                           1
                       );

            fac.trackaction ('FINNEW',
                             c_newfactuurkey,
                             NULL,
                             NULL,
                             NULL);

            INSERT INTO fin_factuurregel (
                                             fin_factuur_key,
                                             fin_factuurregel_nr,
                                             fin_factuurregel_totaal,
                                             fin_factuurregel_btw,
                                             fin_factuurregel_omschrijving,
                                             fin_factuurregel_referentie,
                                             fin_btwtabelwaarde_key
                       )
              VALUES   (
                           c_newfactuurkey,
                           rc.regelnummer,
                           rc.totaalexcl,
                           rc.totaalbtw,
                           SUBSTR (rc.omschrijving, 1, 60),
                           rc.kostenplaats,
                           DECODE (rc.totaalbtw,
                                   0, 1,                 -- NL standaard 0/Nul
                                   rc.fin_btwtabelwaarde_key)
                       );

            --IF c_find_bestelnummer
            --THEN
            --   c_write_bestelnummer := c_bestelopdr_id;
            --ELSE
            --   c_write_bestelnummer := rc.bestelnummer;
            --END IF;

            uwva_imp_writelog (
               p_import_key,
               'I',
                  'Factuur '
               || c_newfactuurkey
               || ' toegevoegd met factuurregel '
               || c_factuurregel,
               --c_write_bestelnummer || ' / ' || rc.factuurnr
               rc.bestelnummer || ' / ' || rc.factuurnr
            );
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg := 'Error ' || oracle_err_mes;
               uwva_imp_writelog (
                  p_import_key,
                  'W',
                  'Kan factuur(regel) niet toevoegen! ' || v_errormsg,
                  rc.bestelnummer || '/' || rc.factuurnr
               );
               c_rollback := TRUE;
         END;

         c_teller := c_teller + 1;
      END IF;
   END LOOP;

   -- Zet facturen automatisch op Akkoord als deze aan match-criteria voldoen.
   FOR rc IN (  SELECT   f.fin_factuur_key factuur_key
                  FROM   fin_factuur f
                 WHERE   f.fin_factuur_datum = c_fact_datum
              ORDER BY   f.fin_factuur_key)
   LOOP
      FIN.matchandsetfactuur (rc.factuur_key, FALSE);
   --COMMIT;
   END LOOP;

   -- UWVA#19018: Notificeer niet goedgekeurde facturen naar de budgethouders
   -- (1 mail per persoon). Hierbij maakt het niet veel uit of ze net zijn
   -- geimporteerd of al eerder (of handmatig ingevoerd). Medium wordt bepaald
   -- door mode bij FININF.
   fac.putjobnotifications ('uwva_v_noti_finreminder', NULL, 0);

   --SELECT   COUNT ( * )
   --  INTO   c_i
   --  FROM   imp_log
   -- WHERE   fac_import_key = p_import_key AND imp_log_status IN ('E', 'W');

   IF c_rollback = TRUE
   THEN
      uwva_imp_writelog (p_import_key,
                         'E',
                         v_errormsg,
                         'Importproces facturen afgebroken!');
      ROLLBACK;
   ELSE
      COMMIT;
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'Error ' || oracle_err_mes;
      uwva_imp_writelog (p_import_key,
                         'E',
                         v_errormsg,
                         'Importproces facturen afgebroken!');
      ROLLBACK;
END;
/


-- UWVA#19018: Notificeer niet gefiatteerde facturen naar de budgethouders (1 mail per persoon)
-- Maakt hierbij niet veel uit of ze net zijn geimporteerd of vroeger (of handmatig ingevoerd)
-- Medium wordt bepaalt door mode bij FININF
-- Wordt aangeroepen na factuurimport
-- UWVA#27940: Alleen actieve kostenplaatsen
/* Formatted on 25-11-2013 21:30:58 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_noti_finreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
     SELECT   'FININF',
              '',
              prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1)
                 budgethouder,
              'Fiatteringsverzoek voor ' || COUNT (f.fin_factuur_key)
              || DECODE (COUNT (f.fin_factuur_key),
                         1, ' factuur.',
                         ' facturen.'),
              MIN (f.fin_factuur_key), -- Dummy key, althans een willekeurige!
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f, prs_v_aanwezigkostenplaats kp
      WHERE       f.fin_factuur_verwijder IS NULL
              AND f.fin_factuur_statuses_key = 2
              AND f.fin_factuur_datum > SYSDATE - 0.1 / 24 -- Minder dan 6 minuten geleden
              AND fin.getfactuurkostenplaats (f.fin_factuur_key) =
                    kp.prs_kostenplaats_key
              AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
              AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                   OR kp.prs_kostenplaats_eind IS NULL)
   GROUP BY   prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1);


--UWVA#20283 rapportage tbv combinatieconrolle mismatch bij opdrachten
CREATE OR REPLACE VIEW uwva_v_rap_combinatievalidatie
(
   fclt_f_factuurnr,
   opdrachtnummer,
   factuurdatum,
   kostenplaats,
   factuurbedrag,
   fclt_f_uitvoerende,
   fclt_f_status
)
AS
   SELECT   TO_CHAR (fff.fin_factuur_key),
            o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
               opdrachtnr,
            TO_CHAR (fff.fin_factuur_datum, 'DD-MM-YYYY') factuurdatum,
               k.prs_kostenplaats_nr
            || ' ('
            || k.prs_kostenplaats_omschrijving
            || ')'
               kostenplaats,
            fff.fin_factuur_totaal,
            u.naam uitvoerende,
            fs.fin_factuur_statuses_omschr
     FROM   fin_factuur fff,
            mld_opdr o,
            mld_melding m,
            fin_factuur_statuses fs,
            mld_v_uitvoerende u,
            prs_kostenplaats k,
            prs_kostensoort ks,
            mld_stdmelding std
    WHERE       fff.prs_kostensoort_key IS NOT NULL
            AND fff.bes_bestelopdr_key IS NULL
            AND fff.cnt_contract_key IS NULL
            AND fff.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
            AND o.mld_opdr_key = fff.mld_opdr_key
            AND m.mld_melding_key = o.mld_melding_key
            AND o.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND u.mld_uitvoerende_key(+) = o.mld_uitvoerende_keys
            AND fff.prs_kostensoort_key = ks.prs_kostensoort_key
            AND std.mld_stdmelding_key = m.mld_stdmelding_key
            AND NOT EXISTS
                  (SELECT   1
                     FROM   mld_opdr o2,
                            prs_kostenplaats k2,
                            prs_kostencombinatie kc2,
                            fin_factuur f2
                    WHERE   o.mld_opdr_key = f2.mld_opdr_key
                            AND o2.prs_kostenplaats_key =
                                  k2.prs_kostenplaats_key
                            AND k2.prs_kostenplaatsgrp_key =
                                  kc2.prs_kostenplaatsgrp_key
                            AND kc2.prs_kostensoort_key =
                                  fff.prs_kostensoort_key);

--UWVA#20417 rapport dat controleerd of de kostensoort ingevuld bij de opdracht overeenkomst met de gewenste kostensoort van de uitvoerende
CREATE OR REPLACE VIEW uwva_v_rap_kostsrtuitvoerende
(
   fclt_f_factuurnr,
   opdrachtnummer,
   factuurdatum,
   kostenplaats,
   factuurbedrag,
   fclt_f_uitvoerende,
   fclt_f_status,
   kostensoort_opdracht,
   kostensoort_uitvoerende
)
AS
   SELECT   TO_CHAR (f.fin_factuur_nr),
            o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
               opdrachtnr,
            TO_CHAR (f.fin_factuur_datum, 'DD-MM-YYYY') factuurdatum,
               k.prs_kostenplaats_nr
            || ' ('
            || k.prs_kostenplaats_omschrijving
            || ')'
               kostenplaats,
            f.fin_factuur_totaal,
            u.prs_bedrijf_naam,
            fs.fin_factuur_statuses_omschr,
            COALESCE (pk1.prs_kostensoort_oms, pk2.prs_kostensoort_oms)
               kostensoort_opdracht,
            pk3.prs_kostensoort_oms kostensoort_uitvoerende
     FROM   fin_factuur f,
            mld_opdr o,
            prs_bedrijf u,
            fin_factuur_statuses fs,
            mld_melding m,
            mld_stdmelding std,
            mld_discipline dsc,
            prs_kenmerklink,
            prs_kostenplaats k,
            prs_kostensoort pk1,
            prs_kostensoort pk2,
            prs_kostensoort pk3
    WHERE       f.mld_opdr_key IS NOT NULL
            AND o.mld_opdr_key = f.mld_opdr_key
            AND u.prs_bedrijf_key = o.mld_uitvoerende_keys
            AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
            AND m.mld_melding_key = o.mld_melding_key
            AND std.mld_stdmelding_key = m.mld_stdmelding_key
            AND dsc.ins_discipline_key = std.mld_ins_discipline_key
            AND prs_link_key(+) = prs_bedrijf_key
            AND o.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND pk1.prs_kostensoort_key(+) = std.prs_kostensoort_key
            AND pk2.prs_kostensoort_key(+) = dsc.prs_kostensoort_key
            AND pk3.prs_kostensoort_key(+) = prs_kenmerklink_waarde
            AND prs_kenmerk_key = 1272          -- kostensoort bij een relatie
            AND (pk1.prs_kostensoort_key != prs_kenmerklink_waarde
                 OR pk2.prs_kostensoort_key != prs_kenmerklink_waarde);


-- UWVA#21021: Rapportage met factuurregels van Koninklijke van der Most (BES & MLD)
-- prs_bedrijf_keys: 32678 - "Koninklijke van der Most (BESTELLINGEN)"
--                   55025 - "Koninklijke van der Most" (MLD)
CREATE OR REPLACE VIEW uwva_v_rap_facturen_vdmost
AS
   SELECT opdrachtnr hide_f_sort,
          TO_CHAR(nr) fclt_f_nr,
          TO_CHAR(datum, 'DD-MM-YYYY') fclt_d_datum,
          factuurregel,
          type,
          opdrachtnr,
          regelnr,
          omschrijving,
          kostenplaats,
          excl_BTW,
          btw_tarief,
          incl_BTW,
          DECODE (status, 'Ingevoerd', 'In behandeling',
                          status)
             fclt_f_status,
          budgethouder fclt_f_budgethouder
     FROM (
         SELECT ff.fin_factuur_key nr,
                ff.fin_factuur_datum datum,
         --       pb.prs_bedrijf_naam bedrijf,
                ff.fin_factuur_nr factuurregel,
                'Opdracht' type,
                'A'||mo.mld_melding_key||'/'||mo.mld_opdr_bedrijfopdr_volgnr opdrachtnr,
                ffr.fin_factuurregel_nr regelnr,
                ffr.fin_factuurregel_omschrijving omschrijving,
                ffr.fin_factuurregel_referentie kostenplaats,
                ffr.fin_factuurregel_totaal excl_BTW,
                COALESCE (fbtw.fin_btwtabelwaarde_perc, 0)||'%' btw_tarief,
                ffr.fin_factuurregel_totaal + ffr.fin_factuurregel_btw incl_BTW,
                ffs.fin_factuur_statuses_omschr status,
                pp.prs_perslid_naam_full budgethouder
           FROM fin_factuurregel ffr, fin_factuur ff, fin_factuur_statuses ffs,
                mld_opdr mo,
                prs_bedrijf pb,
                fin_btwtabelwaarde fbtw,
                prs_v_perslid_fullnames pp
          WHERE     pb.prs_bedrijf_key = 55025
                AND mo.mld_uitvoerende_keys = pb.prs_bedrijf_key
                AND ff.mld_opdr_key = mo.mld_opdr_key
                AND ff.fin_factuur_statuses_key < 7
                AND ffs.fin_factuur_statuses_key = ff.fin_factuur_statuses_key
                AND ffr.fin_factuur_key = ff.fin_factuur_key
                AND fbtw.fin_btwtabelwaarde_key(+) = ffr.fin_btwtabelwaarde_key
                AND prs.getkpverantwoordelijke (
                        fin.getfactuurkostenplaats (ff.fin_factuur_key),
                        2,
                        -1) = pp.prs_perslid_key
      UNION ALL
         SELECT ff.fin_factuur_key nr,
                ff.fin_factuur_datum datum,
         --       pb.prs_bedrijf_naam bedrijf,
                ff.fin_factuur_nr factuurregel,
                'Bestelling' type,
                bbo.bes_bestelopdr_id opdrachtnr,
                ffr.fin_factuurregel_nr regelnr,
                ffr.fin_factuurregel_omschrijving omschrijving,
                ffr.fin_factuurregel_referentie kostenplaats,
                ffr.fin_factuurregel_totaal excl_BTW,
                COALESCE (fbtw.fin_btwtabelwaarde_perc, 0)||'%' btw_tarief,
                ffr.fin_factuurregel_totaal + ffr.fin_factuurregel_btw incl_BTW,
                ffs.fin_factuur_statuses_omschr status,
                pp.prs_perslid_naam_full budgethouder
           FROM fin_factuurregel ffr, fin_factuur ff, fin_factuur_statuses ffs,
                bes_bestelopdr bbo,
                prs_bedrijf pb,
                fin_btwtabelwaarde fbtw,
                prs_v_perslid_fullnames pp
          WHERE     pb.prs_bedrijf_key = 32678
                AND bbo.prs_bedrijf_key = pb.prs_bedrijf_key
                AND ff.bes_bestelopdr_key = bbo.bes_bestelopdr_key
                AND ff.fin_factuur_statuses_key < 7
                AND ffs.fin_factuur_statuses_key = ff.fin_factuur_statuses_key
                AND ffr.fin_factuur_key = ff.fin_factuur_key
                AND fbtw.fin_btwtabelwaarde_key(+) = ffr.fin_btwtabelwaarde_key
                AND prs.getkpverantwoordelijke (
                        fin.getfactuurkostenplaats (ff.fin_factuur_key),
                        2,
                        -1) = pp.prs_perslid_key
   )
   ORDER BY 1;


-- UWVA#21019: Reminders naar budgethouders dat ze facturen moeten accorderen
--             (na 1 week en na 3 weken)
-- UWVA#27940: Alleen actieve kostenplaatsen
/* Formatted on 25-11-2013 21:30:58 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW uwva_v_noti_factuurreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
     SELECT   'CUST11',
              '',
              prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1)
                 budgethouder,
                 'RAPPEL: '
              || COUNT (f.fin_factuur_key)
              || ' niet automatisch goedgekeurde factuurregel'
              || DECODE (COUNT (f.fin_factuur_key), 1, '. (', 's. (')
              || TO_CHAR (TRUNC (SYSDATE - 7), 'DD-MM-YYYY')
              || ')',
              MIN (f.fin_factuur_key), -- Dummy key, althans een willekeurige!
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f, prs_v_aanwezigkostenplaats kp
      WHERE       f.fin_factuur_verwijder IS NULL
              AND f.fin_factuur_statuses_key = 2
              AND TRUNC (f.fin_factuur_datum) = TRUNC (SYSDATE - 7) -- 1 week (7 dagen) geleden
              AND fin.getfactuurkostenplaats (f.fin_factuur_key) =
                    kp.prs_kostenplaats_key
              AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
              AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                   OR kp.prs_kostenplaats_eind IS NULL)
   GROUP BY   prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1)
   UNION
     SELECT   'CUST12',
              '',
              prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1)
                 budgethouder,
                 'TWEEDE RAPPEL: '
              || COUNT (f.fin_factuur_key)
              || ' niet automatisch goedgekeurde factuurregel'
              || DECODE (COUNT (f.fin_factuur_key), 1, '. (', 's. (')
              || TO_CHAR (TRUNC (SYSDATE - 21), 'DD-MM-YYYY')
              || ')',
              MIN (f.fin_factuur_key), -- Dummy key, althans een willekeurige!
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f, prs_v_aanwezigkostenplaats kp
      WHERE       f.fin_factuur_verwijder IS NULL
              AND f.fin_factuur_statuses_key = 2
              AND TRUNC (f.fin_factuur_datum) = TRUNC (SYSDATE - 21) -- 3 weken (21 dagen) geleden
              AND fin.getfactuurkostenplaats (f.fin_factuur_key) =
                    kp.prs_kostenplaats_key
              AND kp.prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%'
              AND (kp.prs_kostenplaats_eind > TRUNC (SYSDATE)
                   OR kp.prs_kostenplaats_eind IS NULL)
   GROUP BY   prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1);


-- UWVA#20124: Rapportage voor doorbelasten geannuleerde bestellingen
CREATE OR REPLACE VIEW uwva_v_rap_bes_annul_doorbel
AS
   SELECT ba.bes_bestelling_key hide_f_sort
         ,ba.nummer
         ,ba.ins_discipline_key fclt_3d_discipline_key
         ,ba.ins_discipline_omschrijving fclt_f_catalogus
         ,fac.safe_to_number(ba.bestelbedrag) bestelbedrag
--         ,ba.te_laat * fac.safe_to_number(COALESCE(MAX(km.bes_kenmerkbestell_waarde), '100') ) pct
--         ,ROUND(ba.te_laat * fac.safe_to_number(COALESCE(MAX(km.bes_kenmerkbestell_waarde), '100') )/100 * ba.bestelbedrag, 2) verwacht
         ,ROUND(ba.bes_bestelling_leverdatum - ba.fac_tracking_datum) dagen_voor_horizon
         ,COALESCE( SUM(ff.fin_factuur_totaal), 0) gefactureerd_exc
         ,COALESCE( SUM(ff.fin_factuur_totaal+ff.fin_factuur_totaal_btw), 0) gefactureerd_inc
--         ,SUM(fin_factuur_totaal_btw) gefactureerd_btw
--         ,CASE fin.tolerantiematch (ba.ins_discipline_key,
--                                    'B',
--                                    COALESCE( SUM(ff.fin_factuur_totaal), 0),
--                                    ba.te_laat * fac.safe_to_number(COALESCE(MAX(km.bes_kenmerkbestell_waarde), '100') )/100 * ba.bestelbedrag)
--             WHEN 1 THEN 'OK'
--             WHEN 0 THEN 'NOK'
--             ELSE 'nnb'
--          END ok_nok
     FROM (
             SELECT DISTINCT bb.bes_bestelling_key
                   ,'A-'||bb.bes_bestelling_key nummer
                   ,cat.ins_discipline_omschrijving
                   ,cat.ins_discipline_key
                   ,SUM(bboi.bes_bestelopdr_item_aantal*bboi.bes_bestelopdr_item_prijs) bestelbedrag
                   ,bboi.bes_bestelopdr_key
                   ,bb.bes_bestelling_leverdatum
                   ,ft.fac_tracking_datum
                   ,MAX(art.bes_srtdeel_annuleerdagen) hor
                   ,CASE
                       WHEN (   bb.bes_bestelling_leverdatum
                              < ft.fac_tracking_datum + MAX(art.bes_srtdeel_annuleerdagen))
                          THEN 1
                       ELSE 0
                    END te_laat
               FROM bes_bestelling bb,
                    bes_bestelling_item bbi,
                    bes_bestelopdr_item bboi,
                    bes_discipline cat,
                    bes_srtgroep grp,
                    bes_srtdeel art,
                    fac_tracking ft,
                    fac_srtnotificatie fsn
              WHERE     bb.bes_bestelling_parentkey IS NULL
                    AND bb.bes_bestelling_status = 8
                    AND bbi.bes_bestelling_key = bb.bes_bestelling_key
                    AND bboi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key
                    AND art.bes_srtdeel_key = bbi.bes_srtdeel_key
                    AND grp.bes_srtgroep_key = art.bes_srtgroep_key
                    AND cat.ins_discipline_key = grp.ins_discipline_key
                    AND fsn.fac_srtnotificatie_code = 'BES2CA'
                    AND ft.fac_srtnotificatie_key = fsn.fac_srtnotificatie_key
                    AND ft.fac_tracking_refkey = bboi.bes_bestelopdr_key
                    AND ins_discipline_verwijder IS NULL
                    AND bes_srtgroep_verwijder IS NULL
                    AND bes_srtdeel_verwijder IS NULL
           GROUP BY bb.bes_bestelling_key
                   ,bboi.bes_bestelopdr_key
                   ,cat.ins_discipline_omschrijving
                   ,cat.ins_discipline_key
                   ,bb.bes_bestelling_leverdatum
                   ,ft.fac_tracking_datum)  ba
       LEFT OUTER JOIN
          (  SELECT *
               FROM fin_factuur
              WHERE     bes_bestelopdr_key IS NOT NULL
                    AND fin_factuur_statuses_key != 1) ff
          ON ff.bes_bestelopdr_key = ba.bes_bestelopdr_key
       LEFT OUTER JOIN
          (  SELECT bes_bestelling_key, bes_kenmerkbestell_waarde
               FROM bes_kenmerk bk
                   ,bes_kenmerkbestell bkb
              WHERE     bk.bes_srtkenmerk_key = 641
                    AND bkb.bes_kenmerk_key = bk.bes_kenmerk_key) km
          ON km.bes_bestelling_key = ba.bes_bestelling_key
   GROUP BY ba.bes_bestelling_key
           ,ba.nummer
           ,ba.ins_discipline_omschrijving
           ,ba.ins_discipline_key
           ,ba.bestelbedrag
           ,ba.bes_bestelling_leverdatum
           ,ba.fac_tracking_datum
           ,ba.te_laat;


CREATE OR REPLACE PROCEDURE uwva_import_factuur_lease (
   p_import_key IN NUMBER)
AS
   -- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist)
   -- Variabelelijst
   -- v_leveranciernr: 1
   -- v_factuurnr: 2            (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
   -- v_factuurdatum: 3
   -- v_ordernr: 4              (VERPLICHT, anders is status van factuur "Incompleet")
   -- v_locatie: 5
   -- v_afleverdatum: 6
   -- v_omschrijving: 7
   -- v_aantal: 8
   -- v_kostprijs: 9            (VERPLICHT, anders is status van factuur "Incompleet")
   -- v_btw_bedrag: 10          (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
   -- v_btw: 11                 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
   -- v_docid: 12
   -- v_debiteur_nr: 13
   -- v_opmerking: 14
   -- v_btw_verlegd: 15         (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
   -- v_kenmerk1: 16
   -- v_kenmerk2: 17
   -- v_kenmerk3: 18
   -- v_kenmerk4: 19
   -- v_kenmerk5: 20
   -- v_boekmaand: 21           (GELDIG, Indien gevuld dan moet er een geldige jaar-maand combinatie staan. Andere waarden leidt tot "Incompleet")
   -- Eerst geprobeerd via nette array, geeft problemen met type buiten package, en in package lukt niet omdat
   -- de import in Facilitor package-loos is (en niet 1-2-3 zo kan worden gemaakt vanwege alle bestaande klanten)
   -- v_seq_of_columns ListOfInteger := (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);

   -- Dus dan maar via een string, en ook op slimme wijze, nl alsof het een ingelezen factuur-record is met p_fielddelimitor
   v_seq_of_columns   VARCHAR (100);
-- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen.

-- Als leveranciersnr en factuurnr b.v. zijn omgedraaid in het CSV-formaat,
-- dan factuurimport ListOfInteger := (2,1,3,4,5,6,7,8,9,10,11,12);
-- v_seq_of_columns := '2;1;3;4;5;6;7;8;9;10;11;12';

-- Als leveranciersnr NIET in CSV staat, dan factuurimport ListOfInteger := (0,2,3,4,5,6,7,8,9,10,11,12);
-- v_seq_of_columns := '0;2;3;4;5;6;7;8;9;10;11;12';
-- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blift LEEG.
BEGIN
   v_seq_of_columns := '0;1;0;8;0;0;4;0;11;13;12;0;0;0;0;3;10;5;0;0;0';
   fac_import_factuur_body (p_import_key, v_seq_of_columns);

   -- Stap 1: haal de header van de factuur uit de import tabel
   DELETE fac_imp_factuur
    WHERE UPPER (ordernr) = 'KENTEKEN' AND fac_import_key = p_import_key;

   -- Stap 2: zet de juiste kostenplaats in kenmerkveld 12 voor berijderskosten
   UPDATE fac_imp_factuur f
      SET f.kenmerk12 = '122203'
    WHERE fac_import_key = p_import_key
          AND f.kenmerk1 IN
                   (SELECT c.fac_usrdata_code
                      FROM fac_usrdata c, fac_usrtab t
                     where     c.fac_usrtab_key = t.fac_usrtab_key
                           and c.fac_usrdata_verwijder IS NULL
                           and t.fac_usrtab_naam = '122203');

   -- Stap 3: zet de juiste kostenplaats in kenmerkveld 12 voor leasekosten
   UPDATE fac_imp_factuur f
      SET f.kenmerk12 = '451105'
    WHERE fac_import_key = p_import_key
          AND f.kenmerk1 IN
                   (SELECT c.fac_usrdata_code
                      FROM fac_usrdata c, fac_usrtab t
                     where     c.fac_usrtab_key = t.fac_usrtab_key
                           and c.fac_usrdata_verwijder IS NULL
                           and t.fac_usrtab_naam = '451105');

   -- Stap 4:
   -- * zet het kenteken in kenmerkveld 11
   -- * de factuurdatum is gelijk aan de inleesdatum
   UPDATE fac_imp_factuur f
      SET f.kenmerk11 = f.ordernr,
          f.factuurdatum = (SELECT TO_CHAR (SYSDATE, 'dd-mm-yyyy') FROM DUAL)
    WHERE fac_import_key = p_import_key
          AND f.kenmerk12 IN ('122203', '451105');

   -- Stap 5: Haal voor de berijderskosten kostenplaats 122203 het juiste contractnummer erbij obv kenteken, personeelsnummer en contracttype (disc. key = 426)
   -- Indien er geen berijdersovereenkomst gevonden kan worden blijft het veld ordernr leeg
   UPDATE fac_imp_factuur f
      SET f.ordernr =  f.kenmerk11 || '/' || f.kenmerk2
    WHERE fac_import_key = p_import_key AND f.kenmerk12 = '122203';

   -- Stap 6: Voeg prefix C toe aan het ordernummer
   UPDATE fac_imp_factuur f
      SET f.ordernr = CONCAT ('C', f.ordernr)
    WHERE     fac_import_key = p_import_key
          AND f.kenmerk12 IN ('122203', '451105')
          AND f.ordernr IS NOT NULL;

   COMMIT;
END;
/


CREATE OR REPLACE PROCEDURE uwva_update_factuur_lease (
   p_import_key IN NUMBER)
AS
   -- Een factuur(record) wordt aangemaakt voor iedere factuurnr/bestelnummer-
   -- combinatie en dan wordt voor iedere regel een regel(record) aangemaakt.
   CURSOR cfactuurregel
   IS
        SELECT imp.*, btw.*
          FROM    (SELECT factuurnr,
                          ordernr bestelnummer,
                          kenmerk3 regelnummer,
                          NULL besteldatum,
                          kostprijs totaalexcl,
                          btw_bedrag totaalbtw,
                          NULL nrbesteld,
                          NULL nrgeleverd,
                          afleverdatum,
                          omschrijving,
                          NULL eenheid,
                          kenmerk12 kostenplaats,
                          btw btwcode,
                          fac_import_key,
                          fac_imp_file_index
                     FROM fac_imp_factuur
                    WHERE fac_import_key = p_import_key) imp -- UWVA#36062: historische regels zonder fac_import_key moeten niet meegenomen worden in deze update
               LEFT JOIN
                  fin_btwtabelwaarde btw
               ON imp.btwcode = TO_CHAR (btw.fin_btwtabelwaarde_perc)
                  AND btw.fin_btwtabel_key = 1                 -- NL standaard
      ORDER BY imp.factuurnr, imp.bestelnummer, imp.regelnummer;

   v_errormsg               VARCHAR2 (1000);
   oracle_err_mes           VARCHAR2 (200);
   c_i                      NUMBER;
   c_teller                 NUMBER;
   c_newfactuurkey          NUMBER;
   c_factuurregel           NUMBER;
   c_fin_factuurregel_key   NUMBER;
   c_fac_type               VARCHAR2 (1);
   c_prefix1                VARCHAR2 (1);
   c_bestelnummer_index     NUMBER;
   c_bestelnummer_s1        VARCHAR2 (20);
   c_bestelnummer_s2        VARCHAR2 (20);
   c_bestelnummer_t         VARCHAR2 (40);
   c_old_bestelnummer       uwva_imp_factuur.bestelnummer%TYPE;
   c_old_factuurnr          uwva_imp_factuur.factuurnr%TYPE;
   --c_write_bestelnummer   VARCHAR2 (20);
   c_bestelopdr_id          VARCHAR2 (20);
   c_fact_tot               NUMBER;
   c_fact_totbtw            NUMBER;
   c_find                   BOOLEAN;
   --c_find_bestelnummer    BOOLEAN;
   -- c_mld_opdr_key           NUMBER (10);
   c_cnt_contract_key       NUMBER (10);
   --c_bes_bestelopdr_key     NUMBER (10);
   c_prs_bedrijf_naam       VARCHAR2 (100);
   --c_opmerking            VARCHAR2 (200);
   c_fact_datum             DATE;
   c_rollback               BOOLEAN;

   FUNCTION getfactype (pbestelnr IN VARCHAR2)
      RETURN VARCHAR2
   IS
      c_prefix1   VARCHAR2 (1);
      lfactype    VARCHAR2 (1);
   BEGIN
      IF LENGTH (pbestelnr) = 0
      THEN
         RETURN '';
      END IF;

      c_prefix1 := SUBSTR (pbestelnr, 1, 1);

      IF (ASCII (c_prefix1) = 67 OR ASCII (c_prefix1) = 99)
      THEN
         lfactype := 'C';                                          -- Contract
      ELSE
         uwva_imp_writelog (
            p_import_key,
            'I',
            'Kan soort factuurregel niet bepalen voor ' || pbestelnr,
            pbestelnr);
      END IF;

      RETURN lfactype;
   END;
BEGIN
   c_old_bestelnummer := '';
   c_old_factuurnr := '';
   c_teller := 0;
   c_fact_datum := SYSDATE;
   c_rollback := FALSE;

   -- Facturen
   FOR rc IN cfactuurregel
   LOOP
      IF rc.bestelnummer = c_old_bestelnummer
         AND rc.factuurnr = c_old_factuurnr
      THEN
         -- Toevoegen nieuwe factuurregel; c_newfactuurkey nog steeds actueel!
         -- UWVA#36788 referentie leeg laten en hier dus niet meer de kostenplaats meegeven
         c_factuurregel := c_factuurregel + 1;

         BEGIN
            INSERT INTO fin_factuurregel (fin_factuur_key,
                                          fin_factuurregel_nr,
                                          fin_factuurregel_totaal,
                                          fin_factuurregel_btw,
                                          fin_factuurregel_omschrijving,
                                          --  fin_factuurregel_referentie,
                                          fin_btwtabelwaarde_key)
                VALUES (c_newfactuurkey,
                        rc.regelnummer,
                        rc.totaalexcl,
                        rc.totaalbtw,
                        SUBSTR (rc.omschrijving, 1, 60),
                        --   rc.kostenplaats,
                        DECODE (rc.totaalbtw,
                                0, 1,                    -- NL standaard 0/Nul
                                rc.fin_btwtabelwaarde_key))
             RETURNING fin_factuurregel_key
                  INTO c_fin_factuurregel_key;

            -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
            UPDATE fac_imp_factuur
               SET fin_factuurregel_key = c_fin_factuurregel_key
             WHERE fac_import_key = rc.fac_import_key
               AND fac_imp_file_index = rc.fac_imp_file_index;

            uwva_imp_writelog (
               p_import_key,
               'I',
                  'Factuurregel '
               || c_factuurregel
               || ' toegevoegd aan factuur '
               || c_newfactuurkey,
               rc.bestelnummer || ' / ' || rc.factuurnr);
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg := 'Error ' || oracle_err_mes;
               uwva_imp_writelog (
                  p_import_key,
                  'W',
                  'Kan factuur(regel) niet toevoegen! ' || v_errormsg,
                  rc.bestelnummer || ' / ' || rc.factuurnr);
               c_rollback := TRUE;
         END;

         c_teller := c_teller + 1;
      ELSE
         -- Toevoegen nieuwe factuur + factuurregel!
         c_old_bestelnummer := rc.bestelnummer;
         c_old_factuurnr := rc.factuurnr;
         c_factuurregel := 1;
         c_bestelnummer_index := INSTR (rc.bestelnummer, '/');
         c_cnt_contract_key := NULL;


         IF c_bestelnummer_index = 0 OR 1 = 1
         THEN
            c_bestelnummer_s1 := rc.bestelnummer;
            c_bestelnummer_s2 := '';
         ELSE
            c_bestelnummer_s1 :=
               SUBSTR (rc.bestelnummer, 1, c_bestelnummer_index - 1);
            c_bestelnummer_s2 :=
               SUBSTR (rc.bestelnummer, c_bestelnummer_index + 1);
         END IF;

         c_find := FALSE;
         --c_find_bestelnummer := FALSE;
         c_fac_type := '';

         c_fac_type := getfactype (rc.bestelnummer);

         IF c_fac_type = 'C'
         THEN
            -- Haal prefix 'C' of 'c' eraf.
            c_bestelnummer_s1 := SUBSTR (c_bestelnummer_s1, 2);
            c_find := TRUE;
         END IF;

         -- c_bestelnummer_s1 bevat ordernummer
         -- c_bestelnummer_s2 bevat volgnummer van de (bestel)opdracht; bij
         -- contracten is deze waarde leeg
         -- Vind nu de onderliggende 'C'
         IF c_fac_type = 'C'
         THEN
            -- Bestaat het contract wel (zie ook UWVA#23124 + UWVA#24359 + UWVA#25579)!?
            BEGIN
               SELECT cnt_contract_key
                 INTO c_cnt_contract_key
                 FROM (SELECT cnt_contract_key
                         FROM cnt_v_aanwezigcontract c
                        WHERE c.cnt_contract_nummer_intern =
                                 c_bestelnummer_s1
                              AND c.ins_discipline_key != 360  -- Abonnementen
                              AND c.cnt_contract_status = 0  -- NIET Gesloten!
                              AND (NOT EXISTS -- Bij >1 versie relevantste irt. besteldatum!
                                      (SELECT 1
                                         FROM cnt_v_aanwezigcontract
                                        WHERE cnt_contract_nummer_intern =
                                                 c.cnt_contract_nummer_intern
                                              AND cnt_contract_versie !=
                                                    c.cnt_contract_versie)
                                   OR rc.besteldatum BETWEEN TRUNC(c.cnt_contract_looptijd_van)
                                                         AND  TRUNC(c.cnt_contract_looptijd_tot))
                       UNION ALL -- UWVA#25579: Voor abonnementen altijd laatste versie!
                       SELECT c.cnt_contract_key
                         FROM cnt_v_aanwezigcontract c
                        WHERE c.cnt_contract_nummer_intern =
                                 c_bestelnummer_s1
                              AND c.ins_discipline_key = 360   -- Abonnementen
                              AND c.cnt_contract_status = 0  -- NIET Gesloten!
                              AND NOT EXISTS -- Alleen laatste versies van contracten!
                                    (SELECT 1
                                       FROM cnt_v_aanwezigcontract
                                      WHERE cnt_contract_nummer_intern =
                                               c.cnt_contract_nummer_intern
                                            AND cnt_contract_versie >
                                                  c.cnt_contract_versie));
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg := 'Error ' || oracle_err_mes;
                  uwva_imp_writelog (
                     p_import_key,
                     'I',
                        'Kan contractreferentie '
                     || rc.bestelnummer
                     || ' niet vinden! '
                     || v_errormsg,
                     c_bestelnummer_s1);
                  c_find := FALSE;
            END;
         END IF;

         --c_opmerking := '';

         BEGIN
            SELECT fin_s_fin_factuur_key.NEXTVAL
              INTO c_newfactuurkey
              FROM DUAL;

            --SELECT SUM (fac.safe_to_number (kostprijs)) totaal,
            --      SUM (fac.safe_to_number (COALESCE (btw_bedrag, '0')))
            --         totaalbtw
            SELECT COALESCE (SUM (kostprijs), 0) totaal,
                   COALESCE (SUM (btw_bedrag), 0) totaal_btw
              INTO c_fact_tot, c_fact_totbtw
              FROM fac_imp_factuur
             WHERE     ordernr = rc.bestelnummer
                   AND factuurnr = rc.factuurnr
                   AND fac_import_key = rc.fac_import_key;

            INSERT INTO fin_factuur (fin_factuur_key,
                                     fin_factuur_totaal,
                                     fin_factuur_totaal_btw,
                                     mld_opdr_key,
                                     cnt_contract_key,
                                     bes_bestelopdr_key,
                                     prs_perslid_key_user,
                                     fin_factuur_datum,
                                     fin_factuur_opmerking,
                                     fin_factuur_statuses_key,
                                     fin_factuur_nr,
                                     fin_factuur_boekmaand,
                                     fin_factuur_bron)  -- UWVA#38195: 1=Excel
                VALUES (c_newfactuurkey,
                        c_fact_tot,
                        c_fact_totbtw,
                        NULL,
                        c_cnt_contract_key,
                        NULL,
                        NULL,
                        c_fact_datum,
                        'Geïmporteerde factuur',         -- ' || c_opmerking,
                        2,
                        rc.factuurnr,
                           SUBSTR (rc.afleverdatum, 1, 4)
                        || '-'
                        || SUBSTR (rc.afleverdatum, 5, 2),
                        1);

            -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
            UPDATE fac_imp_factuur
               SET fin_factuur_key = c_newfactuurkey
             WHERE fac_import_key = rc.fac_import_key
                   AND fac_imp_file_index = rc.fac_imp_file_index;

            fac.trackaction ('FINNEW',
                             c_newfactuurkey,
                             NULL,
                             NULL,
                             NULL);

            INSERT INTO fin_factuurregel (fin_factuur_key,
                                          fin_factuurregel_nr,
                                          fin_factuurregel_totaal,
                                          fin_factuurregel_btw,
                                          fin_factuurregel_omschrijving,
                                          --  fin_factuurregel_referentie,
                                          fin_btwtabelwaarde_key)
                VALUES (c_newfactuurkey,
                        rc.regelnummer,
                        rc.totaalexcl,
                        rc.totaalbtw,
                        SUBSTR (rc.omschrijving, 1, 60),
                        -- rc.kostenplaats,
                        DECODE (rc.totaalbtw,
                                0, 1,                    -- NL standaard 0/Nul
                                rc.fin_btwtabelwaarde_key))
             RETURNING fin_factuurregel_key
                  INTO c_fin_factuurregel_key;

            -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
            UPDATE fac_imp_factuur
               SET fin_factuurregel_key = c_fin_factuurregel_key
             WHERE fac_import_key = rc.fac_import_key
                   AND fac_imp_file_index = rc.fac_imp_file_index;

            --IF c_find_bestelnummer
            --THEN
            --   c_write_bestelnummer := c_bestelopdr_id;
            --ELSE
            --   c_write_bestelnummer := rc.bestelnummer;
            --END IF;

            uwva_imp_writelog (
               p_import_key,
               'I',
                  'Factuur '
               || c_newfactuurkey
               || ' toegevoegd met factuurregel '
               || c_factuurregel,
               --c_write_bestelnummer || ' / ' || rc.factuurnr
               rc.bestelnummer || ' / ' || rc.factuurnr);
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg := 'Error ' || oracle_err_mes;
               uwva_imp_writelog (
                  p_import_key,
                  'W',
                  'Kan factuur(regel) niet toevoegen! ' || v_errormsg,
                  rc.bestelnummer || '/' || rc.factuurnr);
               c_rollback := TRUE;
         END;

         c_teller := c_teller + 1;
      END IF;
   END LOOP;

   -- Zet facturen automatisch op Akkoord als deze aan match-criteria voldoen.
   FOR rc IN (  SELECT f.fin_factuur_key factuur_key
                  FROM fin_factuur f
                 WHERE f.fin_factuur_datum = c_fact_datum
              ORDER BY f.fin_factuur_key)
   LOOP
      FIN.matchandsetfactuur (rc.factuur_key, FALSE);
   --COMMIT;
   END LOOP;

   -- UWVA#19018: Notificeer niet goedgekeurde facturen naar de budgethouders
   -- (1 mail per persoon). Hierbij maakt het niet veel uit of ze net zijn
   -- geimporteerd of al eerder (of handmatig ingevoerd). Medium wordt bepaald
   -- door mode bij FININF.
   fac.putjobnotifications ('uwva_v_noti_finreminder', NULL, 0);

   --SELECT   COUNT ( * )
   --  INTO   c_i
   --  FROM   imp_log
   -- WHERE   fac_import_key = p_import_key AND imp_log_status IN ('E', 'W');

   IF c_rollback = TRUE
   THEN
      uwva_imp_writelog (p_import_key,
                         'E',
                         v_errormsg,
                         'Importproces facturen afgebroken!');
      ROLLBACK;
   ELSE
      COMMIT;
   END IF;


   -- Stap 8: Voeg de soort factuurregel toe aan de factuurregel
   INSERT INTO fin_kenmerkfactregel r (r.fin_kenmerk_key, r.fin_factuurregel_key, r.fin_kenmerkfactregel_waarde)
      SELECT DISTINCT 1, i.fin_factuurregel_key, s.factuurreg_soort_code
        FROM fac_usrdata u, uwva_v_factuurreg_soort s, fac_imp_factuur i
       WHERE     u.fac_usrtab_key IN (1225, 1227)
             AND u.fac_usrdata_key = s.factuurreg_soort_code
             AND i.kenmerk1 = TO_NUMBER (u.fac_usrdata_code)
             AND u.fac_usrdata_verwijder IS NULL
             AND fac_import_key = p_import_key;

   -- Stap 9: voeg het regelnummer uit de leasefactuur toe aan de factuur in Facilitor
   INSERT INTO fin_kenmerkfactregel r (r.fin_kenmerk_key, r.fin_factuurregel_key, r.fin_kenmerkfactregel_waarde)
      SELECT DISTINCT 2, i.fin_factuurregel_key, i.kenmerk3
        FROM fac_imp_factuur i
       WHERE fac_import_key = p_import_key;
END;
/

CREATE OR REPLACE FORCE VIEW UWVA_V_RAP_CONTR_KPL
(
   LEASECONTRACT,
   KP_LEASECONTRACT,
   KP_OMSCHRIJVING_LC,
   GEBRUIKERSOVEREENKOMST,
   KP_GEBRUIKERSOVEREENKOMST,
   KP_OMSCHRIJVING_GO,
   MEDEWERKER_ID,
   NAAM,
   KP_MEDEWERKER,
   KP_OMSCHRIJVING_MDW,
   CONTROLE_KPL
)
AS
   SELECT L.CNT_CONTRACT_NUMMER_INTERN,
          KL.PRS_KOSTENPLAATS_UPPER,
          KL.PRS_KOSTENPLAATS_OMSCHRIJVING,
          G.CNT_CONTRACT_NUMMER_INTERN,
          KG.PRS_KOSTENPLAATS_UPPER,
          KG.PRS_KOSTENPLAATS_OMSCHRIJVING,
          P.PRS_PERSLID_NR,
          N.PRS_PERSLID_NAAM_FRIENDLY,
          KP.PRS_KOSTENPLAATS_UPPER,
          KP.PRS_KOSTENPLAATS_OMSCHRIJVING,
          CASE
             WHEN (   KL.PRS_KOSTENPLAATS_UPPER <> KG.PRS_KOSTENPLAATS_UPPER
                   OR KG.PRS_KOSTENPLAATS_UPPER <> KP.PRS_KOSTENPLAATS_UPPER
                   OR KL.PRS_KOSTENPLAATS_UPPER <> KP.PRS_KOSTENPLAATS_UPPER)
             THEN
                'Onjuist'
             ELSE
                'Juist'
          END
     FROM CNT_CONTRACT L,
          PRS_KOSTENPLAATS KL,
          CNT_CONTRACT G,
          PRS_KOSTENPLAATS KG,
          PRS_PERSLID P,
          PRS_V_PERSLID_FULLNAMES_ALL N,
          PRS_AFDELING A,
          PRS_KOSTENPLAATS KP
    WHERE     L.INS_DISCIPLINE_KEY = 425
          AND G.INS_DISCIPLINE_KEY = 426
          AND L.PRS_KOSTENPLAATS_KEY = KL.PRS_KOSTENPLAATS_KEY
          AND G.PRS_KOSTENPLAATS_KEY = KG.PRS_KOSTENPLAATS_KEY
          AND L.CNT_CONTRACT_NUMMER_INTERN = LPAD (G.CNT_CONTRACT_NUMMER_INTERN, 6)
          AND G.CNT_PRS_PERSLID_KEY = P.PRS_PERSLID_KEY
          AND P.PRS_PERSLID_KEY = N.PRS_PERSLID_KEY
          AND P.PRS_AFDELING_KEY = A.PRS_AFDELING_KEY
          AND A.PRS_KOSTENPLAATS_KEY = KP.PRS_KOSTENPLAATS_KEY
          AND L.CNT_CONTRACT_LOOPTIJD_TOT > SYSDATE
          AND G.CNT_CONTRACT_LOOPTIJD_VAN <= SYSDATE
          AND G.CNT_CONTRACT_LOOPTIJD_TOT > SYSDATE;

-- UWVA#36478 Rapport salarisinhoudingen moet ook posten tonen waarbij geen auto aan de gebruikersovereenkomst is gekoppeld
CREATE OR REPLACE VIEW UWVA_V_RAP_SALARIS_INH
(
   JAAR,
   PERIODE,
   PNR,
   NAAM,
   OMSCHRIJVING,
   BEDRAGINCLBTW,
   REKENINGNR,
   KENTEKEN
)
AS
   SELECT (TO_CHAR (F.FIN_FACTUUR_DATUM, 'YYYY')),
          (TO_CHAR (F.FIN_FACTUUR_DATUM, 'MM')),
          P.PRS_PERSLID_NR,
          N.PRS_PERSLID_NAAM_FULL,
          K.PRS_KOSTENSOORT_REFCODE,
          F.FIN_FACTUUR_TOTAAL + F.FIN_FACTUUR_TOTAAL_BTW,
          K.PRS_KOSTENSOORT_OMS,
          O.INS_DEEL_OMSCHRIJVING
     FROM FIN_FACTUUR F,
          CNT_CONTRACT C,
          PRS_PERSLID P,
          PRS_V_PERSLID_FULLNAMES_ALL N,
          PRS_KOSTENSOORT K,
          CNT_CONTRACT_OBJECT A,
          INS_DEEL O,
          INS_TAB_DISCIPLINE D
    WHERE     F.CNT_CONTRACT_KEY = C.CNT_CONTRACT_KEY
          AND C.CNT_PRS_PERSLID_KEY = P.PRS_PERSLID_KEY
          AND P.PRS_PERSLID_KEY = N.PRS_PERSLID_KEY
          AND D.PRS_KOSTENSOORT_KEY = K.PRS_KOSTENSOORT_KEY
          AND C.CNT_CONTRACT_KEY = A.CNT_CONTRACT_KEY(+)
          AND A.CNT_INS_DEEL_KEY = O.INS_DEEL_KEY(+)
          AND C.INS_DISCIPLINE_KEY = D.INS_DISCIPLINE_KEY
          AND D.PRS_KOSTENSOORT_KEY = 382;

CREATE OR REPLACE FORCE VIEW UWVA_V_FACTUURREG_SOORT
(
   FACTUURREG_SOORT_CODE,
   FACTUURREG_SOORT_OMSCHR
)
AS
   SELECT U.FAC_USRDATA_KEY,
          CONCAT (U.FAC_USRDATA_CODE, (CONCAT (' ', U.FAC_USRDATA_OMSCHR)))
     FROM FAC_USRDATA U
    WHERE U.FAC_USRTAB_KEY IN (1225, 1227)
          AND U.FAC_USRDATA_VERWIJDER IS NULL;

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile