FSN#33999: Realisatie TMJ module voor TobiasAX obv Inspectiemodule.

svn path=/Website/trunk/; revision=30490
This commit is contained in:
Maykel Geerdink
2016-09-01 09:43:23 +00:00
parent 8b5a33f3dd
commit 52207d8d17
4 changed files with 158 additions and 71 deletions

View File

@@ -145,17 +145,11 @@ var authparams = user.checkAutorisation("WEB_INSUSE");
// Als de controlesoort niet meer geldig is dan kunnen er geen inspecties meer komen.
// Een object kan meerdere controlesoorten hebben. Alleen die controlesoorten laten zien die nog geldig zijn.
var lastinspect = "(SELECT GREATEST(COALESCE (idsc.ins_deelsrtcontrole_plandatum"
+ " , CASE di.ins_srtcontrole_mode"
+ " WHEN 0"
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus. Uitgaan van eigenlijke/orginele inspectiedatum.
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus. Uitgaan van werkelijke inspectiedatum.
+ " END)"
+ " , CASE di.ins_srtcontrole_mode"
+ " WHEN 0"
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus. Uitgaan van eigenlijke/orginele inspectiedatum.
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus. Uitgaan van werkelijke inspectiedatum.
+ " END) ins_deelsrtcontrole_datum"
var lastinspect = "(SELECT CASE di.ins_srtcontrole_mode"
+ " WHEN 0"
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus. Uitgaan van eigenlijke/orginele inspectiedatum.
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus. Uitgaan van werkelijke inspectiedatum.
+ " END ins_deelsrtcontrole_datum"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (5, 6)"

View File

