--
-- $Id$
--
-- Script containing customer specific views for the FACILITOR database
DEFINE thisfile = 'TWYN_VIE.SQL'
DEFINE dbuser   = '^TWYN'
DEFINE custid   = 'TWYN'

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

--=============================================================================
-- RAPPORTAGES
-------------------------------------------------------------------------------
-- Via het menu/Rapportages kunnen rapporten worden gemaakt.
-- Graag een beetje uniforme (vriendelijke) naamgeving aanhouden voor de kolommen
-- omdat deze in de stylesheet driftig worden gebruikt
--
--o CONT_ALF    Overzicht contractanten op alfabetische volgorde

--o CONT_RUB    Overzicht contracten per rubriek
--o CON_FACT    Overzicht (contracten en) facturen per contractant
--o CON_ACC     Overzicht [contracten en] facturen per account @moet nog opdrachttotalen
--o CON_ACC1    Overzicht contracten per account

--o BREG_RES    Overzicht reserve
--o BREG_BTW    Overzicht BTW
--o BREG_TOT    Totaaloverzicht budgetrapportage (meerdere subprojecten)
--o BREG_RUB    Overzicht rubrieken (1 subproject)

--o FACT_MND    Overzicht facturen per maand op adviesdatum
--• FACTCORU    Overzicht contracten en facturen per rubriek
--o FDATFACT    Overzicht facturen per maand op factuurdatum
--• BET_ADV     Betalingsadvies d.d. dd-mm-jjjj
--o BMUT_NUM    Overzicht budgetmutaties op volgnummer
--o MMW_CONT    Overzicht Meer- en minderwerk per contractant
--o MMWINVCO    Overzicht meer- en minderwerk facturen per contractant
--
-- Ten behoeve van de header zijn de volgende gegevens gewenst in al deze views
-- opdrachtgever p.bgt_disc_params_opdrachtgever
-- project      p.bgt_disc_params_code || ' ' || d.ins_discipline_omschrijving
-- subproject    bp.bgt_project_code || ' ' || bp.bgt_project_omschrijving


-- basis views

CREATE OR REPLACE VIEW twyn_v_bgt_projectdatum
AS
    SELECT p.bgt_project_key
         , TO_CHAR(MIN(LEAST( COALESCE(p.bgt_project_prijspeildatum, SYSDATE)
                            , COALESCE(b.bgt_budget_begin, SYSDATE)
                            , COALESCE(m.bgt_budgetmutatie_datum, SYSDATE)
                            , COALESCE(o.mld_opdr_datumbegin, SYSDATE)
                            , COALESCE(f.fin_factuur_datum, SYSDATE)
                            , COALESCE(f.fin_factuur_advies, SYSDATE)
                            )), 'dd-mm-yyyy') startdatum_p
      FROM bgt_project p
         , bgt_budget  b
         , (SELECT bgt_budget_key_naar bgt_budget_key
                 , bgt_budgetmutatie_datum
              FROM bgt_budgetmutatie
             UNION ALL
            SELECT bgt_budget_key_van  bgt_budget_key
                 , bgt_budgetmutatie_datum
             FROM bgt_budgetmutatie
           ) m
         , mld_opdr    o
         , fin_factuur f
     WHERE b.bgt_project_key = p.bgt_project_key
       AND b.bgt_budget_key = m.bgt_budget_key(+)
       AND b.prs_kostensoort_key = o.prs_kostensoort_key(+)
       AND o.mld_opdr_key = f.mld_opdr_key(+)
     GROUP BY p.bgt_project_key;


CREATE OR REPLACE VIEW twyn_v_bgt_budgetmutatie
AS
    SELECT mutatie.bgt_budget_key
         , SUM (mutatie.bedrag_van)     bedrag_van
         , SUM (mutatie.bedrag_naar)    bedrag_naar
         , SUM (mutatie.btwbedrag_van)  btwbedrag_van
         , SUM (mutatie.btwbedrag_naar) btwbedrag_naar
      FROM (  SELECT m1.bgt_budget_key_van                            bgt_budget_key
                   , SUM (COALESCE (m1.bgt_budget_bedrag_van, 0))     bedrag_van
                   , SUM (COALESCE (m1.bgt_budget_btwbedrag_van, 0))  btwbedrag_van
                   , 0   bedrag_naar
                   , 0   btwbedrag_naar
                FROM bgt_budgetmutatie m1
               GROUP BY m1.bgt_budget_key_van
              UNION
              SELECT m2.bgt_budget_key_naar                           bgt_budget_key
                   , 0   bedrag_van
                   , 0   btwbedrag_van
                   , SUM (COALESCE (m2.bgt_budget_bedrag_naar, 0))    bedrag_naar
                   , SUM (COALESCE (m2.bgt_budget_btwbedrag_naar, 0)) btwbedrag_naa
                FROM bgt_budgetmutatie m2
               GROUP BY m2.bgt_budget_key_naar
           ) mutatie
     GROUP BY mutatie.bgt_budget_key;


