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

    File:               bes_accept.asp
    Description:        Accepteren van een bestelaanvraag door de BO.
    Parameters:
         bes_key        Bestelaanvraag nummer (key)
    Note:               Het gaat hier om accepteren door de backoffice,
                        fiatteren is eventueel al geweest

*/ %>

<%
var JSON_Result = true;
%>

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

<%
/***** Get webform parameters *****/
var urole = getFParam("urole");

var bes_key_arr = getFParamIntArray("bes_key");

var result = {};
var tobeaccepted = 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.canAccept || this_bes.canAccept2 || this_bes.canAccept3 || this_bes.canAccept4 || this_bes.canAccept5)
  {
    ingesloten.push({ bes_key: bes_key_arr[i],
                      kosten: bes_bestelling.totaal - bes_bestelling.rfoBesKosten + bes_bestelling.rfoLevKosten,
                      approved: bes_bestelling.approved,
                      bestellimiet: bes_disc_info.disc_params_bestellimiet,
                      bestellimiet2: bes_disc_info.disc_params_bestellimiet2,
                      bestellimiet3: bes_disc_info.disc_params_bestellimiet3,
                      bestellimiet4: bes_disc_info.disc_params_bestellimiet4,
                      bestellimiet5: bes_disc_info.disc_params_bestellimiet5,
                      canAccept: this_bes.canAccept,
                      canAccept2: this_bes.canAccept2,
                      canAccept3: this_bes.canAccept3,
                      canAccept4: this_bes.canAccept4,
                      canAccept5: this_bes.canAccept5 }
                      );
    tobeaccepted++;
  }
}
user.anything_todo_or_abort(tobeaccepted > 0); // We klagen niet over enkele wel en enkele niet

