--
-- $Id$
--
-- Script bevat wijzigingen in views die noodzakelijk zijn voor de rapportages inclusief btw voor versie 2019.1
DEFINE thisfile = 'TWYN#57971.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
-------------------------------------------------------------------------------


-- CONT_RUB
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.versienummer
         , 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.versienummer
            , 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
         , tp.versienummer
         , 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
            , tp.versienummer
     ORDER BY kp.prs_kostenplaats_nr
            , b.prs_leverancier_nr
            , o.mld_opdr_ordernr
            , o.mld_opdr_bedrijfopdr_volgnr;


CREATE OR REPLACE PACKAGE twyn
AS
   TYPE t_cursor IS REF CURSOR;

   PROCEDURE twyn_v_detailoverzicht ( user_key    IN  NUMBER
                                    , p_datum_van IN  VARCHAR2
                                    , p_datum_tot IN  VARCHAR2
                                    , p_cursor    OUT t_cursor
                                    , p_where     IN  VARCHAR2 DEFAULT NULL
                                    );
   PROCEDURE twyn_v_contract_rubriek ( user_key    IN  NUMBER
                                     , p_datum_van IN  VARCHAR2
                                     , p_datum_tot IN  VARCHAR2
                                     , p_cursor    OUT t_cursor
                                     , p_where     IN  VARCHAR2 DEFAULT NULL
                                     );
   PROCEDURE twyn_v_contr_fact_bedrijf ( user_key    IN  NUMBER
                                       , p_datum_van IN  VARCHAR2
                                       , p_datum_tot IN  VARCHAR2
                                       , p_cursor    OUT t_cursor
                                       , p_where     IN  VARCHAR2 DEFAULT NULL
                                       );
   PROCEDURE twyn_v_factuur_datum ( user_key    IN  NUMBER
                                  , p_datum_van IN  VARCHAR2
                                  , p_datum_tot IN  VARCHAR2
                                  , p_cursor    OUT t_cursor
                                  , p_where     IN  VARCHAR2 DEFAULT NULL
                                  );
END twyn;
/

