DJIN#53402 DV&O: Melding blijft openstaan na afwijzen opdracht

svn path=/Website/trunk/; revision=38962
This commit is contained in:
Alex Tiehuis
2018-08-28 10:39:43 +00:00
parent 4e7f8af08c
commit dba0139854
5 changed files with 135 additions and 3 deletions

View File

@@ -80,14 +80,14 @@ function opdr_accept()
function opdr_reject()
{
FcltMgr.openModalDetail("../mld/opdr_reject.asp?opdr_key=" + opdr_key + "&urole=" + urole, L("lcl_mld_reject"), { callback: FcltMgr.reload });
FcltMgr.openModalDetail("../mld/opdr_reject.asp?opdr_key=" + opdr_key + "&urole=" + urole, L("lcl_mld_reject"), { callback: opdrCloseCallback });
}
function opdr_cancel()
{
var url = "../mld/opdr_cancel_confirm.asp?opdr_key=" + opdr_key + "&dorefresh=1";
FcltMgr.openModalDetail(url, L("lcl_mld_opdr_cancel"),
{ callback: FcltCallbackRefresh
{ callback: opdrCloseCallback
});
}

View File

@@ -27,6 +27,20 @@ var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": opdr_key };
protectRequest.validateToken();
user.auth_required_or_abort(opdr_key > 0); // Hebben we een opdracht key gekregen?
function writeOpdrOpmToMld()
{ // Afhandelingtekst van de opdracht automatisch kopi<70>ren naar de melding.
var sql = "SELECT mld_melding_opmerking"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_opdr.mld_key;
var oRs = Oracle.Execute(sql);
var new_opm = (oRs("mld_melding_opmerking").Value || "") + "\n" + L("lcl_mld_final_remark") + ":\n" + opdr_opm;
var fields = [ { dbs: "mld_melding_opmerking", typ: "varchar", val: new_opm, track: L("lcl_mld_inf_Opmerking"), len: 4000 } ];
var mldUpd = buildTrackingUpdate("mld_melding", " mld_melding_key = " + mld_opdr.mld_key, fields);
oRs = Oracle.Execute(mldUpd.sql);
if (mldUpd.trackarray.length)
mld.trackmeldingupdate(mld_opdr.mld_key, L("lcl_mld_is_mldupd") + "\n" + mldUpd.trackarray.join("\n"));
}
// Controleren of ik deze opdracht mag annuleren
var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
@@ -34,6 +48,7 @@ var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze
user.auth_required_or_abort(this_opdr.canCancel, L("lcl_shared_no_auth")); // Mag ik deze opdracht annuleren
var result = { opdr_key: opdr_key, message: "", success: false};
var reqStatusEmptyMelding = [];
var mld_opdr = this_opdr.mld_opdr;
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
@@ -89,7 +104,42 @@ if (flextrack.length)
// Zetten van de status en afhandelen van de tracking van het annuleren (cancel).
mld.setopdrachtstatus(opdr_key, 1); // Verworpen
var sluitmelding = mld_opdr.typeopdr_sluitmelding;
result.mld_key = mld_opdr.mld_key;
mld.updatemeldingstatus(mld_opdr.mld_key, 0);
if (sluitmelding > 0 && mld_opdr.typeopdr_isofferte == 0) // misschien melding nu ook? Bij offertes melding nooit automatisch afmelden of de vraag weergeven
{ // Zijn er niet-afgemelde opdrachten bij dezelfde melding?
sql = "SELECT COUNT(*) aantal"
+ " FROM mld_opdr o1"
+ " WHERE o1.mld_melding_key = " + mld_opdr.mld_key
+ " AND o1.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)";
oRs = Oracle.Execute(sql);
var nn = oRs("aantal").Value;
oRs.Close();
if (nn == 0) // Het was de laatste opdracht van de melding die nog niet afgemeld is
{
reqStatusEmptyMelding = mld.getReqStatusEmptyMelding(reqStatusEmptyMelding, mld_opdr.mld_key, 1); // Melding status "Afgewezen(1)"
if (reqStatusEmptyMelding.length == 0) // Alle verplichte kenmerken en/of verplicht object zijn ingevuld.
{
// Mag ik dan ook de melding afmelden?
var this_mld = mld.func_enabled_melding(mld_opdr.mld_key);
result.canCloseMld = this_mld.canClose; // ondervangt ook de situatie dat hij al is afgemeld.
if (result.canCloseMld && (sluitmelding == 2)) // Autoclose mld
{
writeOpdrOpmToMld();
// Handle workflow actions for completion:
mld.nextworkflowstep(mld_opdr.mld_key, 1); // 1 = completed
mld.setmeldingstatus(mld_opdr.mld_key, 5);
result.canCloseMld = false; // want hij is net afgemeld.
}
else if (!result.canCloseMld && S("mld_add_mldopmerk_on_opdrclose") == 1 && opdr_opm != "")
{ // Afhandelingtekst van de opdracht automatisch kopi<70>ren naar de melding.
writeOpdrOpmToMld();
}
}
// else: Als result.canCloseMld == true dan is sluitmelding == 1 en dan wordt alsnog de vraag gesteld of melding ook moet worden gesloten via callback functie
}
}
result.success = true;

View File

@@ -235,7 +235,7 @@ for (var i = 0; i < ingesloten.length; i++)
sql = "SELECT COUNT(*) aantal"
+ " FROM mld_opdr o1"
+ " WHERE o1.mld_melding_key = " + mld_opdr.mld_key
+ " AND o1.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
+ " AND o1.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)";
oRs = Oracle.Execute(sql);
var nn = oRs("aantal").Value;
oRs.Close();

View File

@@ -29,6 +29,7 @@ var result = {};
var toberejected = 0;
var ingesloten = [];
var opdr_type;
var vraag_sluitmelding = false;
// Bepaal de opdrachten in de selectie die
// ook echt afgewezen kunnen of mogen worden.
for (var i = 0; i < opdr_key_arr.length; i++)
@@ -47,6 +48,7 @@ for (var i = 0; i < opdr_key_arr.length; i++)
var mld_key = oRs("mld_melding_key").value;
oRs.Close();
}
vraag_sluitmelding = (ingesloten.length > 1) ; // Bij meerdere opdrachten sluiten vragen we of de meldingen ook meemoeten
user.anything_todo_or_abort(toberejected > 0); // We klagen niet over enkele wel en enkele niet
%>
<html>
@@ -141,6 +143,15 @@ user.anything_todo_or_abort(toberejected > 0); // We klagen niet over enkele wel
L("lcl_mld_inf_opmerking_fiat"),
(ingesloten.length == 1? opdr_opmr : ""),
{html: "rows='8'"});
if (vraag_sluitmelding)
{
%><tr><td colspan="2">
<% CHECKBOX("fldmldclose", "mld_close"); %>
<label for="mld_close"><%=L("lcl_mld_mld_close_try")%></label>
</td></tr>
<%
}
BLOCK_END();
var buttons = [ {title: L("lcl_reject"), icon: "opslaan.png", action: "mld_reject()", singlepress: true, id: "btn_reject_submit" },
{title: L("lcl_cancel"), icon: "undo.png", action: "mld_cancel()" }];

