PLAT#47027: Bulkactie Freeze (Accorderen) op hoger nivo.

svn path=/Website/branches/v2017.2/; revision=36069
This commit is contained in:
Maykel Geerdink
2017-11-21 15:00:20 +00:00
parent b468fbe239
commit 645435ee3c
5 changed files with 1543 additions and 1137 deletions

View File

@@ -2270,7 +2270,11 @@ ins = {checkAutLevel:
var mjbMoved = params.mjbMoved;
var mjbFreezed = params.mjbFreezed;
var mjbXcped = params.mjbXcped;
var sel_controlemode123 = params.sel_controlemode123;
var jaren = params.jaren;
var freeze = params.freeze;
var finish = params.finish;
var getsumtypes = params.getsumtypes;
// De datum (jaar) van de *eerstvolgende* onderhoudsbeurt volgt uit:
// Datum laatste (/laatste geplande) inspectie
@@ -2789,7 +2793,7 @@ ins = {checkAutLevel:
+ " AND g.alg_locatie_key = l.alg_locatie_key"
+ " AND d.alg_district_key = l.alg_district_key";
if (keys != null && keys.length > 0 && niveau != null && niveau > 0)
if (keys != null && keys.length > 0 && niveau != null && niveau > 0 && (freeze || finish))
{
switch (niveau)
{
@@ -2981,6 +2985,191 @@ ins = {checkAutLevel:
sql += "," + String(i)
}
// Bulkactie accorderen (freeze) of voltooien/afronden (finish).
// Ik moet nog de juiste insert waarden ophalen voor alle objecten die de sql oplevert.
if (niveau >= 1 && niveau <= 6 && (freeze || finish))
{ // Accorderen (Freeze) of Voltooien/Afronden (Finish).
if (freeze)
{
var mjblist_sql_select = "SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " , CASE"
+ " WHEN result.ins_deelsrtcontrole_status IS NOT NULL"
+ " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)"
+ " ELSE NULL"
+ " END nextdate"
+ " , result.ins_deelsrtcontrole_status"
+ " , result.\"" + mjb_freeze_year + "\" freeze_bedrag"
+ " , CASE"
+ " WHEN result.\"" + mjb_freeze_year + "\" = 0 AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" IS NOT NULL AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" > 0"
+ " THEN " + safe.quoted_sql(L("lcl_mjb_performed_high"))
+ " ELSE ''"
+ " END opm_has_higherprio"; // Opmerking als het een hogere prio heeft (has_higherprio)
}
else // finish
{
if (getsumtypes)
{
var mjblist_sql_select = "SELECT SUM(CASE"
+ " WHEN xcp.ctr_controle_type = 1"
+ " THEN 1"
+ " ELSE 0"
+ " END) sumtype1"
+ " , SUM(CASE"
+ " WHEN xcp.ctr_controle_type = 2"
+ " THEN 1"
+ " ELSE 0"
+ " END) sumtype2"
+ " , SUM(CASE"
+ " WHEN xcp.ctr_controle_type = 3"
+ " THEN 1"
+ " ELSE 0"
+ " END) sumtype3";
}
else
{
var mjblist_sql_select = "SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " , result.ctr_controle_type"
+ " , CASE"
+ " WHEN (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key"
+ " AND idsc2.ins_deelsrtcontrole_status = 6) IS NOT NULL" // Er is al een inspectie geweest.
+ " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)"
+ " ELSE SYSDATE" // Er is nog geen inspectie geweest. De org date wordt nu.
+ " END nextdate"
+ " , (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key) ins_deelsrtcontrole_key"
+ " , (SELECT cm.ins_controlemode_oms"
+ " FROM ins_controlemode cm"
+ " WHERE cm.ins_controlemode_key IN (" + sel_controlemode123.join(",") + ")"
+ " AND cm.ins_srtcontrole_type = result.ctr_controle_type) cm_oms"
+ " , (SELECT cd.ins_discipline_omschrijving"
+ " FROM ctr_discipline cd"
+ " WHERE cd.ins_discipline_key = xcp.ctr_discipline_key) ctr_disc_oms"
+ " , (SELECT idsc2.ins_deelsrtcontrole_opmerking"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)) ins_deelsrtcontrole_opmerking";
}
}
var mjblist_sql = mjblist_sql_select
+ " FROM ins_v_defined_inspect_xcp xcp"
+ " , ins_deel dl" // I.v.m. ORA-03113 fout: ins_v_aanwezigdeel vervangen door ins_deel en verder uitgeschreven (FSN#51212).
+ " , ins_srtdeel isd"
+ " , ins_srtgroep isg"
+ " , ins_discipline dd"
+ " , alg_district d"
+ " , alg_locatie l"
+ " , alg_gebouw g"
+ " , alg_verdieping v"
+ " , alg_ruimte r"
+ " , (" + sql + ") result"
+ " WHERE xcp.ins_deel_key = dl.ins_deel_key"
+ " AND dl.ins_deel_verwijder IS NULL"
+ " AND dl.ins_deel_parent_key IS NULL"
+ " AND dl.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND isg.ins_discipline_key = dd.ins_discipline_key"
+ " AND dl.ins_alg_ruimte_key = r.alg_ruimte_key"
+ " AND r.alg_verdieping_key = v.alg_verdieping_key"
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
+ " AND g.alg_locatie_key = l.alg_locatie_key"
+ " AND d.alg_district_key = l.alg_district_key"
+ " AND xcp.ins_deel_key = result.ins_deel_key"
+ " AND xcp.ins_srtcontrole_key = result.ins_srtcontrole_key"
// Inspectie mag niet op dezelfde dag plaatsvinden
+ " AND (SELECT TRUNC(idsc2.ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key"
+ " AND idsc2.ins_deelsrtcontrole_status = 6)) != TRUNC(SYSDATE)"
// Autorisatie controleren i.p.v. canInspStartReq (Accorderen (Freeze)) en canInspFinishReq (Voltooien/Afronden (Finish)):
// 0) invoerAfterNext is voor mjob (interval modus) altijd waar.
// 1) Alleen voor Accorderen (Freeze): niet vervallen.
// 2) Freeze: status <= 0 of status == 6
// Finish: status == 2
// 3) actief object
// 4) hasCTRwrite
// 5) Freeze: bij instelling "Actieve acties" het vinkje "Starten" aangevinkt.
// Finish: bij instelling "Actieve acties" het vinkje "Afronden" aangevinkt.
// 6) geen scenario (scenario_key is 1)
// 7) ismjob
// 8) isFreezeYear
// 9) readuse rechten.
+ (freeze
? " AND (xcp.ins_srtcontroledl_xcp_eind IS NULL OR xcp.ins_srtcontroledl_xcp_eind >= SYSDATE)" // 1) Freeze: Niet vervallen.
: "") // Finish: Maakt niet uit.
+ (freeze
? " AND (EXISTS" // 2) Freeze: Geen controles of laatste controle status 0 of 6.
+ " (SELECT idsc1.ins_deelsrtcontrole_status"
+ " FROM ins_deelsrtcontrole idsc1"
+ " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)"
+ " AND idsc1.ins_deelsrtcontrole_status IN (0, 6))"
+ " OR NOT EXISTS"
+ " (SELECT idsc2.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key))"
: " AND EXISTS" // Finish: Laatste controle status 2.
+ " (SELECT idsc1.ins_deelsrtcontrole_status"
+ " FROM ins_deelsrtcontrole idsc1"
+ " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)"
+ " AND idsc1.ins_deelsrtcontrole_status IN (2))")
+ " AND ins_deel_actief = 1" // 3) Actief object.
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // 4) hasCTRwrite.
+ " FROM fac_v_webgebruiker w"
+ " , fac_functie f"
+ " WHERE w.fac_functie_key = f.fac_functie_key"
+ " AND f.fac_functie_code = 'WEB_CTRUSE'"
+ " AND w.fac_gebruiker_prs_level_write < 9"
+ " AND w.fac_gebruiker_alg_level_write < 9"
+ " AND w.prs_perslid_key = " + user_key + ")"
+ (freeze
? " AND BITAND(xcp.ins_srtcontrole_options, 2) = 2" // 5) Freeze: Het vinkje "Starten" aangevinkt.
: " AND BITAND(xcp.ins_srtcontrole_options, 8) = 8") // Finish: Het vinkje "Afronden" aangevinkt.
+ " AND xcp.ins_scenario_key = 1" // 6) Geen scenario.
+ " AND xcp.ctr_ismjob = 1" // 7) ismjob.
+ " AND result.\"" + mjb_freeze_year + "\" IS NOT NULL"; // 8) isFreezeYear, bedrag in mjb_freeze_year is niet NULL.
sql = discxalg3d(mjblist_sql, // 9) 3D-readuse rechten.
"dd.ins_discipline_key",
"d.alg_regio_key",
"d.alg_district_key",
"l.alg_locatie_key",
"g.alg_gebouw_key",
"v.alg_verdieping_key",
"r.alg_ruimte_key",
"WEB_INSUSE", //autfunction,
"",
false); // forwrite => read
sql += " ORDER BY xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key";
}
return sql;
},

View File

@@ -21,6 +21,7 @@
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="ins_flexkenmerksrtcontrole.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="ins.inc" -->
<%
@@ -37,6 +38,7 @@ 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 groupby = getQParamInt("groupby", 7);
if (insEdit && multi)
abort_with_warning(L("lcl_ins_allow_multi_edit"));
@@ -54,83 +56,165 @@ var ctrdisc_key = -1;
var canClose = true;
var canFinish = true;
var nrCanFinishAfterClose = 0;
for (var i = 0; i < ins_key_arr.length; i++)
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 (groupby < 7)
// Bulk closen per categorie.
transitParam = buildTransitParam(["close", "ins_keys", "srtcont_keys", "deelsrtcont_keys", "fromfinish",
"dist_key", "loc_key", "bld_key", "disc_key", "srtgroep_kye", "srtdeel_key",
"groep", "categori_key", "srtcontrole", "frequentie", "incbtw", "groupby",
"deel", "mjbMoved", "mjbFreezed", "mjbXcped"]);
if (groupby < 7)
{
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 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.
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;
// 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
};
// 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();
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.
// 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;
}
var oRs = Oracle.Execute(mjblist_sql);
user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet
// 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.
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;
}
}
// 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;
}
// 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;
}
// 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++;
// 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.
@@ -139,7 +223,7 @@ 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 (ins_key_arr.length == 1)
if (groupby == 7 && ins_key_arr.length == 1)
{
sql = "SELECT d.ins_deel_omschrijving" // identificatie
+ " , s.ins_srtdeel_code"
@@ -156,10 +240,7 @@ if (ins_key_arr.length == 1)
+ " AND g.ins_discipline_key = dis.ins_discipline_key";
oRs = Oracle.Execute(sql);
var desc = oRs("ins_deel_omschrijving").Value;
var srtcode = oRs("ins_srtdeel_code").Value;
var sort = oRs("ins_srtdeel_omschrijving").Value;
var group = oRs("ins_srtgroep_omschrijving").Value;
var disc = oRs("ins_discipline_omschrijving").Value;
oRs.Close();
}
%>
@@ -176,62 +257,65 @@ if (ins_key_arr.length == 1)
var startdatum;
var eersteinspectie;
var info = "";
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 (groupby == 7)
{
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);
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.
}
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 (insClose)
<% if (groupby == 7 && insClose)
{ %>
var inspected_srtcontroles = new Array();
<%
@@ -268,30 +352,33 @@ if (ins_key_arr.length == 1)
}
}
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);
if (groupby == 7)
{
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);
}
}
}
%>
@@ -304,18 +391,18 @@ if (ins_key_arr.length == 1)
function ins_submit(finish)
{
// Controle verplichte velden.
<% if (insPlan || (insEdit && insstatus == 0)) // Alleen de datum verplicht bij inplannen en bij het wijzigen van ingeplande inspectie.
<% if (groupby == 7 && 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 (!(insEdit && insstatus == 2)) // Bij wijzigen in status 2 is er geen enkel veld verplicht.
else if (groupby == 7 && !(insEdit && insstatus == 2)) // Bij wijzigen in status 2 is er geen enkel veld verplicht.
{ %>
if (!validateForm("u2"))
return false;
<% } %>
<% if (insPlan)
<% if (groupby == 7 && 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.
@@ -326,7 +413,7 @@ if (ins_key_arr.length == 1)
return false;
}
<% }
else if (insClose)
else if (groupby == 7 && insClose)
{ %>
// Controleren voor uren inspectie of inspectie uitvoerdatum na de laatste uitvoerdatum ligt.
// Bij multi geldt de laatste uitvoerdatum van alle objecten.
@@ -385,7 +472,7 @@ if (ins_key_arr.length == 1)
}
$("#finish").val(finish);
<% }
else if (insEdit)
else if (groupby == 7 && insEdit)
{ %>
if (dsc_is_afgemeld)
{
@@ -400,7 +487,7 @@ if (ins_key_arr.length == 1)
<% } %>
$.post($("form[name=u2]")[0].action,
$("[name=u2]").serialize(),
$("[name=u2]").serialize() + "<%=transitParam%>",
FcltCallbackAndThenAlways(ins_submit_callback),
"json");
}
@@ -410,7 +497,7 @@ if (ins_key_arr.length == 1)
FcltMgr.closeDetail(window, { cancel: true } );
}
<% if (insClose || insEdit)
<% if (groupby == 7 && (insClose || insEdit))
{ %>
function onChangeDeelsrtcdatum(id)
{
@@ -443,7 +530,7 @@ if (ins_key_arr.length == 1)
<body id="editbody">
<% // Melding aanmaakbaar? Alleen meldingen die enigzins beperkt zijn tot onze object(soort/groep)
var canMelding = false;
if (!multi && ingesloten[0] > 0)
if (groupby == 7 && !multi && ingesloten[0] > 0)
{
var sql = "SELECT COUNT(*) aantal"
+ " FROM mld_stdmelding msm"
@@ -486,7 +573,7 @@ if (ins_key_arr.length == 1)
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 (canClose && !(multi && fromfinish))
if (groupby == 7 && 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)
@@ -509,25 +596,25 @@ if (ins_key_arr.length == 1)
}
IFRAMER_HEADER(titletext + " " + safe.html(desc), buttons);
%>
<form name="u2" action="ins_inspect_save.asp?ins_keys=<%=ingesloten.join(",")%>&srtcont_key_arr=<%=ingeslotensc.join(",")%>" method="post">
<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 (insEdit)
<% if (groupby == 7 && 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
+ (multi || groupby < 7
? " (" + L("lcl_count") + ":" + tobehandled + ")"
: "");
BLOCK_START("insMultiEdit", blocktext);
if (ins_key_arr.length == 1)
if (groupby == 7 && ins_key_arr.length == 1)
{
ROFIELDTR("fld", L("lcl_obj_sort"), sort );
ROFIELDTR("fld", L("lcl_obj_sort"), sort );
}
if (!multi)
if (groupby == 7 && !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')
@@ -566,7 +653,7 @@ if (ins_key_arr.length == 1)
// Status tonen.
var params = {};
if (!multi && ingeslotendsc[0] > 0)
if (groupby == 7 && !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]
@@ -577,108 +664,111 @@ if (ins_key_arr.length == 1)
ROFIELDTR("fld", L("lcl_ins_status"), status_str, params);
// 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)
if (groupby == 7)
{
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];
// 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);
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)
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)
{
if (mjob)
minDate = new Date(startdatum.getFullYear() + 1, 0, 1);
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
minDate = startdatum;
// 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 (insPlan || (insEdit && (insstatus == 0 || insstatus == 2)))
if (groupby == 7 && (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,
@@ -693,7 +783,7 @@ if (ins_key_arr.length == 1)
suppressEmpty: true
});
if (insClose || (insEdit && insstatus >= 5))
if (groupby == 7 && (insClose || (insEdit && insstatus >= 5)))
{
FCLTcalendar("deelsrtcontrole_plandatum",
{ label: L("lcl_ins_controle_plandate"),
@@ -824,7 +914,29 @@ if (ins_key_arr.length == 1)
)
});
}
}
else (groupby != 7)
{
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 (groupby == 7)
{
sql = "SELECT ins_controlemode_key"
+ " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')
+ " FROM ins_controlemode"
@@ -841,6 +953,49 @@ if (ins_key_arr.length == 1)
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: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + 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;
@@ -850,13 +1005,14 @@ if (ins_key_arr.length == 1)
RWTEXTAREATR("opmerk",
"fldremark",
L("lcl_remark"),
inspect_data.deelsrtcontrole_opmerking,
(groupby == 7? inspect_data.deelsrtcontrole_opmerking : ""),
{ html: "rows='8'",
trclass: "invoerinsp",
maxlength: 4000
}
);
%>
if (groupby == 7)
{ %>
<script type="text/javascript">
var insstatus = <%=insstatus%>;
//var nextinspectdatum = new Date(< %=nextinspectdatum.getTime()% >);
@@ -868,7 +1024,7 @@ if (ins_key_arr.length == 1)
if (scmode == 0 && eenheid != 0)
$("#time_from_plandatum").hide().next().hide();
</script>
<%
<% }
BLOCK_END();
%>
</td>
@@ -876,7 +1032,7 @@ if (ins_key_arr.length == 1)
<tr>
<td>
<%
if (!multi)
if (groupby == 7 && !multi)
{
BLOCK_START("insFlex2", ""); //block over gehele breedte
%><div id='insFlexList'><% // Wrapper div voor dynamisch herladen

File diff suppressed because it is too large Load Diff

View File

@@ -61,7 +61,7 @@ if (groupby < 7)
var mjbXcped = getFParamInt("mjbXcped", 0) == 1; // Aangepast.
// Start building the query to fetch all objects satisfying
var mjbparams = { niveau: groupby,
var mjbparams = { niveau: groupby, // Het niveau (betekenis) van de keys (district(1), gebouw(2), discipline(3), groep(4), objectsoort(5), object(6))
keys: ins_key_arr,
scenario: 1,
fulldetails: true,
@@ -78,114 +78,20 @@ if (groupby < 7)
frequentie: frequentie,
incbtw: incbtw,
toyear: mjb_freeze_year,
groupby: 7,
groupby: 7, // Ik wil alle objecten opvragen.
deel: deel,
mjbMoved: mjbMoved,
mjbFreezed: mjbFreezed,
mjbXcped: mjbXcped,
jaren: [mjb_freeze_year]
jaren: [mjb_freeze_year],
freeze: true
};
var mjblist_sql = ins.getmjblist_sql(mjbparams);
// De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevink regels uit het mjb overzicht.
var sql = "SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " , result.ins_deelsrtcontrole_status"
+ " , " + user_key
+ " , CASE"
+ " WHEN result.ins_deelsrtcontrole_status IS NOT NULL"
+ " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)"
+ " ELSE NULL"
+ " END nextdate"
+ " , result.\"" + mjb_freeze_year + "\" bedrag"
+ " , TRUNC(TO_DATE(TO_CHAR(SYSDATE, 'DD-MON') || '-" + mjb_freeze_year + "', 'DD-MON-YYYY'), 'YEAR') freez_date"
+ " , CASE"
+ " WHEN result.\"" + mjb_freeze_year + "\" = 0 AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" IS NOT NULL AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" > 0"
+ " THEN " + safe.quoted_sql(L("lcl_mjb_performed_high"))
+ " ELSE ''"
+ " END opm_has_higherprio" // Opmerking als het een hogere prio heeft (has_higherprio)
+ " FROM ins_v_defined_inspect_xcp xcp"
+ " , ins_v_aanwezigdeel dl"
+ " , ins_srtdeel isd"
+ " , ins_srtgroep isg"
+ " , ins_discipline dd"
+ " , alg_district d"
+ " , alg_locatie l"
+ " , alg_gebouw g"
+ " , alg_verdieping v"
+ " , alg_ruimte r"
+ " , (" + mjblist_sql + ") result"
+ " WHERE xcp.ins_deel_key = dl.ins_deel_key"
+ " AND dl.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND isg.ins_discipline_key = dd.ins_discipline_key"
+ " AND dl.ins_alg_ruimte_key = r.alg_ruimte_key"
+ " AND r.alg_verdieping_key = v.alg_verdieping_key"
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
+ " AND g.alg_locatie_key = l.alg_locatie_key"
+ " AND d.alg_district_key = l.alg_district_key"
+ " AND xcp.ins_deel_key = result.ins_deel_key"
+ " AND xcp.ins_srtcontrole_key = result.ins_srtcontrole_key"
// Autorisatie:
// Nu nog even checken of je mag accoderen (Freeze). Stuk voor stuk duurt veel te lang.
// 0) invoerAfterNext is voor mjob (interval modus) altijd waar.
// 1) niet vervallen.
// 2) status <= 0 of status == 6
// 3) actief object
// 4) hasCTRwrite
// 5) bij instelling "Actieve acties" het vinkje "Starten" aangevinkt.
// 6) geen scenario (scenario_key is 1)
// 7) ismjob
// 8) isFreezeYear
// 9) readuse rechten.
+ " AND (xcp.ins_srtcontroledl_xcp_eind IS NULL OR xcp.ins_srtcontroledl_xcp_eind >= SYSDATE)" // 1) Niet vervallen.
+ " AND (EXISTS" // 2) Geen controles of laatste controle status 6.
+ " (SELECT idsc1.ins_deelsrtcontrole_status"
+ " FROM ins_deelsrtcontrole idsc1"
+ " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)"
+ " AND idsc1.ins_deelsrtcontrole_status IN (0, 6))"
+ " OR NOT EXISTS"
+ " (SELECT idsc2.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = xcp.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = xcp.ins_scenario_key))"
+ " AND ins_deel_actief = 1" // 3) Actief object.
+ " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // 4) hasCTRwrite.
+ " FROM fac_v_webgebruiker w"
+ " , fac_functie f"
+ " WHERE w.fac_functie_key = f.fac_functie_key"
+ " AND f.fac_functie_code = 'WEB_CTRUSE'"
+ " AND w.fac_gebruiker_prs_level_write < 9"
+ " AND w.fac_gebruiker_alg_level_write < 9"
+ " AND w.prs_perslid_key = " + user_key + ")"
+ " AND BITAND(xcp.ins_srtcontrole_options, 2) = 2" // 5) Het vinkje "Starten" aangevinkt.
+ " AND xcp.ins_scenario_key = 1" // 6) Geen scenario.
+ " AND xcp.ctr_ismjob = 1" // 7) ismjob.
+ " AND result.\"" + mjb_freeze_year + "\" IS NOT NULL"; // 8) isFreezeYear, bedrag in mjb_freeze_year is niet NULL.
sql = discxalg3d(sql, // 9) 3D-readuse rechten.
"dd.ins_discipline_key",
"d.alg_regio_key",
"d.alg_district_key",
"l.alg_locatie_key",
"g.alg_gebouw_key",
"v.alg_verdieping_key",
"r.alg_ruimte_key",
"WEB_INSUSE", //autfunction,
"",
false); // forwrite => read
sql += " ORDER BY xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key";
// 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 result = {success: true, multi: multi, start: true };
var oRs = Oracle.Execute(sql);
var oRs = Oracle.Execute(mjblist_sql);
user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet
var insert_sql = "BEGIN ";
@@ -195,7 +101,7 @@ if (groupby < 7)
var srtcont_key = oRs("ins_srtcontrole_key").Value;
var nextdate = oRs("nextdate").Value != null? new Date(oRs("nextdate").Value) : null;
var inspstatus = oRs("ins_deelsrtcontrole_status").Value;
var kosten = oRs("bedrag").Value;
var kosten = oRs("freeze_bedrag").Value;
var opm_has_higherprio = oRs("opm_has_higherprio").Value;
ingesloten.push({ins_key: ins_key, srtcont_key: srtcont_key, dlsrtcont_key: -1,
inspectiestatus: inspstatus, kosten: kosten, ismjob: true});
@@ -229,7 +135,7 @@ if (groupby < 7)
var err = Oracle.Execute(insert_sql, true);
if (err.friendlyMsg)
result.message = err.friendlyMsg
result.message = err.friendlyMsg;
for (var i = 0; i < ingesloten.length; i++)
{

View File

@@ -314,8 +314,11 @@ function insClose(rowArray, isMulti, fromfinish)
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey == 1)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen.
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
if (groupby == 7)
{
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
}
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
@@ -336,7 +339,24 @@ function insClose(rowArray, isMulti, fromfinish)
+ "&deelsrtcont_keys=" + deelsrtcontrkeyArray.join(",")
+ (fromfinish
? "&fromfinish=1"
: "");
: "")
+ "&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
+ "&groupby=" + groupby
+ "&deel=" + deel
+ "&actsit=" +
+ "&mjbMoved=" + mjbMoved
+ "&mjbFreezed=" + mjbFreezed
+ "&mjbXcped=" + mjbXcped;
FcltMgr.openDetail(url, L("lcl_ins_stop"));
}
@@ -358,7 +378,8 @@ function insFinish(rowArray, isMulti)
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey == 1)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen.
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
if (groupby == 7)
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
isc_status = rowdata.ins_status;
mustClose = mustClose || (isc_status != 5);
}