AAGN#88039: Performance issue bij assetmanagement en draaien/exporteren taken-overzicht.
svn path=/Website/trunk/; revision=70724
This commit is contained in:
616
APPL/INS/ins.inc
616
APPL/INS/ins.inc
@@ -1738,6 +1738,380 @@ ins = {checkAutLevel:
|
||||
+ " GROUP BY res_ins_deel_key)"
|
||||
},
|
||||
|
||||
// De inspectie_next met berekeningen van de nextcyclusdate (database procedure fac.nextcyclusdate()) zo ver mogelijk naar buiten gehaald,
|
||||
// zodat deze berekeningen zo laat mogelijk worden berekend met een zo klein mogelijke verzameling resultaten (RABO#60119).
|
||||
// Voor RABO ging het aantal aanroepen van fac.nextcyclusdate() van 635279 naar 1888 aanroepen (nog maar 0,3% van de oorspronkelijke aantal aanroepen).
|
||||
// De uitvoertijd ging van 2,5-3 minuten naar ongeveer 40 seconden.
|
||||
// Voor AAGN#88039: Voor het testen van de performance van de functies getnextinspection_future en getnextinspection_n in de database zijn ze ook in de database gezet.
|
||||
// De query duurde dan 3 seconden langer (Van 17 sec. naar 20 sec). Daarom deze functie maar hier in de code gelaten.
|
||||
// Wel is de code voor de periodiek taken lijst en de taken lijst bij een object nu samengevoegd in de functie getnextinspection_future.
|
||||
|
||||
// Mode 1: Periodieke taken lijst.
|
||||
// Inspecties die nog nooit zijn uitgevoerd/ingepland. Er is nog geen ins_deelsrtcontrole regel aanwezig en dus ook geen plandatum/respijtdatum.
|
||||
// Er is nog geen laatste inspectie (laatste is NULL).
|
||||
// Mode 2: Taken lijst bij een object.
|
||||
// Mogelijke inspecties op het object die nog gaan komen.
|
||||
// Als er een voorlopige inspectie is aangemaakt maar nog niet is afgemeld of afgerond, dan hoeft er geen nieuwe inspectie te worden getoond.
|
||||
// Dus met de respijt heb je in dit eerste deel van de query niet meer te maken.
|
||||
getnextinspection_future:
|
||||
function (ptable, pmode)
|
||||
{
|
||||
var mjb_freeze_or_sys_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
|
||||
var mjb_start_year = S("mjb_start_year");
|
||||
|
||||
var laatste = "NULL";
|
||||
var laatste_not_suc = "NULL";
|
||||
var laatste_jaar = "NULL";
|
||||
if (pmode == 2)
|
||||
{
|
||||
var laatste = "(SELECT MAX(ins_deelsrtcontrole_key) laatste"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key(+)"
|
||||
+ " AND id2.ins_scenario_key = 1"
|
||||
+ " AND (cm.ins_controlemode_success = 1 OR id2.ins_deelsrtcontrole_status < 6)"
|
||||
+ " AND id2.ins_deel_key = " + ptable + ".ins_deel_key"
|
||||
+ " AND id2.ins_srtcontrole_key = " + ptable + ".ins_srtcontrole_key)";
|
||||
|
||||
// Laatste (niet) succesvol uitgevoerde taak.
|
||||
var laatste_not_suc = "(SELECT MAX(id2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
|
||||
+ " AND cm.ins_controlemode_success = 0"
|
||||
+ " AND id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id3"
|
||||
+ " WHERE id3.ins_deel_key = " + ptable + ".ins_deel_key"
|
||||
+ " AND id3.ins_srtcontrole_key = " + ptable + ".ins_srtcontrole_key"
|
||||
+ " AND id3.ins_scenario_key = 1"
|
||||
+ " AND id3.ins_deelsrtcontrole_status = 6))";
|
||||
|
||||
var laatste_jaar = "(SELECT MAX(ins_deelsrtcontrole_datum) laatste_jaar"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
|
||||
+ " AND cm.ins_controlemode_success = 0"
|
||||
+ " AND id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id3"
|
||||
+ " WHERE id3.ins_deel_key = " + ptable + ".ins_deel_key"
|
||||
+ " AND id3.ins_srtcontrole_key = " + ptable + ".ins_srtcontrole_key"
|
||||
+ " AND id3.ins_scenario_key = 1"
|
||||
+ " AND id3.ins_deelsrtcontrole_status = 6))";
|
||||
}
|
||||
|
||||
if (pmode == 1) // laatste IS NULL, dan is lastinspect dus ook NULL.
|
||||
{
|
||||
var lastinspect = "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
var lastinspect = "(SELECT CASE " + ptable + ".ins_srtcontrole_mode"
|
||||
+ " WHEN 0"
|
||||
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus. Uitgaan van eigenlijke/orginele inspectiedatum.
|
||||
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus. Uitgaan van werkelijke inspectiedatum.
|
||||
+ " END ins_deelsrtcontrole_datum"
|
||||
+ " FROM ins_deelsrtcontrole idsc"
|
||||
+ " WHERE idsc.ins_deel_key = " + ptable + ".ins_deel_key"
|
||||
+ " AND idsc.ins_srtcontrole_key = " + ptable + ".ins_srtcontrole_key"
|
||||
+ " AND idsc.ins_deelsrtcontrole_status IN (5, 6)"
|
||||
+ " AND idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole idsc2"
|
||||
+ " WHERE idsc2.ins_deel_key = " + ptable + ".ins_deel_key"
|
||||
+ " AND idsc2.ins_srtcontrole_key = " + ptable + ".ins_srtcontrole_key"
|
||||
+ " AND idsc2.ins_deelsrtcontrole_status IN (5, 6)"
|
||||
+ " AND idsc2.ins_scenario_key = 1))";
|
||||
}
|
||||
|
||||
var nextdate = " CASE"
|
||||
+ " WHEN " + ptable + ".ctr_ismjob = 1"
|
||||
+ " THEN" // MJOB
|
||||
// 1) Laatste inpspectie is NIET succesvol (laatste_not_suc IS NOT NULL).
|
||||
// De NIET succesvolle taak is in het freeze jaar
|
||||
// Ja) Volgende inspectie is in het jaar na het freeze jaar.
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
// 2) Er is nog geen inspectie geweest en de startdatum is ingevuld.
|
||||
// Er geldt dan 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.
|
||||
// 3) Er is nog geen inspectie geweest en alleen de aanmaakdatum/Registratiedatum ligt in het huidige jaar of in de toekomst.
|
||||
// Voor Controle(1):
|
||||
// a) Als registratiedatum < freeze jaar dan eerste inspectie tonen in het freeze jaar
|
||||
// b) Anders inspectie tonen in het registratiejaar.
|
||||
// Voor Vervanging(2) of Certificering(3):
|
||||
// a) Als (registratiedatum + periode) < freeze jaar dan eerste inspectie tonen in het freeze jaar
|
||||
// b) Anders inspectie tonen in het (registratiejaar + periode)
|
||||
// 4) Startdatum is niet ingevuld en aanmaakdatum is geweest (ligt in het verleden).
|
||||
// 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? (Nextdate is eerste next(inspectie)datum, startdatum of aanmaakdatum in de toekomst. Hier aanmaakdatum + n*periode met n = 0 of hoger.
|
||||
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is het jaar van de nextdate.
|
||||
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is in het jaar "nextdatum + periode".
|
||||
// c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
|
||||
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
|
||||
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
// LET OP: c.laatste: geeft de ins_deelsrtcontrole_datum terug van de laatste geplande, geaccordeerde of succesvol uitgevoerde taak.
|
||||
// laatste_not_suc: Als de laatste uitgevoerde taak NIET succesvoll is geeft deze de ins_deelsrtcontrole_datum terug van deze taak.
|
||||
// P.S.: De aanmaakdatum/Registratiedatum is altijd ingevuld en als er al een inspectie is geweest, zijn de startdatum en registratiedatum niet meer van belang.
|
||||
+ " COALESCE(CASE" // 1) Laatste inspectie is NIET succesvol en er zijn verder geen geplande, geaccordeerde of succesvol uitgevoerde taak aanwezig.
|
||||
+ " WHEN " + laatste_not_suc + " IS NOT NULL AND " + laatste + " IS NULL"
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM " + laatste_jaar + ") = " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + (mjb_freeze_or_sys_year + 1) + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " END"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , CASE" // 2) Eventueel startdatum (ins_srtcontroledl_xcp_startdat) i.g.v. als er nog geen inspectie heeft plaatsgevonden.
|
||||
+ " WHEN " + laatste + " IS NULL AND" // Als er al een inspectie is geweest, is de startdatum niet meer van belang.
|
||||
+ " " + ptable + ".ins_srtcontroledl_xcp_startdat IS NOT NULL" // Startdatum is ingevuld en er is nog geen inspectie geweest.
|
||||
+ " THEN" // 2) Startdatum is ingevuld en ligt in het verleden of de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM " + ptable + ".ins_srtcontroledl_xcp_startdat) >= EXTRACT(YEAR FROM " + ptable + ".ins_deel_aanmaak)"
|
||||
+ " THEN" // 2a) Startdatum op of na aanmaakdatum/registratiedatum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM " + ptable + ".ins_srtcontroledl_xcp_startdat) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE " + ptable + ".ins_srtcontroledl_xcp_startdat"
|
||||
+ " END"
|
||||
+ " ELSE" // 2b) Aanmaakdatum/Registratiedatum is na de startdatum.
|
||||
+ " CASE"
|
||||
+ " WHEN " + ptable + ".ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM " + ptable + ".ins_deel_aanmaak) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE " + ptable + ".ins_deel_aanmaak" // Registratiedatum.
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(" + ptable + ".ins_deel_aanmaak, 12 * " + ptable + ".ins_srtcontrole_periode)) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(" + ptable + ".ins_deel_aanmaak, 12 * " + ptable + ".ins_srtcontrole_periode)" // 1 periode na registratiedatum.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " WHEN " + laatste + " IS NULL AND"
|
||||
+ " EXTRACT(YEAR FROM " + ptable + ".ins_deel_aanmaak) >= EXTRACT(YEAR FROM SYSDATE)" // Alleen de aanmaakdatum/registratiedatum is ingevuld.
|
||||
+ " THEN" // 3) Aanmaakdatum/Registratiedatum is alleen ingevuld en ligt in het huidige jaar of in de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN " + ptable + ".ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM " + ptable + ".ins_deel_aanmaak) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE " + ptable + ".ins_deel_aanmaak"
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM ADD_MONTHS(" + ptable + ".ins_deel_aanmaak, 12 * " + ptable + ".ins_srtcontrole_periode)) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(" + ptable + ".ins_deel_aanmaak, 12 * " + ptable + ".ins_srtcontrole_periode)"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE"
|
||||
+ " NULL"
|
||||
+ " END"
|
||||
+ " , CASE" // 4) Berekenen jaar.
|
||||
+ " WHEN " + laatste + " IS NULL AND " + ptable + ".ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // 4a)
|
||||
+ " WHEN " + laatste + " IS NULL AND " + ptable + ".ctr_controle_type != 1" // Vervanging(2), Certificering(3).
|
||||
+ " THEN" // 4b) Er is nog geen inspectie geweest
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0)) > " + mjb_freeze_or_sys_year
|
||||
+ " THEN" // Nextdate is na de freeze datum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0), -1 * 12 * " + ptable + ".ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
|
||||
+ " EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0), -1 * 12 * " + ptable + ".ins_srtcontrole_periode)) != EXTRACT(YEAR FROM " + ptable + ".ins_deel_aanmaak)"
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nu en vorige inspectie liggen tussen start en freeze jaar.
|
||||
+ " ELSE ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0)"
|
||||
+ " END"
|
||||
+ " ELSE" // Nextdate is voor of in het freeze jaar.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0)) >= " + mjb_start_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nextdate tussen start en freeze jaar.
|
||||
+ " ELSE ADD_MONTHS(ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0), 12 * " + ptable + ".ins_srtcontrole_periode)" // Nextdate voor het start jaar.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE" // 4c) Laatste IS NOT NULL. Er is al een inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0)) > EXTRACT(YEAR FROM SYSDATE)"
|
||||
+ " THEN ins.nextcyclusdate(" + ptable + ".ins_deel_key, " + ptable + ".ins_srtcontrole_key, 1, 0)" // Volgende inspectie is in de toekomst.
|
||||
// Geaccordeerde laatste inspectie hoeft hier niet te worden afgevangen zoals bij org_nextdate.
|
||||
// Deze deelquery leverta alleen resultaat als laatste inspectie is voltooid..
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
|
||||
+ " END"
|
||||
+ " END)"
|
||||
+ " ELSE" // Periodieke taken (NIET MJOB)
|
||||
// Als respijtdatum vandaag of dit uur is dan is de respijtdatum de eerstvolgende inspectie en dan dus de respijtdatum opleveren.
|
||||
// Als er vandaag of dit uur niet geinspecteerd is dan de eerstvolgende inspectiedatum vandaag of in de toekomst (steps = 0: functie nextcyclusdate(..., 0))
|
||||
// Als er vandaag of dit uur al geinspecteerd is dan de eerstvolgende inspectiedatum in de toekomst (steps = 1: functie nextcyclusdate(..., 1))
|
||||
//
|
||||
// Er is nog geen inspectie geweest en de startdatum is ingevuld of de registratiedatum ligt in de toekomst.
|
||||
// De inspectie is nog niet ingepland.
|
||||
// Er geldt:
|
||||
// Voor Controle(1):
|
||||
// a) De eerste inspectie is op MAX(startdatum, registratiedatum) van het object.
|
||||
// Voor Vervanging(2) of Certificering(3):
|
||||
// a) Als aanmaakdatum > startdatum: Eerste inspectie tonen op 1 periode verder dan de registratiedatum.
|
||||
// b) Als aanmaakdatum < startdatum: 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.
|
||||
+ " COALESCE(CASE"
|
||||
+ " WHEN " + ptable + ".ins_srtcontroledl_xcp_startdat >= " + ptable + ".ins_deel_aanmaak AND " + lastinspect + " IS NULL" // Als startdatum en aanmaakdatum/Registratiedatum hetzelfde dan op die datum beginnen.
|
||||
+ " THEN " + ptable + ".ins_srtcontroledl_xcp_startdat"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , fac.nextcyclusdate (COALESCE(" + lastinspect + ", " + ptable + ".ins_deel_aanmaak)"
|
||||
+ " , " + ptable + ".ins_srtcontrole_mode"
|
||||
+ " , " + ptable + ".ins_srtcontrole_eenheid"
|
||||
+ " , " + ptable + ".ins_srtcontrole_periode"
|
||||
+ " , " + ptable + ".ins_srtcontrole_bits"
|
||||
+ " , CASE"
|
||||
+ " WHEN " + pmode + " = 1"
|
||||
+ " THEN 1"
|
||||
+ " WHEN " + ptable + ".ins_srtcontrole_mode = 1" // Interval modus
|
||||
+ " THEN 1"
|
||||
+ " WHEN " + ptable + ".ins_srtcontrole_eenheid = 0 AND"
|
||||
+ " TRUNC (COALESCE (" + lastinspect + ", " + ptable + ".ins_deel_aanmaak), 'HH24' ) >= TRUNC (SYSDATE, 'HH24')"
|
||||
+ " THEN 1" // Uurlijks: Als de datum in de toekomst ligt, bepaal dan de volgende datum (1 step verder).
|
||||
+ " WHEN " + ptable + ".ins_srtcontrole_eenheid > 0 AND"
|
||||
+ " TRUNC (COALESCE (" + lastinspect + ", " + ptable + ".ins_deel_aanmaak),'DDD') >= TRUNC (SYSDATE, 'DDD')"
|
||||
+ " THEN 1" // Dagelijks t/m jaarlijks: Als de datum in de toekomst ligt, bepaal dan de volgende datum (1 step verder).
|
||||
+ " WHEN " + lastinspect + " IS NULL"
|
||||
+ " THEN 1" // Als Eerste inspectie, bepaal dan ook de volgende (1 step) datum.
|
||||
+ " ELSE 0" // Vindt de eerste datum vandaag of in de toekomst
|
||||
+ " END"
|
||||
+ " , " + ptable + ".ctr_ismjob))"
|
||||
+ " END";
|
||||
return nextdate;
|
||||
},
|
||||
|
||||
// Periodieke taken.
|
||||
// Inspecties die al eens zijn uitgevoerd of inspecties die voor het eerst zijn ingepland(0) of gestart(2) maar nog geen uitgevoerde/afgemelde(6) inspectie hebben.
|
||||
getnextinspection_n:
|
||||
function ()
|
||||
{
|
||||
var mjb_freeze_or_sys_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
|
||||
var mjb_start_year = S("mjb_start_year");
|
||||
|
||||
// Laatste (niet) succesvol uitgevoerde taak.
|
||||
var laatste_not_suc = "(SELECT MAX(id2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
|
||||
+ " AND cm.ins_controlemode_success = 0"
|
||||
+ " AND id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id3"
|
||||
+ " WHERE id3.ins_deel_key = x.ins_deel_key"
|
||||
+ " AND id3.ins_srtcontrole_key = x.ins_srtcontrole_key"
|
||||
+ " AND id3.ins_scenario_key = 1"
|
||||
+ " AND id3.ins_deelsrtcontrole_status = 6))";
|
||||
|
||||
var laatste_jaar = "(SELECT MAX(ins_deelsrtcontrole_datum) laatste_jaar"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
|
||||
+ " AND cm.ins_controlemode_success = 0"
|
||||
+ " AND id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id3"
|
||||
+ " WHERE id3.ins_deel_key = x.ins_deel_key"
|
||||
+ " AND id3.ins_srtcontrole_key = x.ins_srtcontrole_key"
|
||||
+ " AND id3.ins_scenario_key = 1"
|
||||
+ " AND id3.ins_deelsrtcontrole_status = 6))";
|
||||
|
||||
var lastinspect_B = "EXISTS (SELECT 1"
|
||||
+ " FROM ins_deelsrtcontrole idsc"
|
||||
+ " WHERE idsc.ins_srtcontrole_key = x.ins_srtcontrole_key"
|
||||
+ " AND idsc.ins_deelsrtcontrole_status IN (5, 6)"
|
||||
+ " AND idsc.ins_deel_key = x.ins_deel_key"
|
||||
+ " AND idsc.ins_scenario_key = 1)";
|
||||
|
||||
|
||||
var nextdate = " CASE"
|
||||
+ " WHEN x.ctr_ismjob = 1"
|
||||
+ " THEN" // MJOB en er is nog geen inspectie geweest.
|
||||
// Query levert 1) uitgevoerde en 2) voor het eerst zijn ingepland(0) of gestart(2) inspecties op.
|
||||
// Dus met de startdatum hebben we niets te doen en ook verder niet met inspecties die voor het eerst moeten beginnen.
|
||||
// Bepaling in welk jaar er een inspectie is gepland.
|
||||
// 1) In het jaar dat er nog een geaccordeerde/bevroren(2) inspectie actief is.
|
||||
// 2) In het jaar van de plandatum.
|
||||
// 3) Laatste inpspectie is NIET succesvol (laatste_not_suc IS NOT NULL).
|
||||
// Volgende inspectie is in het freeze jaar.
|
||||
// Eventuele startdatum doet er niet meer toe, vandaar dit punt eerder controleren.
|
||||
// 4) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
|
||||
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
|
||||
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
+ " CASE"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status IN (2, 3)" // 1) Taak is geaccordeerd (gefreezed) of ter uitvoering. Bedrag in huidig (vervangings)jaar tonen.
|
||||
+ " THEN x.ins_deelsrtcontrole_freezedate"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status = 0" // 2) Plandatum.
|
||||
+ " THEN x.ins_deelsrtcontrole_plandatum"
|
||||
+ " WHEN " + laatste_not_suc + " IS NOT NULL" // 3) Laatste inspectie is NIET succesvol en er zijn verder geen geplande, geaccordeerde of succesvol uitgevoerde taak aanwezig.
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM " + laatste_jaar + ") = " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + (mjb_freeze_or_sys_year + 1) + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " END"
|
||||
//+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)) > EXTRACT(YEAR FROM SYSDATE)"
|
||||
+ " THEN ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)" // Volgende inspectie is in de toekomst.
|
||||
// Geaccordeerde laatste inspectie wordt in het begin al afgevangen.
|
||||
// en niet hier zoals bij org_nextdate in functie getmjblist_sql.
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE" // Periodieke taken (NIET MJOB)
|
||||
+ " CASE"
|
||||
+ " WHEN NOT " + lastinspect_B // Inspectie die voor het eerst is ingepland(0) of gestart(2) maar nog geen uitgevoerde/afgemelde(6) inspectie heeft.
|
||||
+ " THEN COALESCE(CASE"
|
||||
+ " WHEN x.ins_srtcontroledl_xcp_startdat >= x.ins_deel_aanmaak" // Eerste inspectie is ingepland(0) of gestart(2). Als startdatum en aanmaakdatum/Registratiedatum hetzelfde dan op die datum beginnen.
|
||||
+ " THEN x.ins_srtcontroledl_xcp_startdat"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , CASE"
|
||||
+ " WHEN x.ins_deel_aanmaak > SYSDATE AND x.ctr_controle_type = 1" // Eerste inspectie is ingepland(0) of gestart(2).
|
||||
+ " THEN x.ins_deel_aanmaak"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , fac.nextcyclusdate(x.ins_deel_aanmaak" // Dan registratiedatum + planning
|
||||
+ " , x.ins_srtcontrole_mode"
|
||||
+ " , x.ins_srtcontrole_eenheid"
|
||||
+ " , x.ins_srtcontrole_periode"
|
||||
+ " , x.ins_srtcontrole_bits"
|
||||
+ " , 1"
|
||||
+ " , x.ctr_ismjob))"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status IN (0, 2, 3)"
|
||||
+ " THEN ins_deelsrtcontrole_datum_org" // In status 0, 2 en 3 (eigenlijk kun je niet diret naar 3) wordt de volgende inspectie in ins_deelsrtcontrole_datum_org direct opgeslagen.
|
||||
+ " ELSE"
|
||||
+ " fac.nextcyclusdate(CASE"
|
||||
+ " WHEN x.ins_srtcontrole_mode = 0"
|
||||
+ " THEN x.ins_deelsrtcontrole_datum_org" // Moment modus (0). Uitgaan van eigenlijke/orginele inspectiedatum.
|
||||
+ " ELSE x.ins_deelsrtcontrole_datum" // Interval modus (1). Uitgaan van werkelijke inspectiedatum.
|
||||
+ " END"
|
||||
+ " , x.ins_srtcontrole_mode"
|
||||
+ " , x.ins_srtcontrole_eenheid"
|
||||
+ " , x.ins_srtcontrole_periode"
|
||||
+ " , x.ins_srtcontrole_bits"
|
||||
+ " , 1"
|
||||
+ " , x.ctr_ismjob)"
|
||||
+ " END"
|
||||
+ " END";
|
||||
return nextdate;
|
||||
},
|
||||
|
||||
getobjectinspect_sql:
|
||||
function (pautfunction, params)
|
||||
{ // Lever de objecten of inpectie sql op.
|
||||
@@ -1959,7 +2333,7 @@ ins = {checkAutLevel:
|
||||
+ " , ins_srtcontrole_mode"
|
||||
+ " , ins_srtcontroledl_xcp_startdat"
|
||||
+ " , ins_srtcontroledl_xcp_prio"
|
||||
+ " , inspectie_eenheid"
|
||||
+ " , ins_srtcontrole_eenheid"
|
||||
+ " , inspectie_eind"
|
||||
+ " , ins_srtcontrole_omschrijving"
|
||||
+ " , ins_srtcontrole_opmerking"
|
||||
@@ -1990,7 +2364,7 @@ ins = {checkAutLevel:
|
||||
+ " , dsc.prs_perslid_key inspecteur_key"
|
||||
+ " , di.ins_srtcontroledl_xcp_startdat"
|
||||
+ " , di.ins_srtcontroledl_xcp_prio"
|
||||
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
|
||||
+ " , di.ins_srtcontrole_eenheid"
|
||||
+ " , di.ins_srtcontrole_eind inspectie_eind"
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_opmerking", "di.ins_srtcontrole_key")
|
||||
@@ -2046,6 +2420,9 @@ ins = {checkAutLevel:
|
||||
+ " AND idsc2.ins_srtcontrole_key = di.ins_srtcontrole_key"
|
||||
+ " AND idsc2.ins_deelsrtcontrole_status IN (5, 6)"
|
||||
+ " AND idsc2.ins_scenario_key = 1)) = " + (insSuccessY? "1" : "0"))
|
||||
+ (inspect && ctrdisc_key_arr.length > 0
|
||||
? " AND di.ctr_discipline_key IN (" + ctrdisc_key_arr.join(",") + ")"
|
||||
: "")
|
||||
+ " AND di.ctr_discipline_key IN (SELECT w.ins_discipline_key"
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
@@ -2067,7 +2444,7 @@ ins = {checkAutLevel:
|
||||
+ " , di.ins_srtcontrole_bits"
|
||||
+ " , di.ins_srtcontroledl_xcp_startdat"
|
||||
+ " , di.ins_srtcontroledl_xcp_prio"
|
||||
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
|
||||
+ " , di.ins_srtcontrole_eenheid"
|
||||
+ " , di.ins_srtcontrole_eind inspectie_eind"
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_opmerking", "di.ins_srtcontrole_key")
|
||||
@@ -2099,6 +2476,9 @@ ins = {checkAutLevel:
|
||||
+ (srtcontrole_key_arr.length
|
||||
? " AND di.ins_srtcontrole_key IN (" + srtcontrole_key_arr.join(",") + ")"
|
||||
: "")
|
||||
+ (inspect && ctrdisc_key_arr.length > 0
|
||||
? " AND di.ctr_discipline_key IN (" + ctrdisc_key_arr.join(",") + ")"
|
||||
: "")
|
||||
+ " AND di.ctr_discipline_key IN (SELECT w.ins_discipline_key"
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
@@ -2124,7 +2504,7 @@ ins = {checkAutLevel:
|
||||
+ " , di.ins_srtcontrole_bits"
|
||||
+ " , ins_srtcontroledl_xcp_startdat"
|
||||
+ " , ins_srtcontroledl_xcp_prio"
|
||||
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
|
||||
+ " , di.ins_srtcontrole_eenheid"
|
||||
+ " , di.ins_srtcontrole_eind inspectie_eind"
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_opmerking", "di.ins_srtcontrole_key")
|
||||
@@ -2163,6 +2543,9 @@ ins = {checkAutLevel:
|
||||
+ (srtcontrole_key_arr.length
|
||||
? " AND di.ins_srtcontrole_key IN (" + srtcontrole_key_arr.join(",") + ")"
|
||||
: "")
|
||||
+ (inspect && ctrdisc_key_arr.length > 0
|
||||
? " AND di.ctr_discipline_key IN (" + ctrdisc_key_arr.join(",") + ")"
|
||||
: "")
|
||||
+ " AND di.ctr_discipline_key IN (SELECT w.ins_discipline_key"
|
||||
+ " FROM fac_v_webgebruiker w"
|
||||
+ " , fac_functie f"
|
||||
@@ -2202,7 +2585,7 @@ ins = {checkAutLevel:
|
||||
+ " , ispn.ins_deelsrtcontrole_plandatum"
|
||||
+ " , ispn.ins_deelsrtcontrole_datum_org"
|
||||
+ " , ispn.inspectie_eind"
|
||||
+ " , ispn.inspectie_eenheid"
|
||||
+ " , ispn.ins_srtcontrole_eenheid"
|
||||
+ " , ispn.ctr_controle_type"
|
||||
+ " , ispn.periode"
|
||||
+ (!mobile
|
||||
@@ -2461,7 +2844,9 @@ ins = {checkAutLevel:
|
||||
+ (groepering == 11
|
||||
? ", prs_v_afdeling_fullnames afn"
|
||||
: "")
|
||||
+ ", " + sqlKenmerkBewerkbaar_from
|
||||
+ (fronto
|
||||
? ", " + sqlKenmerkBewerkbaar_from
|
||||
: "")
|
||||
+ (koppel_key
|
||||
? ", (SELECT *"
|
||||
+ " FROM ins_deelkoppeling"
|
||||
@@ -2518,7 +2903,9 @@ ins = {checkAutLevel:
|
||||
+ (groepering == 11
|
||||
? ", prs_v_afdeling_fullnames afn"
|
||||
: "")
|
||||
+ ", " + sqlKenmerkBewerkbaar_from
|
||||
+ (fronto
|
||||
? ", " + ", " + sqlKenmerkBewerkbaar_from
|
||||
: "")
|
||||
+ (koppel_key
|
||||
? ", (SELECT *"
|
||||
+ " FROM ins_deelkoppeling"
|
||||
@@ -2565,7 +2952,9 @@ ins = {checkAutLevel:
|
||||
+ sqlOwner_from
|
||||
+ ", prs_contactpersoon cp"
|
||||
+ ", prs_bedrijf b"
|
||||
+ ", " + sqlKenmerkBewerkbaar_from
|
||||
+ (fronto
|
||||
? ", " + ", " + sqlKenmerkBewerkbaar_from
|
||||
: "")
|
||||
+ (koppel_key
|
||||
? ", (SELECT *"
|
||||
+ " FROM ins_deelkoppeling"
|
||||
@@ -2735,7 +3124,7 @@ ins = {checkAutLevel:
|
||||
+ " FROM alg_district d"
|
||||
+ " , alg_locatie l"
|
||||
+ " WHERE d.alg_district_key = l.alg_district_key"
|
||||
+ " UNION"
|
||||
+ " UNION ALL"
|
||||
+ " SELECT NULL, NULL, NULL, NULL, NULL, NULL"
|
||||
+ " FROM DUAL"
|
||||
+ " ) alg"
|
||||
@@ -2772,7 +3161,9 @@ ins = {checkAutLevel:
|
||||
+ " WHERE v.prs_perslid_key_verantw_key = p.prs_perslid_key(+)) gtv"
|
||||
: "")
|
||||
+ sqlInspectie_from
|
||||
+ " , " + sqlKenmerkBewerkbaar_from
|
||||
+ (fronto
|
||||
? ", " + " , " + sqlKenmerkBewerkbaar_from
|
||||
: "")
|
||||
+ (koppel_key
|
||||
? ", (SELECT *"
|
||||
+ " FROM ins_deelkoppeling"
|
||||
@@ -3147,11 +3538,11 @@ ins = {checkAutLevel:
|
||||
// ik zit niet bij uitleenregistratie of
|
||||
// object is niet uitgeleend.
|
||||
sqlOwner = (insAvail || !auth_org
|
||||
? sqlOwnerA + sql_ex + sql_score + " UNION " + sqlOwnerCP + sql_ex + sql_score + " UNION "
|
||||
? sqlOwnerA + sql_ex + sql_score + " UNION ALL " + sqlOwnerCP + sql_ex + sql_score + " UNION ALL "
|
||||
: "")
|
||||
+ sqlOwnerP + sql_ex + sql_score
|
||||
+ (auth_org // S("ins_auth_obj_lendout") == 1 && fronto && insLentOut
|
||||
? " UNION " + sqlOwnerA_org + sql_ex + sql_score + " UNION " + sqlOwnerP_org + sql_ex + sql_score + " UNION " + sqlOwnerCP_org + sql_ex + sql_score
|
||||
? " UNION ALL " + sqlOwnerA_org + sql_ex + sql_score + " UNION ALL " + sqlOwnerP_org + sql_ex + sql_score + " UNION ALL " + sqlOwnerCP_org + sql_ex + sql_score
|
||||
: "");
|
||||
|
||||
// Now apply user filtering on this query:
|
||||
@@ -3185,7 +3576,7 @@ ins = {checkAutLevel:
|
||||
? sqlPosition
|
||||
: "")
|
||||
+ (auth_org && sqlPosition != ""
|
||||
? (!hasOwner? " UNION " : "") + sqlPosition_org
|
||||
? (!hasOwner? " UNION ALL " : "") + sqlPosition_org
|
||||
: "");
|
||||
|
||||
var sql_bdl = "";
|
||||
@@ -3275,204 +3666,11 @@ ins = {checkAutLevel:
|
||||
+ ")"
|
||||
: "");
|
||||
|
||||
// Laatste (niet) succesvol uitgevoerde taak.
|
||||
var laatste_not_suc = "(SELECT MAX(id2.ins_deelsrtcontrole_key)"
|
||||
+ " FROM ins_deelsrtcontrole id2"
|
||||
+ " , ins_controlemode cm"
|
||||
+ " WHERE id2.ins_controlemode_key = cm.ins_controlemode_key"
|
||||
+ " AND cm.ins_controlemode_success = 0"
|
||||
+ " AND id2.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)" // Laatste afgeronde inspectie.
|
||||
+ " FROM ins_deelsrtcontrole id3"
|
||||
+ " WHERE id3.ins_deel_key = x.ins_deel_key"
|
||||
+ " AND id3.ins_srtcontrole_key = x.ins_srtcontrole_key"
|
||||
+ " AND id3.ins_scenario_key = 1"
|
||||
+ " AND id3.ins_deelsrtcontrole_status = 6))";
|
||||
|
||||
// inspecties die nog nooit zijn uitgevoerd/ingepland. Er is nog geen ins_deelsrtcontrole regel aanwezig en dus ook geen plandatum/respijtdatum.
|
||||
var inspectie_next_A = " CASE"
|
||||
+ " WHEN x.ctr_ismjob = 1"
|
||||
+ " THEN" // MJOB en er is nog geen inspectie geweest.
|
||||
// 1) Er is nog geen inspectie geweest en de startdatum is ingevuld of de registratiedatum ligt in de toekomst.
|
||||
// Er geldt dan 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 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.
|
||||
// 2) a) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Controle(1).
|
||||
// Volgende inspectie is in het freeze jaar.
|
||||
// b) Laatste inspectie is NULL (eerste inspectie moet nog komen) en het is een Vervanging(2) of Certificering(3).
|
||||
// Nextdate is na het freeze jaar?
|
||||
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is het jaar van de nextdate.
|
||||
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is in het jaar "nextdatum + periode".
|
||||
// c) Kan hier niet voorkomen omdat er nog geen inspectie heeft plaatsgevonden (deze regels worden namenlijk opgeleverd).
|
||||
+ " COALESCE(CASE" // 1) Eventueel startdatum (ins_srtcontroledl_xcp_startdat) i.g.v. als er nog geen inspectie heeft plaatsgevonden.
|
||||
+ " WHEN x.ins_srtcontroledl_xcp_startdat IS NOT NULL" // Startdatum is ingevuld en er is nog geen inspectie geweest.
|
||||
+ " THEN" // Startdatum is ingevuld en ligt in het verleden of de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM x.ins_srtcontroledl_xcp_startdat) >= EXTRACT(YEAR FROM x.ins_deel_aanmaak)"
|
||||
+ " THEN" // Startdatum op of na aanmaakdatum/registratiedatum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM x.ins_srtcontroledl_xcp_startdat) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE x.ins_srtcontroledl_xcp_startdat"
|
||||
+ " END"
|
||||
+ " ELSE" // Aanmaakdatum/Registratiedatum is na de startdatum.
|
||||
+ " CASE"
|
||||
+ " WHEN x.ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM x.ins_deel_aanmaak) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE x.ins_deel_aanmaak" // Registratiedatum.
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(x.ins_deel_aanmaak, 12 * x.ins_srtcontrole_periode)) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(x.ins_deel_aanmaak, 12 * x.ins_srtcontrole_periode)" // 1 periode na registratiedatum.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " WHEN EXTRACT(YEAR FROM x.ins_deel_aanmaak) >= EXTRACT(YEAR FROM SYSDATE)" // Alleen de aanmaakdatum/registratiedatum is ingevuld.
|
||||
+ " THEN" // Aanmaakdatum/Registratiedatum is ingevuld en ligt in de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN x.ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM x.ins_deel_aanmaak) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE x.ins_deel_aanmaak"
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM ADD_MONTHS(x.ins_deel_aanmaak, 12 * x.ins_srtcontrole_periode)) < " + mjb_freeze_or_sys_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(x.ins_deel_aanmaak, 12 * x.ins_srtcontrole_periode)"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE"
|
||||
+ " NULL"
|
||||
+ " END"
|
||||
+ " , CASE" // 2) Berekenen jaar. Er is nog geen inspectie geweest.
|
||||
+ " WHEN x.ctr_controle_type = 1" // 2a) Controle(1).
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " WHEN x.ctr_controle_type != 1" // 2b) Vervanging(2), Certificering(3).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)) > " + mjb_freeze_or_sys_year
|
||||
+ " THEN" // Nextdate is na de freeze datum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0), -1 * 12 * x.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
|
||||
+ " EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0), -1 * 12 * x.ins_srtcontrole_periode)) != EXTRACT(YEAR FROM x.ins_deel_aanmaak)"
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nu en vorige inspectie liggen tussen start en freeze jaar.
|
||||
+ " ELSE ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)"
|
||||
+ " END"
|
||||
+ " ELSE" // Nextdate is voor of in het freeze jaar.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)) >= " + mjb_start_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nextdate tussen start en freeze jaar.
|
||||
+ " ELSE ADD_MONTHS(ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0), 12 * x.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
|
||||
+ " END"
|
||||
+ " END"
|
||||
//+ " ELSE" // 2c) Laatste IS NOT NULL. Er is al een inspectie geweest.
|
||||
//+ " NULL" // Voor deze deelquery geldt, er is nog geen inspectie geweest. Hier kom je nooit.
|
||||
+ " END)"
|
||||
+ " ELSE" // Periodieke taken (NIET MJOB)
|
||||
// Er geldt al dat er nog geen inspectie is geweest.
|
||||
+ " COALESCE(CASE"
|
||||
+ " WHEN x.ins_srtcontroledl_xcp_startdat >= x.ins_deel_aanmaak" // Als startdatum en aanmaakdatum/Registratiedatum hetzelfde dan op die datum beginnen.
|
||||
+ " THEN x.ins_srtcontroledl_xcp_startdat"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , fac.nextcyclusdate(x.ins_deel_aanmaak"
|
||||
+ " , x.ins_srtcontrole_mode"
|
||||
+ " , x.inspectie_eenheid"
|
||||
+ " , x.ins_srtcontrole_periode"
|
||||
+ " , x.ins_srtcontrole_bits"
|
||||
+ " , 1"
|
||||
+ " , x.ctr_ismjob))" // Periode verder als registratiedatum/aanmaakdatum.
|
||||
+ " END";
|
||||
|
||||
var lastinspect_B = "EXISTS (SELECT 1"
|
||||
+ " FROM ins_deelsrtcontrole idsc"
|
||||
+ " WHERE idsc.ins_srtcontrole_key = x.ins_srtcontrole_key"
|
||||
+ " AND idsc.ins_deelsrtcontrole_status IN (5, 6)"
|
||||
+ " AND idsc.ins_deel_key = x.ins_deel_key"
|
||||
+ " AND idsc.ins_scenario_key = 1)";
|
||||
// Inspecties die nog nooit zijn uitgevoerd/ingepland. Er is nog geen ins_deelsrtcontrole regel aanwezig en dus ook geen plandatum/respijtdatum.
|
||||
var inspectie_next_A = ins.getnextinspection_future("x", 1);
|
||||
|
||||
// Inspecties die al eens zijn uitgevoerd of inspecties die voor het eerst zijn ingepland(0) of gestart(2) maar nog geen uitgevoerde/afgemelde(6) inspectie hebben.
|
||||
var inspectie_next_B = " CASE"
|
||||
+ " WHEN x.ctr_ismjob = 1"
|
||||
+ " THEN" // MJOB en er is nog geen inspectie geweest.
|
||||
// Query levert 1) uitgevoerde en 2) voor het eerst zijn ingepland(0) of gestart(2) inspecties op.
|
||||
// Dus met de startdatum hebben we niets te doen en ook verder niet met inspecties die voor het eerst moeten beginnen.
|
||||
// Bepaling in welk jaar er een inspectie is gepland.
|
||||
// 1) In het jaar dat er nog een geaccordeerde/bevroren(2) inspectie actief is.
|
||||
// 2) In het jaar van de plandatum.
|
||||
// 3) Laatste inpspectie is NIET succesvol (laatste_not_suc IS NOT NULL).
|
||||
// Volgende inspectie is in het freeze jaar.
|
||||
// Eventuele startdatum doet er niet meer toe, vandaar dit punt eerder controleren.
|
||||
// 4) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
|
||||
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
|
||||
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
+ " CASE"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status IN (2, 3)" // 1) Taak is geaccordeerd (gefreezed) of ter uitvoering. Bedrag in huidig (vervangings)jaar tonen.
|
||||
+ " THEN x.ins_deelsrtcontrole_freezedate"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status = 0" // 2) Plandatum.
|
||||
+ " THEN x.ins_deelsrtcontrole_plandatum"
|
||||
+ " WHEN " + laatste_not_suc + " IS NOT NULL" // 3) Laatste inspectie is NIET succesvol en er zijn verder geen geplande, geaccordeerde of succesvol uitgevoerde taak aanwezig.
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)) > EXTRACT(YEAR FROM SYSDATE)"
|
||||
+ " THEN ins.nextcyclusdate(x.ins_deel_key, x.ins_srtcontrole_key, 1, 0)" // Volgende inspectie is in de toekomst.
|
||||
// Geaccordeerde laatste inspectie wordt in het begin al afgevangen.
|
||||
// en niet hier zoals bij org_nextdate in functie getmjblist_sql.
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE" // Periodieke taken (NIET MJOB)
|
||||
+ " CASE"
|
||||
+ " WHEN NOT " + lastinspect_B // Inspectie die voor het eerst is ingepland(0) of gestart(2) maar nog geen uitgevoerde/afgemelde(6) inspectie heeft.
|
||||
+ " THEN COALESCE(CASE"
|
||||
+ " WHEN x.ins_srtcontroledl_xcp_startdat >= x.ins_deel_aanmaak" // Eerste inspectie is ingepland(0) of gestart(2). Als startdatum en aanmaakdatum/Registratiedatum hetzelfde dan op die datum beginnen.
|
||||
+ " THEN x.ins_srtcontroledl_xcp_startdat"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , CASE"
|
||||
+ " WHEN x.ins_deel_aanmaak > SYSDATE AND x.ctr_controle_type = 1" // Eerste inspectie is ingepland(0) of gestart(2).
|
||||
+ " THEN x.ins_deel_aanmaak"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , fac.nextcyclusdate(x.ins_deel_aanmaak" // Dan registratiedatum + planning
|
||||
+ " , x.ins_srtcontrole_mode"
|
||||
+ " , x.inspectie_eenheid"
|
||||
+ " , x.ins_srtcontrole_periode"
|
||||
+ " , x.ins_srtcontrole_bits"
|
||||
+ " , 1"
|
||||
+ " , x.ctr_ismjob))"
|
||||
+ " WHEN x.ins_deelsrtcontrole_status IN (0, 2, 3)"
|
||||
+ " THEN ins_deelsrtcontrole_datum_org" // In status 0, 2 en 3 (eigenlijk kun je niet diret naar 3) wordt de volgende inspectie in ins_deelsrtcontrole_datum_org direct opgeslagen.
|
||||
+ " ELSE"
|
||||
+ " fac.nextcyclusdate(CASE"
|
||||
+ " WHEN x.ins_srtcontrole_mode = 0"
|
||||
+ " THEN x.ins_deelsrtcontrole_datum_org" // Moment modus (0). Uitgaan van eigenlijke/orginele inspectiedatum.
|
||||
+ " ELSE x.ins_deelsrtcontrole_datum" // Interval modus (1). Uitgaan van werkelijke inspectiedatum.
|
||||
+ " END"
|
||||
+ " , x.ins_srtcontrole_mode"
|
||||
+ " , x.inspectie_eenheid"
|
||||
+ " , x.ins_srtcontrole_periode"
|
||||
+ " , x.ins_srtcontrole_bits"
|
||||
+ " , 1"
|
||||
+ " , x.ctr_ismjob)"
|
||||
+ " END"
|
||||
+ " END";
|
||||
var inspectie_next_B = ins.getnextinspection_n();
|
||||
|
||||
// De inspectie_next met berekeningen van de nextcyclusdate (database procedure fac.nextcyclusdate()) zo ver mogelijk naar buiten gehaald,
|
||||
// zodat deze berekeningen zo laat mogelijk worden berekend met een zo klein mogelijke verzameling resultaten (RABO#60119).
|
||||
|
||||
@@ -60,175 +60,7 @@ insp = {
|
||||
+ " inspectie_steps"
|
||||
+ " , di.ctr_ismjob"
|
||||
// De volgende inspectie berekenen (inspectie_next).
|
||||
+ " , CASE"
|
||||
+ " WHEN di.ctr_ismjob = 1"
|
||||
+ " THEN" // MJOB
|
||||
// 1) Laatste inpspectie is NIET succesvol (laatste_not_suc IS NOT NULL).
|
||||
// De NIET succesvolle taak is in het freeze jaar
|
||||
// Ja) Volgende inspectie is in het jaar na het freeze jaar.
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
// 2) Er is nog geen inspectie geweest en de startdatum is ingevuld.
|
||||
// Er geldt dan 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.
|
||||
// 3) Er is nog geen inspectie geweest en alleen de aanmaakdatum/Registratiedatum ligt in het huidige jaar of in de toekomst.
|
||||
// Voor Controle(1):
|
||||
// a) Als registratiedatum < freeze jaar dan eerste inspectie tonen in het freeze jaar
|
||||
// b) Anders inspectie tonen in het registratiejaar.
|
||||
// Voor Vervanging(2) of Certificering(3):
|
||||
// a) Als (registratiedatum + periode) < freeze jaar dan eerste inspectie tonen in het freeze jaar
|
||||
// b) Anders inspectie tonen in het (registratiejaar + periode)
|
||||
// 4) Startdatum is niet ingevuld en aanmaakdatum is geweest (ligt in het verleden).
|
||||
// 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? (Nextdate is eerste next(inspectie)datum, startdatum of aanmaakdatum in de toekomst. Hier aanmaakdatum + n*periode met n = 0 of hoger.
|
||||
// Ja) Vorige inspectie ligt na het start jaar en ligt niet in het aanmaak jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is het jaar van de nextdate.
|
||||
// Nee) De laatst ingeplande inspectie (nextdate) is na of in het start jaar?
|
||||
// Ja) Volgende inspectie is in het freeze jaar.
|
||||
// Nee) Volgende inspectie is in het jaar "nextdatum + periode".
|
||||
// c) Laatste inspectie is niet NULL. Er is al 1 of meerdere keren geinspecteerd.
|
||||
// Ligt de laatst ingeplande inspectie (nextdate) na dit jaar?
|
||||
// Ja) Volgende inspectie is het jaar van de nextdate (in de toekomst).
|
||||
// Nee) Volgende inspectie is in het freeze jaar.
|
||||
// LET OP: c.laatste: geeft de ins_deelsrtcontrole_datum terug van de laatste geplande, geaccordeerde of succesvol uitgevoerde taak.
|
||||
// laatste_not_suc: Als de laatste uitgevoerde taak NIET succesvoll is geeft deze de ins_deelsrtcontrole_datum terug van deze taak.
|
||||
// P.S.: De aanmaakdatum/Registratiedatum is altijd ingevuld en als er al een inspectie is geweest, zijn de startdatum en registratiedatum niet meer van belang.
|
||||
+ " COALESCE(CASE" // 1) Laatste inspectie is NIET succesvol en er zijn verder geen geplande, geaccordeerde of succesvol uitgevoerde taak aanwezig.
|
||||
+ " WHEN ltst_not_suc.laatste_not_suc IS NOT NULL AND ltst.laatste IS NULL"
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ltst_not_suc.laatste_jaar) = " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + (mjb_freeze_year + 1) + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " END"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , CASE" // 2) Eventueel startdatum (ins_srtcontroledl_xcp_startdat) i.g.v. als er nog geen inspectie heeft plaatsgevonden.
|
||||
+ " WHEN ltst.laatste IS NULL AND" // Als er al een inspectie is geweest, is de startdatum niet meer van belang.
|
||||
+ " di.ins_srtcontroledl_xcp_startdat IS NOT NULL" // Startdatum is ingevuld en er is nog geen inspectie geweest.
|
||||
+ " THEN" // 2) Startdatum is ingevuld en ligt in het verleden of de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM di.ins_srtcontroledl_xcp_startdat) >= EXTRACT(YEAR FROM di.ins_deel_aanmaak)"
|
||||
+ " THEN" // 2a) Startdatum op of na aanmaakdatum/registratiedatum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM di.ins_srtcontroledl_xcp_startdat) < " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE di.ins_srtcontroledl_xcp_startdat"
|
||||
+ " END"
|
||||
+ " ELSE" // 2b) Aanmaakdatum/Registratiedatum is na de startdatum.
|
||||
+ " CASE"
|
||||
+ " WHEN di.ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM di.ins_deel_aanmaak) < " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE di.ins_deel_aanmaak" // Registratiedatum.
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(di.ins_deel_aanmaak, 12 * di.ins_srtcontrole_periode)) < " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(di.ins_deel_aanmaak, 12 * di.ins_srtcontrole_periode)" // 1 periode na registratiedatum.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " WHEN ltst.laatste IS NULL AND"
|
||||
+ " EXTRACT(YEAR FROM di.ins_deel_aanmaak) >= EXTRACT(YEAR FROM SYSDATE)" // Alleen de aanmaakdatum/registratiedatum is ingevuld.
|
||||
+ " THEN" // 3) Aanmaakdatum/Registratiedatum is alleen ingevuld en ligt in het huidige jaar of in de toekomst en er is nog geen inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN di.ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN"
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM di.ins_deel_aanmaak) < " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE di.ins_deel_aanmaak"
|
||||
+ " END"
|
||||
+ " ELSE" // Vervanging(2), Certificering(3).
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT( YEAR FROM ADD_MONTHS(di.ins_deel_aanmaak, 12 * di.ins_srtcontrole_periode)) < " + mjb_freeze_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')"
|
||||
+ " ELSE ADD_MONTHS(di.ins_deel_aanmaak, 12 * di.ins_srtcontrole_periode)"
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE"
|
||||
+ " NULL"
|
||||
+ " END"
|
||||
+ " , CASE" // 4) Berekenen jaar.
|
||||
+ " WHEN ltst.laatste IS NULL AND di.ctr_controle_type = 1" // Controle(1).
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // 4a)
|
||||
+ " WHEN ltst.laatste IS NULL AND di.ctr_controle_type != 1" // Vervanging(2), Certificering(3).
|
||||
+ " THEN" // 4b) Er is nog geen inspectie geweest
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0)) > " + mjb_freeze_year
|
||||
+ " THEN" // Nextdate is na de freeze datum.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0), -1 * 12 * di.ins_srtcontrole_periode)) >= " + mjb_start_year + " AND"
|
||||
+ " EXTRACT(YEAR FROM ADD_MONTHS(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0), -1 * 12 * di.ins_srtcontrole_periode)) != EXTRACT(YEAR FROM di.ins_deel_aanmaak)"
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nu en vorige inspectie liggen tussen start en freeze jaar.
|
||||
+ " ELSE ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0)"
|
||||
+ " END"
|
||||
+ " ELSE" // Nextdate is voor of in het freeze jaar.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0)) >= " + mjb_start_year
|
||||
+ " THEN TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Nextdate tussen start en freeze jaar.
|
||||
+ " ELSE ADD_MONTHS(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0), 12 * di.ins_srtcontrole_periode)" // Nextdate voor het start jaar.
|
||||
+ " END"
|
||||
+ " END"
|
||||
+ " ELSE" // 4c) Laatste IS NOT NULL. Er is al een inspectie geweest.
|
||||
+ " CASE"
|
||||
+ " WHEN EXTRACT(YEAR FROM ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0)) > EXTRACT(YEAR FROM SYSDATE)"
|
||||
+ " THEN ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1, 0)" // Volgende inspectie is in de toekomst.
|
||||
// Geaccordeerde laatste inspectie hoeft hier niet te worden afgevangen zoals bij org_nextdate.
|
||||
// Deze deelquery leverta alleen resultaat als laatste inspectie is voltooid..
|
||||
+ " ELSE TO_DATE('31-12-" + mjb_freeze_or_sys_year + "', 'DD-MM-YYYY')" // Laatst ingeplande inspectie is nog steeds niet uitgevoerd. Dus opnieuw in het freeze jaar tonen zodat deze daar gefreezed kan worden.
|
||||
+ " END"
|
||||
+ " END)"
|
||||
+ " ELSE" // Periodieke taken (NIET MJOB)
|
||||
// Als respijtdatum vandaag of dit uur is dan is de respijtdatum de eerstvolgende inspectie en dan dus de respijtdatum opleveren.
|
||||
// Als er vandaag of dit uur niet geinspecteerd is dan de eerstvolgende inspectiedatum vandaag of in de toekomst (steps = 0: functie nextcyclusdate(..., 0))
|
||||
// Als er vandaag of dit uur al geinspecteerd is dan de eerstvolgende inspectiedatum in de toekomst (steps = 1: functie nextcyclusdate(..., 1))
|
||||
//
|
||||
// Er is nog geen inspectie geweest en de startdatum is ingevuld of de registratiedatum ligt in de toekomst.
|
||||
// De inspectie is nog niet ingepland.
|
||||
// Er geldt:
|
||||
// Voor Controle(1):
|
||||
// a) De eerste inspectie is op MAX(startdatum, registratiedatum) van het object.
|
||||
// Voor Vervanging(2) of Certificering(3):
|
||||
// a) Als aanmaakdatum > startdatum: Eerste inspectie tonen op 1 periode verder dan de registratiedatum.
|
||||
// b) Als aanmaakdatum < startdatum: 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.
|
||||
+ " COALESCE(CASE"
|
||||
+ " WHEN di.ins_srtcontroledl_xcp_startdat >= di.ins_deel_aanmaak AND " + lastinspect + " IS NULL" // Als startdatum en aanmaakdatum/Registratiedatum hetzelfde dan op die datum beginnen.
|
||||
+ " THEN di.ins_srtcontroledl_xcp_startdat"
|
||||
+ " ELSE NULL"
|
||||
+ " END"
|
||||
+ " , fac.nextcyclusdate (COALESCE(" + lastinspect + ", di.ins_deel_aanmaak)"
|
||||
+ " , di.ins_srtcontrole_mode"
|
||||
+ " , di.ins_srtcontrole_eenheid"
|
||||
+ " , di.ins_srtcontrole_periode"
|
||||
+ " , di.ins_srtcontrole_bits"
|
||||
+ " , CASE"
|
||||
+ " WHEN di.ins_srtcontrole_mode = 1" // Interval modus
|
||||
+ " THEN 1"
|
||||
+ " WHEN di.ins_srtcontrole_eenheid = 0 AND"
|
||||
+ " TRUNC (COALESCE (" + lastinspect + ", di.ins_deel_aanmaak), 'HH24' ) >= TRUNC (SYSDATE, 'HH24')"
|
||||
+ " THEN 1" // Uurlijks: Als de datum in de toekomst ligt, bepaal dan de volgende datum (1 step verder).
|
||||
+ " WHEN di.ins_srtcontrole_eenheid > 0 AND"
|
||||
+ " TRUNC (COALESCE (" + lastinspect + ", di.ins_deel_aanmaak),'DDD') >= TRUNC (SYSDATE, 'DDD')"
|
||||
+ " THEN 1" // Dagelijks t/m jaarlijks: Als de datum in de toekomst ligt, bepaal dan de volgende datum (1 step verder).
|
||||
+ " WHEN " + lastinspect + " IS NULL"
|
||||
+ " THEN 1" // Als Eerste inspectie, bepaal dan ook de volgende (1 step) datum.
|
||||
+ " ELSE 0" // Vindt de eerste datum vandaag of in de toekomst
|
||||
+ " END"
|
||||
+ " , di.ctr_ismjob))"
|
||||
+ " END"
|
||||
+ " inspectie_next"
|
||||
+ " , " + ins.getnextinspection_future("di", 2) + " inspectie_next"
|
||||
+ " , di.ins_srtcontrole_key"
|
||||
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
|
||||
+ " , di.ins_srtcontrole_groep"
|
||||
|
||||
@@ -572,7 +572,7 @@ function ins_list (pautfunction, params)
|
||||
{
|
||||
var lclass = "";
|
||||
var istatus = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
|
||||
var eenheid = oRs("inspectie_eenheid").Value;
|
||||
var eenheid = oRs("ins_srtcontrole_eenheid").Value;
|
||||
var mode = oRs("ins_srtcontrole_mode").Value;
|
||||
|
||||
if (inspDone) return lclass;
|
||||
@@ -770,7 +770,7 @@ function ins_list (pautfunction, params)
|
||||
dttxt = new Date(inspectie).getFullYear(); // Voor MJOB is alleen het jaar van belang.
|
||||
else
|
||||
{
|
||||
var inspectie_eenheid = oRs("inspectie_eenheid").Value;
|
||||
var inspectie_eenheid = oRs("ins_srtcontrole_eenheid").Value;
|
||||
if (inspectie_eenheid == 0)
|
||||
var dttxt = toDateTimeString(inspectie);
|
||||
else
|
||||
@@ -784,7 +784,7 @@ function ins_list (pautfunction, params)
|
||||
{
|
||||
var vervallen = (oRs("inspectie_eind").Value != null && new Date(oRs("inspectie_eind").Value).getTime() < new Date().midnight());
|
||||
if (vervallen) return L("lcl_ins_controle_vervallen");
|
||||
var inspectie_eenheid = oRs("inspectie_eenheid").Value;
|
||||
var inspectie_eenheid = oRs("ins_srtcontrole_eenheid").Value;
|
||||
|
||||
if (inspDone)
|
||||
var plandatum = oRs("ins_deelsrtcontrole_datum_org").Value; // Plandatum is dan de orginele datum.
|
||||
@@ -804,7 +804,7 @@ function ins_list (pautfunction, params)
|
||||
var res = "";
|
||||
var txt = "";
|
||||
var aantal = oRs("periode").Value;
|
||||
switch (oRs("inspectie_eenheid").Value) // 0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks, null=niet
|
||||
switch (oRs("ins_srtcontrole_eenheid").Value) // 0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks, null=niet
|
||||
{
|
||||
case 0: { txt = L("lcl_ins_controle_period_hour"); break; }
|
||||
case 1: { txt = L("lcl_ins_controle_period_day"); break; }
|
||||
|
||||
@@ -272,7 +272,7 @@ else
|
||||
|
||||
var inspectie = inspDone? oRs("inspectie_date").Value : oRs("inspectie_next").Value;
|
||||
|
||||
var inspectie_eenheid = (isPeriodiekeTaken ? oRs("inspectie_eenheid").Value : oRs("eenheid").Value);
|
||||
var inspectie_eenheid = (isPeriodiekeTaken ? oRs("ins_srtcontrole_eenheid").Value : oRs("eenheid").Value);
|
||||
if (inspectie_eenheid == 0)
|
||||
var dttxt = toDateTimeString(inspectie);
|
||||
else
|
||||
@@ -289,7 +289,7 @@ else
|
||||
var plandatum = (isPeriodiekeTaken ? oRs("ins_deelsrtcontrole_plandatum").Value : oRs("ins_deelsrtcontrole_datum").Value);
|
||||
if (plandatum == null) return "";
|
||||
|
||||
var inspectie_eenheid = (isPeriodiekeTaken ? oRs("inspectie_eenheid").Value : oRs("eenheid").Value);
|
||||
var inspectie_eenheid = (isPeriodiekeTaken ? oRs("ins_srtcontrole_eenheid").Value : oRs("eenheid").Value);
|
||||
if (inspectie_eenheid == 0)
|
||||
var dttxt = toDateTimeString(plandatum);
|
||||
else
|
||||
@@ -334,7 +334,7 @@ else
|
||||
plaats = "<div class='listbodykop'>" + I("fa-map-marker") + " " + safe.html(oRs("plaats").Value) + "</div>";
|
||||
flexkenmerken = LIST_KENMERK_COL(oRs, {kmcol: "insflex"});
|
||||
}
|
||||
// else: // Voor inspectie geen plaats en kenmerken tonen.
|
||||
// else: // Voor inspectie geen plaats en kenmerken tonen.
|
||||
return plaats + flexkenmerken;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user