FCLT#52134: MJOB: freezecost en freezedate niet opgeslagen bij bevriezen ingeplande taken.

svn path=/Website/branches/v2017.2/; revision=36851
This commit is contained in:
Maykel Geerdink
2018-02-06 10:33:36 +00:00
parent ec9ec48b4f
commit 27be9536dd

View File

@@ -229,7 +229,7 @@ else
if ((!freeze && this_ins.canInspStart) || (freeze && this_ins.canInspFreeze)) if ((!freeze && this_ins.canInspStart) || (freeze && this_ins.canInspFreeze))
{ // Alle Arrays zijn even groot. { // Alle Arrays zijn even groot.
ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key, ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key,
inspectiestatus: ins_deelsrtcontrole_status, kosten: kosten, ismjob: ismjob}); inspectiestatus: ins_deelsrtcontrole_status, kosten: kosten, ismjob: ismjob });
tobestart++; tobestart++;
} }
} }
@@ -242,8 +242,9 @@ else
result.key = ""; result.key = "";
for (var i = 0; i < ingesloten.length; i++) for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking van het starten. { // Zetten van de status en afhandelen van de tracking van het starten.
if (ingesloten[i].dlsrtcont_key < 0) if (ingesloten[i].dlsrtcont_key < 0)
{ // Er is nog geen inspectie (ins_deelsrtcontrole) record aangemaakt. Eerst maar eens aanmaken. { // 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. // Als er al een inspectie is geweest kan er een volgende inspectiedatum berekend worden.
var nextdate = null; var nextdate = null;
if (ingesloten[i].inspectiestatus > -1) if (ingesloten[i].inspectiestatus > -1)
@@ -265,118 +266,126 @@ else
{ dbs: "prs_perslid_key", typ: "key", val: user_key }, { dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: (nextdate? nextdate : null) } { 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. // Als je mag bevriezen (canInspFreeze) dan zijn er kosten aanwezig in het jaar mjb_freeze_year.
if (freeze && (ingesloten[i].kosten >= 0)) if (freeze && (ingesloten[i].kosten >= 0))
{ // Uitzoeken of de taak door een hogere prio taak wordt uitgevoerd (kosten zijn 0 in het overzicht). { // 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. // In dat geval zijn de freeze kosten 0 en plaatsen we een opmerking.
// Voor MJOB is de interval modus actief. // Voor MJOB is de interval modus actief.
// Neem de Active Situatie (AS) (Scenario = 1). // Neem de Active Situatie (AS) (Scenario = 1).
var sql = "SELECT insp.ins_deelsrtcontrole_key" var sql = "SELECT insp.ins_deelsrtcontrole_key"
+ " , insp.ins_srtcontrole_level" + " , insp.ins_srtcontrole_level"
// Bepaling in welk jaar er een inspectie is gepland. // Bepaling in welk jaar er een inspectie is gepland.
// 1) In het jaar van de plandatum. // 1) In het jaar van de plandatum.
// 2) In het jaar van de startdatum. // 2) In het jaar van de startdatum.
// 3) a) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Controle(1). // 3) a) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Controle(1).
// Volgende inspectie is in het freeze jaar. // 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). // 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? // Nextdate is na het freeze jaar?
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar? // Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
// Ja) Volgende inspectie is in het freeze jaar. // Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is het jaar van de nextdate. // Nee) Volgende inspectie is het jaar van de nextdate.
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar? // Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
// Ja) Volgende inspectie is in het freeze jaar. // Ja) Volgende inspectie is in het freeze jaar.
// Nee) Volgende inspectie is in het jaar "nextdatum + periode". // Nee) Volgende inspectie is in het jaar "nextdatum + periode".
// c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd. // c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar? // Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst). // Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
// Nee) Volgende inspectie is in het freeze jaar. // Nee) Volgende inspectie is in het freeze jaar.
+ " , CASE" + " , CASE"
+ " WHEN" + " WHEN"
+ " EXTRACT(YEAR FROM " + " EXTRACT(YEAR FROM "
+ " COALESCE(insp.plandatum" + " COALESCE(insp.plandatum"
+ " , CASE WHEN insp.laatste IS NULL THEN insp.ins_srtcontroledl_xcp_startdat ELSE NULL END" + " , CASE WHEN insp.laatste IS NULL THEN insp.ins_srtcontroledl_xcp_startdat ELSE NULL END"
+ " , CASE" + " , CASE"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type = 1" // 1: Controle. + " WHEN insp.laatste IS NULL AND insp.ctr_controle_type = 1" // 1: Controle.
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" + " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')"
+ " WHEN insp.laatste IS NULL AND insp.ctr_controle_type != 1" // 2: Vervanging, 3: Certificering. + " WHEN insp.laatste IS NULL AND insp.ctr_controle_type != 1" // 2: Vervanging, 3: Certificering.
+ " THEN" // Er is nog geen inspectie geweest + " THEN" // Er is nog geen inspectie geweest
+ " CASE" + " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > " + mjb_freeze_year + " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > " + mjb_freeze_year
+ " THEN" // Nextdate is na de freeze datum. + " THEN" // Nextdate is na de freeze datum.
+ " CASE" + " CASE"
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(insp.inspectie_next0, -1 * 12 * insp.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND" + " 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)" + " 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). + " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Vorige inspectie ligt tussen start en freeze jaar (Nu ligt er ook tussen).
+ " ELSE insp.inspectie_next0" + " ELSE insp.inspectie_next0"
+ " END" + " END"
+ " ELSE" // Nextdate is voor of in het freeze jaar. + " ELSE" // Nextdate is voor of in het freeze jaar.
+ " CASE" + " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) >= " + mjb_start_year + " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) >= " + mjb_start_year
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Nextdate tussen start en freeze jaar. + " 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. + " ELSE ADD_MONTHS(insp.inspectie_next0, 12 * insp.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
+ " END" + " END"
+ " END" + " END"
+ " ELSE" // Laatste IS NOT NULL. Er is al een inspectie geweest. + " ELSE" // Laatste IS NOT NULL. Er is al een inspectie geweest.
+ " CASE" + " CASE"
+ " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > EXTRACT(YEAR FROM SYSDATE)" + " WHEN EXTRACT(YEAR FROM insp.inspectie_next0) > EXTRACT(YEAR FROM SYSDATE)"
+ " THEN insp.inspectie_next0" // Volgende inspectie is in de toekomst. + " THEN insp.inspectie_next0" // Volgende inspectie is in de toekomst.
+ " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog niet uitgevoerd. + " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog niet uitgevoerd.
+ " END" + " END"
+ " END)) = " + mjb_freeze_year + " END)) = " + mjb_freeze_year
+ " THEN 1" + " THEN 1"
+ " ELSE 0" + " ELSE 0"
+ " END isFreezeYear" + " END isFreezeYear"
+ " FROM (" + " FROM ("
+ " SELECT xcp.ins_deel_key" + " SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key" + " , xcp.ins_srtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_key" + " , idsc.ins_deelsrtcontrole_key"
+ " , xcp.ctr_discipline_key" + " , xcp.ctr_discipline_key"
+ " , xcp.ins_srtcontrole_periode" + " , xcp.ins_srtcontrole_periode"
+ " , xcp.ins_deel_aanmaak" + " , xcp.ins_deel_aanmaak"
+ " , xcp.ctr_controle_type" + " , xcp.ctr_controle_type"
+ " , idsc.ins_deelsrtcontrole_plandatum plandatum" + " , idsc.ins_deelsrtcontrole_plandatum plandatum"
+ " , ins_srtcontroledl_xcp_startdat" + " , ins_srtcontroledl_xcp_startdat"
+ " , xcp.ins_srtcontrole_level" + " , xcp.ins_srtcontrole_level"
+ " , ins.nextcyclusdate(xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 0) inspectie_next0" + " , ins.nextcyclusdate(xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 0) inspectie_next0"
+ " , (SELECT MAX(idsc2.ins_deelsrtcontrole_datum)" + " , (SELECT MAX(idsc2.ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole idsc2" + " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key + " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1) laatste" + " AND idsc2.ins_scenario_key = 1) laatste"
+ " FROM ins_deelsrtcontrole idsc" + " FROM ins_deelsrtcontrole idsc"
+ " , ins_v_defined_inspect_xcp xcp" + " , 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. + " 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_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND xcp.ins_deel_key = " + ingesloten[i].ins_key + " AND xcp.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc.ins_deel_key(+) = " + ingesloten[i].ins_key + " AND idsc.ins_deel_key(+) = " + ingesloten[i].ins_key
+ " AND idsc.ins_scenario_key(+) = 1" + " AND idsc.ins_scenario_key(+) = 1"
+ " AND xcp.ins_scenario_key = 1" + " AND xcp.ins_scenario_key = 1"
+ " AND (idsc.ins_deelsrtcontrole_key IS NULL OR" + " AND (idsc.ins_deelsrtcontrole_key IS NULL OR"
+ " idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + " idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2" + " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key + " WHERE idsc2.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
+ " AND idsc2.ins_scenario_key = 1" + " AND idsc2.ins_scenario_key = 1"
+ " ))" + " ))"
// Zichtzelf uitsluiten. // Zichtzelf uitsluiten.
+ " AND xcp.ins_srtcontrole_key != " + ingesloten[i].srtcont_key + " AND xcp.ins_srtcontrole_key != " + ingesloten[i].srtcont_key
// Alleen soort controles met een lager level opleveren. // Alleen soort controles met een lager level opleveren.
+ " AND xcp.ins_srtcontrole_level < (SELECT isc.ins_srtcontrole_level" + " AND xcp.ins_srtcontrole_level < (SELECT isc.ins_srtcontrole_level"
+ " FROM ins_srtcontrole isc" + " FROM ins_srtcontrole isc"
+ " WHERE isc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")" + " WHERE isc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")"
+ " ) insp"; + " ) insp";
var oRs = Oracle.Execute(sql); 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? var has_higherprio = !oRs.eof && oRs("isFreezeYear").Value == 1; // Is er een hoger prio soort controle in het freeze jaar?
oRs.Close(); oRs.Close();
fields.push( { dbs: "ins_deelsrtcontrole_freezecost", typ: "float", val: (has_higherprio? 0 : ingesloten[i].kosten) } ); 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. 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. // Als er een hoger prio soort controle aanwezig is in het freeze jaar, dan een opmerking toevoegen.
if (has_higherprio) if (has_higherprio)
fields.push( { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", val: L("lcl_mjb_performed_high") } ); 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.
var insIns = buildInsert("ins_deelsrtcontrole", fields); var insIns = buildInsert("ins_deelsrtcontrole", fields);
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true); var err = Oracle.Execute(insIns.sql, true);
@@ -386,7 +395,18 @@ else
result.success = false; result.success = false;
} }
} }
// else de melding is wellicht ingepland. Dan zetten we later wel de status op 2. 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.
}
} }
} }