RWSN#86923: Probleem e-mailnotificaties bij fiatteren €3-opdrachten na update 2024.2.

svn path=/Website/branches/v2024.2/; revision=67553
This commit is contained in:
Maykel Geerdink
2025-01-09 13:02:53 +00:00
parent 19eda0446f
commit 32f50cfc0d
4 changed files with 99 additions and 25 deletions

View File

@@ -495,17 +495,41 @@ function getSqlFiatMld(fiatstatus, prsKeys, params)
// Daarom de database functie fac.gettrackinguserkey (peventcode IN VARCHAR2, pkey IN NUMBER) uitgeschreven.
// De fac_tracking en fac_srtnotificatie mee joinen duurder langer dan onderstaande oplossing.
/* A1 */ //+ " AND p2.prs_perslid_key = CASE WHEN fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key) IS NULL"
/* A1 */ + " AND p2.prs_perslid_key = prs.getFiatteur(op.prs_kostenplaats_key"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE"
+ " WHEN op.mld_opdr_fiatbedrag IS NULL"
+ " THEN NULL"
+ " ELSE fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key)"
+ " END")
+ " , op.mld_opdr_kosten"
+ " , op.mld_opdr_discipline_key"
+ " , COALESCE(op.mld_opdr_fiatbedrag, 0))"
/* A1 */ + (S("prs_approvemethod") == 2
? // Doe de oude variant van de code.
" AND p2.prs_perslid_key = prs.nextfiatteur(op.mld_opdr_key"
+ " , 'MLD'"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE" // vier-ogenprincipe.
+ " WHEN mld_opdr_fiatbedrag IS NOT NULL OR" // Geen nieuwe melding.
+ " (op.mld_statusopdr_key_refiat > 0 AND" // Herfiattering (refiat).
+ " k.prs_kostenplaats_fiat = 1 AND" // Opdrachten fiatteren 1=Ja.
+ " fac.getsetting('mld_opdr_refiat_preference') = 1)" // Goedkeuren met vinkje aan.
+ " THEN -1" // Geen nieuwe melding of herfiattering als nieuw fiatteren.
+ " WHEN op.mld_opdr_kosten <= fac.getsetting('can_selfapprove')"
+ " THEN -1" // Melder van de melding en opdrachtaanmakre niet excluden als zijzelf mogen fiatteren.
+ " WHEN m.mld_kosten_klant = 1 AND"
+ " m.prs_kostenplaats_key = op.prs_kostenplaats_key AND"
+ " fac.getsetting ('mld_opdr_ignore_caller_profile') = 0"
+ " THEN m.prs_perslid_key" // De melder mag niet fiatteren.
+ " ELSE (SELECT fac.gettrackinguserkey('ORDNEW', op.mld_opdr_key) opdrachtaanmaker"
+ " FROM DUAL)" // De opdrachtaanmaker mag niet fiatteren.
+ " END")
+ " )"
: // Doe de nieuwe variant van de code.
" AND p2.prs_perslid_key = prs.getFiatteur(op.prs_kostenplaats_key"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE"
+ " WHEN op.mld_opdr_fiatbedrag IS NULL"
+ " THEN NULL"
+ " ELSE fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key)"
+ " END")
+ " , op.mld_opdr_kosten"
+ " , op.mld_opdr_discipline_key"
+ " , COALESCE(op.mld_opdr_fiatbedrag, 0))")
+ " AND p2.prs_perslid_key IN (" + prsKeys + ")"
: " AND fno.fac_srtnotificatie_code = " + (fiatstatus == "close"? "'ORDFOK'" : "'ORDFNO'") // Er is gefiatteerd.
+ " AND ft.prs_perslid_key IN (" + prsKeys + ")") // Gefiatterd door jezelf of waarvoor je vervanger bent

View File