for (var i = 0; i < ingesloten.length; i++)
{
  var bes_key = ingesloten[i].bes_key;
  var setnextstatus = false;

  if (ingesloten[i].canAccept && (S("bes_approval_all") == 1 || !ingesloten[i].canAccept2)) // Kan ik deze bestelling accepteren tot de eerste limiet? Als ik ook al tot de tweede limiet kan accepteren dan direct maar tot de tweede limiet (volgende if).
  {
    var finalapproval = (S("bes_approval_all") == 1 || ingesloten[i].kosten <= ingesloten[i].bestellimiet2 || ingesloten[i].approved > ingesloten[i].bestellimiet2);

    sql = "UPDATE bes_bestelling"
        + " SET bes_bestelling_approved = " + (ingesloten[i].kosten < ingesloten[i].bestellimiet2? ingesloten[i].kosten : ingesloten[i].bestellimiet2) // Gefiatteerd tot een bedrag van limiet1 (<=500 Euro)
        + " WHERE bes_bestelling_key = " + bes_key;
    oRs = Oracle.Execute(sql);

    if (!finalapproval)
    { // Tracking en alle tweede goedkeurders een notificatie sturen.
      bes.trackbestellingaccepteren(bes_key);
    }
    else
      // De bestelling is tot de bestellingkosten goedgekeurd. Verder goedkeuren hoeft niet.
      // De status van de bestelling mag (indien mogelijk) naar Geaccepteerd(4) of Besteld(5).
      setnextstatus = true;
    result.success = true;
  }
  if (ingesloten[i].canAccept2 && (S("bes_approval_all") == 1 || !ingesloten[i].canAccept3)) // Kan ik deze bestelling accepteren tot de tweede limiet? Als ik ook al tot de derde limiet kan accepteren dan direct maar tot de derde limiet (volgende if).
  {
    var finalapproval = (S("bes_approval_all") == 1 || ingesloten[i].kosten <= ingesloten[i].bestellimiet3 || ingesloten[i].approved > ingesloten[i].bestellimiet3);
    sql = "UPDATE bes_bestelling"
        + " SET bes_bestelling_approved = " + (ingesloten[i].kosten < ingesloten[i].bestellimiet3? ingesloten[i].kosten : ingesloten[i].bestellimiet3) // Gefiatteerd tot een bedrag van limiet2 (<=5000 Euro)
        + " WHERE bes_bestelling_key = " + bes_key;
    oRs = Oracle.Execute(sql);

    if (!finalapproval)
    { // Tracking en alle derde goedkeurders een notificatie sturen.
      bes.trackbestellingaccepteren(bes_key);
    }
    else
      // De bestelling is tot de bestellingkosten goedgekeurd. Verder goedkeuren hoeft niet.
      // De status van de bestelling mag (indien mogelijk) naar Geaccepteerd(4) of Besteld(5).
      setnextstatus = true;
    result.success = true;
  }
  if (ingesloten[i].canAccept3 && (S("bes_approval_all") == 1 || !ingesloten[i].canAccept4)) // Kan ik deze bestelling accepteren tot de derde limiet? Als ik ook al tot de vierde limiet kan accepteren dan direct maar tot de vierde limiet (volgende if).
  {
    var finalapproval = (S("bes_approval_all") == 1 || ingesloten[i].kosten <= ingesloten[i].bestellimiet4 || ingesloten[i].approved > ingesloten[i].bestellimiet4);
    sql = "UPDATE bes_bestelling"
        + " SET bes_bestelling_approved = " + (ingesloten[i].kosten < ingesloten[i].bestellimiet4? ingesloten[i].kosten : ingesloten[i].bestellimiet4) // Gefiatteerd tot een bedrag van limiet3 (<=125000 Euro)
        + " WHERE bes_bestelling_key = " + bes_key;
    oRs = Oracle.Execute(sql);

    if (!finalapproval)
    { // Tracking en alle vierde goedkeurders een notificatie sturen.
      bes.trackbestellingaccepteren(bes_key);
    }
    else
      // De bestelling is tot de bestellingkosten goedgekeurd. Verder goedkeuren hoeft niet.
      // De status van de bestelling mag (indien mogelijk) naar Geaccepteerd(4) of Besteld(5).
      setnextstatus = true;
    result.success = true;
  }
  if (ingesloten[i].canAccept4 && (S("bes_approval_all") == 1 || !ingesloten[i].canAccept5)) // Kan ik deze bestelling accepteren tot de derde limiet? Als ik ook al tot de vierde limiet kan accepteren dan direct maar tot de vierde limiet (volgende if).
  {
    var finalapproval = (S("bes_approval_all") == 1 || ingesloten[i].kosten <= ingesloten[i].bestellimiet5 || ingesloten[i].approved > ingesloten[i].bestellimiet5);
    sql = "UPDATE bes_bestelling"
        + " SET bes_bestelling_approved = " + (ingesloten[i].kosten < ingesloten[i].bestellimiet5? ingesloten[i].kosten : ingesloten[i].bestellimiet5) // Gefiatteerd tot een bedrag van limiet4 (<=1000000 Euro)
        + " WHERE bes_bestelling_key = " + bes_key;
    oRs = Oracle.Execute(sql);

    if (!finalapproval)
    { // Tracking en alle vijfde goedkeurders een notificatie sturen.
      bes.trackbestellingaccepteren(bes_key);
    }
    else
      // De bestelling is tot de bestellingkosten goedgekeurd. Verder goedkeuren hoeft niet.
      // De status van de bestelling mag (indien mogelijk) naar Geaccepteerd(4) of Besteld(5).
      setnextstatus = true;
    result.success = true;
  }
  else if (ingesloten[i].canAccept5) // Kan ik deze bestelling volledig accepteren en geaccepteerd/besteld maken?
  {
    sql = "UPDATE bes_bestelling"
        + " SET bes_bestelling_approved = " + ingesloten[i].kosten // Gefiatteerd boven bedrag van limiet5 (>1000000 Euro) voor het bedrag van de bestellingkosten.
        + " WHERE bes_bestelling_key = " + bes_key;
    oRs = Oracle.Execute(sql);

    // De status van de opdracht mag (indien mogelijk) naar Ter fiattering(0) of Uitgegeven(5).
    setnextstatus = true;
    result.success = true;
  }

  if (setnextstatus)
  { // Nu naar status 4 (Geaccepteerd) of opdrachten aanmaken en naar status 5 (Besteld).
    bes.setbestellingstatus(bes_key, 4); // Geaccepteerd BO

    if (bes_disc_info.disc_params_auto_order == "1")
      bes.makeOrders(user_key, bes_key);

    result.message = tobeaccepted + " " + (tobeaccepted == 1 ? L("lcl_bes_accepted1") : L("lcl_bes_accepted"));
  }
}

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