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:
634
APPL/INS/ins.inc
634
APPL/INS/ins.inc
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user