WZUV#62274: Naam fiatteur.

svn path=/Database/trunk/; revision=47023
This commit is contained in:
Maykel Geerdink
2020-06-02 08:20:24 +00:00
parent 1c779f3d4f
commit 7c7a9bfa51

View File

@@ -251,14 +251,18 @@ AS
-- De functie levert de prs_perslid_key op van de perslid die een item (opdracht/bestelling) van
-- discipline pdisckey boven bedrag COALESCE(pfiatbedrag, pondergrens) mag fiatteren
-- volgens de door ons gedefinieerde regels. Werkt analoog aan getkpverantwoordelijke
-- Maar houdt hierbij rekening met de profielen van de budgethouders als prs_approvemethod==3
-- Maar houdt hierbij rekening met de profielen van de budgethouders als prs_approvemethod == 3
--
-- Levert dus in eerste instantie de kostenplaatsverantwoordelijke (budgethouder) op.
-- Levert de kostenplaatsgroepverantwoordelijke op indien geen goede budgethouder
-- wordt gevonden.
-- Afhankelijk van de pfiatbedrag levert de functie dan de kostenplaatsgroepverantwoordelijke op
-- die boven het bedrag van COALESCE(pfiatbedrag, pondergrens) mag fiatteren.
-- De parameter pondergrens wordt ook gebruikt voor mode 3 om het profiel van de budgethouder te controleren. Daarom extra parameter pfiatbedrag nodig.
-- 1) Levert dus in eerste instantie de kostenplaatsverantwoordelijke (budgethouder) op.
-- 2) Levert de kostenplaatsgroepverantwoordelijke op indien geen goede budgethouder wordt gevonden.
-- Afhankelijk van de pfiatbedrag levert de functie dan de kostenplaatsgroepverantwoordelijke op
-- die boven het bedrag van COALESCE(pfiatbedrag, pondergrens) mag fiatteren.
-- Als er in dat geval WEL een pfiatbedrag wordt meegegeven dan wordt de VOLGENDE (kpg) fiatteur opgeleverd.
-- Als er in dat geval GEEN pfiatbedrag wordt meegegeven dan wordt de LAATSTE (kpg) fiatteur opgeleverd.
-- De parameter pondergrens wordt ook gebruikt voor mode 3 om het profiel van de budgethouder te controleren. Daarom extra parameter pfiatbedrag nodig.
--
-- Als pexcludekey gevuld is, dan is dit de kp verantwoordelijke. Niet vullen met een kpGROEP verantwoordelijke, want dan wordt de kp verantwoordelijke teruggegeven.
-- Het fiatbedrag (of pondergrens) zorgt er wel voor dat je juiste kpg verantwoordelijke wordt teruggegeven.
--
FUNCTION getfiatteur (pkostenplaats_key IN NUMBER,
pexcludekey IN NUMBER,
@@ -294,13 +298,13 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- kostenplaats bestaat niet
-- Kostenplaats bestaat niet.
RETURN -1;
END;
dbms_output.put_line('Budgethouder: '||lkpverantwkey);
-- lkpverantwkey is (mits gedefinieerd) de budgethouder van de kp. Het is nog niet gezegd of dit de gevraagde fiatteur is
-- De lkpverantwkey is (mits gedefinieerd) de budgethouder van de kp. Het is nog niet gezegd of dit de gevraagde fiatteur is.
-- Is de meegegeven pexcludekey wellicht een vervanger van kostenplaatsverantwoordelijke van de kostenplaats?
-- Zo ja, dan is in dat geval lkpverantwkey de pexcludekey
-- Zo ja, dan is in dat geval lkpverantwkey de pexcludekey.
IF pexcludekey > 0 AND lkpverantwkey <> pexcludekey THEN
SELECT COUNT(prs_perslid_key)
INTO lexcludeisvervanger
@@ -318,16 +322,16 @@ AS
dbms_output.put_line('Zijn limiet: '||lkpverantwlimiet);
IF (lkpverantwlimiet < pondergrens) -- lkpverantwkey != -1 is impliciet in die limiet
THEN -- het profiel van deze budgethouder is niet genoeg
lkpverantwkey := -1; -- niet meer interessant wie dit was
lkpverantwkey := -1; -- Niet meer interessant wie dit was.
END IF;
END IF;
IF (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1)
AND (lmethode = 2 OR lmethode = 3)
-- doorloop de boom naar boven, met allerlei aannames
-- Doorloop de boom naar boven, met allerlei aannames.
THEN
dbms_output.put_line('We gaan de boom in');
-- waar hoort deze kp bij?
-- Waar hoort deze kp bij?
BEGIN
SELECT prs_afdeling_key, prs_afdeling_parentkey
INTO afdkey, parentafdkey
@@ -336,10 +340,10 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- kp is niet aan een afdeling gerelateerd, dan weet ik het met deze methode niet
-- De kostenplaats is niet aan een afdeling gerelateerd, dan weet ik het met deze methode niet.
RETURN -1;
END;
-- Zolang nog geen goede en we kunnen hogerop
-- Zolang nog geen goede en we kunnen hogerop.
WHILE (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1)
AND parentafdkey IS NOT NULL
LOOP
@@ -351,12 +355,12 @@ AS
AND a.prs_afdeling_key = parentafdkey;
dbms_output.put_line('Volgende budgethouder: '||lkpverantwkey);
IF lmethode = 3 THEN -- ook profiel budgethouder controleren
IF lmethode = 3 THEN -- Ook profiel budgethouder controleren.
lkpverantwlimiet := prs.getprofiellimiet (lkpverantwkey, pdisckey);
dbms_output.put_line('Zijn limiet B: '||lkpverantwlimiet);
IF (lkpverantwlimiet < pondergrens)
THEN -- het profiel van deze budgethouder is niet genoeg
lkpverantwkey := -1; -- niet meer interessant wie dit was
lkpverantwkey := -1; -- Niet meer interessant wie dit was.
END IF;
END IF;
@@ -368,13 +372,16 @@ AS
AND prs_perslid_key = lkpverantwkey;
END IF;
END LOOP;
-- nu heb ik er een of kan ik er geen vinden
-- Nu heb ik er een of kan ik er geen vinden.
END IF;
dbms_output.put_line('Gevonden budgethouder voor de kpgroep-tak: '||lkpverantwkey);
-- Nu: als ik methode 1 heb, of methode 2 niemand opleverde (ondanks afdelingskostenplaats): de kpngroepverantwoordelijke
-- Als 1) de methode 1 is of
-- 2) de methode 2 of 3 is en dit niemand opleverde (ondanks afdelingskostenplaats) of
-- 3) de opgeleverde kostenplaatsverandwoordelijke de exclude(vervanger) is
-- dan kpngroepverantwoordelijken opvragen en kijken wie van hen de gevraagde fiatteur is.
IF lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1
THEN
-- vindt de kostenplaatsGROEPverantwoordelijke van de altijd meegegeven kp
-- Vindt de kostenplaatsGROEPverantwoordelijken van de altijd meegegeven kostenplaats.
BEGIN
SELECT COALESCE(kg.prs_perslid_key, -1),
COALESCE(kg.prs_kostenplaatsgrp_fiat2_key, -1),
@@ -397,13 +404,13 @@ AS
lfoundfiatteur := 0;
lfiatteur := -1;
-- Als er een fiatbedrag is meegegeven dan de volgende fiatteur opleveren en niet de laatste die moet fiatteren.
-- Dan het de ondergrens het fiatbedrag en niet het totale opdrachtbedrag.
-- Als er WEL een fiatbedrag is meegegeven dan de VOLGENDE fiatteur opleveren. De ondergrens is dan het fiatbedrag (pfiatbedrag).
-- Als er GEEN fiatbedrag is meegegeven dan de LAATSTE fiatteur opleveren. De ondergrens is dan pondergrens (normaalgesproken het totale opdrachtbedrag).
IF pfiatbedrag >= 0
THEN
lgrens := pfiatbedrag;
lgrens := pfiatbedrag; // De volgende fiatteur opleveren.
ELSE
lgrens := pondergrens;
lgrens := pondergrens; // De laatste fiatteur opleveren.
END IF;
WHILE lteller <= 3 AND lfoundfiatteur = 0