diff --git a/PRS/PRS_PAC.SRC b/PRS/PRS_PAC.SRC index ceb0b475..b6207218 100644 --- a/PRS/PRS_PAC.SRC +++ b/PRS/PRS_PAC.SRC @@ -254,6 +254,8 @@ AS -- methode 2 = 2-laagsmethode via afdelingsboom tot gedefinieerde budgethouder en dan kpgroep -- methode 3 = als 2 maar houd rekening met de profiel van de budgethouders tov pondergrens -- Met pexcludekey kan een perslid_key worden opgegeven die je niet wilt + -- dat kan zijn omdat je het niet voor jezelf mag (can_selfapprove) of + -- omdat je een lager niveau al gefiatteerd hebt -- Geef -1 mee als je niemand wilt excluden FUNCTION getfiatteur (pkostenplaats_key IN NUMBER, pexcludekey IN NUMBER, @@ -285,7 +287,7 @@ AS -- 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 - IF pexcludekey > 0 THEN + IF pexcludekey > 0 AND lkpverantwkey <> pexcludekey THEN SELECT COUNT(prs_perslid_key) INTO lexcludeisvervanger FROM prs_collega @@ -295,17 +297,18 @@ AS dbms_output.put_line('ExcludeIsVervanger: '||lexcludeisvervanger); lmethode := fac.getSetting('prs_approvemethod'); dbms_output.put_line('Approvemethod: '||lmethode); - IF lmethode = 3 THEN + dbms_output.put_line('Ondergrens: '||pondergrens); + + IF lmethode = 3 THEN -- ook profiel budgethouder controleren lkpverantwlimiet := prs.getprofiellimiet (lkpverantwkey, pdisckey); 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 + END IF; END IF; - dbms_output.put_line('Ondergrens: '||pondergrens); - IF (lmethode = 3 AND lkpverantwlimiet >= pondergrens) -- lkpverantwkey != -1 is impliciet in die limiet - THEN - -- het profiel van de budgethouder is genoeg - RETURN lkpverantwkey; - END IF; - IF (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1 OR (lmethode = 3 AND lkpverantwlimiet < pondergrens)) + + IF (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1) AND (lmethode = 2 OR lmethode = 3) -- doorloop de boom naar boven, met allerlei aannames THEN @@ -322,7 +325,9 @@ AS -- kp is niet aan een afdeling gerelateerd, dan weet ik het met deze methode niet RETURN -1; END; - WHILE lkpverantwkey = -1 AND parentafdkey IS NOT NULL AND (lmethode <> 3 OR lkpverantwlimiet < pondergrens) + -- Zolang nog geen goede en we kunnen hogerop + WHILE (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1) + AND parentafdkey IS NOT NULL LOOP SELECT COALESCE (k.prs_perslid_key, -1), prs_afdeling_parentkey INTO lkpverantwkey, parentafdkey @@ -331,16 +336,29 @@ AS AND a.prs_afdeling_verwijder IS NULL AND a.prs_afdeling_key = parentafdkey; dbms_output.put_line('Volgende budgethouder: '||lkpverantwkey); - IF lmethode = 3 THEN + + IF lmethode = 3 THEN -- ook profiel budgethouder controleren lkpverantwlimiet := prs.getprofiellimiet (lkpverantwkey, pdisckey); - dbms_output.put_line('Zijn limiet: '||lkpverantwlimiet); + 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 + END IF; + END IF; + + IF pexcludekey > 0 AND lkpverantwkey <> pexcludekey THEN + SELECT COUNT(prs_perslid_key) + INTO lexcludeisvervanger + FROM prs_collega + WHERE prs_perslid_key_alt = pexcludekey + AND prs_perslid_key = lkpverantwkey; END IF; END LOOP; -- 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 - IF lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1 OR (lmethode = 3 AND lkpverantwlimiet < pondergrens) + IF lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1 THEN -- vindt de kostenplaatsGROEPverantwoordelijke van altijd de meegegeven kp BEGIN @@ -357,7 +375,7 @@ AS RETURN -1; END; END IF; - dbms_output.put_line('Volgende budgethouder: '||lkpverantwkey); + dbms_output.put_line('Resultaat budgethouder: '||lkpverantwkey); RETURN lkpverantwkey; END;