<%@ LANGUAGE = JavaScript %>
<% /*
     $Revision$
     $Id$

     File:           opdr_reject_save.asp
     Description:    Wijs een opdracht opdracht af.
     Parameters:
         opdr_key    Opdracht key van de opdracht die moet worden gegewezen
     Context:
     Note:

*/
var JSON_Result = true;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="mld.inc" -->

<%
protectRequest.validateToken();

opdr_key_arr = getFParamIntArray("opdr_key");
var opmerk = getFParam("opmerk", "");
var result = {};
var toberejected = 0;
var ingesloten = [];

for (var i = 0; i < opdr_key_arr.length; i++)
{
  var this_opdr = mld.func_enabled_opdracht(opdr_key_arr[i]);
  if (this_opdr.canReject)
  {
    ingesloten.push(opdr_key_arr[i]);
    toberejected++;
  }
  // Zijn bij de melding van deze opdracht alle verplichte kenmerken ingevuld?
  var sql = "SELECT mld_melding_key"
          + "  FROM mld_opdr o"
          + " WHERE o.mld_opdr_key = " + opdr_key_arr[i];
  var oRs = Oracle.Execute(sql);
  var mld_key = oRs("mld_melding_key").value;
  oRs.Close();
}

user.anything_todo_or_abort(toberejected > 0); // We klagen niet over enkele wel en enkele niet

var result = { opdr_key: ingesloten.join(","), message: "", success: false };

      for (var i = 0; i < ingesloten.length; i++)
      {
        var mld_opdr = mld.mld_opdr_info(ingesloten[i]);
        refiatstatus = mld_opdr.opdr_status_refiat;
        currentstatus = mld_opdr.opdr_status;

        if (refiatstatus > 0)
        { // Eerst de afwijzing nog even tracken (Gebeurt normaal door het zetten van de status 2 (Afgekeurd/Niet akkoord).
          // Afkeuring vanuit status 10 (Ter goedkeuring): ORDGNO
          // Afkeuring vanuit status 3 (Ter fiattering): ORDFNO
          shared.trackaction(currentstatus == 10? "ORDGNO" : "ORDFNO", ingesloten[i]);
          // Eerst de oude kosten terugzetten plus de tracking hiervan.
          var fields = [ { dbs: "mld_opdr_uren",          typ: "float",   val: mld_opdr.hours_refiat,    track: L("lcl_mld_hours") },
                         { dbs: "mld_opdr_uurloon",       typ: "float",   val: mld_opdr.h_rate_refiat > 0? mld_opdr.h_rate_refiat : null,   track: L("lcl_hour_rate") + "&nbsp;" + S("currency_pref") },
                         { dbs: "mld_opdr_materiaal",     typ: "float",   val: mld_opdr.m_cost_refiat,   track: L("lcl_mater_cost") + "&nbsp;" + S("currency_pref") },
                         { dbs: "mld_opdr_kosten",        typ: "float",   val: mld_opdr.t_cost_refiat,   track: L("lcl_total_cost") },
                         { dbs: "mld_opdr_approved",      typ: "float",   val: mld_opdr.approved_refiat > 0? mld_opdr.approved_refiat : null } // Approved bedrag niet tracken. Alleen het bedrag weer terugzetten.
                       ];
          var mldUpd = buildTrackingUpdate("mld_opdr", "mld_opdr_key = " + ingesloten[i], fields);

          var err = Oracle.Execute(mldUpd.sql, true);
          if (err.friendlyMsg)
            abort_with_warning(err.friendlyMsg);

          if (mldUpd.trackarray.length)
          {
            var ins_srtdiscipline_prefix = mld_prefix(mld_opdr.mld_key);
            var formattedID = ins_srtdiscipline_prefix + mld_opdr.mld_key + "/" + mld_opdr.volgnr;
            mld.trackopdrachtupdate(ingesloten[i], L("lcl_ord_is_ordupdtrack").format(formattedID) + "\n" + mldUpd.trackarray.join("\n"));
          }

          // Na het afwijzen weer terug naar de oude status. Daarna pas de refiat velden op NULL zetten.
          // Dit terugzetten van de oude status wordt niet getrackt omdat het veld mld_statusopdr_key_refiat nog gevuld is.
          // Daar zorgt de database functie mld.setopdrachtstatus() voor.
          mld.setopdrachtstatus(ingesloten[i], refiatstatus);

          // Refiat opdracht kosten en refiat status weer op NULL zetten.
          sql = "UPDATE mld_opdr"
              + "   SET mld_opdr_uren_refiat = NULL"
              + "     , mld_opdr_uurloon_refiat = NULL"
              + "     , mld_opdr_materiaal_refiat = NULL"
              + "     , mld_opdr_kosten_refiat = NULL"
              + "     , mld_statusopdr_key_refiat = NULL"
              + "     , mld_opdr_approved_refiat = NULL"
              + " WHERE mld_opdr_key = " + ingesloten[i];
          Oracle.Execute(sql);
        }
        else
        { // Zetten van de status en afhandelen van de tracking van het afwijzen (reject).
          mld.setopdrachtstatus(ingesloten[i], 2); // Afgekeurd(2)
          // Nog de afmeld opmerking opslaan.
          sql = "UPDATE mld_opdr"
              + "   SET mld_opdr_opmerking_fiat = " + safe.quoted_sql(opmerk)
              + " WHERE mld_opdr_key = " + ingesloten[i]
          Oracle.Execute(sql);
        }
        // De status van de melding zou gewijzigd kunnen moeten worden hierdoor
        mld.updatemeldingstatus(mld_opdr.mld_key, 0);
      }

result.success = true;

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