Files
Facilitor/APPL/INS/ins_srtcontrolexcp_pc_save.asp
Maykel Geerdink 8fd30b06ed FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=69956
2025-08-11 12:29:50 +00:00

285 lines
14 KiB
Plaintext

<%@language = "javascript" %>
<% Server.ScriptTimeout=6000; %>
<% /*
$Revision$
$Id$
File: ins_srtcontrolexcp_pc_save.asp
Description: Het indexeren van het prijsniveau van de gehele MJOB begroting .
Parameters: verschillende kosten en ctrdiscipline, discipline, srtgroup en srtdeel.
costs Kosten 1
costs2 Kosten 2
costs2 Kosten 3
material Materiaalkosten
ctrdisc_key Taakcategorie
disc_key Hoofdrecept
srtgroup_key Groeprecept
srtdeel_key Subrecept
Context: Vanuit mjb_search_list.asp
Note: Resultaat van een submit is een json object
*/ %>
<%
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/save2db.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../API2/api2.inc" -->
<!-- #include file="../API2/model_issues.inc" -->
<!-- #include file="ins.inc" -->
<%
protectRequest.validateToken();
var ins_xcp_active_cost = S("ins_xcp_active_cost");
user.auth_required_or_abort(ins_xcp_active_cost > 0 && ins_xcp_active_cost < 16);
var ins_key_arr = getFParamKeyArray("ins_keys");
var groupby = getFParamInt("groupby", 9);
var pc_costs = ins_xcp_active_cost & 1? getFParamFloat("costs", 0) : 0; // Prijswijziging kosten.
var pc_costs2 = ins_xcp_active_cost & 2? getFParamFloat("costs2", 0) : 0; // Prijswijziging kosten2.
var pc_costs3 = ins_xcp_active_cost & 4? getFParamFloat("costs3", 0) : 0; // Prijswijziging kosten3.
var pc_material = ins_xcp_active_cost & 8? getFParamFloat("material", 0) : 0; // Prijswijziging materiaal.
var aantaltaken = getFParamInt("aantaltaken", 0);
var xcpchanged = 0;
// Settingen.
var inflatiepct = S("mjb_inflation");
var inflatiefactor = 1 + (inflatiepct / 100);
var mjb_start_year = S("mjb_start_year");
var mjb_freeze_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());
// Dit scherm wordt aangeroepen vanuit het mjob overzicht om de kosten van de taken aan te passen (in procenten).
// Bij mjob taken worden de kosten in de ins_srtcontroledl_xcp tabel aangepast.
// OM mjob (xcp) taken te kunnen wijzigen heb je (WEB_INSUSE of ik ben objectbeheerder) + WEB_CTRUSE + WEB_INSMAN rechten nodig.
// Heb ik de juiste rechten bij MJOB.
// Ben ik een objectbeheerder van een object?
var sql = "SELECT ins_deel_key"
+ " FROM ins_deel d"
+ " WHERE d.prs_perslid_key_beh = " + user_key;
var oRs = Oracle.Execute(sql);
var objectBeheerder = !oRs.eof;
oRs.Close();
var authparamsINSUSE = user.checkAutorisation("WEB_INSUSE", true);
var authparamsCTRUSE = user.checkAutorisation("WEB_CTRUSE", true);
var authparamsINSMAN = user.checkAutorisation("WEB_INSMAN", true);
var hasWriteINSUSE = authparamsINSUSE && authparamsINSUSE.ALGwritelevel < 9 && authparamsINSUSE.PRSwritelevel < 9;
var hasWriteCTRUSE = authparamsCTRUSE && authparamsCTRUSE.ALGwritelevel < 9 && authparamsCTRUSE.PRSwritelevel < 9;
var hasWriteINSMAN = authparamsINSMAN && authparamsINSMAN.ALGwritelevel < 9 && authparamsINSMAN.PRSwritelevel < 9;
var hasWrite_MJOB = (hasWriteINSUSE || (S("ins_can_edit_own_objects") && objectBeheerder)) && hasWriteCTRUSE && hasWriteINSMAN
user.anything_todo_or_abort(hasWrite_MJOB); // Melding geven dat de user geen rechten heeft om de prijswijzigingen door te voeren.
var result = {key: "", pricechange: true };
var ingesloten = [];
// Bepaal de objecten in de selectie die
// ook echt gewijzigd kunnen of mogen worden.
if (pc_costs != 0 || pc_costs2 != 0 || pc_costs3 != 0 || pc_material != 0)
{
var showempty = getFParamInt("showempty", 0) == 1; // Ook lege regels tonen.
var dist_key_arr = getFParamKeyArray("dist_key_arr", []); // District array.
var loc_key_arr = getFParamKeyArray("loc_key_arr", []); // Locatie array.
var bld_key_arr = getFParamKeyArray("bld_key_arr", []); // Gebouw array.
var disc_key_arr = getFParamKeyArray("disc_key_arr", []);
var srtgroep_key_arr = getFParamKeyArray("srtgroep_key_arr", []);
var srtdeel_key_arr = getFParamKeyArray("srtdeel_key_arr", []);
var moredetail = getFParamInt("moredetail", 0);
var srtgebouw_key_arr = getFParamKeyArray("srtgebouw_key_arr", []);
var groep_str_arr = getFParam("groep_str_arr", []); // Groep.
var categorie_key_arr = getFParamKeyArray("categorie_key_arr", []); // Categorie.
var srtcontrole_key_arr = getFParamKeyArray("srtcontrole_key_arr", []); // Taak.
var frequentie_arr = getFParamIntArray("frequentie_arr", []); // Array met frequenties.
var kp_key_arr = getFParamKeyArray("kp_key_arr", []); // Kostenplaats.
var incbtw = false; // Voor de prijswijziging zijn de bedragen (pricechange) zonder BTW nodig. Dus ALTIJD false meegeven;
var showunfin = getFParamInt("showunfin", 0) == 1; // Alleen onvoltooide regels.
var toyear = getFParamInt("toyear", new Date().getFullYear());
var deel = getFParam("deel", ""); // Identieficatie.
var jaren = getFParamIntArray("jaren", []); // Jaren.
// FORM score velden.
var fitness_score1_from = getFParamInt("fitness_score1_from", -1); // Conditie score van.
var fitness_score1_through = getFParamInt("fitness_score1_through", -1); // Conditie score t/m.
var fitness_score1_from_neg = getFParamInt("fitness_score1_from_neg", -1); // Negatieve afwijking conditie score van.
var fitness_score1_through_neg = getFParamInt("fitness_score1_through_neg", -1); // Negatieve afwijking conditie score t/m.
var fitness_score1_from_pos = getFParamInt("fitness_score1_from_pos", -1); // Positieve afwijking conditie score van.
var fitness_score1_through_pos = getFParamInt("fitness_score1_through_pos", -1); // Positieve afwijking conditie score t/m.
var priority_score2_from = getFParamInt("priority_score2_from", -1); // Prioriteitsscore van.
var priority_score2_through = getFParamInt("priority_score2_through", -1); // Prioriteitsscore t/m.
// FORM status checkboxes.
var mjbMoved = getFParamInt("mjbMoved", 0) == 1; // Verschoven.
var mjbFreezed = getFParamInt("mjbFreezed", 0) == 1; // In behandeling.
var mjbXcped = getFParamInt("mjbXcped", 0) == 1; // Aangepast.
// Start building the query to fetch all objects satisfying
var mjbparams = { niveau: groupby, // Het niveau (betekenis) van de keys (district(1), locatie(2), gebouw(3), discipline(4), groep(5), objectsoort(6), object(7))
keys: ins_key_arr,
scenario: 1,
fulldetails: true,
//actsit: actsit, // actsit alleen van invloed op scenario_key > 1.
//showempty: showempty, // Niet meegeven. De lege regels worden, indien nodig (!showempty), later uit het resultaat gefilterd.
dist_key_arr: dist_key_arr,
loc_key_arr: loc_key_arr,
bld_key_arr: bld_key_arr,
disc_key_arr: disc_key_arr,
srtgroep_key_arr: srtgroep_key_arr,
srtdeel_key_arr: srtdeel_key_arr,
moredetail: moredetail,
srtgebouw_key_arr: srtgebouw_key_arr,
groep_str_arr: groep_str_arr,
categorie_key_arr: categorie_key_arr,
srtcontrole_key_arr: srtcontrole_key_arr,
frequentie_arr: frequentie_arr,
kp_key_arr: kp_key_arr,
incbtw: incbtw,
showunfin: showunfin,
inflatiefactor: inflatiefactor,
toyear: toyear,
groupby: 9, // Ik wil alle objecten opvragen.
deel: deel,
fitness_score1_from : fitness_score1_from,
fitness_score1_through : fitness_score1_through,
fitness_score1_from_neg : fitness_score1_from_neg,
fitness_score1_through_neg : fitness_score1_through_neg,
fitness_score1_from_pos : fitness_score1_from_pos,
fitness_score1_through_pos : fitness_score1_through_pos,
priority_score2_from : priority_score2_from,
priority_score2_through : priority_score2_through,
mjbMoved: mjbMoved,
mjbFreezed: mjbFreezed,
mjbXcped: mjbXcped,
jaren: jaren,
pricechange: true
};
var mjblist_sql = ins.getmjblist_sql(mjbparams);
// De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevinkte regels uit het mjb overzicht en levert voor elk object de waarden voor de insert op.
var oRs = Oracle.Execute(mjblist_sql);
// Hier geen "user.anything_todo_or_abort(!oRs.eof);". We geven een melding terug hoeveel taken er geaccodeerd zijn.
while (!oRs.eof)
{ // Ik mag het object wijzigen dus voer wijziging uit
var ins_key = oRs("ins_deel_key").Value;
var srtcont_key = oRs("ins_srtcontrole_key").Value;
var xcp_key = oRs("ins_srtcontroledl_xcp_key").Value;
// Nu kan ik per taak kijken of ik de exceptions (xcp) waarden van de taak bij het object mag aanpassen?
var this_ins = ins.func_enabled_deel(ins_key,
{ srtcont_key: srtcont_key,
scen_key: 1
});
if (this_ins.canChangeXcp)
{
if (!showempty)
{ // De lege regels niet meenemen. Deze regels zijn ook niet in het overzicht getoond.
var found_amount = false;
for (var j = 0; j < jaren.length; j++)
{
if (oRs(String(jaren[j])).Value != null) // Wel regels met een bedrag van 0 i.p.v. null tonen. Die moeten wel geaccodeerd worden ook al kosten deze niets.
found_amount = true;
}
if (!found_amount)
{
oRs.MoveNext();
continue;
}
}
// De huidige waarde ophalen (COALESCE(xcp waarde, standaard waarde)) en de nieuwe kosten berekenen.
var sql = "SELECT xcp.ins_srtcontrole_eenheid eenheid_val"
+ " , xcp.ins_deel_aantal aantal_val"
+ " , xcp.ins_srtdeel_eenheid aanteh_val"
+ " , xcp.ins_srtcontrole_periode periode_val"
+ " , xcp.prs_kostenplaats_key kp_key_val"
+ " , xcp.ins_srtcontrole_bits bits_val"
+ " , ROUND(xcp.ins_srtcontrole_kosten"
+ (ins_xcp_active_cost & 1
? " * (1 + " + pc_costs + " / 100)"
: "") + ", 2) kosten1_val"
+ " , ROUND(xcp.ins_srtcontrole_kosten2"
+ (ins_xcp_active_cost & 2
? " * (1 + " + pc_costs2 + " / 100)"
: "") + ", 2) kosten2_val"
+ " , ROUND(xcp.ins_srtcontrole_kosten3"
+ (ins_xcp_active_cost & 4
? " * (1 + " + pc_costs3 + " / 100)"
: "") + ", 2) kosten3_val"
+ " , ROUND(xcp.ins_srtcontrole_materiaal"
+ (ins_xcp_active_cost & 8
? " * (1 + " + pc_material + " / 100)"
: "") + ", 2) materiaal_val"
+ " , xcp.ins_srtcontrole_uren uren_val"
+ " , xcp.ins_srtcontrole_percentage perc_val"
+ " , xcp.ins_srtcontrole_groep groep_val"
+ " , xcp.ins_srtcontrole_opmerking opmerk_val"
+ " , xcp.ins_srtcontrole_eind vervaldatum_val"
+ " , xcp.ins_srtcontroledl_xcp_startdat startdatum_val"
+ " FROM ins_v_defined_inspect_xcp xcp"
+ " WHERE xcp.ins_deel_key = " + ins_key
+ " AND xcp.ins_srtcontrole_key = " + srtcont_key
+ " AND xcp.ins_scenario_key = 1"
+ (xcp_key > 0
? " AND xcp.ins_srtcontroledl_xcp_key = " + xcp_key
: " AND xcp.ins_srtcontroledl_xcp_key IS NULL");
var oRs_val = Oracle.Execute(sql);
var kosten1 = oRs_val("kosten1_val").Value || 0;
var kosten2 = oRs_val("kosten2_val").Value || 0;
var kosten3 = oRs_val("kosten3_val").Value || 0;
var materiaal = oRs_val("materiaal_val").Value || 0;
// Alleen als er wat te veranderden is.
// Dan moet er bij de taak: 1) een bedrag bij de kosten ingevuld zijn en
// 2) een prijsverandering zijn ingevuld bij die kosten
if ((pc_costs != 0 && kosten1 > 0) || (pc_costs2 != 0 && kosten2 > 0) || (pc_costs3 != 0 && kosten3 > 0) || (pc_material != 0 && materiaal > 0))
{
var params = { xcp_key: xcp_key,
periode: oRs_val("periode_val").Value,
eenheid: oRs_val("eenheid_val").Value,
kp_key: oRs_val("kp_key_val").Value || -1,
bits: oRs_val("bits_val").Value,
uren: oRs_val("uren_val").Value,
materiaal: oRs_val("materiaal_val").Value,
kosten1: oRs_val("kosten1_val").Value,
kosten2: oRs_val("kosten2_val").Value,
kosten3: oRs_val("kosten3_val").Value,
perc: oRs_val("perc_val").Value,
groep: oRs_val("groep_val").Value,
vervaldatum: oRs_val("vervaldatum_val").Value != null? new Date(oRs_val("vervaldatum_val").Value) : null,
opmerk: oRs_val("opmerk_val").Value,
startdatum: startdatum = oRs_val("startdatum_val").Value != null? new Date(oRs_val("startdatum_val").Value) : null,
aantal: oRs_val("aantal_val").Value,
aanteh: oRs_val("aanteh_val").Value,
isScenario: false,
scen_key: -1,
commit: false
};
result = ins.saveXcp(ins_key, srtcont_key, params);
xcpchanged++;
}
oRs_val.Close();
}
oRs.MoveNext();
}
oRs.Close();
}
if (xcpchanged < aantaltaken)
{ // Niet bij alle taken zijn de prijswijzigingen aangepast.
result.message = xcpchanged == 1? L("lcl_mjb_multiedit_mes_1").format(aantaltaken) : L("lcl_mjb_multiedit_mes_n").format(xcpchanged, aantaltaken);
}
else
{ // Bij alle taken zijn de prijswijzigingen aangepast.
result.toaster = L("lcl_mjb_price_change_completed");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>