VGLD#51622: Mandaat overschrijden van Budgethouder.

svn path=/Database/trunk/; revision=36593
This commit is contained in:
Maykel Geerdink
2018-01-16 08:45:23 +00:00
parent bbf5469236
commit f15f64614c
3 changed files with 196 additions and 24 deletions

View File

@@ -238,6 +238,8 @@ CREATE_TABLE(bes_bestelling, 0)
bes_bestelling_fiat_user
NUMBER(10)
CONSTRAINT bes_r_bes_bestelling_fiat REFERENCES prs_perslid(prs_perslid_key),
bes_bestelling_fiatbedrag /* Tot zover gefiatteerd */
NUMBER(11,2),
mld_adres_key_lev
NUMBER(10)
CONSTRAINT bes_r_mld_adres_key_lev REFERENCES mld_adres(mld_adres_key),

View File

@@ -83,10 +83,16 @@ AS
FUNCTION getfiatteur (pkostenplaats_key IN NUMBER,
pexcludekey IN NUMBER,
pondergrens IN NUMBER,
pdisckey IN NUMBER
pdisckey IN NUMBER,
pfiatbedrag IN NUMBER DEFAULT -1
)
RETURN NUMBER;
FUNCTION nextfiatteur (pkey IN NUMBER,
pmodule IN VARCHAR2,
pexcludekey IN NUMBER DEFAULT -1)
RETURN NUMBER;
PROCEDURE setpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2);
FUNCTION testpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2)
@@ -242,8 +248,8 @@ AS
RETURN llimiet;
END;
-- Levert de prs_perslid_key op van de perslid die een item (opdracht/bestelling) van
-- discipline pdisckey boven bedrag pondergrens mag fiatteren
-- 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
--
@@ -257,19 +263,35 @@ AS
-- 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
--
-- Afhankelijk van de pfiatbedrag levert de functie dus
-- a) De laatste fiatteur op die moet fiatteren (geen fiatbedrag meegegeven).
-- Als de opdracht uberhaupt niet goed gekeurd kan worden wordt -1 opgeleverd
-- b) De volgende fiatteur op die moet fiatteren (fiatbedrag meegegeven).
FUNCTION getfiatteur (pkostenplaats_key IN NUMBER,
pexcludekey IN NUMBER,
pondergrens IN NUMBER,
pdisckey IN NUMBER
pdisckey IN NUMBER,
pfiatbedrag IN NUMBER DEFAULT -1
)
RETURN NUMBER
IS
lkpverantwkey prs_kostenplaats.prs_perslid_key%TYPE;
lkpgverantwkey prs_kostenplaatsgrp.prs_perslid_key%TYPE;
lkpgverantwkey1 prs_kostenplaatsgrp.prs_perslid_key%TYPE;
lkpgverantwkey2 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fiat2_key%TYPE;
lkpgverantwkey3 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fiat3_key%TYPE;
lexcludeisvervanger NUMBER;
lexcludeiskpgverantw NUMBER;
lkpverantwlimiet fac_profiel.fac_profiel_limiet%TYPE;
afdkey prs_afdeling.prs_afdeling_key%TYPE;
parentafdkey prs_afdeling.prs_afdeling_parentkey%TYPE;
lmethode NUMBER;
lteller NUMBER;
lfoundfiatteur NUMBER;
lfiatteur prs_kostenplaats.prs_perslid_key%TYPE;
llastfiat BOOLEAN;
lgrens NUMBER;
BEGIN
BEGIN
lkpverantwkey := -1;
@@ -360,23 +382,164 @@ AS
-- Nu: als ik methode 1 heb, of methode 2 niemand opleverde (ondanks afdelingskostenplaats): de kpngroepverantwoordelijke
IF lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1
THEN
-- vindt de kostenplaatsGROEPverantwoordelijke van altijd de meegegeven kp
-- vindt de kostenplaatsGROEPverantwoordelijke van de altijd meegegeven kp
BEGIN
SELECT COALESCE (kg.prs_perslid_key, -1)
INTO lkpverantwkey -- variabele bvat nu een kpg-verantwoordelijke, naam klopt niet 100%
FROM prs_kostenplaats k, prs_kostenplaatsgrp kg
WHERE prs_kostenplaats_key = pkostenplaats_key
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key
AND kg.prs_perslid_key NOT IN (lkpverantwkey, pexcludekey);
SELECT COALESCE(kg.prs_perslid_key, -1),
COALESCE(kg.prs_kostenplaatsgrp_fiat2_key, -1),
COALESCE(kg.prs_kostenplaatsgrp_fiat3_key, -1)
INTO lkpgverantwkey1,
lkpgverantwkey2,
lkpgverantwkey3
FROM prs_kostenplaats k,
prs_kostenplaatsgrp kg
WHERE prs_kostenplaats_key = pkostenplaats_key
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- er is geen kpgroep bij, of het is de excludekey
-- Er is geen kpgroep bij.
RETURN -1;
END;
lteller := 1;
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.
IF pfiatbedrag >= 0
THEN
lgrens := pfiatbedrag;
ELSE
lgrens := pondergrens;
END IF;
WHILE lteller <= 3 AND lfoundfiatteur = 0
LOOP
CASE
WHEN lteller = 1
THEN
lkpgverantwkey := lkpgverantwkey1;
llastfiat := lgrens < fac.getsetting ('mld_opdr_kpg_fin_limit1');
WHEN lteller = 2
THEN
lkpgverantwkey := lkpgverantwkey2;
llastfiat := lgrens < fac.getsetting ('mld_opdr_kpg_fin_limit2');
WHEN lteller = 3
THEN
lkpgverantwkey := lkpgverantwkey3;
llastfiat := lgrens >= fac.getsetting ('mld_opdr_kpg_fin_limit2');
END CASE;
IF lkpgverantwkey = pexcludekey
THEN
lexcludeiskpgverantw := 1;
ELSE
SELECT CASE
WHEN COUNT(prs_perslid_key) > 0
THEN 1
ELSE 0
END
INTO lexcludeiskpgverantw
FROM prs_collega
WHERE prs_perslid_key_alt = pexcludekey
AND prs_perslid_key = lkpgverantwkey;
END IF;
IF lexcludeiskpgverantw = 0 AND llastfiat
THEN
lfiatteur := lkpgverantwkey;
lfoundfiatteur := 1;
END IF;
lteller := lteller + 1;
END LOOP;
ELSE
lfiatteur := lkpverantwkey;
END IF;
dbms_output.put_line('Resultaat budgethouder: '||lkpverantwkey);
RETURN lkpverantwkey;
dbms_output.put_line('Resultaat budgethouder: '||lfiatteur);
RETURN lfiatteur;
END;
-- Levert de volgende fiatteur in de rij op. Indien geen volgende fiatteur gevonden kan worden wordt -1 teruggegeven.
-- Er wordt hier niet gecontroleerd of de opdracht gefiatteerd dient te worden. Dat dien je voor de aanroep te bepalen.
FUNCTION nextfiatteur (pkey IN NUMBER,
pmodule IN VARCHAR2,
pexcludekey IN NUMBER DEFAULT -1)
RETURN NUMBER
IS
lnextfiatteur prs_kostenplaats.prs_perslid_key%TYPE;
BEGIN
CASE pmodule
WHEN 'MLD'
THEN
SELECT CASE
WHEN NOT EXISTS (SELECT prs_perslid_key
FROM fac_tracking t,
fac_srtnotificatie st
WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key
AND st.fac_srtnotificatie_code = 'ORDFOK'
AND fac_tracking_refkey = o.mld_opdr_key)
THEN
prs.getfiatteur(o.prs_kostenplaats_key, pexcludekey, mld_opdr_kosten, std.mld_ins_discipline_key, COALESCE(mld_opdr_fiatbedrag, 0))
WHEN mld_opdr_fiatbedrag >= fac.getsetting ('mld_opdr_kpg_fin_limit2')
THEN
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
WHEN mld_opdr_fiatbedrag >= fac.getsetting ('mld_opdr_kpg_fin_limit1')
THEN
COALESCE(prs_kostenplaatsgrp_fiat2_key, -1)
ELSE
COALESCE(kpg.prs_perslid_key, -1)
END nextfiatteur
INTO lnextfiatteur
FROM mld_opdr o,
mld_melding m,
mld_stdmelding std,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND o.mld_opdr_key = pkey;
WHEN 'BES'
THEN
SELECT CASE
WHEN NOT EXISTS
(SELECT prs_perslid_key
FROM fac_tracking t,
fac_srtnotificatie st
WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key
AND st.fac_srtnotificatie_code = 'ORDFOK'
AND fac_tracking_refkey = b.bes_bestelling_key)
THEN
prs.getfiatteur(b.prs_kostenplaats_key, -1, binfo.totaal, binfo.ins_discipline_key, COALESCE(bes_bestelling_fiatbedrag, 0))
WHEN bes_bestelling_fiatbedrag >= fac.getsetting('mld_opdr_kpg_fin_limit2')
THEN
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
WHEN bes_bestelling_fiatbedrag >= fac.getsetting('mld_opdr_kpg_fin_limit1')
THEN
COALESCE(prs_kostenplaatsgrp_fiat2_key, -1)
ELSE
COALESCE(kpg.prs_perslid_key, -1)
END
nextfiatteur
INTO lnextfiatteur
FROM bes_bestelling b,
(SELECT MAX(bsg.ins_discipline_key) ins_discipline_key,
SUM(bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) totaal
FROM bes_bestelling_item bi,
bes_srtdeel bsd,
bes_srtgroep bsg
WHERE bi.bes_srtdeel_key = bsd.bes_srtdeel_key
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
AND bes_bestelling_key = pkey) binfo,
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE b.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND b.bes_bestelling_key = pkey;
END CASE;
RETURN lnextfiatteur;
END;
PROCEDURE setpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2)

