diff --git a/APPL/INS/ins.inc b/APPL/INS/ins.inc index 68fa83b1cf..b5bb12c3e8 100644 --- a/APPL/INS/ins.inc +++ b/APPL/INS/ins.inc @@ -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" diff --git a/APPL/INS/ins_inspect_list.asp b/APPL/INS/ins_inspect_list.asp index 465c70b2b4..12257c6237 100644 --- a/APPL/INS/ins_inspect_list.asp +++ b/APPL/INS/ins_inspect_list.asp @@ -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") : ""; diff --git a/APPL/INS/ins_inspect_list.inc b/APPL/INS/ins_inspect_list.inc index 4d4c1f6a6c..9d5930b373 100644 --- a/APPL/INS/ins_inspect_list.inc +++ b/APPL/INS/ins_inspect_list.inc @@ -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" diff --git a/APPL/INS/ins_inspect_save.asp b/APPL/INS/ins_inspect_save.asp index d96de65780..0115969acf 100644 --- a/APPL/INS/ins_inspect_save.asp +++ b/APPL/INS/ins_inspect_save.asp @@ -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. @@ -1008,9 +1013,9 @@ else var orgdate = new Date(nextdate); if (firstinspect && eenheid == 4) orgdate.setDate(1); - var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, - { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan. - { dbs: "ins_deelsrtcontrole_plan_opm", typ: "varchar", val: plan_opm, track: L("lcl_mjb_plan_opmerking"), len: 4000 }, + var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, + { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan. + { dbs: "ins_deelsrtcontrole_plan_opm", typ: "varchar", val: plan_opm, track: L("lcl_mjb_plan_opmerking"), len: 4000 }, { dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: orgdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde. ]; @@ -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; } @@ -1081,7 +1087,7 @@ else { // De controlemode en de opmerking van de laatste inspectie nog even op de aangegeven waarde zetten (i.p.v. niet succes waarde (controlemode) en lege waarde (opmerking)). var fields = [ { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } ]; - fields.push({ dbs: "ins_deelsrtcontrole_plan_opm", typ: "varchar", val: plan_opm, track: L("lcl_mjb_plan_opmerking"), len: 4000 }); + fields.push({ dbs: "ins_deelsrtcontrole_plan_opm", typ: "varchar", val: plan_opm, track: L("lcl_mjb_plan_opmerking"), len: 4000 }); var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + result.deelsrtcontrole_key, fields); var err = Oracle.Execute(insUpd.sql, true); } @@ -1310,12 +1316,12 @@ else { var nextdate = new Date(oRsa("nextdate").Value); var nextdate_jaar = nextdate.getFullYear(); - if (nextdate_jaar == plandatum_jaar) - mjobdelete = true; + if (nextdate_jaar == plandatum_jaar) + mjobdelete = true; } - else if (srtcontrole_type == 1 && plandatum_jaar == mjb_freeze_year) // Controles(1). - mjobdelete = true; - else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3). + else if (srtcontrole_type == 1 && plandatum_jaar == mjb_freeze_year) // Controles(1). + mjobdelete = true; + else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3). { // Bereken de volgende inspectiedatum. // Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet 1 (of null) genomen worden. sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key diff --git a/APPL/INS/ins_inspect_start.asp b/APPL/INS/ins_inspect_start.asp index 0f9154a0b2..1980bba456 100644 --- a/APPL/INS/ins_inspect_start.asp +++ b/APPL/INS/ins_inspect_start.asp @@ -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" }, diff --git a/APPL/INS/ins_list.inc b/APPL/INS/ins_list.inc index b726a31041..22a42051e5 100644 --- a/APPL/INS/ins_list.inc +++ b/APPL/INS/ins_list.inc @@ -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) diff --git a/APPL/PDA/ins_inspect.asp b/APPL/PDA/ins_inspect.asp index 3dc7525328..f16e5b6d83 100644 --- a/APPL/PDA/ins_inspect.asp +++ b/APPL/PDA/ins_inspect.asp @@ -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: diff --git a/APPL/PDA/ins_inspect_list.asp b/APPL/PDA/ins_inspect_list.asp index b4aab550de..e048b91f2c 100644 --- a/APPL/PDA/ins_inspect_list.asp +++ b/APPL/PDA/ins_inspect_list.asp @@ -155,7 +155,7 @@ else PAGE_START(); if (isPeriodiekeTaken) { - FILTER_PANEL_START(); + FILTER_PANEL_START(); FORM_START("inspect_filter_list", {name: "u2", action: rooturl + "/appl/pda/ins_inspect_list.asp", method: "GET"}); HIFIELD("urole", urole); @@ -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); @@ -315,7 +298,7 @@ else var res = ""; if (!isPeriodiekeTaken) { - if (oRs("ins_deelsrtcontrole_status").Value == 5 || oRs("ins_deelsrtcontrole_status").Value == 6) + if (oRs("ins_deelsrtcontrole_status").Value == 5 || oRs("ins_deelsrtcontrole_status").Value == 6) { if (oRs("ins_controlemode_success").Value == 0) res = I("fa-exclamation-triangle"); @@ -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)