FCLT#63760: Automatisch opdrachten aanmaken ook in de workflow.

svn path=/Database/trunk/; revision=49829
This commit is contained in:
Maykel Geerdink
2021-02-15 13:52:29 +00:00
parent 93ea43eaf7
commit 789abb2358
4 changed files with 1008 additions and 7 deletions

View File

@@ -73,6 +73,10 @@ AS
RETURN varchar2;
PROCEDURE remove(p_bes_bestelling_key IN NUMBER);
PROCEDURE remove_opdr(p_bes_opdr_key IN NUMBER);
FUNCTION bes_besteed_budget_pgb (p_prs_key IN NUMBER, p_disc_key IN NUMBER)
RETURN NUMBER;
FUNCTION bes_besteed_budget_agb (p_kp_key IN NUMBER)
RETURN NUMBER;
END bes;
/
@@ -2244,6 +2248,120 @@ AS
fac.remove_tracking('bestelopdr', p_bes_opdr_key);
END;
FUNCTION bes_besteed_budget_pgb (p_prs_key IN NUMBER, p_disc_key IN NUMBER)
RETURN NUMBER
AS
l_budgetbesteld NUMBER := 0;
BEGIN
-- Besteed budget van meegegeven persoon dit jaar voor de meegegeven discipline i.v.m. Persoons Gebonden Budget (PGB).
-- Eventueel uitgezonderd (huidige) bestellingkey bes_key en meldingopdrachtkey opdr_key.
-- De discipline instelling disc_params_pgb moet 1 of 3 zijn. Afhankelijk van deze instelling roep je de pgb of agb versie aan. Hier opnieuw controleren is niet nodig.
-- Totaalbedrag van eerdere bestellingen en meldingopdrachten dit jaar van de besteller en behandelaar i.v.m. Persoons Gebonden Budget (PGB).
SELECT COALESCE(SUM(totaalbedrag), 0) - COALESCE(SUM(korting), 0) + COALESCE(SUM(levkosten), 0) budgetbesteld
INTO l_budgetbesteld
FROM (SELECT SUM(totaalbedrag) totaalbedrag
, SUM(b.bes_bestelling_korting) korting
, SUM(b.bes_bestelling_levkosten) levkosten
FROM (SELECT SUM (boi.bes_bestelopdr_item_aantal * boi.bes_bestelopdr_item_prijs) totaalbedrag
, b.bes_bestelling_key
FROM bes_bestelling b
, bes_bestelling_item bi
, bes_bestelopdr_item boi
, bes_bestelopdr bo
, bes_srtdeel isd
, bes_srtgroep isg
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND b.prs_perslid_key = p_prs_key
AND isg.ins_discipline_key = p_disc_key
-- Alleen bestellingopdrachten in de behandelings fase (In bestelling (Bevestigd)(4)) en in de gereed fase (Geleverd(6) en Verwerkt(7)).
-- Afgewezen(1), In behandeling(3), Ter bevestiging(5) en Geannuleerd(8) doen niet mee in de bepaling van geraamde en definitieve kosten.
AND bo.bes_bestelopdr_status IN (4, 6, 7)
AND b.bes_bestelling_datum >= TRUNC (SYSDATE, 'YEAR')
GROUP BY b.bes_bestelling_key) tot
, bes_bestelling b
WHERE b.bes_bestelling_key = tot.bes_bestelling_key);
RETURN l_budgetbesteld;
END;
FUNCTION bes_besteed_budget_agb (p_kp_key IN NUMBER)
RETURN NUMBER
AS
l_budgetbesteld NUMBER := 0;
l_kp_limietperiode NUMBER (1);
l_periode VARCHAR2 (4);
BEGIN
-- Besteed budget van meegegeven persoon afgelopen periode i.v.m. Afdelings Gebonden Budget (AGB).
-- Eventueel uitgezonderd (huidige) bestellingkey bes_key en meldingopdrachtkey opdr_key.
-- De discipline instelling disc_params_pgb moet 1 of 3 zijn. Afhankelijk van deze instelling roep je de pgb of agb versie aan. Hier opnieuw controleren is niet nodig.
-- Totaalbedrag van eerdere bestellingen en meldingopdrachten van afgelopen periode van de besteller en behandeaar i.v.m. Afdelings Gebonden Budget (AGB).
-- Limietperiode kostenplaats (prs_kostenplaats_limietperiode): 0(of NULL)=geen(oneindig) (default), 1=maand, 2=jaar.
IF p_kp_key > 0
THEN
-- Er is een kostenplaats gevonden.
-- De limiet periode van de kostenplaatsgroep overruled die van de kostenplaats indien ingevuld.
SELECT CASE COALESCE(kg.prs_kostenplaatsgrp_limperiode, 0) -- Indien kostenplaats geen kostenplaatsgroep heeft dan ook "Geen" en eigen limietperiode van de kostenplaats nemen.
WHEN 0 -- Geen.
THEN k.prs_kostenplaats_limietperiode
ELSE kg.prs_kostenplaatsgrp_limperiode -- Maand of Jaar.
END limietperiode
INTO l_kp_limietperiode
FROM prs_kostenplaats k
, prs_kostenplaatsgrp kg
WHERE k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)
AND k.prs_kostenplaats_key = p_kp_key;
IF l_kp_limietperiode = 1
THEN
l_periode := 'MM'; -- Maandelijks budget.
ELSIF l_kp_limietperiode = 2
THEN
l_periode := 'YYYY'; -- Jaarlijks budget.
ELSE
l_periode := NULL;
END IF;
SELECT COALESCE(SUM(totaalbedrag), 0) - COALESCE(SUM(korting), 0) + COALESCE(SUM(levkosten), 0) budgetbesteld
INTO l_budgetbesteld
FROM (SELECT SUM(totaalbedrag) totaalbedrag
, SUM(b.bes_bestelling_korting) korting
, SUM(b.bes_bestelling_levkosten) levkosten
FROM (SELECT SUM (boi.bes_bestelopdr_item_aantal * boi.bes_bestelopdr_item_prijs) totaalbedrag
, b.bes_bestelling_key
FROM bes_bestelling b
, bes_bestelling_item bi
, bes_bestelopdr_item boi
, bes_bestelopdr bo
, bes_srtdeel bsd
, bes_srtgroep bsg
, bes_discipline bd
, bes_disc_params bdp
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
AND bsg.ins_discipline_key = bd.ins_discipline_key
AND bsg.ins_discipline_key = bdp.bes_ins_discipline_key
AND bdp.bes_disc_params_pgb IN (2, 3) -- Alleenn agb meetellen: 2 = Alleen agb, 3 = Beiden, pgb en agb.
AND b.prs_kostenplaats_key = p_kp_key
-- Alleen bestellingopdrachten in de behandelings fase (In bestelling (Bevestigd)(4)) en in de gereed fase (Geleverd(6) en Verwerkt(7)).
-- Afgewezen(1), In behandeling(3), Ter bevestiging(5) en Geannuleerd(8) doen niet mee in de bepaling van geraamde en definitieve kosten.
AND bo.bes_bestelopdr_status IN (4, 6, 7)
AND ((l_kp_limietperiode IS NOT NULL AND b.bes_bestelling_datum >= TRUNC (SYSDATE, l_periode))
OR (l_kp_limietperiode IS NULL)) -- De eerste van de deze maand of 1 januari dit jaar
GROUP BY b.bes_bestelling_key) tot
, bes_bestelling b
WHERE b.bes_bestelling_key = tot.bes_bestelling_key);
END IF;
RETURN l_budgetbesteld;
END;
END bes;
/