HCAS#36946: Afgeronde taak nog kunnen aanpassen/verwijderen.

svn path=/Website/trunk/; revision=30630
This commit is contained in:
Maykel Geerdink
2016-09-08 08:55:06 +00:00
parent 20cbc21f59
commit b2a6acda2c
2 changed files with 178 additions and 8 deletions

View File

@@ -332,7 +332,7 @@ user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel
FcltMgr.closeDetail(window, { cancel: true } );
}
<% if (insClose)
<% if (insClose || insEdit)
{ %>
function onChangeDeelsrtcdatum(id)
{
@@ -537,7 +537,7 @@ user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel
var dag_na_lastinspectdatum;
var aantal_dmj_eenheid;
var minDate = aanmaakdatum; // Als er nog geen inspecties zijn geweest dan is de aanmaakdatum de minimale datum.
if (!oRs.eof)
if (!oRs.eof && oRs("lastinspectdatum").Value)
{
lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn.
dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn.
@@ -623,12 +623,89 @@ user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel
readonly: true,
suppressEmpty: true
});
var maxDate = new Date();
if (insClose || (insEdit && typeof inspect_data.deelsrtcontrole_datum != null))
{
var dmj_eenheid;
// Voor gereed gemelde(5) en afgeronde(6) inspecties geldt een ander minDate en maxDate.
if (dsc_is_afgemeld) // Er geldt dan insEdit en !insClose. Als insClose dan is de status < 5.
{ // Inspectie is Gereed gemeld(5) of Afgerond(6). Datum mag ik nog aanpassen.
// Wijzigen in status Afgerond(6) mag alleen als je INSMSU rechten (canMsuEdit) hebt.
// !multi en ins_deelsrtcontrole_key is bekend.
// Zoek 1 dag na inspectiedatum van de voorgaande inspectie.
// Bij alleen uren inspecties de laatste uitvoerdatum tonen als minimale datum, anders een dag later.
// Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly).
sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum"
+ " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum"
+ " , CASE"
+ " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar.
+ " THEN 1" // Dag, maand of jaar.
+ " ELSE 0" // Tijd.
+ " END dmj_eenheid"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_srtcontroledl_xcp xcp"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
+ " AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
+ " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
+ " AND idsc.ins_deel_key IN (" + ingesloten[0] + ")"
+ " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc[0] + ")"
+ " AND ins_deelsrtcontrole_key < " + ingeslotendsc[0]
+ " GROUP BY isc.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
+ " , isc.ins_srtcontrole_eenheid";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn.
dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn.
dmj_eenheid = oRs("dmj_eenheid").Value;
minDate = dmj_eenheid? dag_na_lastinspectdatum : lastinspectdatum;
}
else
minDate = aanmaakdatum;
// Zoek 1 dag voor inspectiedatum van de volgende inspectie.
// Bij alleen uren inspecties de eerste uitvoerdatum tonen als minimale datum, anders een dag eerder.
// Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly).
sql = "SELECT MIN(idsc.ins_deelsrtcontrole_datum) firstinspectdatum"
+ " , MIN(idsc.ins_deelsrtcontrole_datum - 1) dag_voor_firstinspectdatum"
+ " , CASE"
+ " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar.
+ " THEN 1" // Dag, maand of jaar.
+ " ELSE 0" // Tijd.
+ " END dmj_eenheid"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_srtcontroledl_xcp xcp"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
+ " AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
+ " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
+ " AND idsc.ins_deel_key IN (" + ingesloten[0] + ")"
+ " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc[0] + ")"
+ " AND ins_deelsrtcontrole_key > " + ingeslotendsc[0]
+ " GROUP BY isc.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
+ " , isc.ins_srtcontrole_eenheid";
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
firstinspectdatum = new Date(oRs("firstinspectdatum").Value); // Kan uiterlijk vandaag zijn.
dag_voor_firstinspectdatum = new Date(oRs("dag_voor_firstinspectdatum").Value); // Kan uiterlijk morgen zijn.
dmj_eenheid = oRs("dmj_eenheid").Value;
maxDate = dmj_eenheid? dag_voor_firstinspectdatum : firstinspectdatum;
}
// else maxDate = new Date();
oRs.Close();
}
FCLTcalendar("deelsrtcontrole_datum",
{ label: L("lcl_ins_controle_datum"),
datum: inspect_data.deelsrtcontrole_datum? inspect_data.deelsrtcontrole_datum : new Date(),
minDate: minDate,
maxDate: new Date(),
maxDate: maxDate,
required: true,
trclass: "invoerinsp",
timeField: true,
@@ -639,9 +716,12 @@ user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel
onChangeTime: "onChangeDeelsrtcdatum('T')",
// Als de inspectie vervallen is moet je alleen nog de lopende inspecties kunnen gereed melden en afronden. De datum moet je dan ook nog kunnen invullen.
readonly: ((vervallen && !(vervallen && (ins_deelsrtcontrole_status == 0 || ins_deelsrtcontrole_status == 2))) ||
insEdit ||
(dsc_is_afgemeld && (hours > 0 || minutes > 0)? true : false))
(dsc_is_afgemeld && dmj_eenheid == 0) || // Als eenheid in uren(0) is, dan mag de uitvoerdatum/inspectiedatum niet aangepast worden als inspectie is gereed gemeld(5) of afgerond(6).
(insEdit && ins_deelsrtcontrole_status == 6 && !canMsuEdit) ||
inspect_data.deelsrtcontrole_datum < aanmaakdatum
)
});
}
sql = "SELECT ins_controlemode_key"
+ " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')

