<%@language = "javascript" %>
<% /*
     $Revision$
     $Id$

    File:           ins_xcp_save.asp
    Description:    Inspectie kenmerken (parameters) opslaan
    Parameters:     ins_keys of ins_key (geen verschil)

    Context:        Vanuit ins_xcp.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/json2.js" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="ins.inc" -->

<%
var ins_key = getQParamInt("ins_key");
// Mag ik de parameters van het inspectie object aanpassen?
var this_ins = ins.func_enabled_deel(ins_key);
user.anything_todo_or_abort(this_ins.canChangeXcp);

var xcp_key = getFParamInt("xcp_key"); // ins_srtcontroledl_xcp_key.
var mode = getFParamInt("mode"); // ins_srtcontrole_mode.
var eenheid = getFParamInt("eenheid"); // ins_srtcontroledl_xcp_eenheid.
var periode = getFParamInt("periode"); // ins_srtcontroledl_xcp_periode.
var kosten = getFParamFloat("kosten") || 0; // ins_srtcontroledl_xcp_kosten.
var groep = getFParam("groep"); // ins_srtcontroledl_xcp_groep.
var vervaldatum = getFParamDate("vervaldatum", null); // ins_srtcontroledl_xcp_eenheid.
var bits = 0;

// De betekenis van bits is afhankelijk van de mode en eenheid.
// Alleen in de mode 0 (moment modus) heeft bits betekenis.
if (mode == 0)
{
  var noHoliday = getFParamInt("insInspNoHoli", 0); // Vinkje "Niet op feestdagen"
  switch (eenheid)
  {
    case -1: // Nooit
    case 0:  // Uurlijks
    case 1:  // Dagelijks
             bits = noHoliday * 128;
             break;
    case 2:  // Wekelijks
             bits = getFParamInt("insInspZo", 0) * 1  // Vinkje "Zondag"
                  + getFParamInt("insInspMa", 0) * 2  // Vinkje "Maandag"
                  + getFParamInt("insInspDi", 0) * 4  // Vinkje "Dinsdag"
                  + getFParamInt("insInspWo", 0) * 8  // Vinkje "Woensdag"
                  + getFParamInt("insInspDo", 0) * 16 // Vinkje "Dondersdag"
                  + getFParamInt("insInspVr", 0) * 32 // Vinkje "Vrijdag"
                  + getFParamInt("insInspZa", 0) * 64 // Vinkje "Zaterdag"
                  + noHoliday * 128;
             break;
    case 3:  // Maandelijks
             var dagbits = getFParamInt("dagbits");
             var weekbits = getFParamInt("weekbits");
             bits = dagbits + weekbits + noHoliday * 128;
             break;
    case 4:  // Jaarlijks
             var bits = getFParamInt("maandbits");
             break;
  }
}
else
  // Interval modus
  bits = null;


// Als de nieuwe waarde gelijk is aan de standaard waarden dan deze niet opslaan.
// Ophalen standaard waarden.
var srtcontrole_key = getFParamInt("sel_srtcontrole"); // ins_srtcontrole_key.
var sql = "SELECT isc.ins_srtcontrole_eenheid"
        + "     , isc.ins_srtcontrole_periode"
        + "     , isc.ins_srtcontrole_bits"
        + "     , isc.ins_srtcontrole_kosten"
        + "     , isc.ins_srtcontrole_eind"
        + "  FROM ins_srtcontrole isc"
        + "     , ins_deel d"
        + "     , ins_srtdeel sd"
        + " WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key"
        + "   AND (isc.ins_srtcontrole_niveau = 'S'"
        + "    AND isc.ins_srtinstallatie_key = d.ins_srtdeel_key"
        + "     OR isc.ins_srtcontrole_niveau = 'G'"
        + "    AND isc.ins_srtinstallatie_key = sd.ins_srtgroep_key"
        + "     OR isc.ins_srtcontrole_niveau = 'D'"
        + "    AND isc.ins_srtinstallatie_key = d.ins_discipline_key)"
        + "   AND d.ins_deel_key = " + ins_key
        + "   AND isc.ins_srtcontrole_key = " + srtcontrole_key;
var oRs = Oracle.Execute(sql);
var eenheid_std = oRs("ins_srtcontrole_eenheid").Value;
var periode_std = oRs("ins_srtcontrole_periode").Value;
var bits_std = oRs("ins_srtcontrole_bits").Value;
var kosten_std = oRs("ins_srtcontrole_kosten").Value || 0;
var vervaldatum_std = new Date(oRs("ins_srtcontrole_eind").Value);
var datumdiffer = (vervaldatum? vervaldatum.getTime() : null) != (vervaldatum_std? vervaldatum_std.getTime() : null)
var paramsdiffer = (eenheid != eenheid_std || periode != periode_std || bits != bits_std || kosten != kosten_std || datumdiffer);
var deactivate = periode_std == 0 && periode == 0; // Beide periodes zijn nul. Controle wordt inactief. Uitzonderings regel kan weg in ins_srtcontroledl_xcp.
// Is er een groep ingevuld?
var filledgroep = groep != null && groep != "";


if ((paramsdiffer || filledgroep) && !deactivate)
{ // parameters wijken af van de standaard of er is een respijtdatum of groep ingevuld.
  var result = { success: true, srtcontroledl_xcp_key: xcp_key };

  var fields =  [ { dbs: "ins_deel_key",                  typ: "key",      val: ins_key },
                  { dbs: "ins_srtcontrole_key",           typ: "key",      frm: "sel_srtcontrole" },
                  { dbs: "ins_srtcontroledl_xcp_eenheid", typ: "number",   val: (eenheid == eenheid_std || eenheid < 0? null : eenheid) }, // Waarde gelijk aan standaard niet opslaan.
                  { dbs: "ins_srtcontroledl_xcp_periode", typ: "number",   val: (periode == periode_std? null : periode) }, // Waarde gelijk aan standaard niet opslaan.
                  { dbs: "ins_srtcontroledl_xcp_bits",    typ: "number",   val: (bits == bits_std? null : bits) }, // Waarde gelijk aan standaard niet opslaan.
                  { dbs: "ins_srtcontroledl_xcp_kosten",  typ: "float",    val: (kosten == kosten_std? null : kosten) },
                  { dbs: "ins_srtcontroledl_xcp_groep",   typ: "varchar",  val: groep },
                  { dbs: "ins_srtcontroledl_xcp_eind",    typ: "datetime", val: (datumdiffer? vervaldatum : null) }
                ];

  if (xcp_key < 0) // Nieuwe inspectie
  {
    fields.push({ dbs: "ins_srtcontroledl_xcp_key",       typ: "key",      seq: "ins_s_srtcontroledl_xcp_key" });
    var insIns = buildInsert("ins_srtcontroledl_xcp", fields);
    result.srtcontroledl_xcp_key = insIns.sequences["ins_srtcontroledl_xcp_key"];
    var err = Oracle.Execute(insIns.sql, true);
  }
  else
  {
    var sql = buildUpdate("ins_srtcontroledl_xcp", fields) + " ins_srtcontroledl_xcp_key = " + xcp_key;
    var err = Oracle.Execute(sql, true);
  }
}
else
{
  // Deactiveren of alle parameter waarden zijn identiek aan de standaard waarden en er is geen groep ingevuld.
  if (xcp_key < 0) // Nieuwe inspectie.
  { // Geen nieuw record aanmaken.
    var result = { success: true, srtcontroledl_xcp_key: xcp_key, warning: L("lcl_ins_controle_identical_values") };
  }
  else
  { // Dan kan het record verwijderd worden.
    var result = { success: true, srtcontroledl_xcp_key: xcp_key, warning: (deactivate? L("lcl_ins_controle_deactivated") : L("lcl_ins_controle_identical_values")) };

    // Record verwijderen.
    var sql = "DELETE FROM ins_srtcontroledl_xcp"
            + " WHERE ins_deel_key = " + ins_key
            + "   AND ins_srtcontrole_key = " + srtcontrole_key;
    var err = Oracle.Execute(sql, true);
    if (err.friendlyMsg)
      result.message += " " + err.friendlyMsg;
    oRs.Close();
  }
}

if (err && err.friendlyMsg)
{
  result.warning = err.friendlyMsg;
  result.success = false;
}

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