FCLT#53547: MJOB: MJOB aanvullingen.

FCLT#53785: 20181 bevinding Dubbele regels in MJOB console.
FCLT#53799: 2018.1 bevinding - MJOB toevoegen aan Scenario geeft foutmelding.

svn path=/Website/trunk/; revision=38400
This commit is contained in:
Maykel Geerdink
2018-07-05 14:46:22 +00:00
parent 35ae63715a
commit aa7461e67e

View File

@@ -617,6 +617,7 @@ ins = {checkAutLevel:
+ " , insp.vervaldatum"
+ " , insp.isc_mode"
+ " , options"
+ " , freezedate_year"
// Moment inspectie pas kunnen opslaan op of na geplande inspectiedatum.
// Is in de moment modus de invoer na het volgende berekende inspectietijdstip? Voor interval modus is dit altijd het geval.
// Als er nog nooit is geinspecteerd en er is er nog geen ingepland dan is het ook ok.
@@ -649,9 +650,10 @@ ins = {checkAutLevel:
+ " ELSE 0"
+ " END invoerAfterNext"
// 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).
// 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?
@@ -668,7 +670,12 @@ ins = {checkAutLevel:
+ " , CASE"
+ " WHEN"
+ " EXTRACT(YEAR FROM "
+ " COALESCE(insp.plandatum"
+ " COALESCE(CASE" // Taak is geaccordeerd (gefreezed). Freeze jaar is het huidige (vervangings)jaar.
+ " WHEN insp.ins_deelsrtcontrole_status = 2"
+ " 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.
@@ -695,7 +702,7 @@ ins = {checkAutLevel:
+ " 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.
+ " 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"
@@ -744,6 +751,8 @@ ins = {checkAutLevel:
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key
+ " AND idsc2.ins_scenario_key = 1) laatste"
+ " , idsc.ins_deelsrtcontrole_freezedate"
+ " , EXTRACT(YEAR FROM idsc.ins_deelsrtcontrole_freezedate) freezedate_year"
+ " 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.
@@ -770,8 +779,9 @@ ins = {checkAutLevel:
// Als de laatste inspectie is afgerond (stutus is 6) moet er een nieuwe inspectie gestart worden.
ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null;
isc_options = oRs("options").Value;
vervallen = vervaldatum != null && vervaldatum < new Date();
isc_options = oRs("options").Value;
freezedate_year = oRs("freezedate_year").Value;
invoerAfterNext = oRs("invoerAfterNext").Value == 1;
isFreezeYear = oRs("isFreezeYear").Value == 1;
oRs.Close();
@@ -792,7 +802,9 @@ ins = {checkAutLevel:
iresult.canShowXcp = iresult.hasCTRRead && iresult.canRead("WEB_INSMAN"); // Exceptions (xcp) waarden inspecties/taken bekijken (waarden in ins_srtcontroledl_xcp tabel).
iresult.canChangeXcp = iresult.hasCTRWrite && iresult.canWrite("WEB_INSMAN"); // Exceptions (xcp) waarden inspecties/taken wijzigen (waarden in ins_srtcontroledl_xcp tabel).
iresult.canAddToScen = iresult.canChangeXcp && ins_deelsrtcontrole_status != 2 && ins_deelsrtcontrole_status != 5;
// Een taak kan niet aan een scenario worden toegevoegd als er in het freeze jaar (2019) een gestarte of gereed gemelde inspectie is.
//iresult.canAddToScen = iresult.canChangeXcp && !((ins_deelsrtcontrole_status == 2 || ins_deelsrtcontrole_status == 5) && isFreezeYear);
iresult.canAddToScen = iresult.canChangeXcp && ((ins_deelsrtcontrole_status != 2 && ins_deelsrtcontrole_status != 5) || !isFreezeYear);
// Op een scenario kun je geen inspecties doen. Je kunt alleen inplannen en een planning wijzigen. Verder geen inspectie rechten.
var isScenario = params.scen_key > 1;
@@ -809,11 +821,15 @@ ins = {checkAutLevel:
iresult.hasCTRRead && !isScenario;
// Bij eerste inspectie of verwerkte inspectie kan er gepland worden.
iresult.canInspPlanReq = periode > 0 && iresult.readuse && !vervallen &&
(ins_deelsrtcontrole_status == -1 || ins_deelsrtcontrole_status == 6) &&
actief && iresult.hasCTRWrite &&
((isc_options & 1) == 1);
iresult.canInspPlan = iresult.canInspPlanReq && !ctr_ismjob;
iresult.canInspPlanMjb = iresult.canInspPlanReq && ctr_ismjob;
iresult.canInspPlan = iresult.canInspPlanReq &&
(ins_deelsrtcontrole_status == -1 || ins_deelsrtcontrole_status == 6) &&
!ctr_ismjob;
iresult.canInspPlanMjb = iresult.canInspPlanReq &&
((ins_deelsrtcontrole_status == -1 || ins_deelsrtcontrole_status == 6) ||
(ins_deelsrtcontrole_status == 2) && freezedate_year < mjb_freeze_year) // Het is nog een geaccordeerde/bevroren taak van voor het freeze jaar.
ctr_ismjob;
// Bij eerste inspectie, geplande inspectie of verwerkte inspectie kan er gestart worden.
iresult.canInspStartReq = periode > 0 && iresult.readuse && invoerAfterNext && !vervallen &&
(ins_deelsrtcontrole_status <= 0 || ins_deelsrtcontrole_status == 6) &&
@@ -992,6 +1008,125 @@ ins = {checkAutLevel:
return iresult;
},
func_get_nextdate: // Bepaal de volgende inspectie datum.
function _func_get_nextdate(pins_key, psrtcont_key, pscen_key)
{
var mjb_freeze_year = S("mjb_freeze_year");
var nextdate = null;
// Is het een mjob discipline en is de eenheid jaarlijks?
sql = "SELECT cdp.ctr_disc_params_ismjob"
+ " , isc.ins_srtcontrole_eenheid"
+ " FROM ins_srtcontrole isc"
+ " , ctr_disc_params cdp"
+ " WHERE isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"
+ " AND isc.ins_srtcontrole_key = " + psrtcont_key;
oRs = Oracle.Execute(sql);
var ismjob = !oRs.eof && oRs("ctr_disc_params_ismjob").Value == 1;
var isjaarlijks = oRs("ins_srtcontrole_eenheid").Value == 4;
oRs.Close();
if (ismjob && isjaarlijks)
{
// Bereken de volgende orginele inspectiedatum (nextdate).
// Het kan een mjob inspectie zijn en dan kan de laatste inspectie niet succesvol zijn.
// In dat geval kan ik ins.nextcyclusdate(ins_key, srtcont_key, scen_key) niet gebruiken.
// 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.
var sql = "SELECT MAX(idsc.ins_deelsrtcontrole_key) max_dsc_key"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , cm.ins_controlemode_success"
+ " , idsc.ins_deelsrtcontrole_freezedate"
+ " FROM ins_deelsrtcontrole idsc"
+ " , ins_controlemode cm"
+ " WHERE idsc.ins_controlemode_key = cm.ins_controlemode_key(+)"
+ " AND cm.ins_controlemode_success(+) = 1"
+ " AND idsc.ins_deel_key = " + pins_key
+ " AND idsc.ins_srtcontrole_key = " + psrtcont_key
+ " AND idsc.ins_deelsrtcontrole_status > 0"
+ " AND idsc.ins_scenario_key = " + pscen_key
+ " GROUP BY idsc.ins_deelsrtcontrole_status"
+ " , cm.ins_controlemode_success"
+ " , idsc.ins_deelsrtcontrole_freezedate";
var oRsM = Oracle.Execute(sql);
var max_dsc_key = oRsM("max_dsc_key").Value;
var dsc_status = oRsM("ins_deelsrtcontrole_status").Value || -1;
var cm_success = (oRsM("ins_controlemode_success").Value || 0) == 1;
var dsc_freezedate = oRsM("ins_deelsrtcontrole_freezedate").Value? new Date(oRsM("ins_deelsrtcontrole_freezedate").Value) : null;
if (dsc_status == 6 && cm_success) // 1) De laatste inspectie is succesvol voltooid: De volgende met ins.nextcyclusdate() te berekenen.
{ // De laatste inspectie is een succesvol afgeronde inspectie. De volgende met ins.nextcyclusdate() te berekenen.
sql = "SELECT ins.nextcyclusdate (" + pins_key
+ ", " + psrtcont_key
+ ", " + pscen_key
+ ", 1) nextdate FROM DUAL"
var oRsN = Oracle.Execute(sql);
nextdate = new Date(oRsN("nextdate").Value);
oRsN.Close();
}
else if (dsc_status == 6 && !cm_success) // 2) De laatste inspectie is NIET succesvol voltooid. De volgende is in het freeze jaar.
{ // De laatste inspectie is een NIET succesvol afgeronde inspectie. De volgende is in het freeze jaar.
nextdate = new Date(mjb_freeze_year, 1, 1);
}
else if (dsc_status == 2) // 3) De laatste inspectie is geaccordeerd/bevroren/gestart(2): De volgende is een periode verder als het freeze jaar.
{ // De laatste inspectie is geaccordeerd/bevroren/gestart(2): De volgende is een periode verder als het freeze jaar.
sql = "SELECT fac.nextcyclusdate(" + dsc_freezedate.toSQL()
+ " , xcp.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontrole_eenheid"
+ " , xcp.ins_srtcontrole_periode"
+ " , xcp.ins_srtcontrole_bits"
+ " , 1"
+ " , " + (ismjob? "1" : "0") + ") nextdate"
+ " FROM ins_v_defined_inspect_xcp xcp"
+ " WHERE xcp.ins_deel_key = " + pins_key
+ " AND xcp.ins_srtcontrole_key = " + pscen_key;
var oRsN = Oracle.Execute(sql);
nextdate = new Date(oRsN("nextdate").Value);
oRsN.Close();
}
else // 4) Er is geen inspectie geweest of gestart.
{ // Er is geen inspectie geweest of gestart.
sql = "SELECT ins.nextcyclusdate (" + pins_key
+ ", " + psrtcont_key
+ ", " + pscen_key
+ ", 1) nextdate FROM DUAL"
var oRsN = Oracle.Execute(sql);
nextdate = new Date(oRsN("nextdate").Value);
oRsN.Close();
}
}
else
{
// Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen?
var sql = "SELECT ins_deelsrtcontrole_datum"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_srtcontrole_key = " + psrtcont_key
+ " AND idsc.ins_deel_key = " + pins_key
+ " AND idsc.ins_scenario_key = " + pscen_key
+ " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{ // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd.
sql = "SELECT ins.nextcyclusdate (" + pins_key
+ ", " + psrtcont_key
+ ", " + (mjob? pscen_key : "1")
+ ", 1) nextdate FROM DUAL";
var oRsN = Oracle.Execute(sql);
nextdate = new Date(oRsN("nextdate").Value);
oRsN.Close();
}
oRs.Close();
//else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld.
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
}
return nextdate;
},
getresdeel_sql:
function ()
{
@@ -2451,25 +2586,24 @@ ins = {checkAutLevel:
// of anders: ins_deel_aanmaak
// waarbij verondersteld wordt dat inspecties in het verleden wel zijn uitgevoerd
// SQL van objecten met hun eerste vervanging
var sql_componenten =
"SELECT e.ins_deel_key"
+ " , e.ins_srtcontroledl_xcp_key"
+ " , e.ins_srtcontrole_key"
+ " , e.ins_srtcontrole_level"
+ " , e.ins_srtcontrole_omschrijving"
+ " , e.ins_srtcontrole_info"
+ " , e.ins_srtcontrole_kosten"
+ " , e.ins_srtcontrole_kosten2"
+ " , e.ins_srtcontrole_kosten3"
+ " , e.ins_srtcontrole_materiaal"
+ " , e.ins_srtcontrole_periode"
+ " , e.ins_srtcontrole_percentage"
+ " , e.ins_srtcontrole_opmerking"
function getSglComponenten(modus)
{ // SQL van objecten met:
// Modus 1) de aankomende inspecties in het huidige jaar en in de toekomst.
// - Bij goedgekeurd (voor het freezjaar): de nextdate inspectie of de ingeplande inspectie en verdere inspecties in de toekomst.
// - Bij afgekeurd (voor het freezjaar): direct weer in het freeze jaar en verdere inspecties in de toekomst. (Let op dat afgekeurde de eerste inspectie wel of niet is)
// - Bij gefreezed zonder ingeplande inspectie: de gefreezede inspectie en verdere inspecties in de toekomst.
// - Bij gefreezed met ingeplande inspectie: de ingeplande inspectie en verdere inspecties in de toekomst.
// 2) de goedgekeurde en afgekeurde inspecties in het jaar voor het freezejaar.
// 3) de gefreezed inspectie (???in het jaar voor het freezejaar???) indien er ook een inspectie gepland is in de toekomst
// (er zijn dan twee lopende inspectie records aanwezig).
// 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).
// 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) Laatste inpspectie is NIET succesvol (laatste IS NOT NULL && laatste_suc IS NULL).
// Volgende inspectie is in het freeze jaar.
// 5) 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?
@@ -2483,16 +2617,29 @@ ins = {checkAutLevel:
// 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.
+ " , EXTRACT (YEAR FROM COALESCE(c.plandatum" // Plandatum.
+ " , CASE" // Eventueel startdatum (ins_srtcontroledl_xcp_startdat) i.g.v. als er nog geen inspectie heeft plaatsgevonden.
// LET OP: c.laatste is de laatste geplande, geaccordeerde of succesvol uitgevoerde taak.
// laatste_not_suc is de laatste NIET succesvoll uitgevoerde taak.
var sql_vervangingsjaar = (modus == 1
? " EXTRACT (YEAR FROM COALESCE(CASE " // 1) Taak is geaccordeerd (gefreezed). Bedrag in huidig (vervangings)jaar tonen.
+ " WHEN COALESCE(c.ins_deelsrtcontrole_status, e.ins_deelsrtcontrole_status) = 2 AND (COALESCE(c.isPlanned, e.isPlanned) = 0 OR COALESCE(c.isPlanned, e.isPlanned) IS NULL)"
+ " THEN c.ins_deelsrtcontrole_freezedate"
+ " ELSE NULL"
+ " END"
+ " , COALESCE(c.plandatum, e.plandatum)" // 2) Plandatum.
+ " , CASE" // 3) Eventueel startdatum (ins_srtcontroledl_xcp_startdat) i.g.v. als er nog geen inspectie heeft plaatsgevonden.
+ " WHEN c.laatste IS NULL" // Als er al een inspectie is geweest, is de startdatum niet meer van belang.
+ " THEN e.ins_srtcontroledl_xcp_startdat"
+ " ELSE NULL"
+ " END"
+ " , CASE" // Berekenen jaar.
+ " WHEN c.laatste IS NULL AND e.ctr_controle_type = 1" // 1: Controle.
+ " , CASE" // 4) Laatste inspectie is NIET succesvol.
+ " WHEN e.laatste_not_suc IS NOT NULL AND c.laatste IS NULL"
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')"
+ " WHEN c.laatste IS NULL AND e.ctr_controle_type != 1" // 2: Vervanging, 3: Certificering.
+ " ELSE NULL"
+ " END"
+ " , CASE" // 5) Berekenen jaar.
+ " WHEN c.laatste IS NULL AND e.ctr_controle_type = 1" // 5a) 1: Controle.
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')"
+ " WHEN c.laatste IS NULL AND e.ctr_controle_type != 1" // 5b) 2: Vervanging, 3: Certificering.
+ " THEN" // Er is nog geen inspectie geweest
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM e.nextdate) > " + mjb_freeze_year
@@ -2510,22 +2657,27 @@ ins = {checkAutLevel:
+ " ELSE ADD_MONTHS(e.nextdate, 12 * e.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
+ " END"
+ " END"
+ " ELSE" // Laatste IS NOT NULL. Er is al een inspectie geweest.
+ " ELSE" // 5c) Laatste IS NOT NULL. Er is al een inspectie geweest.
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM e.nextdate) > EXTRACT(YEAR FROM SYSDATE)"
+ " THEN e.nextdate" // 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 steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
+ " END"
+ " END)) vervangingsjaar"
+ " END))"
: (modus == 2
? " EXTRACT(YEAR FROM c.ins_deelsrtcontrole_datum)"
: " EXTRACT(YEAR FROM c.ins_deelsrtcontrole_freezedate)")) + " vervangingsjaar";
// Eerste inspectie datum bepalen zonder na de plandatum te kijken (orginele inspectie datum).
// Als de registratiedatum in de toekomst ligt en de startdatum eventueel ook dan geldt het volgende.
// Als de registratiedatum in de toekomst ligt en de startdatum eventueel ook dan geldt het volgende:
// Voor Controle(1): Eerste inspectie tonen op MAX(startdatum, registratiedatum) van het object.
// Voor Vervanging(2) of Certificering(3):
// a) Als registratiedatum het verst in de toekomst ligt: Eerste inspectie tonen op 1 periode verder dan de registratiedatum.
// b) Als de startdatum het verst in de toekomst ligt: Eerste inspectie tonen op de startdatum.
// De aanmaakdatum/Registratiedatum is altijd ingevuld en als er al een inspectie is geweest, zijn de startdatum en registratiedatum niet meer van belang.
+ " , EXTRACT (YEAR FROM COALESCE(CASE" // Startdatum of registratiedatum in de toekomst en er is nog geen inspectie geweest.
+ " WHEN c.laatste IS NULL AND"
var sql_org_nextdate =
" EXTRACT (YEAR FROM COALESCE(CASE"
+ " WHEN c.laatste IS NULL AND" // Startdatum of registratiedatum in de toekomst en er is nog geen inspectie geweest.
+ " (e.ins_srtcontroledl_xcp_startdat IS NOT NULL AND"
+ " (EXTRACT(YEAR FROM e.ins_srtcontroledl_xcp_startdat) > EXTRACT(YEAR FROM SYSDATE) OR"
+ " EXTRACT(YEAR FROM e.ins_deel_aanmaak) > EXTRACT(YEAR FROM SYSDATE)))"
@@ -2586,7 +2738,7 @@ ins = {checkAutLevel:
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(e.nextdate, -1 * 12 * e.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
+ " EXTRACT(YEAR FROM ADD_MONTHS(e.nextdate, -1 * 12 * e.ins_srtcontrole_periode)) != EXTRACT(YEAR FROM e.ins_deel_aanmaak)"
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Nu en vorige inspectie liggen tussen start en freeze jaar.
+ " THEN TO_DATE('" + mjb_freeze_year + "', 'YYYY')" // Nu en berekende vorige inspectie liggen tussen start en freeze jaar.
+ " ELSE e.nextdate"
+ " END"
+ " ELSE" // Nextdate is voor of in het freeze jaar.
@@ -2600,12 +2752,35 @@ ins = {checkAutLevel:
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM e.nextdate) > EXTRACT(YEAR FROM SYSDATE)"
+ " THEN e.nextdate" // 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 steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
+ " END"
+ " END)) org_nextdate"
+ " , c.plandatum"
+ " , e.ins_deel_aantal"
+ " END)) org_nextdate";
var sql_componenten =
" SELECT e.ins_deel_key"
+ " , e.ins_srtcontroledl_xcp_key"
+ " , e.ins_srtcontrole_key"
+ " , e.ins_srtcontrole_level"
+ " , e.ins_srtcontrole_omschrijving"
+ (modus == 1
? " , e.ins_srtcontrole_info"
+ " , e.ins_srtcontrole_kosten"
+ " , e.ins_srtcontrole_kosten2"
+ " , e.ins_srtcontrole_kosten3"
+ " , e.ins_srtcontrole_materiaal"
+ " , e.ins_srtcontrole_percentage"
+ " , e.ins_srtdeel_omschrijving"
: "")
+ " , e.ins_srtcontrole_periode"
+ " , e.ins_srtcontrole_opmerking"
+ " , " + sql_vervangingsjaar
+ " , " + sql_org_nextdate
+ " , c.ins_deelsrtcontrole_datum"
+ (modus != 1
? " , c.ins_deelsrtcontrole_freezecost bedrag"
+ " , 1 hierlevel"
: "")
+ " , e.ins_deel_aantal"
+ " , e.ins_srtdeel_eenheid"
+ " , e.ins_srtcontrole_eind"
+ " , e.ins_srtcontrole_afbouwtijd"
@@ -2620,47 +2795,100 @@ ins = {checkAutLevel:
+ " , e.scenario_aantal"
+ " , c.ins_deelsrtcontrole_freezedate"
+ " , c.ins_deelsrtcontrole_freezecost"
+ " , c.ins_deelsrtcontrole_status"
// Alleen een c record (uitgevoerde inspecties) als er al een inspectie is geweest.
// Alleen een e record als er in de aangegeven periode een inpectie gepland is. Dus niet bij lege regels, vandaar COALESCE.
+ " , COALESCE(c.ins_deelsrtcontrole_status, e.ins_deelsrtcontrole_status) ins_deelsrtcontrole_status"
+ " , COALESCE(c.plandatum, e.plandatum) plandatum" // Als er nog geen inspectie is, dan heeft c geen record en is c.plandatum NULL.
+ " , COALESCE(c.isPlanned, e.isPlanned) isPlanned"
+ " , CASE"
+ " WHEN c.hascontroles IS NULL"
+ " THEN 0"
+ " ELSE c.hascontroles"
+ " END hascontroles"
+ " , succes"
+ " FROM (SELECT el.ins_deel_key"
+ " , el.ins_srtcontroledl_xcp_key"
+ " , el.ins_srtcontrole_omschrijving"
+ " , el.ins_srtcontrole_info"
+ (modus == 1
? " , el.ins_srtcontrole_info"
+ " , el.ins_srtcontrole_kosten"
+ " , el.ins_srtcontrole_kosten2"
+ " , el.ins_srtcontrole_kosten3"
+ " , el.ins_srtcontrole_materiaal"
+ " , el.ins_srtcontrole_percentage"
+ " , (SELECT ins_srtdeel_omschrijving FROM ins_srtdeel where ins_srtdeel_key = el.ins_srtdeel_key) ins_srtdeel_omschrijving"
: "")
+ " , el.ins_deel_aanmaak"
+ " , el.ins_srtcontrole_periode"
+ " , el.ins_srtcontrole_percentage"
+ " , el.ins_srtcontrole_opmerking"
+ " , el.ins_srtcontrole_key"
+ " , el.ins_srtcontrole_level"
+ " , el.ins_deel_aantal"
+ " , (SELECT ins_srtdeel_omschrijving FROM ins_srtdeel where ins_srtdeel_key = el.ins_srtdeel_key) ins_srtdeel_omschrijving"
+ " , el.ins_srtdeel_eenheid"
+ " , el.ins_srtcontrole_eind"
+ " , el.ins_srtcontrole_afbouwtijd"
+ " , el.prs_kostenplaats_key"
+ " , el.fin_btwtabelwaarde_key"
// Deze ins_deelsrtcontrole_status wordt later alleen gebruikt indien er geen uitgevoerde taak is.
// Status is dus NULL of de status van een lopende inspectie (0, 2 of 5).
+ " , CASE"
+ " WHEN (SELECT MAX(ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deel_key = el.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND id2.ins_deelsrtcontrole_status < 6) IS NOT NULL"
+ " THEN (SELECT ins_deelsrtcontrole_status"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deel_key = el.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND id2.ins_deelsrtcontrole_status < 6))"
+ " ELSE null" // Status van het laatste uitgevoerde taak.
+ " END ins_deelsrtcontrole_status"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = el.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (0)"
+ " AND idsc.ins_scenario_key = el.ins_scenario_key) IS NOT NULL"
+ " THEN 1"
+ " ELSE null"
+ " END isPlanned"
+ " , (SELECT MAX(dsc1.ins_deelsrtcontrole_plandatum)"
+ " FROM ins_deelsrtcontrole dsc1"
+ " WHERE dsc1.ins_deel_key = el.ins_deel_key"
+ " AND dsc1.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND dsc1.ins_scenario_key = el.ins_scenario_key"
+ " AND dsc1.ins_deelsrtcontrole_status < 5) plandatum"
// Laatste (niet) succesvol uitgevoerde taak.
+ " , (SELECT MAX(ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole id2"
+ " , ins_controlemode cm"
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
+ " AND id2.ins_deel_key = el.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND cm.ins_controlemode_success IS NULL"
+ " AND id2.ins_deelsrtcontrole_status = 6"
+ " ) laatste_not_suc"
+ " , el.ins_srtcontroledl_xcp_startdat"
+ " , el.ins_srtcontroledl_xcp_eind"
+ " , el.ctr_controle_type"
+ " , ins.nextcyclusdate(el.ins_deel_key, el.ins_srtcontrole_key, 1, 0) nextdate"
+ " , el.ins_scenario_key"
+ (scenario > 1
? " , COALESCE((SELECT MAX(1)" // Heeft de periodieke taak ook de meegegeven scenario 'scenario'.
? " , COALESCE((SELECT MAX(1)" // Heeft de periodieke taak ook de meegegeven scenario "scenario".
+ " FROM ins_srtcontroledl_xcp xcp2"
+ " WHERE xcp2.ins_deel_key = el.ins_deel_key"
+ " AND xcp2.ins_srtcontrole_key = el.ins_srtcontrole_key"
+ " AND xcp2.ins_scenario_key = " + scenario + "), 0)"
: " , 0") + " hasscenario2"
+ (fulldetails && scenario == 1 ?
" , (SELECT LISTAGG(isc.ins_scenario_omschrijving, ', ') WITHIN GROUP (ORDER BY isc.ins_scenario_omschrijving)"
+ (fulldetails && scenario == 1
? " , (SELECT LISTAGG(isc.ins_scenario_omschrijving, ', ') WITHIN GROUP (ORDER BY isc.ins_scenario_omschrijving)"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " , ins_scenario isc"
+ " WHERE xcp.ins_scenario_key = isc.ins_scenario_key "
@@ -2668,8 +2896,8 @@ ins = {checkAutLevel:
+ " AND isc.ins_scenario_key <> 1" // actuele situatie niet meenemen
+ " AND xcp.ins_deel_key = el.ins_deel_key)"
: " , 'dummy'") + " scenario_oms"
+ (fulldetails && scenario == 1 ?
" , (SELECT COUNT(isc.ins_scenario_omschrijving)"
+ (fulldetails && scenario == 1
? " , (SELECT COUNT(isc.ins_scenario_omschrijving)"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " , ins_scenario isc"
+ " WHERE xcp.ins_scenario_key = isc.ins_scenario_key"
@@ -2679,7 +2907,11 @@ ins = {checkAutLevel:
: " , -1") + " scenario_aantal"
+ " FROM ins_v_defined_inspect_xcp el"
+ " WHERE el.ins_srtcontrole_periode > 0"
+ (scenario == 1? " AND ins_scenario_key = 1" : (actsit ? "": " AND ins_scenario_key = " + scenario))
+ (scenario == 1
? " AND ins_scenario_key = 1"
: (actsit
? ""
: " AND ins_scenario_key = " + scenario))
+ " AND el.ctr_ismjob = 1"
// Je moet read CTRUSE rechten hebben op de CTR disciplines om de taken te kunnen zien.
+ " AND el.ctr_discipline_key IN (SELECT w.ins_discipline_key"
@@ -2732,46 +2964,164 @@ ins = {checkAutLevel:
? " AND el.prs_kostenplaats_key = " + kp_key
: "")
+ " ) e"
+ " LEFT OUTER JOIN" // uitgevoerde taken
// Laatste geplande, geaccordeerde of succesvol uitgevoerde taak.
+ " LEFT OUTER JOIN"
+ " (SELECT dsc.ins_srtcontrole_key"
+ " , dsc.ins_deel_key"
+ " , dsc.ins_scenario_key"
// Mode 1: Freeze gegevens van het laatste succesvol uitgevoerde, geplande of bevroren/geaccordeerde record (laatste succesvol uitgevoerde, geplande of bevroren/geaccordeerde taak).
// Alleen geplande, geaccordeerde en de succesvol uitgevoerde taken/inspecties tellen mee in de bepaling van volgende taken/inspecties.
// Mode 2:
// Mode 3: Freeze gegevens van laatste WEL of NIET succesvolle afgeronde/uitgevoerde taak.
// Om uiteindelijk 1 regel over te houden, moet deze waarde voor alle regels hetzelfde zijn.
// Daarom is het bij modus 2 nodig om de lopende freeze gegevens op te halen, indien er een lopende taak is.
// Later kan dan de juiste waarde genomen worden, zodat toch alle regels samen genomen kunnen worden tot 1 regel.
+ " , dsc.ins_deelsrtcontrole_freezedate"
+ " , dsc.ins_deelsrtcontrole_freezecost"
+ " , dsc.ins_deelsrtcontrole_status"
+ " , CASE"
// Eerst kijken of er een lopende reservering is.
+ " WHEN (SELECT MAX(ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND id2.ins_deelsrtcontrole_status < 6) IS NOT NULL"
+ " THEN (SELECT ins_deelsrtcontrole_status"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND id2.ins_deelsrtcontrole_status < 6))"
// Nu kijken naar een succesvolle inspectie.
+ " WHEN dsc.ins_controlemode_key IS NOT NULL AND"
+ " (SELECT cm.ins_controlemode_success"
+ " FROM ins_controlemode cm"
+ " WHERE cm.ins_controlemode_key = dsc.ins_controlemode_key) IS NULL"
+ " THEN CASE"
+ " WHEN (SELECT COUNT(ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole id2"
+ " , ins_controlemode cm"
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
+ " AND id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND cm.ins_controlemode_success = 1) > 0"
+ " THEN 6"
+ " ELSE null"
+ " END"
+ " ELSE dsc.ins_deelsrtcontrole_status" // Status van het laatste uitgevoerde taak.
+ " END ins_deelsrtcontrole_status"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = dsc.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (0)"
+ " AND idsc.ins_scenario_key = dsc.ins_scenario_key) IS NOT NULL"
+ " THEN 1"
+ " ELSE null"
+ " END isPlanned"
+ " , (SELECT MAX(dsc1.ins_deelsrtcontrole_plandatum)"
+ " FROM ins_deelsrtcontrole dsc1"
+ " WHERE dsc1.ins_deel_key = dsc.ins_deel_key"
+ " AND dsc1.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND dsc1.ins_scenario_key = dsc.ins_scenario_key"
+ " AND dsc1.ins_deelsrtcontrole_status < 5) plandatum"
+ " , MAX(dsc.ins_deelsrtcontrole_datum) laatste"
+ " , CASE"
+ " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole sdc"
+ " WHERE sdc.ins_deel_key = dsc.ins_deel_key"
+ " AND sdc.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND sdc.ins_deelsrtcontrole_status = 6"
+ " AND sdc.ins_scenario_key = 1) > 0"
+ " THEN 1"
+ " ELSE 0"
+ " END hascontroles"
+ " FROM ins_deelsrtcontrole dsc"
+ " WHERE ins_deelsrtcontrole_key = (SELECT MAX(id2.ins_deelsrtcontrole_key)" // Laatste record.
// Laatste geplande, geaccordeerde of succesvol uitgevoerde taak.
+ " , (SELECT MAX(ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole id2"
+ " , ins_controlemode cm"
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
+ " AND id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = 1"
+ " AND cm.ins_controlemode_success = 1"
+ " ) laatste"
+ " , (SELECT MAX(ins_deelsrtcontrole_datum)"
+ " FROM ins_deelsrtcontrole id2"
+ " WHERE id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = dsc.ins_scenario_key)"
+ " AND id2.ins_scenario_key = 1)"
+ " ins_deelsrtcontrole_datum"
+ " , CASE"
+ " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole sdc"
+ " , ins_controlemode cm"
+ " WHERE sdc.ins_controlemode_key = cm.ins_controlemode_key"
+ " AND sdc.ins_deel_key = dsc.ins_deel_key"
+ " AND sdc.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND sdc.ins_deelsrtcontrole_status = 6"
+ " AND sdc.ins_scenario_key = 1"
+ " AND cm.ins_controlemode_success = 1) > 0" // Alleen succesvol uitgevoerde taken/inspecties tellen mee.
+ " THEN 1"
+ " ELSE 0"
+ " END hascontroles"
+ " , (SELECT cm.ins_controlemode_success"
+ " FROM ins_controlemode cm"
+ " WHERE cm.ins_controlemode_key = dsc.ins_controlemode_key) succes"
+ " FROM ins_deelsrtcontrole dsc"
+ " WHERE ins_deelsrtcontrole_key = (SELECT MAX(id2.ins_deelsrtcontrole_key)" // Laatste record.
+ " FROM ins_deelsrtcontrole id2"
+ " , ins_controlemode cm"
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key(+)" // Van COALESCE(geaccordeerde(2), voltooide(6)) inspectie de volgende inspectie bereken (dus ik kan (+) hier gebruiken).
+ " AND id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = dsc.ins_scenario_key"
// Alleen geplande, geaccordeerde en de succesvol uitgevoerde taken/inspecties tellen mee in de bepaling van volgende taken/inspecties.
+ (modus == 1
// Laatste succesvol uitgevoerde, geplande of bevroren/geaccordeerde taak (laatste record) waarmee de volgende taak wordt berekend/bepaald.
? " AND (cm.ins_controlemode_success = 1"
+ " OR id2.ins_deelsrtcontrole_status = 2"
+ " OR id2.ins_deelsrtcontrole_status IN"
+ " (CASE"
+ " WHEN (SELECT COUNT(dsc1.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole dsc1"
+ " WHERE dsc1.ins_deel_key = dsc.ins_deel_key"
+ " AND dsc1.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND dsc1.ins_scenario_key = dsc.ins_scenario_key"
+ " AND dsc1.ins_deelsrtcontrole_status > 0) > 0"
+ " THEN -1"
+ " ELSE 0" // De ingeplande inspectie is het eerste record.
+ " END)"
+ " ))"
: (modus == 2
// Afgeronde taken/inspecties wel of niet succesvol in de jaren voor het freeze jaar.
? " AND id2.ins_deelsrtcontrole_status = 6)"
// Geaccordeerde/bevroren taken/inspecties in de jaren voor het freeze jaar.
// modus 3.
: " AND id2.ins_deelsrtcontrole_status = 2)"))
+ (modus == 3
// Er is naast een geaccordeerde/bevroren inspectie ook nog een ingeplande inspectie.
? " AND EXISTS (SELECT id2.ins_deelsrtcontrole_key" // Er mag maar 1 ingeplande inspectie zijn.
+ " FROM ins_deelsrtcontrole id2"
+ " , ins_controlemode cm"
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key(+)"
+ " AND id2.ins_deel_key = dsc.ins_deel_key"
+ " AND id2.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND id2.ins_scenario_key = dsc.ins_scenario_key"
+ " AND id2.ins_deelsrtcontrole_status = 0)"
: "")
+ " GROUP BY dsc.ins_srtcontrole_key"
+ " , dsc.ins_deel_key"
+ " , dsc.ins_scenario_key"
+ " , dsc.ins_deelsrtcontrole_freezedate"
+ " , dsc.ins_deelsrtcontrole_freezecost"
+ " , dsc.ins_deelsrtcontrole_status) c"
+ " , dsc.ins_deelsrtcontrole_status"
+ " , dsc.ins_controlemode_key) c"
+ " ON e.ins_deel_key = c.ins_deel_key"
+ " AND e.ins_srtcontrole_key = c.ins_srtcontrole_key"
+ " AND e.ins_scenario_key = c.ins_scenario_key";
return sql_componenten;
}
function getSglYearcostSelect(modus)
{ // Select parameters voor de sql van de jaarkosten (sql_yearcost) van objecten met:
// Modus 1) hun aankomende inspecties.
// 2) hun goedgekeurde en afgekeurde inspecties.
var ins_xcp_active_cost = S("ins_xcp_active_cost");
var costarray = [];
if (ins_xcp_active_cost & 1) costarray.push("COALESCE(comp.ins_srtcontrole_kosten, 0)");
@@ -2782,7 +3132,7 @@ ins = {checkAutLevel:
if (costarray.length > 0)
sqlcost = "(" + costarray.join(" + ") + ") *";
var sql_yearcost =
var sql_yearcost_select =
"SELECT comp.ins_deel_key"
+ " , comp.ins_srtcontroledl_xcp_key"
+ " , comp.ins_srtcontrole_key"
@@ -2793,8 +3143,9 @@ ins = {checkAutLevel:
+ " , comp.plandatum"
+ " , comp.ins_srtcontrole_periode"
+ " , comp.ins_srtcontrole_opmerking"
+ " , CASE"
+ " WHEN comp.vervangingsjaar = comp.org_nextdate AND"
+ (modus == 1
? " , CASE"
+ " WHEN EXTRACT(YEAR FROM comp.ins_deelsrtcontrole_freezedate) = comp.org_nextdate AND"
+ " comp.ins_deelsrtcontrole_status = 2"
+ " THEN COALESCE(comp.ins_deelsrtcontrole_freezecost, 0)"
+ " ELSE"
@@ -2811,6 +3162,8 @@ ins = {checkAutLevel:
+ " , 0)"
+ " END bedrag"
+ " , hierlevel"
: " , comp.ins_deelsrtcontrole_freezecost bedrag"
+ " , 1 hierlevel")
+ " , comp.ins_deel_aantal"
+ " , comp.ins_srtdeel_eenheid"
+ " , comp.ins_srtcontrole_eind"
@@ -2827,8 +3180,36 @@ ins = {checkAutLevel:
+ " , comp.ins_deelsrtcontrole_freezedate"
+ " , comp.ins_deelsrtcontrole_freezecost"
+ " , comp.ins_deelsrtcontrole_status"
+ " , CASE"
+ " WHEN comp.isPlanned = 1"
+ " THEN 1"
+ " ELSE 0" // null waarden krijgen de waarde 0.
+ " END isPlanned"
+ " , comp.hascontroles"
+ " FROM (WITH comps (ins_deel_key" // Recursive WITH statement om het volgende vervangingsjaar te vinden (m.vervangingsjaar + m.ins_srtcontrole_periode).
+ (modus == 2
? " , comp.succes"
: " , 0") + " completed"
+ (modus == 2
? " , CASE WHEN comp.succes = 1 THEN 0 ELSE 1 END"
: " , 0") + " rejected";
return sql_yearcost_select;
}
// Bepalen SQL van objecten met:
// Modus 1) de aankomende inspecties in het huidige jaar en in de toekomst.
// 2) de goedgekeurde en afgekeurde inspecties in het jaar voor het freezejaar.
// 3) de geaccordeerde/bevroren inspectie in het jaar voor het freezejaar indien er ook een inspectie gepland is in de toekomst
// (er zijn dan twee lopende inspectie records aanwezig).
var sql_componenten1 = getSglComponenten(1);
var sql_yearcost_select1 = getSglYearcostSelect(1);
var sql_componenten2 = getSglComponenten(2);
var sql_yearcost_select2 = getSglYearcostSelect(2);
var sql_componenten3 = getSglComponenten(3);
var sql_yearcost_select3 = getSglYearcostSelect(3);
var sql_withcomps = "WITH comps (ins_deel_key" // Recursive WITH statement om het volgende vervangingsjaar te vinden (m.vervangingsjaar + m.ins_srtcontrole_periode).
+ " , ins_srtcontroledl_xcp_key"
+ " , ins_srtcontrole_key"
+ " , ins_srtcontrole_level"
@@ -2860,7 +3241,12 @@ ins = {checkAutLevel:
+ " , ins_deelsrtcontrole_freezedate"
+ " , ins_deelsrtcontrole_freezecost"
+ " , ins_deelsrtcontrole_status"
+ " , hascontroles)"
+ " , isPlanned"
+ " , hascontroles)";
var sql_yearcost =
sql_yearcost_select1
+ " FROM (" + sql_withcomps
+ " AS (SELECT ins_deel_key"
+ " , ins_srtcontroledl_xcp_key"
+ " , ins_srtcontrole_key"
@@ -2893,8 +3279,9 @@ ins = {checkAutLevel:
+ " , ins_deelsrtcontrole_freezedate"
+ " , ins_deelsrtcontrole_freezecost"
+ " , ins_deelsrtcontrole_status"
+ " , isPlanned"
+ " , hascontroles"
+ " FROM (" + sql_componenten + ")"
+ " FROM (" + sql_componenten1 + ")"
+ " WHERE vervangingsjaar IS NOT NULL"
+ " UNION ALL" // latere jaren
+ " SELECT m.ins_deel_key"
@@ -2929,13 +3316,17 @@ ins = {checkAutLevel:
+ " , m.ins_deelsrtcontrole_freezedate"
+ " , m.ins_deelsrtcontrole_freezecost"
+ " , m.ins_deelsrtcontrole_status"
+ " , m.isPlanned"
+ " , CASE"
+ " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole sdc"
+ " WHERE sdc.ins_deel_key = m.ins_deel_key"
+ " , ins_controlemode cm"
+ " WHERE sdc.ins_controlemode_key = cm.ins_controlemode_key"
+ " AND sdc.ins_deel_key = m.ins_deel_key"
+ " AND sdc.ins_srtcontrole_key = m.ins_srtcontrole_key"
+ " AND sdc.ins_deelsrtcontrole_status = 6"
+ " AND sdc.ins_scenario_key = 1) > 0"
+ " AND sdc.ins_scenario_key = 1"
+ " AND cm.ins_controlemode_success = 1) > 0"
+ " THEN 1"
+ " ELSE 0"
+ " END hascontroles"
@@ -2943,7 +3334,16 @@ ins = {checkAutLevel:
+ " WHERE (m.vervangingsjaar + m.ins_srtcontrole_periode <= " + toyear + "))"
+ " SELECT *"
+ " FROM comps"
+ " ) comp";
+ " ) comp"
+ " WHERE vervangingsjaar >= EXTRACT(YEAR FROM SYSDATE)"
+ " UNION "
+ sql_yearcost_select2 // Inspecties die wel of niet succesvol zijn afgerond.
+ " FROM (" + sql_componenten2 + ") comp"
+ " WHERE comp.vervangingsjaar IS NOT NULL"
+ " UNION "
+ sql_yearcost_select3 // Geaccordeerde/bevroren inspectie in het jaar voor het freezejaar indien er ook ale een ingeplande inspectie in de toekomst is (Twee lopende inspectie records).
+ " FROM (" + sql_componenten3 + ") comp"
+ " WHERE comp.vervangingsjaar IS NOT NULL";
var keyColumn = "";
switch (groupby)
@@ -2998,17 +3398,17 @@ ins = {checkAutLevel:
+ " , cy.ins_srtcontroledl_xcp_startdat"
+ " , cy.ins_srtcontroledl_xcp_eind"
+ " , cy.ins_srtcontrole_eind"
// De startdatum is MAX(startdatum, aanmaakdatum/registratiedatum) en heeft altijd een waarde (ins_deel_aanmaak is altijd gevuld).
+ " , EXTRACT(YEAR FROM LEAST(COALESCE(cy.ins_srtcontroledl_xcp_startdat"
+ " , dl.ins_deel_aanmaak)"
+ " , COALESCE(dl.ins_deel_aanmaak"
+ " , cy.ins_srtcontroledl_xcp_startdat))"
+ " ) startjaar"
// Aanmaakdatum is altijd aanwezig.
+ " , CASE"
+ " WHEN cy.ins_srtcontroledl_xcp_startdat IS NOT NULL AND dl.ins_deel_aanmaak IS NULL"
+ " THEN 'S'" // Startdatum
+ " WHEN cy.ins_srtcontroledl_xcp_startdat IS NULL AND dl.ins_deel_aanmaak IS NOT NULL"
+ " THEN 'A'" // Aanmaakdatum/Registratiedatum
+ " WHEN cy.ins_srtcontroledl_xcp_startdat IS NOT NULL AND dl.ins_deel_aanmaak IS NOT NULL"
+ " WHEN cy.ins_srtcontroledl_xcp_startdat IS NOT NULL"
+ " THEN"
+ " CASE"
+ " WHEN EXTRACT(YEAR FROM cy.ins_srtcontroledl_xcp_startdat) >= EXTRACT(YEAR FROM dl.ins_deel_aanmaak)"
@@ -3041,7 +3441,10 @@ ins = {checkAutLevel:
+ " , cy.ins_deelsrtcontrole_freezedate"
+ " , cy.ins_deelsrtcontrole_freezecost"
+ " , cy.ins_deelsrtcontrole_status"
+ " , cy.isPlanned"
+ " , cy.hascontroles"
+ " , cy.completed"
+ " , cy.rejected"
+ " FROM (" + sql_yearcost + ") cy"
+ " , ins_deel dl" // I.v.m. ORA-03113 fout: ins_v_aanwezigdeel vervangen door ins_deel en verder uitgeschreven (FSN#51212).
+ " , ins_srtdeel isd"
@@ -3132,26 +3535,7 @@ ins = {checkAutLevel:
+ " , (SELECT " + S("prs_kpn_string")
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = CV.prs_kostenplaats_key) kostenplaats"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_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 IN (0)"
+ " AND idsc.ins_scenario_key = cv.ins_scenario_key) IS NOT NULL"
+ " THEN 1"
+ " ELSE 0"
+ " END isPlanned"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_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 IN (2, 5)"
+ " AND idsc.ins_scenario_key = cv.ins_scenario_key) IS NOT NULL"
+ " THEN 0"
+ " ELSE 1"
+ " END canBePlanned"
+ " , cv.isPlanned"
+ " , COALESCE((SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = cv.ins_deel_key"
@@ -3162,6 +3546,7 @@ ins = {checkAutLevel:
// Als er een andere inspectie is met een lagere ins_srtcontrole_level in hetzelfde jaar dan springt ons bedrag op 0
// Dit gebeurt o.a. ook als: 1) het object vervallen is of
// 2) de startdatum of de registratiedatum in de toekomst ligt.
//
// Als de registratiedatum in de toekomst ligt en de startdatum eventueel ook dan geldt het volgende.
// Voor Controle(1): Eerste inspectie tonen op MAX(startdatum, registratiedatum) van het object.
// Voor Vervanging(2) of Certificering(3):
@@ -3170,14 +3555,27 @@ ins = {checkAutLevel:
+ " , CASE WHEN MIN(cv.ins_srtcontrole_level) KEEP (DENSE_RANK FIRST ORDER BY cv.ins_srtcontrole_level) "
+ " OVER (PARTITION BY cv.ins_deel_key, cv.vervangingsjaar, cv.ins_scenario_key) < cv.ins_srtcontrole_level"
+ " OR"
// Vanaf vervaljaar-afbouwtijd het bedrag op 0 zetten (geen bedrag tonen)
+ " (cv.vervaljaar IS NOT NULL AND (cv.vervaljaar - COALESCE(cv.afbouwtijd, 0)) < cv.vervangingsjaar)"
+ " OR"
+ " (cv.startjaar IS NOT NULL AND cv.startjaar >= cv.vervangingsjaar AND "
+ " (cv.starttype = 'S' OR (cv.starttype = 'A' AND ctr_controle_type = 1)))"
// Voor het startjaar het bedrag altijd op 0 zetten (geen bedrag tonen).
+ " (cv.startjaar > cv.vervangingsjaar)"
+ " OR"
+ " (cv.startjaar IS NOT NULL AND (CV.startjaar + ins_srtcontrole_periode) > cv.vervangingsjaar AND"
// Als registratiedatum het verst in de toekomst ligt en voor Vervanging en Certificering is de eerste inspecte 1 periode verder.
// De jaren daarvoor dus 0 opleveren.
+ " ((CV.startjaar + ins_srtcontrole_periode) > cv.vervangingsjaar AND"
+ " cv.starttype = 'A' AND ctr_controle_type != 1 AND"
+ " ((cv.planjaar IS NULL) OR (cv.planjaar IS NOT NULL AND cv.planjaar > cv.vervangingsjaar)))"
+ " ((cv.planjaar IS NULL) OR (cv.planjaar IS NOT NULL AND cv.planjaar > cv.vervangingsjaar)) AND"
// Geldt alleen als er nog geen inspectie is geweest.
// Er kan namelijk een inspectie verschoven zijn voor de startdatum bij Vervanging(2) en Certificering(3).
// De eerste is bij Vervanging(2) en Certificering(3) standaard gepland op startdatum + periode.
+ " NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_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_scenario_key = cv.ins_scenario_key"
+ " AND idsc.ins_deelsrtcontrole_status = 6"
+ " AND EXTRACT(YEAR FROM idsc.ins_deelsrtcontrole_datum) <= cv.vervangingsjaar))"
+ " THEN 0 "
+ " ELSE cv.bedrag "
+ " END bedrag"
@@ -3186,10 +3584,16 @@ ins = {checkAutLevel:
+ " , cv.hasscenario2"
+ " , cv.scenario_oms"
+ " , cv.scenario_aantal"
+ " , cv.ins_deelsrtcontrole_freezedate"
+ " , cv.ins_deelsrtcontrole_freezecost"
+ " , cv.ins_deelsrtcontrole_status"
+ " , cv.hascontroles"
+ " , cv.completed"
+ " , cv.rejected"
+ " , (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) freezed"
+ " FROM (" + sql_cost_verval + ") cv";
var sqlArray = [];
@@ -3273,7 +3677,13 @@ ins = {checkAutLevel:
var sql = "SELECT *"
+ " FROM ("
+ sql_cost
+ ") PIVOT (SUM(bedrag), SUM(orgbedrag) AS orgbedrag "
+ " ) PIVOT (SUM(bedrag)"
+ " , SUM(orgbedrag) AS orgbedrag"
+ (fulldetails
? " , SUM(completed) AS completed"
+ " , SUM(rejected) AS rejected"
+ " , SUM(freezed) AS freezed"
: "")
+ " FOR vervangingsjaar IN (" + jaren.join(",") + ") )";
if (scenario > 1)
@@ -3371,7 +3781,9 @@ ins = {checkAutLevel:
+ " WHEN result.\"" + mjb_freeze_year + "\" = 0 AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" IS NOT NULL AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" > 0"
+ " THEN " + safe.quoted_sql(L("lcl_mjb_performed_high"))
+ " ELSE ''"
+ " END opm_has_higherprio"; // Opmerking als het een hogere prio heeft (has_higherprio)
+ " END opm_has_higherprio" // Opmerking als het een hogere prio heeft (has_higherprio)
+ " , isd.ins_srtdeel_omschrijving"
+ " , xcp.ins_srtcontrole_info";
}
else // finish
{