368 lines
17 KiB
Plaintext
368 lines
17 KiB
Plaintext
#ifdef BGT
|
|
/*
|
|
* $Revision$
|
|
* $Id$
|
|
*/
|
|
CREATE OR REPLACE PACKAGE bgt
|
|
AS
|
|
FUNCTION getBudgetMutaties ( p_budget_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
FUNCTION getBudgetOpDatum ( p_budget_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
FUNCTION getBudgetSoortMutatie ( p_kostenrubriek_key IN NUMBER
|
|
, p_kostensoortgrp_key IN NUMBER
|
|
, p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_soortmutatie IN VARCHAR2
|
|
, p_datum IN DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
FUNCTION getSoortMutatie ( p_mutatie_key IN NUMBER
|
|
) RETURN VARCHAR2;
|
|
FUNCTION getGecontracteerd( p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
FUNCTION getGefactureerdSoort( p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
) RETURN NUMBER;
|
|
FUNCTION getGefactureerd ( p_mld_opdr_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
FUNCTION getTefactureren ( p_mld_opdr_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER;
|
|
END bgt;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY bgt
|
|
AS
|
|
FUNCTION getBudgetMutaties ( p_budget_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag_mut NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
-- NB: dit zijn zowel onderlinge mutaties als van-naar reserve mutaties!!
|
|
BEGIN
|
|
SELECT COALESCE(SUM(mut.bedrag_mutaties), 0)
|
|
INTO v_bedrag_mut
|
|
FROM (SELECT CASE WHEN p_btw=0 THEN SUM(bgt_budget_bedrag_van)
|
|
WHEN p_btw=1 THEN SUM(bgt_budget_btwbedrag_van)
|
|
WHEN p_btw=2 THEN SUM(bgt_budget_bedrag_van) + SUM(bgt_budget_btwbedrag_van)
|
|
END bedrag_mutaties
|
|
FROM bgt_budgetmutatie
|
|
WHERE bgt_budget_key_van = p_budget_key
|
|
AND ((p_datum_van IS NOT NULL AND bgt_budgetmutatie_datum >= p_datum_van) OR p_datum_van IS NULL)
|
|
AND ((p_datum_tot IS NOT NULL AND bgt_budgetmutatie_datum < p_datum_tot) OR p_datum_tot IS NULL)
|
|
UNION
|
|
SELECT CASE WHEN p_btw=0 THEN SUM(bgt_budget_bedrag_naar)
|
|
WHEN p_btw=1 THEN SUM(bgt_budget_btwbedrag_naar)
|
|
WHEN p_btw=2 THEN SUM(bgt_budget_bedrag_naar) + SUM(bgt_budget_btwbedrag_naar)
|
|
END bedrag_mutaties
|
|
FROM bgt_budgetmutatie
|
|
WHERE bgt_budget_key_naar = p_budget_key
|
|
AND ((p_datum_van IS NOT NULL AND bgt_budgetmutatie_datum >= p_datum_van) OR p_datum_van IS NULL)
|
|
AND ((p_datum_tot IS NOT NULL AND bgt_budgetmutatie_datum < p_datum_tot) OR p_datum_tot IS NULL)
|
|
) mut;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag_mut := NULL;
|
|
END;
|
|
RETURN v_bedrag_mut;
|
|
END getBudgetMutaties;
|
|
|
|
FUNCTION getBudgetOpDatum ( p_budget_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_huidig_budget NUMBER;
|
|
v_mutatie NUMBER;
|
|
v_datum_budget NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
BEGIN
|
|
SELECT CASE WHEN p_btw=0 THEN COALESCE(bgt_budget_bedrag, 0)
|
|
WHEN p_btw=1 THEN COALESCE(bgt_budget_btwbedrag, 0)
|
|
WHEN p_btw=2 THEN COALESCE(bgt_budget_bedrag, 0) + COALESCE(bgt_budget_btwbedrag, 0)
|
|
END huidig_budget
|
|
, CASE WHEN p_btw=0 THEN BGT.getBudgetMutaties(bgt_budget_key, 0, p_datum+1, NULL)
|
|
WHEN p_btw=1 THEN BGT.getBudgetMutaties(bgt_budget_key, 1, p_datum+1, NULL)
|
|
WHEN p_btw=2 THEN BGT.getBudgetMutaties(bgt_budget_key, 0, p_datum+1, NULL) + BGT.getBudgetMutaties(bgt_budget_key, 1, p_datum+1, NULL)
|
|
END mutaties
|
|
INTO v_huidig_budget
|
|
, v_mutatie
|
|
FROM bgt_budget
|
|
WHERE bgt_budget_key = p_budget_key;
|
|
--
|
|
v_datum_budget := v_huidig_budget - v_mutatie;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_datum_budget := NULL;
|
|
END;
|
|
RETURN v_datum_budget;
|
|
END getBudgetOpDatum;
|
|
|
|
FUNCTION getBudgetSoortMutatie ( p_kostenrubriek_key IN NUMBER
|
|
, p_kostensoortgrp_key IN NUMBER
|
|
, p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_soortmutatie IN VARCHAR2
|
|
, p_datum IN DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
BEGIN
|
|
SELECT SUM(bgt_mutatie_bedrag) bgt_mutatie_bedrag
|
|
INTO v_bedrag
|
|
FROM ( SELECT b.bgt_kostenrubriek_key
|
|
, b.prs_kostensoortgrp_key
|
|
, b.prs_kostensoort_key
|
|
, b.bgt_budget_isreserve
|
|
, m.bgt_budgetmutatie_datum
|
|
, CASE WHEN p_btw=0 THEN COALESCE(m.bgt_budget_bedrag_van, 0)
|
|
WHEN p_btw=1 THEN COALESCE(m.bgt_budget_btwbedrag_van, 0)
|
|
WHEN p_btw=2 THEN COALESCE(m.bgt_budget_bedrag_van, 0) + COALESCE(m.bgt_budget_btwbedrag_van, 0)
|
|
END bgt_mutatie_bedrag
|
|
, BGT.getSoortMutatie (m.bgt_budgetmutatie_key) bgt_mutatie_soort
|
|
FROM bgt_budget b
|
|
, bgt_budgetmutatie m
|
|
WHERE b.bgt_budget_key = m.bgt_budget_key_van
|
|
UNION
|
|
SELECT b.bgt_kostenrubriek_key
|
|
, b.prs_kostensoortgrp_key
|
|
, b.prs_kostensoort_key
|
|
, b.bgt_budget_isreserve
|
|
, m.bgt_budgetmutatie_datum
|
|
, CASE WHEN p_btw=0 THEN COALESCE(m.bgt_budget_bedrag_naar, 0)
|
|
WHEN p_btw=1 THEN COALESCE(m.bgt_budget_btwbedrag_naar, 0)
|
|
WHEN p_btw=2 THEN COALESCE(m.bgt_budget_bedrag_naar, 0) + COALESCE(m.bgt_budget_btwbedrag_naar, 0)
|
|
END bgt_mutatie_bedrag
|
|
, BGT.getSoortMutatie (m.bgt_budgetmutatie_key) bgt_mutatie_soort
|
|
FROM bgt_budget b
|
|
, bgt_budgetmutatie m
|
|
WHERE b.bgt_budget_key = m.bgt_budget_key_naar
|
|
) single_mutatie
|
|
WHERE INSTR(p_soortmutatie, bgt_mutatie_soort) > 0
|
|
AND ( (p_kostenrubriek_key IS NOT NULL AND p_kostensoortgrp_key = -1 AND p_kostensoort_key = -1 AND bgt_kostenrubriek_key = p_kostenrubriek_key)
|
|
OR (p_kostenrubriek_key IS NOT NULL AND p_kostensoortgrp_key IS NULL AND p_kostensoort_key IS NULL AND bgt_kostenrubriek_key = p_kostenrubriek_key AND prs_kostensoortgrp_key IS NULL AND prs_kostensoort_key IS NULL)
|
|
OR (p_kostenrubriek_key IS NULL AND p_kostensoortgrp_key IS NOT NULL AND p_kostensoort_key = -1 AND prs_kostensoortgrp_key = p_kostensoortgrp_key)
|
|
OR (p_kostenrubriek_key IS NULL AND p_kostensoortgrp_key IS NOT NULL AND p_kostensoort_key IS NULL AND prs_kostensoortgrp_key = p_kostensoortgrp_key AND prs_kostensoort_key IS NULL)
|
|
OR (p_kostenrubriek_key IS NULL AND p_kostensoortgrp_key IS NULL AND p_kostensoort_key IS NOT NULL AND prs_kostensoort_key = p_kostensoort_key)
|
|
)
|
|
AND (bgt_budgetmutatie_datum < p_datum OR p_datum IS NULL);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag := NULL;
|
|
END;
|
|
RETURN v_bedrag;
|
|
END getBudgetSoortMutatie;
|
|
|
|
FUNCTION getSoortMutatie( p_mutatie_key IN NUMBER
|
|
) RETURN VARCHAR2
|
|
IS
|
|
v_budget_van bgt_budgetmutatie.bgt_budget_key_van%TYPE;
|
|
v_budget_naar bgt_budgetmutatie.bgt_budget_key_naar%TYPE;
|
|
v_mutatie_omschrijving bgt_budgetmutatie.bgt_budgetmutatie_omschrijving%TYPE;
|
|
v_mutatie_level_van VARCHAR2(1);
|
|
v_mutatie_level_naar VARCHAR2(1);
|
|
v_soort_mutatie VARCHAR2(1);
|
|
v_budget_isreserve bgt_budget.bgt_budget_isreserve%TYPE;
|
|
BEGIN
|
|
BEGIN
|
|
SELECT m.bgt_budget_key_van
|
|
, m.bgt_budget_key_naar
|
|
, m.bgt_budgetmutatie_omschrijving
|
|
, CASE WHEN bv.prs_kostensoort_key IS NOT NULL
|
|
THEN 'S'
|
|
ELSE CASE WHEN bv.prs_kostensoortgrp_key IS NOT NULL
|
|
THEN 'G'
|
|
ELSE CASE WHEN bv.bgt_kostenrubriek_key IS NOT NULL
|
|
THEN 'R'
|
|
ELSE 'P'
|
|
END
|
|
END
|
|
END mutatie_level_van
|
|
, CASE WHEN bn.prs_kostensoort_key IS NOT NULL
|
|
THEN 'S'
|
|
ELSE CASE WHEN bn.prs_kostensoortgrp_key IS NOT NULL
|
|
THEN 'G'
|
|
ELSE CASE WHEN bn.bgt_kostenrubriek_key IS NOT NULL
|
|
THEN 'R'
|
|
ELSE 'P'
|
|
END
|
|
END
|
|
END mutatie_level_naar
|
|
, bv.bgt_budget_isreserve
|
|
INTO v_budget_van
|
|
, v_budget_naar
|
|
, v_mutatie_omschrijving
|
|
, v_mutatie_level_van
|
|
, v_mutatie_level_naar
|
|
, v_budget_isreserve
|
|
FROM bgt_budget bv
|
|
, bgt_budget bn
|
|
, bgt_budgetmutatie m
|
|
WHERE m.bgt_budget_key_van = bv.bgt_budget_key(+)
|
|
AND m.bgt_budget_key_naar = bn.bgt_budget_key(+)
|
|
AND m.bgt_budgetmutatie_key = p_mutatie_key;
|
|
--
|
|
-- Mutatie van-naar reserve (tussen algemeenreserve en kostensoort of kostenrubriek en kostensoort)
|
|
-- (Is dus allebei tussen kostenrubriek en kostensoort).
|
|
-- Maak nog onderscheid tussen automatische overboeking A (correctie van budget tgv meer gecontracteerd dan budget)
|
|
-- en een gewone mutatie van/naar reserve.
|
|
IF ( (v_mutatie_level_van = 'R')
|
|
OR (v_mutatie_level_naar = 'R')
|
|
) THEN
|
|
IF (v_mutatie_omschrijving = 'AO Automatische overboeking') THEN
|
|
v_soort_mutatie := 'A';
|
|
ELSE
|
|
v_soort_mutatie := 'R';
|
|
END IF;
|
|
END IF;
|
|
--
|
|
-- Mutatie extra budget (er wordt geld aan algemeenreserve, kostenrubriek of kostensoort toegevoegd OF onttrokken.
|
|
IF ((v_budget_van = v_budget_naar) OR (v_budget_van IS NULL) OR (v_budget_naar IS NULL) ) THEN
|
|
v_soort_mutatie := 'E';
|
|
END IF;
|
|
--
|
|
-- Onderlinge mutatie (mutaties tussen kostensoorten)
|
|
IF ( (v_budget_van <> v_budget_naar)
|
|
AND (v_mutatie_level_van = 'S')
|
|
AND (v_mutatie_level_naar = 'S')
|
|
) THEN
|
|
v_soort_mutatie := 'M';
|
|
END IF;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_soort_mutatie := NULL;
|
|
END;
|
|
--
|
|
RETURN v_soort_mutatie;
|
|
END getSoortMutatie;
|
|
|
|
FUNCTION getGecontracteerd( p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
BEGIN
|
|
SELECT CASE WHEN p_btw=0 THEN SUM(mld_opdr_kosten)
|
|
WHEN p_btw=1 THEN SUM(mld_opdr_kosten_btw)
|
|
WHEN p_btw=2 THEN SUM(mld_opdr_kosten) + SUM(mld_opdr_kosten_btw)
|
|
END contracten
|
|
INTO v_bedrag
|
|
FROM mld_opdr
|
|
WHERE prs_kostensoort_key = p_kostensoort_key
|
|
AND ((p_datum_van IS NOT NULL AND mld_opdr_datumbegin >= p_datum_van) OR p_datum_van IS NULL)
|
|
AND ((p_datum_tot IS NOT NULL AND mld_opdr_datumbegin < p_datum_tot) OR p_datum_tot IS NULL);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag := NULL;
|
|
END;
|
|
RETURN v_bedrag;
|
|
END getGecontracteerd;
|
|
|
|
FUNCTION getGefactureerdSoort( p_kostensoort_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag NUMBER;
|
|
BEGIN
|
|
BEGIN
|
|
SELECT SUM(BGT.getGefactureerd(mld_opdr_key, p_btw, NULL, NULL))
|
|
INTO v_bedrag
|
|
FROM mld_opdr
|
|
WHERE prs_kostensoort_key = p_kostensoort_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag := NULL;
|
|
END;
|
|
RETURN v_bedrag;
|
|
END getGefactureerdSoort;
|
|
|
|
FUNCTION getGefactureerd ( p_mld_opdr_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
v_bedrag := 0;
|
|
BEGIN
|
|
SELECT CASE WHEN p_btw=0 THEN SUM(fin_factuur_totaal)
|
|
WHEN p_btw=1 THEN SUM(fin_factuur_totaal_btw)
|
|
WHEN p_btw=2 THEN SUM(fin_factuur_totaal) + SUM(fin_factuur_totaal_btw)
|
|
END facturen
|
|
INTO v_bedrag
|
|
FROM fin_factuur
|
|
WHERE ((p_datum_van IS NOT NULL AND fin_factuur_datum >= p_datum_van) OR p_datum_van IS NULL)
|
|
AND ((p_datum_tot IS NOT NULL AND fin_factuur_datum < p_datum_tot) OR p_datum_tot IS NULL)
|
|
AND mld_opdr_key = p_mld_opdr_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag := 0;
|
|
END;
|
|
RETURN v_bedrag;
|
|
END getGefactureerd;
|
|
|
|
FUNCTION getTefactureren ( p_mld_opdr_key IN NUMBER
|
|
, p_btw IN NUMBER
|
|
, p_datum_van DATE DEFAULT NULL
|
|
, p_datum_tot DATE DEFAULT NULL
|
|
) RETURN NUMBER
|
|
IS
|
|
v_bedrag NUMBER;
|
|
BEGIN
|
|
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
|
|
v_bedrag := 0;
|
|
BEGIN
|
|
SELECT CASE WHEN p_btw=0 THEN COALESCE(MAX(o.mld_opdr_kosten), 0) - SUM(COALESCE(f.fin_factuur_totaal, 0))
|
|
WHEN p_btw=1 THEN COALESCE(MAX(o.mld_opdr_kosten_btw), 0) - SUM(COALESCE(f.fin_factuur_totaal_btw, 0))
|
|
WHEN p_btw=2 THEN COALESCE(MAX(o.mld_opdr_kosten), 0) + MAX(COALESCE(o.mld_opdr_kosten_btw, 0))
|
|
- SUM(COALESCE(f.fin_factuur_totaal, 0))
|
|
- SUM(COALESCE(f.fin_factuur_totaal_btw, 0))
|
|
END tefactureren
|
|
INTO v_bedrag
|
|
FROM fin_factuur f
|
|
, mld_opdr o
|
|
WHERE o.mld_opdr_key = f.mld_opdr_key(+)
|
|
AND ((p_datum_van IS NOT NULL AND fin_factuur_datum >= p_datum_van) OR p_datum_van IS NULL)
|
|
AND ((p_datum_tot IS NOT NULL AND fin_factuur_datum < p_datum_tot) OR p_datum_tot IS NULL)
|
|
AND o.mld_opdr_key = p_mld_opdr_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN
|
|
v_bedrag := 0;
|
|
END;
|
|
RETURN v_bedrag;
|
|
END getTefactureren;
|
|
|
|
|
|
END bgt;
|
|
/
|
|
|
|
REGISTERRUN('$Id$')
|
|
|
|
#endif // BGT
|