Files
Facilitor/APPL/MJB/mjb_commit_scen.asp
Maykel Geerdink 282b96d351 FCLT#83238: Foutmelding omdat Freeze jaar in het verleden staat netjes oplossen.
svn path=/Website/trunk/; revision=66578
2024-10-14 09:15:12 +00:00

249 lines
11 KiB
Plaintext

<%@language = "javascript" %>
<% Server.ScriptTimeout=6000; %>
<% /*
$Revision$
$Id$
File: mjb_commit_scen.asp
Description: Doorvoeren van een scenario
Parameters:
scen_key Scenario key.
Context:
Note:
*/ %>
<%
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/save2db.inc" -->
<!-- #include file="../ins/ins.inc" -->
<%
protectRequest.validateToken();
var scen_key = getFParamInt("scenario", -1);
var mjb_freeze_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
var sql = "SELECT ins_scenario_omschrijving"
+ " FROM ins_scenario"
+ " WHERE ins_scenario_key = " + scen_key;
var oRs = Oracle.Execute(sql)
var scen_name = oRs("ins_scenario_omschrijving").Value;
oRs.Close();
var sql = "SELECT xcp.ins_deel_key"
+ " , xcp.ins_srtcontrole_key"
+ " FROM ins_v_defined_inspect_xcp xcp"
+ " WHERE xcp.ins_scenario_key = " + scen_key
+ " ORDER BY xcp.ins_deel_key, xcp.ins_srtcontrole_key";
oRs = Oracle.Execute(sql);
var tobecomitted = 0;
var ingesloten = [];
var autchecked = false;
while (!oRs.eof)
{
var ins_key = oRs("ins_deel_key").Value;
var srtcont_key = oRs("ins_srtcontrole_key").Value;
// Rechten 1 keer bepalen of ik mag doorvoeren.
if (!autchecked)
{
var this_ins = ins.func_enabled_deel(ins_key, {srtcont_key: srtcont_key});
autchecked = true;
}
if (this_ins.canAddToScen) // Mag ik de AS xcp waarde wijzigen?
{
ingesloten.push({ins_key: ins_key, srtcont_key: srtcont_key});
tobecomitted++;
}
oRs.MoveNext();
}
oRs.Close()
user.anything_todo_or_abort(tobecomitted > 0); // We klagen niet over enkele wel en enkele niet.
Oracle.Transaction();
for (var i = 0; i < ingesloten.length; i++)
{ // Toevoegen van de taak voor het object aan het (nieuwe) scenario.
var dlsrtcont_key = -1;
var dlsrtcont_status;
var dsc_plandatum_string = L("lcl_empty");
// Laatste inspectie record (Active Situatie (AS)) ophalen.
sql = "SELECT idsc.ins_deelsrtcontrole_key"
+ " , idsc.ins_deelsrtcontrole_status"
+ " , idsc.ins_deelsrtcontrole_plandatum"
+ " , EXTRACT (YEAR FROM idsc.ins_deelsrtcontrole_freezedate) freezejaar"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
+ " AND idsc.ins_scenario_key = 1"
+ " ORDER BY idsc.ins_deelsrtcontrole_key DESC";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
dlsrtcont_key = oRs("ins_deelsrtcontrole_key").Value;
dlsrtcont_status = oRs("ins_deelsrtcontrole_status").Value;
dsc_plandatum_string = oRs("ins_deelsrtcontrole_plandatum").Value != null? toDateTimeString(new Date(oRs("ins_deelsrtcontrole_plandatum").Value)) : L("lcl_empty");
dsc_freezejaar = oRs("freezejaar").Value;
}
oRs.Close();
// Waarden van het scenario ophalen.
var sql = "SELECT xcp.ins_srtcontroledl_xcp_key"
+ " , isc.ins_srtcontrole_mode"
+ " , xcp.ins_srtcontroledl_xcp_periode"
+ " , xcp.prs_kostenplaats_key"
+ " , xcp.ins_srtcontroledl_xcp_eenheid"
+ " , xcp.ins_srtcontroledl_xcp_bits"
+ " , xcp.ins_srtcontroledl_xcp_uren"
+ " , xcp.ins_srtcontroledl_xcp_materia"
+ " , xcp.ins_srtcontroledl_xcp_kosten"
+ " , xcp.ins_srtcontroledl_xcp_kosten2"
+ " , xcp.ins_srtcontroledl_xcp_kosten3"
+ " , xcp.ins_srtcontroledl_xcp_perc"
+ " , xcp.ins_srtcontroledl_xcp_groep"
+ " , xcp.ins_srtcontroledl_xcp_startdat"
+ " , xcp.ins_srtcontroledl_xcp_eind"
+ " , xcp.ins_srtcontroledl_xcp_opmerk"
+ " , xcp.ins_srtcontroledl_xcp_aantal"
+ " , xcp.ins_srtcontroledl_xcp_aanteh"
+ " , xcp.ins_scenario_key"
+ " , isc.ins_srtcontrole_opmerking"
+ " FROM ins_srtcontroledl_xcp xcp"
+ " , ins_srtcontrole isc"
+ " WHERE xcp.ins_deel_key = " + ingesloten[i].ins_key
+ " AND xcp.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
+ " AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key"
+ " AND xcp.ins_scenario_key = " + scen_key;
var oRs = Oracle.Execute(sql);
var xcp_key = oRs("ins_srtcontroledl_xcp_key").Value;
var mode = oRs("ins_srtcontrole_mode").Value;
var periode = oRs("ins_srtcontroledl_xcp_periode").Value;
var kp_key = oRs("prs_kostenplaats_key").Value || -1;
var eenheid = oRs("ins_srtcontroledl_xcp_eenheid").Value;
var bits = oRs("ins_srtcontroledl_xcp_bits").Value;
var uren = oRs("ins_srtcontroledl_xcp_uren").Value;
var materiaal = oRs("ins_srtcontroledl_xcp_materia").Value;
var kosten1 = oRs("ins_srtcontroledl_xcp_kosten").Value;
var kosten2 = oRs("ins_srtcontroledl_xcp_kosten2").Value;
var kosten3 = oRs("ins_srtcontroledl_xcp_kosten3").Value;
var perc = oRs("ins_srtcontroledl_xcp_perc").Value;
var groep = oRs("ins_srtcontroledl_xcp_groep").Value;
var vervaldatum = oRs("ins_srtcontroledl_xcp_eind").Value != null? new Date(oRs("ins_srtcontroledl_xcp_eind").Value) : null;
var opmerk = oRs("ins_srtcontroledl_xcp_opmerk").Value;
var startdatum = oRs("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRs("ins_srtcontroledl_xcp_startdat").Value) : null;
var aantal = oRs("ins_srtcontroledl_xcp_aantal").Value;
var aanteh = oRs("ins_srtcontroledl_xcp_aanteh").Value;
oRs.Close();
// Xcp scenario -> Active Situatie (AS).
var params = { xcp_key: xcp_key,
periode: periode,
eenheid: eenheid,
kp_key: kp_key,
bits: bits,
uren: uren,
materiaal: materiaal,
kosten1: kosten1,
kosten2: kosten2,
kosten3: kosten3,
perc: perc,
groep: groep,
vervaldatum: vervaldatum,
opmerk: opmerk,
startdatum: startdatum,
aantal: aantal,
aanteh: aanteh,
isScenario: false,
scen_key: scen_key,
commit: true,
scen_name: scen_name
};
var result = ins.saveXcp(ingesloten[i].ins_key, ingesloten[i].srtcont_key, params);
// Plandatum scenario -> Active Situatie (AS).
// Plandatum scenario ophalen.
sql = "SELECT idsc.ins_deelsrtcontrole_plandatum"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = " + ingesloten[i].ins_key
+ " AND idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key
+ " AND idsc.ins_scenario_key = " + scen_key;
var oRs = Oracle.Execute(sql);
// Het kan zijn dat er voor het scenario geen ins_deelsrtcontrole record is (Niet verschoven t.o.v. het orgineel).
var plandatum = !oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null;
oRs.Close();
// Is er in de Active Situatie (AS) een lopende instpectie.
// In mjob komen geen Gereedgemeld/Afgerond(5) inspecties voor. Alleen status 0, 2 en 6.
if (dlsrtcont_key > 0 && dlsrtcont_status == 0)
{ // Er is een lopende inspectie in de Active Situatie (AS).
if (plandatum)
{
if (dsc_plandatum_string != toDateTimeString(plandatum))
{
var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum }
];
var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + dlsrtcont_key, fields);
var err = Oracle.Execute(insUpd.sql, true);
ins.trackinspectupdate(dlsrtcont_key, L("lcl_mjb_adjustby_scen").format(scen_name) + "\n" + L("lcl_opdr_plandate") + " " + dsc_plandatum_string + " -> " + toDateTimeString(plandatum));
}
}
else if (dlsrtcont_status == 0)
{ // Er was een inspectie ingepland voor de Active Situatie (AS). Het inspectierecord verwijderen omdat de plandatum van het scenario leeg is;
Oracle.Execute("DELETE FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_key = " + dlsrtcont_key);
}
}
else
{ // Er is in de Active Situatie (AS) geen lopende inspectie.
// of er is een geaccordeerde inspectie voor het freeze jaar.
//
// Alleen een ins_deelsrtcontrole opslaan als:
// 1) de inspectie/taak is verschoven/verplaatsen (een plandatum ingevuld)
// 2) er geen ingeplande/gestarte inspectie is in de Active Situatie (AS).
if (plandatum && !((dlsrtcont_status == 2 || dlsrtcont_status == 3) && dsc_freezejaar == mjb_freeze_year))
{
var nextdate = ins.func_get_nextdate(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1);
var fields = [ { dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key },
{ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key },
{ dbs: "ins_deelsrtcontrole_status", typ: "key", val: 0 },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum },
{ dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate}
];
ins.testInspectInsert(ingesloten[i].ins_key, ingesloten[i].srtcont_key, 1);
var insIns = buildInsert("ins_deelsrtcontrole", fields);
dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"];
var err = Oracle.Execute(insIns.sql, true);
}
}
// Het inspectierecord (ins_deelsrtcontrole) verwijderen.
Oracle.Execute("DELETE FROM ins_deelsrtcontrole"
+ " WHERE ins_deel_key = " + ingesloten[i].ins_key
+ " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key
+ " AND ins_scenario_key = " + scen_key);
if ((i % 100) == 99) // Modulus. Bij elke 100 committen.
{
Oracle.Commit();
Oracle.Transaction();
}
}
// Nu nog het scenario verwijderen.
// Een scenario gooit via de cascade zijn ins_deelsrtcontrole en ins_srtcontroledl_xcp records mee weg. Maar die zijn al verwijderd.
Oracle.Execute("DELETE FROM ins_scenario WHERE ins_scenario_key = " + scen_key);
Oracle.Commit();
result.deleted = true; // Scenario tabje sluiten na het verwijderen van het scenario
result.message = L("lcl_mjb_scenario_deleted"); // Alert i.p.v. toaster want het kan heel lang duren. Dan blijft de melding i.i.g. zichtbaar.
Response.Write(JSON.stringify(result));
%><% ASPPAGE_END(); %>