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:
@@ -229,7 +229,7 @@ else
|
||||
if ((!freeze && this_ins.canInspStart) || (freeze && this_ins.canInspFreeze))
|
||||
{ // Alle Arrays zijn even groot.
|
||||
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++;
|
||||
}
|
||||
}
|
||||
@@ -242,8 +242,9 @@ else
|
||||
result.key = "";
|
||||
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 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.
|
||||
var nextdate = null;
|
||||
if (ingesloten[i].inspectiestatus > -1)
|
||||
@@ -265,118 +266,126 @@ else
|
||||
{ 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 van de plandatum.
|
||||
// 2) In het jaar van de startdatum.
|
||||
// 3) 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(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.
|
||||
+ " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog niet uitgevoerd.
|
||||
+ " 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_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 (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 + ")"
|
||||
+ " ) insp";
|
||||
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();
|
||||
// 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 van de plandatum.
|
||||
// 2) In het jaar van de startdatum.
|
||||
// 3) 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(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.
|
||||
+ " ELSE TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Laatst ingeplande inspectie is nog niet uitgevoerd.
|
||||
+ " 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_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 (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 + ")"
|
||||
+ " ) insp";
|
||||
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") } );
|
||||
}
|
||||
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.
|
||||
var insIns = buildInsert("ins_deelsrtcontrole", fields);
|
||||
ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
|
||||
var err = Oracle.Execute(insIns.sql, true);
|
||||
@@ -386,7 +395,18 @@ else
|
||||
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.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user