BAUS#86115: Berekening momentmodus-taak niet conform auditnormen bij eerste uitvoering.

svn path=/Website/trunk/; revision=70053
This commit is contained in:
Maykel Geerdink
2025-08-20 10:33:37 +00:00
parent 650313b3e8
commit d390e2d75f
8 changed files with 71 additions and 247 deletions

View File

@@ -1443,7 +1443,7 @@ ins = {checkAutLevel:
oRs.Close();
if (ismjob && isjaarlijks)
{
{ // MJOB taken.
// 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.
@@ -1495,7 +1495,7 @@ ins = {checkAutLevel:
nextdate = new Date(mjb_freeze_or_sys_year, 0, 1); // 1 januari van het freeze jaar.
}
else if (dsc_status == 2 || dsc_status == 3) // 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.
{ // De laatste inspectie is geaccordeerd/bevroren/gestart(2) of ter uitvoering(3): 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"
@@ -1541,7 +1541,7 @@ ins = {checkAutLevel:
// 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) De laatst ingeplande inspectie (nextdate) 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?
@@ -1639,7 +1639,7 @@ ins = {checkAutLevel:
}
}
else
{
{ // Periodieke taken.
// 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"
@@ -1653,15 +1653,42 @@ ins = {checkAutLevel:
{ // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd.
sql = "SELECT ins.nextcyclusdate (" + pins_key
+ ", " + psrtcont_key
+ ", " + (params && params.mjob? pscen_key : "1")
+ ", 1" // Periodieke taken kent geen scenario's.
+ ", 1) nextdate FROM DUAL";
var oRsN = Oracle.Execute(sql);
nextdate = new Date(oRsN("nextdate").Value);
oRsN.Close();
}
else
{ // Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld.
// Volgende inspectiedatum kunnen we tegenwoordig bepalen.
// Als er een startdatum is na de registratiedatum dan is dat de startdatum of anders is deze te berekenen vanaf de registratiedatum/aanmaakdatum.
sql = "SELECT ins_deel_aanmaak"
+ " , ins_srtcontroledl_xcp_startdat"
+ " FROM ins_v_defined_inspect_xcp"
+ " WHERE ins_deel_key = " + pins_key
+ " AND ins_srtcontrole_key = " + psrtcont_key
+ " AND ins_scenario_key = 1";
var oRsS = Oracle.Execute(sql);
var aanmaakdatum = new Date(oRsS("ins_deel_aanmaak").Value);
var startdatum = oRsS("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRsS("ins_srtcontroledl_xcp_startdat").Value) : null;
oRsS.Close();
if (startdatum != null && aanmaakdatum <= startdatum)
nextdate = startdatum;
else if (startdatum != null && aanmaakdatum > startdatum)
nextdate = 1;
else
{
sql = "SELECT ins.nextcyclusdate (" + pins_key
+ ", " + psrtcont_key
+ ", 1" // Periodieke taken kent geen scenario's.
+ ", 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;
@@ -1932,7 +1959,6 @@ ins = {checkAutLevel:
+ " , ins_srtcontrole_mode"
+ " , ins_srtcontroledl_xcp_startdat"
+ " , ins_srtcontroledl_xcp_prio"
+ " , nonext"
+ " , inspectie_eenheid"
+ " , inspectie_eind"
+ " , ins_srtcontrole_omschrijving"
@@ -1963,7 +1989,6 @@ ins = {checkAutLevel:
+ " , dsc.prs_perslid_key inspecteur_key"
+ " , di.ins_srtcontroledl_xcp_startdat"
+ " , di.ins_srtcontroledl_xcp_prio"
+ " , NULL nonext"
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
+ " , di.ins_srtcontrole_eind inspectie_eind"
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
@@ -2041,7 +2066,6 @@ ins = {checkAutLevel:
+ " , di.ins_srtcontrole_bits"
+ " , di.ins_srtcontroledl_xcp_startdat"
+ " , di.ins_srtcontroledl_xcp_prio"
+ " , CASE WHEN NOT " + lastinspect + " THEN 1 ELSE 0 END nonext"
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
+ " , di.ins_srtcontrole_eind inspectie_eind"
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
@@ -2098,7 +2122,6 @@ ins = {checkAutLevel:
+ " , di.ins_srtcontrole_bits"
+ " , ins_srtcontroledl_xcp_startdat"
+ " , ins_srtcontroledl_xcp_prio"
+ " , CASE WHEN NOT " + lastinspect + " THEN 1 ELSE 0 END nonext"
+ " , di.ins_srtcontrole_eenheid inspectie_eenheid"
+ " , di.ins_srtcontrole_eind inspectie_eind"
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
@@ -2176,7 +2199,6 @@ ins = {checkAutLevel:
+ " , ispn.ins_deelsrtcontrole_datum_org"
+ " , ispn.inspectie_eind"
+ " , ispn.inspectie_eenheid"
+ " , ispn.nonext"
+ " , ispn.ctr_controle_type"
+ (!mobile
? " , ispn.periode"
@@ -3349,23 +3371,19 @@ ins = {checkAutLevel:
//+ " 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" // Er geldt al dat er nog geen inspectie is geweest.
+ " 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"
+ " , CASE"
+ " WHEN x.ins_deel_aanmaak > SYSDATE AND x.ctr_controle_type = 1" // Er geldt al dat er nog geen inspectie is geweest.
+ " THEN x.ins_deel_aanmaak"
+ " 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))"
+ " , x.ctr_ismjob))" // Periode verder als registratiedatum/aanmaakdatum.
+ " END";
var lastinspect_B = "EXISTS (SELECT 1"
@@ -3411,7 +3429,7 @@ ins = {checkAutLevel:
+ " 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).
+ " 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"

View File

@@ -309,41 +309,6 @@ var canImport = (user.checkAutorisation("WEB_IMPORT", true) != null);
dtsoon.setHours(0,0,0,0); // trunc datum
var dtlate = new Date(new Date().setHours(0,0,0,0));
// Als het een eerste controle(1) is en er dan staat "Onbekend/Undetermined" in beeld. Dan ook rood weergeven.
// Als de eerste controle is ingepland (en eventueel gestart) dan staat de plandatum in beeld en is undetermined false.
// Onbepaald alleen bij een Controle(1) als er nog geen inspectie is geweest en de inspectie nog niet is ingepland.
// Daarnaast moet gelden: a) de aanmaakdatum moet in het verleden liggen of
// b) de startdatum moet na de aanmaakdatum liggen en in het verleden.
var nonext = oRs("nonext").Value == 1;
var ctr_controle_type = oRs("ctr_controle_type").Value;
var ins_deelsrtcontrole_plandatum = oRs("plandatum").Value; // Ingeplande datum.
var ins_srtcontroledl_xcp_startdat = oRs("ins_srtcontroledl_xcp_startdat").Value; // Startdatum (exception).
var ins_deel_aanmaak = new Date(oRs("ins_deel_aanmaak").Value); // Aanmaakdatum/Registratiedatum object.
var start_na_aanmaak = ins_srtcontroledl_xcp_startdat != null && new Date(ins_srtcontroledl_xcp_startdat) > ins_deel_aanmaak;
var aanmaak_na_start = ins_srtcontroledl_xcp_startdat != null && new Date(ins_srtcontroledl_xcp_startdat) < ins_deel_aanmaak;
var today = (eenheid == 0? new Date() : new Date().midnight());
if (nonext &&
ctr_controle_type == 1 &&
ins_deelsrtcontrole_plandatum == null &&
((ins_srtcontroledl_xcp_startdat == null && ins_deel_aanmaak < today) ||
(start_na_aanmaak && new Date(ins_srtcontroledl_xcp_startdat) < today) ||
(aanmaak_na_start && ins_deel_aanmaak < today)))
// Volgende actie is "Onbekend/Undetermined"
return lclass + " expired2"; // Te laat.
// Als de startdatum en/of aanmaakdatum in de toekomst ligt en voor dtsoon, dan kan het binnenkort zijn.
// Dat kan alleen bij een Controle(1) als er nog geen inspectie is geweest en de inspectie nog niet is ingepland.
// Daarnaast moet gelden: a) de aanmaakdatum moet tussen nu en dtsoon liggen of
// b) de startdatum moet na de aanmaakdatum liggen tussen nu en dtsoon.
// Eigelijk kan de voorwaarden dat de aanmaakdatum en startdatum na nu weg, want anders gelde vorige if voorwaarde wel.
else if (nonext &&
ctr_controle_type == 1 &&
ins_deelsrtcontrole_plandatum == null &&
((ins_srtcontroledl_xcp_startdat == null && ins_deel_aanmaak < dtsoon && ins_deel_aanmaak >= today) ||
(start_na_aanmaak && new Date(ins_srtcontroledl_xcp_startdat) < dtsoon && new Date(ins_srtcontroledl_xcp_startdat) >= today) ||
(aanmaak_na_start && ins_deel_aanmaak < dtsoon && ins_deel_aanmaak >= today)))
{
return lclass + " expired1"; // Binnenkort.
}
// Als de aanmaakdatum en/of de startdatum na dtsoon (dus ook na today) ligt dan kan dt (inspectie_next) genomen worden.
// Die heeft dan de juiste waarde.
@@ -403,59 +368,6 @@ var canImport = (user.checkAutorisation("WEB_IMPORT", true) != null);
return dtstring;
}
var nonext = oRs("nonext").Value == 1;
if (nonext && !ismjob)
{
// Er is nog geen inspectie geweest. Eerste controle moet nog plaatsvinden.
// 1: Controle, 2: Vervanging, 3: Certificering.
var aanmaak = new Date(oRs("ins_deel_aanmaak").Value); // Aanmaakdatum/Registratiedatum object.
var startdate = oRs("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRs("ins_srtcontroledl_xcp_startdat").Value) : null; // Startdatum taak.
if ((startdate != null || aanmaak.getTime() > new Date().midnight().getTime()) && oRs("plandatum").Value == null)
{ // 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 dan het volgende:
// Voor Controle(1):
// a) Als de startdatum is ingevuld is de eerste inspectie op MAX(startdatum, registratiedatum) van het object.
// b) Als de startdatum niet is ingevuld en de registratiedatum ligt in de toekomst dan is de eerste inspectie de tekst
// "Vanaf #registratiedatum" (voor #registratiedatum de registratiedatum invullen).
// 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.
if (oRs("ctr_controle_type").Value == 1)
{ // Controle.
if (startdate == null)
{
txt = L("lcl_ins_controle_from").format(oRs("eenheid").Value == 0? toDateTimeString(aanmaak) : toDateString(aanmaak));
dt = aanmaak;
}
else
dt = startdate.getTime() > aanmaak.getTime()? startdate : aanmaak; // Inspectiedatum is MAX(startdatum, registratiedatum).
}
else
{ // Vervanging(2) of Certificering(3).
dt = startdate != null && startdate.getTime() > aanmaak.getTime()? startdate : new Date(oRs("inspectie_next").Value); // Startdatum of de volgende inspectie.
}
if (!txt)
txt = (oRs("eenheid").Value == 0? toDateTimeString(dt) : toDateString(dt));
thisCostYear = dt.getFullYear();
}
else
{
switch (oRs("ctr_controle_type").Value)
{ // 1: Controle, 2: Vervanging, 3: Certificering.
case 1: { var txt = L("lcl_ins_controle_first"); thisCostYear = new Date().getFullYear(); break; }; // Eerste controle.
case 2:
case 3: { var dt = new Date(oRs("inspectie_next").Value); // Registratiedatum.
thisCostYear = dt.getFullYear();
var txt = (oRs("eenheid").value == 0? toDateTimeString(dt) : toDateString(dt));
break;
} // Eerste certificering.
}
}
return txt;
}
var dt = new Date(oRs("inspectie_next").Value);
thisCostYear = dt.getFullYear();
var plandatum = oRs("plandatum").Value != null? " " + L("lcl_ins_respijt") : "";

View File

@@ -46,12 +46,10 @@ insp = {
// Dus met de respijt heb je in dit eerste deel van de query niet meer te maken.
+ " SELECT 1 seq"
+ " , di.ins_deel_key"
+ " , di.ins_deel_aanmaak"
+ " , di.ins_deel_aantal"
+ " , TO_DATE (NULL) ins_deelsrtcontrole_datum"
+ " , NULL inspectie_org"
+ " , NULL isrespijt"
+ " , CASE WHEN " + lastinspect + " IS NULL THEN 1 ELSE 0 END nonext"
// Als respijtdatum vandaag of dit uur is dan is de respijtdatum de eerstvolgende inspectie en dus maar 1 step.
// Als er vandaag al geinspecteerd is dan de volgende inspectiedatum in de toekomst (functie nextcyclusdatesteps())
+ " , fac.nextcyclusdatesteps (COALESCE(" + lastinspect + ", SYSDATE)"
@@ -206,15 +204,10 @@ insp = {
// 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"
+ " 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"
+ " , CASE"
+ " WHEN di.ins_deel_aanmaak > SYSDATE AND di.ctr_controle_type = 1 AND " + lastinspect + " IS NULL"
+ " THEN di.ins_deel_aanmaak"
+ " ELSE NULL"
+ " END"
+ " , fac.nextcyclusdate (COALESCE(" + lastinspect + ", di.ins_deel_aanmaak)"
+ " , di.ins_srtcontrole_mode"
+ " , di.ins_srtcontrole_eenheid"
@@ -236,7 +229,6 @@ insp = {
+ " , di.ctr_ismjob))"
+ " END"
+ " inspectie_next"
+ " , di.ins_srtcontroledl_xcp_startdat"
+ " , di.ins_srtcontrole_key"
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
+ " , di.ins_srtcontrole_groep"
@@ -382,12 +374,10 @@ insp = {
var past_inspect = "" // Combineren met uitgevoerde inspecties op dit object of (indien present) lopende inspecties (ingepland(0), gestart(2), ter uitvoering(3) of gereedgemeld(5))
+ " SELECT 2 seq"
+ " , di.ins_deel_key"
+ " , di.ins_deel_aanmaak"
+ " , di.ins_deel_aantal"
+ " , idsc.ins_deelsrtcontrole_datum"
+ " , " + inspectie_org + " inspectie_org"
+ " , CASE WHEN idsc.ins_deelsrtcontrole_plandatum > idsc.ins_deelsrtcontrole_datum_org THEN 1 ELSE 0 END isrespijt"
+ " , NULL nonext"
+ " , CASE"
+ " WHEN di.ins_srtcontrole_eenheid = 0 AND"
+ " idsc.ins_deelsrtcontrole_plandatum IS NOT NULL AND"
@@ -405,7 +395,6 @@ insp = {
+ " THEN " + inspectie_org
+ " ELSE TO_DATE (NULL)"
+ " END inspectie_next"
+ " , di.ins_srtcontroledl_xcp_startdat"
+ " , idsc.ins_srtcontrole_key"
+ " , " + lcl.xsqla("di.ins_srtcontrole_omschrijving", "di.ins_srtcontrole_key")
+ " , di.ins_srtcontrole_groep"

View File

@@ -911,10 +911,10 @@ else
oRs.Close();
// Er moet een taakafhandeling zijn meegegeven. Was deze succesvol?
var controlemode = getFParamInt("sel_controlemode"); // Taakafhandeling.
var sel_controlemode = getFParamInt("sel_controlemode"); // Taakafhandeling.
var sql_s = "SELECT ins_controlemode_success"
+ " FROM ins_controlemode"
+ " WHERE ins_controlemode_key = " + controlemode;
+ " WHERE ins_controlemode_key = " + sel_controlemode;
var oRs_s = Oracle.Execute(sql_s);
var isSuccess = oRs_s("ins_controlemode_success").Value;
oRs_s.Close();
@@ -940,7 +940,14 @@ else
// 2) Een niet succesvolle MJOB inspectie
// => De eerstvolgende inspectiedatum gelijk aan de controledatum stellen.
firstinspect = true;
var startingpoint = (ingesloten[i].dlsrtcont_plandatum != -1? ingesloten[i].dlsrtcont_plandatum : deelsrtcontrole_datum) // COALESCE(plandatum, ingevulde controledatum).
// Bereken de volgende orginele inspectiedatum (nextdate).
// Bij mjob kan de laatste inspectie niet succesvol zijn. Dus ins.nextcyclusdate(ins_key, srtcont_key, scen_key) kan ik hier 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 startingpoint = ins.func_get_nextdate(ingesloten[i].ins_key, ingesloten[i].srtcont_key, ingesloten[i].scen_key, {mjob: mjob});
var nextdate = new Date(startingpoint);
var start_inspect_interval = new Date(startingpoint); // Vanaf welke datum de inspectie mag plaatsvinden.
}
@@ -982,13 +989,11 @@ else
// Alleen nodig voor moment modus.
if (eenheid == 0)
{
var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
var deelsrtcontrole_datum_trunc = new Date(new Date(deelsrtcontrole_datum).setMinutes(0, 0, 0));
var start_inspect_interval = new Date(new Date(start_inspect_interval).setMinutes(0, 0, 0));
var start_inspect_interval_trunc = new Date(new Date(start_inspect_interval).setMinutes(0, 0, 0));
}
else
{
var nextdate_trunc = new Date(nextdate.midnight());
var deelsrtcontrole_datum_trunc = new Date(deelsrtcontrole_datum.midnight());
var start_inspect_interval_trunc = new Date(new Date(start_inspect_interval).midnight());
}
@@ -999,7 +1004,7 @@ else
// De laatste datum die opgeslagen wordt is uiterlijk de opgegeven controledatum
// De trunc waarde van de controle datum gebruiken.
var firstone = true;
while (isPlanned || (!isPlanned && start_inspect_interval_trunc <= deelsrtcontrole_datum_trunc))
while (firstinspect || isPlanned || (!isPlanned && start_inspect_interval_trunc <= deelsrtcontrole_datum_trunc))
{
// Als de allereerste inspectie van een moment modus taak wordt voltooid,
// dan wordt de org datum niet meer op de uitvoerdatum gezet maar op de eerste van de die maand.
@@ -1061,6 +1066,7 @@ else
isPlanned = false;
insPresent = false; // Als er terug in de while lus wordt gesprongen is er geen inspectie record aanwezig.
firstone = false;
firstinspect = false;
// Bereken de volgende inspectiedatum.
// De functie ins.nextcyclusdate levert de volgende inspectie datum met tijd op onafhankelijk van de eenheid.
@@ -1071,9 +1077,9 @@ else
oRs.Close();
if (eenheid == 0)
nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0));
else
nextdate_trunc = new Date(nextdate.midnight());
var nextdate_trunc = new Date(nextdate.midnight());
start_inspect_interval_trunc = nextdate_trunc;
}

View File

@@ -317,10 +317,10 @@ else
{ // Er is nog geen inspectie (ins_deelsrtcontrole) record aangemaakt. Eerst maar eens de waarden van de velden bepalen.
// Als er al een inspectie is geweest kan er een volgende inspectiedatum berekend worden.
var nextdate = null;
if (ingesloten[i].inspectiestatus > -1)
if (ingesloten[i].inspectiestatus > -1 || !ingesloten[i].ismjob) // Bij periodieke taken kunnen we tegenwoordig de eerste inspectiedatum ook berkenen.
{ // Bereken de volgende orginele inspectiedatum (nextdate).
// Alleen Active Situatie (AS) soort controle's kunnen gestart worden dus voor scenario key moet 1 genomen worden.
// Het is mjob. De laatste inspectie kan niet succesvol zijn. Dus ins.nextcyclusdate(ins_key, srtcont_key, scen_key) kan ik hier niet gebruiken.
// Bij mjob kan de laatste inspectie niet succesvol zijn. Dus ins.nextcyclusdate(ins_key, srtcont_key, scen_key) kan ik hier niet gebruiken.
// func_get_nextdate kijkt naar en houd rekening met onderstaande 4 punten.
// Er is al een inspectie geweest als ik binnen deze if ben.
@@ -331,8 +331,8 @@ else
// 4) Er is geen inspectie geweest of gestart.
nextdate = ins.func_get_nextdate(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1, {mjob: ingesloten[i].ismjob});
}
//else Er zijn nog geen inspecties geweest voor dit object. Dit wordt de eerste inspectie.
// Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
//else MJOB: Er zijn nog geen mjob inspecties geweest voor dit object. Dit wordt de eerste mjob inspectie.
// Volgende mjob inspectiedatum kun je niet berekenen en is dus onbekend (leeg)
// Plandatum blijft leeg.
var fields = [ { dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" },

View File

@@ -591,8 +591,6 @@ function ins_list (pautfunction, params)
if (inspDone) return lclass;
var ins_deelsrtcontrole_plandatum = oRs("ins_deelsrtcontrole_plandatum").Value; // Ingeplande datum.
var ins_srtcontroledl_xcp_startdat = oRs("ins_srtcontroledl_xcp_startdat").Value; // Startdatum (exception).
var ins_deel_aanmaak = new Date(oRs("ins_deel_aanmaak").Value); // Aanmaakdatum/Registratiedatum object.
if (ins_deelsrtcontrole_plandatum == null)
var dt = new Date(oRs("inspectie_next").Value);
else
@@ -603,38 +601,6 @@ function ins_list (pautfunction, params)
dtsoon.setHours(0,0,0,0); // trunc datum
var dtlate = new Date(new Date().setHours(0,0,0,0));
// Als het een eerste controle(1) is en er dan staat "Onbekend/Undetermined" in beeld. Dan ook rood weergeven.
// Onbepaald alleen bij een Controle(1) als er nog geen inspectie is geweest en de inspectie nog niet is ingepland.
// Daarnaast moet gelden: a) de aanmaakdatum moet in het verleden liggen of
// b) de startdatum moet na de aanmaakdatum liggen en in het verleden.
var nonext = oRs("nonext").Value == 1;
var ctr_controle_type = oRs("ctr_controle_type").Value;
var start_na_aanmaak = ins_srtcontroledl_xcp_startdat != null && new Date(ins_srtcontroledl_xcp_startdat) > ins_deel_aanmaak;
var aanmaak_na_start = ins_srtcontroledl_xcp_startdat != null && new Date(ins_srtcontroledl_xcp_startdat) < ins_deel_aanmaak;
var today = (eenheid == 0? new Date() : new Date().midnight());
if (nonext &&
ctr_controle_type == 1 &&
ins_deelsrtcontrole_plandatum == null &&
((ins_srtcontroledl_xcp_startdat == null && ins_deel_aanmaak < today) ||
(start_na_aanmaak && new Date(ins_srtcontroledl_xcp_startdat) < today) ||
(aanmaak_na_start && ins_deel_aanmaak < today)))
// Volgende actie is "Onbekend/Undetermined"
return lclass + " expired2"; // Te laat.
// Als de startdatum en/of aanmaakdatum in de toekomst ligt en voor dtsoon, dan kan het binnenkort zijn.
// Dat kan alleen bij een Controle(1) als er nog geen inspectie is geweest en de inspectie nog niet is ingepland.
// Daarnaast moet gelden: a) de aanmaakdatum moet tussen nu en dtsoon liggen of
// b) de startdatum moet na de aanmaakdatum liggen tussen nu en dtsoon.
// Eigelijk kan de voorwaarden dat de aanmaakdatum en startdatum na nu weg, want anders gelde vorige if voorwaarde wel.
else if (nonext &&
ctr_controle_type == 1 &&
ins_deelsrtcontrole_plandatum == null &&
((ins_srtcontroledl_xcp_startdat == null && ins_deel_aanmaak < dtsoon && ins_deel_aanmaak >= today) ||
(start_na_aanmaak && new Date(ins_srtcontroledl_xcp_startdat) < dtsoon && new Date(ins_srtcontroledl_xcp_startdat) >= today) ||
(aanmaak_na_start && ins_deel_aanmaak < dtsoon && ins_deel_aanmaak >= today)))
{
return lclass + " expired1"; // Binnenkort.
}
var dt1 = new Date(dt);
var dt2 = new Date(dt);
if (eenheid == 4 && mode == 0)
@@ -811,56 +777,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 txt;
var dt;
var nonext = oRs("nonext").Value == 1;
var ismjob = oRs("ctr_ismjob").Value == 1;
if (nonext && !ismjob)
{ // Er is nog geen inspectie geweest. Eerste controle moet nog plaatsvinden.
// 1: Controle, 2: Vervanging, 3: Certificering.
var aanmaak = new Date(oRs("ins_deel_aanmaak").Value); // Aanmaakdatum/Registratiedatum object.
var startdate = oRs("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRs("ins_srtcontroledl_xcp_startdat").Value) : null; // Startdatum taak.
if ((startdate != null || aanmaak.getTime() > new Date().midnight().getTime()) && oRs("ins_deelsrtcontrole_plandatum").Value == null)
{ // 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 dan het volgende:
// Voor Controle(1):
// a) Als de startdatum is ingevuld is de eerste inspectie op MAX(startdatum, registratiedatum) van het object.
// b) Als de startdatum niet is ingevuld en de registratiedatum ligt in de toekomst dan is de eerste inspectie de tekst
// "Vanaf #registratiedatum eerste controle" (voor #registratiedatum de registratiedatum invullen).
// 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.
if (oRs("ctr_controle_type").Value == 1)
{ // Controle.
if (startdate == null)
txt = L("lcl_ins_controle_from").format(oRs("inspectie_eenheid").Value == 0? toDateTimeString(aanmaak) : toDateString(aanmaak));
else
dt = startdate.getTime() > aanmaak.getTime()? startdate : aanmaak; // Inspectiedatum is MAX(startdatum, registratiedatum).
}
else
{ // Vervanging(2) of Certificering(3).
dt = startdate != null && startdate.getTime() > aanmaak.getTime()? startdate : new Date(oRs("inspectie_next").Value); // Startdatum of de volgende inspectie.
}
if (!txt)
txt = (oRs("inspectie_eenheid").Value == 0? toDateTimeString(dt) : toDateString(dt));
}
else
{
switch (oRs("ctr_controle_type").Value)
{
case 1: { txt = L("lcl_ins_controle_first"); break; } // Eerste controle.
case 2:
case 3: { dt = new Date(oRs("inspectie_next").Value); // Registratiedatum.
txt = (oRs("inspectie_eenheid").Value == 0? toDateTimeString(dt) : toDateString(dt));
break;
} // Eerste certificering.
}
}
return txt;
}
var inspectie = (inspDone? oRs("inspectie_date").Value : oRs("inspectie_next").Value);
if (ismjob)

View File

@@ -333,8 +333,7 @@ else
var status_str = "";
switch (ins_deelsrtcontrole_status)
{
case -1: status_str = L("lcl_ins_controle_first");
break;
case -1:
case 6: status_str = L("lcl_ins_controle_new"); // Als status "Voltooid(6)" is, dan nieuwe invoer van inspectie. Voor voltooide inspecties wordt bestand ins_inspect_hist.asp gebruikt.
break;
case 0:

View File

@@ -270,23 +270,6 @@ else
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 txt;
var dt;
var nonext = oRs("nonext").Value == 1;
if (nonext)
{ // Er is nog geen inspectie geweest. Eerste controle moet nog plaatsvinden.
switch (oRs("ctr_controle_type").Value)
{
case 1: { txt = L("lcl_ins_controle_first"); break; } // Eerste controle.
case 2:
case 3: { dt = new Date(oRs("inspectie_next").Value); // Registratiedatum.
txt = (oRs("inspectie_eind").Value == 0? toDateTimeString(dt) : toDateString(dt));
break;
} // Eerste certificering.
}
return txt;
}
var inspectie = inspDone? oRs("inspectie_date").Value : oRs("inspectie_next").Value;
var inspectie_eenheid = (isPeriodiekeTaken ? oRs("inspectie_eenheid").Value : oRs("eenheid").Value);
@@ -339,7 +322,7 @@ else
{
var inspectie_next = fnInspectie(oRs);
var inspectie_plan = fnPlandatum(oRs);
return inspectie_plan != ""? inspectie_plan : (inspectie_next != L("lcl_ins_controle_first") ? inspectie_next : "");
return inspectie_plan != ""? inspectie_plan : inspectie_next;
};
function fncolsubHeader(oRs)