View File

@@ -25,10 +25,46 @@ if (opdr_key_arr.length)
<%
protectRequest.validateToken();
function mldClose(sluitmelding, ingesloten)
{
if (sluitmelding == 1)
{
var mld_close = (Request.Form("mld_close").count == 1); // Die ook?
var ismobile = getFParamInt("ismobile", 0) == 1; // Meld ik de opdracht met mijn mobile af?
if (ismobile)
sluitmelding = 2; // // Via mobile afmelden nooit vragen maar gewoon melding afmelden (FSN#26329).
if (ingesloten.length > 1) // Vraag is al geweest
{
if (mld_close)
sluitmelding = 2; // yepe
else
sluitmelding = 0; // nope
}
}
return sluitmelding;
}
function writeOpdrOpmToMld()
{ // Afhandelingtekst van de opdracht automatisch kopi<70>ren naar de melding.
var sql = "SELECT mld_melding_opmerking"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_opdr.mld_key;
var oRs = Oracle.Execute(sql);
var new_opm = (oRs("mld_melding_opmerking").Value || "") + "\n" + L("lcl_mld_final_remark") + ":\n" + opdr_opm;
var fields = [ { dbs: "mld_melding_opmerking", typ: "varchar", val: new_opm, track: L("lcl_mld_inf_Opmerking"), len: 4000 } ];
var mldUpd = buildTrackingUpdate("mld_melding", " mld_melding_key = " + mld_opdr.mld_key, fields);
oRs = Oracle.Execute(mldUpd.sql);
if (mldUpd.trackarray.length)
mld.trackmeldingupdate(mld_opdr.mld_key, L("lcl_mld_is_mldupd") + "\n" + mldUpd.trackarray.join("\n"));
}
var opmerk = getFParam("opmerk", "");
var result = {};
var toberejected = 0;
var ingesloten = [];
var reqStatusEmptyMelding = [];
for (var i = 0; i < opdr_key_arr.length; i++)
{
@@ -121,7 +157,42 @@ var result = { opdr_key: ingesloten.join(","), message: "", success: false };
Oracle.Execute(sql);
}
// De status van de melding zou gewijzigd kunnen moeten worden hierdoor
var sluitmelding = mldClose(mld_opdr.typeopdr_sluitmelding, ingesloten);
result.mld_key = mld_opdr.mld_key;
mld.updatemeldingstatus(mld_opdr.mld_key, 0);
if (sluitmelding > 0 && mld_opdr.typeopdr_isofferte == 0) // misschien melding nu ook? Bij offertes melding nooit automatisch afmelden of de vraag weergeven
{ // Zijn er niet-afgemelde opdrachten bij dezelfde melding?
sql = "SELECT COUNT(*) aantal"
+ " FROM mld_opdr o1"
+ " WHERE o1.mld_melding_key = " + mld_opdr.mld_key
+ " AND o1.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)";
oRs = Oracle.Execute(sql);
var nn = oRs("aantal").Value;
oRs.Close();
if (nn == 0) // Het was de laatste opdracht van de melding die nog niet afgemeld is
{
reqStatusEmptyMelding = mld.getReqStatusEmptyMelding(reqStatusEmptyMelding, mld_opdr.mld_key, 1); // Melding status "Afgewezen(1)"
if (reqStatusEmptyMelding.length == 0) // Alle verplichte kenmerken en/of verplicht object zijn ingevuld.
{
// Mag ik dan ook de melding afmelden?
var this_mld = mld.func_enabled_melding(mld_opdr.mld_key);
result.canCloseMld = this_mld.canClose; // ondervangt ook de situatie dat hij al is afgemeld.
if (result.canCloseMld && (sluitmelding == 2)) // Autoclose mld
{
writeOpdrOpmToMld();
// Handle workflow actions for completion:
mld.nextworkflowstep(mld_opdr.mld_key, 1); // 1 = completed
mld.setmeldingstatus(mld_opdr.mld_key, 5);
result.canCloseMld = false; // want hij is net afgemeld.
}
else if (!result.canCloseMld && S("mld_add_mldopmerk_on_opdrclose") == 1 && opdr_opm != "")
{ // Afhandelingtekst van de opdracht automatisch kopi<70>ren naar de melding.
writeOpdrOpmToMld();
}
}
// else: Als result.canCloseMld == true dan is sluitmelding == 1 en dan wordt alsnog de vraag gesteld of melding ook moet worden gesloten via callback functie
}
}
}
result.success = true;