From 27be9536ddd5c8d8355b6a89050c82b18fba8878 Mon Sep 17 00:00:00 2001 From: Maykel Geerdink Date: Tue, 6 Feb 2018 10:33:36 +0000 Subject: [PATCH] FCLT#52134: MJOB: freezecost en freezedate niet opgeslagen bij bevriezen ingeplande taken. svn path=/Website/branches/v2017.2/; revision=36851 --- APPL/INS/ins_inspect_start.asp | 244 ++++++++++++++++++--------------- 1 file changed, 132 insertions(+), 112 deletions(-) diff --git a/APPL/INS/ins_inspect_start.asp b/APPL/INS/ins_inspect_start.asp index 342c5ebf87..d0efa2e92f 100644 --- a/APPL/INS/ins_inspect_start.asp +++ b/APPL/INS/ins_inspect_start.asp @@ -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. + } } }