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

     File:               fin_approve.asp
     Description:        Approve or Reject an invoice
                         Returns a confirmation message stating how many are actually handled
     Parameters:
         fin_key         fin_factuur_keys (required) format n or "n,n,...n" (!!!)
     Context:            Called by Ajax from e.g. fin_list.inc form
     Note:
*/ %>
<%
var JSON_Result = true;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../cnt/cnt.inc" -->
<!-- #include file="fin.inc" -->

<%
protectRequest.validateToken();
/***** Get webform parameters *****/
var fin_key_arr = getFParamIntArray("fin_key");
/***** End get webform parameters *****/

var result = { };
var tobeapproved = 0;
var ingesloten = [];
// Bepaal de facturen in de selectie die
// ook echt gefiatteerd kunnen of mogen worden.
var sql = "SELECT fin_factuur_key"
        + "     , prs_perslid_key_goedkeur"
        + " FROM fin_factuur f"
        + " WHERE fin_factuur_key IN (" + fin_key_arr.join(",") + ")"
        + " AND fin_factuur_verwijder IS NULL"
        + " AND fin_factuur_statuses_key = 2"; // Status "Ingevoerd(2)".
oRs = Oracle.Execute(sql);

while (!oRs.eof)
{
  var this_fin = fin.func_enabled_factuur(oRs("fin_factuur_key").Value);
  if (this_fin.canAccept)
  {
    ingesloten.push ({ factuur_key: oRs("fin_factuur_key").Value,
                       prs_key_goedkeur: oRs("prs_perslid_key_goedkeur").Value
                     });
    tobeapproved++;
  }
  oRs.MoveNext();
}
user.anything_todo_or_abort(tobeapproved > 0); // enkele wel en enkele niet klagen we niet over

var ingeslotenstr = "";
for (var i = 0 ; i < ingesloten.length; i++)
{
  ingeslotenstr += (i > 0? "," : "") + ingesloten[i].factuur_key;
}

// Fiatteren.
var fin_status_key = S("fin_enable_goedkeuren") != 0
                 ? "CASE WHEN prs_perslid_key_goedkeur IS NOT NULL THEN 5 ELSE 6 END"
                 : "6";
sql = "UPDATE fin_factuur"
    + " SET fin_factuur_statuses_key = " + fin_status_key
    + " WHERE fin_factuur_key IN (" +  ingeslotenstr + ")"
    + " AND (mld_opdr_key IS NOT NULL OR cnt_contract_key IS NOT NULL OR bes_bestelopdr_key IS NOT NULL)";
Oracle.Execute(sql);
for (var f = 0; f < ingesloten.length; f++)
{
  shared.trackaction("FINFOK", ingesloten[f].factuur_key);
  if (S("fin_enable_goedkeuren") != 0 && ingesloten[f].prs_key_goedkeur > 0)
  { // Factuur is naar status Ter goedkeuring(5) gegaan.
    // Notificatie aan de goedkeurder.
    fin.sendNeedApprovalNotification(ingesloten[f].factuur_key, ingesloten[f].prs_key_goedkeur);
  }
  //else // Factuur is naar status Akkoord(6) gegaan.
}

var pResult = new HookResult();

for (var f = 0; f < ingesloten.length; f++)
{
  // Klantspecifieke check functie (hookfunction) voor de invoer
  if (!custfunc.fin_postsave(ingesloten[f].factuur_key, pResult))
  {
     abort_with_warning(pResult.errmsg);
  }
}

result.success = true;

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