FSN#36298: 1. Scenario’s (per complex moeten verschillende scenario’s gemaakt moeten kunnen.

svn path=/Website/trunk/; revision=34585
This commit is contained in:
Maykel Geerdink
2017-07-11 07:41:42 +00:00
parent 16be146397
commit a1919282bd
9 changed files with 419 additions and 133 deletions

View File

@@ -241,6 +241,20 @@ ins = {checkAutLevel:
return statustekst;
},
getscenariostatustext:
function (p)
{
var statustekst = "??";
var s = parseInt(p, 10);
switch (s) {
case 0: { statustekst = L("lcl_ins_new"); break; }
case 6: { statustekst = L("lcl_ins_verwerkt"); break; }
}
if (__Logging > 0)
statustekst += " (" + String(p) + ")";
return statustekst;
},
updateKenmerkdeel:
function(ins_key, params)
{ // Wijzigbare flexkenmerken altijd opslaan
@@ -553,6 +567,7 @@ ins = {checkAutLevel:
var hasInspect = !oRs.eof;
oRs.Close();
// Voor het bepalen van de autorisatie voor inspecties, moet gekeken worden naar de gegevens van de Active Situatie (AS).
var sql = "SELECT insp.ins_deelsrtcontrole_key"
+ " , insp.ins_deelsrtcontrole_status"
+ " , insp.vervaldatum"
@@ -590,7 +605,62 @@ ins = {checkAutLevel:
+ " THEN 1"
+ " ELSE 0"
+ " END invoerAfterNext"
+ " FROM (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ("
// Alle Active Situatie (AS) soort controle's die geen uitzondering (XCP) record hebben maar wel een scenario.
+ " SELECT idsc.ins_deelsrtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_datum"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , NULL vervaldatum"
+ " , isc.ins_srtcontrole_mode isc_mode"
+ " , isc.ctr_discipline_key"
+ " , isc.ins_srtcontrole_options options"
+ " , isc.ins_srtcontrole_eenheid eenheid"
+ " , idsc.ins_deelsrtcontrole_plandatum plandatum"
+ " , CASE"
+ " WHEN 1 = " + (hasInspect? 0 : 1) // lastinspect IS NULL
+ " THEN (SELECT d.ins_deel_aanmaak FROM ins_deel d WHERE d.ins_deel_key = " + pins_deel_key + ")"
+ " WHEN idsc.ins_deelsrtcontrole_status IN (0, 2)"
+ " THEN ins_deelsrtcontrole_datum_org"
+ " ELSE fac.nextcyclusdate(CASE"
+ " WHEN isc.ins_srtcontrole_mode = 0"
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus (0). Uitgaan van eigenlijke/orginele inspectiedatum.
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus (1). Uitgaan van werkelijke inspectiedatum.
+ " END"
+ " , isc.ins_srtcontrole_mode"
+ " , isc.ins_srtcontrole_eenheid"
+ " , isc.ins_srtcontrole_periode"
+ " , isc.ins_srtcontrole_bits"
+ " , 1)"
+ " END inspectie_next"
+ " FROM ins_srtcontrole isc"
+ " , ins_deelsrtcontrole idsc"
+ " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
+ " AND idsc.ins_deel_key(+) = " + pins_deel_key
+ (params.deelsrtcont_key > 0
? " AND idsc.ins_deelsrtcontrole_key = " + params.deelsrtcont_key
: " AND (idsc.ins_deelsrtcontrole_key IS NULL OR"
+ " idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key + "))")
+ " AND NOT EXISTS"
+ " (SELECT xcp.ins_srtcontroledl_xcp_key"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = " + params.srtcont_key
+ " AND xcp.ins_deel_key = " + pins_deel_key
+ " AND xcp.ins_scenario_key IS NULL)"
+ " AND EXISTS"
+ " (SELECT xcp.ins_srtcontroledl_xcp_key"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = " + params.srtcont_key
+ " AND xcp.ins_deel_key = " + pins_deel_key
+ " AND xcp.ins_scenario_key IS NOT NULL)"
+ " UNION ALL"
// Alle Active Situatie (AS) soort controle's die:
// a) geen uitzondering (XCP) record hebben en geen scenario.
// b) een uitzondering (XCP) record hebben.
// Hier niet van belang: Alle soort controles van de scenario's (AND xcp.ins_scenario_key IS NULL).
+ " SELECT idsc.ins_deelsrtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_datum"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , xcp.ins_srtcontroledl_xcp_eind vervaldatum"
@@ -623,6 +693,7 @@ ins = {checkAutLevel:
+ " AND xcp.ins_deel_key(+) = " + pins_deel_key
+ " AND idsc.ins_deel_key(+) = " + pins_deel_key
+ " AND isc.ins_srtcontrole_key = " + params.srtcont_key
+ " AND xcp.ins_scenario_key IS NULL"
+ (params.deelsrtcont_key > 0
? " AND idsc.ins_deelsrtcontrole_key = " + params.deelsrtcont_key
: " AND (idsc.ins_deelsrtcontrole_key IS NULL OR"
@@ -630,6 +701,9 @@ ins = {checkAutLevel:
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key + "))")
//+ (params && params.scen_key > 0
// ? " AND xcp.ins_scenario_key = " + params.scen_key
// : " AND xcp.ins_scenario_key IS NULL")
+ " ) insp"
+ " ORDER BY insp.ins_deelsrtcontrole_datum DESC";
var oRs = Oracle.Execute(sql);
@@ -660,37 +734,44 @@ ins = {checkAutLevel:
iresult.canShowXcp = iresult.hasCTRRead && iresult.canRead("WEB_INSMAN"); // Exceptions (xcp) waarden inspecties/taken bekijken (waarden in ins_srtcontroledl_xcp tabel).
iresult.canChangeXcp = iresult.hasCTRWrite && iresult.canWrite("WEB_INSMAN"); // Exceptions (xcp) waarden inspecties/taken wijzigen (waarden in ins_srtcontroledl_xcp tabel).
// Op een scenario heb je geen inspectie rechten. Daar kun je geen inspectie op doen.
var isScenario = params.isScenario;
// Een nieuwe inspectie mag pas weer aangemaakt worden als de laatste inspectie Afgerond(6) is.
// Als de inspectie vervallen is moet je alleen nog de lopende inspecties (ingepland of later) kunnen gereedmelden en/of afronden,
// zodat deze inspectie afgerond kan worden. Nieuwe inspectie kunnen nooit meer beginnen.
// Eerste inspectie of verwerkte inspectie kan niet gewijzigd worden.
iresult.canMsuEdit = iresult.writemsu && ins_deelsrtcontrole_status == 6;
iresult.canMsuEdit = iresult.writemsu && ins_deelsrtcontrole_status == 6 && !isScenario;
iresult.canInspEdit = ((iresult.readuse && ins_deelsrtcontrole_status != -1 && ins_deelsrtcontrole_status != 6) ||
iresult.canMsuEdit) &&
!vervallen && actief && iresult.hasCTRWrite;
iresult.canInspShow = iresult.readuse && !vervallen && (ins_deelsrtcontrole_status >= 0) && iresult.hasCTRRead;
!vervallen && actief && iresult.hasCTRWrite &&
!isScenario;
iresult.canInspShow = iresult.readuse && !vervallen && (ins_deelsrtcontrole_status >= 0) && iresult.hasCTRRead && !isScenario;
// Bij eerste inspectie of verwerkte inspectie kan er gepland worden.
iresult.canInspPlan = iresult.readuse && !vervallen &&
(ins_deelsrtcontrole_status == -1 || ins_deelsrtcontrole_status == 6) &&
actief && iresult.hasCTRWrite &&
((isc_options & 1) == 1);
((isc_options & 1) == 1) &&
!isScenario;
// Bij eerste inspectie, geplande inspectie of verwerkte inspectie kan er gestart worden.
iresult.canInspStart = iresult.readuse && invoerAfterNext && !vervallen &&
(ins_deelsrtcontrole_status <= 0 || ins_deelsrtcontrole_status == 6) &&
actief && iresult.hasCTRWrite &&
((isc_options & 2) == 2);
((isc_options & 2) == 2) &&
!isScenario;
// Bij eerste inspectie, geplande inspectie, gestarte inspectie of verwerkte inspectie kan er gereedgemeld/afgerond worden.
iresult.canInspClose = iresult.readuse && invoerAfterNext &&
((!vervallen && (ins_deelsrtcontrole_status < 5 || ins_deelsrtcontrole_status == 6)) ||
(ins_deelsrtcontrole_status == 0 || ins_deelsrtcontrole_status == 2)) &&
actief && iresult.hasCTRWrite &&
((isc_options & 4) == 4);
((isc_options & 4) == 4) &&
!isScenario;
// Afronden kan vanuit elke status. Alleen vanuit status Gereed gemeld/Afgemeld(5) kan het zonder gegevens in te vullen.
iresult.canInspFinish = iresult.readuse && invoerAfterNext &&
//(ins_deelsrtcontrole_status == 5 ||
// (ins_deelsrtcontrole_status < 5 && ((isc_options & 4) != 4))) &&
actief && iresult.hasCTRWrite &&
((isc_options & 8) == 8);
((isc_options & 8) == 8) &&
!isScenario;
// Alleen als de inspectie gereedgemeld is kan SNEL afgerond worden zonder gegevens in te vullen.
iresult.canInspFastFinish = iresult.canInspFinish && ins_deelsrtcontrole_status == 5;
}

View File

@@ -28,8 +28,8 @@ 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 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.
@@ -45,6 +45,7 @@ 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.
@@ -548,9 +549,10 @@ if (ins_key_arr.length == 1)
+ " , " + lcl.xsqla('di.ins_srtcontrole_omschrijving', 'di.ins_srtcontrole_key')
+ " , di.ins_srtcontrole_info info"
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid) eenheid"
+ " , ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1) nextcyclusdate"
+ " , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1)) nextcyclusdatems"
+ " , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key)) nextcyclusdatems_n"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
+ " , ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, null, 1) nextcyclusdate"
+ " , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, null, 1)) nextcyclusdatems"
+ " , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, null)) nextcyclusdatems_n"
+ " FROM defined_inspect di"
+ " , ins_srtcontroledl_xcp xcp"
+ " WHERE di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"

View File

@@ -36,6 +36,8 @@ var tobefinished = 0;
var ingeslotendsc = [];
// Bepaal de objecten/delen in de selectie die ook echt gestart kunnen of mogen worden.
var ctrdisc_key = -1;
if (dlsrtcont_key_arr.length > 0)
{
for (var i = 0; i < ins_key_arr.length; i++)
{
// Als er nog geen inspectierecord aangemaakt is, dan deze overslaan. Dan had je Afmelden/Afronden moeten kiezen.
@@ -64,6 +66,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
tobefinished++;
}
}
}
lcl.set_dialect(ctrdisc_key, "INS_TAB_DISCIPLINE_KEY");
user.anything_todo_or_abort(tobefinished > 0); // We klagen niet over enkele wel en enkele niet.

View File

@@ -97,6 +97,7 @@ insp = {
+ " AND di.ins_deel_key = d.ins_deel_key"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND di.ins_srtcontrole_periode > 0" // Als de periode 0 is dan de inspecties die gaan komen niet meer tonen.
+ " AND di.ins_scenario_key IS NULL"
// Als er een voorlopige inspectie is aangemaakt maar nog niet is afgemeld of afgerond, dan hoeft er geen nieuwe inspectie te worden getoond.
+ " AND NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
@@ -193,6 +194,7 @@ insp = {
+ " AND idsc.ins_controlemode_key = cm.ins_controlemode_key(+)"
+ " AND di.ins_deel_key = " + ins_key
+ " AND di.ins_srtcontrole_periode > 0" // Als de periode 0 is dan de inspecties die gaan komen niet meer tonen.
+ " AND di.ins_scenario_key IS NULL"
+ " AND di.ctr_discipline_key IN (SELECT w.ins_discipline_key"
+ " FROM fac_v_webgebruiker w"
+ " , fac_functie f"

View File

@@ -340,7 +340,8 @@ if (savemode == "P")
var nextdate = null;
if (!oRs.eof)
{ // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", null, 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
}
@@ -432,7 +433,8 @@ else if (savemode == "C")
}
else
{ // Bereken de volgende inspectiedatum.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", null, 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
oRs.Close();
@@ -540,7 +542,8 @@ else if (savemode == "C")
// Bereken de volgende inspectiedatum.
// De functie ins.nextcyclusdate levert de volgende inspectie datum met tijd op onafhankelijk van de eenheid.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", null, 1) nextdate FROM DUAL"
var oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
oRs.Close();
@@ -665,7 +668,8 @@ else if (savemode == "E")
var nextdate = null;
if (!oRs.eof)
{ // Bereken de volgende orginele inspectiedatum (nextdate).
var sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + ", " + ingesloten[0].srtcont_key + ", 1) nexdate FROM DUAL";
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
var sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + ", " + ingesloten[0].srtcont_key + ", null, 1) nexdate FROM DUAL";
var oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nexdate").Value);
@@ -710,7 +714,8 @@ else if (savemode == "E")
mjobdelete = true;
else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3).
{ // Bereken de volgende inspectiedatum.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + ", " + ingesloten[0].srtcont_key + ", 1) nextdate FROM DUAL"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + ", " + ingesloten[0].srtcont_key + ", null, 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
var nextdate = new Date(oRs("nextdate").Value);
var nextdate_jaar = nextdate.getFullYear();

View File

@@ -36,6 +36,8 @@ var dlsrtcont_key = -1;
// Bepaal de objecten/delen in de selectie die
// ook echt gestart kunnen of mogen worden.
var ctrdisc_key = -1;
if (srtcont_key_arr.length > 0)
{
for (var i = 0; i < ins_key_arr.length; i++)
{
var sql = "SELECT idsc.ins_deelsrtcontrole_key"
@@ -75,6 +77,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
tobestart++;
}
}
}
lcl.set_dialect(ctrdisc_key, "INS_TAB_DISCIPLINE_KEY");
user.anything_todo_or_abort(tobestart > 0); // We klagen niet over enkele wel en enkele niet
@@ -89,7 +92,8 @@ for (var i = 0; i < ingesloten.length; i++)
var nextdate = null;
if (ingesloten[i].inspectiestatus > -1)
{ // Bereken de volgende inspectiedatum.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1) nextdate FROM DUAL"
// Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet "null" genomen worden.
sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", null, 1) nextdate FROM DUAL"
oRs = Oracle.Execute(sql);
nextdate = new Date(oRs("nextdate").Value);
}

View File

@@ -206,12 +206,24 @@ function insPlan(rowArray)
var insKeyString = getKeyString(rowArray);
var srtcontrolekeyArray = new Array();
var deelsrtcontrkeyArray = new Array();
var deleted = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
srtcontrolekeyArray[i] = rowdata.insSrtControleKey;
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey < 0)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De periodieke taak aan het array toevoegen.
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
// Als je wilt inplannen is er nog geen inspectie record (ins_deelsrtcontrole_key). De insDeelSrtContrKey is dan -2.
deelsrtcontrkeyArray[i] = rowdata.insDeelSrtContrKey;
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
var insKeyString_arr = insKeyString.split(",");
insKeyString_arr.splice(i - deleted, 1);
insKeyString = insKeyString_arr.join(",");
deleted++;
}
}
// Als je vanuit de lijst 1 inspectie inplant kun je na afloop naar de show mode van deze inspectie (waarvan er net een inspectie record is aangemaakt).
@@ -219,22 +231,42 @@ function insPlan(rowArray)
//if (rowArray.length == 1)
// var url = "appl/ins/ins_inspect.asp?plan=1&ins_keys=" + insKeyString + "&srtcont_keys=" + srtcontrolekeyArray.join(",") + "&deelsrtcont_keys=" + deelsrtcontrkeyArray.join(",");
//else
var url = "appl/ins/ins_edit_inspect.asp?plan=1&ins_keys=" + insKeyString + "&srtcont_keys=" + srtcontrolekeyArray.join(",") + "&deelsrtcont_keys=" + deelsrtcontrkeyArray.join(",");
// Voor Active Situatie (AS) soort controle's hoeft geen scenario key meegegeven te worden.
var url = "appl/ins/ins_edit_inspect.asp?plan=1&ins_keys="
+ insKeyString + "&srtcont_keys="
+ srtcontrolekeyArray.join(",")
+ "&deelsrtcont_keys=" + deelsrtcontrkeyArray.join(",");
FcltMgr.openDetail(url, L("lcl_ins_schedule"));
}
function insStart(rowArray, isMulti)
{
FcltMgr.confirm(rowArray.length == 1 ? L("lcl_ins_starting") : L("lcl_ins_starting_m"), { autoconfirm: isMulti }, function() {
FcltMgr.confirm(rowArray.length == 1? L("lcl_ins_starting") : L("lcl_ins_starting_m"),
{ autoconfirm: isMulti },
function()
{
var insKeyString = getKeyString(rowArray);
var srtcontrolekeyArray = new Array();
for (var i = 0; i < rowArray.length; i++) {
var isScenarioArray = new Array();
var deleted = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
srtcontrolekeyArray[i] = rowdata.insSrtControleKey;
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey < 0)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen.
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
var insKeyString_arr = insKeyString.split(",");
insKeyString_arr.splice(i - deleted, 1);
insKeyString = insKeyString_arr.join(",");
deleted++;
}
}
var data = {
ins_keys: insKeyString,
var data = { ins_keys: insKeyString,
srtcont_key_arr: srtcontrolekeyArray.join(",")
};
protectRequest.dataToken(data);
@@ -247,11 +279,23 @@ function insClose(rowArray, isMulti, fromfinish)
var insKeyString = getKeyString(rowArray);
var srtcontrolekeyArray = new Array();
var deelsrtcontrkeyArray = new Array();
var deleted = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
srtcontrolekeyArray[i] = rowdata.insSrtControleKey;
deelsrtcontrkeyArray[i] = rowdata.insDeelSrtContrKey;
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey < 0)
{ // 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;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
var insKeyString_arr = insKeyString.split(",");
insKeyString_arr.splice(i - deleted, 1);
insKeyString = insKeyString_arr.join(",");
deleted++;
}
}
// Als je vanuit de lijst 1 inspectie sluit kun je na afloop naar de show mode van deze inspectie (ongeacht of ar al een inspectie record aanwezig was).
@@ -279,13 +323,25 @@ function insFinish(rowArray, isMulti)
// Als er 1 inspectie is die niet direct Afgerond(6) kan worden dan heb ik de Gereed meld gegevens nodig.
// Dan moet ik de gegevens invullen via insClose.
var mustClose = false;
var deleted = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
deelsrtcontrkeyArray[i] = rowdata.insDeelSrtContrKey;
// Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren.
if (!rowdata.insScenKey || rowdata.insScenKey < 0)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen.
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
isc_status = rowdata.ins_status;
mustClose = mustClose || (isc_status != 5);
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
var insKeyString_arr = insKeyString.split(",");
insKeyString_arr.splice(i - deleted, 1);
insKeyString = insKeyString_arr.join(",");
deleted++;
}
}
if (mustClose)
{ // Via insClose scherm de gegevens invullen.

View File

@@ -28,14 +28,16 @@ FCLTHeader.Requires({ plugins: ["jQuery", "suggest", "kenmerk"] });
// Eigenlijk tot nu toe geen multi ins_key waarden. Slechts <20><>n ins_key waarden wordt gesubmit.
var ins_key = getQParamInt("ins_key");
var srtcont_key = getQParamInt("srtcont_key", -1); // voorgekozen inspectiesoort vanuit MJOB of Graphics thema
var srtcont_key = getQParamInt("srtcont_key", -1); // voorgekozen inspectiesoort vanuit MJOB of Graphics thema.
var scen_key = getQParamInt("scen_key", -1); // Scenario.
var isScenario = scen_key > 0;
var deelsrtcont_key = getQParamInt("deelsrtcont_key", -1); // bestaande inspectie
var transitParam = buildTransitParam(["srtcont_key", "deelsrtcont_key"]);
var add = getQParamInt("add", 0) == 1; // Controle inspectie (ins_srtcontrole) waarvan de periode op 0 staat actief maken.
var ins_xcp_active_cost = S("ins_xcp_active_cost");
// Mag ik de exceptions (xcp) waarden van de taak wijzigen?
var this_ins = ins.func_enabled_deel(ins_key, {srtcont_key: srtcont_key});
var this_ins = ins.func_enabled_deel(ins_key, {srtcont_key: srtcont_key, isScenario: isScenario? true : null});
user.anything_todo_or_abort((srtcont_key > 0 && this_ins.canShowXcp) || (srtcont_key < 0 && this_ins.hasAnyReadXcp));
var isMJOB = false;
@@ -69,7 +71,10 @@ if (srtcont_key > 0)
+ " , ins_srtdeel isd"
+ " WHERE dix.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND dix.ins_deel_key = " + ins_key
+ " AND dix.ins_srtcontrole_key = " + srtcont_key;
+ " AND dix.ins_srtcontrole_key = " + srtcont_key
+ (isScenario
? " AND dix.ins_scenario_key = " + scen_key
: "");
var oRs = Oracle.Execute(sql);
isMJOB = oRs("ctr_ismjob").Value == 1;
xcp_eenheid = oRs("ins_srtcontrole_eenheid").Value;
@@ -112,12 +117,14 @@ if (srtcont_key > 0)
+ " , xcp.ins_srtcontroledl_xcp_aanteh"
+ " , xcp.ins_scenario_key"
+ " , isc.ins_srtcontrole_opmerking"
+ " , isc.ins_scenario_key"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " , ins_srtcontrole isc"
+ " WHERE xcp.ins_deel_key = " + ins_key
+ " AND xcp.ins_srtcontrole_key = " + srtcont_key
+ " AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key";
+ " AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ (isScenario
? " AND xcp.ins_scenario_key = " + scen_key
: " AND xcp.ins_scenario_key IS NULL");
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
@@ -572,6 +579,7 @@ if (srtcont_key > 0)
<body class="modal" id="mod_insxcp">
<form name="u2" action="ins_xcp_save.asp?ins_key=<%=ins_key%><%=transitParam%>" method="post">
<input type="hidden" id="mode" name="mode" value="1">
<input type="hidden" id="scen_key" name="scen_key" value="<%=scen_key%>">
<% BLOCK_START("insXcp", L("lcl_ins_interval_kenmerken"))
// mogelijke inspecties op dit object/ deze objecten
@@ -581,7 +589,125 @@ if (srtcont_key > 0)
var cntdeel = Oracle.Execute(sql)(0).Value;
var sql = "SELECT *"
+ " FROM (SELECT di.ins_srtcontrole_key"
+ " FROM ("
// Alle Active Situatie (AS) soort controle's die geen uitzondering (XCP) record hebben maar wel een scenario.
+ (!isScenario
? " SELECT di.ins_srtcontrole_key"
+ " , " + lcl.xsqla('di.ins_srtcontrole_omschrijving', 'di.ins_srtcontrole_key')
+ " , di.ins_srtcontrole_mode modus"
+ " , di.ins_deel_aantal aantal_std"
+ " , null aantal_xcp"
+ " , di.ins_srtdeel_eenheid aanteh_std"
+ " , null aanteh_xcp"
+ " , di.ins_srtcontrole_eenheid eenheid_std"
+ " , -1 eenheid_xcp"
+ " , di.ins_srtcontrole_periode periode_std"
+ " , null periode_xcp"
+ " , di.ins_srtcontrole_bits bits_std"
+ " , null bits_xcp"
+ " , di.ins_srtcontrole_groep groep_std"
+ " , null groep_xcp"
+ " , di.ins_srtcontrole_kosten kosten_std1"
+ " , null kosten_xcp1"
+ " , di.ins_srtcontrole_kosten2 kosten_std2"
+ " , null kosten_xcp2"
+ " , di.ins_srtcontrole_kosten3 kosten_std3"
+ " , null kosten_xcp3"
+ " , di.ins_srtcontrole_uren uren_std"
+ " , null uren_xcp"
+ " , di.ins_srtcontrole_materiaal materiaal_std"
+ " , null materiaal_xcp"
+ " , di.ins_srtcontrole_percentage perc_std"
+ " , null perc_xcp"
+ " , di.ins_srtcontrole_opmerking opmerk_std"
+ " , null opmerk_xcp"
+ " , -1 xcp_key"
+ " , null startdate_xcp"
+ " , null start_xcp_dag"
+ " , null start_xcp_maand"
+ " , null start_xcp_jaar"
+ " , di.ins_srtcontrole_eind eind_std"
+ " , TO_CHAR(di.ins_srtcontrole_eind, 'DD') eind_std_dag"
+ " , TO_CHAR(di.ins_srtcontrole_eind, 'MM') eind_std_maand"
+ " , TO_CHAR(di.ins_srtcontrole_eind, 'YYYY') eind_std_jaar"
+ " , null eind_xcp"
+ " , null eind_xcp_dag"
+ " , null eind_xcp_maand"
+ " , null eind_xcp_jaar"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, null, 1), 'DD') nextdate_dag"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, null, 1), 'MM') nextdate_maand"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, null, 1), 'YYYY') nextdate_jaar"
+ " , di.ctr_ismjob ismjob"
+ " , CASE"
+ " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole sdc"
+ " WHERE sdc.ins_deel_key = di.ins_deel_key"
+ " AND sdc.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND sdc.ins_deelsrtcontrole_status = 6) > 0"
+ " THEN 1"
+ " ELSE 0"
+ " END hascontroles"
+ " FROM ins_v_defined_inspect di"
+ " WHERE di.ins_deel_key = " + ins_key
// De xcp_periode overruled de standaard periode. De xcp_periode kan/mag NULL zijn maar de standaard periode niet.
// Mogelijke waarden van de standaard periode en xcp periode:
// ins_srtcontrole_periode ins_srtcontroledl_xcp_periode uitleg
// 0 NULL een inactieve soort controle die ook geldt voor het object
// 1..n NULL een actieve soort controle geldt ook voor het object.
// 0 1 een standaard niet actieve controle is voor het object actief gemaakt.
// 1..n 0 een standaard actieve controle is voor het object inactief gemaakt.
+ (add
? " AND di.ins_srtcontrole_periode <= 0" // Inactieve soort controles tonen.
: " AND di.ins_srtcontrole_periode > 0") // Actieve soort controles tonen.
+ (srtcont_key > 0
? " AND di.ins_srtcontrole_key = " + srtcont_key
: "")
+ " AND di.ctr_discipline_key IN (SELECT w.ins_discipline_key"
+ " 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 NOT EXISTS (SELECT xcp.ins_srtcontroledl_xcp_key" // Geen uitzondering (XCP) record.
+ " FROM ins_srtcontroledl_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND xcp.ins_deel_key = di.ins_deel_key"
+ " AND xcp.ins_scenario_key IS NULL)"
+ " AND EXISTS (SELECT xcp.ins_srtcontroledl_xcp_key" // Wel een scenario aanwezig
+ " FROM ins_srtcontroledl_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND xcp.ins_deel_key = di.ins_deel_key"
+ " AND xcp.ins_scenario_key IS NOT NULL)"
+ " GROUP BY di.ins_srtcontrole_key"
+ " , di.ins_srtcontrole_omschrijving"
+ " , di.ins_srtcontrole_mode"
+ " , di.ins_deel_aantal"
+ " , di.ins_srtdeel_eenheid"
+ " , di.ins_srtcontrole_periode"
+ " , di.ins_srtcontrole_eenheid"
+ " , di.ins_srtcontrole_bits"
+ " , di.ins_srtcontrole_groep"
+ " , di.ins_srtcontrole_kosten"
+ " , di.ins_srtcontrole_kosten2"
+ " , di.ins_srtcontrole_kosten3"
+ " , di.ins_srtcontrole_uren"
+ " , di.ins_srtcontrole_materiaal"
+ " , di.ins_srtcontrole_percentage"
+ " , di.ins_srtcontrole_opmerking"
+ " , di.ins_srtcontrole_eind"
+ " , di.ins_deel_key"
+ " , di.ctr_ismjob"
+ " HAVING COUNT(*) = " + cntdeel // Als multi dan alleen de inspecties die voor *alle* objecten gelden
+ " UNION"
: "")
// Alle soort controles van de scenario's.
// en
// Alle Active Situatie (AS) soort controle's die:
// a) geen uitzondering (XCP) record hebben en geen scenario.
// b) een uitzondering (XCP) record hebben.
+ " SELECT di.ins_srtcontrole_key"
+ " , " + lcl.xsqla('di.ins_srtcontrole_omschrijving', 'di.ins_srtcontrole_key')
+ " , di.ins_srtcontrole_mode modus"
+ " , di.ins_deel_aantal aantal_std"
@@ -623,9 +749,9 @@ if (srtcont_key > 0)
+ " , TO_CHAR(xcp.ins_srtcontroledl_xcp_eind, 'DD') eind_xcp_dag"
+ " , TO_CHAR(xcp.ins_srtcontroledl_xcp_eind, 'MM') eind_xcp_maand"
+ " , TO_CHAR(xcp.ins_srtcontroledl_xcp_eind, 'YYYY') eind_xcp_jaar"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, 1), 'DD') nextdate_dag"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, 1), 'MM') nextdate_maand"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, 1), 'YYYY') nextdate_jaar"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, " + (isScenario? scen_key : "null") + ", 1), 'DD') nextdate_dag"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, " + (isScenario? scen_key : "null") + ", 1), 'MM') nextdate_maand"
+ " , TO_CHAR(ins.nextcyclusdate (di.ins_deel_key, di.ins_srtcontrole_key, " + (isScenario? scen_key : "null") + ", 1), 'YYYY') nextdate_jaar"
+ " , di.ctr_ismjob ismjob"
+ " , CASE"
+ " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)"
@@ -651,7 +777,7 @@ if (srtcont_key > 0)
+ (add
? " AND COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode) <= 0" // Inactieve soort controles tonen.
+ " AND xcp.ins_srtcontroledl_xcp_periode IS NULL" // Soort controles die niet overruled zijn tonen.
: " AND (COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode) > 0" // Actieve soort controles tonen
: " AND (COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode) > 0" // Actieve soort controles tonen.
+ " OR ins_srtcontroledl_xcp_periode = 0)") // Soort controles die inactief zijn gemaakt tonen.
+ (srtcont_key > 0
? " AND di.ins_srtcontrole_key = " + srtcont_key
@@ -664,6 +790,9 @@ if (srtcont_key > 0)
+ " AND w.fac_gebruiker_prs_level_write < 9"
+ " AND w.fac_gebruiker_alg_level_write < 9"
+ " AND w.prs_perslid_key = " + user_key + ")"
+ (isScenario
? " AND xcp.ins_scenario_key = " + scen_key
: " AND xcp.ins_scenario_key IS NULL")
+ " GROUP BY di.ins_srtcontrole_key"
+ " , di.ins_srtcontrole_omschrijving"
+ " , di.ins_srtcontrole_mode"
@@ -699,8 +828,8 @@ if (srtcont_key > 0)
+ " , xcp.ins_srtcontroledl_xcp_startdat"
+ " , xcp.ins_srtcontroledl_xcp_eind"
+ " , di.ctr_ismjob"
+ " HAVING COUNT(*) = " + cntdeel // Als multi dan alleen de inspecties die voor *alle* objecten gelden
+ " ORDER BY di.ins_srtcontrole_omschrijving)";
+ " HAVING COUNT(*) = " + cntdeel + ")" // Als multi dan alleen de inspecties die voor *alle* objecten gelden
+ " ORDER BY ins_srtcontrole_omschrijving";
FCLTselector("sel_srtcontrole",
sql,
{ label: L("lcl_ins_controle"),

View File

@@ -22,7 +22,9 @@ var JSON_Result = true;
<%
var ins_key = getQParamInt("ins_key");
var srtcontrole_key = getFParamInt("sel_srtcontrole"); // ins_srtcontrole_key.
var this_ins = ins.func_enabled_deel(ins_key, {srtcont_key: srtcontrole_key});
var scen_key = getFParamInt("scen_key", -1); // Scenario.
var isScenario = scen_key > 0;
var this_ins = ins.func_enabled_deel(ins_key, {srtcont_key: srtcontrole_key, isScenario: isScenario? true : null});
// Ophalen standaard waarden.
var sql = "SELECT d.ins_deel_aantal"
@@ -78,7 +80,6 @@ var ctrdisc_oms = oRs("ins_discipline_omschrijving").Value;
var vervaldatum_std = new Date(oRs("ins_srtcontrole_eind").Value);
oRs.Close();
// Mag ik de parameters van het inspectie object aanpassen?
user.anything_todo_or_abort(this_ins.canChangeXcp);
@@ -142,8 +143,9 @@ else
bits = null;
// Als de nieuwe waarde gelijk is aan de standaard waarden dan deze niet opslaan.
if (!isScenario)
{
// Als de nieuwe waarden gelijk is aan de standaard waarden dan deze niet opslaan.
var datumdiffer = vervaldatum != null && (vervaldatum? vervaldatum.getTime() : null) != (vervaldatum_std? vervaldatum_std.getTime() : null)
var paramsdiffer = ((eenheid != -1 && (eenheid != eenheid_std || (periode != null && periode != periode_std) || (bits != null && bits != bits_std))) ||
(aantal != null && aantal != aantal_std) ||
@@ -158,11 +160,12 @@ var paramsdiffer = ((eenheid != -1 && (eenheid != eenheid_std || (periode != nul
(opmerk != "" && opmerk != opmerk_std) ||
datumdiffer || startdatum != null);
var deactivate = periode_std == 0 && (periode == null || periode == 0); // Beide periodes zijn 0. Controle wordt inactief. Uitzonderings regel kan weg in ins_srtcontroledl_xcp.
if (paramsdiffer && !deactivate)
}
if (isScenario || (paramsdiffer && !deactivate))
{ // parameters wijken af van de standaard of er is een startdatum ingevuld.
var result = { success: true, srtcontroledl_xcp_key: xcp_key };
// De velden opslaan (scenario key blijft hetzelfde dus hoeft niet opgeslagen te worden).
var fields = [ { dbs: "ins_deel_key", typ: "key", val: ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", frm: "sel_srtcontrole" },
{ dbs: "ins_srtcontroledl_xcp_eenheid", typ: "number", val: (eenheid == -1 || eenheid == eenheid_std || eenheid < 0? null : eenheid),
@@ -203,7 +206,7 @@ if (paramsdiffer && !deactivate)
fields.push({ dbs: "ins_srtcontroledl_xcp_materia", typ: "float", val: (materiaal == null || materiaal == materiaal_std? null : materiaal),
track: (ins_key > 0? L("ins_srtcontrole_materiaal") + " (" + S("currency_pref").replace(/^\s+|\s+$/gm,'') + ")" : null) });
if (xcp_key < 0) // Nieuwe inspectie
if (!isScenario && xcp_key < 0) // Nieuwe inspectie.
{
fields.push({ dbs: "ins_srtcontroledl_xcp_key", typ: "key", seq: "ins_s_srtcontroledl_xcp_key" });
var insIns = buildInsert("ins_srtcontroledl_xcp", fields);
@@ -217,7 +220,7 @@ if (paramsdiffer && !deactivate)
var insUpd = buildTrackingUpdate("ins_srtcontroledl_xcp", " ins_srtcontroledl_xcp_key = " + xcp_key, fields);
var err = Oracle.Execute(insUpd.sql, true);
if (insUpd && insUpd.trackarray.length)
if (!isScenario && insUpd && insUpd.trackarray.length)
shared.trackaction("INSUPD", ins_key, L("lcl_ins_controle_obj_upd").format(ctrdisc_oms, srtcontrole_oms) + "\n" + insUpd.trackarray.join("\n"));
}
}
@@ -235,7 +238,8 @@ else
// Record verwijderen.
var sql = "DELETE FROM ins_srtcontroledl_xcp"
+ " WHERE ins_deel_key = " + ins_key
+ " AND ins_srtcontrole_key = " + srtcontrole_key;
+ " AND ins_srtcontrole_key = " + srtcontrole_key
+ " AND ins_scenario_key IS NULL";
var err = Oracle.Execute(sql, true);
shared.trackaction("INSUPD", ins_key, L("lcl_ins_controle_obj_upd").format(ctrdisc_oms, srtcontrole_oms) + "\n" + L("lcl_ins_control_del_exception"));