CREATE OR REPLACE view twyn_v_bgt_budgetgegevens
AS
    SELECT pr.ins_discipline_key
         , pr.bgt_project_key
         , pr.opdrachtgever
         , pr.pcode
         , pr.project
         , pr.projectnaam
         , pr.dcode
         , pr.subproject
         , pr.subprojectnaam
         , pr.ins_discipline_verwijder
         , pr.bgt_project_verwijder
         , kr.bgt_kostenrubriek_key
         , kr.bgt_kostenrubriek_code    rcode
         , kr.bgt_kostenrubriek_oms     kostenrubriek
         , ks.prs_kostensoort_key
         , ks.prs_kostensoort_altcode   scode
         , ks.prs_kostensoort_oms       kostensoort
         , b.bgt_budget_key
         , b.bgt_budget_bedrag
         , b.bgt_budget_btwbedrag
      FROM bgt_v_project_gegevens    pr
         , bgt_kostenrubriek  kr
         , prs_kostensoort    ks
         , bgt_budget         b
     WHERE b.bgt_project_key = pr.bgt_project_key
       AND b.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key
       AND b.prs_kostensoort_key = ks.prs_kostensoort_key(+);


-- BREG_TOT
-- BREG_RES
-- BREG_BTW
-- BREG_RUB
-- De werkelijke gegevens worden opgehaald in twyn.twyn_v_detailoverzicht
CREATE OR REPLACE VIEW twyn_v_detailoverzicht
AS
    SELECT *
      FROM bgt_v_project_full
     WHERE ins_discipline_verwijder IS NULL
       AND bgt_project_verwijder IS NULL;


-- CON_FACT
-- CON_ACC
-- FACTCORU
-- De werkelijke gegevens worden opgehaald in twyn.twyn_v_contr_fact_bedrijf
CREATE OR REPLACE VIEW twyn_v_contr_fact_bedrijf
AS
    SELECT *
      FROM bgt_v_project_full
     WHERE ins_discipline_verwijder IS NULL
       AND bgt_project_verwijder IS NULL;


-- BET_ADV
CREATE OR REPLACE VIEW twyn_v_betalingsadvies
AS
    SELECT tp.opdrachtgever
         , tp.pcode
         , tp.project
         , tp.dcode
         , tp.subproject
         , tp.rcode
         , tp.kostenrubriek
         , tp.gcode
         , tp.kostengroep
         , tp.scode
         , tp.kostensoort
         , f.fin_factuur_advies                         adviesdatum
         , TO_CHAR (f.fin_factuur_advies, 'dd-mm-yyyy') adviesdatum_p
         , f.fin_factuur_datum                          factuurdatum
         , TO_CHAR (f.fin_factuur_datum, 'dd-mm-yyyy')  factuurdatum_p
         , f.fin_factuur_nr                             factuurnr
         , b.prs_bedrijf_naam                           contractant
         , f.fin_factuur_opmerking                      opmerking
         , f.fin_factuur_totaal                         bedragexcl
         , f.fin_factuur_totaal_btw                     bedragbtw
         , f.fin_factuur_statuses_key                   factuurstatus
         , CASE WHEN INSTR(f.fin_factuur_nr, '/') = 0
                THEN f.fin_factuur_nr
                ELSE SUBSTR(f.fin_factuur_nr, 1, INSTR(f.fin_factuur_nr, '/')-1 )
           END                                          factuurnummer
         , CASE WHEN INSTR(f.fin_factuur_nr, '/') = 0
                THEN '0'
                ELSE SUBSTR(f.fin_factuur_nr, INSTR(f.fin_factuur_nr, '/')+1 )
           END                                          factuurvolgnr
      FROM fin_factuur         f
         , mld_opdr            o
         , prs_bedrijf         b
         , bgt_v_project_full  tp
     WHERE o.mld_opdr_key = f.mld_opdr_key
       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
       AND o.prs_kostensoort_key = tp.prs_kostensoort_key
       AND tp.ins_discipline_verwijder IS NULL
       AND tp.bgt_project_verwijder IS NULL
       AND f.fin_factuur_bron = 0;