CREATE OR REPLACE PACKAGE BODY twyn
AS
   PROCEDURE twyn_v_detailoverzicht ( user_key    IN  NUMBER
                                    , p_datum_van IN  VARCHAR2
                                    , p_datum_tot IN  VARCHAR2
                                    , p_cursor    OUT t_cursor
                                    , p_where     IN  VARCHAR2 DEFAULT NULL
                                    )
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;

      v_part_A  VARCHAR2(32767);
      v_part_B  VARCHAR2(32767);
      v_part_W  VARCHAR2(32767);
      v_part_T  VARCHAR2(32767);
      v_part_L  VARCHAR2(32767);
      v_where   VARCHAR2(32767);

   BEGIN
      v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy');
      v_part_W    := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6);
      v_where     := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END;

      v_part_A := 'SELECT f.*'
               || '     , 0 budget_origineel_exc'
               || '     , 0 budget_origineel_btw'
               || '     , 0 budget_actueel_exc'
               || '     , 0 budget_actueel_btw'
               || '     , 0 budget_reserve_exc'
               || '     , 0 budget_reserve_btw'
               || '     , 0 budget_mutatie_exc'
               || '     , 0 budget_mutatie_btw'
               || '     , BGT.getGecontracteerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gecontracteerd_exc'
               || '     , BGT.getGecontracteerd(o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gecontracteerd_btw'
               || '     , BGT.getGefactureerd  (o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gefactureerd_exc'
               || '     , BGT.getGefactureerd  (o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) gefactureerd_btw'
               || '     , p.startdatum_p'
               || '     , ''' || p_datum_tot || '''  bgt_datum'
               || '     , o.mld_opdr_key'
               || '  FROM bgt_v_project_full f'
               || '     , bgt_budget b'
               || '     , twyn_v_bgt_projectdatum p'
               || '     , mld_opdr o'
               || ' WHERE (   f.prs_kostensoort_key = b.prs_kostensoort_key'
               || '       OR (   f.bgt_kostenrubriek_key = b.bgt_kostenrubriek_key'
               || '          AND b.prs_kostensoort_key IS NULL'
               || '          )'
               || '       )'
               || '   AND f.bgt_project_key = p.bgt_project_key'
               || '   AND f.prs_kostensoort_key = o.prs_kostensoort_key'
               || '   AND f.ins_discipline_verwijder IS NULL'
               || '   AND f.bgt_project_verwijder IS NULL'
               || '   '|| v_where;

      v_part_B := 'SELECT f.*'
               || '     , BGT.getBudgetOpDatum(b.bgt_budget_key, 0, null)                                budget_origineel_exc'
               || '     , BGT.getBudgetOpDatum(b.bgt_budget_key, 1, null)                                budget_origineel_btw'
               || '     , BGT.getBudgetOpDatum(b.bgt_budget_key, 0, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_actueel_exc'
               || '     , BGT.getBudgetOpDatum(b.bgt_budget_key, 1, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_actueel_btw'
               || '     , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 0, ''ARW'', to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_reserve_exc'
               || '     , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 1, '''',    to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_reserve_btw'
               || '     , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 0, ''EM'',  to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_mutatie_exc'
               || '     , BGT.getBudgetSoortMutatie(b.bgt_kostenrubriek_key, b.prs_kostensoortgrp_key, b.prs_kostensoort_key, 1, ''EM'',  to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) budget_mutatie_btw'
               || '     , 0 gecontracteerd_exc'
               || '     , 0 gecontracteerd_btw'
               || '     , 0 gefactureerd_exc'
               || '     , 0 gefactureerd_btw'
               || '     , p.startdatum_p'
               || '     , ''' || p_datum_tot || '''  bgt_datum'
               || '     , null mld_opdr_key'
               || '  FROM bgt_v_project_full f'
               || '     , bgt_budget b'
               || '     , twyn_v_bgt_projectdatum p'
               || ' WHERE (   f.prs_kostensoort_key = b.prs_kostensoort_key'
               || '       OR (   f.bgt_kostenrubriek_key = b.bgt_kostenrubriek_key'
               || '          AND b.prs_kostensoort_key IS NULL'
               || '          )'
               || '       )'
               || '   AND f.bgt_project_key = p.bgt_project_key'
               || '   AND f.ins_discipline_verwijder IS NULL'
               || '   AND f.bgt_project_verwijder IS NULL'
               || '   '|| v_where;

      v_part_T := 'SELECT opdrachtgever'
               || '     , pcode'
               || '     , project'
               || '     , projectnaam'
               || '     , dcode'
               || '     , subproject'
               || '     , subprojectnaam'
               || '     , rcode'
               || '     , kostenrubriek'
               || '     , gcode'
               || '     , kostengroep'
               || '     , scode'
               || '     , kostensoort'
               || '     , startdatum_p'
               || '     , bgt_datum'
               || '     , bgt_kostenrubriek_key'
               || '     , sum(budget_origineel_exc) org_bedrag_exc'
               || '     , sum(budget_origineel_btw) org_bedrag_btw'
               || '     , sum(budget_actueel_exc)   bgt_bedrag_exc'
               || '     , sum(budget_actueel_btw)   bgt_bedrag_btw'
               || '     , sum(budget_reserve_exc)   res_bedrag_exc'
               || '     , sum(budget_reserve_btw)   res_bedrag_btw'
               || '     , sum(budget_mutatie_exc)   mut_bedrag_exc'
               || '     , sum(budget_mutatie_btw)   mut_bedrag_btw'
               || '     , sum(gecontracteerd_exc)   cnt_bedrag_exc'
               || '     , sum(gecontracteerd_btw)   cnt_bedrag_btw'
               || '     , sum(gefactureerd_exc)     fin_bedrag_exc'
               || '     , sum(gefactureerd_btw)     fin_bedrag_btw'
               || '  FROM (' || v_part_A || ' UNION ' || v_part_B || ')'
               || ' GROUP BY opdrachtgever'
               || '        , pcode'
               || '        , project'
               || '        , projectnaam'
               || '        , dcode'
               || '        , subproject'
               || '        , subprojectnaam'
               || '        , rcode'
               || '        , kostenrubriek'
               || '        , gcode'
               || '        , kostengroep'
               || '        , scode'
               || '        , kostensoort'
               || '        , startdatum_p'
               || '        , bgt_datum'
               || '        , bgt_kostenrubriek_key'
               || ' ORDER BY rcode';

      v_part_L := 'SELECT x.*'
               || '     , CASE WHEN scode IS NOT NULL'
                       || '     AND org_bedrag_exc = 0'
                       || '     AND org_bedrag_btw = 0'
                       || '     AND bgt_bedrag_exc = 0'
                       || '     AND bgt_bedrag_btw = 0'
                       || '     AND res_bedrag_exc = 0'
                       || '     AND res_bedrag_btw = 0'
                       || '     AND mut_bedrag_exc = 0'
                       || '     AND mut_bedrag_btw = 0'
                       || '     AND cnt_bedrag_exc = 0'
                       || '     AND cnt_bedrag_btw = 0'
                       || '     AND fin_bedrag_exc = 0'
                       || '     AND fin_bedrag_btw = 0'
                       || '    THEN 1'
                       || '    ELSE 0'
               || '       END is_leeg'
               || '  FROM (' || v_part_T || ') x';

      OPEN p_cursor FOR 'SELECT * FROM '
           || '( SELECT * FROM (' || v_part_L || ')'
           || ')';
   END;

   PROCEDURE twyn_v_contract_rubriek ( user_key    IN  NUMBER
                                     , p_datum_van IN  VARCHAR2
                                     , p_datum_tot IN  VARCHAR2  -- eigenlijk: tot-en-met
                                     , p_cursor    OUT t_cursor
                                     , p_where     IN  VARCHAR2 DEFAULT NULL
                                     )
   AS
      v_datum_van  DATE;
      v_datum_tot  DATE;

      v_part_W  VARCHAR2(32767);
      v_part_T  VARCHAR2(32767);
      v_where   VARCHAR2(32767);

   BEGIN
      v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy');
      v_part_W    := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6);
      v_where     := CASE WHEN v_part_W IS NOT NULL THEN 'AND ' || v_part_W ELSE '' END;

      v_part_T := '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'
               || '     , b.prs_leverancier_nr'
               || '     , o.mld_opdr_ordernr'
               || '     , COALESCE(o.mld_opdr_bedrijfopdr_volgnr, 0)      mld_opdr_ordervolgnr'
               || '     , o.mld_opdr_meerwerk                             mld_opdr_meerwerk'
               || '     , o.mld_opdr_id                                   kenmerk'
               || '     , o.mld_opdr_omschrijving                         mld_opdr_omschrijving'
               || '     , kp.prs_kostenplaats_nr                          accountcode'
               || '     , kp.prs_kostenplaats_omschrijving                account'
               || '     , TO_CHAR (o.mld_opdr_datumbegin, ''DD-MM-YYYY'') datum_p'
               || '     , BGT.getGecontracteerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) kosten'
               || '     , BGT.getGecontracteerd(o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) btw'
               || '     , BGT.getGefactureerd  (o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) facturen'
               || '     , BGT.getGefactureerd  (o.mld_opdr_key, 1, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')) facturen_btw'
               || '     , p.startdatum_p'
               || '  FROM bgt_v_project_full tp'
               || '     , prs_kostenplaats   kp'
               || '     , mld_opdr           o'
               || '     , prs_bedrijf        b'
               || '     , twyn_v_bgt_projectdatum p'
               || ' 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.bgt_project_key = p.bgt_project_key'
               || '   AND tp.ins_discipline_verwijder IS NULL'
               || '   AND tp.bgt_project_verwijder IS NULL'
               || '   AND (  (    mld_opdr_datumbegin <= to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')'
               || '           AND COALESCE(BGT.getGefactureerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) = 0'
               || '          )'
               || '       OR (COALESCE(BGT.getGefactureerd(o.mld_opdr_key, 0, null, to_date(''' || p_datum_tot || ''', ''dd-mm-yyyy'')), 0) <> 0)'
               || '       )'
               || '   '|| v_where;

      OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')';
   END;

   PROCEDURE twyn_v_contr_fact_bedrijf ( user_key    IN  NUMBER
                                       , p_datum_van IN  VARCHAR2
                                       , p_datum_tot IN  VARCHAR2
                                       , p_cursor    OUT t_cursor
                                       , p_where     IN  VARCHAR2 DEFAULT NULL
                                       )
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;

      v_part_D  VARCHAR2(32767);
      v_part_W  VARCHAR2(32767);
      v_part_T  VARCHAR2(32767);
      v_where   VARCHAR2(32767);

   BEGIN
      v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy');
      v_part_W    := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6);
      v_where     := CASE WHEN v_part_W IS NOT NULL
                          THEN 'AND ' || v_part_W
                          ELSE ''
                     END
                  || CASE WHEN p_datum_van IS NOT NULL
                          THEN ' AND o.mld_opdr_datumbegin >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')'
                          ELSE ''
                     END
                  || CASE WHEN p_datum_tot IS NOT NULL
                          THEN ' AND o.mld_opdr_datumbegin <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')'
                          ELSE ''
                     END;

      v_part_D := CASE WHEN p_datum_van IS NOT NULL
                       THEN ' AND fx.fin_factuur_advies >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')'
                       ELSE ''
                  END
               || CASE WHEN p_datum_tot IS NOT NULL
                       THEN ' AND fx.fin_factuur_advies <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')'
                  END;


      v_part_T := 'SELECT tp.opdrachtgever'
               || '     , tp.pcode'
               || '     , tp.project'
               || '     , tp.subproject'
               || '     , tp.rcode'
               || '     , tp.kostenrubriek'
               || '     , tp.kostengroep'
               || '     , tp.scode'
               || '     , tp.kostensoort'
               || '     , b.prs_bedrijf_naam'
               || '     , 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_kosten'
               || '     , o.mld_opdr_kosten_btw'
               || '     , o.mld_opdr_meerwerk'
               || '     , CASE WHEN fin_factuur_key IS NULL'
               || '            THEN 1'
               || '            WHEN (SELECT MIN(fc.fin_factuur_key)'
               || '                    FROM fin_factuur fc'
               || '                   WHERE fc.mld_opdr_key = f.mld_opdr_key) = f.fin_factuur_key'
               || '            THEN 1'
               || '            ELSE 0'
               || '            END                                        contractwaarde'
               || '     , f.fin_factuur_nr'
               || '     , f.fin_factuur_opmerking'
               || '     , f.fin_factuur_totaal'
               || '     , f.fin_factuur_totaal_btw'
               || '     , o.mld_opdr_datumbegin                           contractdatum'
               || '     , f.fin_factuur_datum                             factuurdatum'
               || '     , f.fin_factuur_advies                            adviesdatum'
               || '     , TO_CHAR (o.mld_opdr_datumbegin, ''DD-MM-YYYY'') contractdatum_p'
               || '     , TO_CHAR (f.fin_factuur_datum,   ''DD-MM-YYYY'') factuurdatum_p'
               || '     , TO_CHAR (f.fin_factuur_advies,  ''DD-MM-YYYY'') adviesdatum_p'
               || '     , p.startdatum_p'
               || '  FROM (SELECT *'
               || '          FROM fin_factuur fx'
               || '         WHERE (1=1)'
               || '           '|| v_part_D
               || '       )        f'
               || '     , mld_opdr           o'
               || '     , prs_bedrijf        b'
               || '     , prs_kostenplaats   kp'
               || '     , bgt_v_project_full tp'
               || '     , twyn_v_bgt_projectdatum p'
               || ' WHERE o.mld_opdr_key = f.mld_opdr_key(+)'
               || '   AND 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'
               || '   AND tp.bgt_project_key = p.bgt_project_key'
               || '   AND tp.ins_discipline_verwijder IS NULL'
               || '   AND tp.bgt_project_verwijder IS NULL'
               || '   '|| v_where;

      OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')';
   END;

   PROCEDURE twyn_v_factuur_datum ( user_key    IN  NUMBER
                                  , p_datum_van IN  VARCHAR2
                                  , p_datum_tot IN  VARCHAR2
                                  , p_cursor    OUT t_cursor
                                  , p_where     IN  VARCHAR2 DEFAULT NULL
                                  )
   AS
   -- Dit is een voorbereiding op #53761 Dashboard budgetbewaking
   -- waarin ook een cumulatief factuurbedrag nodig is.
      v_datum_van   DATE;
      v_datum_tot   DATE;

      v_part_W  VARCHAR2(32767);
      v_part_T  VARCHAR2(32767);
      v_where   VARCHAR2(32767);

   BEGIN
      v_datum_van := TO_DATE(p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := TO_DATE(p_datum_tot, 'dd-mm-yyyy');
      v_part_W    := SUBSTR(p_where, INSTR(p_where, 'WHERE')+6);
      v_where     := CASE WHEN v_part_W IS NOT NULL
                          THEN 'AND ' || v_part_W
                          ELSE ''
                     END
                  || CASE WHEN p_datum_van IS NOT NULL
                          THEN ' AND twyn_v_factuur_datum.factuur_datum >= TO_DATE('''|| p_datum_van ||''', ''dd-mm-yyyy'')'
                          ELSE ''
                     END
                  || CASE WHEN p_datum_tot IS NOT NULL
                          THEN ' AND twyn_v_factuur_datum.factuur_datum <= TO_DATE('''|| p_datum_tot ||''', ''dd-mm-yyyy'')'
                          ELSE ''
                     END;

      v_part_T := 'SELECT factuur_datum'
               || '     , factuur_inc'
               || '     , COALESCE( SUM(factuur_inc) OVER (ORDER BY factuur_datum), 0) cumulatief'
               || '  FROM (SELECT TO_CHAR(factuur_datum, ''YYYY-MM'') AS factuur_datum'
 	           || '             , SUM(factuur_inc) AS factuur_inc'
 	           || '          FROM twyn_v_factuur_datum'
               || ' 	    WHERE 1=1'
               || '   '|| v_where
 	           || '         GROUP BY TO_CHAR(factuur_datum, ''YYYY-MM'') '
 	           || '         ORDER BY 1, 2'
 	           || '       )';


      OPEN p_cursor FOR 'SELECT * FROM (' || v_part_T || ')';
   END;

END;
/


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