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

     File:               opdr_finish.asp
     Description:        Meldt specifieke opdrachten financieel klaar
     Parameters:
         opdr_key        Array van opdracht keys van opdrachten die moeten worden afgerond (kostenklaar maken)
     Context:
     Note:

*/ %>

<%
var JSON_Result = true;
var opdr_key_arr = getFParamIntArray("opdr_key");
if (opdr_key_arr.length)
    var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": opdr_key_arr[0] };
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="mld.inc" -->

<%
protectRequest.validateToken();

var opdr_kosten = getFParamFloat("opdr_kosten", 0);
var multi = getFParamInt("multi", 0) == 1;

var ingesloten = [];
var warnings = [];
var reqStatusEmptyOpdr = [];
// Bepaal de opdrachten in de selectie die
// ook echt afgerond (kostenklaar) 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]); // Wat heb ik zoal aan rechten op deze specifieke opdracht
  var costExceedsBC = this_opdr.iamBedrijfContact && this_opdr.canUrenMatChange && opdr_kosten > S("mld_max_kosten_extern");
  // Controleren of de contractpersoon van de uitvoerder de maximale kosten heeft overschreden.
  // Dan stoppen en een melding/warning geven. Alleen bij 1 opdracht een melding/warning geven.
  user.anything_todo_or_abort(multi || !costExceedsBC, L("lcl_opdr_cost_exceed") + S("mld_max_kosten_extern"));

  var mld_opdr = this_opdr.mld_opdr;
  var kosten_verplicht_afr = (mld_opdr.tonen_totaal) && ( (mld_opdr.typeopdr_kosten_verplicht & 4) || ( (mld_opdr.typeopdr_kosten_verplicht == 0) && (mld_opdr.opdrkosten_verplicht & 4)));
  var opdr_kosten = opdr_kosten >= 0? opdr_kosten : mld_opdr.t_cost;

  // Bij multi worden er geen bedragen aangepast door de contractpersoon van de uitvoerder.
  // Als het bedrag van de opdracht dan hoger is dan de setting "mld_max_kosten_extern" dan is het ook legaal op dat bedrag gezet door een persoon.
  // Dan mag de opdracht dus kostenklaar gemeld worden door de contactpersoon van de uitvoerden en hoeft de opdracht niet uitgesloten te worden.
  if (this_opdr.canFinish && !(kosten_verplicht_afr && opdr_kosten == null))
  {
    // Zijn bij deze opdracht alle verplichte kenmerken ingevuld?
    reqStatusEmptyOpdr = mld.getActieKenmerkenOpdr(reqStatusEmptyOpdr, opdr_key_arr[i], {status: 9}); // Opdracht status "Kosten Voltooid(9)".
    if (reqStatusEmptyOpdr.length)
    {
      warnings.push(reqStatusEmptyOpdr);
    }
    else
      ingesloten.push(opdr_key_arr[i]);
  }
}

user.anything_todo_or_abort(ingesloten.length || warnings.length); // Warnings voor lege kenmerken die verplicht zijn bij afronden willen we wel tonen

if (ingesloten.length)
{
  var mld_opdr = mld.mld_opdr_info(ingesloten[0]); // Neem voor informatie de eerste opdracht.
  lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
}

for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de status en afhandelen van de tracking van het afronden (finish).
  mld.setopdrachtstatus(ingesloten[i], 9); // Financieel (KTV) (Afgemeld)

  mld_opdr = mld.mld_opdr_info(ingesloten[i]);
  mld.updatemeldingstatus(mld_opdr.mld_key, 0);
}

var result = { key: ingesloten.join(","), success: true, multi: multi, finish: true, warning: warnings.join("\n") };
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>
