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

     File:               fin_goedkeur.asp
     Description:        Goedkeuren or afkeuren van een factuur
                         Geeft een bevestingsbericht terug hoeveel facturen er eigenlijk zijn behandeld.
     Parameters:
         fin_key         fin_factuur_keys (verplicht) formaat n of "n,n,...n" (!!!).
     Context:            Aanroep door Ajax in fin_show_factuur.js en fin_list.js.
     Note:
*/ %>
<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
/***** Get webform parameters *****/
var fin_key_arr = getFParamIntArray("fin_key");
var accept = getQParamInt("a", -1) == 1;
var reject = getQParamInt("r", -1) == 1;
if (accept && reject) eval("INTERNAL ERROR or ABUSE");

// Accepteren en afkeuren moet wel mogelijk zijn.
user.anything_todo_or_abort((S("fin_enable_goedkeuren") == 1 && accept) || (S("fin_enable_afwijzen") == 1 && reject));

/***** End get webform parameters *****/
var message = "";

var result = { };

var tobevalidated = 0;
var not_tobevalidated = 0;

// Lijst van vervangers + user_key opvragen.
var prsKeys = user.collegakeylist(); // "user_key, vervangers"
var ingesloten = [];
// Bepaal de facturen in de selectie die
// ook echt gefiatteerd kunnen of mogen worden.
var sql = "SELECT fin_factuur_key"
        + " FROM fin_factuur f"
        + " WHERE fin_factuur_key IN (" + fin_key_arr.join(",") + ")"
        + " AND fin_factuur_verwijder IS NULL"
        + " AND fin_factuur_statuses_key = 5"; // Status Financieel goedgekeurd(5).
oRs = Oracle.Execute(sql);

while (!oRs.eof)
{
  var this_fin = fin.func_enabled_factuur(oRs("fin_factuur_key").Value);
  if (this_fin.canGoedkeur)
  {
    ingesloten.push (oRs("fin_factuur_key").Value);
    tobevalidated++;
  }
  oRs.MoveNext();
}
user.anything_todo_or_abort(tobevalidated > 0); // enkele wel en enkele niet klagen we niet over

var ingeslotenstr = ingesloten.join(",");

if (tobevalidated > 0)
{ // Goedkeuren of afkeuren.
  if (accept)
  { // Goedkeuren.
    sql = "UPDATE fin_factuur"
        + " SET fin_factuur_statuses_key = 6"
        + " 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)";
    for (f = 0 ; f < ingesloten.length; f++)
    {
      shared.trackaction("FINFOK", ingesloten[f]);
    }
  }
  else
  { // Afkeuren.
    sql = "UPDATE fin_factuur"
        + " SET fin_factuur_statuses_key = 1"
        + " 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)";
    for (f = 0 ; f < ingesloten.length; f++)
    {
      shared.trackaction("FINGNO", ingesloten[f]);
    }
  }
  oRs = Oracle.Execute(sql);
  result.success = true;
}

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