@@ -5585,8 +5585,26 @@ mld = {
}
else
{ // tracking aanwezig
var fiat_key = prs.getFiatteur(mld_opdr.kp_key, (S("mld_opdr_reapproval_rate") >= 0? -1 : mld_opdr.mld_opdr_fiat_user), mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
isVerantwoordelijke = (user.isCollega(fiat_key));
if (S("prs_approvemethod") == 2)
{ // Doe de oude variant van de code.
if (mld_opdr.fiatteur_kp_key) // Als KP (A) aanwezig dan KPN (B) testen als isVerantwoordelijke
{
if (S("mld_opdr_reapproval_rate") >= 0)
{ // Met exludekey op "-1" geeft getFiatteur in mode 2 wel de goede waarde terug.
var fiat_key = prs.getFiatteur(mld_opdr.kp_key, -1, mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
isVerantwoordelijke = (user.isCollega(fiat_key));
}
else
{
isVerantwoordelijke = (user.isCollega(mld_opdr.nextfiatteur_kpg_key) && mld_opdr.mld_opdr_fiat_user != mld_opdr.nextfiatteur_kpg_key); // 1e is geweest.
}
}
}
else
{ // Doe de nieuwe variant van de code.
var fiat_key = prs.getFiatteur(mld_opdr.kp_key, mld_opdr.mld_opdr_fiat_user, mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
isVerantwoordelijke = (user.isCollega(fiat_key));
}
// Kostenplaats(groep)verantwoordelijken mogen na het approven de bestelopdracht inzien.
// Als een collega of de user al gefiatteerd heeft mag hij/zij ook de bestelopdracht inzien.
@@ -7776,17 +7794,37 @@ mld = {
+ " , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
+ " , (SELECT prs_perslid_naam_full"
+ " FROM prs_v_perslid_fullnames_all"
+ " WHERE prs_perslid_key = prs.getFiatteur(o.prs_kostenplaats_key"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE"
+ " WHEN o.mld_opdr_fiatbedrag IS NULL"
+ " THEN NULL"
+ " ELSE fac.gettrackinguserkey('ORDFOK', o.mld_opdr_key)"
+ " END")
+ " , o.mld_opdr_kosten"
+ " , o.mld_opdr_discipline_key"
+ " , COALESCE(o.mld_opdr_fiatbedrag, 0))) fiatteur"
+ (S("prs_approvemethod") == 2
? // Doe de oude variant van de code.
" WHERE prs_perslid_key = prs.nextfiatteur(o.mld_opdr_key"
+ " , 'MLD'"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE" // vier-ogenprincipe.
+ " WHEN mld_opdr_fiatbedrag IS NOT NULL"
+ " THEN -1" // Geen nieuwe melding.
+ " WHEN o.mld_opdr_kosten <= fac.getsetting('can_selfapprove')"
+ " THEN -1" // Melder van de melding en opdrachtaanmakre niet excluden als zijzelf mogen fiatteren.
+ " WHEN m.mld_kosten_klant = 1 AND"
+ " m.prs_kostenplaats_key = o.prs_kostenplaats_key AND"
+ " fac.getsetting ('mld_opdr_ignore_caller_profile') = 0"
+ " THEN m.prs_perslid_key" // De melder mag niet fiatteren.
+ " ELSE (SELECT fac.gettrackinguserkey('ORDNEW', o.mld_opdr_key) opdrachtaanmaker"
+ " FROM DUAL)" // De opdrachtaanmaker mag niet fiatteren.
+ " END")
+ " )) fiatteur"
: // Doe de nieuwe variant van de code.
" WHERE prs_perslid_key = prs.getFiatteur(o.prs_kostenplaats_key"
+ (S("mld_opdr_reapproval_rate") >= 0
? " , -1"
: " , CASE"
+ " WHEN o.mld_opdr_fiatbedrag IS NULL"
+ " THEN NULL"
+ " ELSE fac.gettrackinguserkey('ORDFOK', o.mld_opdr_key)"
+ " END")
+ " , o.mld_opdr_kosten"
+ " , o.mld_opdr_discipline_key"
+ " , COALESCE(o.mld_opdr_fiatbedrag, 0))) fiatteur")
+ " , (SELECT COUNT (o.mld_opdr_key)"
+ " FROM mld_opdr o "
+ " WHERE o.mld_melding_key = mld_melding_key"

View File

@@ -545,7 +545,14 @@ if (mld_opdr.kp_key == -1)
if (mld_opdr.opdr_status == 3) // (nog) ter fiattering
{
if (fiat_key)
{
if (S("prs_approvemethod") == 2)
// Doe de oude variant van de code.
fiat_key = mld_opdr.nextfiatteur_kpg_key; // 1e is geweest
else
// Doe de nieuwe variant van de code.
fiat_key = prs.getFiatteur(mld_opdr.kp_key, (S("mld_opdr_reapproval_rate") >= 0? -1 : mld_opdr.mld_opdr_fiat_user), mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
}
else
{ // Als nieuw fiatteren. Ik kan nu de functie getFirstApprover gebruiken.
var mld_info = mld.mld_melding_info(mld_opdr.mld_key);

View File

@@ -506,7 +506,12 @@ for (i in faq_info.fixed_faq)
if (mld_opdr.opdr_status == 3) // (nog) ter fiattering
{
if (fiat_key)
fiat_key = prs.getFiatteur(mld_opdr.kp_key, (S("mld_opdr_reapproval_rate") >= 0? -1 : mld_opdr.mld_opdr_fiat_user), mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
if (S("prs_approvemethod") == 2)
// Doe de oude variant van de code.
fiat_key = mld_opdr.nextfiatteur_kpg_key; // 1e is geweest.
else
// Doe de nieuwe variant van de code.
fiat_key = prs.getFiatteur(mld_opdr.kp_key, (S("mld_opdr_reapproval_rate") >= 0? -1 : mld_opdr.mld_opdr_fiat_user), mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
else
{ // Als nieuw fiatteren. Ik kan nu de functie getFirstApprover gebruiken.
var mld_info = mld.mld_melding_info(mld_opdr.mld_key);