@@ -36,6 +36,7 @@ var srtcont_key_arr = getFParamIntArray("srtcont_key_arr", []); // Inspectiesoor
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));
@@ -170,16 +171,19 @@ for (var i = 0; i < ins_key_arr.length; i++)
user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet
function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent)
function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent, pdelete)
{
// HIER WORDEN DE SAVEFLEXKENMERKEN GEREGELD
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;
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"
@@ -198,7 +202,7 @@ function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent)
if (savemode == "P")
{ // Inplannen inspectie.
{ // Inplannen inspectie. Er is nog geen inspectierecord aanwezig.
var result = { success: true, plandatum: plandatum, savemode: savemode, warning: "" };
if (ingesloten.length == 1)
@@ -208,6 +212,7 @@ if (savemode == "P")
+ " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key;
var oRs = Oracle.Execute(sql);
result.srtcontrole_type = oRs("ins_srtcontrole_type").Value;
oRs.Close();
}
@@ -217,7 +222,7 @@ if (savemode == "P")
// Is er een inspectie (ins_deelsrtcontrole) record aanwezig (ins_deelsrtcontrole_key is NULL).
var insPresent = ingesloten[i].dlsrtcont_key > 0;
// Eerst maar eens aanmaken een inspectie record aanmaken.
// 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"
@@ -227,11 +232,10 @@ if (savemode == "P")
var oRs = Oracle.Execute(sql);
var nextdate = null;
if (!oRs.eof)
{ // Bereken de volgende inspectiedatum.
{ // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd.
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();
}
//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)
@@ -521,15 +525,70 @@ 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 fields = [ { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", frm: "plandatum", track: L("lcl_opdr_plandate") },
{ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 2000 }
];
var mjobdelete = false;
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.
if (canMsuEdit)
fields.push({ dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" });
// Is het een mjob discipline en is de eenheid jaarlijks?
sql = "SELECT cdp.ctr_disc_params_ismjob"
+ " , 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 isjaarlijks = oRs("ins_srtcontrole_eenheid").Value == 4;
oRs.Close();
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[0].dlsrtcont_key, fields);
var err = Oracle.Execute(insUpd.sql, true);
// 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"
+ " , MAX(ins_deelsrtcontrole_datum_org) ins_deelsrtcontrole_datum_org"
+ " 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_deelsrtcontrole_datum IS NOT NULL"
+ " GROUP BY ins_deelsrtcontrole_datum";
var oRs = Oracle.Execute(sql);
var nextdate = null;
if (!oRs.eof)
{ // Er is een inspectie geweest. In de laatste inspectie staat de volgende orginele inspectiedatum (nextdate). Voor een eerste inspectie is dat de inspectiedatum.
nextdate = new Date(oRs("ins_deelsrtcontrole_datum_org").Value);
// Is jaar plandatum gelijk aan jaar orginele datum?
var plandatum_jaar = plandatum.getFullYear();
var nexdate_jaar = nextdate.getFullYear();
if (ismjob && isjaarlijks && plandatum_jaar == nexdate_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 en is dus onbekend (leeg)
}
if (mjobdelete)
{ // 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";
var err = Oracle.Execute(sql, true);
}
else
{
var fields = [ { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", frm: "plandatum", track: L("lcl_opdr_plandate") },
{ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 2000 }
];
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)
{
@@ -537,9 +596,9 @@ else if (savemode == "E")
result.success = false;
}
var flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent);
var flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent, mjobdelete);
if (insUpd.trackarray.length || flextrack.length)
if (!mjobdelete && (insUpd.trackarray.length || flextrack.length))
ins.trackinspectupdate(ingesloten[0].dlsrtcont_key, L("lcl_ins_controle_is_upd") + "\n" + insUpd.trackarray.concat(flextrack).join("\n"));
}

View File

@@ -35,7 +35,7 @@ function insSave(rowArray)
{
var data = $("#inslist").serialize();
protectRequest.dataToken(data);
$.post("ins_save_use.asp",
$.post("../ins/ins_save_use.asp",
data,
FcltCallbackRefresh,
"json");
@@ -240,7 +240,7 @@ function insStart(rowArray, isMulti)
srtcont_key_arr: srtcontrolekeyArray.join(",")
};
protectRequest.dataToken(data);
$.post( "ins_inspect_start.asp"
$.post( "../ins/ins_inspect_start.asp"
, data
, FcltCallbackRefresh
, "json"
@@ -285,7 +285,7 @@ function insFinish(rowArray, isMulti)
dlsrtcont_key_arr: deelsrtcontrkeyArray.join(",")
};
protectRequest.dataToken(data);
$.post( "ins_inspect_finish.asp"
$.post( "../ins/ins_inspect_finish.asp"
, data
, FcltCallbackRefresh
, "json"

View File

@@ -15,9 +15,10 @@
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../ins/ins.inc" -->
<%
FCLTHeader.Requires({plugins: ["jQuery"],
js : ["jquery-ui.js"]}); // Voor slepen
js : ["jquery-ui.js", "../ins/ins_list.js"]}); // Voor slepen en acties.
var urole = getQParamSafe("urole", ""); // Indien niet meegegeven, veronderstel dan frontend gebruik
@@ -129,7 +130,7 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
ins_keys: ins_key,
srtcont_key_arr: srtcont_key,
plandatum: new Date(jaar, 11, 31).getTime(),
jaar: jaar
mjob: 1
};
protectRequest.dataToken(data);
$.post("../ins/ins_inspect_save.asp"
@@ -148,7 +149,7 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
var $th = $td.closest('table').find('th').eq($td.index()); // werkt omdat we geen colspan's hebben
var row = $td.closest('tr')[0];
var insData = eval("(" + row.getAttribute("ROWDATA") + ")");
moveplan(null, insData.ins, insData.taak, $th.text());
moveplan(null, insData.insKey, insData.insSrtControleKey, $th.text());
}
});
@@ -182,8 +183,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
mjbDeelKeyArray.push(rowdata.ins);
mjbSrtContrKeyArray.push(rowdata.taak);
mjbDeelKeyArray.push(rowdata.insKey);
mjbSrtContrKeyArray.push(rowdata.insSrtControleKey);
}
url = "../mjb/mjb_dragdropyear.asp";
@@ -458,25 +459,25 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
+ " AND d.alg_district_key = l.alg_district_key"
+ " AND dg.alg_gebouw_key = g.alg_gebouw_key";
var sql_cost = "SELECT alg_district_key"
+ " , alg_district_omschrijving"
+ " , alg_gebouw_omschrijving"
+ " , alg_gebouw_key"
+ " , ins_deel_omschrijving"
+ " , ins_discipline_omschrijving"
+ " , ins_srtgroep_omschrijving"
+ " , ins_srtdeel_omschrijving"
+ " , ins_srtcontrole_omschrijving"
+ " , ins_deel_key"
+ " , keyColumn"
+ " , ins_srtcontroledl_xcp_key"
+ " , ins_srtcontrole_key"
+ " , ins_srtcontrole_periode"
+ " , ins_srtcontrole_opmerking"
+ " , ins_srtcontrole_level"
+ " , vervaljaar"
+ " , vervangingsjaar"
+ " , afbouwtijd"
var sql_cost = "SELECT cv.alg_district_key"
+ " , cv.alg_district_omschrijving"
+ " , cv.alg_gebouw_omschrijving"
+ " , cv.alg_gebouw_key"
+ " , cv.ins_deel_omschrijving"
+ " , cv.ins_discipline_omschrijving"
+ " , cv.ins_srtgroep_omschrijving"
+ " , cv.ins_srtdeel_omschrijving"
+ " , cv.ins_srtcontrole_omschrijving"
+ " , cv.ins_deel_key"
+ " , cv.keyColumn"
+ " , cv.ins_srtcontroledl_xcp_key"
+ " , cv.ins_srtcontrole_key"
+ " , cv.ins_srtcontrole_periode"
+ " , cv.ins_srtcontrole_opmerking"
+ " , cv.ins_srtcontrole_level"
+ " , cv.vervaljaar"
+ " , cv.vervangingsjaar"
+ " , cv.afbouwtijd"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
@@ -486,15 +487,29 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
+ " THEN 1"
+ " ELSE 0"
+ " END isPlanned"
+ " , bedrag AS orgbedrag"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = cv.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = cv.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (2, 5)) IS NOT NULL"
+ " THEN 0"
+ " ELSE 1"
+ " END canBePlanned"
+ " , COALESCE((SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = cv.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = cv.ins_srtcontrole_key)"
+ " , -1) ins_deelsrtcontrole_key"
+ " , cv.bedrag AS orgbedrag"
// Als er een andere inspectie is met een lagere ins_srtcontrole_level
// in hetzelfde jaar dan springt ons bedrag op 0
+ " , CASE WHEN MIN(ins_srtcontrole_level) KEEP (DENSE_RANK FIRST ORDER BY ins_srtcontrole_level) "
+ " OVER (PARTITION BY ins_deel_key, vervangingsjaar) < ins_srtcontrole_level"
+ " , CASE WHEN MIN(cv.ins_srtcontrole_level) KEEP (DENSE_RANK FIRST ORDER BY cv.ins_srtcontrole_level) "
+ " OVER (PARTITION BY cv.ins_deel_key, cv.vervangingsjaar) < cv.ins_srtcontrole_level"
+ " OR"
+ " vervaljaar - COALESCE(afbouwtijd, 0) < vervangingsjaar"
+ " cv.vervaljaar - COALESCE(cv.afbouwtijd, 0) < cv.vervangingsjaar"
+ " THEN 0 "
+ " ELSE bedrag "
+ " ELSE cv.bedrag "
+ " END bedrag"
+ " FROM (" + sql_cost_verval + ") cv";
@@ -536,7 +551,7 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
function fnkeyFunction(oRs)
{
if (fulldetails)
return oRs("ins_deel_key").Value + "-" + oRs("ins_srtcontrole_key").Value;
return oRs("ins_deel_key").Value; // + "-" + oRs("ins_srtcontrole_key").Value;
else
return oRs("keyColumn").Value;
}
@@ -546,8 +561,9 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
var data = {};
if (fulldetails)
{
data.ins = oRs("ins_deel_key").Value;
data.taak = oRs("ins_srtcontrole_key").Value;
data.insKey = oRs("ins_deel_key").Value;
data.insSrtControleKey = oRs("ins_srtcontrole_key").Value;
data.insDeelSrtContrKey = oRs("ins_deelsrtcontrole_key").Value? oRs("ins_deelsrtcontrole_key").Value : -1;
}
return JSON.stringify(data);
@@ -567,6 +583,19 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
function fnrowActionEnabler(oRs)
{
var data = {};
//var eShowInsp = false;
var ePlan = false;
var eStart = false;
var eClose = false;
var eFinish = false;
var this_ins = ins.func_enabled_deel(oRs("ins_deel_key").Value,
{srtcont_key: oRs("ins_srtcontrole_key").Value,
deelsrtcont_key:oRs("ins_deelsrtcontrole_key").Value? oRs("ins_deelsrtcontrole_key").Value : -1});
ePlan = this_ins.canInspPlan;
eStart = this_ins.canInspStart;
eClose = this_ins.canInspClose;
eFinish = this_ins.canInspFinish;
var data = {ePlan: ePlan, eStart: eStart, eClose: eClose, eFinish: eFinish};
return data;
}
@@ -669,7 +698,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
doneclik[deel_key + ":" + srtcont_key] = 1;
// INSUSE read rechten heb je al nodig om dit overzicht te zien.
return "<span" + (hasWriteCTRUSE? " class='details draggable'" : "") + ">{0}</span>".format(safe.curr(v, true))
// Inspecties in de status gestart(2) of gereedgemeld(5) mogen niet drag en drop zijn. Planningsdatum is daarvan niet aan te passen.
return "<span" + (hasWriteCTRUSE? " class='" + (oRs("canBePlanned").Value == 1? "details draggable" : "") + "'" : "") + ">{0}</span>".format(safe.curr(v, true))
/* experimenteel inline schuiven
var fnprev = "moveplan(event, {0}, {1}, {2}-1)".format(deel_key, srtcont_key, jaar);
@@ -697,8 +727,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
else if (vervaljaar != null && jaar > vervaljaar)
return "mjbjaar mjbverval";
}
return "mjbjaar";
}
return "mjbjaar";
}
}
@@ -746,9 +776,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
else
var content = fnfnBedrag(String(jaren[j]));
rst.addColumn(new Column({caption: String(jaren[j]), datatype: "number",
tdClass: "mjbjaar",
content: content,
columnClass: fnfncolClass(String(jaren[j])),
columnClass: fnfncolClass(String(jaren[j])), // tdClass dan niet meer nodig.
total: true,
fnAmount: fnfnBedragNumber(String(jaren[j]))
}));
@@ -764,6 +793,11 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
if (fulldetails)
{
rst.addAction({ action: "mjb_dragdrop", caption: L("lcl_mjb_dragdrop"), multi: true, multiOnce: true, onlyMulti: true } );
rst.addAction({ action: "insPlan", caption: L("lcl_ins_schedule"), multi: true, multiOnce: true, enabler: "ePlan", onlyMulti: true });
rst.addAction({ action: "insStart", caption: L("lcl_ins_start"), multi: true, multiOnce: true, enabler: "eStart", onlyMulti: true });
rst.addAction({ action: "insClose", caption: L("lcl_ins_close") + "/" + L("lcl_ins_finish"), multi: true, multiOnce: true, enabler: "eClose", onlyMulti: true });
rst.addAction({ action: "insFinish", caption: L("lcl_ins_finish"), multi: true, multiOnce: true, enabler: "eFinish", onlyMulti: true });
}
var count = rst.processResultset();