#ifdef FIN
/*  FIN_VIE.SRC
 *
 *  $Revision$
 *  $Id$
 */

#include "comsql.h"

/* LET OP (FSN#21553)
 * Deze view lijkt qua naam een tabel, maar is het technisch niet
 * Hij levert de statustekst in de juiste taal op, van een specifieke statuscode
 * Voorheen was dit een tabel met deze naam, en werd deze initieel gevuld. Dit is
 * hiermee dus vanwege de i18n veranderd.
 */
CREATE_VIEW(fin_factuur_statuses, 0)
AS
SELECT   fac_code2label_code fin_factuur_statuses_key,
         COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) fin_factuur_statuses_omschr
  FROM   fac_locale_xsl fl, fac_code2label fs
 WHERE       fl.fac_locale_xsl_label = fac_code2label_label
         AND fac_code2label_domein = 'factuur'
         AND fac_locale_xsl_lang = lcl.getuserlanguage ();

CREATE_VIEW(fac_v_noti_finreminder,0)
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
     SELECT   'FININF',
              '',
              fin.getfiatteur(f.fin_factuur_key) 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; FSN#19425
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f
      WHERE   fin.getfiatteur(f.fin_factuur_key) <> -1  -- die kan ik geen bericht sturen
        AND   f.fin_factuur_statuses_key = 2
        AND   f.fin_factuur_verwijder IS NULL
   GROUP BY   fin.getfiatteur(f.fin_factuur_key);

-- Vooralsnog placeholders, moeten aangepast worden
CREATE_VIEW(fin_v_api_facturen, 1) AS SELECT * from fin_factuur;

/* ROOT VIEWS for User defined Reports (UDR) */
CREATE_VIEW(fin_v_udr_factuur, 1)
(
   factuur_key,
   factuur_datum,
   uitvoerende,
   leverancier_nr,
   factuurnr_extern,
   factuur_voor,
   opdrachtnr,
   opdracht_key,
   contract_key,
   bestelling_key,
   kostenplaats,
   kostenplaats_extern,
   discipline_omschrijving,
   catalogus,
   kostensoort,
   kostensoort_opmerking,
   kostensoort_refcode,
   kostensoort_altcode,
   kostensoort_btw,
   stdmelding_omschrijving,
   bedrag_incl_btw,
   bedrag_excl_btw,
   status,
   opmerking,
   budgethouder
)
AS
   SELECT f.fin_factuur_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,
          (SELECT b.prs_leverancier_nr
             FROM prs_bedrijf b
            WHERE prs_bedrijf_key =
                     COALESCE (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key))
             leverancier_nr,
          fin_factuur_nr factuurnr_extern,
          CASE
             WHEN f.mld_opdr_key IS NOT NULL THEN lcl.l ('lcl_fin_mld_opdr')
             WHEN f.cnt_contract_key IS NOT NULL THEN lcl.l ('lcl_fin_cnt_contract')
             WHEN f.bes_bestelopdr_key IS NOT NULL THEN lcl.l ('lcl_fin_bestelling')
          END
             CASE,
          COALESCE (
             NVL2 (
                f.mld_opdr_key,
                   ins_srtdiscipline_prefix
                || TO_CHAR (o.mld_melding_key)
                || '/'
                || o.mld_opdr_bedrijfopdr_volgnr,
                NULL),
             NVL2 (
                f.cnt_contract_key,
                   'C'
                || cnt_contract_nummer_intern
                || NVL2 (cnt_contract_versie, '.' || cnt_contract_versie, ''),
                NULL),
             NVL2 (f.bes_bestelopdr_key, bo.bes_bestelopdr_id, NULL),
             ' ')
             opdrachtnr,
          f.mld_opdr_key,
          f.cnt_contract_key,
          f.bes_bestelopdr_key,
          NVL2 (
             k.prs_kostenplaats_nr,
             prs_kostenplaats_nr || ' '
             || lcl.x ('prs_kostenplaats_omschrijving',
                       k.prs_kostenplaats_key,
                       k.prs_kostenplaats_omschrijving),
             '')
             kostenplaats,
          DECODE (k.prs_kostenplaats_extern, 1, lcl.l ('lcl_yes'), lcl.l ('lcl_no')),
          cd.ins_discipline_omschrijving,
          (SELECT MIN (ins_discipline_omschrijving)
             FROM bes_discipline bd,
                  bes_srtgroep bg,
                  bes_srtdeel bs,
                  bes_bestelling_item bi,
                  bes_bestelopdr_item boi
            WHERE     boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
                  AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
                  AND bs.bes_srtdeel_key = bi.bes_srtdeel_key
                  AND bg.bes_srtgroep_key = bs.bes_srtgroep_key
                  AND bd.ins_discipline_key = bg.ins_discipline_key)
             bes_discipline_omschrijving,
          ks.prs_kostensoort_oms,
          ks.prs_kostensoort_opmerking,
          ks.prs_kostensoort_refcode,
          ks.prs_kostensoort_altcode,
          DECODE (ks.prs_kostensoort_btw, 1, lcl.l ('lcl_yes'), lcl.l ('lcl_no')),
          mld_stdmelding_omschrijving,
          f.fin_factuur_totaal + f.fin_factuur_totaal_btw bedrag_incl_btw,
          f.fin_factuur_totaal bedrag_excl_btw,
          fs.fin_factuur_statuses_omschr,
          f.fin_factuur_opmerking,
          (SELECT p.prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all p
            WHERE prs_perslid_key = fin.getfiatteur(f.fin_factuur_key))
             budgethouder
     FROM fin_factuur f,
          prs_kostenplaats k,
          mld_opdr o,
          mld_melding m,
          mld_discipline d,
          mld_stdmelding sm,
          ins_srtdiscipline sd,
          cnt_contract c,
          cnt_discipline cd,
          bes_bestelopdr bo,
          prs_kostensoort ks,
          fin_factuur_statuses fs
    WHERE     fin.getfactuurkostenplaats(f.fin_factuur_key) = k.prs_kostenplaats_key(+)
          AND f.prs_kostensoort_key = ks.prs_kostensoort_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(+)
          AND f.fin_factuur_statuses_key = fs.fin_factuur_statuses_key
          AND f.fin_factuur_verwijder IS NULL;

