diff --git a/APPL/INS/ins_inspect_list.asp b/APPL/INS/ins_inspect_list.asp index f0fdb761a0..4941799f99 100644 --- a/APPL/INS/ins_inspect_list.asp +++ b/APPL/INS/ins_inspect_list.asp @@ -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)" diff --git a/APPL/INS/ins_inspect_save.asp b/APPL/INS/ins_inspect_save.asp index 94fd000577..b2015be5b1 100644 --- a/APPL/INS/ins_inspect_save.asp +++ b/APPL/INS/ins_inspect_save.asp @@ -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")); } diff --git a/APPL/INS/ins_list.js b/APPL/INS/ins_list.js index 0ea42151a8..3101444136 100644 --- a/APPL/INS/ins_list.js +++ b/APPL/INS/ins_list.js @@ -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" diff --git a/APPL/MJB/mjb_search_list.asp b/APPL/MJB/mjb_search_list.asp index 13671e6325..5d1d6183df 100644 --- a/APPL/MJB/mjb_search_list.asp +++ b/APPL/MJB/mjb_search_list.asp @@ -15,9 +15,10 @@ + <% 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 "{0}".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 "{0}".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();