285 lines
14 KiB
Plaintext
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(); %>
|