View File

@@ -13,12 +13,6 @@ ALTER TABLE res_activiteit
NUMBER(1)
CONSTRAINT res_c_res_activiteit_cvab_mode CHECK(res_activiteit_cvab_mode IN (0,1,2,3));
UPDATE res_activiteit
SET res_activiteit_cvab_mode =
(SELECT COALESCE(fac_setting_pvalue, fac_setting_default) waarde
FROM fac_setting
WHERE fac_setting_name = 'res_default_cvab_mode');
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#41463
UPDATE fac_menuitems
SET fac_menuitems_url = 'appl/mgt/prs_kostenplaats.asp'
@@ -151,13 +145,13 @@ INSERT INTO fac_locale_xsl (fac_locale_xsl_label,
fac_locale_xsl_lang,
fac_locale_xsl_tekst,
fac_locale_xsl_cust)
SELECT 'lcl_WEB_USER_' || SUBSTR (fac_functie_code, 9, 2) || '_info',
SELECT 'lcl_WEB_USER' || SUBSTR (fac_functie_code, 9, 2) || '_info',
'ASP',
fac_version_lang,
'Zelfdefinieerbare autorisatiefunctie ' || SUBSTR (fac_functie_code, 9, 2),
fac_functie_info
FROM fac_functie, fac_version
WHERE fac_functie_code LIKE 'WEB_USER__'
WHERE fac_functie_code LIKE 'WEB_USER%'
AND fac_functie_info <> 'Zelfdefinieerbare autorisatiefunctie ' || SUBSTR (fac_functie_code, 9, 2);
INSERT INTO fac_locale_xsl (fac_locale_xsl_label,
@@ -165,15 +159,20 @@ INSERT INTO fac_locale_xsl (fac_locale_xsl_label,
fac_locale_xsl_lang,
fac_locale_xsl_tekst,
fac_locale_xsl_cust)
SELECT 'lcl_WEB_USER_' || SUBSTR (fac_functie_code, 9, 2),
SELECT 'lcl_WEB_USER' || SUBSTR (fac_functie_code, 9, 2),
'ASP',
fac_version_lang,
'Overig ' || SUBSTR (fac_functie_code, 9, 2),
fac_functie_omschrijving
FROM fac_functie, fac_version
WHERE fac_functie_code LIKE 'WEB_USER__'
WHERE fac_functie_code LIKE 'WEB_USER%'
AND fac_functie_omschrijving <> 'Overig ' || SUBSTR (fac_functie_code, 9, 2);
UPDATE fac_functie
SET fac_functie_omschrijving = 'lcl_WEB_USER' || SUBSTR (fac_functie_code, 9, 2),
fac_functie_info = 'lcl_WEB_USER' || SUBSTR (fac_functie_code, 9, 2) || '_info'
WHERE fac_functie_code like 'WEB_USER%';
/////////////////////////////////////////////////////////////////////////////////////////// PLAT#41688
ALTER TABLE ins_tab_discipline MODIFY ins_discipline_omschrijving VARCHAR2(60);
ALTER TABLE fac_imp_mld MODIFY ins_discipline_omschrijving VARCHAR2(60);
@@ -228,6 +227,14 @@ SELECT mld_stdmelding_key, ins_srtinst_key, ins_srtinst_niveau
WHERE ins_srtinst_niveau IS NOT NULL
AND mld_stdmelding_verwijder IS NULL;
/////////////////////////////////////////////////////////////////////////////////////////// VGLD#51622
ALTER TABLE bes_bestelling
ADD bes_bestelling_fiatbedrag
NUMBER(11,2);
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#51790
UPDATE fac_setting SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, 'menuitemhovercolor', 'menuitemhoverbackgroundcolor')
WHERE fac_setting_name = 'csstemplate';
/////////////////////////////////////////////////////////////////////////////////////////// XXXX#12345