-- CONT_ALF
CREATE OR REPLACE VIEW twyn_v_bedrijf
AS
    SELECT tp.opdrachtgever
         , tp.pcode
         , tp.project
         , tp.dcode
         , tp.subproject
         , b.prs_leverancier_nr         leveranciercode
         , b.prs_bedrijf_naam           naam
         , b.prs_bedrijf_post_adres     adres
         , b.prs_bedrijf_post_postcode  postcode
         , b.prs_bedrijf_post_plaats    plaats
         , b.prs_bedrijf_telefoon       telefoon
         , b.prs_bedrijf_email          email
      FROM mld_opdr           o
         , prs_bedrijf        b
         , bgt_v_project_full tp
     WHERE b.prs_bedrijf_key = o.mld_uitvoerende_keys
       AND o.prs_kostensoort_key = tp.prs_kostensoort_key
       AND tp.ins_discipline_verwijder IS NULL
       AND tp.bgt_project_verwijder IS NULL
     ORDER BY prs_bedrijf_naam;


-- CONT_RUB
-- Voor ieder rubriek/groep/onderdeel de som van de opdrachten en facturen
-- Opletten: in principe is iedere opdracht uniek en laat je alle individuele opdrachten zien
--           behalve voor MMW-opdrachten, die worden per mld_opdr_nr getotaaliseerd weergegeven
--           Daarom gebruiken we hier de MIN en MAX functies, om de MMW-opdrachten bij elkaar te tellen
--           Die andere view twyn_v_contract laat ook de mmw-opdrachten.
CREATE OR REPLACE VIEW twyn_v_contract_rubriek
AS
    SELECT tp.opdrachtgever
         , tp.pcode
         , tp.project
         , tp.projectnaam
         , tp.dcode
         , tp.subproject
         , tp.subprojectnaam
         , tp.rcode
         , tp.kostenrubriek
         , tp.gcode
         , tp.kostengroep
         , tp.scode
         , tp.kostensoort
         , tp.kostencode
         , tp.kostennaam
         , o.mld_opdr_datumbegin                                datumfilter
         , b.prs_leverancier_nr
         , o.mld_opdr_ordernr
         , COALESCE(o.mld_opdr_bedrijfopdr_volgnr, 0)           mld_opdr_ordervolgnr
         , MAX (o.mld_opdr_meerwerk)                            mld_opdr_meerwerk
         , MAX (o.mld_opdr_id)                                  kenmerk
         , MAX (o.mld_opdr_omschrijving)                        mld_opdr_omschrijving
         , kp.prs_kostenplaats_nr                               accountcode
         , kp.prs_kostenplaats_omschrijving                     account
         , MIN (o.mld_opdr_datumbegin)                          datum
         , TO_CHAR (MIN (o.mld_opdr_datumbegin), 'DD-MM-YYYY')  printdatum
         , SUM (o.mld_opdr_kosten)                              kosten
         , SUM (o.mld_opdr_kosten_btw)                          btw
         , SUM (bgt.getgefactureerd (o.mld_opdr_key, 0))        facturen
         , SUM (bgt.getgefactureerd (o.mld_opdr_key, 1))        facturen_btw
      FROM bgt_v_project_full tp
         , prs_kostenplaats   kp
         , mld_opdr           o
         , prs_bedrijf        b
     WHERE o.prs_kostensoort_key  = tp.prs_kostensoort_key
       AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
       AND o.mld_statusopdr_key <> 10  -- ter goedkeuring (=raming) hier niet in meenemen
       AND tp.ins_discipline_verwijder IS NULL
       AND tp.bgt_project_verwijder IS NULL
     GROUP BY tp.opdrachtgever
            , tp.project
            , tp.subproject
            , tp.projectnaam
            , tp.pcode
            , tp.opdrachtgever
            , tp.subprojectnaam
            , tp.rcode
            , tp.kostenrubriek
            , tp.gcode
            , tp.kostengroep
            , tp.scode
            , tp.kostensoort
            , tp.dcode
            , tp.kostencode
            , tp.kostennaam
            , kp.prs_kostenplaats_nr
            , kp.prs_kostenplaats_omschrijving
            , b.prs_leverancier_nr
            , o.mld_opdr_ordernr
            , o.mld_opdr_bedrijfopdr_volgnr
            , o.mld_opdr_datumbegin
     ORDER BY tp.rcode
            , tp.gcode
            , tp.scode
            , b.prs_leverancier_nr
            , TO_NUMBER(o.mld_opdr_ordernr)
            , o.mld_opdr_bedrijfopdr_volgnr;


