<%@ LANGUAGE = JavaScript %>
<%  Server.ScriptTimeout=6000; %>
<% /*
    $Revision$
    $Id$

    File:           ins_xcp_multi_save.asp
    Description:    opslaan van de waarden bij ins_xcp_multi.asp (Multi editten van de exception (xcp) waarden van de priodieke taken)

    Parameters:
    Context:        Vanuit ins_xcp_multi.asp
    Result:         JSON object
    Note:

*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="ins.inc" -->
<%
protectRequest.validateToken();

var ins_key_arr = getFParamIntArray("ins_keys");
var srtcont_key_arr = getFParamIntArray("srtcontkeys");
var xcp_key_arr = getFParamIntArray("xcpkeys", null, true); // Waarden -1 in de array wordt toegestaan en niet gezien als een lege array.
var scen_key_arr = getFParamIntArray("scenkeys");

var result = {};
var tobeedited = 0;
var ingesloten = [];
var ingeslotensrtc = [];
var ingeslotenxcp = [];
var ingeslotenscen = [];
var ingeslotenccc = []; // canChangeCycle.
// Bepaal de objecten in de selectie die
// ook echt gewijzigd kunnen of mogen worden.
for (var i = 0; i < ins_key_arr.length; i++)
{
    // Mag ik de exceptions (xcp) waarden van de taak wijzigen?
    var this_ins = ins.func_enabled_deel( ins_key_arr[i]
                                        , { srtcont_key: srtcont_key_arr[i]
                                          , scen_key: scen_key_arr[i]
                                          }
                                        );

    if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp) // Alleen afhankelijk van rechten.
    {
        ingesloten.push(ins_key_arr[i]);
        ingeslotensrtc.push(srtcont_key_arr[i]);
        ingeslotenxcp.push(xcp_key_arr[i]);
        ingeslotenscen.push(scen_key_arr[i]);
        ingeslotenccc.push(this_ins.canChangeCycle);
        tobeedited++;
    }
}

//user.auth_required_or_abort(tobeedited > 0); // Melding geven dat de user geen rechten heeft om de wijzigingen door te voeren.


// De ingevulde waarden ophalen.
var fperiode = getFParamInt("periode", null);
var fkp_key = getFParamInt("account", -1);
var fkosten1 = getFParam("kosten1", "").replace(/,/g,".");
var fkosten2 = getFParam("kosten2", "").replace(/,/g,".");
var fkosten3 = getFParam("kosten3", "").replace(/,/g,".");
var fmateriaal = getFParam("materiaal", "").replace(/,/g,".");
var furen = getFParamFloat("uren") || null;
var fperc = getFParam("perc", null);
var fstartdatum = getFParamDate("startdatum", null);
var fvervaldatum = getFParamDate("vervaldatum", null);
var fopmerk = getFParam("opmerk", null);
var aantaltaken = getFParamInt("aantaltaken", 0);

if (fperiode && (fperiode < 0 || fperiode > 999))
  abort_with_warning("Invalid number for " + L("lcl_ins_controle_period") + " (" + fperiode + ")");

for (var i = 0; i < ingesloten.length; i++)
{   // Ik mag het object wijzigen dus voer wijziging uit
    // De standaard waarden uit de srtcontrole tabel.
    var sql = "SELECT di.ins_deel_aantal aantal_std"
            + "     , di.ins_srtdeel_eenheid aanteh_std"
            + "     , di.ins_srtcontrole_periode periode_std"
            + "     , di.prs_kostenplaats_key kp_key_std"
            + "     , di.ins_srtcontrole_bits bits_std"
            + "     , di.ins_srtcontrole_kosten kosten1_std"
            + "     , di.ins_srtcontrole_kosten2 kosten2_std"
            + "     , di.ins_srtcontrole_kosten3 kosten3_std"
            + "     , di.ins_srtcontrole_materiaal materiaal_std"
            + "     , di.ins_srtcontrole_uren uren_std"
            + "     , di.ins_srtcontrole_percentage perc_std"
            + "     , di.ins_srtcontrole_groep groep_std"
            + "     , di.ins_srtcontrole_opmerking opmerk_std"
            + "     , di.ins_srtcontrole_eind vervaldatum_std"
            + "  FROM ins_v_defined_inspect di"
            + " WHERE di.ins_deel_key = " + ingesloten[i]
            + "   AND di.ins_srtcontrole_key = " + ingeslotensrtc[i];
    var oRs_std = Oracle.Execute(sql);

    // De huidige waarde ophalen (COALESCE(xcp waarde, standaard waarde)).
    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"
            + "     , xcp.ins_srtcontrole_kosten kosten1_val"
            + "     , xcp.ins_srtcontrole_kosten2 kosten2_val"
            + "     , xcp.ins_srtcontrole_kosten3 kosten3_val"
            + "     , xcp.ins_srtcontrole_materiaal 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 = " + ingesloten[i]
            + "   AND xcp.ins_srtcontrole_key = " + ingeslotensrtc[i]
            + "   AND xcp.ins_scenario_key = " + scen_key_arr[i]
            + (ingeslotenxcp[i] > 0
              ? " AND xcp.ins_srtcontroledl_xcp_key = " + ingeslotenxcp[i]
              : " AND xcp.ins_srtcontroledl_xcp_key IS NULL");
    var oRs_val = Oracle.Execute(sql);

    if (ingeslotenccc[i] && getFParam("check_periode", "off") == "on")               // Het mag geen lopende taak zijn. canChangeCycle moet true zijn.
        var periode = (fperiode == null? oRs_std("periode_std").Value : fperiode);
    else
        var periode = oRs_val("periode_val").Value;
    if (getFParam("check_account", "off") == "on")
        var kp_key = (fkp_key == -1? oRs_std("kp_key_std").Value : fkp_key) || -1;
    else
        var kp_key = oRs_val("kp_key_val").Value || -1;
    if (getFParam("check_kosten1", "off") == "on")
        var kosten1 = (fkosten1 == null? oRs_std("kosten1_std").Value : calculatePrice(oRs_val("kosten1_val").Value, fkosten1));
    else
        var kosten1 = oRs_val("kosten1_val").Value;
    if (getFParam("check_kosten2", "off") == "on")
        var kosten2 = (fkosten2 == null? oRs_std("kosten2_std").Value : calculatePrice(oRs_val("kosten2_val").Value, fkosten2));
    else
        var kosten2 = oRs_val("kosten2_val").Value;
    if (getFParam("check_kosten3", "off") == "on")
        var kosten3 = (fkosten3 == null? oRs_std("kosten3_std").Value : calculatePrice(oRs_val("kosten3_val").Value, fkosten3));
    else
        var kosten3 = oRs_val("kosten3_val").Value;
    if (getFParam("check_materiaal", "off") == "on")
        var materiaal = (fmateriaal == null? oRs_std("materiaal_std").Value : calculatePrice(oRs_val("materiaal_val").Value, fmateriaal));
    else
        var materiaal = oRs_val("materiaal_val").Value;
    if (getFParam("check_uren", "off") == "on")
        var uren = (furen == null? oRs_std("uren_std").Value : furen);
    else
        var uren = oRs_val("uren_val").Value;
    if (getFParam("check_perc", "off") == "on")
        var perc = (fopmerk == null? oRs_std("perc_std").Value : fperc);
    else
        var perc = oRs_val("perc_val").Value;
    if (getFParam("check_startdatum", "off") == "on")
        var startdatum = (fstartdatum == null? null : fstartdatum); // Startdatum heeft geen standaard waarde in de ins_srtcontrole tablel.
    else
        var startdatum = oRs_val("startdatum_val").Value != null? new Date(oRs_val("startdatum_val").Value) : null;
    if (getFParam("check_vervaldatum", "off") == "on")
        var vervaldatum = ( fvervaldatum == null
                          ? (oRs_std("vervaldatum_std").Value != null? new Date(oRs_std("vervaldatum_std").Value) : null)
                          : fvervaldatum);
    else
        var vervaldatum = oRs_val("vervaldatum_val").Value != null? new Date(oRs_val("vervaldatum_val").Value) : null;
    if (getFParam("check_opmerk", "off") == "on")
        var opmerk = (fopmerk == null? oRs_std("opmerk_std").Value : fopmerk);
    else
        var opmerk = oRs_val("opmerk_val").Value;

    var params = { xcp_key: ingeslotenxcp[i]
                 , periode: periode
                 , eenheid: oRs_val("eenheid_val").Value // Waarde niet aanpassen.
                 , kp_key: kp_key
                 , bits: oRs_val("bits_val").Value       // Waarde niet aanpassen.
                 , uren: uren
                 , materiaal: materiaal
                 , kosten1: kosten1
                 , kosten2: kosten2
                 , kosten3: kosten3
                 , perc: perc
                 , groep: oRs_val("groep_val").Value     // Waarde niet aanpassen.
                 , vervaldatum: vervaldatum
                 , opmerk: opmerk
                 , startdatum: startdatum
                 , aantal:  oRs_val("aantal_val").Value  // Waarde niet aanpassen.
                 , aanteh:  oRs_val("aanteh_val").Value  // Waarde niet aanpassen.
                 , isScenario: ingeslotenscen[i] > 1
                 , scen_key: -1                          // Doorvoeren scenario.
                 , commit: false                         // Doorvoeren scenario.
                 };
    var result = ins.saveXcp(ingesloten[i], ingeslotensrtc[i], params);
    oRs_std.Close()
    oRs_val.Close()
}

if (ingesloten.length < aantaltaken)
{ // Niet alle taken zijn gewijzigd.
  result.message = ingesloten.length == 1? L("lcl_mjb_multiedit_mes_1").format(aantaltaken) : L("lcl_mjb_multiedit_mes_n").format(ingesloten.length, aantaltaken);
}
else
{ // Alle taken zijn gewijzigd.
  result.toaster = L("lcl_mjb_multiedit_completed");
}

Response.Write(JSON.stringify(result));
Response.End();
%><% ASPPAGE_END(); %>