// Dit is strict geen fin view, maar het is de UDR-versie van het kostenoverzicht
// dat bedragen rapporteert over de BROC.
CREATE_VIEW(fin_v_udr_kostenoverzicht, 0)
(
   datum,
   aanvrager,
   organisatie,
   categorie,
   referentie,
   bedrag,
   status,
   kostenplaatsgroep,
   kostenplaatsnr,
   kostenplaats,
   kostensoortgroep,
   kostensoortnr,
   kostensoort,
   ordernr,
   locatie,
   district,
   regio,
   fclt_3d_locatie_key,
   fclt_3d_afdeling_key
)
AS
     SELECT datum,
               p.prs_perslid_naam
            || NVL2 (p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')
            || NVL2 (p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')
            || NVL2 (p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '')
               aanvrager,
            d.prs_afdeling_naam organisatie,
            categorie,
            categorienummer,
            SUM (bedrag) bedrag,
            status,
            kpg.prs_kostenplaatsgrp_oms,
            k.prs_kostenplaats_nr,
            lcl.x ('prs_kostenplaats_omschrijving',
                   k.prs_kostenplaats_key,
                   k.prs_kostenplaats_omschrijving),
            ksg.prs_kostensoortgrp_oms,
            ks.prs_kostensoort_oms,
            ks.prs_kostensoort_opmerking,
            ordernr,
            alg_locatie_code,
            alg_district_omschrijving,
            alg_regio_omschrijving,
            alg_locatie_key,
            d.prs_afdeling_key
       FROM (SELECT rr.prs_kostenplaats_key,
                    rr.res_rsv_ruimte_van datum,
                    res_rsv_ruimte_contact_key prs_perslid_key,
                    'Reservering' categorie,
                    TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr
                       categorienummer,
                    res_rsv_ruimte_prijs bedrag,
                    s.res_status_bo_omschrijving status,
                    'RES' module,
                    dis.prs_kostensoort_key,
                    rr.res_rsv_ruimte_ordernr ordernr,
                    rr.res_reservering_key kostenplaats_item_key,
                    rr.res_rsv_ruimte_key kostenplaats_item_child_key,
                    (SELECT MAX (g.alg_locatie_key)
                       FROM alg_ruimte r,
                            alg_verdieping v,
                            alg_gebouw g,
                            res_alg_ruimte ar
                      WHERE     ar.res_alg_ruimte_verwijder IS NULL
                            AND ar.alg_ruimte_key = r.alg_ruimte_key
                            AND r.alg_verdieping_key = v.alg_verdieping_key
                            AND v.alg_gebouw_key = g.alg_gebouw_key
                            AND ar.res_ruimte_key = ro.res_ruimte_key)
                       locatie_key
               FROM res_v_aanwezigrsv_ruimte rr,
                    res_ruimte_opstelling ro,
                    res_ruimte ru,
                    res_discipline dis,
                    res_status_bo s
              WHERE     ru.res_ruimte_prijs <> 0
                    AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                    AND ro.res_ruimte_key = ru.res_ruimte_key
                    AND s.res_status_bo_key = rr.res_status_bo_key
                    AND ru.res_discipline_key = dis.ins_discipline_key
             UNION ALL
             SELECT rr.prs_kostenplaats_key,
                    ra.res_rsv_artikel_levering datum,
                    res_rsv_ruimte_contact_key prs_perslid_key,
                    'Reservering' categorie,
                    TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr
                       categorienummer,
                    res_rsv_artikel_prijs bedrag,
                    s.res_status_bo_omschrijving status,
                    'RES' module,
                    dis.prs_kostensoort_key,
                    rr.res_rsv_ruimte_ordernr ordernr,
                    rr.res_reservering_key kostenplaats_item_key,
                    rr.res_rsv_ruimte_key kostenplaats_item_child_key,
                    COALESCE (
                       (SELECT g.alg_locatie_key
                          FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
                         WHERE     rr.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),
                       (SELECT MAX (g.alg_locatie_key)
                          FROM alg_ruimte r,
                               alg_verdieping v,
                               alg_gebouw g,
                               res_alg_ruimte ar,
                               res_ruimte_opstelling ro
                         WHERE     ar.res_alg_ruimte_verwijder IS NULL
                               AND ar.alg_ruimte_key = r.alg_ruimte_key
                               AND r.alg_verdieping_key = v.alg_verdieping_key
                               AND v.alg_gebouw_key = g.alg_gebouw_key
                               AND ar.res_ruimte_key = ro.res_ruimte_key
                               AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key))
                       locatie_key
               FROM res_v_aanwezigrsv_ruimte rr,
                    res_v_aanwezigrsv_artikel ra,
                    res_artikel a,
                    res_discipline dis,
                    res_status_bo s
              WHERE     COALESCE (ra.res_rsv_artikel_prijs, a.res_artikel_prijs) <> 0
                    AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
                    AND ra.res_artikel_key = a.res_artikel_key
                    AND s.res_status_bo_key = ra.res_status_bo_key
                    AND a.res_discipline_key = dis.ins_discipline_key
             UNION ALL
             SELECT rr.prs_kostenplaats_key,
                    rd.res_rsv_deel_van datum,
                    res_rsv_ruimte_contact_key prs_perslid_key,
                    'Reservering' categorie,
                    TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr
                       categorienummer,
                    res_rsv_deel_prijs bedrag,
                    s.res_status_bo_omschrijving status,
                    'RES' module,
                    dis.prs_kostensoort_key,
                    rr.res_rsv_ruimte_ordernr ordernr,
                    rr.res_reservering_key kostenplaats_item_key,
                    rr.res_rsv_ruimte_key kostenplaats_item_child_key,
                    COALESCE (
                       (SELECT g.alg_locatie_key
                          FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
                         WHERE     rr.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),
                       (SELECT MAX (g.alg_locatie_key)
                          FROM alg_ruimte r,
                               alg_verdieping v,
                               alg_gebouw g,
                               res_alg_ruimte ar,
                               res_ruimte_opstelling ro
                         WHERE     ar.res_alg_ruimte_verwijder IS NULL
                               AND ar.alg_ruimte_key = r.alg_ruimte_key
                               AND r.alg_verdieping_key = v.alg_verdieping_key
                               AND v.alg_gebouw_key = g.alg_gebouw_key
                               AND ar.res_ruimte_key = ro.res_ruimte_key
                               AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key))
                       locatie_key
               FROM res_v_aanwezigrsv_ruimte rr,
                    res_v_aanwezigrsv_deel rd,
                    res_deel d,
                    res_discipline dis,
                    res_status_bo,
                    res_status_bo s
              WHERE     d.res_deel_prijs <> 0
                    AND rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
                    AND rd.res_deel_key = d.res_deel_key
                    AND s.res_status_bo_key = rd.res_status_bo_key
                    AND d.res_discipline_key = dis.ins_discipline_key
             UNION ALL
             SELECT o.prs_kostenplaats_key,
                    o.mld_opdr_datumbegin datum,
                    m.prs_perslid_key prs_perslid_key,
                    mdis.ins_discipline_omschrijving categorie,
                       sd.ins_srtdiscipline_prefix
                    || m.mld_melding_key
                    || '/'
                    || o.mld_opdr_bedrijfopdr_volgnr
                       categorienummer,
                    COALESCE (o.mld_opdr_kosten, 0) bedrag,
                    s.mld_statusopdr_omschrijving status,
                    'MLD' module,
                    COALESCE (s.prs_kostensoort_key, mdis.prs_kostensoort_key) prs_kostensoort_key,
                    o.mld_opdr_ordernr ordernr,
                    o.mld_opdr_key kostenplaats_item_key,
                    -1 kostenplaats_item_child_key,
                    m.mld_alg_locatie_key locatie_key
               FROM mld_opdr o,
                    mld_typeopdr ot,
                    mld_melding m,
                    mld_stdmelding s,
                    mld_discipline mdis,
                    ins_srtdiscipline sd,
                    mld_statusopdr s
              WHERE     o.mld_opdr_kosten <> 0
                    AND o.mld_typeopdr_key = ot.mld_typeopdr_key
                    AND ot.mld_typeopdr_kosten = 1
                    AND o.mld_melding_key = m.mld_melding_key
                    AND s.mld_statusopdr_key = o.mld_statusopdr_key
                    AND m.mld_stdmelding_key = s.mld_stdmelding_key
                    AND mdis.ins_discipline_key = s.mld_ins_discipline_key
                    AND mdis.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                    AND o.mld_statusopdr_key NOT IN (1, 2, 3, 4, 10)
             UNION ALL
             SELECT b.prs_kostenplaats_key,
                    bo.bes_bestelopdr_datum datum,
                    b.prs_perslid_key prs_perslid_key,
                    'Bestelling' categorie,
                    TO_CHAR (b.bes_bestelling_key) categorienummer,
                    (boi.bes_bestelopdr_item_aantal * boi.bes_bestelopdr_item_prijs) bedrag,
                    s.bes_bestelopdrstatuses_omschr status,
                    'BES' module,
                    bdis.prs_kostensoort_key,
                    b.bes_bestelling_ordernr ordernr,
                    b.bes_bestelling_key kostenplaats_item_key,
                    -1 kostenplaats_item_child_key,
                    (SELECT alg_locatie_key
                       FROM mld_adres ma
                      WHERE ma.mld_adres_key = b.mld_adres_key_lev)
                       locatie_key
               FROM bes_bestelling b,
                    bes_bestelling_item bi,
                    bes_bestelopdr bo,
                    bes_bestelopdr_item boi,
                    bes_srtdeel isd,
                    bes_srtgroep isg,
                    bes_discipline bdis,
                    bes_bestelopdrstatuses s
              WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                    AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                    AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
                    AND s.bes_bestelopdrstatuses_key = bo.bes_bestelopdr_status
                    AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
                    AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
                    AND isg.ins_discipline_key = bdis.ins_discipline_key
                    AND bo.bes_bestelopdr_status IN (4, 6, 7)) tab,
            prs_kostenplaats k,
            prs_kostenplaatsgrp kpg,
            prs_kostensoort ks,
            prs_kostensoortgrp ksg,
            prs_perslid p,
            prs_v_afdeling d,
            alg_locatie l,
            alg_district d,
            alg_regio r
      WHERE     tab.prs_kostenplaats_key(+) = k.prs_kostenplaats_key
            AND tab.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
            AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
            AND tab.prs_perslid_key = p.prs_perslid_key(+)
            AND p.prs_afdeling_key = d.prs_afdeling_key(+)
            AND tab.locatie_key = l.alg_locatie_key(+)
            AND l.alg_district_key = d.alg_district_key(+)
            AND d.alg_regio_key = r.alg_regio_key(+)
            AND datum >= TO_DATE ('01-01-2010', 'DD-MM-YYYY')
   GROUP BY k.prs_kostenplaats_nr,
            lcl.x ('prs_kostenplaats_omschrijving',
                   k.prs_kostenplaats_key,
                   k.prs_kostenplaats_omschrijving),
            datum,
               p.prs_perslid_naam
            || NVL2 (p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')
            || NVL2 (p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')
            || NVL2 (p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', ''),
            d.prs_afdeling_naam,
            d.prs_afdeling_key,
            categorie,
            categorienummer,
            status,
            kpg.prs_kostenplaatsgrp_oms,
            ksg.prs_kostensoortgrp_oms,
            ks.prs_kostensoort_oms,
            ks.prs_kostensoort_opmerking,
            ordernr,
            ksg.prs_kostensoortgrp_oms,
            alg_locatie_key,
            alg_district_omschrijving,
            alg_regio_omschrijving,
            alg_locatie_code;

REGISTERRUN('$Id$')
#endif // FIN