-- CON_ACC1
CREATE OR REPLACE VIEW twyn_v_contract
AS
    SELECT tp.opdrachtgever
         , tp.pcode
         , tp.project
         , tp.projectnaam
         , tp.subproject
         , tp.subprojectnaam
         , tp.rcode
         , tp.kostenrubriek
         , tp.gcode
         , tp.kostengroep
         , tp.scode
         , tp.kostensoort
         , b.prs_leverancier_nr
         , o.mld_opdr_ordernr
         , COALESCE(o.mld_opdr_bedrijfopdr_volgnr, 0)                    mld_opdr_ordervolgnr
         , o.mld_opdr_id                                                 kenmerk
         , o.mld_opdr_omschrijving
         , COALESCE(kp.prs_kostenplaats_nr, ' ')                         accountcode
         , COALESCE(kp.prs_kostenplaats_omschrijving, 'zonder account')  account
         , o.mld_opdr_datumbegin                                         datumfilter
         , TO_CHAR (o.mld_opdr_datumbegin, 'DD-MM-YYYY')                 printdatum
         , o.mld_opdr_meerwerk
         , o.mld_opdr_kosten
         , o.mld_opdr_kosten_btw
         , SUM (bgt.getgefactureerd (o.mld_opdr_key, 0))                 fin_factuur_totaal
         , SUM (bgt.getgefactureerd (o.mld_opdr_key, 1))                 fin_factuur_totaal_btw
      FROM bgt_v_project_full tp
         , prs_kostenplaats   kp
         , mld_opdr           o
         , prs_bedrijf        b
     WHERE o.prs_kostensoort_key = tp.prs_kostensoort_key
       AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
       AND tp.ins_discipline_verwijder IS NULL
       AND tp.bgt_project_verwijder IS NULL
     GROUP BY tp.opdrachtgever
            , tp.pcode
            , tp.project
            , tp.subproject
            , tp.dcode
            , tp.subprojectnaam
            , tp.projectnaam
            , tp.dcode
            , tp.opdrachtgever
            , tp.subprojectnaam
            , tp.rcode
            , tp.kostenrubriek
            , tp.gcode
            , tp.kostengroep
            , tp.scode
            , tp.kostensoort
            , kp.prs_kostenplaats_nr
            , kp.prs_kostenplaats_omschrijving
            , b.prs_leverancier_nr
            , o.mld_opdr_ordernr
            , o.mld_opdr_bedrijfopdr_volgnr
            , o.mld_opdr_id
            , o.mld_opdr_omschrijving
            , o.mld_opdr_meerwerk
            , kp.prs_kostenplaats_nr
            , kp.prs_kostenplaats_omschrijving
            , o.mld_opdr_datumbegin
            , o.mld_opdr_kosten
            , o.mld_opdr_kosten_btw
     ORDER BY kp.prs_kostenplaats_nr
            , b.prs_leverancier_nr
            , o.mld_opdr_ordernr
            , o.mld_opdr_bedrijfopdr_volgnr;


