1055 lines
54 KiB
Plaintext
1055 lines
54 KiB
Plaintext
<%@language = "javascript" %>
|
||
<% /*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: ins_edit_inspect.asp
|
||
Description: Wijzigen, inplannen, afmelden of afronden van een inpectie.
|
||
Parameters: ins_key (geen verschil).
|
||
|
||
Context: Inline actie ins_list.inc of actie ins_inspect_list
|
||
Note: Parameter mobile doet niets met navigatie, sluiten enzo, die submit gewoon.
|
||
Resultaat van een submit is een json object
|
||
|
||
*/
|
||
%>
|
||
<!-- #include file="../Shared/common.inc" -->
|
||
<!-- #include file="../Shared/iface.inc" -->
|
||
<!-- #include file="../Shared/kenmerk_common.inc" -->
|
||
<!-- #include file="../Shared/calendar.inc" -->
|
||
<!-- #include file="../Shared/save2db.inc" -->
|
||
<!-- #include file="../Shared/selector.inc" -->
|
||
<!-- #include file="../Shared/json2.js" -->
|
||
<!-- #include file="ins_flexkenmerksrtcontrole.inc" -->
|
||
<!-- #include file="../Shared/discxalg3d.inc" -->
|
||
<!-- #include file="ins.inc" -->
|
||
|
||
<%
|
||
FCLTHeader.Requires({ plugins: ["jQuery", "suggest", "kenmerk"],
|
||
js: ["jquery.timepicker-table.js"],
|
||
css: ["timePicker-table.css"] });
|
||
|
||
var ins_key_arr = getQParamIntArray("ins_keys", []);
|
||
var srtcont_key_arr = getQParamIntArray("srtcont_keys", []);
|
||
var deelsrtcont_arr = getQParamIntArray("deelsrtcont_keys", -1); // Bestaande inspectie indien meegegeven.
|
||
var multi = ins_key_arr.length > 1; // Er zijn meerdere object keys meegegeven.
|
||
|
||
var insPlan = getQParamInt("plan", 0) == 1; // Inplannen inspectie.
|
||
var insClose = getQParamInt("close", 0) == 1; // Afmelden of afronden inspectie.
|
||
var insEdit = !insPlan && !insClose; // Wijzigen inspectie.
|
||
var fromfinish = getQParamInt("fromfinish", 0) == 1; // Alleen Voltooien bij bulkactie (multi).
|
||
var finishmjob = getQParamInt("finishmjob", 0) == 1;
|
||
var groupby = getQParamInt("groupby", 7);
|
||
var catclose = (finishmjob && groupby < 7); // Bulk closen per categorie.
|
||
|
||
if (insEdit && multi)
|
||
abort_with_warning(L("lcl_ins_allow_multi_edit"));
|
||
|
||
var tobehandled = 0;
|
||
var ingesloten = [];
|
||
var ingeslotensc = [];
|
||
var ingeslotendsc = [];
|
||
var ingeslotenscen = [];
|
||
var canMsuEdit = false; // Alleen voor het wijzigen van inspectie (insEdit). Er geldt dan altijd !multi.
|
||
// Bepaal de objecten/delen in de selectie die
|
||
// ook echt ingepland kunnen of mogen worden.
|
||
var ctrdisc_key = -1;
|
||
// Alle objecten moeten Gereed gemeld(5) of Afgerond(6) kunnen worden voordat de button zichtbaar mag worden.
|
||
var canClose = true;
|
||
var canFinish = true;
|
||
var nrCanFinishAfterClose = 0;
|
||
|
||
var inflatiepct = S("mjb_inflation");
|
||
var inflatiefactor = 1 + (inflatiepct / 100);
|
||
var mjb_start_year = S("mjb_start_year");
|
||
var mjb_freeze_year = S("mjb_freeze_year");
|
||
|
||
var transitParam = "";
|
||
if (catclose)
|
||
{
|
||
// Bulk closen per categorie.
|
||
transitParam = buildTransitParam(["close", "ins_keys", "srtcont_keys", "deelsrtcont_keys", "fromfinish", "finishmjob",
|
||
"dist_key", "loc_key", "bld_key", "disc_key", "srtgroep_kye", "srtdeel_key",
|
||
"groep", "categori_key", "srtcontrole", "frequentie", "incbtw", "groupby",
|
||
"deel", "mjbMoved", "mjbFreezed", "mjbXcped"]);
|
||
|
||
var dist_key = getQParamInt("dist_key", -1); // District
|
||
var loc_key = getQParamInt("loc_key", -1); // Locatie
|
||
var bld_key = getQParamInt("bld_key", -1); // Gebouw
|
||
var disc_key = getQParamInt("disc_key", -1);
|
||
var srtgroep_key = getQParamInt("srtgroep_key", -1);
|
||
var srtdeel_key = getQParamInt("srtdeel_key", -1);
|
||
var groep = getQParam("groep", ""); // Groep
|
||
var categorie_key = getQParamInt("categorie_key", -1); // Categorie
|
||
var srtcontrole = getQParamIntArray("srtcontrole", []); // Taak
|
||
var frequentie = getQParamIntArray("frequentie", []); // Array met frequenties.
|
||
var incbtw = getQParamInt("incbtw", 0) == 1; // Lijst inclusief BTW weergeven.
|
||
var deel = getQParam("deel", ""); // Identieficatie
|
||
var mjbMoved = getQParamInt("mjbMoved", 0) == 1; // Verschoven.
|
||
var mjbFreezed = getQParamInt("mjbFreezed", 0) == 1; // In behandeling.
|
||
var mjbXcped = getQParamInt("mjbXcped", 0) == 1; // Aangepast.
|
||
|
||
// Start building the query to fetch all objects satisfying
|
||
var mjbparams = { scenario: 1,
|
||
fulldetails: true,
|
||
toyear: mjb_freeze_year,
|
||
jaren: [mjb_freeze_year],
|
||
//actsit: actsit,
|
||
keys: ins_key_arr,
|
||
niveau: groupby, // Het niveau (betekenis) van de keys (district(1), gebouw(2), discipline(3), groep(4), objectsoort(5), object(6))
|
||
dist_key: dist_key,
|
||
loc_key: loc_key,
|
||
bld_key: bld_key,
|
||
disc_key: disc_key,
|
||
srtgroep_key: srtgroep_key,
|
||
srtdeel_key: srtdeel_key,
|
||
groep: groep,
|
||
categorie_key: categorie_key,
|
||
srtcontrole: srtcontrole,
|
||
frequentie: frequentie,
|
||
incbtw: incbtw,
|
||
deel: deel,
|
||
mjbMoved: mjbMoved,
|
||
mjbFreezed: mjbFreezed,
|
||
mjbXcped: mjbXcped,
|
||
groupby: 7, // Ik wil alle objecten opvragen.
|
||
finish: true,
|
||
getsumtypes: true
|
||
};
|
||
|
||
var mjblist_sql = ins.getmjblist_sql(mjbparams);
|
||
// De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevinkte regels uit het mjb overzicht en levert voor elk object de waarden voor de insert op.
|
||
|
||
var oRs = Oracle.Execute(mjblist_sql);
|
||
user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet
|
||
|
||
var sumtype1 = oRs("sumtype1").Value || 0;
|
||
var sumtype2 = oRs("sumtype2").Value || 0;
|
||
var sumtype3 = oRs("sumtype3").Value || 0;
|
||
tobehandled = sumtype1 + sumtype2 + sumtype3;
|
||
|
||
var sumtyp = [];
|
||
sumtyp[0] = tobehandled;
|
||
sumtyp[1] = oRs("sumtype1").Value;
|
||
sumtyp[2] = oRs("sumtype2").Value;
|
||
sumtyp[3] = oRs("sumtype3").Value;
|
||
|
||
ingesloten = ins_key_arr;
|
||
}
|
||
else
|
||
{
|
||
for (var i = 0; i < ins_key_arr.length; i++)
|
||
{
|
||
var this_ins = ins.func_enabled_deel(ins_key_arr[i],
|
||
{srtcont_key: srtcont_key_arr[i],
|
||
deelsrtcont_key: (deelsrtcont_arr[i] > 0? deelsrtcont_arr[i] : -1)
|
||
});
|
||
canMsuEdit = insEdit && this_ins.canMsuEdit;
|
||
|
||
var sql = "SELECT idsc.ins_deelsrtcontrole_key"
|
||
+ " , idsc.ins_deelsrtcontrole_status"
|
||
+ " , xcp.ins_srtcontroledl_xcp_eind vervaldatum"
|
||
+ " , isc.ctr_discipline_key"
|
||
+ " , isc.ins_srtcontrole_options options"
|
||
+ " FROM ins_srtcontrole isc"
|
||
+ " , ins_deelsrtcontrole idsc"
|
||
+ " , ins_srtcontroledl_xcp xcp"
|
||
+ " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
|
||
+ " AND isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
|
||
+ " AND xcp.ins_deel_key(+) = " + ins_key_arr[i]
|
||
+ " AND idsc.ins_deel_key(+) = " + ins_key_arr[i]
|
||
+ " AND isc.ins_srtcontrole_key = " + srtcont_key_arr[i]
|
||
+ (deelsrtcont_arr[i] > 0
|
||
? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_arr[i]
|
||
: " AND idsc.ins_deelsrtcontrole_status(+) != 6")
|
||
+ " AND idsc.ins_scenario_key(+) = 1"
|
||
+ " AND xcp.ins_scenario_key(+) = 1"
|
||
+ " ORDER BY ins_deelsrtcontrole_datum DESC";
|
||
var oRs = Oracle.Execute(sql);
|
||
ctrdisc_key = oRs("ctr_discipline_key").Value;
|
||
|
||
// Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout.
|
||
// Als de laatste inspectie is afgerond is, wordt er null opgeleverd voor de ins_deelsrtcontrole_key en ins_deelsrtcontrole_status.
|
||
// Er moet dan een nieuwe inspectie worden ingeland/gestart/afgemeld of afgerond.
|
||
var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value != null? oRs("ins_deelsrtcontrole_key").Value : -1;
|
||
var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
|
||
var vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null;
|
||
var vervallen = vervaldatum != null && vervaldatum < new Date();
|
||
var isc_options = oRs("options").Value;
|
||
oRs.Close();
|
||
|
||
// Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden.
|
||
if (insPlan && !this_ins.canInspPlan) // Inplannen. Inplan scherm n.v.t. voor MJOB.
|
||
{ // Het is niet de eerste inspectie of de laatste inspectie is niet verwerkt. Overslaan.
|
||
continue;
|
||
}
|
||
|
||
// Kan de inspectie gereed gemeld/afgemeld of afgerond worden?
|
||
if (insClose)
|
||
{ // Bij bulkacties (multi) alleen kijken naar de bulkactie die uitgevoerd moet worden.
|
||
if (insClose && ((multi && ((!fromfinish && !this_ins.canInspClose) || (fromfinish && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)))) ||
|
||
(!multi && !this_ins.canInspClose && !(this_ins.canInspFinish || this_ins.canInspFinishMjb))))
|
||
// De inspectie kan niet afgemeld/afgerond worden. Overslaan.
|
||
continue;
|
||
}
|
||
|
||
// Het mag niet de eerste inspectie zijn en de laatste inspectie mag niet verwerkt zijn.
|
||
if (insEdit && !this_ins.canInspEdit)
|
||
{ // Eerste inspectoe of verwerkte inspectie kan niet gewijzigd worden. Overslaan.
|
||
continue;
|
||
}
|
||
|
||
// Ik mag inplannen, gereed melden of wijzigen.
|
||
// De vervallen LOPENDE inspecties zitten hier ook nog tussen.
|
||
// De rest van de vervallen inspecties zijn er door canInspPlan, canInspClose en canInspEdit uitgefilterd.
|
||
// Vervallen LOPENDE inspecties kunnen nu behandeld worden als gewone inspecties.
|
||
// Alle Arrays zijn even groot.
|
||
ingesloten.push(ins_key_arr[i]);
|
||
ingeslotensc.push(srtcont_key_arr[i]);
|
||
ingeslotendsc.push(ins_deelsrtcontrole_key);
|
||
// Als 1 van de srtcontroles niet gereed te melden is, dan kan er niet gereed gemeld worden en moet de button niet getoond worden.
|
||
canClose = canClose && this_ins.canInspClose;
|
||
// Als 1 van de srtcontroles niet af te ronden is, dan kan er niet afgerond worden en moet de button niet getoond worden.
|
||
canFinish = canFinish && (this_ins.canInspFinish || this_ins.canInspFinishMjb);
|
||
// Kan 1 van de srtcontroles na het gereed melden worden afgerond? Dan kan ook de afrond button getoond worden. N.v.t. voor mjob.
|
||
if (this_ins.canInspClose && this_ins.canInspFinish)
|
||
nrCanFinishAfterClose++;
|
||
tobehandled++;
|
||
}
|
||
}
|
||
if (insClose && !canClose && !canFinish)
|
||
// Als de buttons niet zichtbaar zijn heb ik niets te doen.
|
||
tobehandled = 0;
|
||
lcl.set_dialect(ctrdisc_key, "INS_TAB_DISCIPLINE_KEY");
|
||
user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet
|
||
|
||
var desc = "";
|
||
if (!catclose && ins_key_arr.length == 1)
|
||
{
|
||
sql = "SELECT d.ins_deel_omschrijving" // identificatie
|
||
+ " , s.ins_srtdeel_code"
|
||
+ " , " + lcl.xsqla('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')
|
||
+ " , " + lcl.xsqla('g.ins_srtgroep_omschrijving', 'g.ins_srtgroep_key')
|
||
+ " , " + lcl.xsqla('dis.ins_discipline_omschrijving', 'dis.ins_discipline_key')
|
||
+ " FROM ins_deel d"
|
||
+ " , ins_srtdeel s"
|
||
+ " , ins_srtgroep g"
|
||
+ " , ins_tab_discipline dis"
|
||
+ " WHERE ins_deel_key = " + ins_key_arr[0]
|
||
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
|
||
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key"
|
||
+ " AND g.ins_discipline_key = dis.ins_discipline_key";
|
||
oRs = Oracle.Execute(sql);
|
||
var desc = oRs("ins_deel_omschrijving").Value;
|
||
var sort = oRs("ins_srtdeel_omschrijving").Value;
|
||
oRs.Close();
|
||
}
|
||
%>
|
||
|
||
<html>
|
||
<head>
|
||
<% FCLTHeader.Generate(); %>
|
||
|
||
<%
|
||
var eenheid = -1;
|
||
var scmode = 1; // 0 = Momentmode, 1 = Intervalmode.
|
||
var sctype = -1;
|
||
var aanmaakdatum;
|
||
var startdatum;
|
||
var eersteinspectie;
|
||
var info = "";
|
||
if (!catclose)
|
||
{
|
||
sql = "SELECT *"
|
||
+ " FROM (SELECT DISTINCT xcp.ins_srtcontrole_eenheid eenheid"
|
||
+ " , xcp.ins_srtcontrole_info info"
|
||
+ " , xcp.ins_srtcontrole_mode scmode"
|
||
+ " , xcp.ctr_controle_type sctype"
|
||
+ " , xcp.ins_deel_aanmaak"
|
||
+ " , xcp.ins_srtcontroledl_xcp_startdat startdatum"
|
||
+ " , xcp.ctr_ismjob ismjob"
|
||
+ " , (SELECT COUNT (idsc.ins_deelsrtcontrole_key)"
|
||
+ " FROM ins_deelsrtcontrole idsc1"
|
||
+ " WHERE idsc1.ins_deel_key = xcp.ins_deel_key"
|
||
+ " AND idsc1.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
|
||
+ " AND idsc1.ins_scenario_key = 1) aantal"
|
||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||
+ " , ins_deelsrtcontrole idsc"
|
||
+ " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
|
||
+ " AND idsc.ins_scenario_key(+) = 1"
|
||
+ " AND xcp.ins_scenario_key = 1"
|
||
+ " AND xcp.ins_deel_key IN (" + ingesloten.join(",") + ")"
|
||
+ " AND idsc.ins_deel_key(+) IN (" + ingesloten.join(",") + ")"
|
||
+ " AND xcp.ins_srtcontrole_periode > 0"
|
||
+ " AND xcp.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")"
|
||
+ " )";
|
||
var oRs = Oracle.Execute(sql);
|
||
eenheid = oRs("eenheid").Value;
|
||
info = oRs("info").Value;
|
||
scmode = oRs("scmode").Value;
|
||
sctype = oRs("sctype").Value;
|
||
aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value);
|
||
startdatum = oRs("startdatum").Value != null? new Date(oRs("startdatum").Value) : null;
|
||
mjob = oRs("ismjob").Value == 1;
|
||
eersteinspectie = oRs("aantal").Value == 0;
|
||
oRs.MoveNext();
|
||
while (!oRs.eof)
|
||
{
|
||
if (eenheid != oRs("eenheid").Value)
|
||
eenheid = -1;
|
||
if (scmode != oRs("scmode").Value)
|
||
scmode = -1;
|
||
if (sctype != oRs("sctype").Value)
|
||
{
|
||
info = "";
|
||
sctype = -1; // Er zijn inspecties met verschillende soort ocntroles. Dan maar -1.
|
||
}
|
||
if (aanmaakdatum.getTime() < new Date(oRs("ins_deel_aanmaak").Value).getTime())
|
||
aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value);
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.Close();
|
||
// Als er meerdere inspecties zijn dan hebben bovenstaande variablen alleen een geldige waarde als het voor alle inspecties hetzelfde is.
|
||
}
|
||
|
||
%>
|
||
<script type="text/javascript">
|
||
var eenheid = -1;
|
||
|
||
<% if (!catclose && insClose)
|
||
{ %>
|
||
var inspected_srtcontroles = new Array();
|
||
<%
|
||
if (sctype < 0)
|
||
abort_with_warning(L("lcl_ins_no_same_srtcontrole"));
|
||
|
||
if (ingesloten.length == 1)
|
||
{
|
||
// Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor deze objecten?
|
||
sql = "SELECT idsc.ins_srtcontrole_key"
|
||
+ " , idsc.ins_deelsrtcontrole_datum"
|
||
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) 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 idsc.ins_deel_key IN (" + ingesloten[0] + ")"
|
||
+ " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
|
||
+ " AND idsc.ins_srtcontrole_key = " + ingeslotensc[0]
|
||
+ " AND idsc.ins_scenario_key = 1"
|
||
+ " AND xcp.ins_scenario_key(+) = 1";
|
||
var oRs = Oracle.Execute(sql);
|
||
while (!oRs.eof)
|
||
{ %>
|
||
inspected_srtcontroles[inspected_srtcontroles.length] = { srtcontrole_key: <%=oRs("ins_srtcontrole_key").Value%>,
|
||
datum: <%=new Date(oRs("ins_deelsrtcontrole_datum").Value).getTime()%>,
|
||
eenheid: <%=oRs("eenheid").Value%>,
|
||
mode: <%=oRs("ins_srtcontrole_mode").Value%>};
|
||
<% oRs.MoveNext();
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!catclose)
|
||
{
|
||
var insstatus = -1;
|
||
var status_str = "";
|
||
if ((insPlan || insEdit) && ingeslotendsc.join(",").search("-1") < 0)
|
||
{ // Allemaal bestaande inspecties met de status Gepland(0).
|
||
var sql = "SELECT ins_deelsrtcontrole_status"
|
||
+ " FROM ins_deelsrtcontrole"
|
||
+ " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[0];
|
||
var oRs = Oracle.Execute(sql);
|
||
insstatus = oRs("ins_deelsrtcontrole_status").Value;
|
||
status_str = ins.getinspectstatustext(oRs("ins_deelsrtcontrole_status").Value);
|
||
}
|
||
else if (insClose && ingeslotendsc.join(",").search("-1") < 0)
|
||
{ // Allemaal bestaande inspecties met de status Gepland(0) of In Behandeling(2).
|
||
// Is de status voor elke inspectie hetzelfde.
|
||
var sql = "SELECT MIN(ins_deelsrtcontrole_status) minstatus"
|
||
+ " , MAX(ins_deelsrtcontrole_status) maxstatus"
|
||
+ " FROM ins_deelsrtcontrole"
|
||
+ " WHERE ins_deelsrtcontrole_key IN (" + ingeslotendsc.join(",") + ")"
|
||
+ " AND ins_scenario_key = 1";
|
||
var oRs = Oracle.Execute(sql);
|
||
if (oRs("minstatus").Value == oRs("maxstatus").Value)
|
||
{ // De statussen van alle inspecties zijn hetzelfde. Dan kan ik deze tonen.
|
||
insstatus = oRs("minstatus").Value;
|
||
status_str = ins.getinspectstatustext(oRs("minstatus").Value);
|
||
}
|
||
}
|
||
}
|
||
%>
|
||
function ins_submit_callback(json)
|
||
{
|
||
if (json.success)
|
||
FcltMgr.closeDetail(window, json);
|
||
}
|
||
|
||
function ins_submit(finish)
|
||
{
|
||
// Controle verplichte velden.
|
||
<% if (!catclose && insPlan || (insEdit && insstatus == 0)) // Alleen de datum verplicht bij inplannen en bij het wijzigen van ingeplande inspectie.
|
||
{ %>
|
||
if (!validateForm("u2", { checkOnly: ["show_plandatum", "time_from_plandatum"] }))
|
||
return false;
|
||
<% }
|
||
else if (!catclose && !(insEdit && insstatus == 2)) // Bij wijzigen in status 2 is er geen enkel veld verplicht.
|
||
{ %>
|
||
if (!validateForm("u2"))
|
||
return false;
|
||
<% } %>
|
||
|
||
<% if (!catclose && insPlan)
|
||
{ %>
|
||
// Controleren voor uren inspectie of plandatum niet in het verleden ligt.
|
||
// Dit kan alleen voorkomen bij uren omdat de uren voor vandaag de hele dag ingevuld kunnen worden.
|
||
// Bij dagen, maanden en jaren eenheid kan vandaag niet ingevuld worden. Alleen vanaf morgen kan ingevuld worden.
|
||
if (eenheid == 0 && new Date(parseInt($("#plandatum").val())) <= new Date())
|
||
{
|
||
FcltMgr.alert(L("lcl_ins_controle_not_past")); // Plandatum mag niet in het verleden liggen!
|
||
return false;
|
||
}
|
||
<% }
|
||
else if (!catclose && insClose)
|
||
{ %>
|
||
// Controleren voor uren inspectie of inspectie uitvoerdatum na de laatste uitvoerdatum ligt.
|
||
// Bij multi geldt de laatste uitvoerdatum van alle objecten.
|
||
if (lastinspectdatum && new Date(parseInt($("#deelsrtcontrole_datum").val())) <= lastinspectdatum)
|
||
{
|
||
FcltMgr.alert(L("lcl_ins_controle_after_lastinspect"));
|
||
return false;
|
||
}
|
||
|
||
// Controleren voor uren inspectie of inspectie in toekomst of respijtdatum in verleden ligt.
|
||
// Dit kan voorkomen omdat de uren voor vandaag de hele dag ingevuld kunnen worden.
|
||
// Het zou dus eigenlijk alleen voor uren inspecties voor kunnen komen.
|
||
// Alleen controleren als eenheid is uren. Bij invoer kies je dan ook een bepaald uur.
|
||
if (eenheid == 0 && new Date(parseInt($("#deelsrtcontrole_datum").val())) > new Date())
|
||
{ // Invoeren inspecteren.
|
||
FcltMgr.alert(L("lcl_ins_controle_not_future")); // Controledatum mag niet in de toekomst liggen!
|
||
return false;
|
||
}
|
||
|
||
for (var i = 0; i < inspected_srtcontroles.length; i++)
|
||
{
|
||
// Voor multi objecten is inspected_srtcontroles leeg.
|
||
// In het save script worden die inspecties er dan wel uitgefilterd/overgeslagen.
|
||
if (inspected_srtcontroles[i].srtcontrole_key == $("#sel_srtcontrole").val())
|
||
{
|
||
// 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.
|
||
var controle_datum_midnight = new Date(parseInt($("#deelsrtcontrole_datum").val())).midnight().getTime();
|
||
var controle_datum_uur = new Date(new Date(parseInt($("#deelsrtcontrole_datum").val())).setMinutes(0,0,0)).getTime();
|
||
var controle_datum_min = new Date(new Date(parseInt($("#deelsrtcontrole_datum").val())).setSeconds(0, 0)).getTime();
|
||
|
||
if (controle_datum_midnight == new Date(parseInt(inspected_srtcontroles[i].datum)).midnight().getTime() &&
|
||
inspected_srtcontroles[i].eenheid > 0 &&
|
||
inspected_srtcontroles[i].mode == 0) // Geldt alleen voor momentmodus.
|
||
{ // Op dezelfde dag mag niet.
|
||
FcltMgr.alert(L("lcl_ins_double_inspection_today"));
|
||
return false;
|
||
}
|
||
else if (controle_datum_uur == new Date(new Date(parseInt(inspected_srtcontroles[i].datum)).setMinutes(0,0,0)).getTime() &&
|
||
inspected_srtcontroles[i].eenheid == 0 &&
|
||
inspected_srtcontroles[i].mode == 0) // Geldt alleen voor momentmodus.
|
||
{ // In hetzelfde uur mag niet.
|
||
FcltMgr.alert(L("lcl_ins_double_inspection_hour"));
|
||
return false;
|
||
}
|
||
else if (controle_datum_min == new Date(parseInt(inspected_srtcontroles[i].datum)).getTime() &&
|
||
inspected_srtcontroles[i].mode == 1) // Dat respijtdatum hetzelfde is als inspectiedatum is niet mogelijk omdat anders ook de check "respijtdatum < nudatum" geldt (zie hierboven). Er moet gelden: inspectiedatum < nu en respijtdatum > nu.
|
||
{ // 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.
|
||
FcltMgr.alert(L("lcl_ins_double_inspection"));
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
$("#finish").val(finish);
|
||
<% }
|
||
else if (!catclose && insEdit)
|
||
{ %>
|
||
if (dsc_is_afgemeld)
|
||
{
|
||
// Controleren of de huidige uitvoerdatum van de inspectie tussen die van de voorgaande en volgende inspectie ligt.
|
||
var uitvoerdatum = new Date(parseInt($("#deelsrtcontrole_datum").val()));
|
||
if (uitvoerdatum <= minDateEdit || uitvoerdatum >= maxDateEdit)
|
||
{
|
||
FcltMgr.alert(L("lcl_ins_controle_between_two"));
|
||
return false;
|
||
}
|
||
}
|
||
<% } %>
|
||
|
||
$.post($("form[name=u2]")[0].action,
|
||
$("[name=u2]").serialize() + "<%=transitParam%>",
|
||
FcltCallbackAndThenAlways(ins_submit_callback),
|
||
"json");
|
||
}
|
||
|
||
function ins_cancel()
|
||
{
|
||
FcltMgr.closeDetail(window, { cancel: true } );
|
||
}
|
||
|
||
<% if (!catclose && (insClose || insEdit))
|
||
{ %>
|
||
function onChangeDeelsrtcdatum(id)
|
||
{
|
||
if (id == "T") return;
|
||
selecteddate = new Date(parseInt($("#deelsrtcontrole_datum").val())).midnight().getTime();
|
||
if (selecteddate < new Date().midnight().getTime() && (eenheid > 0))
|
||
{ // Eenheid is geen uren.
|
||
// Tijd op "0:00 uur zetten.
|
||
$("#show_deelsrtcontrole_datum").datepicker("setDate", new Date(selecteddate));
|
||
$("#deelsrtcontrole_datum").val(selecteddate);
|
||
$("#time_from_deelsrtcontrole_datum").val(toTimeString(new Date(selecteddate)));
|
||
}
|
||
else if (selecteddate == new Date().midnight().getTime() && (eenheid > 0))
|
||
{ // Eenheid is geen uren.
|
||
// Tijd op huidige tijd zetten.
|
||
$("#show_deelsrtcontrole_datum").datepicker("setDate", new Date());
|
||
$("#deelsrtcontrole_datum").val(new Date().getTime());
|
||
$("#time_from_deelsrtcontrole_datum").val(toTimeString(new Date()));
|
||
}
|
||
}
|
||
<% } %>
|
||
|
||
function ins_melding()
|
||
{ // Meldbron "Inspection" meegeven (mld_meldbron_key = 10).
|
||
FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=fo&meldbronkey=10&ins_key=<%=ingesloten[0]%>&deelsrtcont_key=<%=ingeslotendsc[0]%>", "<%=L("lcl_add")%>");
|
||
}
|
||
</script>
|
||
</head>
|
||
|
||
<body id="editbody">
|
||
<% // Melding aanmaakbaar? Alleen meldingen die enigzins beperkt zijn tot onze object(soort/groep)
|
||
var canMelding = false;
|
||
if (!catclose && !multi && ingesloten[0] > 0)
|
||
{
|
||
var sql = "SELECT COUNT(*) aantal"
|
||
+ " FROM mld_stdmelding msm"
|
||
+ " , ins_tab_discipline itd"
|
||
+ " , ins_srtdiscipline isd"
|
||
+ " , ins_deel d"
|
||
+ " , ins_srtdeel s"
|
||
+ " , ins_srtgroep g"
|
||
+ " WHERE msm.mld_ins_discipline_key = itd.ins_discipline_key"
|
||
+ " AND mld_stdmelding_verwijder IS NULL"
|
||
+ " AND ((msm.mld_stdmelding_vervaldatum IS NULL) "
|
||
+ " OR (msm.mld_stdmelding_vervaldatum > SYSDATE))"
|
||
+ " AND EXISTS"
|
||
+ " (SELECT fw.ins_discipline_key"
|
||
+ " FROM fac_v_webgebruiker fw, fac_functie ff"
|
||
+ " WHERE msm.mld_ins_discipline_key = fw.ins_discipline_key"
|
||
+ " AND fw.prs_perslid_key = " + user_key
|
||
+ " AND fw.fac_functie_key = ff.fac_functie_key"
|
||
+ " AND ff.fac_functie_code IN ('WEB_MLDFOF')"// Backo mag geen meldingen aanmaken
|
||
+ " AND fw.fac_gebruiker_alg_level_write < 9)"// In theorie zouden we ook nog kunnen ALG-scopen...
|
||
+ " AND itd.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
|
||
+ " AND isd.ins_srtdiscipline_ins = 1"
|
||
+ " AND d.ins_deel_key = " + ingesloten[0]
|
||
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
|
||
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key"
|
||
+ " AND ( msm.ins_srtinst_niveau = 'S' AND ins_srtinst_key = d.ins_srtdeel_key"
|
||
+ " OR msm.ins_srtinst_niveau = 'G' AND ins_srtinst_key = g.ins_srtgroep_key"
|
||
+ " OR msm.ins_srtinst_niveau = 'D' AND ins_srtinst_key = g.ins_discipline_key"
|
||
// + " OR msm.ins_srtinst_niveau IS NULL" // is wel h<><68>l algemeen
|
||
+ " )";
|
||
var oRs = Oracle.Execute(sql);
|
||
canMelding = (oRs("aantal").Value > 0);
|
||
oRs.Close();
|
||
}
|
||
|
||
// De array ingesloten bevat die delen die gepland, gewijzigd, afgemeld of afgerond mogen worden.
|
||
// <20><>n van de waarden insPlan, insEdit of insClose is true.
|
||
var buttons = [];
|
||
if (insPlan || insEdit)
|
||
buttons.push({title: (insPlan? L("lcl_ins_schedule") : L("lcl_submit")), icon: "opslaan.png", action:"ins_submit(0)"});
|
||
if (insClose)
|
||
{ // Bij bulkacties (multi) alleen kijken naar de bulkactie die uitgevoerd moet worden.
|
||
if (!catclose && canClose && !(multi && fromfinish))
|
||
buttons.push({title: L("lcl_ins_close"), icon: "inspfinish.png", action:"ins_submit(0)"});
|
||
var finishAfterClose = (nrCanFinishAfterClose > 0 && multi && !fromfinish); // Na het gereed melden kan voor minstens 1 periodieke taak worden afgerond.
|
||
if ((canFinish && (!multi || fromfinish)) || finishAfterClose)
|
||
{ // De afrond button wordt nu ook getoond bij het afmelden als er tenminste 1 periodiek taak na het gereed melden ook kan worden afgerond.
|
||
// Als niet alle periodiek taken kunnen worden afgerond in deze situatie, dan wordt ook het aantal in de button getoond die wel kunnen worden afgerond.
|
||
buttons.push({title: L("lcl_ins_finish") + (finishAfterClose && nrCanFinishAfterClose < tobehandled? " (" + L("lcl_count") + ":" + nrCanFinishAfterClose + ")" : ""), icon: "close.png", action: "ins_submit(1)"});
|
||
}
|
||
}
|
||
if (canMelding)
|
||
buttons.push({title: L("lcl_do_amelding_hint"), action: "ins_melding()", icon: "doemelding.png" });
|
||
buttons.push({title: L("lcl_cancel"), icon: "undo.png", action: "ins_cancel()"});
|
||
|
||
var titletext;
|
||
switch(sctype)
|
||
{
|
||
case 1: titletext = L("lcl_ins_srtcontrole_insp"); break;
|
||
case 2: titletext = L("lcl_ins_srtcontrole_repl"); break;
|
||
case 3: titletext = L("lcl_ins_srtcontrole_cert"); break;
|
||
default: titletext = L("lcl_menu_ins_controle"); break;
|
||
}
|
||
IFRAMER_HEADER(titletext + " " + safe.html(desc), buttons);
|
||
%>
|
||
<form name="u2" action="ins_inspect_save.asp" method="post">
|
||
<input type="hidden" name="savemode" id="savemode" value="<%=insPlan? "P" : (insClose? "C" : "E")%>">
|
||
<input type="hidden" name="ins_keys" id="ins_keys" value="<%=ingesloten.join(",")%>">
|
||
<input type="hidden" name="srtcont_key_arr" id="srtcont_key_arr" value="<%=ingeslotensc.join(",")%>">
|
||
<% if (!catclose && insEdit)
|
||
{ %>
|
||
<input type="hidden" name="deelsrtcont_key" id="deelsrtcont_key" value="<%=ingeslotendsc[0]%>">
|
||
<% } %>
|
||
<input type="hidden" name="finish" id="finish" value="0">
|
||
<% var blocktext = (insPlan? L("lcl_ins_schedule") : (insClose? L("lcl_ins_stop") : L("lcl_details") ))
|
||
+ (multi || catclose
|
||
? " (" + L("lcl_count") + ":" + tobehandled + ")"
|
||
: "");
|
||
BLOCK_START("insMultiEdit", blocktext);
|
||
if (!catclose && ins_key_arr.length == 1)
|
||
{
|
||
ROFIELDTR("fld", L("lcl_obj_sort"), sort );
|
||
}
|
||
if (!catclose && !multi)
|
||
{ // Inspecteren van <20><>n object met <20><>n of meerdere soortcontroles
|
||
var sql = "SELECT xcp.ins_srtcontrole_key"
|
||
+ " , " + lcl.xsqla('xcp.ins_srtcontrole_omschrijving', 'xcp.ins_srtcontrole_key')
|
||
+ " , xcp.ins_srtcontrole_info info"
|
||
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, xcp.ins_srtcontrole_eenheid) eenheid"
|
||
+ " FROM ins_v_defined_inspect_xcp xcp"
|
||
+ " WHERE xcp.ins_deel_key IN (" + ingesloten[0] + ")"
|
||
+ " AND xcp.ins_srtcontrole_periode > 0"
|
||
+ " AND xcp.ins_srtcontrole_key = " + ingeslotensc[0]
|
||
+ " AND xcp.ins_scenario_key(+) = 1"
|
||
+ " GROUP BY xcp.ins_srtcontrole_key"
|
||
+ " , xcp.ins_srtcontrole_omschrijving"
|
||
+ " , xcp.ins_srtcontrole_info"
|
||
+ " , xcp.ins_srtcontrole_eenheid"
|
||
+ " , xcp.ins_srtcontrole_periode"
|
||
+ " , xcp.ins_deel_key"
|
||
+ " , xcp.ins_srtcontroledl_xcp_eenheid";
|
||
//+ " HAVING COUNT(*) = " + 1 // Als multi dan alleen de inspecties die voor *alle* objecten gelden
|
||
|
||
FCLTselector("sel_srtcontrole_show",
|
||
sql,
|
||
{ label: L("lcl_ins_controle"),
|
||
initKey: ingeslotensc[0],
|
||
emptyOption: L("lcl_select_srtcontrole"),
|
||
readonly: true, // dan wordtie niet gesubmit
|
||
required: true,
|
||
extraParamValue: "eenheid, info",
|
||
extraParamValueInit: "-1, "
|
||
});
|
||
%>
|
||
<input type="hidden" name="sel_srtcontrole" id="sel_srtcontrole" value="<%=ingeslotensc[0]%>">
|
||
<%
|
||
|
||
ROTEXTAREATR("fldtxt", L("lcl_ins_info"), info, {html: "rows='3'", trclass: "invoerinsp", id: "srtcontrole_info", suppressEmpty: true });
|
||
}
|
||
|
||
// Status tonen.
|
||
var params = {};
|
||
if (!catclose && !multi && ingeslotendsc[0] > 0)
|
||
{
|
||
params = { infoPointer: { Url: "appl/shared/status_info.asp?insc_key=" + ingeslotendsc[0] + "&urole=bo",
|
||
Title: L("lcl_status_details") + " " + ingeslotendsc[0]
|
||
}
|
||
}
|
||
}
|
||
params.suppressEmpty = true;
|
||
ROFIELDTR("fld", L("lcl_ins_status"), status_str, params);
|
||
|
||
|
||
if (!catclose)
|
||
{
|
||
// Men mag alleen een inspectie-uitvoerdatum invoeren die later is dan de laatste inspectie-uitvoerdatum.
|
||
// Bij multi ook de laatste uitvoerdatum bepalen.
|
||
sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum"
|
||
+ " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum"
|
||
+ " , SUM (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) aantal_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 (" + ingesloten.join(",") + ")"
|
||
+ " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")"
|
||
+ " AND idsc.ins_scenario_key = 1"
|
||
+ " AND xcp.ins_scenario_key(+) = 1"
|
||
+ " GROUP BY isc.ins_srtcontrole_mode";
|
||
var oRs = Oracle.Execute(sql);
|
||
var lastinspectdatum;
|
||
var dag_na_lastinspectdatum;
|
||
var aantal_dmj_eenheid;
|
||
var mode;
|
||
var minDate = aanmaakdatum; // Als er nog geen inspecties zijn geweest dan is de aanmaakdatum de minimale datum.
|
||
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.
|
||
aantal_dmj_eenheid = oRs("aantal_dmj_eenheid").Value;
|
||
mode = oRs("ins_srtcontrole_mode").Value;
|
||
if (mode == 0)
|
||
// Momentmode.
|
||
minDate = aantal_dmj_eenheid > 0? dag_na_lastinspectdatum : lastinspectdatum;
|
||
else
|
||
// Intervalmode.
|
||
minDate = lastinspectdatum;
|
||
%>
|
||
<script type="text/javascript">
|
||
var lastinspectdatum = new Date(<%=lastinspectdatum.getTime()%>);
|
||
</script>
|
||
<%
|
||
}
|
||
else
|
||
{
|
||
%>
|
||
<script type="text/javascript">
|
||
var lastinspectdatum = null;
|
||
</script>
|
||
<%
|
||
}
|
||
oRs.Close();
|
||
|
||
var dsc_is_afgemeld = false;
|
||
var multidsc_has_afgemeld = false;
|
||
if (!multi && ingeslotendsc[0] > 0)
|
||
{ // Bestaande inspectie.
|
||
var sql = "SELECT ins_deelsrtcontrole_datum"
|
||
+ " , ins_controlemode_key"
|
||
+ " , ins_deelsrtcontrole_opmerking"
|
||
+ " , ins_deelsrtcontrole_plandatum"
|
||
+ " , ins_deelsrtcontrole_status"
|
||
+ " FROM ins_deelsrtcontrole"
|
||
+ " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[0];
|
||
var oRs = Oracle.Execute(sql);
|
||
inspect_data = {deelsrtcontrole_datum: oRs("ins_deelsrtcontrole_datum").Value != null? new Date(oRs("ins_deelsrtcontrole_datum").Value): null,
|
||
controlemode_key: oRs("ins_controlemode_key").Value,
|
||
deelsrtcontrole_opmerking: oRs("ins_deelsrtcontrole_opmerking").Value,
|
||
deelsrtcontrole_plandatum: oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null,
|
||
deelsrtcontrole_status: oRs("ins_deelsrtcontrole_status").Value,
|
||
deelsrtcontrole_status_str: ins.getinspectstatustext(oRs("ins_deelsrtcontrole_status").Value)}
|
||
// Als de tijd van de datum NIET middennacht (00:00) is dan mag je de datum niet wijzigen. Daarom tijd bepalen voor FCLTcalendar.
|
||
// Wijzigen zet datum op middennacht wat problemen met een constraint kan geven.
|
||
var hours = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getHours() : new Date().getHours();
|
||
var minutes = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getMinutes() : new Date().getMinutes();
|
||
dsc_is_afgemeld = inspect_data.deelsrtcontrole_status >= 5;
|
||
oRs.Close();
|
||
}
|
||
else
|
||
{ // Nieuwe inspectie of multi.
|
||
// Inplannen: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als PLANDATUM.
|
||
// De minimum datum is dan gelijk de startdatum.
|
||
// Gereed melden/Afronden: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als CONTROLEDATUM.
|
||
inspect_data = {deelsrtcontrole_datum: insClose && !multi && startdatum != null && eersteinspectie? startdatum : null,
|
||
controlemode_key: -1,
|
||
deelsrtcontrole_plandatum: insPlan? (!multi && startdatum != null && eersteinspectie? startdatum : new Date()): null,
|
||
deelsrtcontrole_opmerking: "",
|
||
deelsrtcontrole_status: insstatus,
|
||
deelsrtcontrole_status_str: status_str};
|
||
if (insPlan && !multi && startdatum != null && eersteinspectie)
|
||
{
|
||
if (mjob)
|
||
minDate = new Date(startdatum.getFullYear() + 1, 0, 1);
|
||
else
|
||
minDate = startdatum;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!catclose && (insPlan || (insEdit && (insstatus == 0 || insstatus == 2))))
|
||
FCLTcalendar("plandatum",
|
||
{ label: L("lcl_ins_controle_plandate"),
|
||
datum: minDate > inspect_data.deelsrtcontrole_plandatum? minDate : inspect_data.deelsrtcontrole_plandatum,
|
||
trclass: "invoerinsp",
|
||
minDate: minDate,
|
||
required : true, // Initeel hidden. Dan niet verplicht.
|
||
timeField: true,
|
||
timeStep: 60,
|
||
startTime: 0,
|
||
endTime: 23.75,
|
||
readonly: (insEdit && insstatus == 2), // In status "Ingepland(0)" is de plandatum altijd nog aan te passen.
|
||
suppressEmpty: true
|
||
});
|
||
|
||
if (!catclose && (insClose || (insEdit && insstatus >= 5)))
|
||
{
|
||
FCLTcalendar("deelsrtcontrole_plandatum",
|
||
{ label: L("lcl_ins_controle_plandate"),
|
||
datum: inspect_data.deelsrtcontrole_plandatum,
|
||
trclass: "invoerinsp",
|
||
timeField: true,
|
||
timeStep: 60,
|
||
startTime: 0,
|
||
endTime: 23.75,
|
||
readonly: true,
|
||
suppressEmpty: true
|
||
});
|
||
var maxDate = new Date();
|
||
if (insClose || (insEdit && typeof inspect_data.deelsrtcontrole_datum != null))
|
||
{
|
||
var dmj_eenheid;
|
||
// Voor gereed te gemelden(5) en af te ronden(6) inspecties gelden 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.
|
||
// Niet multi en ins_deelsrtcontrole_key is bekend.
|
||
|
||
// 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 (" + ingesloten[0] + ")"
|
||
+ " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc[0] + ")"
|
||
+ " AND ins_deelsrtcontrole_key < " + ingeslotendsc[0]
|
||
+ " AND idsc.ins_scenario_key = 1"
|
||
+ " AND xcp.ins_scenario_key(+) = 1"
|
||
+ " 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 (" + ingesloten[0] + ")"
|
||
+ " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc[0] + ")"
|
||
+ " AND ins_deelsrtcontrole_key > " + ingeslotendsc[0]
|
||
+ " AND idsc.ins_scenario_key = 1"
|
||
+ " AND xcp.ins_scenario_key(+) = 1"
|
||
+ " 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;
|
||
maxDate = dmj_eenheid? dag_voor_firstinspectdatum : firstinspectdatum;
|
||
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();
|
||
%>
|
||
<script type="text/javascript">
|
||
var minDateEdit = new Date(<%=minDate.getTime()%>);
|
||
var maxDateEdit = new Date(<%=maxDate.getTime()%>);
|
||
</script>
|
||
<%
|
||
}
|
||
FCLTcalendar("deelsrtcontrole_datum",
|
||
{ label: L("lcl_ins_controle_datum"),
|
||
datum: inspect_data.deelsrtcontrole_datum? inspect_data.deelsrtcontrole_datum : new Date(),
|
||
minDate: minDate,
|
||
maxDate: maxDate,
|
||
required: true,
|
||
trclass: "invoerinsp",
|
||
timeField: true,
|
||
timeStep: 60,
|
||
startTime: 0,
|
||
endTime: 23.75,
|
||
onChangeDate: "onChangeDeelsrtcdatum('D')",
|
||
onChangeTime: "onChangeDeelsrtcdatum('T')",
|
||
readonly: ((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 != null && inspect_data.deelsrtcontrole_datum < aanmaakdatum)
|
||
)
|
||
});
|
||
}
|
||
}
|
||
else (catclose)
|
||
{
|
||
FCLTcalendar("deelsrtcontrole_datum",
|
||
{ label: L("lcl_ins_controle_datum"),
|
||
datum: new Date(),
|
||
minDate: new Date(),
|
||
maxDate: new Date(),
|
||
required: true,
|
||
trclass: "invoerinsp",
|
||
timeField: true,
|
||
timeStep: 60,
|
||
startTime: 0,
|
||
endTime: 23.75,
|
||
//onChangeDate: "onChangeDeelsrtcdatum('D')",
|
||
//onChangeTime: "onChangeDeelsrtcdatum('T')",
|
||
readonly: true
|
||
});
|
||
%> <input type="hidden" id="deelsrtcontrole_datum" name="deelsrtcontrole_datum" value="<%=new Date().getTime()%>">
|
||
<% }
|
||
|
||
if (!catclose)
|
||
{
|
||
sql = "SELECT ins_controlemode_key"
|
||
+ " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')
|
||
+ " FROM ins_controlemode"
|
||
+ " WHERE ins_srtcontrole_type = " + sctype
|
||
+ " ORDER BY 2";
|
||
|
||
// Methode is voor de status Afgemeld(5) en Historie/Verwerkt(6) altijd ingevuld.
|
||
FCLTselector("sel_controlemode",
|
||
sql,
|
||
{ label: L("lcl_ins_controle_mode"),
|
||
initKey: inspect_data.controlemode_key, // Als de controle mode bij multi verschillend is, dan is deze waarde -1.
|
||
emptyOption: L("lcl_select_controlemode"),
|
||
required: true,
|
||
readonly: (insEdit && !canMsuEdit) // Er geldt al (insEdit && insstatus >= 5). In status 5 en 6 met INSMSU rechten mag ik de methode aanpassen (canMsuEdit).
|
||
});
|
||
}
|
||
else
|
||
{
|
||
%>
|
||
<tr><td><%=L("lcl_ins_controle_mode")%>:</td></tr>
|
||
<%
|
||
for (var i = 1; i <= 3; i++)
|
||
{
|
||
if (sumtyp[i] > 0)
|
||
{
|
||
var typeoms = "";
|
||
switch (i)
|
||
{
|
||
case 1: {
|
||
typeoms = L("lcl_ins_srtcontrole_insp");
|
||
break;
|
||
}
|
||
case 2: {
|
||
typeoms = L("lcl_ins_srtcontrole_repl");
|
||
break;
|
||
}
|
||
case 3: {
|
||
typeoms = L("lcl_ins_srtcontrole_cert");
|
||
break;
|
||
}
|
||
}
|
||
|
||
sql = "SELECT ins_controlemode_key"
|
||
+ " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')
|
||
+ " FROM ins_controlemode"
|
||
+ " WHERE ins_srtcontrole_type = " + i
|
||
+ " ORDER BY 2";
|
||
|
||
// Methode is voor de status Afgemeld(5) en Historie/Verwerkt(6) altijd ingevuld.
|
||
FCLTselector("sel_controlemode" + i,
|
||
sql,
|
||
{ label: " " + typeoms + " (" + L("lcl_count") + ":" + sumtyp[i] + ")",
|
||
initKey: -1,
|
||
emptyOption: L("lcl_select_controlemode"),
|
||
required: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
%>
|
||
<script type="text/javascript">
|
||
var dsc_is_afgemeld = <%=dsc_is_afgemeld? 1 : 0%> == 1;
|
||
</script>
|
||
<%
|
||
|
||
RWTEXTAREATR("opmerk",
|
||
"fldremark",
|
||
L("lcl_remark"),
|
||
(!catclose? inspect_data.deelsrtcontrole_opmerking : ""),
|
||
{ html: "rows='8'",
|
||
trclass: "invoerinsp",
|
||
maxlength: 4000
|
||
}
|
||
);
|
||
if (!catclose)
|
||
{ %>
|
||
<script type="text/javascript">
|
||
var insstatus = <%=insstatus%>;
|
||
//var nextinspectdatum = new Date(< %=nextinspectdatum.getTime()% >);
|
||
|
||
// In de interval mode moet de tijd bij de respijtdatum altijd invulbaar zijn.
|
||
// In de moment mode moet de tijd bij de plandatum alleen invulbaar zijn als de eenheid in uren(0) is.
|
||
eenheid = <%=eenheid%>;
|
||
var scmode = <%=scmode%>;
|
||
if (scmode == 0 && eenheid != 0)
|
||
$("#time_from_plandatum").hide().next().hide();
|
||
</script>
|
||
<% }
|
||
BLOCK_END();
|
||
%>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<%
|
||
if (!catclose && !multi)
|
||
{
|
||
BLOCK_START("insFlex2", ""); //block over gehele breedte
|
||
%><div id='insFlexList'><% // Wrapper div voor dynamisch herladen
|
||
|
||
generateFlexKenmerkBlock({deelsrtcontrole_key: (!multi && ingeslotendsc[0] > 0? ingeslotendsc[0] : -1),
|
||
srtcontrole_key: ingeslotensc[0],
|
||
flexcolumns: 1,
|
||
ignorerequired: (insPlan || (insEdit && (insstatus == 0 || insstatus == 2))) // Kenmerken zijn pas verplicht bij het gereed melden en het afronden.
|
||
});
|
||
%></div><%
|
||
BLOCK_END();
|
||
}
|
||
|
||
IFACE.FORM_END();
|
||
%>
|
||
</form>
|
||
</body>
|
||
</html>
|