MDUX#38433: Aanpassing procedure vrije bestellingen.

svn path=/Website/trunk/; revision=32570
This commit is contained in:
Maykel Geerdink
2017-01-26 14:26:16 +00:00
parent 15e83c89c6
commit 03c1cacb33
9 changed files with 550 additions and 313 deletions

View File

@@ -122,6 +122,7 @@
var bes_info = bes.bestelling_info(bes_bestelling_key); // Globale variabele met alle bes_bestelling informatie
var this_bes = bes.func_enabled_bestelling(bes_info); // Wat heb ik zoal aan rechten op deze specifieke reservering
var bes_disc_info = bes.disc_info(bes_info.dis_key); // alle discipline informatie
if(!this_bes.canChange) {
resultcode = 9;
resulttekst = "Niet geautoriseerd voor bestelling "+besid;
@@ -129,8 +130,10 @@
else {
if (nwStatus != null) { // Bij update optioneel
// statusdiagram afdwingen:
// * BESFIT alleen vanuit status 2
// * BESREJ alleen vanuit status 2 en 3
// * BESFIT alleen vanuit status 2 als bes_disc_info.disc_params_fiatflow == 0.
// vanuit sattus 4 als bes_disc_info.disc_params_fiatflow == 1.
// * BESREJ alleen vanuit status 2 en 3 als bes_disc_info.disc_params_fiatflow == 0.
// vanuit status 2 en 4 als bes_disc_info.disc_params_fiatflow == 1.
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"
+ " WHERE bes_bestelling_key="+bestelling_key;
@@ -139,9 +142,12 @@
curStatus = oRs("bes_bestelling_status").value;
// Feitelijke UPDATE status.
// BESFIT: alleen vanuit status 2
// BESFIT: alleen vanuit status 2 als bes_disc_info.disc_params_fiatflow == 0.
// vanuit sattus 4 als bes_disc_info.disc_params_fiatflow == 1.
if (nwStatus == "BESFIT") {
if (curStatus == 2) {
if ((bes_disc_info.disc_params_fiatflow == 0 && curStatus == 2) ||
(bes_disc_info.disc_params_fiatflow == 1 && curStatus == 4))
{
bes.setbestellingstatus(bes_bestelling_key, 3); // Gefiatteerd
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"
@@ -172,9 +178,12 @@
resultcode = 305;
}
}
// BESREJ: alleen vanuit status 2 en 3
// BESREJ: alleen vanuit status 2 en 3 als bes_disc_info.disc_params_fiatflow == 0.
// vanuit status 2 en 4 als bes_disc_info.disc_params_fiatflow == 1.
else if (nwStatus == "BESREJ") {
if (curStatus == 2 || curStatus == 3) {
if ((bes_disc_info.disc_params_fiatflow == 0 && (curStatus == 2 || curStatus == 3)) ||
(bes_disc_info.disc_params_fiatflow == 1 && (curStatus == 2 || curStatus == 4)))
{
bes.setbestellingstatus(bes_bestelling_key, 1); // Afgewezen
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"

View File

@@ -34,6 +34,13 @@ model_bes_disc_params =
"typ": "key",
"hidden_fld": true
},
"fiatflow": {
"dbs": "bes_disc_params_fiatflow",
"label": L("bes_discipline_fiatflow"),
"typ": "number",
"LOV": L("bes_discipline_fiatflowLOV"),
"emptyoption": null
},
"bestellimiet1": {
"dbs": "bes_disc_params_bestellimiet",
"label": L("bes_discipline_bestellimiet1"),

View File

@@ -102,6 +102,7 @@
disc_info: function _disc_info(disc_key, autfunction)
{
var sql = "SELECT " + lcl.xsqla('ins_discipline_omschrijving', 'bd.ins_discipline_key')
+ " , bes_disc_params_fiatflow"
+ " , bes_disc_params_retour"
+ " , bes_disc_params_retour_url"
+ " , bes_disc_params_levopm_url"
@@ -140,6 +141,7 @@
var result = { disc_key : disc_key,
discipline_omschrijving : oRs("ins_discipline_omschrijving").Value,
discipline_kpnverplicht : oRs("ins_discipline_kpnverplicht").Value == '1',
disc_params_fiatflow : oRs("bes_disc_params_fiatflow").Value,
disc_params_retour : oRs("bes_disc_params_retour").Value == '1',
disc_params_retour_url : oRs("bes_disc_params_retour_url").Value,
disc_params_levopm_url : oRs("bes_disc_params_levopm_url").Value,
@@ -172,7 +174,7 @@
return result;
},
generateBesInfoBlock: function (bes_bestelling, show_leverancier, mode) //edit_leverancier)
generateBesInfoBlock: function (bes_bestelling, bes_disc_info, show_leverancier, mode) //edit_leverancier)
{
if (bes_bestelling.bes_key == -1)
{
@@ -218,7 +220,9 @@
ROTEXTAREATR("fldremark", bes_bestelling.rfoStatus == 1? L("lcl_bes_reject_remark") : L("lcl_bes_remark"), bes_bestelling.rfoOpmerking, {id: "opmerk", html: "rows='8'", suppressEmpty: true});
var fiat_key = bes_bestelling.bes_bestelling_fiat_user;
if (bes_bestelling.rfoStatus == 2) // (nog) ter fiattering
var hasToFiat = ((bes_disc_info.disc_params_fiatflow == 0 && bes_bestelling.rfoStatus == 2) ||
(bes_disc_info.disc_params_fiatflow == 1 && bes_bestelling.rfoStatus == 4));
if (hasToFiat) // (nog) ter fiattering
{
// Binnenkort eens uitwerken: deze zijn gelijk (onderscheid zou al eerder gemaakt moeten zijn
// door de fiat_key uit te sluiten van nieuwe fiatteurs). Komt met 5.1.0 nader
@@ -230,7 +234,7 @@
"Fiatteur",
"sgFiatteur",
{ perslidKey: fiat_key,
label: (bes_bestelling.rfoStatus == 2?L("lcl_bes_toapprove"):L("lcl_bes_approver")),
label: (hasToFiat? L("lcl_bes_toapprove"):L("lcl_bes_approver")),
readonly: true,
moreinfo: !frontend
});
@@ -754,6 +758,7 @@
var bes_disc_info = bes.disc_info(bes_bestelling.dis_key); // alle discipline informatie
var _canRetour = (bes_disc_info.disc_params_retour == 1 && bes_bestelling.rfoRetourVan == null) &&
(bresult.canWrite("WEB_BESUSE") || bresult.canWrite("WEB_BESFOF"));
var fiatflow_std = bes_disc_info.disc_params_fiatflow == 0;
bresult.canRetourURL = false; // (Deels) retour via site leverancier
bresult.canRetourBES = false; // (Deels) retour via negatieve levering
@@ -769,6 +774,34 @@
// 'laat' wordt er een annuleringsopdrachtaanvraag naar de leverancier gestuurd
// Verder: FO mag eigenlijk heel lang wijzigen als bes_bestelling.wijzig_tot maar is gezet:
// het is aan de leverancier om al dan niet te weigeren
var t_cost = bes_bestelling.totaal - bes_bestelling.rfoBesKosten + bes_bestelling.rfoLevKosten;
var bes_approved = bes_bestelling.approved;
var bestellimiet = bes_disc_info.disc_params_bestellimiet;
var bestellimiet2 = bes_disc_info.disc_params_bestellimiet2;
var bestellimiet3 = bes_disc_info.disc_params_bestellimiet3;
var bestellimiet4 = bes_disc_info.disc_params_bestellimiet4;
var bestellimiet5 = bes_disc_info.disc_params_bestellimiet5;
var canAccept = bresult.canWrite("WEB_BESBOF") && // Heb ik de rechten om goed te keuren op dit niveau 1?
((S("bes_approval_all") == 0 && t_cost >= bestellimiet) || // Zijn de kosten hoger als de limiet
(S("bes_approval_all") == 1 && t_cost <= bestellimiet2)) && // Zijn de kosten onder mijn limiet om volledig goed te keuren
bes_approved <= bestellimiet; // Welke goedkeur? 1, 2, 3, 4 of 5?
var canAccept2 = bresult.canWrite("WEB_BESGO2") &&
// Setting bes_approval_all is
// 0: Het approved bedrag is eigen bestellimiet of vorige goedkeur niveau rechten heb ik al (dan direct niveau hoger)
// 1: Het approved bedrag is kleiner of gelijk aan eigen bestellimiet
((S("bes_approval_all") == 0 && t_cost >= bestellimiet2 && (bes_approved == bestellimiet2 || bresult.canAccept)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet3 && bes_approved <= bestellimiet2));
var canAccept3 = bresult.canWrite("WEB_BESGO3") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet3 && (bes_approved == bestellimiet3 || bresult.canAccept2)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet4 && bes_approved <= bestellimiet3));
var canAccept4 = bresult.canWrite("WEB_BESGO4") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet4 && (bes_approved == bestellimiet4 || bresult.canAccept3)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet5 && bes_approved <= bestellimiet4));
var canAccept5 = bresult.canWrite("WEB_BESGO5") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet5 && (bes_approved >= bestellimiet5 || bresult.canAccept4)) ||
(S("bes_approval_all") == 1 && t_cost > bestellimiet5 && bes_approved <= bestellimiet5)) &&
t_cost > bes_approved;
var canApprove = (bes_bestelling.bes_bestelling_fiat_user != user_key) && isVerantwoordelijke;
switch (bes_bestelling.rfoStatus) // (*aanvraag* status)
{
case 1: // Afgewezen/verworpen. Je kunt hem effectie wijzigen en weer opnieuw aanbieden
@@ -778,7 +811,21 @@
bresult.canItemsChange = bresult.canMainChange && !isPunchout;
break;
case 2: // Nieuw, ter fiattering
bresult.canApprove = (bes_bestelling.bes_bestelling_fiat_user != user_key) && isVerantwoordelijke;
if (fiatflow_std)
bresult.canApprove = canApprove;
else
{
bresult.canAccept = canAccept;
bresult.canAccept2 = canAccept2;
bresult.canAccept3 = canAccept3;
bresult.canAccept4 = canAccept4;
bresult.canAccept5 = canAccept5;
bresult.canReject = bresult.canAccept ||
bresult.canAccept2 ||
bresult.canAccept3 ||
bresult.canAccept4 ||
bresult.canAccept5;
}
bresult.canDelete = bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot) ||
(eigenBestelling && voor_annuleer);
@@ -789,41 +836,24 @@
bresult.canItemsChange = bresult.canMainChange && !isPunchout;
break;
case 3: // Gefiatteerd
var t_cost = bes_bestelling.totaal - bes_bestelling.rfoBesKosten + bes_bestelling.rfoLevKosten;
var bes_approved = bes_bestelling.approved;
var bestellimiet = bes_disc_info.disc_params_bestellimiet;
var bestellimiet2 = bes_disc_info.disc_params_bestellimiet2;
var bestellimiet3 = bes_disc_info.disc_params_bestellimiet3;
var bestellimiet4 = bes_disc_info.disc_params_bestellimiet4;
var bestellimiet5 = bes_disc_info.disc_params_bestellimiet5;
bresult.canAccept = bresult.canWrite("WEB_BESBOF") && // Heb ik de rechten om goed te keuren op dit niveau 1?
((S("bes_approval_all") == 0 && t_cost >= bestellimiet) || // Zijn de kosten hoger als de limiet
(S("bes_approval_all") == 1 && t_cost <= bestellimiet2)) && // Zijn de kosten onder mijn limiet om volledig goed te keuren
bes_approved <= bestellimiet; // Welke goedkeur? 1, 2, 3, 4 of 5?
bresult.canAccept2 = bresult.canWrite("WEB_BESGO2") &&
// Setting bes_approval_all is
// 0: Het approved bedrag is eigen bestellimiet of vorige goedkeur niveau rechten heb ik al (dan direct niveau hoger)
// 1: Het approved bedrag is kleiner of gelijk aan eigen bestellimiet
((S("bes_approval_all") == 0 && t_cost >= bestellimiet2 && (bes_approved == bestellimiet2 || bresult.canAccept)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet3 && bes_approved <= bestellimiet2));
bresult.canAccept3 = bresult.canWrite("WEB_BESGO3") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet3 && (bes_approved == bestellimiet3 || bresult.canAccept2)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet4 && bes_approved <= bestellimiet3));
bresult.canAccept4 = bresult.canWrite("WEB_BESGO4") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet4 && (bes_approved == bestellimiet4 || bresult.canAccept3)) ||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet5 && bes_approved <= bestellimiet4));
bresult.canAccept5 = bresult.canWrite("WEB_BESGO5") &&
((S("bes_approval_all") == 0 && t_cost >= bestellimiet5 && (bes_approved >= bestellimiet5 || bresult.canAccept4)) ||
(S("bes_approval_all") == 1 && t_cost > bestellimiet5 && bes_approved <= bestellimiet5)) &&
t_cost > bes_approved;
bresult.canDelete = bresult.canWrite("WEB_BESBOF")
|| (bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot)
|| (eigenBestelling && voor_annuleer);
bresult.canReject = bresult.canAccept ||
if (fiatflow_std)
{
bresult.canAccept = canAccept;
bresult.canAccept2 = canAccept2;
bresult.canAccept3 = canAccept3;
bresult.canAccept4 = canAccept4;
bresult.canAccept5 = canAccept5;
bresult.canReject = bresult.canAccept ||
bresult.canAccept2 ||
bresult.canAccept3 ||
bresult.canAccept4 ||
bresult.canAccept5;
}
bresult.canDelete = bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot) ||
(eigenBestelling && voor_annuleer);
bresult.canSubmit = !fiatflow_std && bresult.canWrite("WEB_BESBOF") && !bes_bestelling.isordered;
bresult.canRetourURL = !fiatflow_std && _canRetour && (bes_disc_info.disc_params_retour_url != null); // Zichtbaar indien bestelling naar de leverancier verzonden is.
bresult.canMainChange = (bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.wijzig_tot) ||
(eigenBestelling && voor_wijzig))
@@ -831,11 +861,13 @@
bresult.canItemsChange = bresult.canMainChange && !isPunchout;
break;
case 4: // Geaccepteerd door BO
if (!fiatflow_std)
bresult.canApprove = canApprove;
bresult.canDelete = bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot) ||
(eigenBestelling && voor_annuleer);
bresult.canSubmit = bresult.canWrite("WEB_BESBOF") && !bes_bestelling.isordered;
bresult.canRetourURL = _canRetour && (bes_disc_info.disc_params_retour_url != null);
bresult.canSubmit = fiatflow_std && bresult.canWrite("WEB_BESBOF") && !bes_bestelling.isordered;
bresult.canRetourURL = fiatflow_std && _canRetour && (bes_disc_info.disc_params_retour_url != null); // Zichtbaar indien bestelling naar de leverancier verzonden is.
bresult.canMainChange = (bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.wijzig_tot) ||
(eigenBestelling && voor_wijzig)) &&
@@ -845,9 +877,9 @@
case 5: // Besteld (lees: opdracht is aangemaakt/ligt bij leverancier)
if (bes_bestelling.aantalontv == 0)// Als er artikelen ontvangen zijn houdt het op
{
bresult.canDelete = bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot) ||
(eigenBestelling && voor_annuleer);
bresult.canDelete = bresult.canWrite("WEB_BESBOF") ||
(bresult.canWrite("WEB_BESFOF") && bes_bestelling.annuleer_tot) ||
(eigenBestelling && voor_annuleer);
bresult.canDelete &= bes_disc_info.can_concept;
}
bresult.canRetourURL = _canRetour && (bes_disc_info.disc_params_retour_url != null);
@@ -1257,6 +1289,125 @@
return true;
},
checkFiat: function(bes_key, params)
{ // Controleer of de bestelling gefiatteerd moet te worden.
var prs_key = params.prs_key;
var prs_key_voor = params.prs_key_voor;
var dis_key = params.dis_key;
var kp_key = params.kp_key;
var totaalbedrag = params.totaalbedrag;
var bes_bestelling = params.bes_bestelling;
var bes_disc_info = params.bes_disc_info;
var pgb = bes_disc_info.disc_params_pgb;
var autoacceptrfo = bes_disc_info.disc_params_autoacceptrfo;
var isFE = params.isFE;
var oldStatus = params.oldStatus;
var act_mode = params.act_mode;
// Persoonlijk Gebonden Budget (PGB) en/of Afdeling Gebonden Budget (AGB) controle
// bes_disc_info.disc_params_pgb: 0 = Geen van beiden
// 1 = Alleen pgb
// 2 = Alleen agb
// 3 = Beiden, pgb en agb
if (pgb > 0)
{ // Persoonlijk Gebonden Budget (PGB) en Afdeling Gebonden Budget (AGB) controle
// Fiatteringsproces moet gevolgd worden op de naam van
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek
var exceeds_pgb = bes.exceeds_pgb(totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
var exceeds_agb = bes.exceeds_agb(totaalbedrag, kp_key, dis_key, bes_key)
if (exceeds_pgb || exceeds_agb)
{
if (S("bes_pgb_fiattering") == 1 && !(isFE && S("bes_pgb_fe_fiat") == 1))
// Algemene fiatterings proces noodzakelijk naast PGB fiatering
return true;
else
{ // Fiatteringsproces moet gevolgd worden op de naam van.
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key.
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor.
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
var strState = (exceeds_pgb
? L("lcl_bes_exceeds_pgb") + safe.curr(bes.get_pgb_exceed_amount(totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
: "")
+ (exceeds_pgb && exceeds_agb
? "\n" // Nieuwe regel.
: "")
+ (exceeds_agb
? L("lcl_bes_exceeds_agb") + safe.curr(bes.get_agb_exceed_amount(totaalbedrag, kp_key, dis_key, bes_key))
: "")
+ "\n" + L("lcl_bes_adjust_order");
abort_with_warning(strState);
}
}
else if (isFE && S("bes_pgb_fe_fiat") == 1)
{ // Onder PGB/AGB en bestelling van FE en moet zeker langs budgethouder
return true;
}
}
else
{ // Standaard fiatteringscontrole.
// Fiatteringsproces moet gevolgd worden op de naam van
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
// Als orgineel nog gefiatteerd moet worden door budgethouder (status is 2) dan zeker eerst fiatteren.
if (!act_mode
&& !autoacceptrfo
&& budget.exceeds_profiel(totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
&& (bes_key == -1 || oldStatus == 2 || bes.herfiatteren(bes_bestelling, bes_disc_info, totaalbedrag)))
// niet automatisch fiat(!)teren en profiel wordt overschreden.
return true;
}
return false;
},
getApprover: function(params)
{ // Bepaalde de fiatteur (KP verantwoordelijke of KPG verantwoordlijke).
var prs_key = params.prs_key;
var prs_key_voor = params.prs_key_voor;
var dis_key = params.dis_key;
var kp_key = params.kp_key;
var totaalbedrag = params.totaalbedrag;
var bes_bestelling = params.bes_bestelling;
var bes_disc_info = params.bes_disc_info;
var pgb = bes_disc_info.disc_params_pgb;
var autoacceptrfo = bes_disc_info.disc_params_autoacceptrfo;
var isFE = params.isFE;
var oldStatus = params.oldStatus;
var act_mode = params.act_mode;
var approver_key = -1;
if (prs_key > 0 && totaalbedrag > S("can_selfapprove"))
approver_key = prs.getKpVerantwoordelijkeExcept(kp_key, prs_key);
else
approver_key = prs.getKpVerantwoordelijke(kp_key);
__Log('Eerstgevonden fiatteur: ' + approver_key);
if (approver_key == -1) {
// geen fiatteur gevonden, bestellen niet mogelijk
__Log('bestelling afgebroken');
abort_with_warning(L("lcl_bes_no_fiatteur"));
}
if (budget.exceeds_profiel(totaalbedrag, approver_key, dis_key))
{ // de gevonden fiatteur heeft onvoldoende profiel, is er een hogere (kpngroepverantwoordelijke)
// Let wel: alleen controle of hij er bestaat. Wie het is doen we nog niets mee hier.
__Log('voldoet niet');
var nextapprover_key = prs.getKpVerantwoordelijkeExcept(kp_key, approver_key);
__Log('Vervolgensgevonden fiatteur: ' + nextapprover_key);
if (nextapprover_key == -1 || budget.exceeds_profiel(totaalbedrag, nextapprover_key, dis_key))
{
__Log('voldoet ook niet');
abort_with_warning(L("lcl_bes_exceed_limit"));
}
}
return approver_key;
},
// Levert de 'Is ter fiattering aangeboden bij approver' op.
sendNeedApprovalNotification: function(bes_key, approver)
{

View File

@@ -18,6 +18,8 @@ var JSON_Result = true;
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/budget.inc" -->
<!-- #include file="../PRS/prs.inc" -->
<!-- #include file="bes.inc" -->
<%
@@ -39,8 +41,13 @@ for (var i = 0; i < bes_key_arr.length; i++)
if (this_bes.canAccept || this_bes.canAccept2 || this_bes.canAccept3 || this_bes.canAccept4 || this_bes.canAccept5)
{
ingesloten.push({ bes_key: bes_key_arr[i],
prs_key: bes_bestelling.perslid_key,
prs_key_voor: bes_bestelling.perslid_key_voor,
dis_key: bes_bestelling.dis_key,
kp_key: bes_bestelling.kostenplaats_key,
kosten: bes_bestelling.totaal - bes_bestelling.rfoBesKosten + bes_bestelling.rfoLevKosten,
approved: bes_bestelling.approved,
fiatflow: bes_disc_info.disc_params_fiatflow,
bestellimiet: bes_disc_info.disc_params_bestellimiet,
bestellimiet2: bes_disc_info.disc_params_bestellimiet2,
bestellimiet3: bes_disc_info.disc_params_bestellimiet3,
@@ -148,13 +155,47 @@ for (var i = 0; i < ingesloten.length; i++)
}
if (setnextstatus)
{ // Nu naar status 4 (Geaccepteerd) of opdrachten aanmaken en naar status 5 (Besteld).
{ // Nu naar status Geaccepteerd(4).
bes.setbestellingstatus(bes_key, 4); // Geaccepteerd BO
if (bes_disc_info.disc_params_auto_order == "1")
// Afhankelijk van de fiatterings/acceptatie flow zijn dit de acties:
// 1) "Fiatteur -> "BESBOF": bes_disc_params_fiatflow = 0 (fiatteren en dan accepteren).
// De eventuele fiattering heeft al plaatsgevonden. De status kan naar "Besteld(5)" als de setting auto_order is gezet.
// Dit is de standaard flow.
// 2) "BESBOF -> Fiatteur": bes_disc_params_fiatflow = 1 (accepteren en dan fiatteren).
// Check of er nog gefiatteerd moet worden.
// Als er niet gefiatteerd hoeft te worden kan de status naar status "Besteld(5)" als de setting auto_order is gezet.
var ter_finfiattering = false;
var apprmessage = "";
if (ingesloten[i].fiatflow == 1)
{
var params = {prs_key: ingesloten[i].prs_key,
prs_key_voor: ingesloten[i].prs_key_voor,
dis_key: ingesloten[i].dis_key,
kp_key: ingesloten[i].kp_key,
totaalbedrag: ingesloten[i].kosten,
bes_bestelling: bes_bestelling,
bes_disc_info: bes_disc_info,
isNew: false,
isFE: false,
oldStatus: false,
act_mode: false};
ter_finfiattering = bes.checkFiat(bes_key, params);
if (ter_finfiattering)
{
var approver_key = bes.getApprover(params);
__Log("Fiatteur: " + approver_key);
apprmessage = bes.sendNeedApprovalNotification(bes_key, approver_key);
}
}
// Nu eventueel opdrachten aanmaken en naar status 5 (Besteld).
if (ingesloten[i].fiatflow == 0 || // "Fiatteur -> "BESBOF"
(ingesloten[i].fiatflow == 1 && !ter_finfiattering && bes_disc_info.disc_params_auto_order == "1")) // "BESBOF -> Fiatteur"
bes.makeOrders(user_key, bes_key);
result.message = tobeaccepted + " " + (tobeaccepted == 1 ? L("lcl_bes_accepted1") : L("lcl_bes_accepted"));
result.message = tobeaccepted + " " + (tobeaccepted == 1 ? L("lcl_bes_accepted1") : L("lcl_bes_accepted"))
+ (apprmessage != ""? "\n" + apprmessage : "");
}
}

View File

@@ -43,6 +43,7 @@ for (var i = 0; i < bes_key_arr.length; i++)
fiatteur_key: bes_bestelling.fiatteur_key, // LET OP: De huidige fiatteur wordt opgehaald (Ook als de user_key een vervanger is).
dis_key: bes_bestelling.dis_key,
perslid_key_voor: bes_bestelling.perslid_key_voor,
disc_params_fiatflow: bes_disc_info.disc_params_fiatflow,
disc_params_bestellimiet: bes_disc_info.disc_params_bestellimiet,
disc_params_auto_order: bes_disc_info.disc_params_auto_order
});
@@ -66,40 +67,54 @@ for (var i = 0; i < ingesloten.length; i++)
// als het valt binnen onze limiet (of eigenlijk: degene die nu moet fiatteren als we vervanger zijn) dan zijn we klaar
// TODO in de volgende versie (zie docu PF) meerlaags fiattering met prs.getfiatteur() vgl opdr_approve.asp
if (!budget.exceeds_profiel(totaal, ingesloten[i].fiatteur_key, ingesloten[i].dis_key))
{
bes.setbestellingstatus(ingesloten[i].bes_key, 3); // helemaal Gefiatteerd
{ // Klaar met fiatteren.
bes.setbestellingstatus(ingesloten[i].bes_key, 3); // helemaal Gefiatteerd
// Afhankelijk van de fiatterings/acceptatie flow zijn dit de acties:
// 1) "Fiatteur -> "BESBOF": bes_disc_params_fiatflow = 0 (fiatteren en dan accepteren).
// Als het totaalbedrag onder de eerste bestellimiet is hoeft niet geaccepteerd te worden.
// De status kan dan naar "Geaccepteerd(4)" of naar status "Besteld(5)" als de setting auto_order is gezet.
// Dit is de standaard flow.
// 2) "BESBOF -> Fiatteur": bes_disc_params_fiatflow = 1 (accepteren en dan fiatteren).
// De eventuele acceptatie heeft al plaatsgevonden. De status kan naar "Besteld(5)" als de setting auto_order is gezet.
if (ingesloten[i].disc_params_fiatflow == 0)
{ // "Fiatteur -> "BESBOF"
if (ingesloten[i].totaal <= ingesloten[i].disc_params_bestellimiet)
{
bes.setbestellingstatus(ingesloten[i].bes_key, 4); // Geaccepteerd door BO
if (ingesloten[i].disc_params_auto_order == "1") // direct opdracht aanmaken
{
bes.makeOrders(user_key, ingesloten[i].bes_key); // opdracht aanmaken en status naar besteld (5)
}
bes.setbestellingstatus(ingesloten[i].bes_key, 4); // Geaccepteerd door BO
if (ingesloten[i].disc_params_auto_order == "1") // direct opdracht aanmaken
bes.makeOrders(user_key, ingesloten[i].bes_key); // opdracht aanmaken en status naar besteld (5)
}
}
else // ingesloten[i].disc_params_fiatflow == 1
{ // "BESBOF -> Fiatteur"
if (ingesloten[i].disc_params_auto_order == "1") // direct opdracht aanmaken
bes.makeOrders(user_key, ingesloten[i].bes_key); // opdracht aanmaken en status naar besteld (5)
}
}
else // (verder/hogerop) fiatteren
{
// Nog wel even tracken
shared.trackaction("BESFIT", ingesloten[i].bes_key);
// Nog wel even tracken
shared.trackaction("BESFIT", ingesloten[i].bes_key);
// vervolgens naar kostenplaatsgroep fiatteur sturen
// Fiatteringsproces moet gevolgd worden op de naam van de "voor wie" (bestelling voor)
// Als bes_disc_params_for_others niet is gezet zijn perslid_key en perslid_key_voor identiek
// Haal de kostenplaatsgroep verantwoordelijke/fiatteur op. De kolom b.bes_bestelling_fiat_user is gevuld met de user_key).
sql = "SELECT prs.getkpverantwoordelijke (b.prs_kostenplaats_key, 1, COALESCE (b.bes_bestelling_fiat_user, -1)) kpg_fiatteur_key"
+ " FROM bes_bestelling b"
+ " WHERE b.bes_bestelling_key = " + ingesloten[i].bes_key;
var oRs = Oracle.Execute(sql);
var nextapprover_key = oRs("kpg_fiatteur_key").Value;
if (nextapprover_key == -1 || budget.exceeds_profiel(totaal, nextapprover_key, ingesloten[i].dis_key))
{ // Deze bestelling overschrijdt het mandaat van de budgethouder (kostenplaatsgroep verantwoordelijke/fiatteur) van de opgegeven kostenplaats en/of de budgethouder is onbekend.
result.message = L("lcl_bes_exceed_limit");
}
else
{
result.message = bes.sendNeedApprovalNotification(ingesloten[i].bes_key, nextapprover_key);
}
oRs.close();
// vervolgens naar kostenplaatsgroep fiatteur sturen
// Fiatteringsproces moet gevolgd worden op de naam van de "voor wie" (bestelling voor)
// Als bes_disc_params_for_others niet is gezet zijn perslid_key en perslid_key_voor identiek
// Haal de kostenplaatsgroep verantwoordelijke/fiatteur op. De kolom b.bes_bestelling_fiat_user is gevuld met de user_key).
sql = "SELECT prs.getkpverantwoordelijke (b.prs_kostenplaats_key, 1, COALESCE (b.bes_bestelling_fiat_user, -1)) kpg_fiatteur_key"
+ " FROM bes_bestelling b"
+ " WHERE b.bes_bestelling_key = " + ingesloten[i].bes_key;
var oRs = Oracle.Execute(sql);
var nextapprover_key = oRs("kpg_fiatteur_key").Value;
if (nextapprover_key == -1 || budget.exceeds_profiel(totaal, nextapprover_key, ingesloten[i].dis_key))
{ // Deze bestelling overschrijdt het mandaat van de budgethouder (kostenplaatsgroep verantwoordelijke/fiatteur) van de opgegeven kostenplaats en/of de budgethouder is onbekend.
result.message = L("lcl_bes_exceed_limit");
}
else
{
result.message = bes.sendNeedApprovalNotification(ingesloten[i].bes_key, nextapprover_key);
}
oRs.close();
}
result.success = true;
}

View File

@@ -706,8 +706,8 @@ else // nieuwe bestelling. Defaults bepalen
%><input type='hidden' name='deliveryAddr' value='<%=bes_bestelling.mld_adres_key%>'><%
}
*/
FCLTadresselector("deliveryAddr", "sgAdres",
{
FCLTadresselector("deliveryAddr", "sgAdres",
{
label: L("lcl_delivery_address"),
adresKey: bes_bestelling.mld_adres_key,
emptyOption: "",
@@ -716,7 +716,7 @@ else // nieuwe bestelling. Defaults bepalen
onChange: "onChangeAdres",
readonly: (bes_key > 0 && aflever_readonly),
required: true
}) ;
}) ;
RWFIELDTR("delivery_place", "fld", L("lcl_bes_del_room"), bes_bestelling.afleverruimte,
{
required: S("bes_afleverruimte_verplicht") == 1,
@@ -727,7 +727,7 @@ else // nieuwe bestelling. Defaults bepalen
var show_leverancier = !(backo && bes_disc_info.isFreeArticle);
bes.generateBesInfoBlock(bes_bestelling, show_leverancier, "RW");
bes.generateBesInfoBlock(bes_bestelling, bes_disc_info, show_leverancier, "RW");
BLOCK_START("besFlex"+(S("bes_flexcolumns")!=1?"2":"") , L("lcl_bes_flexblok"));
%><tr><td class="besflex"><%

View File

@@ -157,101 +157,36 @@ if (!isCorrectie)
var UseRemoteApproval = custfunc.bes_hasremoteapproval(dis_key, pResult) && pResult.value;
if (UseRemoteApproval)
{
// De fiattering voor deze catalogus ligt helemaal buiten FACILITOR
ter_finfiattering = true;
// De fiattering voor deze catalogus ligt helemaal buiten FACILITOR
ter_finfiattering = true;
}
else
{
// Persoonlijk Gebonden Budget (PGB) en/of Afdeling Gebonden Budget (AGB) controle
// bes_disc_info.disc_params_pgb: 0 = Geen van beiden
// 1 = Alleen pgb
// 2 = Alleen agb
// 3 = Beiden, pgb en agb
if (bes_disc_info.disc_params_pgb > 0)
{ // Persoonlijk Gebonden Budget (PGB) en Afdeling Gebonden Budget (AGB) controle
// Fiatteringsproces moet gevolgd worden op de naam van
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek
var exceeds_pgb = bes.exceeds_pgb(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
var exceeds_agb = bes.exceeds_agb(staffel_info.totaalbedrag, kostenplaats_key, dis_key, bes_key)
if (exceeds_pgb || exceeds_agb)
{
if (S("bes_pgb_fiattering") == 1 && !(isFE && S("bes_pgb_fe_fiat") == 1))
// Algemene fiatterings proces noodzakelijk naast PGB fiatering
ter_finfiattering = true;
else
{ // Fiatteringsproces moet gevolgd worden op de naam van.
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key.
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor.
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
var strState = (exceeds_pgb
? L("lcl_bes_exceeds_pgb") + safe.curr(bes.get_pgb_exceed_amount(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
: "")
+ (exceeds_pgb && exceeds_agb
? "\n" // Nieuwe regel.
: "")
+ (exceeds_agb
? L("lcl_bes_exceeds_agb") + safe.curr(bes.get_agb_exceed_amount(staffel_info.totaalbedrag, kostenplaats_key, dis_key, bes_key))
: "")
+ "\n" + L("lcl_bes_adjust_order");
abort_with_warning(strState);
}
}
else if (isFE && S("bes_pgb_fe_fiat") == 1)
{ // Onder PGB/AGB en bestelling van FE en moet zeker langs budgethouder
ter_finfiattering = true;
}
}
else
{ // Standaard fiatteringscontrole.
// Fiatteringsproces moet gevolgd worden op de naam van
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
// Als orgineel nog gefiatteerd moet worden door budgethouder (status is 2) dan zeker eerst fiatteren.
if (!act_mode
&& !bes_disc_info.disc_params_autoacceptrfo
&& budget.exceeds_profiel(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
&& (isNew || oldStatus == 2 || bes.herfiatteren(bes_bestelling, bes_disc_info, staffel_info.totaalbedrag)))
// niet automatisch fiat(!)teren en profiel wordt overschreden.
ter_finfiattering = true;
}
var params = {prs_key: prs_key,
prs_key_voor: prs_key_voor,
dis_key: dis_key,
kp_key: kostenplaats_key,
totaalbedrag: staffel_info.totaalbedrag,
bes_bestelling: bes_bestelling,
bes_disc_info: bes_disc_info,
isNew: isNew,
isFE: isFE,
oldStatus: oldStatus,
act_mode: act_mode};
ter_finfiattering = bes.checkFiat(bes_key, params);
// Als het boven mijn profiel is, of ik -als ik budgethouder ben/zou zijn- niet zelf mag goedkeuren.
// Gaan we kijken wie dan wel.
// Kan prs_key (aanmaker) zelf fiatteren?: true: totaalbedrag <= can_selfapprove
// false totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
if (ter_finfiattering || staffel_info.totaalbedrag > S("can_selfapprove"))
{ // Wie moet dit (als eerste) goedkeuren voor deze kostenplaats?
// De melder van de melding (prs_key) mag niet zelf goedkeuren boven het bedrag can_selfapprove.
// staffel_info.totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
// prs_key heeft altijd een waarde (prs_key > 0) (required).
if (prs_key > 0 && staffel_info.totaalbedrag > S("can_selfapprove"))
approver_key = prs.getKpVerantwoordelijkeExcept(kostenplaats_key, prs_key);
else
approver_key = prs.getKpVerantwoordelijke(kostenplaats_key);
__Log('Eerstgevonden fiatteur: '+approver_key);
if (approver_key == -1) {
// geen fiatteur gevonden, bestellen niet mogelijk
__Log('bestelling afgebroken');
abort_with_warning(L("lcl_bes_no_fiatteur"));
}
if (budget.exceeds_profiel(staffel_info.totaalbedrag, approver_key, dis_key))
{ // de gevonden fiatteur heeft onvoldoende profiel, is er een hogere (kpngroepverantwoordelijke)
// Let wel: alleen controle of hij er bestaat. Wie het is doen we nog niets mee hier.
__Log('voldoet niet');
var nextapprover_key = prs.getKpVerantwoordelijkeExcept(kostenplaats_key, approver_key);
__Log('Vervolgensgevonden fiatteur: ' + nextapprover_key);
if (nextapprover_key == -1 || budget.exceeds_profiel(staffel_info.totaalbedrag, nextapprover_key, dis_key))
{
__Log('voldoet ook niet');
abort_with_warning(L("lcl_bes_exceed_limit"));
}
}
// Er is nu een altijd een eerste approver_key gevonden (met of zonder voldoende fiatteringsrechten. Anders al een abort.
// approver_key is oke of indien -1 dan is er geen approval meer nodig (is al geabort hierboven anders)
}
// Als het boven mijn profiel is, of ik -als ik budgethouder ben/zou zijn- niet zelf mag goedkeuren.
// Gaan we kijken wie dan wel.
// Kan prs_key (aanmaker) zelf fiatteren?: true: totaalbedrag <= can_selfapprove
// false totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
if (ter_finfiattering || staffel_info.totaalbedrag > S("can_selfapprove"))
{ // Wie moet dit (als eerste) goedkeuren voor deze kostenplaats?
// De melder van de melding (prs_key) mag niet zelf goedkeuren boven het bedrag can_selfapprove.
// staffel_info.totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
// prs_key heeft altijd een waarde (prs_key > 0) (required).
approver_key = bes.getApprover(params);
}
}
}
// JGL: 5.1.2: er is besloten dat een concept/embargo alleen (en altijd)
@@ -406,7 +341,7 @@ if (!isNew && !makechange) // update nog tracken
// ======================================================
// 1=afgewezen, 2=nieuw, 3=Gefiatteerd, 4=Geaccepteerd, 5=Besteld
if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
if (status == 1 || status == 2 || status == 3 || status == 4 || status == 5)
{ // In deze mode kunnen er regels bij of afkomen. We gooien alles weg en inserten opnieuw
// Delete all objects if updating
if (vervang)
@@ -477,39 +412,82 @@ if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
if (UseRemoteApproval)
{
__Log("Requesting remote approval");
var remoteResult = custfunc.bes_getremoteapproval(getQParamInt("bes_key", pResult)); // dis_key ook meegeven?
// Track dat fiattering gevraagd wordt aan extern systeem (custfunc.bes_remoteapprovalSystemName(dis_key)?)
// En wat bij fail?
// shared.trackaction("BESAP2", bes_key, remoteResult);
// var corsaResult = false;
// var corsaError = "";
// corsaResult = corsaConnect();
// if (!corsaResult)
// strState = "Resultaat Corsa/Webservice: "+corsaError;
__Log("Requesting remote approval");
var remoteResult = custfunc.bes_getremoteapproval(getQParamInt("bes_key", pResult)); // dis_key ook meegeven?
// Track dat fiattering gevraagd wordt aan extern systeem (custfunc.bes_remoteapprovalSystemName(dis_key)?)
// En wat bij fail?
// shared.trackaction("BESAP2", bes_key, remoteResult);
// var corsaResult = false;
// var corsaError = "";
// corsaResult = corsaConnect();
// if (!corsaResult)
// strState = "Resultaat Corsa/Webservice: "+corsaError;
//
// var xmlTableDef = Server.CreateObject("MSXML2.DOMDocument.6.0");
// var docNr = corsaCreateDoc(bes_key);
// var caseID = corsaGetCase(docNr);
// xmlTableDef = corsaVarTabGet(caseID);
// corsaVarTabSet(bes_key, caseID, xmlTableDef);
// corsaDisconnect();
// var xmlTableDef = Server.CreateObject("MSXML2.DOMDocument.6.0");
// var docNr = corsaCreateDoc(bes_key);
// var caseID = corsaGetCase(docNr);
// xmlTableDef = corsaVarTabGet(caseID);
// corsaVarTabSet(bes_key, caseID, xmlTableDef);
// corsaDisconnect();
// sql = "UPDATE bes_bestelling"
// + " SET bes_bestelling_opmerking = 'CORSA: " + docNr + " (" + caseID + ")'"
// + " WHERE bes_bestelling_key = " + bes_key;
// Oracle.Execute(sql);
// sql = "UPDATE bes_bestelling"
// + " SET bes_bestelling_opmerking = 'CORSA: " + docNr + " (" + caseID + ")'"
// + " WHERE bes_bestelling_key = " + bes_key;
// Oracle.Execute(sql);
}
else
{ // internal approval mechanism
// Nu kan daadwerkelijk de juiste status gezet worden.
} else { // internal approval mechanism
// Afhankelijk van de fiatterings/acceptatie flow zijn dit de acties:
// 1) "Fiatteur -> "BESBOF": bes_disc_params_fiatflow = 0 (fiatteren en dan accepteren).
// Als er gefiatter moet worden dan kostenplaats verantwoordelijke een notificatie sturen. De status blijft "Nieuw(2)".
// Als er niet meer gefiatteerd moet worden, moet er gekeken worden of er geaccepteerd dient te worden.
// Als er geaccepteerd dient te worden moet de status naar "Gefiatteerd(3)".
// Als er niet meer geaccepteerd hoeft te worden kan de status dan naar "Geaccepteerd(4)" of naar status "Besteld(5)" als de setting auto_order is gezet.
// Dit is de standaard flow.
// 2) "BESBOF -> Fiatteur": bes_disc_params_fiatflow = 1 (accepteren en dan fiatteren).
// Als er geaccepteerd moet worden blijft de status "Nieuw(2)".
// Als er niet meer geaccepteerd moet worden, moet er gekeken worden of er gefiatteerd dient te worden.
// Als er gefiatteerd dient te worden moet de status naar "Geaccepteerd(4)". Dan de kostenplaats verantwoordelijke een notificatie sturen.
// Als er niet meer gefiatteerd hoeft te worden kan de status dan naar "Gefiatteerd(3)" of naar status "Besteld(5)" als de setting auto_order is gezet.
// Moet er finanicieel gefiatteerd worden?
var hasToApprove = approver_key > 0;
// Moet de BackoOffice (BO) nog accepteren?
var hasToAccept = ((oldStatus == (bes_disc_info.disc_params_fiatflow == 0? 3 : 4) &&
staffel_info.totaalbedrag > bes_bestelling.approved &&
staffel_info.totaalbedrag > bes_disc_info.disc_params_bestellimiet) ||
((staffel_info.totaalbedrag > bes_disc_info.disc_params_bestellimiet) &&
(isNew || bes.herfiatteren(bes_bestelling, bes_disc_info, staffel_info.totaalbedrag))));
// Nu kan daadwerkelijk de juiste status gezet worden.
if (approver_key == -1) // No fin-approval required
{
// Als orgineel nog gefiatteerd moet worden door BO (status is 3) dan zeker eerst fiatteren.
if (bes_disc_info.disc_params_fiatflow == 0)
{
if (hasToApprove)
{ // Deze bestelling moet financieel gefiatteerd worden.
// Send de fiatteur een notificatie.
// Niet uitvoeren bij bestelling voor geplande actie
if (!act_mode)
{
if (vervang)
{
// Bij wijzigen i.v.m herfiattering/heraccepteren de fiatteur/het accepteer bedrag op null zetten zodat het fiatteren/accepteren opnieuw kan beginnen.
var sql = "UPDATE bes_bestelling"
+ " SET bes_bestelling_fiat_user = NULL"
+ " , bes_bestelling_approved = NULL"
+ " , bes_bestelling_status = 2"
+ " WHERE bes_bestelling_key = " + bes_key;
Oracle.Execute(sql);
// AP2 notificatie wordt al door sendNeedApprovalNotification gedaan
// bes.setbestellingstatus(bes_key, 2); // terug naar Nieuw/ter acceptering
}
strState = bes.sendNeedApprovalNotification(bes_key, approver_key);
}
}
else
{ // Geen financieele fiattering nodig.
// Als orgineel nog geaccepteerd moet worden door BO (status is 3) dan zeker eerst accepteren.
// Tenzij het bedrag is verlaagd tot onder het approved bedrag of eerste bestellimiet bedrag. Dan kan naar de volgende status worden gegaan.
if ((oldStatus == 3 && staffel_info.totaalbedrag > bes_bestelling.approved && staffel_info.totaalbedrag > bes_disc_info.disc_params_bestellimiet) ||
((staffel_info.totaalbedrag > bes_disc_info.disc_params_bestellimiet) &&
(isNew || bes.herfiatteren(bes_bestelling, bes_disc_info, staffel_info.totaalbedrag)))) // should BO approve?
if (hasToAccept) // Moet BO nog accepteren?
{
bes.setbestellingstatus(bes_key, 3, L("lcl_bes_fiatbyrules")); // finanicieel gefiatteerd, BO moet nog wel
// Bij wijzigen i.v.m herfiattering/heraccepteren het approved bedrag op null zetten zodat het accepteren opnieuw kan beginnen.
@@ -520,10 +498,10 @@ if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
+ " WHERE bes_bestelling_key = " + bes_key;
Oracle.Execute(sql);
}
}
}
else
{
bes.setbestellingstatus(bes_key, 4); // Geaccepteerd
bes.setbestellingstatus(bes_key, 4); // Geaccepteerd(4).
if (bes_disc_info.disc_params_auto_order == "1") // direct opdracht aanmaken
{
@@ -534,28 +512,57 @@ if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
}
}
}
else
{ // Deze bestelling moet gefiatteerd worden
// Inform approver that they have something to do
// Niet uitvoeren bij bestelling voor geplande actie
}
else // bes_disc_info.disc_params_fiatflow == 1
{
if (hasToAccept)
{
// Bij wijzigen i.v.m herfiattering/heraccepteren de fiatteur/het accepteer bedrag op null zetten zodat het fiatteren/accepteren opnieuw kan beginnen.
if (!act_mode)
{
if (vervang)
{
var sql = "UPDATE bes_bestelling"
+ " SET bes_bestelling_fiat_user = NULL"
+ " , bes_bestelling_approved = NULL"
+ " , bes_bestelling_status = 2"
+ " WHERE bes_bestelling_key = " + bes_key;
Oracle.Execute(sql);
// AP2 notificatie wordt al door sendNeedApprovalNotification gedaan
// bes.setbestellingstatus(bes_key, 2); // terug naar Nieuw/ter acceptering
var sql = "UPDATE bes_bestelling"
+ " SET bes_bestelling_fiat_user = NULL"
+ " , bes_bestelling_approved = NULL"
+ " , bes_bestelling_status = 2"
+ " WHERE bes_bestelling_key = " + bes_key;
Oracle.Execute(sql);
}
strState = bes.sendNeedApprovalNotification(bes_key, approver_key);
// De eerste niveau accepteerders (BESBOF) hoeven geen notificaties te ontvangen.
}
}
}
}
else
{ // Geen BO acceptatie nodig.
// Als orgineel nog financieel gefiatteerd moet worden (status is 4) dan zeker eerst financieel fiatteren.
if (hasToApprove) // Moet nog financieel gefiatteerd worden?
{
bes.setbestellingstatus(bes_key, 4, L("lcl_bes_acceptbyrules")); // BO heeft geaccepteerd, finanicieel fiatteren moet nog wel.
// Bij wijzigen i.v.m herfiattering/heraccepteren de fiatteur op null zetten zodat het fiatteren opnieuw kan beginnen.
if (vervang)
{
var sql = "UPDATE bes_bestelling"
+ " SET bes_bestelling_fiat_user = NULL"
+ " WHERE bes_bestelling_key = " + bes_key;
Oracle.Execute(sql);
}
}
else
{
bes.setbestellingstatus(bes_key, 3); // Gefiatteerd(3).
if (bes_disc_info.disc_params_auto_order == "1") // direct opdracht aanmaken
{
if (oldStatus == 5 && opdrStatus == 1) // afgewezen opdrachten vervangen we gewoon
bes.changeOrders(user_key, bes_key);
else
bes.makeOrders(user_key, bes_key);
}
} // !hasToApprove
} // !hasToAccept
} // bes_disc_info.disc_params_fiatflow == 1.
} // internal approval mechanism.
} // Status 1 t/m 5.
else if (oldStatus == 6) // 6=geleverd
{ // er kunnen/zullen ook al bes_bestelopdr_item's bestaan
// er zullen nooit regels bijkomen/weggaan, hoogstens aantallen gewijzigd

View File

@@ -194,7 +194,7 @@ function bes_list (pautfunction, params)
function fncolBesNr(oRs)
{ // Eigenlijk wil je een markering bij de parent, niet bij het child TODO
return S("bes_bestelling_prefix") + (oRs.fields("bes_bestelling_parentkey").value > 0 ? oRs.fields("bes_bestelling_parentkey").value + "*" : oRs.fields("bes_bestelling_key").value);
return S("bes_bestelling_prefix") + (oRs.fields("bes_bestelling_parentkey").Value > 0 ? oRs.fields("bes_bestelling_parentkey").Value + "*" : oRs.fields("bes_bestelling_key").Value);
}
function fncolOordeel(oRs)
@@ -429,7 +429,7 @@ function bes_list (pautfunction, params)
function fnrowDataRFO(oRs)
{
var eSubmit = false;
var besType = oRs("bes_bestelling_module").value;
var besType = oRs("bes_bestelling_module").Value;
var data = {eSubmit:eSubmit, besType:besType};
return JSON.stringify(data);
@@ -438,9 +438,9 @@ function bes_list (pautfunction, params)
function fnrowDataOrder(oRs)
{
var eSubmit = false;
var besOpdrKey = oRs("bes_bestelopdr_key").value;
var besOpdrType = oRs("bes_bestelopdr_module").value;
var besOpdrId = oRs("bes_bestelopdr_id").value;
var besOpdrKey = oRs("bes_bestelopdr_key").Value;
var besOpdrType = oRs("bes_bestelopdr_module").Value;
var besOpdrId = oRs("bes_bestelopdr_id").Value;
var data = {eSubmit:eSubmit, besOpdrKey:besOpdrKey, besOpdrType:besOpdrType, besOpdrId: besOpdrId};
return JSON.stringify(data);
@@ -448,22 +448,22 @@ function bes_list (pautfunction, params)
function fncolBesOpdrNr(oRs)
{
return S("bes_bestelopdr_prefix") + oRs.fields("bes_bestelopdr_id").value;
return S("bes_bestelopdr_prefix") + oRs.fields("bes_bestelopdr_id").Value;
}
function fncolStatusOmschr(oRs)
{
return ((oRs("bes_bestelling_status").value == 6
&& (oRs("bes_bestelling_retourvan_key").value
&& oRs("bes_bestelling_retourvan_key").value > 0))
return ((oRs("bes_bestelling_status").Value == 6
&& (oRs("bes_bestelling_retourvan_key").Value
&& oRs("bes_bestelling_retourvan_key").Value > 0))
? L("lcl_bes_collected")
: bes.getbesbestellingstatustext(oRs("bes_bestelling_status").value))
: bes.getbesbestellingstatustext(oRs("bes_bestelling_status").Value))
}
function fncolOrderVoorMI(oRs)
{
var bestellingvoor = oRs("ordervoor").value
if (!excel && oRs("requestor").value == bestellingvoor)
var bestellingvoor = oRs("ordervoor").Value
if (!excel && oRs("requestor").Value == bestellingvoor)
bestellingvoor = "";
return safe.html(bestellingvoor);
}
@@ -1542,7 +1542,7 @@ function bes_list (pautfunction, params)
sql = "SELECT b.bes_bestelling_key"
+ ", b.bes_bestelling_parentkey"
+ ", b.bes_bestelling_datum datum"
+ ", bes_bestelling_leverdatum leverdatum"
+ ", bes_bestelling_leverdatum leverdatum"
+ ", bes_bestelling_retourvan_key"
+ ", b.bes_bestelling_module"
+ ", ma.mld_adres_naam"
@@ -1587,7 +1587,7 @@ function bes_list (pautfunction, params)
+ " b.bes_bestelling_key"
+ ", b.bes_bestelling_parentkey"
+ ", b.bes_bestelling_datum"
+ ", bes_bestelling_leverdatum"
+ ", bes_bestelling_leverdatum"
+ ", bes_bestelling_status"
+ ", b.bes_bestelling_retourvan_key"
+ ", b.bes_bestelling_module"
@@ -1606,7 +1606,7 @@ function bes_list (pautfunction, params)
function fnrowDataFE(oRs)
{
var besType = oRs("bes_bestelling_module").value;
var besType = oRs("bes_bestelling_module").Value;
var data = {besType:besType};
return JSON.stringify(data);
@@ -1614,9 +1614,6 @@ function bes_list (pautfunction, params)
function fnrowActionEnablerFE(oRs)
{
var m_stat = oRs("bes_bestelling_status").value;
var besType = oRs("bes_bestelling_module").value;
var eEdit = true; // Altijd aanwezig
var data = { eEdit: eEdit };
@@ -1625,8 +1622,8 @@ function bes_list (pautfunction, params)
function fncolOrderVoorFE(oRs)
{
var bestellingvoor = oRs("ordervoor").value
if (!excel && oRs("naam").value == bestellingvoor)
var bestellingvoor = oRs("ordervoor").Value
if (!excel && oRs("naam").Value == bestellingvoor)
bestellingvoor = "";
return safe.html(bestellingvoor);
}
@@ -1686,52 +1683,55 @@ function bes_list (pautfunction, params)
+ " END)";
sql = "SELECT b.bes_bestelling_key"
+ ", bes_bestelling_parentkey"
+ ", bes_bestelling_datum datum"
+ ", bes_bestelling_leverdatum leverdatum"
+ ", bes_bestelling_retourvan_key"
+ ", (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = b.prs_perslid_key_voor) ordervoor"
+ ", " + S("prs_pers_string") + " prs_string"
+ ", m.mld_adres_naam"
+ ", b.bes_bestelling_plaats"
+ ", bes_bestelling_opmerking"
+ ", b.bes_bestelling_status"
+ ", b.bes_bestelling_module"
+ ", MAX("+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +") categorie"
+ ", UPPER(MAX("+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +")) uppercategorie"
+ ", SUM(i.bes_bestelling_item_aantal * COALESCE(i.bes_bestelling_item_prijs, 0)) bedrag"
+ ", (SELECT k.prs_perslid_key"
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = b.prs_kostenplaats_key) budgethouder"
+ ", SUM(i.bes_bestelling_item_aantal) aantal"
+ ", MAX(bes_bestelopdr_item_key) isordered"
+ ", (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = prs.getkpverantwoordelijke (b.prs_kostenplaats_key, " + S("prs_approvemethod") + ", " + exclude_fiatter + ")) fiatteur"
+ ", (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = b.bes_bestelling_fiat_user) fiat_user"
+ ", bd.ins_discipline_key"
+ ", l.alg_locatie_key"
+ " , bes_bestelling_parentkey"
+ " , bes_bestelling_datum datum"
+ " , bes_bestelling_leverdatum leverdatum"
+ " , bes_bestelling_retourvan_key"
+ " , (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = b.prs_perslid_key_voor) ordervoor"
+ " , " + S("prs_pers_string") + " prs_string"
+ " , m.mld_adres_naam"
+ " , b.bes_bestelling_plaats"
+ " , bes_bestelling_opmerking"
+ " , b.bes_bestelling_status"
+ " , b.bes_bestelling_module"
+ " , MAX("+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +") categorie"
+ " , UPPER(MAX("+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +")) uppercategorie"
+ " , SUM(i.bes_bestelling_item_aantal * COALESCE(i.bes_bestelling_item_prijs, 0)) bedrag"
+ " , (SELECT k.prs_perslid_key"
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = b.prs_kostenplaats_key) budgethouder"
+ " , SUM(i.bes_bestelling_item_aantal) aantal"
+ " , MAX(bes_bestelopdr_item_key) isordered"
+ " , (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = prs.getkpverantwoordelijke (b.prs_kostenplaats_key, " + S("prs_approvemethod") + ", " + exclude_fiatter + ")) fiatteur"
+ " , (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = b.bes_bestelling_fiat_user) fiat_user"
+ " , bd.ins_discipline_key"
+ " , l.alg_locatie_key"
+ " , dp.bes_disc_params_fiatflow"
+ " FROM bes_bestelling b"
+ ", bes_bestelling_item i"
+ ", bes_srtdeel isd"
+ ", bes_srtgroep isg"
+ ", bes_v_aanwezigdiscipline bd" // UWV heeft verwijderde disciplines met bestellingen
+ ", prs_perslid p"
+ ", mld_adres m"
+ ", prs_v_afdeling_boom boom"
+ ", prs_kostenplaats k"
+ ", alg_locatie l"
+ ", alg_district di"
+ " , bes_bestelling_item i"
+ " , bes_srtdeel isd"
+ " , bes_srtgroep isg"
+ " , bes_v_aanwezigdiscipline bd" // UWV heeft verwijderde disciplines met bestellingen
+ " , bes_disc_params dp"
+ " , prs_perslid p"
+ " , mld_adres m"
+ " , prs_v_afdeling_boom boom"
+ " , prs_kostenplaats k"
+ " , alg_locatie l"
+ " , alg_district di"
+ " WHERE b.mld_adres_key_lev = m.mld_adres_key"
+ " AND b.bes_bestelling_key = i.bes_bestelling_key"
+ " AND b.fac_activiteit_key IS NULL"
+ " AND i.bes_srtdeel_key = isd.bes_srtdeel_key"
+ " AND isd.bes_srtgroep_key = isg.bes_srtgroep_key"
+ " AND isg.ins_discipline_key = bd.ins_discipline_key"
+ " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
+ " AND p.prs_perslid_key = b.prs_perslid_key"
// Only orders for persons in my organisation as determined by 3D authorization are visible
// See NOTE B
@@ -1790,25 +1790,26 @@ function bes_list (pautfunction, params)
}
var sql_group_by = " GROUP BY b.bes_bestelling_key"
+ ", bes_bestelling_parentkey"
+ ", bes_bestelling_datum"
+ ", bes_bestelling_leverdatum"
+ ", bd.ins_discipline_key"
+ " , bes_bestelling_parentkey"
+ " , bes_bestelling_datum"
+ " , bes_bestelling_leverdatum"
+ " , bd.ins_discipline_key"
+ (excel? ", UPPER("+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +")" : "")
+ ", b.bes_bestelling_retourvan_key"
+ ", " + S("prs_pers_string")
+ ", m.mld_adres_naam"
+ ", b.bes_bestelling_plaats"
+ ", bes_bestelling_opmerking"
+ ", b.bes_bestelling_status"
+ ", b.bes_bestelling_module"
+ ", b.prs_kostenplaats_key"
+ ", b.prs_perslid_key"
+ ", k.prs_perslid_key"
+ ", k.prs_kostenplaatsgrp_key"
+ ", b.bes_bestelling_fiat_user"
+ ", l.alg_locatie_key"
+ ", prs_perslid_key_voor";
+ " , b.bes_bestelling_retourvan_key"
+ " , " + S("prs_pers_string")
+ " , m.mld_adres_naam"
+ " , b.bes_bestelling_plaats"
+ " , bes_bestelling_opmerking"
+ " , b.bes_bestelling_status"
+ " , b.bes_bestelling_module"
+ " , b.prs_kostenplaats_key"
+ " , b.prs_perslid_key"
+ " , k.prs_perslid_key"
+ " , k.prs_kostenplaatsgrp_key"
+ " , b.bes_bestelling_fiat_user"
+ " , l.alg_locatie_key"
+ " , prs_perslid_key_voor"
+ " , dp.bes_disc_params_fiatflow";
sql = discx3d (sql,
"bd.ins_discipline_key",
@@ -1835,11 +1836,11 @@ function bes_list (pautfunction, params)
function fnrowClassFOBO(oRs)
{
var rowclass = '';
var m_stat = oRs("bes_bestelling_status").value;
if (backo && m_stat == 2)
rowclass = 'vervallen';
var m_stat = oRs("bes_bestelling_status").Value;
if (backo && m_stat == 1)
rowclass = 'vervallen'; // Afgewezen(1).
if (oRs("aantal").value < 0)
if (oRs("aantal").Value < 0)
rowclass = 'retour'; // ipv selectable
return rowclass;
@@ -1848,8 +1849,8 @@ function bes_list (pautfunction, params)
// Extra data voor de client om daar dynamisch buttons te kunnen activeren.
function fnrowData(oRs)
{
var besKey = oRs("bes_bestelling_key").value;
var besType = oRs("bes_bestelling_module").value;
var besKey = oRs("bes_bestelling_key").Value;
var besType = oRs("bes_bestelling_module").Value;
var data = {besKey: besKey, besType: besType};
return JSON.stringify(data);
@@ -1858,8 +1859,10 @@ function bes_list (pautfunction, params)
function fnrowActionEnablerFOBO(oRs)
{
var eEdit = true; // Altijd aanwezig
var m_stat = oRs("bes_bestelling_status").value;
if (m_stat == 3) // func_enabled_bestelling is traag, alleen als echt noodzakelijk
var m_stat = oRs("bes_bestelling_status").Value;
var fiatflow = oRs("bes_disc_params_fiatflow").Value;
// Bepalen of Backoffice mag accepteren.
if ((fiatflow == 0 && m_stat == 3) || (fiatflow == 1 && m_stat == 2)) // func_enabled_bestelling is traag, alleen als echt noodzakelijk
{
// We weten al dat we mogen lezen. Geef dat mee aan func_enabled_bestelling, die wordt daar efficienter van
var bes_bestelling = bes.bestelling_info(oRs("bes_bestelling_key").Value);
@@ -1867,7 +1870,8 @@ function bes_list (pautfunction, params)
var eAccept = this_bes.canAccept || this_bes.canAccept2 || this_bes.canAccept3 || this_bes.canAccept4 || this_bes.canAccept5;
var eReject = this_bes.canReject;
}
var eSubmit = (m_stat == 4 && !oRs("isordered").value); // eigenlijk this_bes.canSubmit maar we hebben niet
var eSubmit = (((fiatflow == 0 && m_stat == 4) || (fiatflow == 1 && m_stat == 3)) &&
!oRs("isordered").Value); // eigenlijk this_bes.canSubmit maar we hebben niet
// altijd bes.func_enabled_bestelling gedaan
var data = {eAccept: eAccept, eReject: eReject, eEdit: eEdit, eSubmit: eSubmit};
@@ -1879,31 +1883,34 @@ function bes_list (pautfunction, params)
{ // in 5.0 is het onafhankelijk van bedragen, zie ../fac/fac_fiatttering_list voor meer uitleg
// als hij nog niet volledig is gefiatteerd tonen we de eerstevolgende fiatteur
// als hij wel volledig is gefiatteerd tonen we de laatste fiatteur
var m_stat = oRs("bes_bestelling_status").value;
if (m_stat == 2) // we zijn nog niet klaar met fiatteren
var m_stat = oRs("bes_bestelling_status").Value;
var fiatflow = oRs("bes_disc_params_fiatflow").Value;
if ((fiatflow == 0 && m_stat == 2) || (fiatflow == 1 && m_stat == 4)) // we zijn nog niet klaar met fiatteren
{
approver = oRs.fields("fiatteur").value;
approver = oRs.fields("fiatteur").Value;
}
else
{
approver = oRs.fields("fiat_user").value; // die heeft eventueel gefiatteerd
approver = oRs.fields("fiat_user").Value; // die heeft eventueel gefiatteerd
}
return safe.html(approver);
}
function fncolStatus(oRs)
{
var m_stat = oRs("bes_bestelling_status").value;
if (m_stat == 4 && !oRs("isordered").value)
return fncolStatusOmschr(oRs) + "\nNog geen opdracht";
var m_stat = oRs("bes_bestelling_status").Value;
var fiatflow = oRs("bes_disc_params_fiatflow").Value;
if (((fiatflow == 0 && m_stat == 4) || (fiatflow == 1 && m_stat == 3)) &&
!oRs("isordered").Value)
return fncolStatusOmschr(oRs) + "\n" + L("lcl_bes_no_order_yet");
else
return fncolStatusOmschr(oRs);
}
function fncolOrderVoorFOBO(oRs)
{
var bestellingvoor = oRs("ordervoor").value
if (!excel && oRs("prs_string").value == bestellingvoor)
var bestellingvoor = oRs("ordervoor").Value
if (!excel && oRs("prs_string").Value == bestellingvoor)
bestellingvoor = "";
return safe.html(bestellingvoor);
}

View File

@@ -213,7 +213,7 @@ IFRAMER_HEADER((bes_bestelling.fac_activiteit_key > 0? L("lcl_bes_frame_algemeen
}
BLOCK_END();
bes.generateBesInfoBlock(bes_bestelling, true, "RO");
bes.generateBesInfoBlock(bes_bestelling, bes_disc_info, true, "RO");
BLOCK_START("besFlex"+(S("bes_flexcolumns")!=1?"2":"") , L("lcl_bes_flexblok"));
%><tr><td class="besflex"><%