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

     File:               opdr_approve.asp
     Description:        Fiatteren van een opdracht.
     Parameters:
        opdr_key         String van opdrachtnummers (keys)
*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
/***** Get webform parameters *****/
var opdr_key_arr = getFParamIntArray("opdr_key");

var result = { message: "", success: false };
/***** End get webform parameters *****/

var result = {};
var tobeapproved = 0;
var ingesloten = [];
// Bepaal de bestellingen in de selectie die
// ook echt geaccepteerd kunnen of mogen worden.
for (var i = 0; i < opdr_key_arr.length; i++)
{
  var this_opdr = mld.func_enabled_opdracht(opdr_key_arr[i]);
  if (this_opdr.canApprove)
  {
    ingesloten.push(opdr_key_arr[i]);
    tobeapproved++;
  }
}
user.anything_todo_or_abort(tobeapproved > 0); // We klagen niet over enkele wel en enkele niet



for (var i = 0; i < ingesloten.length; i++)
{
  // Blijkbaar mogen we Approve'n
  var mld_opdr = mld.mld_opdr_info(ingesloten[i]);
  // Zijn we nu klaar?

  // TODO in de volgende versie (zie docu PF) meerlaags fiattering met prs.getfiatteur() vgl bes_approve.asp

  // check welk profiel gebruikt moet worden als ik vervanger van de budgethouder ben.
  profile_user_key = user_key;

  if (user.isCollega(mld_opdr.fiatteur_kp_key)) {
    profile_user_key = mld_opdr.fiatteur_kp_key;
  }

  if (   (!S("mld_use_order_approval") || mld_opdr.t_cost == 0)          // het was sowieso vrijwillige approval
      || user.isCollega(mld_opdr.fiatteur_kpg_key)                       // wij zijn de groepverantwoordelijke of de vervanger van de groepverantwoordelijke.
      || !budget.exceeds_profiel(mld_opdr.t_cost, profile_user_key, -1)) // het valt binnen onze limiet (geen disicpline)
  { // Zetten van de status en afhandelen van de tracking van het fiatteren (approve).
    mld.setopdrachtstatus(ingesloten[i], 4); // Gefiatteerd, trackt zelf ORDFOK

    // In het geval van herfiattering de status hier al terugzetten naar de herfiatteringstatus.
    var refiatstatus = mld_opdr.opdr_status_refiat;
    if (refiatstatus > 0)
    {
      mld.setopdrachtstatus(ingesloten[i], refiatstatus, mld_opdr.uitvoerende_key); // Naar de herfiatteringstatus.

      // 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
      // Doorgang naar status 5 wordt geregeld in mld.auto_set_uitgegeven of in de database procedure fac.markorderassent() (aanroep in UTILS/PutOrders/puo_allorders.js)
      mld.auto_set_uitgegeven(ingesloten[i]);
  }
  else
  {
      // Naar kostenplaatsgroep fiatteur sturen
      shared.trackaction("ORDFOK", ingesloten[i]); // nog even van onszelf
      // notify approver_key by message & mail as configured in fac_srtnotificatie with BESAPx
      mld.sendNeedApprovalNotification(ingesloten[i], mld_opdr.fiatteur_kpg_key);
  }
}

result.success = true;

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

