FSN#36761: AiAi! foutmelding bij afmelden inspectie op mobiel.

svn path=/Website/branches/v2016.1/; revision=29707
This commit is contained in:
Maykel Geerdink
2016-06-14 11:40:56 +00:00
parent 139bccc39d
commit 6b1b9aa186
2 changed files with 92 additions and 19 deletions

View File

@@ -42,6 +42,8 @@ for (var i = 0; i < ins_key_arr.length; i++)
var sql = "SELECT idsc.ins_deelsrtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , xcp.ins_srtcontroledl_xcp_eind vervaldatum"
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) eenheid"
+ " , isc.ins_srtcontrole_mode"
+ " FROM ins_srtcontrole isc"
+ " , ins_deelsrtcontrole idsc"
+ " , ins_srtcontroledl_xcp xcp"
@@ -58,6 +60,8 @@ for (var i = 0; i < ins_key_arr.length; i++)
var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value;
var vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null;
var vervallen = vervaldatum != null && vervaldatum < new Date();
var inspectiemode = oRs("ins_srtcontrole_mode").Value;
var eenheid = oRs("eenheid").Value;
// Het laatste inspectierecord moet Gepland(0) of verwerkt(6) (ins_deelsrtcontrole_status = -1) zijn, anders kan de inspectie niet gestart worden.
if (this_ins.canInspect && !vervallen && (ins_deelsrtcontrole_status <= 0 || ins_deelsrtcontrole_status == 6))
@@ -65,7 +69,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
if (ins_deelsrtcontrole_status != -1 && ins_deelsrtcontrole_status != 6)
dlsrtcont_key = ins_deelsrtcontrole_key;
ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key,
inspectiestatus: ins_deelsrtcontrole_status});
inspectiestatus: ins_deelsrtcontrole_status, inspectiemode: inspectiemode, eenheid: eenheid});
tobestart++;
}
}
@@ -75,41 +79,110 @@ var result = {success: true, multi: multi, start: true };
for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking van het starten.
var nextdate = null;
var datum_org = null;
var plandatum;
var startdate = new Date();
var respijt = false;
var fields = [];
if (ingesloten[i].dlsrtcont_key < 0)
{ // Er is nog geen inspectie (ins_deelsrtcontrole) record aangemaakt. Eerst maar eens aanmaken.
// Als er al een inspectie is geweest kan er een volgende inspectiedatum berekend worden.
var nextdate = null;
if (ingesloten[i].inspectiestatus > -1)
{ // Bereken de volgende inspectiedatum.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
datum_org = new Date(oRs("nextdate").Value);
}
//else Er zijn nog geen inspecties geweest voor dit object. Dit wordt de eerste inspectie.
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
else
nextdate = new Date();
// Plandatum blijft leeg.
var fields = [ { dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" },
{ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
{ dbs: "ins_deelsrtcontrole_status", typ: "key", val: 2 },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: (nextdate? nextdate : null) }
];
fields = [ { dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" },
{ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
{ dbs: "ins_deelsrtcontrole_status", typ: "key", val: 2 },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: (datum_org? datum_org : null) }
];
// Inspectie opslaan als ik weet voor de moment modus dat de inspectiedatum na de volgende inspectiedatum ligt.
}
else if (ingesloten[i].inspectiemode == 0)
{ // Alleen voor de moment modus hebben we nog meer informatie nodig.
// Is er een plandatum? Dan is dit de volgende inspectiedatum.
sql = "SELECT ins_deelsrtcontrole_plandatum"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deelsrtcontrole_status <= 5"
+ " AND idsc.ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key
+ " AND idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
+ " AND idsc.ins_deel_key = " + ingesloten[i].ins_key
oRs = Oracle.Execute(sql);
var insIns = buildInsert("ins_deelsrtcontrole", fields);
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true);
if (err.friendlyMsg)
if (!oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null)
{
result.warning = err.friendlyMsg;
result.success = false;
// De plandatum is de volgende inspectiedatum
plandatum = new Date(oRs("ins_deelsrtcontrole_plandatum").Value);
nextdate = plandatum;
// Alleen als de plandatum na de volgende inspectiedatum valt is er sprake van respijt.
// Als het de allereerste inspectie is dan is er nooit sprake van respijt.
respijt = ingesloten[i].inspectiestatus > -1 && plandatum > nextdate;
}
else
{ // Status is groter dan -1 want er is een ins_deelsrtcontrole record.
// Bereken de volgende inspectiedatum.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
}
oRs.Close();
}
if (ingesloten[i].inspectiemode == 0)
{ // Alleen voor de moment modus hebben we nog meer informatie nodig.
// Truncate datums op de dag of het uur afhankelijk van de eenheid.
if (ingesloten[i].eenheid == 0)
{
var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
var now_trunc = new Date(new Date().setMinutes(0, 0, 0));
if (respijt)
plandatum = new Date(plandatum.setMinutes(0, 0, 0));
}
else
{
var nextdate_trunc = new Date(nextdate.midnight());
var now_trunc = new Date(new Date().midnight());
if (respijt)
plandatum = new Date(plandatum.midnight());
}
}
// Nu nog de status zetten, tracking genereren en notificaties sturen.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 2); // In behandeling(2)
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
// I.g.v. moment modus: valt de inspectie voor de geplande inspectie datum?
if ((ingesloten[i].inspectiemode == 0) && !((respijt && plandatum <= now_trunc) || (!respijt && nextdate_trunc <= now_trunc)))
{ // Moment modus en de startdatum (nu) is voor de volgende inspectiedatum
result.warning = "Geplande datum is in de toekomst. Er is geen terugkerende taak gestart.";
result.success = false;
}
else
{
if (ingesloten[i].dlsrtcont_key < 0)
{ // Nu pas weten we zeker dat het inspectie (ins_deelsrtcontrole) record aangemaakt mag worden. Dat doen we hier dan ook.
var insIns = buildInsert("ins_deelsrtcontrole", fields);
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true);
if (err.friendlyMsg)
{
result.warning = err.friendlyMsg;
result.success = false;
}
}
// Nu nog de status zetten, tracking genereren en notificaties sturen.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 2); // In behandeling(2)
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
}
}
Response.Write(JSON.stringify(result));

View File

@@ -468,7 +468,7 @@ else
ROFIELD("fld", L("lcl_opdr_plandate"), toDateTimeString(oRs("ins_deelsrtcontrole_plandatum").Value));
}
if (ins_deelsrtcontrole_status < 6)
if (ins_deelsrtcontrole_status == 2 || ins_deelsrtcontrole_status == 5)
{
sql = "SELECT " + lcl.xsqla('isc.ins_srtcontrole_omschrijving', 'isc.ins_srtcontrole_key')
+ " , ins_srtcontrole_type"