910 lines
47 KiB
Plaintext
910 lines
47 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: ins_inspect_save.asp
|
|
Description: Inspectiedata opslaan
|
|
Parameters: ins_keys of ins_key (geen verschil)
|
|
|
|
Context: Vanuit
|
|
1) ins/ins_edit_inspect.asp
|
|
2) pda/ins_inspect.asp
|
|
3) mjb/mjb_search_list.asp
|
|
Note: Parameter mobile doet niets met navigatie, sluiten enzo, die submit gewoon.
|
|
Resultaat van een submit is een json object
|
|
|
|
*/
|
|
var JSON_Result = true;
|
|
%>
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../Shared/save2db.inc" -->
|
|
<!-- #include file="../Shared/json2.js" -->
|
|
<!-- #include file="../Shared/kenmerk_common.inc" -->
|
|
<!-- #include file="ins.inc" -->
|
|
|
|
<%
|
|
//var insp_actie = getFParamInt("inspectie_actie", 0); // Inspectie invoeren of uitstellen.
|
|
|
|
var ins_key_arr = getFParamIntArray("ins_keys");
|
|
var multi = ins_key_arr.length > 1;
|
|
|
|
var srtcont_key_arr = getFParamIntArray("srtcont_key_arr", []); // Inspectiesoorten.
|
|
|
|
// Scenario's. Wordt alleen vanuit mjb_search_list.asp meegegeven voor het verschuiven van plandatum.
|
|
// Scenario's zijn planbaar (savemode is "P") maar worden savemode "E" als het deelsrtcontrole record al bestaat (al ingepland is).
|
|
var scen_key_arr = getFParamIntArray("scen_key_arr", []);
|
|
|
|
var savemode = getFParam("savemode");
|
|
|
|
var finish = getFParamInt("finish", 0) == 1; // Inspectie direct afronden.
|
|
var mjob = getFParamInt("mjob", 0) == 1;
|
|
// Als multi dan moet de ins_deel array even groot zijn als de srtcontrole array en deelsrtcontrole array.
|
|
user.auth_required_or_abort(!multi || (ins_key_arr.length == srtcont_key_arr.length));
|
|
|
|
var deelsrtcontrole_datum;
|
|
var plandatum, moveyears;
|
|
var nextdate;
|
|
var deelsrtcont_key = -1;
|
|
|
|
if (savemode == "P") // Inplannen (Plan).
|
|
plandatum = getFParamDate("plandatum");
|
|
else if (savemode == "C") // Afmelden/Afronden (Close).
|
|
deelsrtcontrole_datum = getFParamDate("deelsrtcontrole_datum", new Date);
|
|
else if (savemode == "E")
|
|
{ // Wijzigen (Edit).
|
|
plandatum = getFParamDate("plandatum");
|
|
|
|
if (multi)
|
|
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
|
|
}
|
|
else if (savemode == "D") // Delete (Move back to original year).
|
|
{
|
|
var dlsrtcont_key_arr = getFParamIntArray("dlsrtcont_key_arr", []); // Inspecties
|
|
}
|
|
else if (savemode == "R")
|
|
{
|
|
moveyears = getFParamInt("plandatum");
|
|
if (multi || isNaN(moveyears) || moveyears % 1 !== 0)
|
|
{
|
|
Response.Clear();
|
|
Response.Write(JSON.stringify({ success: false, savemode: "R", warning: "" }));
|
|
Response.End();
|
|
}
|
|
deelsrtcont_key = getFParamInt("deelsrtcont_key", -1); // Specifieke inspectie die gewijzigd is.
|
|
var silent = true;
|
|
}
|
|
|
|
var warning = "";
|
|
var result = {};
|
|
var tobehandled = 0;
|
|
var ingesloten = [];
|
|
var canMsuEdit = false; // Alleen voor het wijzigen van inspectie (insEdit). Er geldt dan altijd !multi.
|
|
// Bepaal de objecten in de selectie die ook echt geinspecteerd kunnen of mogen worden.
|
|
for (var i = 0; i < ins_key_arr.length; i++)
|
|
{
|
|
var dlsrtcont_key = -1;
|
|
var sql = "SELECT *"
|
|
+ " FROM (SELECT xcp.ins_srtcontrole_key"
|
|
+ " , idsc.ins_deelsrtcontrole_key"
|
|
+ " , (SELECT MAX (idsc2.ins_deelsrtcontrole_datum)"
|
|
+ " FROM ins_deelsrtcontrole idsc2"
|
|
+ " WHERE idsc2.ins_deel_key = idsc.ins_deel_key"
|
|
+ " AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key"
|
|
+ (scen_key_arr.length > 0 && scen_key_arr[i] > 1
|
|
? " AND idsc2.ins_scenario_key = " + scen_key_arr[i]
|
|
: " AND idsc2.ins_scenario_key = 1")
|
|
+ " ) ins_deelsrtcontrole_datum"
|
|
+ (deelsrtcont_key > 0
|
|
? " , idsc.ins_deelsrtcontrole_plandatum"
|
|
: "")
|
|
+ " , xcp.ins_srtcontrole_eenheid eenheid"
|
|
+ " , xcp.ins_srtcontrole_mode"
|
|
+ " , idsc.ins_deelsrtcontrole_status"
|
|
+ " , xcp.ins_deel_aanmaak"
|
|
+ " , xcp.ctr_discipline_key"
|
|
+ " , xcp.ins_srtcontrole_options options"
|
|
+ " , cd.ins_discipline_omschrijving"
|
|
+ " FROM ins_v_defined_inspect_xcp xcp"
|
|
+ " , ins_deelsrtcontrole idsc"
|
|
+ " , ctr_v_aanwezigdiscipline cd"
|
|
+ " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
|
|
+ " AND xcp.ctr_discipline_key = cd.ins_discipline_key"
|
|
+ " AND xcp.ins_deel_key = " + ins_key_arr[i]
|
|
+ " AND idsc.ins_deel_key(+) = " + ins_key_arr[i]
|
|
+ " AND xcp.ins_srtcontrole_periode > 0"
|
|
+ " AND xcp.ins_srtcontrole_key = " + srtcont_key_arr[i]
|
|
+ (deelsrtcont_key > 0
|
|
? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_key
|
|
: "")
|
|
+ (scen_key_arr.length > 0 && scen_key_arr[i] > 1
|
|
? " AND xcp.ins_scenario_key(+) = " + scen_key_arr[i]
|
|
+ " AND idsc.ins_scenario_key(+) = " + scen_key_arr[i]
|
|
: " AND xcp.ins_scenario_key(+) = 1"
|
|
+ " AND idsc.ins_scenario_key(+) = 1")
|
|
+ " )"
|
|
+ " ORDER BY ins_deelsrtcontrole_key DESC";
|
|
var oRs = Oracle.Execute(sql);
|
|
lcl.set_dialect(oRs("ctr_discipline_key").Value, "INS_TAB_DISCIPLINE_KEY");
|
|
|
|
// 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;
|
|
var isc_options = oRs("options").Value;
|
|
var disc_oms = oRs("ins_discipline_omschrijving").Value;
|
|
var deelsrtcontrole_plandatum = (deelsrtcont_key > 0 ? oRs("ins_deelsrtcontrole_plandatum").Value : -1);
|
|
|
|
var this_ins = ins.func_enabled_deel(ins_key_arr[i],
|
|
{srtcont_key: srtcont_key_arr[i],
|
|
deelsrtcont_key: (ins_deelsrtcontrole_key != null? ins_deelsrtcontrole_key : -1),
|
|
scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1)
|
|
});
|
|
canMsuEdit = savemode == "E" && this_ins.canMsuEdit;
|
|
oRs.Close();
|
|
|
|
if (savemode == "R")
|
|
{
|
|
var minyear = S("mjb_freeze_year") || (new Date()).getFullYear();
|
|
if (ins_deelsrtcontrole_status == 0) // Er is nog geen inspectie geweest.
|
|
{
|
|
if (deelsrtcontrole_plandatum != -1)
|
|
plandatum = new Date(deelsrtcontrole_plandatum);
|
|
else
|
|
continue;
|
|
savemode = "E"; // bestaat al dus 'edit'
|
|
}
|
|
else
|
|
{
|
|
sql = "SELECT ins.nextcyclusdate ("+ins_key_arr[i]+", "+srtcont_key_arr[i]+", 1) nextdate FROM DUAL";
|
|
oRs_nextdate = Oracle.Execute(sql);
|
|
plandatum = new Date(oRs_nextdate("nextdate").Value);
|
|
oRs_nextdate.Close();
|
|
|
|
if (ins_deelsrtcontrole_status == -1)
|
|
{
|
|
var aanmaakyear = ins_deel_aanmaak.getFullYear();
|
|
minyear = Math.max(minyear, aanmaakyear);
|
|
}
|
|
else if (ins_deelsrtcontrole_status == 5 || ins_deelsrtcontrole_status == 6)
|
|
{
|
|
var lastinsdate = new Date(ins_deelsrtcontrole_datum_max);
|
|
var lastinsyear = lastinsdate.getFullYear();
|
|
minyear = Math.max(minyear, lastinsyear);
|
|
}
|
|
else // ins_deelsrtcontrole_status == 2
|
|
continue;
|
|
|
|
savemode = "P"; // moet nog ingepland worden
|
|
}
|
|
var newyear = plandatum.getFullYear() + moveyears;
|
|
if (moveyears === 0 || newyear < minyear)
|
|
continue;
|
|
|
|
plandatum = new Date(newyear, 11, 31);
|
|
}
|
|
|
|
// Inplannen (dlsrtcont_key = -1).
|
|
// Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden.
|
|
if (savemode == "P" && !this_ins.canInspPlan) // Inplannen.
|
|
{ // Ik heb geen Plan (inplannen) rechten of er was al een planrecord.
|
|
if (ins_deelsrtcontrole_status == 0 && !multi)
|
|
savemode = "E"
|
|
else
|
|
continue;
|
|
}
|
|
|
|
if (savemode == "C") // Afmelden/Afronden.
|
|
{ // Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor dit object en het objectsoort?
|
|
// Voor niet multi is dit al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd.
|
|
var deelsrtcontrole_midnighttime = deelsrtcontrole_datum.midnight().getTime();
|
|
var deelsrtcontrole_hourtime = deelsrtcontrole_datum; // deelsrtcontrole_datum moet niet worden aangepast door setMinutes(0,0,0).
|
|
var deelsrtcontrole_hourtime = new Date(new Date(parseInt(deelsrtcontrole_hourtime.getTime())).setMinutes(0,0,0)).getTime();
|
|
// Controle of er op de inspectiedatum of op het inspectieuur al inspecties zijn geweest
|
|
// TODO: Wat te doen met extra inspecties. En per week/maand/jaar enz.
|
|
if ((eenheid > 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus.
|
|
(deelsrtcontrole_midnighttime == new Date(ins_deelsrtcontrole_datum_max).midnight().getTime()))
|
|
{ // Op dezelfde dag mag niet. Overslaan.
|
|
continue;
|
|
}
|
|
else if ((eenheid == 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus.
|
|
(deelsrtcontrole_hourtime == new Date(new Date(ins_deelsrtcontrole_datum_max).setMinutes(0,0,0)).getTime()))
|
|
{ // In dezelfde minuut (tijdstip) mag niet. Overslaan.
|
|
continue;
|
|
}
|
|
else if (new Date(deelsrtcontrole_datum.setSeconds(0, 0)).getTime() == new Date(new Date(ins_deelsrtcontrole_datum_max)).getTime() &&
|
|
ins_srtcontrole_mode == 1)
|
|
{ // Een inspectie doen op dezelfde datumtijd (controledatum hetzelfde) mag niet omdat je daarna dan niet meer de volgende inspectie kunt doen.
|
|
// De geplande _org tijd is dan hetzelfde als de laatste inspectie omdat de volgende inspectie dan niet opgeschoven is.
|
|
// Inspecties op dezelfde datumtijd moeten dus afgevangen worden.
|
|
// Dit kan alleen voorkomen in de interval mode.
|
|
continue;
|
|
}
|
|
|
|
if (!this_ins.canInspClose && !this_ins.canInspFinish)
|
|
{ // Ik heb geen Close (gereedmelden/afronden) rechten of laatste inspectie is niet verwerkt (dan moet ins_inspect_finish.asp aangeroepen worden). Overslaan.
|
|
continue;
|
|
}
|
|
else if (ins_deelsrtcontrole_status >= 0 && ins_deelsrtcontrole_status != 6)
|
|
dlsrtcont_key = ins_deelsrtcontrole_key;
|
|
}
|
|
|
|
if (savemode == "E") // Wijzigen.
|
|
{ // Dit is al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd.
|
|
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)
|
|
{
|
|
// 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"
|
|
+ " , isc.ins_srtcontrole_mode"
|
|
+ " 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
|
|
+ " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn.
|
|
+ " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn.
|
|
+ " GROUP BY isc.ins_srtcontrole_mode"
|
|
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
|
|
+ " , isc.ins_srtcontrole_eenheid";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof && oRs("lastinspectdatum").Value != null)
|
|
{
|
|
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;
|
|
mode = oRs("ins_srtcontrole_mode").Value;
|
|
if (mode == 0)
|
|
// Momentmode.
|
|
minDate = dmj_eenheid == 1? new Date(dag_na_lastinspectdatum.midnight()) : lastinspectdatum;
|
|
else
|
|
// Intervalmode.
|
|
minDate = lastinspectdatum;
|
|
}
|
|
else
|
|
minDate = aanmaakdatum;
|
|
|
|
// Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly).
|
|
sql = "SELECT MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum)) firstinspectdatum"
|
|
+ " , MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum) - 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"
|
|
+ " , isc.ins_srtcontrole_mode"
|
|
+ " 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
|
|
+ " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn.
|
|
+ " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn.
|
|
+ " 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;
|
|
mode = oRs("ins_srtcontrole_mode").Value;
|
|
if (mode == 0)
|
|
// Momentmode.
|
|
maxDate = dmj_eenheid == 1? new Date(dag_voor_firstinspectdatum.setHours(23,59,59,99)) : firstinspectdatum;
|
|
else
|
|
// Intervalmode.
|
|
maxDate = firstinspectdatum;
|
|
}
|
|
//else //maxDate = new Date();
|
|
oRs.Close();
|
|
|
|
// Huidige inspectie moet tussen voorgaande en volgende inspectie inliggen.
|
|
if (deelsrtcontrole_datum.getTime() <= minDate.getTime() || deelsrtcontrole_datum.getTime() >= maxDate.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, scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1),
|
|
inspectiemode: ins_srtcontrole_mode, inspectiestatus: ins_deelsrtcontrole_status, ins_deel_aanmaak: ins_deel_aanmaak,
|
|
disc_oms: disc_oms});
|
|
tobehandled++;
|
|
}
|
|
|
|
if (tobehandled == 0 && silent)
|
|
{
|
|
Response.Clear();
|
|
Response.Write(JSON.stringify({ success: false, savemode: savemode, warning: "" }));
|
|
Response.End();
|
|
}
|
|
else
|
|
user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet
|
|
|
|
function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent, pdelete)
|
|
{
|
|
// HIER WORDEN DE SAVEFLEXKENMERKEN GEREGELD
|
|
if (pdelete)
|
|
currentKenmerkenSQL = "SELECT 1 FROM DUAL WHERE 1 = 0"; // Geen flexkenmerken opslaan en alle waarden verwijderen.
|
|
else
|
|
currentKenmerkenSQL = " SELECT kd.ins_kenmerk_key"
|
|
+ " , kd.ins_kmdeelsrtcontr_waarde"
|
|
+ " FROM ins_kmdeelsrtcontr kd"
|
|
+ " , ins_kenmerk k"
|
|
+ " WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key"
|
|
+ " AND kd.ins_kmdeelsrtcontr_verwijder IS NULL"
|
|
+ " AND kd.ins_deelsrtcontrole_key = " + pdlsrtcont_key;
|
|
|
|
var ftrack = saveFlexKenmerken( pdlsrtcont_key
|
|
, { kenmerkTable: "ins_kmdeelsrtcontr"
|
|
, kenmerkParentKey : "ins_deelsrtcontrole_key"
|
|
, kenmerkWaarde: "ins_kmdeelsrtcontr_waarde"
|
|
, kenmerkKey: "ins_kenmerk_key"
|
|
, currentKenmerkenSQL: currentKenmerkenSQL
|
|
, requestQF: Request.Form
|
|
, isNew: !pinsPresent
|
|
, flexPath: "INS/I"
|
|
, module: "INS"
|
|
}
|
|
);
|
|
return ftrack;
|
|
}
|
|
|
|
|
|
if (savemode == "P")
|
|
{ // Inplannen inspectie. Er is nog geen inspectierecord aanwezig.
|
|
var result = { success: true, plandatum: plandatum, savemode: savemode, warning: "" };
|
|
|
|
if (ingesloten.length == 1)
|
|
{ // Vindt het ins_srtcontrole_type.
|
|
var sql = "SELECT ctr_disc_params_controle_type"
|
|
+ " FROM ins_srtcontrole isc,"
|
|
+ " ctr_disc_params cdp"
|
|
+ " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key
|
|
+ " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key";
|
|
var oRs = Oracle.Execute(sql);
|
|
result.srtcontrole_type = oRs("ctr_disc_params_controle_type").Value;
|
|
|
|
oRs.Close();
|
|
}
|
|
|
|
for (var i = 0; i < ingesloten.length; i++)
|
|
{ // Zetten van de status en afhandelen van de tracking van het starten.
|
|
// Eerst maar eens een inspectie record aanmaken.
|
|
// Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen?
|
|
var sql = "SELECT ins_deelsrtcontrole_datum"
|
|
+ " FROM ins_deelsrtcontrole idsc"
|
|
+ " WHERE idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
|
|
+ " AND idsc.ins_deel_key = " + ingesloten[i].ins_key
|
|
+ " AND idsc.ins_scenario_key = " + ingesloten[i].scen_key
|
|
+ " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL";
|
|
var oRs = Oracle.Execute(sql);
|
|
var nextdate = null;
|
|
if (!oRs.eof)
|
|
{ // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd.
|
|
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key
|
|
+ ", " + ingesloten[i].srtcont_key
|
|
+ ", " + (mjob? ingesloten[i].scen_key : "1")
|
|
+ ", 1) nextdate FROM DUAL"
|
|
oRsN = Oracle.Execute(sql);
|
|
nextdate = new Date(oRsN("nextdate").Value);
|
|
oRsN.Close();
|
|
}
|
|
oRs.Close();
|
|
//else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld.
|
|
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (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_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 },
|
|
{dbs: "ins_deelsrtcontrole_status", typ: "key", val: 0},
|
|
{dbs: "prs_perslid_key", typ: "key", val: user_key},
|
|
{dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum},
|
|
{dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate}
|
|
];
|
|
|
|
if (mjob && ingesloten[i].scen_key > 1)
|
|
fields.push({dbs: "ins_scenario_key", typ: "key", val: ingesloten[i].scen_key});
|
|
|
|
var insIns = buildInsert("ins_deelsrtcontrole", fields);
|
|
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
|
|
var err = Oracle.Execute(insIns.sql, true);
|
|
if (ingesloten.length == 1)
|
|
result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key;
|
|
|
|
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, 0); // Gepland(0).
|
|
}
|
|
}
|
|
else if (savemode == "C")
|
|
{ // Afmelden inspectie.
|
|
var result = { success: true, deelsrtcontrole_datum: deelsrtcontrole_datum, savemode: savemode, warning: "" };
|
|
|
|
for (var i = 0; i < ingesloten.length; i++)
|
|
{
|
|
// Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2.
|
|
var isNew = ingesloten[i].dlsrtcont_key < 0 || ingesloten[i].inspectiestatus < 5;
|
|
// Is er een inspectie (ins_deelsrtcontrole) record aanwezig (ins_deelsrtcontrole_key is NULL).
|
|
var insPresent = ingesloten[i].dlsrtcont_key > 0;
|
|
|
|
if (isNew) // Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2.
|
|
{ // Bepaal de eerste niet successvolle controle methode. Is deze er niet dan kies maar de eerste successvolle controlemode.
|
|
sql = "SELECT ins_controlemode_key"
|
|
+ " , 1"
|
|
+ " FROM ins_controlemode"
|
|
+ " WHERE ins_controlemode_success IS NULL"
|
|
+ " UNION "
|
|
+ "SELECT ins_controlemode_key"
|
|
+ " , 2"
|
|
+ " FROM ins_controlemode"
|
|
+ " WHERE ins_controlemode_success = 1"
|
|
+ " ORDER BY 2, 1";
|
|
oRs = Oracle.Execute(sql);
|
|
var controlemode = oRs("ins_controlemode_key").Value;
|
|
oRs.Close();
|
|
|
|
// Bepaal eenheid van de soort controle.
|
|
sql = "SELECT COALESCE((SELECT xcp.ins_srtcontroledl_xcp_eenheid"
|
|
+ " FROM ins_srtcontroledl_xcp xcp"
|
|
+ " WHERE ins_deel_key = " + ingesloten[i].ins_key
|
|
+ " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key
|
|
+ " AND ins_scenario_key = 1"
|
|
+ " )"
|
|
+ " , (SELECT isc.ins_srtcontrole_eenheid"
|
|
+ " FROM ins_srtcontrole isc"
|
|
+ " WHERE ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")) eenheid"
|
|
+ " FROM DUAL";
|
|
oRs = Oracle.Execute(sql);
|
|
var eenheid = oRs("eenheid").Value;
|
|
oRs.Close();
|
|
|
|
var firstinspect = false;
|
|
// Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen?
|
|
sql = "SELECT ins_deelsrtcontrole_datum"
|
|
+ " FROM ins_deelsrtcontrole idsc"
|
|
+ " WHERE idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
|
|
+ " AND idsc.ins_deel_key = " + ingesloten[i].ins_key
|
|
+ " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"
|
|
+ " AND idsc.ins_scenario_key = 1"; // Afmelden inspectie.
|
|
oRs = Oracle.Execute(sql);
|
|
if (oRs.eof)
|
|
{ // Er zijn nog geen inspecties geweest voor dit object.
|
|
// Volgende inspectiedatum kun je niet berekenen
|
|
// De eerstvolgende inspectiedatum gelijk aan de controledatum stellen.
|
|
firstinspect = true;
|
|
nextdate = new Date(deelsrtcontrole_datum);
|
|
oRs.Close();
|
|
}
|
|
else
|
|
{ // Bereken de volgende inspectiedatum.
|
|
// Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden.
|
|
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL"
|
|
oRs = Oracle.Execute(sql);
|
|
nextdate = new Date(oRs("nextdate").Value);
|
|
oRs.Close();
|
|
}
|
|
|
|
var isPlanned = false;
|
|
if (insPresent)
|
|
{
|
|
// 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);
|
|
|
|
if (!oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null)
|
|
{
|
|
// De plandatum is de volgende inspectiedatum
|
|
// Als het de allereerste inspectie is dan is er nooit sprake van isPlanned.
|
|
isPlanned = !firstinspect;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
// Truncate datums op de dag of het uur afhankelijk van de eenheid.
|
|
if (eenheid == 0)
|
|
{
|
|
var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
|
|
var deelsrtcontrole_datum_trunc = new Date(new Date(deelsrtcontrole_datum).setMinutes(0, 0, 0));
|
|
}
|
|
else
|
|
{
|
|
var nextdate_trunc = new Date(nextdate.midnight());
|
|
var deelsrtcontrole_datum_trunc = new Date(deelsrtcontrole_datum.midnight());
|
|
}
|
|
|
|
// De periodieke taken direct afronden indien mogelijk.
|
|
var hasActionFinish = false;
|
|
if (finish)
|
|
{ // Wel even checken of de actie "Afronden" is ingeschakeld voor de periodiek taak.
|
|
ingesloten[i].srtcont_key
|
|
sql = "SELECT ins_srtcontrole_options"
|
|
+ " FROM ins_srtcontrole"
|
|
+ " WHERE ins_srtcontrole_key = " + ingesloten[i].srtcont_key;
|
|
oRs = Oracle.Execute(sql);
|
|
hasActionFinish = (oRs("ins_srtcontrole_options").Value & 8) == 8;
|
|
}
|
|
|
|
// Afhankelijk van de modus de inspectie(s) opslaan.
|
|
if (ingesloten[i].inspectiemode == 0)
|
|
{ // Moment modus
|
|
// De laatste datum die opgeslagen wordt is uiterlijk de opgegeven controledatum
|
|
// De trunc waarde van de controle datum gebruiken.
|
|
var firstone = true;
|
|
while (isPlanned || (!isPlanned && nextdate_trunc <= deelsrtcontrole_datum_trunc))
|
|
{
|
|
var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" },
|
|
{ dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan.
|
|
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde.
|
|
];
|
|
if (!insPresent)
|
|
{ // Er is nog geen inspectie record aangemaakt. De volgende velden dienen dan nog ingevuld te worden.
|
|
fields.push({ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key });
|
|
fields.push({ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key });
|
|
fields.push({ dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" });
|
|
}
|
|
|
|
// Kan moeilijk bepalen of dit de laatste inspectie is in de reeks omdat huidige inspectie nog niet opgeslagen is (Veel uitrekenwerk).
|
|
// Gemakkelijker is om altijd de niet succesvolle controlemode op te slaan.
|
|
// Na afloop van de while lus kan dan de controlemode van de laatst opgeslagen inspectie goed gezet worden.
|
|
fields.push({ dbs: "ins_controlemode_key", typ: "key", val: controlemode, track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } ); // Controlemode die niet succesvol is
|
|
|
|
if (insPresent && firstone) // Alleen voor de alle eerste inspectie kan een inspectie record aanwezig zijn.
|
|
{ // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2).
|
|
// Plandatum kan gevuld blijven met de huidige waarde.
|
|
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields);
|
|
var err = Oracle.Execute(insUpd.sql, true);
|
|
}
|
|
else
|
|
{ // Er is nog geen inspectie record aangemaakt.
|
|
if (!firstone)
|
|
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 6); // Vorige inspectie record Afronden(6).
|
|
fields.push({dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5)});
|
|
var insIns = buildInsert("ins_deelsrtcontrole", fields);
|
|
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
|
|
var err = Oracle.Execute(insIns.sql, true);
|
|
}
|
|
result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key;
|
|
|
|
if (err.friendlyMsg)
|
|
{
|
|
result.warning = err.friendlyMsg;
|
|
result.success = false;
|
|
break;
|
|
}
|
|
|
|
// Nu nog de status zetten, tracking genereren en notificaties sturen.
|
|
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, (finish && hasActionFinish? 6: 5)); // Afgemeld(5), History/Verwerkt(6).
|
|
|
|
isPlanned = false;
|
|
insPresent = false; // Als er terug in de while lus wordt gesprongen is er geen inspectie record aanwezig.
|
|
firstone = false;
|
|
|
|
// Bereken de volgende inspectiedatum.
|
|
// De functie ins.nextcyclusdate levert de volgende inspectie datum met tijd op onafhankelijk van de eenheid.
|
|
// Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden.
|
|
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL"
|
|
var oRs = Oracle.Execute(sql);
|
|
nextdate = new Date(oRs("nextdate").Value);
|
|
oRs.Close();
|
|
|
|
if (eenheid == 0)
|
|
nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
|
|
else
|
|
nextdate_trunc = new Date(nextdate.midnight());
|
|
}
|
|
if (!firstone)
|
|
{ // De controlemode en de opmerking van de laatste inspectie nog even op de aangegeven waarde zetten (i.p.v. niet succes waarde (controlemode) en lege waarde (opmerking)).
|
|
var fields = [ { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" },
|
|
{ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } ];
|
|
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + result.deelsrtcontrole_key, fields);
|
|
var err = Oracle.Execute(insUpd.sql, true);
|
|
}
|
|
}
|
|
else
|
|
{ // Interval modus
|
|
var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 },
|
|
{ dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" },
|
|
{ dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan.
|
|
{ dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" },
|
|
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde.
|
|
];
|
|
if (!insPresent)
|
|
{ // Er is nog geen inspectie record aangemaakt. De volgende velden dienen dan nog ingevuld te worden.
|
|
fields.push({ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key });
|
|
fields.push({ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key });
|
|
fields.push({ dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" });
|
|
fields.push({ dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5) });
|
|
}
|
|
|
|
if (insPresent)
|
|
{ // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2)
|
|
// Plandatum kan gevuld blijven met de huidige waarde.
|
|
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields);
|
|
var err = Oracle.Execute(insUpd.sql, true);
|
|
}
|
|
else
|
|
{ // Er is nog geen inspectie record aangemaakt.
|
|
var insIns = buildInsert("ins_deelsrtcontrole", fields);
|
|
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
|
|
var err = Oracle.Execute(insIns.sql, true);
|
|
}
|
|
result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key;
|
|
|
|
if (err.friendlyMsg)
|
|
{
|
|
result.warning = err.friendlyMsg;
|
|
result.success = false;
|
|
break;
|
|
}
|
|
|
|
// Nu nog de status zetten, tracking genereren en notificaties sturen.
|
|
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, (finish && hasActionFinish? 6: 5)); // Afgemeld(5), History/Verwerkt(6).
|
|
|
|
isPlanned = false;
|
|
}
|
|
}
|
|
else
|
|
{ // uitgevoerde inspectie.
|
|
// Datum kan niet meer aangepast worden.
|
|
var fields = [ { dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
|
|
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
|
|
{ dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" },
|
|
{ dbs: "prs_perslid_key", typ: "key", val: user_key }
|
|
];
|
|
|
|
if (!multi) // Bij multi de opmerking niet opslaan. De opmerking kon ook niet ingevuld worden.
|
|
fields.push({ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 });
|
|
|
|
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields);
|
|
var err = Oracle.Execute(insUpd.sql, true);
|
|
|
|
if (err.friendlyMsg)
|
|
{
|
|
result.warning = err.friendlyMsg;
|
|
result.success = false;
|
|
}
|
|
}
|
|
|
|
var flextrack = [];
|
|
// Alleen bij multi worden geen kenmerken opgeslagen. Verder altijd aangeroepen om wijzigingen op te slaan.
|
|
if (!multi)
|
|
flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent);
|
|
|
|
if (insPresent && ((insUpd && insUpd.trackarray.length) || flextrack.length))
|
|
ins.trackinspectupdate(ingesloten[i].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n"));
|
|
}
|
|
}
|
|
else if (savemode == "E")
|
|
{ // Wijzigen inspectie (Edit). Update van de gegevens (plandatum, opmerking en flexkenmerken).
|
|
var result = { success: true, plandatum: plandatum, deelsrtcontrole_key: ingesloten[0].dlsrtcont_key, savemode: savemode, warning: "" };
|
|
var isScenario = ingesloten[0].scen_key > 1;
|
|
|
|
var mjobdelete = false;
|
|
// Kunnen we het plan record verwijderen?
|
|
// Het plan record van een scenario mogen we nooit verwijderen. Daar dan de plandatum leeg maken.
|
|
if (mjob)
|
|
{ // Nieuwe plandatum vanuit het mjob scherm ontvangen.
|
|
// Indien het jaar van de plandatum hetzelfde is als het jaar van de orginele datum, kan het plan record verwijderd worden.
|
|
|
|
// Is het een mjob discipline en is de eenheid jaarlijks?
|
|
sql = "SELECT cdp.ctr_disc_params_ismjob"
|
|
+ " , cdp.ctr_disc_params_controle_type"
|
|
+ " , isc.ins_srtcontrole_eenheid"
|
|
+ " FROM ins_srtcontrole isc"
|
|
+ " , ctr_disc_params cdp"
|
|
+ " WHERE isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"
|
|
+ " AND isc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key;
|
|
oRs = Oracle.Execute(sql);
|
|
var ismjob = !oRs.eof && oRs("ctr_disc_params_ismjob").Value == 1;
|
|
var ctrcontroletype = oRs("ctr_disc_params_controle_type").Value; // Controle(1), Vervanging(2) en Certificering(3).
|
|
var isjaarlijks = oRs("ins_srtcontrole_eenheid").Value == 4;
|
|
oRs.Close();
|
|
|
|
// Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen?
|
|
var sql = "SELECT ins_deelsrtcontrole_datum"
|
|
+ " FROM ins_deelsrtcontrole idsc"
|
|
+ " WHERE idsc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key
|
|
+ " AND idsc.ins_deel_key = " + ingesloten[0].ins_key
|
|
+ " AND idsc.ins_scenario_key = " + ingesloten[0].scen_key
|
|
+ " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"; // Er is geinspecteerd.
|
|
var oRs = Oracle.Execute(sql);
|
|
var nextdate = null;
|
|
if (!oRs.eof)
|
|
{ // Bereken de volgende orginele inspectiedatum (nextdate).
|
|
sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key
|
|
+ ", " + ingesloten[0].srtcont_key
|
|
+ ", " + ingesloten[0].scen_key
|
|
+ ", 1) nextdate FROM DUAL"
|
|
var oRsN = Oracle.Execute(sql);
|
|
nextdate = new Date(oRsN("nextdate").Value);
|
|
oRsN.Close();
|
|
|
|
// Is jaar plandatum gelijk aan jaar orginele datum?
|
|
var plandatum_jaar = plandatum.getFullYear();
|
|
var nextdate_jaar = nextdate.getFullYear();
|
|
|
|
if (ismjob && isjaarlijks && plandatum_jaar == nextdate_jaar)
|
|
{ // Verwijder het inspectie record en ga verder met het volgende object.
|
|
mjobdelete = true;
|
|
}
|
|
}
|
|
//else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld.
|
|
// Volgende inspectiedatum kun je niet berekenen met de functie ins.nextcyclusdate() en is dus onbekend (leeg)
|
|
else
|
|
{ // Vindt het ins_srtcontrole_type.
|
|
var sql = "SELECT ctr_disc_params_controle_type"
|
|
+ " FROM ins_srtcontrole isc,"
|
|
+ " ctr_disc_params cdp"
|
|
+ " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key
|
|
+ " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key";
|
|
var oRsN = Oracle.Execute(sql);
|
|
var srtcontrole_type = oRsN("ctr_disc_params_controle_type").Value;
|
|
|
|
var plandatum_jaar = plandatum.getFullYear();
|
|
// De inspectiedatums voor taken die nog nooit een inspectie hebben gehad is voor een Vervanging(2) of Certificering(3)
|
|
// n periodes verder dan de registratie/aanmaak datum van het object.
|
|
// Voor een controle is er geen inspectiedatum en wordt er dan altijd "Eerste controle" in beeld getoond.
|
|
// Ofwel een controle inspectie kun je direct vanaf het aanmaken van het object doen.
|
|
// Voor controles(1):
|
|
// - Als de planning in het mjb_freeze_year jaar is dan kan het inspectierecord verwijderd worden.
|
|
// Voor Vervanging(2) en Certificering(3):
|
|
// - Valt de laatste niet gedane inspectiedatum tussen of in het mjb_start_year en het mjb_freeze_year,
|
|
// dan is mjb_freeze_year het inspectie jaar.
|
|
// Als de planning dan in het inspectie jaar (mjb_freeze_year) is, dan kan het inspectierecord verwijderd worden.
|
|
// - Valt de laatste niet gedane inspectiedatum NIET tussen of in het mjb_start_year en het mjb_freeze_year,
|
|
// dan is de laatste niet gedane inspectiedatum + periode het inspectie jaar.
|
|
// Als de planning dan in hetzelfde jaar als het inspectie jaar (laatste + periode) is, dan kan het inspectierecord verwijderd worden.
|
|
if (ismjob && isjaarlijks)
|
|
{
|
|
if (srtcontrole_type == 1 && plandatum_jaar == S("mjb_freeze_year")) // Controles(1).
|
|
mjobdelete = true;
|
|
else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3).
|
|
{ // Bereken de volgende inspectiedatum.
|
|
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet 1 (of null) genomen worden.
|
|
sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key
|
|
+ " , " + ingesloten[0].srtcont_key
|
|
+ " , " + ingesloten[0].scen_key
|
|
+ " , 0) nextdate" // 1-ste vandaag of in de toekomst(0).
|
|
+ " , xcp.ins_srtcontrole_periode"
|
|
+ " FROM ins_v_defined_inspect_xcp xcp"
|
|
+ " WHERE xcp.ins_deel_key = " + ingesloten[0].ins_key
|
|
+ " AND xcp.ins_srtcontrole_key = " + ingesloten[0].srtcont_key
|
|
+ " AND xcp.ins_scenario_key = " + ingesloten[0].scen_key
|
|
oRsN = Oracle.Execute(sql);
|
|
var nextdate = new Date(oRsN("nextdate").Value);
|
|
var nextdate_jaar = nextdate.getFullYear();
|
|
var periode = oRsN("ins_srtcontrole_periode").Value
|
|
var nextdate_jaar_before = nextdate_jaar - periode
|
|
|
|
// Als nextdate_jaar_before of nextdate_jaar binnen mjb_start_year en mjb_freeze_year valt en de planning in het mjb_freeze_year jaar is
|
|
// of
|
|
// als nextdate_jaar_before voor het mjb_start_year jaar valt en nextdate_jaar na het mjb_freeze_year jaar
|
|
// dan kan het inspectie record verwijderd worden.
|
|
if ((((nextdate_jaar_before >= S("mjb_start_year") && nextdate_jaar_before <= S("mjb_freeze_year")) ||
|
|
(nextdate_jaar >= S("mjb_start_year") && nextdate_jaar <= S("mjb_freeze_year"))) &&
|
|
plandatum_jaar == S("mjb_freeze_year")) ||
|
|
((nextdate_jaar_before < S("mjb_start_year") && nextdate_jaar > S("mjb_freeze_year")) &&
|
|
plandatum_jaar == nextdate_jaar)
|
|
)
|
|
mjobdelete = true;
|
|
}
|
|
}
|
|
oRsN.Close();
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
if (mjobdelete && !isScenario)
|
|
{ // Verwijder het inspectie record.
|
|
var sql = "DELETE FROM ins_deelsrtcontrole"
|
|
+ " WHERE ins_deel_key = " + ingesloten[0].ins_key
|
|
+ " AND ins_srtcontrole_key = " + ingesloten[0].srtcont_key
|
|
+ " AND ins_deelsrtcontrole_status = 0"
|
|
+ " AND ins_scenario_key = " + ingesloten[0].scen_key;
|
|
var err = Oracle.Execute(sql, true);
|
|
}
|
|
else
|
|
{
|
|
var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }
|
|
];
|
|
|
|
if (isScenario && mjobdelete)
|
|
fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: "", track: L("lcl_opdr_plandate") } );
|
|
else
|
|
fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum, track: L("lcl_opdr_plandate") } );
|
|
|
|
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" } );
|
|
|
|
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[0].dlsrtcont_key, fields);
|
|
var err = Oracle.Execute(insUpd.sql, true);
|
|
}
|
|
|
|
if (err.friendlyMsg)
|
|
{
|
|
result.warning = err.friendlyMsg;
|
|
result.success = false;
|
|
}
|
|
|
|
var flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent, mjobdelete);
|
|
|
|
if ((!mjobdelete || (isScenario && mjobdelete)) && (insUpd.trackarray.length || flextrack.length))
|
|
ins.trackinspectupdate(ingesloten[0].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n"));
|
|
}
|
|
else if (savemode == "D")
|
|
{
|
|
var result = { success: true, savemode: savemode, warning: "" };
|
|
var sql = "";
|
|
var err;
|
|
for (var i = 0; i < ingesloten.length; i++)
|
|
{
|
|
sql = "DELETE FROM ins_deelsrtcontrole"
|
|
+ " WHERE ins_deel_key = " + ingesloten[i].ins_key
|
|
+ " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key
|
|
+ " AND ins_deelsrtcontrole_status = 0"
|
|
+ " AND ins_scenario_key = " + ingesloten[i].scen_key;
|
|
|
|
err = Oracle.Execute(sql, true);
|
|
|
|
if (err.friendlyMsg && result.success !== false)
|
|
{
|
|
result.warning = err.friendlyMsg;
|
|
result.success = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
Response.Write(JSON.stringify(result));
|
|
Response.End();
|
|
%> |