--BMUT_NUM
CREATE OR REPLACE VIEW twyn_v_budgetmutaties
AS
    SELECT gegevens.opdrachtgever
         , gegevens.pcode
         , gegevens.project
         , gegevens.projectnaam
         , gegevens.dcode
         , gegevens.subproject
         , gegevens.subprojectnaam
         , gegevens.kostencode
         , gegevens.kostennaam
         , p.startdatum_p
         , mutaties.bgt_budget_key
         , mutaties.bgt_budget_isreserve
         , mutaties.bgt_budgetmutatie_key
         , mutaties.bgt_budgetmutatie_omschrijving mutatiereden
         , mutaties.bgt_budgetmutatie_reserve      reserve
         , mutaties.bgt_budgetmutatie_datum        mutatiedatum
         , TO_CHAR (mutaties.bgt_budgetmutatie_datum, 'dd-mm-yyyy')    mutatiedatum_p
         , mutaties.bgt_mutatie_bedrag             mutatiebedrag_exc
         , mutaties.bgt_mutatie_btwbedrag          mutatiebedrag_btw
         , mutaties.bgt_mutatie_soort              mutatiesoort
         , mutaties.bgt_budgetmutatie_code         mutatiecode
         , mutaties.bgt_budgetmutatie_volgnr       mutatievolgnr
      FROM bgt_v_project_full  gegevens
         , twyn_v_bgt_projectdatum p
         , (SELECT b.bgt_budget_key
                 , b.ins_discipline_key
                 , b.bgt_project_key
                 , b.bgt_kostenrubriek_key
                 , b.prs_kostensoortgrp_key
                 , b.prs_kostensoort_key
                 , b.prs_kostenplaatsgrp_key
                 , b.prs_kostenplaats_key
                 , b.bgt_budget_bedrag
                 , b.bgt_budget_btwbedrag
                 , b.bgt_budget_isreserve
                 , b.bgt_budget_begin
                 , b.bgt_budget_eind
                 , b.bgt_budget_aanmaak
                 , b.bgt_budget_vervaldatum
                 , m.bgt_budgetmutatie_key
                 , m.prs_perslid_key
                 , m.bgt_budgetmutatie_omschrijving
                 , m.bgt_budgetmutatie_reserve
                 , m.bgt_budgetmutatie_datum
                 , m.bgt_budget_bedrag_van                        bgt_mutatie_bedrag
                 , m.bgt_budget_btwbedrag_van                     bgt_mutatie_btwbedrag
                 , BGT.getSoortMutatie (m.bgt_budgetmutatie_key)  bgt_mutatie_soort
                 , m.bgt_budgetmutatie_code
                 , m.bgt_budgetmutatie_volgnr
              FROM bgt_budget b
                 , bgt_budgetmutatie m
             WHERE b.bgt_budget_key = m.bgt_budget_key_van
            UNION
            SELECT b.bgt_budget_key
                 , b.ins_discipline_key
                 , b.bgt_project_key
                 , b.bgt_kostenrubriek_key
                 , b.prs_kostensoortgrp_key
                 , b.prs_kostensoort_key
                 , b.prs_kostenplaatsgrp_key
                 , b.prs_kostenplaats_key
                 , b.bgt_budget_bedrag
                 , b.bgt_budget_btwbedrag
                 , b.bgt_budget_isreserve
                 , b.bgt_budget_begin
                 , b.bgt_budget_eind
                 , b.bgt_budget_aanmaak
                 , b.bgt_budget_vervaldatum
                 , m.bgt_budgetmutatie_key
                 , m.prs_perslid_key
                 , m.bgt_budgetmutatie_omschrijving
                 , m.bgt_budgetmutatie_reserve
                 , m.bgt_budgetmutatie_datum
                 , m.bgt_budget_bedrag_naar                       bgt_mutatie_bedrag
                 , m.bgt_budget_btwbedrag_naar                    bgt_mutatie_btwbedrag
                 , BGT.getSoortMutatie (m.bgt_budgetmutatie_key)  bgt_mutatie_soort
                 , m.bgt_budgetmutatie_code
                 , m.bgt_budgetmutatie_volgnr
              FROM bgt_budget b
                 , bgt_budgetmutatie m
             WHERE b.bgt_budget_key = m.bgt_budget_key_naar
           ) mutaties
     WHERE (  (   mutaties.prs_kostensoort_key = gegevens.prs_kostensoort_key)
           OR (   mutaties.bgt_kostenrubriek_key = gegevens.bgt_kostenrubriek_key
              AND mutaties.prs_kostensoortgrp_key IS NULL
              AND mutaties.prs_kostensoort_key IS NULL
              )
           )
       AND gegevens.bgt_project_key = p.bgt_project_key
       AND gegevens.ins_discipline_verwijder IS NULL
       AND gegevens.bgt_project_verwijder IS NULL
       AND (   mutaties.bgt_budgetmutatie_omschrijving NOT LIKE 'AO %'
           AND mutaties.bgt_budgetmutatie_omschrijving NOT LIKE 'MW %'
           )
       AND (mutaties.bgt_budgetmutatie_code NOT IN ('A','W')
           OR mutaties.bgt_budgetmutatie_code IS NULL
           );


-- MMW_CONT
CREATE OR REPLACE VIEW twyn_v_meerminderwerk_opdr
AS
    SELECT p.ins_discipline_key
         , p.bgt_project_key
         , p.bgt_kostenrubriek_key
         , p.prs_kostensoortgrp_key
         , p.prs_kostensoort_key
         , b.prs_bedrijf_key
         , p.opdrachtgever
         , p.pcode
         , p.project
         , p.projectnaam
         , p.dcode
         , p.subproject
         , p.subprojectnaam
         , d.startdatum_p
         , b.prs_leverancier_nr
         , b.prs_bedrijf_naam
         , p.scode
         , p.kostensoort
         , p.kostencode
         , m.mld_opdr_ordernr
         , m.mld_opdr_bedrijfopdr_volgnr
         , m.mld_opdr_omschrijving
         , m.mld_opdr_id
         , m.mld_opdr_datumbegin
         , TO_CHAR (m.mld_opdr_datumbegin, 'dd-mm-yyyy')  mld_opdr_datumbegin_p
         , m.mld_opdr_kosten_refiat
         , CASE WHEN m.mld_statusopdr_key=10  THEN m.mld_opdr_kosten END raming
         , CASE WHEN m.mld_statusopdr_key<>10 THEN m.mld_opdr_kosten END gecontracteerd
         , m.mld_opdr_kosten_btw  contract_btw
         , f.fin_factuur_totaal
         , f.fin_factuur_totaal_btw
         , c.mld_statusopdr_oms
      FROM mld_opdr           m
         , prs_bedrijf        b
         , bgt_v_project_full p
         , twyn_v_bgt_projectdatum d
         , (SELECT fac_code2label_code
                   mld_statusopdr_key,
                   COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst)  mld_statusopdr_oms
              FROM fac_locale_xsl fl
                 , fac_code2label fs
             WHERE fl.fac_locale_xsl_label = fac_code2label_label
               AND fac_code2label_domein = 'opdracht'
               AND fac_locale_xsl_lang = lcl.getuserlanguage ()
           ) c
         , (SELECT ff.mld_opdr_key
                 , SUM (ff.fin_factuur_totaal)      fin_factuur_totaal
                 , SUM (ff.fin_factuur_totaal_btw)  fin_factuur_totaal_btw
              FROM fin_factuur ff
             GROUP BY ff.mld_opdr_key
           ) f
     WHERE m.mld_uitvoerende_keys = b.prs_bedrijf_key
       AND m.prs_kostensoort_key = p.prs_kostensoort_key
       AND m.mld_opdr_meerwerk = 1
       AND m.mld_statusopdr_key = c.mld_statusopdr_key
       AND m.mld_opdr_key = f.mld_opdr_key(+)
       AND p.bgt_project_key = d.bgt_project_key
       AND p.ins_discipline_verwijder IS NULL
       AND p.bgt_project_verwijder IS NULL
     ORDER BY b.prs_leverancier_nr
            , p.scode
            , m.mld_opdr_ordernr
            , m.mld_opdr_bedrijfopdr_volgnr;


-- MMWINVCO
CREATE OR REPLACE VIEW twyn_v_meerminderwerk_fact
AS
    SELECT *
      FROM ( SELECT p.ins_discipline_key
                  , p.bgt_project_key
                  , p.bgt_kostenrubriek_key
                  , p.prs_kostensoortgrp_key
                  , p.prs_kostensoort_key
                  , b.prs_bedrijf_key
                  , f.fin_factuur_key
                  , p.opdrachtgever
                  , p.pcode
                  , p.project
                  , p.subproject
                  , d.startdatum_p
                  , b.prs_leverancier_nr
                  , b.prs_bedrijf_naam
                  , p.scode
                  , p.kostensoort
                  , m.mld_opdr_ordernr
                  , m.mld_opdr_bedrijfopdr_volgnr
                  , (SELECT CASE WHEN MIN (x.mld_opdr_bedrijfopdr_volgnr) = m.mld_opdr_bedrijfopdr_volgnr
                                 THEN 1
                                 ELSE 0
                            END
                       FROM mld_opdr x
                      WHERE x.mld_opdr_ordernr = m.mld_opdr_ordernr
                        AND x.mld_opdr_meerwerk = 1
                    ) mld_opdr_mainorder
                  , m.mld_opdr_omschrijving
                  , m.mld_opdr_id
                  , m.mld_opdr_datumbegin
                  , TO_CHAR (m.mld_opdr_datumbegin, 'dd-mm-yyyy')  mld_opdr_datumbegin_p
                  , m.mld_opdr_kosten
                  , m.mld_opdr_kosten_btw
                  , COALESCE(f.fin_factuur_datum, m.mld_opdr_datumbegin)  fin_factuur_datum
                  , TO_CHAR (f.fin_factuur_datum, 'dd-mm-yyyy')    fin_factuur_datum_p
                  , fin_factuur_nr
                  , fin_factuur_opmerking
                  , fin_factuur_totaal
                  , fin_factuur_totaal_btw
                  , fin_factuur_advies
                  , TO_CHAR (f.fin_factuur_advies, 'dd-mm-yyyy')   fin_factuur_advies_p
                  , c.mld_statusopdr_oms
                  , c.mld_statusopdr_key
                  , 'F'  soort
               FROM mld_opdr           m
                  , prs_bedrijf        b
                  , fin_factuur        f
                  , bgt_v_project_full p
                  , twyn_v_bgt_projectdatum d
                  , (SELECT fac_code2label_code
                            mld_statusopdr_key,
                            COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst)  mld_statusopdr_oms
                       FROM fac_locale_xsl fl
                          , fac_code2label fs
                      WHERE fl.fac_locale_xsl_label = fac_code2label_label
                        AND fac_code2label_domein = 'opdracht'
                        AND fac_locale_xsl_lang = lcl.getuserlanguage ()
                    ) c
              WHERE m.mld_uitvoerende_keys = b.prs_bedrijf_key
                AND m.prs_kostensoort_key = p.prs_kostensoort_key
                AND m.mld_opdr_meerwerk = 1
                AND m.mld_statusopdr_key = c.mld_statusopdr_key
                AND m.mld_opdr_key = f.mld_opdr_key(+)
                AND p.bgt_project_key = d.bgt_project_key
                AND p.ins_discipline_verwijder IS NULL
                AND p.bgt_project_verwijder IS NULL
             UNION
                SELECT p.ins_discipline_key
                  , p.bgt_project_key
                  , p.bgt_kostenrubriek_key
                  , p.prs_kostensoortgrp_key
                  , p.prs_kostensoort_key
                  , b.prs_bedrijf_key
                  , NULL  fin_factuur_key
                  , p.opdrachtgever
                  , p.pcode
                  , p.project
                  , p.subproject
                  , d.startdatum_p
                  , b.prs_leverancier_nr
                  , b.prs_bedrijf_naam
                  , p.scode
                  , p.kostensoort
                  , m.mld_opdr_ordernr
                  , m.mld_opdr_bedrijfopdr_volgnr
                  , (SELECT CASE WHEN MIN (x.mld_opdr_bedrijfopdr_volgnr) = m.mld_opdr_bedrijfopdr_volgnr
                                 THEN 1
                                 ELSE 0
                            END
                       FROM mld_opdr x
                      WHERE x.mld_opdr_ordernr = m.mld_opdr_ordernr
                        AND x.mld_opdr_meerwerk = 1
                    ) mld_opdr_mainorder
                  , m.mld_opdr_omschrijving
                  , m.mld_opdr_id
                  , m.mld_opdr_datumbegin
                  , TO_CHAR (m.mld_opdr_datumbegin, 'dd-mm-yyyy')  mld_opdr_datumbegin_p
                  , m.mld_opdr_kosten
                  , m.mld_opdr_kosten_btw
                  , COALESCE(f.fin_factuur_datum, m.mld_opdr_datumbegin)  fin_factuur_datum
                  , TO_CHAR( COALESCE(f.fin_factuur_datum, m.mld_opdr_datumbegin), 'dd-mm-yyyy')   fin_factuur_datum_p
                  , NULL  fin_factuur_nr
                  , NULL  fin_factuur_opmerking
                  , NULL  fin_factuur_totaal
                  , NULL  fin_factuur_totaal_btw
                  , NULL  fin_factuur_advies
                  , NULL  fin_factuur_advies_p
                  , c.mld_statusopdr_oms
                  , c.mld_statusopdr_key
                  , 'C'  soort
               FROM mld_opdr           m
                  , prs_bedrijf        b
                  , bgt_v_project_full p
                  , twyn_v_bgt_projectdatum d
                  , (SELECT fac_code2label_code
                            mld_statusopdr_key,
                            COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst)  mld_statusopdr_oms
                       FROM fac_locale_xsl fl
                          , fac_code2label fs
                      WHERE fl.fac_locale_xsl_label = fac_code2label_label
                        AND fac_code2label_domein = 'opdracht'
                        AND fac_locale_xsl_lang = lcl.getuserlanguage ()
                    ) c
                  , (SELECT ff.mld_opdr_key
                          , MIN (ff.fin_factuur_datum)      fin_factuur_datum
                       FROM fin_factuur ff
                      GROUP BY ff.mld_opdr_key
                    ) f
              WHERE m.mld_uitvoerende_keys = b.prs_bedrijf_key
                AND m.prs_kostensoort_key = p.prs_kostensoort_key
                AND m.mld_opdr_key = f.mld_opdr_key(+)
                AND m.mld_opdr_meerwerk = 1
                AND m.mld_statusopdr_key = c.mld_statusopdr_key
                AND p.bgt_project_key = d.bgt_project_key
                AND p.ins_discipline_verwijder IS NULL
                AND p.bgt_project_verwijder IS NULL
           )
     ORDER BY prs_leverancier_nr
            , scode
            , mld_opdr_ordernr
            , mld_opdr_bedrijfopdr_volgnr;


