AAIT#26733: Extra goedkeuringsniveau voor opdrachten.
svn path=/Database/trunk/; revision=20807
This commit is contained in:
170
BES/BES_PAC.SRC
170
BES/BES_PAC.SRC
@@ -61,6 +61,7 @@ AS
|
||||
PROCEDURE setbestelopdrstatus (pbestelopdrkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER);
|
||||
PROCEDURE updatebestellingstatus (pbestelling_key IN NUMBER, user_key IN NUMBER);
|
||||
PROCEDURE updatebestelopdrstatus (pbestelopdr_key IN NUMBER, user_key IN NUMBER);
|
||||
PROCEDURE notifybesgoedkeurders (pbeskey IN NUMBER);
|
||||
PROCEDURE acceptopdracht (pbestelopdr_key IN NUMBER, user_key IN NUMBER, presulttext IN VARCHAR2);
|
||||
PROCEDURE rejectopdracht (pbestelopdr_key IN NUMBER, user_key IN NUMBER, presulttext IN VARCHAR2);
|
||||
FUNCTION bestelopdr_tooltip (besopdrkey IN NUMBER) RETURN VARCHAR2;
|
||||
@@ -1144,7 +1145,7 @@ AS
|
||||
END IF;
|
||||
END;
|
||||
|
||||
-- Geef bestellingkey, gewenste status en userkey, en de status wortdt
|
||||
-- Geef bestellingkey, gewenste status en userkey, en de status wordt
|
||||
-- gezet, waarbij zonodig (indien verandering) een trackrecord wordt gemaakt
|
||||
-- Als de status niet wijzigt, wordt ook geen trackrecord gemaakt
|
||||
-- ZIE schema StateDiagramBestellingen.vsd
|
||||
@@ -1365,6 +1366,173 @@ AS
|
||||
END IF;
|
||||
END;
|
||||
|
||||
-- Stuur alle mogelijke bestelling goedkeurders een bericht als de bestelling status 3 heeft.
|
||||
-- Naar wie, wordt reversed opgezocht op basis van toegekende autorisaties.
|
||||
PROCEDURE notifybesgoedkeurders (pbeskey IN NUMBER)
|
||||
AS
|
||||
lloc_key mld_adres.alg_locatie_key%TYPE;
|
||||
lafd_key prs_perslid.prs_afdeling_key%TYPE;
|
||||
ldisc_key bes_srtgroep.ins_discipline_key%TYPE;
|
||||
loms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
||||
lbes_approved bes_bestelling.bes_bestelling_approved%TYPE;
|
||||
lbes_kosten NUMBER (11,2);
|
||||
lbestellimiet bes_disc_params.bes_disc_params_bestellimiet%TYPE;
|
||||
lbestellimiet2 bes_disc_params.bes_disc_params_bestellimiet2%TYPE;
|
||||
lbestellimiet3 bes_disc_params.bes_disc_params_bestellimiet3%TYPE;
|
||||
lbestellimiet4 bes_disc_params.bes_disc_params_bestellimiet4%TYPE;
|
||||
lbestellimiet5 bes_disc_params.bes_disc_params_bestellimiet5%TYPE;
|
||||
lfunctiecode fac_functie.fac_functie_code%TYPE;
|
||||
lsender mld_discipline.ins_discipline_email%TYPE;
|
||||
bericht fac_srtnotificatie.fac_srtnotificatie_oms%TYPE; -- kan te kort zijn na substitutie
|
||||
BEGIN
|
||||
BEGIN
|
||||
SELECT COALESCE(ma.alg_locatie_key, -1),
|
||||
p.prs_afdeling_key,
|
||||
bsg.ins_discipline_key,
|
||||
COALESCE (b.bes_bestelling_approved, -1),
|
||||
COALESCE ( SUM (bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) - b.bes_bestelling_korting + b.bes_bestelling_levkosten, 0),
|
||||
bdp.bes_disc_params_bestellimiet,
|
||||
bdp.bes_disc_params_bestellimiet2,
|
||||
bdp.bes_disc_params_bestellimiet3,
|
||||
bdp.bes_disc_params_bestellimiet4,
|
||||
bdp.bes_disc_params_bestellimiet5
|
||||
INTO lloc_key,
|
||||
lafd_key,
|
||||
ldisc_key,
|
||||
lbes_approved,
|
||||
lbes_kosten,
|
||||
lbestellimiet,
|
||||
lbestellimiet2,
|
||||
lbestellimiet3,
|
||||
lbestellimiet4,
|
||||
lbestellimiet5
|
||||
FROM bes_bestelling b,
|
||||
bes_bestelling_item bi,
|
||||
bes_srtdeel bsd,
|
||||
bes_srtgroep bsg,
|
||||
bes_disc_params bdp,
|
||||
prs_perslid p,
|
||||
mld_adres ma
|
||||
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
|
||||
AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key
|
||||
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
|
||||
AND bsg.ins_discipline_key = bdp.bes_ins_discipline_key
|
||||
AND b.prs_perslid_key = p.prs_perslid_key
|
||||
AND b.mld_adres_key_lev = ma.mld_adres_key
|
||||
AND bi.bes_bestelling_key = pbeskey
|
||||
GROUP BY ma.alg_locatie_key,
|
||||
p.prs_afdeling_key,
|
||||
bsg.ins_discipline_key,
|
||||
b.bes_bestelling_approved,
|
||||
b.bes_bestelling_korting,
|
||||
b.bes_bestelling_levkosten,
|
||||
bdp.bes_disc_params_bestellimiet,
|
||||
bdp.bes_disc_params_bestellimiet2,
|
||||
bdp.bes_disc_params_bestellimiet3,
|
||||
bdp.bes_disc_params_bestellimiet4,
|
||||
bdp.bes_disc_params_bestellimiet5;
|
||||
|
||||
IF lbes_kosten <= lbestellimiet -- Dit eerst testen i.v.m. Acceptering. Verder moet sowieso geaccepteerd worden.
|
||||
THEN
|
||||
RETURN; -- Het bedrag is lager als de eerste limiet. De bestelling hoeft niet goed gekeurd te worden, dus een lege fiatteurs array teruggeven.
|
||||
ELSIF (((fac.getsetting ('bes_approval_all') = 0 AND lbes_kosten >= lbestellimiet) OR
|
||||
(fac.getsetting ('bes_approval_all') = 1 AND lbes_kosten <= lbestellimiet2)) AND
|
||||
lbes_approved <= lbestellimiet)
|
||||
THEN
|
||||
lfunctiecode := 'WEB_BESBOF';
|
||||
ELSIF ((fac.getsetting ('bes_approval_all') = 0 AND lbes_kosten >= lbestellimiet2 AND lbes_approved = lbestellimiet2) OR
|
||||
(fac.getsetting ('bes_approval_all') = 1 AND lbes_kosten <= lbestellimiet3 AND lbes_approved <= lbestellimiet2))
|
||||
THEN
|
||||
lfunctiecode := 'WEB_BESGO2';
|
||||
ELSIF ((fac.getsetting ('bes_approval_all') = 0 AND lbes_kosten >= lbestellimiet3 AND lbes_approved = lbestellimiet3) OR
|
||||
(fac.getsetting ('bes_approval_all') = 1 AND lbes_kosten <= lbestellimiet4 AND lbes_approved <= lbestellimiet3))
|
||||
THEN
|
||||
lfunctiecode := 'WEB_BESGO3';
|
||||
ELSIF ((fac.getsetting ('bes_approval_all') = 0 AND lbes_kosten >= lbestellimiet4 AND lbes_approved = lbestellimiet4) OR
|
||||
(fac.getsetting ('bes_approval_all') = 1 AND lbes_kosten <= lbestellimiet5 AND lbes_approved <= lbestellimiet4))
|
||||
THEN
|
||||
lfunctiecode := 'WEB_BESGO4';
|
||||
ELSIF((fac.getsetting ('bes_approval_all') = 0 AND lbes_kosten >= lbestellimiet5 AND lbes_approved >= lbestellimiet5) OR
|
||||
(fac.getsetting ('bes_approval_all') = 1 AND lbes_kosten > lbestellimiet5 AND lbes_approved <= lbestellimiet5))
|
||||
THEN
|
||||
lfunctiecode := 'WEB_BESGO5';
|
||||
ELSE
|
||||
RETURN; -- Het goedgekeurde bedrag zit al boven de vijfde limiet. Geen approval meer nodig.
|
||||
END IF;
|
||||
|
||||
-- These notifications are now sent on behalf of the system, what might be the local FM organisation
|
||||
SELECT MAX (COALESCE (bd.ins_discipline_email, l.alg_locatie_email)) email
|
||||
INTO lsender
|
||||
FROM bes_bestelling b,
|
||||
bes_bestelling_item bi,
|
||||
bes_srtdeel bsd,
|
||||
bes_srtgroep bsg,
|
||||
bes_discipline bd,
|
||||
mld_adres ma,
|
||||
alg_locatie l
|
||||
WHERE b.bes_bestelling_key = bi.bes_bestelling_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 b.mld_adres_key_lev = ma.mld_adres_key
|
||||
AND ma.alg_locatie_key = l.alg_locatie_key
|
||||
AND bi.bes_bestelling_key = pbeskey;
|
||||
|
||||
-- Als die er niet is sprongen we al naar de exception
|
||||
-- Als die er wel is, gaan we verder
|
||||
SELECT lcl.x('fac_srtnotificatie_oms', fac_srtnotificatie_key, fac_srtnotificatie_oms)
|
||||
INTO loms
|
||||
FROM fac_srtnotificatie
|
||||
WHERE fac_srtnotificatie_code = 'BESAP1';
|
||||
|
||||
bericht := bes.bessprintf (loms, pbeskey); -- de variabelen invullen
|
||||
|
||||
FOR boer
|
||||
IN (SELECT g.prs_perslid_key
|
||||
FROM fac_v_webgebruiker g, fac_functie f, prs_perslid p
|
||||
WHERE g.fac_functie_key = f.fac_functie_key
|
||||
AND g.ins_discipline_key = ldisc_key
|
||||
AND g.prs_perslid_key = p.prs_perslid_key
|
||||
AND (g.fac_gebruiker_prs_level_write = -1
|
||||
OR (g.fac_gebruiker_prs_level_write < 9
|
||||
AND p.prs_afdeling_key IN
|
||||
(SELECT prs_afdeling_key
|
||||
FROM prs_v_afdeling_familie a
|
||||
WHERE a.prs_afdeling_elder_key IN
|
||||
(SELECT aa.prs_afdeling_elder_key
|
||||
FROM prs_v_afdeling_familie aa
|
||||
WHERE aa.prs_afdeling_key = lafd_key
|
||||
AND aa.niveau = g.fac_gebruiker_prs_level_write))))
|
||||
-- in ASP: if (params.loc_key>0)
|
||||
AND (g.fac_gebruiker_alg_level_write = -1
|
||||
OR (g.fac_gebruiker_alg_level_write < 9
|
||||
AND lloc_key IN
|
||||
(SELECT alg_locatie_key
|
||||
FROM fac_v_my_locations
|
||||
WHERE prs_perslid_key = p.prs_perslid_key
|
||||
AND niveau = fac_gebruiker_alg_level_write)))
|
||||
AND fac_functie_code = lfunctiecode)
|
||||
LOOP
|
||||
fac.putnotificationsrtprio (NULL,
|
||||
boer.prs_perslid_key,
|
||||
'BESAP1',
|
||||
pbeskey,
|
||||
bericht,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
2,
|
||||
lsender
|
||||
);
|
||||
END LOOP;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
RETURN;
|
||||
END;
|
||||
END;
|
||||
|
||||
-- Opdracht wordt geaccepteerd door de leverancier (of door de BO namens de leverancier)
|
||||
PROCEDURE acceptopdracht (pbestelopdr_key IN NUMBER, user_key IN NUMBER, presulttext IN VARCHAR2)
|
||||
AS
|
||||
|
||||
Reference in New Issue
Block a user