FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).

svn path=/Website/trunk/; revision=69956
This commit is contained in:
Maykel Geerdink
2025-08-11 12:29:50 +00:00
parent fbafaafbd6
commit 8fd30b06ed
10 changed files with 443 additions and 324 deletions

View File

@@ -1132,7 +1132,7 @@ ins = {checkAutLevel:
iresult.canShowXcp = ((iresult.hasCTRUSERead && !isScenario) ||
(iresult.hasCTRSENRead && isScenario)) &&
(iresult.canRead("WEB_INSMAN") ); // Exceptions (xcp) waarden inspecties/taken bekijken (waarden in ins_srtcontroledl_xcp tabel).
iresult.canChangeXcp = ((iresult.hasCTRUSEWrite && !isScenario && iresult.canWrite("WEB_INSMAN")) ||
iresult.canChangeXcp = ((iresult.hasCTRUSEWrite && !isScenario && iresult.canWrite("WEB_INSMAN")) ||
(iresult.hasCTRSENWrite && isScenario)); // Exceptions (xcp) waarden inspecties/taken wijzigen (waarden in ins_srtcontroledl_xcp tabel).
iresult.canChangeCycle = canChangeCycle;
@@ -5393,19 +5393,21 @@ ins = {checkAutLevel:
+ " AND idsc.ins_srtcontrole_key = cv.ins_srtcontrole_key"
+ " AND idsc.ins_scenario_key = 1"
+ " AND idsc.ins_deelsrtcontrole_status = 2) idsc_freezed"
+ (!fulldetails
? " , CASE"
+ " WHEN ((SELECT COUNT(idsc.ins_deel_key)"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = CV.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = CV.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status = 2"
+ " AND EXTRACT(YEAR FROM idsc.ins_deelsrtcontrole_freezedate) = CV.vervangingsjaar) = 0)"
+ " AND CV.vervangingsjaar = " + mjb_freeze_or_sys_year
+ " THEN 1"
+ " ELSE 0"
+ " END tobefreezed"
: "")
+ " , CASE"
+ " WHEN ((SELECT COUNT(idsc.ins_deel_key)"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = CV.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = CV.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status = 2"
+ " AND EXTRACT(YEAR FROM idsc.ins_deelsrtcontrole_freezedate) = CV.vervangingsjaar) = 0)"
+ " AND CV.vervangingsjaar = " + mjb_freeze_or_sys_year
+ " THEN 1"
+ " ELSE 0"
+ " END tobefreezed"
+ (fulldetails
? " , 1 aantaltaken"
: " , SUM(1) OVER() AS aantaltaken"
+ " , 1 aantaltaken_withoutempty")
// Bepaling in welk jaar er een inspectie is gepland.
// 1) In het jaar dat er nog een geaccordeerde/bevroren(2) inspectie actief is.
// 2) In het jaar van de plandatum.
@@ -5671,7 +5673,10 @@ ins = {checkAutLevel:
+ " , SUM(ROUND(orgbedrag, 0)) orgbedrag" // Bedragen per regel afronden op hele euro s. Dit gebeurt ook bij Groepering "Taak" zodat de bedragen bij beiden dan gelijk zijn.
+ " , hasscenario2"
+ " , ins_scenario_key"
+ " , SUM(freezed) AS freezed"
+ " , SUM(tobefreezed) tobefreezed"
+ " , aantaltaken"
+ " , SUM(aantaltaken_withoutempty) aantaltaken_withoutempty"
+ (show_scenario_oms ? ", scenario_oms, scenario_aantal" : "")
+ " FROM (" + sql_cost + ")"
+ sql_cost_where
@@ -5683,6 +5688,7 @@ ins = {checkAutLevel:
+ " , vervangingsjaar"
+ " , hasscenario2"
+ " , ins_scenario_key"
+ " , aantaltaken"
+ (show_scenario_oms ? ", scenario_oms, scenario_aantal" : "");
}
@@ -5694,9 +5700,10 @@ ins = {checkAutLevel:
+ (fulldetails
? " , SUM(completed) AS completed"
+ " , SUM(rejected) AS rejected"
+ " , SUM(freezed) AS freezed"
+ " , SUM(execute) AS execute"
: " , SUM(tobefreezed) AS tobefreezed")
: " , SUM(aantaltaken_withoutempty) aantaltaken_withoutempty")
+ " , SUM(freezed) AS freezed"
+ " , SUM(tobefreezed) AS tobefreezed"
+ " FOR vervangingsjaar IN (" + jaren.join(",") + ") )";
if (scenario > 1)

View File

@@ -36,6 +36,7 @@ var srtcont_key_arr = getFParamKeyArray("srtcont_key_arr", []);
var multi = ins_key_arr.length > 1;
var freeze = getFParamInt("freeze", 0) == 1;
var groupby = getFParamInt("groupby", 9);
var aantaltaken = getFParamInt("aantaltaken", 0);
var inflatiepct = S("mjb_inflation");
var inflatiefactor = 1 + (inflatiepct / 100);
@@ -43,6 +44,8 @@ var mjb_start_year = S("mjb_start_year");
var mjb_freeze_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
var ingesloten = [];
var badbody;
var oldfreeze = false;
if (freeze && groupby < 9)
{
var screenmode = getQParamInt("mode", 1); // Schermmode 1=Begroting (aankomende jaren) (=default), 2=Realisatie (huidige en lopende jaren, 3=Uitvoering (koppelen (uitvoerend) van taken aan een melding).
@@ -125,7 +128,7 @@ if (freeze && groupby < 9)
var result = {key: "", success: true, multi: multi, start: true };
var oRs = Oracle.Execute(mjblist_sql);
user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet
// Hier geen "user.anything_todo_or_abort(!oRs.eof);". We geven altijd een melding terug hoeveel taken er geaccodeerd zijn.
var freeze_sql = "BEGIN ";
while (!oRs.eof)
@@ -299,317 +302,340 @@ else
}
lcl.set_dialect(ctrdisc_key, "CTR_DISCIPLINE_KEY");
mld.dialectIsSet = true;
var badbody = (ins_key_arr.length == 1 && ins_deelsrtcontrole_status == 2 && freezedate < mjb_freeze_year? L("lcl_shared_old_freeze").format(freezedate) : null);
user.anything_todo_or_abort(tobestart > 0, badbody); // We klagen niet over enkele wel en enkele niet
oldfreeze = (tobestart == 0 && ins_key_arr.length == 1 && ins_deelsrtcontrole_status == 2 && freezedate < mjb_freeze_year);
badbody = (oldfreeze? L("lcl_shared_old_freeze").format(freezedate) : null);
// Hier geen "user.anything_todo_or_abort(tobestart > 0, badbody);". We geven altijd een melding terug hoeveel taken er terug gezet zijn.
var result = {key: "", success: true, multi: multi, start: true };
for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking van het starten.
if (!oldfreeze)
{
for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking van het starten.
if (ingesloten[i].dlsrtcont_key < 0)
{ // Er is nog geen inspectie (ins_deelsrtcontrole) record aangemaakt. Eerst maar eens de waarden van de velden bepalen.
// Als er al een inspectie is geweest kan er een volgende inspectiedatum berekend worden.
var nextdate = null;
if (ingesloten[i].inspectiestatus > -1)
{ // Bereken de volgende orginele inspectiedatum (nextdate).
// Alleen Active Situatie (AS) soort controle's kunnen gestart worden dus voor scenario key moet 1 genomen worden.
// Het is mjob. De laatste inspectie kan niet succesvol zijn. Dus ins.nextcyclusdate(ins_key, srtcont_key, scen_key) kan ik hier niet gebruiken.
if (ingesloten[i].dlsrtcont_key < 0)
{ // Er is nog geen inspectie (ins_deelsrtcontrole) record aangemaakt. Eerst maar eens de waarden van de velden bepalen.
// Als er al een inspectie is geweest kan er een volgende inspectiedatum berekend worden.
var nextdate = null;
if (ingesloten[i].inspectiestatus > -1)
{ // Bereken de volgende orginele inspectiedatum (nextdate).
// Alleen Active Situatie (AS) soort controle's kunnen gestart worden dus voor scenario key moet 1 genomen worden.
// Het is mjob. De laatste inspectie kan niet succesvol zijn. Dus ins.nextcyclusdate(ins_key, srtcont_key, scen_key) kan ik hier niet gebruiken.
// func_get_nextdate kijkt naar en houd rekening met onderstaande 4 punten.
// Er is al een inspectie geweest als ik binnen deze if ben.
// Nummer 4 komt daarom niet voor want dan was je in de else beland.
// 1) De laatste inspectie is succesvol voltooid: De volgende met ins.nextcyclusdate() te berekenen.
// 2) De laatste inspectie is NIET succesvol voltooid. De volgende is in het freeze jaar.
// 3) De laatste inspectie is geaccordeerd/bevroren/gestart(2): De volgende is een periode verder als het freeze jaar.
// 4) Er is geen inspectie geweest of gestart.
nextdate = ins.func_get_nextdate(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1, {mjob: ingesloten[i].ismjob});
// func_get_nextdate kijkt naar en houd rekening met onderstaande 4 punten.
// Er is al een inspectie geweest als ik binnen deze if ben.
// Nummer 4 komt daarom niet voor want dan was je in de else beland.
// 1) De laatste inspectie is succesvol voltooid: De volgende met ins.nextcyclusdate() te berekenen.
// 2) De laatste inspectie is NIET succesvol voltooid. De volgende is in het freeze jaar.
// 3) De laatste inspectie is geaccordeerd/bevroren/gestart(2): De volgende is een periode verder als het freeze jaar.
// 4) Er is geen inspectie geweest of gestart.
nextdate = ins.func_get_nextdate(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1, {mjob: ingesloten[i].ismjob});
}
//else Er zijn nog geen inspecties geweest voor dit object. Dit wordt de eerste inspectie.
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
// Plandatum blijft leeg.
var fields = [ { dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" },
{ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
{ dbs: "ins_deelsrtcontrole_status", typ: "key", val: 2 },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: (nextdate? nextdate : null) }
];
}
//else Er zijn nog geen inspecties geweest voor dit object. Dit wordt de eerste inspectie.
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
// Plandatum blijft leeg.
var fields = [ { dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" },
{ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
{ dbs: "ins_deelsrtcontrole_status", typ: "key", val: 2 },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: (nextdate? nextdate : null) }
];
}
else
{
var fields = [];
}
// Als je mag bevriezen (canInspFreeze) dan zijn er kosten aanwezig in het jaar mjb_freeze_year.
if (freeze && (ingesloten[i].kosten >= 0))
{ // Uitzoeken of de taak door een hogere prio taak wordt uitgevoerd (kosten zijn 0 in het overzicht).
// In dat geval zijn de freeze kosten 0 en plaatsen we een opmerking.
// Voor MJOB is de interval modus actief.
// Neem de Active Situatie (AS) (Scenario = 1).
var sql = "SELECT insp.ins_deelsrtcontrole_key"
+ " , insp.ins_srtcontrole_level"
// Bepaling in welk jaar er een inspectie is gepland.
// 1) In het jaar dat er nog een geaccordeerde/bevroren(2) inspectie actief is.
// 2) In het jaar van de plandatum.
// 3) In het jaar van de startdatum.
// 4) a) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Controle(1).
// Volgende inspectie is in het freeze jaar.
// b) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Vervanging(2) of Certificering(3).
// Nextdate is na het freeze jaar?
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
// Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is het jaar van de nextdate.
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
// Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is in het jaar "nextdatum + periode".
// c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
// Nee) Volgende inspectie is in het freeze jaar.
+ " , CASE"
+ " WHEN"
+ " EXTRACT(YEAR FROM "
+ " COALESCE(CASE" // Taak is geaccordeerd (gefreezed). Freeze jaar is het huidige (vervangings)jaar.
+ " WHEN insp.ins_deelsrtcontrole_status IN (2, 3)"
+ " THEN insp.ins_deelsrtcontrole_freezedate"
+ " ELSE NULL"
+ " END"
+ " , insp.plandatum"
+ " , CASE WHEN insp.laatste IS NULL THEN insp.ins_srtcontroledl_xcp_startdat ELSE NULL END"
+ " , CASE"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type = 1" // 1: Controle.
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type != 1" // 2: Vervanging, 3: Certificering.
+ " THEN" // Er is nog geen inspectie geweest
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > " + mjb_freeze_year
+ " THEN" // Nextdate is na de freeze datum.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(insp.inspectie_next0, -1 * 12 * insp.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
+ " EXTRACT(YEAR FROM ADD_MONTHS(insp.inspectie_next0, -1 * 12 * insp.ins_srtcontrole_periode)) != EXTRACT(YEAR FROM insp.ins_deel_aanmaak)"
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Vorige inspectie ligt tussen start en freeze jaar (Nu ligt er ook tussen).
+ " ELSE insp.inspectie_next0"
+ " END"
+ " ELSE" // Nextdate is voor of in het freeze jaar.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) >= " + mjb_start_year
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Nextdate tussen start en freeze jaar.
+ " ELSE ADD_MONTHS(insp.inspectie_next0, 12 * insp.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
+ " END"
+ " END"
+ " ELSE" // Laatste IS NOT NULL. Er is al een inspectie geweest.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > EXTRACT(YEAR FROM SYSDATE)"
+ " THEN insp.inspectie_next0" // Volgende inspectie is in de toekomst.
// Geaccordeerde laatste inspectie wordt in het begin al afgevangen.
// en niet hier zoals bij org_nextdate in functie getmjblist_sql.
+ " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
+ " END"
+ " END)) = " + mjb_freeze_year
+ " THEN 1"
+ " ELSE 0"
+ " END isFreezeYear"
+ " FROM ("
+ " SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_key"
+ " , xcp.ctr_discipline_key"
+ " , xcp.ins_srtcontrole_periode"
+ " , xcp.ins_deel_aanmaak"
+ " , xcp.ctr_controle_type"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , idsc.ins_deelsrtcontrole_freezedate"
+ " , idsc.ins_deelsrtcontrole_plandatum plandatum"
+ " , ins_srtcontroledl_xcp_startdat"
+ " , xcp.ins_srtcontrole_level"
+ " , ins.nextcyclusdate(xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 0) inspectie_next0"
+ " , (SELECT MAX(idsc2.ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1) laatste"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_v_defined_inspect_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
+ " AND xcp.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND xcp.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc.ins_deel_key(+) = " + ingesloten[i].ins_key
+ " AND idsc.ins_scenario_key(+) = 1"
+ " AND xcp.ins_scenario_key = 1"
+ " AND xcp.ctr_ismjob = " + (ingesloten[i].ismjob? "1" : "0")
+ " 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 = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1"
+ " ))"
// Zichtzelf uitsluiten.
+ " AND xcp.ins_srtcontrole_key != " + ingesloten[i].srtcont_key
// Alleen soort controles met een lager level opleveren.
+ " AND xcp.ins_srtcontrole_level < (SELECT isc.ins_srtcontrole_level"
+ " FROM ins_srtcontrole isc"
+ " WHERE isc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")"
+ " AND xcp.ins_srtcontrole_periode > 0" // Alleen actieve taken.
+ " ) insp"
+ " ORDER BY isFreezeYear DESC";
var oRs = Oracle.Execute(sql);
var has_higherprio = !oRs.eof && oRs("isFreezeYear").Value == 1; // Is er een hoger prio soort controle in het freeze jaar?
oRs.Close();
fields.push( { dbs: "ins_deelsrtcontrole_freezecost", typ: "float", val: (has_higherprio? 0 : ingesloten[i].kosten) } );
fields.push( { dbs: "ins_deelsrtcontrole_freezedate", typ: "datetime", val: new Date(mjb_freeze_year, 0, 1) } ); // Freezedate eerste dag van freeze year.
// Als er een hoger prio soort controle aanwezig is in het freeze jaar, dan een opmerking toevoegen.
if (has_higherprio)
fields.push( { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", val: L("lcl_mjb_performed_high") } );
}
if (ingesloten[i].dlsrtcont_key < 0)
{ // Inspectie (ins_deelsrtcontrole) record aanmaken.
ins.testInspectInsert(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1);
var insIns = buildInsert("ins_deelsrtcontrole", fields);
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true);
if (err.friendlyMsg)
else
{
result.warning = err.friendlyMsg;
result.success = false;
var fields = [];
}
}
else
{ // Inspectie (ins_deelsrtcontrole) record aanpassen.
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields);
// Velden voor het bevriezen/accorderen opslaan.
var err = Oracle.Execute(insUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
// Als je mag bevriezen (canInspFreeze) dan zijn er kosten aanwezig in het jaar mjb_freeze_year.
if (freeze && (ingesloten[i].kosten >= 0))
{ // Uitzoeken of de taak door een hogere prio taak wordt uitgevoerd (kosten zijn 0 in het overzicht).
// In dat geval zijn de freeze kosten 0 en plaatsen we een opmerking.
// Voor MJOB is de interval modus actief.
// Neem de Active Situatie (AS) (Scenario = 1).
var sql = "SELECT insp.ins_deelsrtcontrole_key"
+ " , insp.ins_srtcontrole_level"
// Bepaling in welk jaar er een inspectie is gepland.
// 1) In het jaar dat er nog een geaccordeerde/bevroren(2) inspectie actief is.
// 2) In het jaar van de plandatum.
// 3) In het jaar van de startdatum.
// 4) a) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Controle(1).
// Volgende inspectie is in het freeze jaar.
// b) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Vervanging(2) of Certificering(3).
// Nextdate is na het freeze jaar?
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
// Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is het jaar van de nextdate.
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
// Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is in het jaar "nextdatum + periode".
// c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
// Nee) Volgende inspectie is in het freeze jaar.
+ " , CASE"
+ " WHEN"
+ " EXTRACT(YEAR FROM "
+ " COALESCE(CASE" // Taak is geaccordeerd (gefreezed). Freeze jaar is het huidige (vervangings)jaar.
+ " WHEN insp.ins_deelsrtcontrole_status IN (2, 3)"
+ " THEN insp.ins_deelsrtcontrole_freezedate"
+ " ELSE NULL"
+ " END"
+ " , insp.plandatum"
+ " , CASE WHEN insp.laatste IS NULL THEN insp.ins_srtcontroledl_xcp_startdat ELSE NULL END"
+ " , CASE"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type = 1" // 1: Controle.
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type != 1" // 2: Vervanging, 3: Certificering.
+ " THEN" // Er is nog geen inspectie geweest
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > " + mjb_freeze_year
+ " THEN" // Nextdate is na de freeze datum.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(insp.inspectie_next0, -1 * 12 * insp.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
+ " EXTRACT(YEAR FROM ADD_MONTHS(insp.inspectie_next0, -1 * 12 * insp.ins_srtcontrole_periode)) != EXTRACT(YEAR FROM insp.ins_deel_aanmaak)"
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Vorige inspectie ligt tussen start en freeze jaar (Nu ligt er ook tussen).
+ " ELSE insp.inspectie_next0"
+ " END"
+ " ELSE" // Nextdate is voor of in het freeze jaar.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) >= " + mjb_start_year
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Nextdate tussen start en freeze jaar.
+ " ELSE ADD_MONTHS(insp.inspectie_next0, 12 * insp.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
+ " END"
+ " END"
+ " ELSE" // Laatste IS NOT NULL. Er is al een inspectie geweest.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > EXTRACT(YEAR FROM SYSDATE)"
+ " THEN insp.inspectie_next0" // Volgende inspectie is in de toekomst.
// Geaccordeerde laatste inspectie wordt in het begin al afgevangen.
// en niet hier zoals bij org_nextdate in functie getmjblist_sql.
+ " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
+ " END"
+ " END)) = " + mjb_freeze_year
+ " THEN 1"
+ " ELSE 0"
+ " END isFreezeYear"
+ " FROM ("
+ " SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_key"
+ " , xcp.ctr_discipline_key"
+ " , xcp.ins_srtcontrole_periode"
+ " , xcp.ins_deel_aanmaak"
+ " , xcp.ctr_controle_type"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , idsc.ins_deelsrtcontrole_freezedate"
+ " , idsc.ins_deelsrtcontrole_plandatum plandatum"
+ " , ins_srtcontroledl_xcp_startdat"
+ " , xcp.ins_srtcontrole_level"
+ " , ins.nextcyclusdate(xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 0) inspectie_next0"
+ " , (SELECT MAX(idsc2.ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1) laatste"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_v_defined_inspect_xcp xcp"
+ " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
+ " AND xcp.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND xcp.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc.ins_deel_key(+) = " + ingesloten[i].ins_key
+ " AND idsc.ins_scenario_key(+) = 1"
+ " AND xcp.ins_scenario_key = 1"
+ " AND xcp.ctr_ismjob = " + (ingesloten[i].ismjob? "1" : "0")
+ " 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 = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1"
+ " ))"
// Zichtzelf uitsluiten.
+ " AND xcp.ins_srtcontrole_key != " + ingesloten[i].srtcont_key
// Alleen soort controles met een lager level opleveren.
+ " AND xcp.ins_srtcontrole_level < (SELECT isc.ins_srtcontrole_level"
+ " FROM ins_srtcontrole isc"
+ " WHERE isc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")"
+ " AND xcp.ins_srtcontrole_periode > 0" // Alleen actieve taken.
+ " ) insp"
+ " ORDER BY isFreezeYear DESC";
var oRs = Oracle.Execute(sql);
var has_higherprio = !oRs.eof && oRs("isFreezeYear").Value == 1; // Is er een hoger prio soort controle in het freeze jaar?
oRs.Close();
// Tracken van de freezedate en freezedate hoeft niet. Bevriezen/Accorderen gebeurt eenmalig en dan worden de freeze velden gevuld.
// Het bevriezen/accorderen zelf wordt (hieronder) met het zetten van de status op Gestart(2) getrackt.
fields.push( { dbs: "ins_deelsrtcontrole_freezecost", typ: "float", val: (has_higherprio? 0 : ingesloten[i].kosten) } );
fields.push( { dbs: "ins_deelsrtcontrole_freezedate", typ: "datetime", val: new Date(mjb_freeze_year, 0, 1) } ); // Freezedate eerste dag van freeze year.
// Als er een hoger prio soort controle aanwezig is in het freeze jaar, dan een opmerking toevoegen.
if (has_higherprio)
fields.push( { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", val: L("lcl_mjb_performed_high") } );
}
if (ingesloten[i].dlsrtcont_key < 0)
{ // Inspectie (ins_deelsrtcontrole) record aanmaken.
ins.testInspectInsert(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1);
var insIns = buildInsert("ins_deelsrtcontrole", fields);
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true);
if (err.friendlyMsg)
{
result.warning = err.friendlyMsg;
result.success = false;
}
}
else
{ // Inspectie (ins_deelsrtcontrole) record aanpassen.
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields);
// Velden voor het bevriezen/accorderen opslaan.
var err = Oracle.Execute(insUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
// Tracken van de freezedate en freezedate hoeft niet. Bevriezen/Accorderen gebeurt eenmalig en dan worden de freeze velden gevuld.
// Het bevriezen/accorderen zelf wordt (hieronder) met het zetten van de status op Gestart(2) getrackt.
}
}
}
}
for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking en notificatie van het starten.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 2); // In behandeling(2)
var aantalmld = 0;
if (!oldfreeze)
{
for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking en notificatie van het starten.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 2); // In behandeling(2)
// Melding aanmaken bij bevriezen van taak als setting op internal staat.
// De setting "mjb_default_stdmelding" is met FCLT#52905 verwijderd.
// Controleren of er een automatische een melding moet worden aangemaakt.
// Voor zowel periodieke taken als mjob taken kunnen er tegenwoordig automatisch taken aangemaakt worden. Dus altijd controleren.
// Bij MJOB melding aanmaken kan ook via het MJOB-Uitvoering scherm met de actie "Uitvoeren".
sql = "SELECT di.mld_stdmelding_key" // In de view ins_v_defined_inspect is dit de COALESCE van ins_srtcontrole.mld_stdmelding_key en ctr_disc_params.mld_stdmelding_key.
+ " , di.prs_kostenplaats_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_tab_discipline itd"
+ " , ins_v_defined_inspect di"
+ " , mld_stdmelding std"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_scenario_key = isc.ins_scenario_key"
+ " AND isc.ctr_discipline_key = itd.ins_discipline_key"
+ " AND isc.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND idsc.ins_deel_key = di.ins_deel_key"
+ " AND di.mld_stdmelding_key = std.mld_stdmelding_key(+)"
+ " AND std.mld_stdmelding_verwijder IS NULL" // Alleen actuele stdmeldingen.
+ " AND (std.mld_stdmelding_vervaldatum IS NULL OR std.mld_stdmelding_vervaldatum > TRUNC(SYSDATE))" // Alleen actuele stdmeldingen.
+ " AND idsc.ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key;
oRs = Oracle.Execute(sql);
var mld_stdmelding_key = -1;
var prs_kostenplaats_key = -1;
if (!oRs.eof)
{
mld_stdmelding_key = oRs("mld_stdmelding_key").Value || -1;
prs_kostenplaats_key = oRs("prs_kostenplaats_key").Value || -1;
}
oRs.Close();
if (mld_stdmelding_key > 0)
{ // Er is een mld_stdmelding_key bekend. Nu melding aanmaken (1-op-1 relatie).
var stdm_info = mld.mld_stdmeldinginfo(mld_stdmelding_key);
var loc_key = -1;
var bld_key = -1;
var flr_key = -1;
var room_key = -1;
var alg_onroerendgoed_keys = -1;
sql = "SELECT alg_locatie_key,"
+ " alg_gebouw_key,"
+ " alg_verdieping_key,"
+ " alg_ruimte_key"
+ " FROM ins_v_deelenonderdeel isd, alg_v_allonroerendgoed alg"
+ " WHERE ins_deel_key = " + ingesloten[i].ins_key
+ " AND alg_onroerendgoed_keys = isd.ins_alg_ruimte_key"
+ " AND isd.ins_alg_ruimte_type = 'R'"
// Melding aanmaken bij bevriezen van taak als setting op internal staat.
// De setting "mjb_default_stdmelding" is met FCLT#52905 verwijderd.
// Controleren of er een automatische een melding moet worden aangemaakt.
// Voor zowel periodieke taken als mjob taken kunnen er tegenwoordig automatisch taken aangemaakt worden. Dus altijd controleren.
// Bij MJOB melding aanmaken kan ook via het MJOB-Uitvoering scherm met de actie "Uitvoeren".
sql = "SELECT di.mld_stdmelding_key" // In de view ins_v_defined_inspect is dit de COALESCE van ins_srtcontrole.mld_stdmelding_key en ctr_disc_params.mld_stdmelding_key.
+ " , di.prs_kostenplaats_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_srtcontrole isc"
+ " , ins_tab_discipline itd"
+ " , ins_v_defined_inspect di"
+ " , mld_stdmelding std"
+ " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND idsc.ins_scenario_key = isc.ins_scenario_key"
+ " AND isc.ctr_discipline_key = itd.ins_discipline_key"
+ " AND isc.ins_srtcontrole_key = di.ins_srtcontrole_key"
+ " AND idsc.ins_deel_key = di.ins_deel_key"
+ " AND di.mld_stdmelding_key = std.mld_stdmelding_key(+)"
+ " AND std.mld_stdmelding_verwijder IS NULL" // Alleen actuele stdmeldingen.
+ " AND (std.mld_stdmelding_vervaldatum IS NULL OR std.mld_stdmelding_vervaldatum > TRUNC(SYSDATE))" // Alleen actuele stdmeldingen.
+ " AND idsc.ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key;
oRs = Oracle.Execute(sql);
if (!oRs.Eof)
var mld_stdmelding_key = -1;
var prs_kostenplaats_key = -1;
if (!oRs.eof)
{
loc_key = oRs("alg_locatie_key").Value;
bld_key = oRs("alg_gebouw_key").Value;
flr_key = oRs("alg_verdieping_key").Value;
room_key = oRs("alg_ruimte_key").Value;
if (room_key > 0)
alg_onroerendgoed_keys = room_key;
else if (flr_key > 0)
alg_onroerendgoed_keys = flr_key;
else if (bld_key > 0)
alg_onroerendgoed_keys = bld_key;
mld_stdmelding_key = oRs("mld_stdmelding_key").Value || -1;
prs_kostenplaats_key = oRs("prs_kostenplaats_key").Value || -1;
}
oRs.Close();
if (prs_kostenplaats_key == -1 && bld_key > 0)
{
sql = "SELECT prs_kostenplaats_key"
+ " FROM alg_gebouw"
+ " WHERE alg_gebouw_key = " + bld_key;
if (mld_stdmelding_key > 0)
{ // Er is een mld_stdmelding_key bekend. Nu melding aanmaken (1-op-1 relatie).
var stdm_info = mld.mld_stdmeldinginfo(mld_stdmelding_key);
var loc_key = -1;
var bld_key = -1;
var flr_key = -1;
var room_key = -1;
var alg_onroerendgoed_keys = -1;
sql = "SELECT alg_locatie_key,"
+ " alg_gebouw_key,"
+ " alg_verdieping_key,"
+ " alg_ruimte_key"
+ " FROM ins_v_deelenonderdeel isd, alg_v_allonroerendgoed alg"
+ " WHERE ins_deel_key = " + ingesloten[i].ins_key
+ " AND alg_onroerendgoed_keys = isd.ins_alg_ruimte_key"
+ " AND isd.ins_alg_ruimte_type = 'R'"
oRs = Oracle.Execute(sql);
if (!oRs.Eof)
prs_kostenplaats_key = oRs("prs_kostenplaats_key").Value;
{
loc_key = oRs("alg_locatie_key").Value;
bld_key = oRs("alg_gebouw_key").Value;
flr_key = oRs("alg_verdieping_key").Value;
room_key = oRs("alg_ruimte_key").Value;
if (room_key > 0)
alg_onroerendgoed_keys = room_key;
else if (flr_key > 0)
alg_onroerendgoed_keys = flr_key;
else if (bld_key > 0)
alg_onroerendgoed_keys = bld_key;
}
oRs.Close();
if (prs_kostenplaats_key == -1 && bld_key > 0)
{
sql = "SELECT prs_kostenplaats_key"
+ " FROM alg_gebouw"
+ " WHERE alg_gebouw_key = " + bld_key;
oRs = Oracle.Execute(sql);
if (!oRs.Eof)
prs_kostenplaats_key = oRs("prs_kostenplaats_key").Value;
oRs.Close();
}
var mld_subject;
switch(S("mjb_approvedmelding_description")) {
case 2: mld_subject = ingesloten[i].srtcontr_oms; break;
case 3: mld_subject = ingesloten[i].srtcontr_oms + " (" + ingesloten[i].srtdeel_oms + ")"; break;
case 1: // 1 = default
default: mld_subject = ingesloten[i].srtdeel_oms; break;
}
sql = "SELECT sm.mld_stdmelding_default_disc"
+ " FROM mld_stdmelding sm"
+ " WHERE sm.mld_stdmelding_key = " + mld_stdmelding_key;
oRs = Oracle.Execute(sql);
var mld_stdmelding_default_disc = oRs("mld_stdmelding_default_disc").Value || "NULL";
oRs.Close();
sql = "BEGIN ctr.taak_naar_ter_uitvoering(" + mld_stdmelding_key
+ " , " + safe.quoted_sql(mld_subject, 200)
+ " , " + safe.quoted_sql(ingesloten[i].srtcontr_info)
+ " , " + prs_kostenplaats_key
+ " , " + user_key
+ " , " + mld_stdmelding_default_disc
+ " , " + loc_key
+ " , " + alg_onroerendgoed_keys
+ " , " + ingesloten[i].ins_key
+ " , " + ingesloten[i].dlsrtcont_key
+ " );"
+ " END;"
Oracle.Execute(sql);
aantalmld++;
// De taak ter uitvoering zetten en afhandelen van de tracking en notificatie van het uitvoeren.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 3); // Ter uitvoering(3)
}
var mld_subject;
switch(S("mjb_approvedmelding_description")) {
case 2: mld_subject = ingesloten[i].srtcontr_oms; break;
case 3: mld_subject = ingesloten[i].srtcontr_oms + " (" + ingesloten[i].srtdeel_oms + ")"; break;
case 1: // 1 = default
default: mld_subject = ingesloten[i].srtdeel_oms; break;
}
sql = "SELECT sm.mld_stdmelding_default_disc"
+ " FROM mld_stdmelding sm"
+ " WHERE sm.mld_stdmelding_key = " + mld_stdmelding_key;
oRs = Oracle.Execute(sql);
var mld_stdmelding_default_disc = oRs("mld_stdmelding_default_disc").Value || "NULL";
oRs.Close();
sql = "BEGIN ctr.taak_naar_ter_uitvoering(" + mld_stdmelding_key
+ " , " + safe.quoted_sql(mld_subject, 200)
+ " , " + safe.quoted_sql(ingesloten[i].srtcontr_info)
+ " , " + prs_kostenplaats_key
+ " , " + user_key
+ " , " + mld_stdmelding_default_disc
+ " , " + loc_key
+ " , " + alg_onroerendgoed_keys
+ " , " + ingesloten[i].ins_key
+ " , " + ingesloten[i].dlsrtcont_key
+ " );"
+ " END;"
Oracle.Execute(sql);
// De taak ter uitvoering zetten en afhandelen van de tracking en notificatie van het uitvoeren.
ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 3); // Ter uitvoering(3)
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
}
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
}
result.toaster = L("lcl_mjb_freezing_completed");
if (oldfreeze)
{ // Er is nog een onafgeronde taak voor het begrotingsjaar/freezeyear.
result.message = badbody;
}
else if (ingesloten.length < aantaltaken)
{ // Niet alle taken zijn geaccordeerd of ter uitvoering gezet.
result.message = (ingesloten.length - aantalmld) == 1? L("lcl_mjb_freeze_mes_1").format(aantaltaken) : L("lcl_mjb_freeze_mes_n").format(ingesloten.length - aantalmld, aantaltaken);
if (aantalmld > 0)
result.message += "\n" + (aantalmld == 1? L("lcl_mjb_execute_mes_1") : L("lcl_mjb_execute_mes_n").format(aantalmld));
}
else
{ // Alle taken zijn geaccordeerd of ter uitvoering gezet.
result.toaster = L("lcl_mjb_freezing_completed");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>

View File

@@ -35,6 +35,7 @@ var deelsrtcont_key_arr = getFParamIntArray("deelsrtcont_key_arr", []); // De ee
var multi = ins_key_arr.length > 1;
var groupby = getFParamInt("groupby", 9);
var aantaltaken = getFParamInt("aantaltaken", 0);
var inflatiepct = S("mjb_inflation");
var inflatiefactor = 1 + (inflatiepct / 100);
@@ -123,8 +124,7 @@ if (groupby < 9)
// 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
// Hier geen "user.anything_todo_or_abort(!oRs.eof);". We geven altijd een melding terug hoeveel taken er terug gezet zijn.
while (!oRs.eof)
{
var ins_key = oRs("ins_deel_key").Value;
@@ -197,7 +197,7 @@ else
}
}
lcl.set_dialect(ctrdisc_key, "CTR_DISCIPLINE_KEY");
user.anything_todo_or_abort(tobestart > 0); // We klagen niet over enkele wel en enkele niet
// Hier geen "user.anything_todo_or_abort(tobestart > 0);". We geven altijd een melding terug hoeveel taken er terug gezet zijn.
}
for (var i = 0; i < ingesloten.length; i++)
@@ -228,13 +228,18 @@ for (var i = 0; i < ingesloten.length; i++)
+ " WHERE fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'INSCBE')"
+ " AND fac_tracking_refkey = " + ingesloten[i].dlsrtcont_key;
Oracle.Execute(sql);
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
}
result.key += (i > 0? "," : "") + ingesloten[i].dlsrtcont_key;
}
result.toaster = L("lcl_mjb_start_reversed");
if (ingesloten.length < aantaltaken)
{ // Niet alle taken zijn terug gezet.
result.message = ingesloten.length == 1? L("lcl_mjb_unfreeze_mes_1").format(aantaltaken) : L("lcl_mjb_unfreeze_mes_n").format(ingesloten.length, aantaltaken);
}
else
{ // Alle taken zijn terug gezet.
result.toaster = L("lcl_mjb_start_reversed");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>

View File

@@ -277,6 +277,7 @@ function insStart(rowArray, isMulti, pfreeze)
var insKeyString = getKeyString(rowArray);
var srtcontrolekeyArray = new Array();
var deleted = 0;
var aantaltaken = 0;
for (var i = 0; i < rowArray.length; i++)
{
var rowdata = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
@@ -285,6 +286,7 @@ function insStart(rowArray, isMulti, pfreeze)
{ // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen.
if (!pfreeze || (pfreeze && groupby == 9))
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
aantaltaken += rowdata.aantaltaken;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
@@ -297,7 +299,8 @@ function insStart(rowArray, isMulti, pfreeze)
var data = { ins_keys: insKeyString,
srtcont_key_arr: srtcontrolekeyArray.join(","),
freeze: (pfreeze? 1 : 0)
freeze: (pfreeze? 1 : 0),
aantaltaken: aantaltaken
};
if (pfreeze)
{
@@ -349,6 +352,7 @@ function insUnfreeze(rowArray, isMulti)
var srtcontrolekeyArray = new Array();
var deelsrtcontrkeyArray = new Array();
var deleted = 0;
var aantaltaken = 0;
for (var i = 0; i < rowArray.length; i++)
{
var rowdata = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
@@ -360,6 +364,7 @@ function insUnfreeze(rowArray, isMulti)
srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey;
deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey;
}
aantaltaken += rowdata.aantaltaken;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
@@ -402,7 +407,8 @@ function insUnfreeze(rowArray, isMulti)
fitness_score1_through_pos: fitness_score1_through_pos,
priority_score2_from: priority_score2_from,
priority_score2_through: priority_score2_through,
jaren: jaren
jaren: jaren,
aantaltaken: aantaltaken
};
protectRequest.dataToken(data);
$.post("../ins/ins_inspect_unstart.asp", data, FcltCallbackRefresh, "json");
@@ -481,6 +487,7 @@ function insMoveUp(rowArray, isMulti)
var srtcontrolekeyArray = new Array();
var deelsrtcontrkeyArray = new Array();
var deleted = 0;
var aantaltaken = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
@@ -489,6 +496,7 @@ function insMoveUp(rowArray, isMulti)
{ // 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;
aantaltaken += rowdata.aantaltaken;
}
else
{ // Het is een scenario. De ins_key verwijderen uit de lijst.
@@ -501,7 +509,8 @@ function insMoveUp(rowArray, isMulti)
var data = { ins_keys: insKeyString,
srtcont_key_arr: srtcontrolekeyArray.join(","),
dlsrtcont_key_arr: deelsrtcontrkeyArray.join(",")
dlsrtcont_key_arr: deelsrtcontrkeyArray.join(","),
aantaltaken: aantaltaken
};
protectRequest.dataToken(data);
$.post("../ins/ins_moveup.asp",

View File

@@ -25,6 +25,8 @@ protectRequest.validateToken();
var ins_key_arr = getFParamKeyArray("ins_keys", []);
var srtcont_key_arr = getFParamKeyArray("srtcont_key_arr", []);
var dlsrtcont_key_arr = getFParamIntArray("dlsrtcont_key_arr", []); // De eerste "-1" waarde moeten niet verwijderd worden uit de array, daarom getFParamIntArray i.p.v. getFParamKeyArray.
var aantaltaken = getFParamInt("aantaltaken", 0);
var inflatiepct = S("mjb_inflation");
var inflatiefactor = 1 + (inflatiepct / 100);
var mjb_freeze_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
@@ -59,7 +61,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
tobemovedup++;
}
}
user.anything_todo_or_abort(tobemovedup > 0); // We klagen niet over enkele wel en enkele niet
// Hier geen "user.anything_todo_or_abort(tobemovedup > 0);". We geven altijd een melding terug hoeveel taken er terug gezet zijn.
var ins_xcp_active_cost = S("ins_xcp_active_cost");
@@ -104,5 +106,13 @@ for (var i = 0; i < ingesloten.length; i++)
ins.trackinspectupdate(ingesloten[i].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[i].disc_oms) + "\n" + insUpd.trackarray.join("\n"));
}
if (ingesloten.length < aantaltaken)
{ // Niet alle taken zijn doorgeschoven.
result.message = ingesloten.length == 1? L("lcl_mjb_moveup_mes_1").format(aantaltaken) : L("lcl_mjb_moveup_mes_n").format(ingesloten.length, aantaltaken);
}
else
{ // Alle taken zijn doorgeschoven.
result.toaster = L("lcl_mjb_moveup_completed");
}
Response.Write(JSON.stringify(result));
%><% ASPPAGE_END(); %>

View File

@@ -45,6 +45,8 @@ var pc_costs = ins_xcp_active_cost & 1? getFParamFloat("costs", 0) : 0; //
var pc_costs2 = ins_xcp_active_cost & 2? getFParamFloat("costs2", 0) : 0; // Prijswijziging kosten2.
var pc_costs3 = ins_xcp_active_cost & 4? getFParamFloat("costs3", 0) : 0; // Prijswijziging kosten3.
var pc_material = ins_xcp_active_cost & 8? getFParamFloat("material", 0) : 0; // Prijswijziging materiaal.
var aantaltaken = getFParamInt("aantaltaken", 0);
var xcpchanged = 0;
// Settingen.
var inflatiepct = S("mjb_inflation");
@@ -73,7 +75,7 @@ var hasWriteCTRUSE = authparamsCTRUSE && authparamsCTRUSE.ALGwritelevel < 9 && a
var hasWriteINSMAN = authparamsINSMAN && authparamsINSMAN.ALGwritelevel < 9 && authparamsINSMAN.PRSwritelevel < 9;
var hasWrite_MJOB = (hasWriteINSUSE || (S("ins_can_edit_own_objects") && objectBeheerder)) && hasWriteCTRUSE && hasWriteINSMAN
user.anything_todo_or_abort(hasWrite_MJOB);
user.anything_todo_or_abort(hasWrite_MJOB); // Melding geven dat de user geen rechten heeft om de prijswijzigingen door te voeren.
var result = {key: "", pricechange: true };
var ingesloten = [];
@@ -161,7 +163,7 @@ if (pc_costs != 0 || pc_costs2 != 0 || pc_costs3 != 0 || pc_material != 0)
// 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.
// Hier geen "user.anything_todo_or_abort(!oRs.eof);". We geven een melding terug hoeveel taken er geaccodeerd zijn.
while (!oRs.eof)
{ // Ik mag het object wijzigen dus voer wijziging uit
@@ -260,6 +262,7 @@ if (pc_costs != 0 || pc_costs2 != 0 || pc_costs3 != 0 || pc_material != 0)
commit: false
};
result = ins.saveXcp(ins_key, srtcont_key, params);
xcpchanged++;
}
oRs_val.Close();
}
@@ -268,7 +271,14 @@ if (pc_costs != 0 || pc_costs2 != 0 || pc_costs3 != 0 || pc_material != 0)
oRs.Close();
}
result.toaster = L("lcl_mjb_price_change_completed");
if (xcpchanged < aantaltaken)
{ // Niet bij alle taken zijn de prijswijzigingen aangepast.
result.message = xcpchanged == 1? L("lcl_mjb_multiedit_mes_1").format(aantaltaken) : L("lcl_mjb_multiedit_mes_n").format(xcpchanged, aantaltaken);
}
else
{ // Bij alle taken zijn de prijswijzigingen aangepast.
result.toaster = L("lcl_mjb_price_change_completed");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>

View File

@@ -94,7 +94,7 @@ FCLTHeader.Requires({ plugins: ["suggest", "jQuery", "kenmerk"],
scen_key: scen_key_arr[i]
});
if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp)
if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp) // Alleen afhankelijk van rechten.
{
ingesloten.push(ins_key_arr[i]);
ingeslotensrtc.push(srtcont_key_arr[i]);
@@ -106,7 +106,7 @@ FCLTHeader.Requires({ plugins: ["suggest", "jQuery", "kenmerk"],
}
}
user.auth_required_or_abort(tobeedited > 0); // We klagen niet over enkele wel en enkele niet
user.auth_required_or_abort(tobeedited > 0); // Melding geven dat de user geen rechten heeft om de wijzigingen door te voeren.
%>
<script type="text/javascript">
@@ -136,6 +136,7 @@ FCLTHeader.Requires({ plugins: ["suggest", "jQuery", "kenmerk"],
<input type="hidden" name="srtcontkeys" id="srtcontkeys" value="<%=ingeslotensrtc.join(",")%>">
<input type="hidden" name="scenkeys" id="scenkeys" value="<%=ingeslotenscen.join(",")%>">
<input type="hidden" name="xcpkeys" id="xcpkeys" value="<%=ingeslotenxcp.join(",")%>">
<input type="hidden" name="aantaltaken" id="aantaltaken" value="<%=ins_key_arr.length%>">
<%
// Ook als de binding bits niet overeeenkomen dan mag je multi wijzigen.
// De "vaste" kenmerken mag je altijd wijzigen en de flexkenmerken alleen als de objectsoort hetzelfde is.

View File

@@ -44,7 +44,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
}
);
if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp)
if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp) // Alleen afhankelijk van rechten.
{
ingesloten.push(ins_key_arr[i]);
ingeslotensrtc.push(srtcont_key_arr[i]);
@@ -55,7 +55,7 @@ for (var i = 0; i < ins_key_arr.length; i++)
}
}
user.auth_required_or_abort(tobeedited > 0); // We klagen niet over enkele wel en enkele niet
//user.auth_required_or_abort(tobeedited > 0); // Melding geven dat de user geen rechten heeft om de wijzigingen door te voeren.
// De ingevulde waarden ophalen.
@@ -70,6 +70,7 @@ var fperc = getFParam("perc", null);
var fstartdatum = getFParamDate("startdatum", null);
var fvervaldatum = getFParamDate("vervaldatum", null);
var fopmerk = getFParam("opmerk", null);
var aantaltaken = getFParamInt("aantaltaken", 0);
if (fperiode && (fperiode < 0 || fperiode > 999))
abort_with_warning("Invalid number for " + L("lcl_ins_controle_period") + " (" + fperiode + ")");
@@ -195,6 +196,15 @@ for (var i = 0; i < ingesloten.length; i++)
oRs_val.Close()
}
if (ingesloten.length < aantaltaken)
{ // Niet alle taken zijn gewijzigd.
result.message = ingesloten.length == 1? L("lcl_mjb_multiedit_mes_1").format(aantaltaken) : L("lcl_mjb_multiedit_mes_n").format(ingesloten.length, aantaltaken);
}
else
{ // Alle taken zijn gewijzigd.
result.toaster = L("lcl_mjb_multiedit_completed");
}
Response.Write(JSON.stringify(result));
Response.End();
%><% ASPPAGE_END(); %>