--FACT_MND
--FDATFACT
CREATE OR REPLACE VIEW twyn_v_factuur_datum
AS
    SELECT tp.ins_discipline_key
         , tp.bgt_project_key
         , tp.opdrachtgever
         , tp.pcode
         , tp.project
         , tp.subproject
         , tp.rcode
         , tp.kostencode
         , b.prs_leverancier_nr
         , f.fin_factuur_datum                                                         factuur_datum
         , COALESCE(f.fin_factuur_advies, f.fin_factuur_datum)                         advies_datum
         , o.mld_opdr_ordernr                                                          contractnummer
         , o.mld_opdr_bedrijfopdr_volgnr                                               volgnummer
         , f.fin_factuur_nr                                                            factuur_nr
         , f.fin_factuur_opmerking                                                     factuur_opmerking
         , f.fin_factuur_totaal                                                        factuur_exc
         , f.fin_factuur_totaal_btw                                                    factuur_btw
         , f.fin_factuur_totaal + f.fin_factuur_totaal_btw                             factuur_inc
         , TO_CHAR(f.fin_factuur_datum, 'dd-mm-yyyy')                                  factuur_datum_p
         , TO_CHAR(f.fin_factuur_datum, 'yyyy')                                        factuur_datum_jaar
         , TO_CHAR(f.fin_factuur_datum, 'mm')                                          factuur_datum_maand
         , TO_CHAR(COALESCE(f.fin_factuur_advies, f.fin_factuur_datum), 'dd-mm-yyyy')  factuur_advies_p
         , TO_CHAR(COALESCE(f.fin_factuur_advies, f.fin_factuur_datum), 'yyyy')        factuur_advies_jaar
         , TO_CHAR(COALESCE(f.fin_factuur_advies, f.fin_factuur_datum), 'mm')          factuur_advies_maand
      FROM prs_bedrijf         b
         , fin_factuur         f
         , mld_opdr            o
         , bgt_v_project_full  tp
     WHERE f.mld_opdr_key(+) = o.mld_opdr_key
       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
       AND tp.prs_kostensoort_key = o.prs_kostensoort_key(+)
       AND tp.ins_discipline_verwijder IS NULL
       AND tp.bgt_project_verwijder IS NULL;