View File

@@ -57,6 +57,8 @@ else if (savemode == "E")
abort_with_warning(L("lcl_ins_allow_multi_edit"));
deelsrtcont_key = getFParamInt("deelsrtcont_key"); // Specifieke inspectie die gewijzigd is.
deelsrtcontrole_datum = getFParamDate("deelsrtcontrole_datum", new Date); // Datum kan ook aangepast worden.
var getDeelsrtcontroleDate = Request.Form("deelsrtcontrole_datum").count > 0; // Was de inspectiedatum te wijzigen
}
var warning = "";
@@ -78,6 +80,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
+ " , COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid) eenheid"
+ " , di.ins_srtcontrole_mode"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , di.ins_deel_aanmaak"
+ " FROM ins_v_defined_inspect di"
+ " , ins_srtcontroledl_xcp xcp"
+ " , ins_deelsrtcontrole idsc"
@@ -98,6 +101,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
// Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout.
var ins_srtcontrole_mode = oRs("ins_srtcontrole_mode").Value;
var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1; // Als er nog geen inspectie is geweest is de status -1.
var ins_deel_aanmaak = new Date(oRs("ins_deel_aanmaak").Value);
var eenheid = oRs("eenheid").Value;
var ins_deelsrtcontrole_datum_max = oRs("ins_deelsrtcontrole_datum").Value;
var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value;
@@ -155,13 +159,96 @@ for (var i = 0; i < ins_key_arr.length; i++)
}
if (savemode == "E") // Wijzigen.
{ // Het mag niet de eerste inspectie zijn en de laatste inspectie mag niet verwerkt zijn.
{
if (!this_ins.canInspEdit)
{ // Ik heb geen Edit rechten.
continue;
}
else
dlsrtcont_key = ins_deelsrtcontrole_key;
// De uitvoerdatum/inspectiedatum moet vallen tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie.
// De edit mode zorgt ervoor dat er alleen juiste inspectiedatums gekozen kunnen worden, maar het is goed dat het hier ook nog getest wordt.
var aanmaakdatum = ins_deel_aanmaak;
var minDate = new Date();
var maxDate = new Date();
if (ins_deelsrtcontrole_status >= 5 && getDeelsrtcontroleDate)
{
// Zoek 1 dag na inspectiedatum van de voorgaande inspectie.
// Bij alleen uren inspecties de laatste uitvoerdatum tonen als minimale datum, anders een dag later.
// Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly).
sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum"
+ " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum"
+ " , CASE"
+ " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar.
+ " THEN 1" // Dag, maand of jaar.
+ " ELSE 0" // Tijd.
+ " END dmj_eenheid"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_srtcontroledl_xcp xcp"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
+ " AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
+ " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
+ " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")"
+ " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")"
+ " AND ins_deelsrtcontrole_key < " + dlsrtcont_key
+ " GROUP BY isc.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
+ " , isc.ins_srtcontrole_eenheid";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn.
dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn.
dmj_eenheid = oRs("dmj_eenheid").Value;
minDate = dmj_eenheid? dag_na_lastinspectdatum : lastinspectdatum;
}
else
minDate = aanmaakdatum;
// Zoek 1 dag voor inspectiedatum van de volgende inspectie.
// Bij alleen uren inspecties de eerste uitvoerdatum tonen als minimale datum, anders een dag eerder.
// Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly).
sql = "SELECT MIN(idsc.ins_deelsrtcontrole_datum) firstinspectdatum"
+ " , MIN(idsc.ins_deelsrtcontrole_datum - 1) dag_voor_firstinspectdatum"
+ " , CASE"
+ " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar.
+ " THEN 1" // Dag, maand of jaar.
+ " ELSE 0" // Tijd.
+ " END dmj_eenheid"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_srtcontroledl_xcp xcp"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
+ " AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
+ " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
+ " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")"
+ " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")"
+ " AND ins_deelsrtcontrole_key > " + dlsrtcont_key
+ " GROUP BY isc.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
+ " , isc.ins_srtcontrole_eenheid";
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
firstinspectdatum = new Date(oRs("firstinspectdatum").Value); // Kan uiterlijk vandaag zijn.
dag_voor_firstinspectdatum = new Date(oRs("dag_voor_firstinspectdatum").Value); // Kan uiterlijk morgen zijn.
dmj_eenheid = oRs("dmj_eenheid").Value;
maxDate = dmj_eenheid? dag_voor_firstinspectdatum : firstinspectdatum;
}
//else //maxDate = new Date();
oRs.Close();
// Eenheid is in dagen dus afronden op middennacht is ok. Er moet minstens een dag verschil in zitten.
// minDate of maxDate mag ook nog.
if (deelsrtcontrole_datum.midnight().getTime() < minDate.midnight().getTime() || deelsrtcontrole_datum.midnight().getTime() > maxDate.midnight().getTime())
{ // De uitvoerdatum/inspectiedatum valt niet tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie.
continue;
}
}
}
ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key,
@@ -583,6 +670,9 @@ else if (savemode == "E")
{ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 2000 }
];
if (getDeelsrtcontroleDate)
fields.push( { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") } );
if (canMsuEdit)
fields.push( { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } );