AAIT#26733: Extra goedkeuringsniveau voor opdrachten.

svn path=/Database/trunk/; revision=20807
This commit is contained in:
Maykel Geerdink
2014-02-27 13:06:21 +00:00
parent 51708447cf
commit d0352d9ac3
10 changed files with 372 additions and 45 deletions

View File

@@ -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

View File

@@ -284,7 +284,9 @@ CREATE_TABLE(bes_bestelopdr, 0)
NUMBER(10)
CONSTRAINT bes_r_opdr_prs_user_key1 REFERENCES prs_perslid(prs_perslid_key),
bes_bestelopdr_delivery_opmerk
VARCHAR2(320)
VARCHAR2(320),
bes_bestelopdr_approved
NUMBER(11,2)
);
ALTER TABLE cnt_contract ADD bes_bestelopdr_key
@@ -468,7 +470,19 @@ CREATE_TABLE(bes_disc_params, 0)
CONSTRAINT bes_r_cnt_termijn_key2 REFERENCES cnt_termijn(cnt_termijn_key),
bes_disc_params_for_others /* Kan ik als FE een bestelling voor een ander plaatsen? {0=no | 1=yes} */
NUMBER(1)
DEFAULT 0
DEFAULT 0,
bes_disc_params_bestellimiet2
NUMBER(11,2)
DEFAULT 1000000,
bes_disc_params_bestellimiet3
NUMBER(11,2)
DEFAULT 1000000,
bes_disc_params_bestellimiet4
NUMBER(11,2)
DEFAULT 1000000,
bes_disc_params_bestellimiet5
NUMBER(11,2)
DEFAULT 1000000
);
//// flexprops