CREATE OR REPLACE FORCE VIEW twyn_v_rap_bgt_basis
(
   discipline_key,
   discipline_omschrijving,
   project_key,
   project,
   subproject,
   kostenrubriek_key,
   kostenrubriek,
   kostensoortgroep_key,
   kostensoortgroep,
   kostensoort_key,
   kostensoort,
   budget_key,
   budget_bedrag,
   gecontracteerd,
   gefactureerd
)
AS
   SELECT b.ins_discipline_key,
          d.ins_discipline_omschrijving,
          b.bgt_project_key,
          b.project,
          b.subproject,
          b.bgt_kostenrubriek_key,
          b.kostenrubriek,
          (SELECT ksg.prs_kostensoortgrp_key
             FROM prs_kostensoortgrp ksg, prs_kostensoort ks
            WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                  AND ks.prs_kostensoort_key = b.prs_kostensoort_key)
             AS ksg_key,
          (SELECT ksg.prs_kostensoortgrp_oms
             FROM prs_kostensoortgrp ksg, prs_kostensoort ks
            WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                  AND ks.prs_kostensoort_key = b.prs_kostensoort_key)
             AS ksg_oms,
          b.prs_kostensoort_key,
          b.kostensoort,
          b.bgt_budget_key,
          b.bgt_budget_bedrag,
          (SELECT mld_opdr_kosten
             FROM (  SELECT prs_kostensoort_key,
                            SUM (mld_opdr_kosten) AS mld_opdr_kosten
                       FROM mld_opdr
                   GROUP BY prs_kostensoort_key) mo
            WHERE b.prs_kostensoort_key = mo.prs_kostensoort_key)
             AS mld_opdr_kosten,
          (SELECT fin_factuur_totaal
             FROM (  SELECT prs_kostensoort_key,
                            SUM (fin_factuur_totaal) AS fin_factuur_totaal
                       FROM fin_factuur
                   GROUP BY prs_kostensoort_key) ff
            WHERE b.prs_kostensoort_key = ff.prs_kostensoort_key)
             AS gefactureerd
     FROM twyn_v_bgt_budgetgegevens b, ins_tab_discipline d
    WHERE d.ins_discipline_key = b.ins_discipline_key;

CREATE OR REPLACE FORCE VIEW twyn_v_rap_bgt_subproj
(
   project,
   subproject,
   deel,
   bedrag
)
AS
     SELECT discipline_omschrijving,
            subproject,
            'Budget',
            SUM (budget_bedrag) - SUM (gecontracteerd)
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject
   UNION ALL
     SELECT discipline_omschrijving,
            subproject,
            'Gecontracteerd',
            SUM (gecontracteerd) - SUM (gefactureerd)
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject
   UNION ALL
     SELECT discipline_omschrijving,
            subproject,
            'Gefactureerd',
            SUM (gefactureerd)
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject
   ORDER BY discipline_omschrijving, subproject;

CREATE OR REPLACE FORCE VIEW twyn_v_rap_bgt_kostenrubriek
(
   project,
   subproject,
   kostenrubriek,
   deel,
   bedrag
)
AS
     SELECT discipline_omschrijving,
            subproject,
            kostenrubriek,
            'Budget' AS deel,
            SUM (budget_bedrag) - SUM (gecontracteerd) AS bedrag
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject, kostenrubriek
   UNION ALL
     SELECT discipline_omschrijving,
            subproject,
            kostenrubriek,
            'Gecontracteerd' AS deel,
            SUM (gecontracteerd) - SUM (gefactureerd) AS bedrag
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject, kostenrubriek
   UNION ALL
     SELECT discipline_omschrijving,
            subproject,
            kostenrubriek,
            'Gefactureerd' AS deel,
            SUM (gefactureerd) AS bedrag
       FROM twyn_v_rap_bgt_basis
   GROUP BY discipline_omschrijving, subproject, kostenrubriek
   ORDER BY discipline_omschrijving, subproject, kostenrubriek;


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