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

    File:               bes_approve.asp
    Description:        Fiatteren van een bestelling.
    Parameters:
        bes_key         Bestellingnummer
    Note:               Het gaat hier om fiateren door de kostenplaats(groep)verantwoordelijke
                        De backoffice kan hierna eventueel ook nog moeten accepteren
*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
var bes_key_arr = getFParamIntArray("bes_key");

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 < bes_key_arr.length; i++)
{
  var bes_bestelling = bes.bestelling_info(bes_key_arr[i]); // Globale variabele met alle bes_bestelling informatie
  var bes_disc_info = bes.disc_info(bes_bestelling.dis_key); // alle discipline informatie
  var this_bes = bes.func_enabled_bestelling(bes_bestelling);
  if (this_bes.canApprove)
  {
    ingesloten.push({ bes_key: bes_key_arr[i],
                      totaal: bes_bestelling.totaal,
                      rfoBesKosten: bes_bestelling.rfoBesKosten,
                      rfoLevKosten: bes_bestelling.rfoLevKosten,
                      fiatteur_key: bes_bestelling.fiatteur_key, // LET OP: De huidige fiatteur wordt opgehaald (Ook als de user_key een vervanger is).
                      dis_key: bes_bestelling.dis_key,
                      perslid_key_voor: bes_bestelling.perslid_key_voor,
                      disc_params_bestellimiet: bes_disc_info.disc_params_bestellimiet,
                      disc_params_auto_order: bes_disc_info.disc_params_auto_order
                    });
    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 sql = "UPDATE bes_bestelling"
          + "   SET bes_bestelling_fiat_user = " + user_key // als we vervanger zijn wordt *onze* naam geregistrerd
          + " WHERE bes_bestelling_key = " + ingesloten[i].bes_key;
  Oracle.Execute(sql);

  var totaal = ingesloten[i].totaal - ingesloten[i].rfoBesKosten + ingesloten[i].rfoLevKosten;
  // als het valt binnen onze limiet (of eigenlijk: degene die nu moet fiatteren als we vervanger zijn) dan zijn we klaar
  // TODO in de volgende versie (zie docu PF) meerlaags fiattering met prs.getfiatteur() vgl opdr_approve.asp
  if (!budget.exceeds_profiel(totaal, ingesloten[i].fiatteur_key, ingesloten[i].dis_key))
  {
      bes.setbestellingstatus(ingesloten[i].bes_key, 3); // helemaal Gefiatteerd
      if (ingesloten[i].totaal <= ingesloten[i].disc_params_bestellimiet)
      {
          bes.setbestellingstatus(ingesloten[i].bes_key, 4); // Geaccepteerd door BO
          if (ingesloten[i].disc_params_auto_order == "1") // direct opdracht aanmaken
          {
              bes.makeOrders(user_key, ingesloten[i].bes_key);  //  opdracht aanmaken en status naar besteld (5)
          }
      }
  }
  else // (verder/hogerop) fiatteren
  {
      // Nog wel even tracken
      shared.trackaction("BESFIT", ingesloten[i].bes_key);

      // vervolgens naar kostenplaatsgroep fiatteur sturen
      // Fiatteringsproces moet gevolgd worden op de naam van de "voor wie" (bestelling voor)
      // Als bes_disc_params_for_others niet is gezet zijn perslid_key en perslid_key_voor identiek
      // Haal de kostenplaatsgroep verantwoordelijke/fiatteur op. De kolom b.bes_bestelling_fiat_user is gevuld met de user_key).
      sql = "SELECT prs.getkpverantwoordelijke (b.prs_kostenplaats_key, 1, COALESCE (b.bes_bestelling_fiat_user, -1)) kpg_fiatteur_key"
          + "  FROM bes_bestelling b"
          + " WHERE b.bes_bestelling_key = " + ingesloten[i].bes_key;
      var oRs = Oracle.Execute(sql);
      var nextapprover_key = oRs("kpg_fiatteur_key").Value;
      if (nextapprover_key == -1 || budget.exceeds_profiel(totaal, nextapprover_key, ingesloten[i].dis_key))
      { // Deze bestelling overschrijdt het mandaat van de budgethouder (kostenplaatsgroep verantwoordelijke/fiatteur) van de opgegeven kostenplaats en/of de budgethouder is onbekend.
        result.message = L("lcl_bes_exceed_limit");
      }
      else
      {
        result.message = bes.sendNeedApprovalNotification(ingesloten[i].bes_key, nextapprover_key);
      }
      oRs.close();
  }
  result.success = true;
}

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