View File

@@ -368,7 +368,6 @@ var transitParam = buildTransitParam(["urole", "mode", "deel", "groep", "categor
$('#timetip').hide();
});
})
</script>
<%
} //if (outputmode == 0)
@@ -474,6 +473,20 @@ var transitParam = buildTransitParam(["urole", "mode", "deel", "groep", "categor
{
data.keyColumn = oRs("keyColumn").Value;
}
data.freezed = oRs(mjb_freeze_year + "_freezed").Value;
data.tobefreezed = oRs(mjb_freeze_year + "_tobefreezed").Value;
if (!fulldetails && !mjbshowempty)
{
data.aantaltaken = 0;
for (var j = 0; j < jaren.length; j++)
{
if (oRs(String(jaren[j]) + "_aantaltaken_withoutempty").Value > 0)
data.aantaltaken += oRs(String(jaren[j]) + "_aantaltaken_withoutempty").Value;
}
}
else
data.aantaltaken = oRs("aantaltaken").Value;;
return JSON.stringify(data);
}

View File

@@ -145,7 +145,7 @@ var mjbBedragFYArray = [];
var mjbNotSuccesArray = [];
var mjbRejectedInFYArray = [];
var mjbAantal;
async function dragDropCallback(json, textStatus, tweede)
async function dragDropCallback(json, textStatus)
{
mjbAantal = 0;
let movePlanPromises = [];
@@ -169,8 +169,13 @@ async function dragDropCallback(json, textStatus, tweede)
await Promise.all(movePlanPromises);
// Als bij multi niet alle taken zijn hergepland dan een nette melding hiervan geven.
if (mjbAantal < mjbDeelKeyArray.length) {
FcltMgr.alert(L("lcl_mjb_reschedule_mess").format(mjbAantal, mjbDeelKeyArray.length));
if (mjbAantal < mjbDeelKeyArray.length)
{ // Niet alle taken zijn hergepland.
json.message = mjbAantal == 1? L("lcl_mjb_reschedule_mess_1").format(mjbDeelKeyArray.length) : L("lcl_mjb_reschedule_mess_n").format(mjbAantal, mjbDeelKeyArray.length);
}
else
{ // Alle taken zijn hergepland.
json.toaster = L("lcl_mjb_reschedule_completed");
}
// Wel even het overzicht refreshen.
@@ -227,6 +232,7 @@ function mjb_moveYearBack(rowArray, isMulti)
var srtcont_key_arr = [];
var dlsrtcont_key_arr = [];
var scen_key_arr = [];
var aantaltaken = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
@@ -239,6 +245,7 @@ function mjb_moveYearBack(rowArray, isMulti)
srtcont_key_arr.push(rowdata.insSrtControleKey);
dlsrtcont_key_arr.push(rowdata.insDeelSrtContrKey);
scen_key_arr.push(rowdata.insScenKey);
aantaltaken += rowdata.aantaltaken;
}
}
if (ins_key_arr.length)
@@ -254,11 +261,23 @@ function mjb_moveYearBack(rowArray, isMulti)
protectRequest.dataToken(data);
$.post("../ins/ins_inspect_save.asp"
, data
, FcltCallbackRefresh
, function(json, textStatus)
{ // Als bij multi niet alle taken zijn teruggepland dan een nette melding hiervan geven.
if (json.success && rowArray.length == ins_key_arr.length)
{ // Alle taken zijn teruggepland.
json.toaster = L("lcl_mjb_moveback_completed");
}
else
{ // Niet alle taken zijn teruggepland.
json.message = ins_key_arr.length == 1? L("lcl_mjb_moveback_mes_1").format(rowArray.length) : L("lcl_mjb_moveback_mes_n").format(ins_key_arr.length, rowArray.length);
}
FcltCallbackRefresh(json, textStatus);
}
, "json"
);
}
// else: er hoeven geen taken worden teruggezet
else // Er hoeven geen taken te worden teruggezet.
FcltMgr.alert(L("lcl_mjb_moveback_mes_n").format(0, rowArray.length));
}
// Nu in "MJOP Scenario's" aan te roepen.
@@ -308,6 +327,7 @@ function multiPriceChangeCallback(json, insKeyString)
costs2: json.costs2 || 0,
costs3: json.costs3 || 0,
material: json.material || 0,
aantaltaken: json.aantaltaken,
ins_keys: insKeyString,
showempty: (showempty? 1 : 0),
categorie_key_arr: categorie_key_arr,
@@ -348,11 +368,19 @@ function multiPriceChangeCallback(json, insKeyString)
function insMultiPriceChange(rowArray)
{
var insKeyString = getKeyString(rowArray); // Bevat de keys van de betreffende groepering.
var aantaltaken = 0;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
aantaltaken += rowdata.aantaltaken;
}
var url = "../ins/ins_pricechange.asp";
FcltMgr.openModalDetail(url,
L("lcl_mjb_change_costs"),
{ callback: function (json)
{
json.aantaltaken = aantaltaken;
multiPriceChangeCallback(json, insKeyString);
}
});