FSN#39055 BCS/2000 functionaliteit in FACILITOR - customization

svn path=/Database/trunk/; revision=36423
This commit is contained in:
Erik Groener
2017-12-20 13:36:44 +00:00
parent 7995d46702
commit 396af4721e
2 changed files with 352 additions and 18 deletions

View File

@@ -6,12 +6,31 @@
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
@@ -28,23 +47,31 @@ 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
v_bedrag_mut := 0;
-- 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_van), 0)
SELECT COALESCE(SUM(mut.bedrag_mutaties), 0)
INTO v_bedrag_mut
FROM (SELECT SUM(bgt_budget_bedrag_van) bedrag_van
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 SUM(bgt_budget_bedrag_naar) bedrag_van
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)
@@ -52,34 +79,226 @@ AS
) mut;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_bedrag_mut := 0;
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_bedrag NUMBER;
v_mutatie NUMBER;
v_eindbedrag NUMBER;
v_huidig_budget NUMBER;
v_mutatie NUMBER;
v_datum_budget NUMBER;
BEGIN
v_bedrag := 0;
-- p_btw: 0=excl.btw, 1=btw, 2=incl.btw.
BEGIN
SELECT COALESCE(bgt_budget_bedrag, 0)
, BGT.getBudgetMutaties(bgt_budget_key, p_datum+1, NULL)
INTO v_eindbedrag
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_bedrag := v_eindbedrag - v_mutatie;
--
v_datum_budget := v_huidig_budget - v_mutatie;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_bedrag := 0;
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 getBudgetOpDatum;
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
@@ -119,9 +338,11 @@ AS
-- 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(f.fin_factuur_totaal)
WHEN p_btw=1 THEN COALESCE(MAX(o.mld_opdr_kosten_btw), 0) - SUM(f.fin_factuur_totaal_btw)
WHEN p_btw=2 THEN COALESCE(MAX(o.mld_opdr_kosten), 0) + COALESCE(MAX(o.mld_opdr_kosten_btw), 0) - SUM(f.fin_factuur_totaal) - SUM(f.fin_factuur_totaal_btw)
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

View File

@@ -11,6 +11,119 @@ AS
DEFINIEER_VIEW_AANWEZIG(ctr_discipline, ins_discipline_verwijder,
bgt_v_aanwezigdiscipline, 0);
CREATE OR REPLACE VIEW bgt_v_project_gegevens
AS
SELECT pr.ins_discipline_key
, pr.bgt_project_key
, dp.bgt_disc_params_opdrachtgever opdrachtgever
, dp.bgt_disc_params_code pcode
, dp.bgt_disc_params_code || ' ' || id.ins_discipline_omschrijving project
, id.ins_discipline_omschrijving projectnaam
, pr.bgt_project_code dcode
, pr.bgt_project_code || ' ' || pr.bgt_project_omschrijving subproject
, pr.bgt_project_omschrijving subprojectnaam
, '' versienummer
, id.ins_discipline_verwijder
, pr.bgt_project_verwijder
FROM ins_tab_discipline id
, bgt_disc_params dp
, bgt_project pr
WHERE id.ins_discipline_module = 'BGT'
AND id.ins_discipline_key = dp.bgt_ins_discipline_key
AND id.ins_discipline_key = pr.ins_discipline_key;
CREATE OR REPLACE VIEW bgt_v_project_full
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.versienummer
, pr.ins_discipline_verwijder
, pr.bgt_project_verwijder
, kr.bgt_kostenrubriek_key
, kr.bgt_kostenrubriek_code rcode
, kr.bgt_kostenrubriek_oms kostenrubriek
, NULL prs_kostensoortgrp_key
, NULL gcode
, NULL kostengroep
, NULL prs_kostensoort_key
, NULL scode
, NULL kostensoort
, kr.bgt_kostenrubriek_code kostencode
, SUBSTR(kr.bgt_kostenrubriek_oms, INSTR(kr.bgt_kostenrubriek_oms, ' ',1,1)+1) kostennaam
FROM bgt_v_project_gegevens pr
, bgt_kostenrubriek kr
WHERE pr.bgt_project_key = kr.bgt_project_key
UNION
SELECT pr.ins_discipline_key
, pr.bgt_project_key
, pr.opdrachtgever
, pr.pcode
, pr.project
, pr.projectnaam
, pr.dcode
, pr.subproject
, pr.subprojectnaam
, pr.versienummer
, pr.ins_discipline_verwijder
, pr.bgt_project_verwijder
, kr.bgt_kostenrubriek_key
, kr.bgt_kostenrubriek_code rcode
, kr.bgt_kostenrubriek_oms kostenrubriek
, kg.prs_kostensoortgrp_key
, kg.prs_kostensoortgrp_altcode gcode
, kg.prs_kostensoortgrp_oms kostengroep
, NULL
, NULL
, NULL
, kg.prs_kostensoortgrp_altcode kostencode
, SUBSTR(kg.prs_kostensoortgrp_oms, INSTR(kg.prs_kostensoortgrp_oms, ' ',1,1)+1) kostennaam
FROM bgt_v_project_gegevens pr
, bgt_kostenrubriek kr
, prs_kostensoortgrp kg
WHERE pr.bgt_project_key = kr.bgt_project_key
AND kr.bgt_kostenrubriek_key = kg.bgt_kostenrubriek_key
UNION
SELECT pr.ins_discipline_key
, pr.bgt_project_key
, pr.opdrachtgever
, pr.pcode
, pr.project
, pr.projectnaam
, pr.dcode
, pr.subproject
, pr.subprojectnaam
, pr.versienummer
, pr.ins_discipline_verwijder
, pr.bgt_project_verwijder
, kr.bgt_kostenrubriek_key
, kr.bgt_kostenrubriek_code rcode
, kr.bgt_kostenrubriek_oms kostenrubriek
, kg.prs_kostensoortgrp_key
, kg.prs_kostensoortgrp_altcode gcode
, kg.prs_kostensoortgrp_oms kostengroep
, ks.prs_kostensoort_key
, ks.prs_kostensoort_altcode scode
, ks.prs_kostensoort_oms kostensoort
, ks.prs_kostensoort_altcode kostencode
, SUBSTR(ks.prs_kostensoort_oms, INSTR(ks.prs_kostensoort_oms, ' ',1,1)+1) kostennaam
FROM bgt_v_project_gegevens pr
, bgt_kostenrubriek kr
, prs_kostensoortgrp kg
, prs_kostensoort ks
WHERE pr.bgt_project_key = kr.bgt_project_key
AND kr.bgt_kostenrubriek_key = kg.bgt_kostenrubriek_key
AND kg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key;
REGISTERRUN('$Id$')
#endif // BGT