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

     File:               opdr_accept_save.asp
     Description:        Accepteren van een opdracht (door een uitvoerder)
     Parameters:
        opdr_key         Opdrachtnummers array (keys)
*/ %>

<%
var JSON_Result = true;

var opdr_key_arr  = getFParamIntArray("opdr_key", []);
var note          = getFParam("note", ""); // Bij multi-accept is de notitie nog niet opgeslagen
var opdr_note_key = getFParamInt("note_key", -1); // Bij single accept is de notitie al opgeslagen
if (opdr_key_arr.length)
    var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": opdr_key_arr[0] };
%>

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

<%
/***** Get webform parameters *****/
var result = { message: "", success: false };
var tobeaccepted = 0;
var ingesloten = [];
// Bepaal de opdrachten in de selectie die
// ook echt geaccepteerd 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 mag ik zoal op deze opdracht
  if (this_opdr.canAccept)
  {
    ingesloten.push(opdr_key_arr[i]);
    tobeaccepted++;
  }
}
user.auth_required_or_abort(tobeaccepted > 0); // We klagen niet over enkele wel en enkele niet
/***** End get webform parameters *****/

for (var i = 0; i < ingesloten.length; i++)
{
  // Blijkbaar mogen we Accepteren
  var mld_opdr = mld.mld_opdr_info(ingesloten[i]);

  // Als de behandelaar leeg is en een user van het INTERNE bedrijf meldt de opdracht af, dan de user_key als behandelaar (prs_perslid_key) zetten.
  var fields = [];
  if (mld_opdr.uitv_type == "B" && mld_opdr.uitv_intern && mld_opdr.contactpers_key == -1)
  {
    fields.push({ dbs: "prs_perslid_key",            typ: "key",     val: user_key,   track: L("lcl_mld_behandelaar"),     foreign: "prs_perslid" });
  }
  else if (mld_opdr.uitv_type == "B" && !mld_opdr.uitv_intern && mld_opdr.contactpersuitv_key == null)
  { // Is de user een extern contactpersoon van het uitvoerende externe bedrijf? Dan deze invullen als contactpersoon.
    var sql = "SELECT prs_contactpersoon_key"
            + "  FROM prs_contactpersoon"
            + " WHERE prs_contactpersoon_verwijder IS NULL"
            + "   AND prs_bedrijf_key = " + mld_opdr.uitvoerende_key
            + "   AND prs_perslid_key = " + user_key;
    var oRs = Oracle.Execute(sql);
    if (!oRs.eof)
      // User is contactpersoon van het uitvoerende externe bedrijf.
      fields.push({ dbs: "prs_contactpersoon_key", typ: "key", val: oRs("prs_contactpersoon_key").Value, track: L("lcl_contact_pers"), foreign: "prs_contactpersoon" });
    oRs.Close();
  }

  if (fields.length > 0)
  {
    var mldUpd = buildTrackingUpdate("mld_opdr", "mld_opdr_key = " + ingesloten[i], fields);
    if (mldUpd && mldUpd.trackarray.length)
    {
      Oracle.Execute(mldUpd.sql);
      var ins_srtdiscipline_prefix = mld.mld_prefix(mld_opdr.mld_key);
      var formattedID = ins_srtdiscipline_prefix + mld_opdr.mld_key + "/" + mld_opdr.volgnr;
      mld.trackopdrachtupdate(ingesloten[i], L("lcl_ord_is_ordupdtrack").format(formattedID) + "\n" + mldUpd.trackarray.join("\n"));
    }
  }

  lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");

  if (ingesloten.length > 1 && note != "")
  {
    var fields =  [ { dbs: "mld_opdr_key",               typ: "key",     val: ingesloten[i] },
                    { dbs: "prs_perslid_key",            typ: "key",     val: user_key },
                    { dbs: "mld_opdr_note_omschrijving", typ: "varchar", frm: "note", len:4000 }
                  ]
    var noteIns = buildInsert("mld_opdr_note", fields);
    Oracle.Execute(noteIns.sql);
  }

  // Zetten van de status en afhandelen van de tracking van het fiatteren (approve).
  mld.setopdrachtstatus(ingesloten[i], 8, null, opdr_note_key); // Geaccepteerd

  // Ik kan hier zelf bepalen of de actieve opdracht onderbroken moet worden (hltactive).
  // Als de opdrachten niet sequentieel uitgevoerd moeten worden, dan wordt er ook geen actieve opdracht gevonden.
  if (mld_opdr.contactpers_key < 0)
    var activeopdr = mld.getactiveopdracht(ingesloten[i], user_key, mld_opdr.uitvoerende_key); // Haal de actieve opdracht op.
  else
    var activeopdr = mld.getactiveopdracht(ingesloten[i]); // Haal de actieve opdracht op.
  var activeopdr_key = activeopdr.opdr_key;
  var activeopdracht = activeopdr.opdracht;
  var hltactive = (activeopdr_key > 0);

  var onHold = ((mld_opdr.typeopdr_sequential & 4) == 4); // Staat "Onderbroken starten" aan?
  if (hltactive)
  { // Er is 1 actieve opdracht die onderbroken moet worden. Dit doen we door een "ORDHLT" tracking op die actieve opdracht te doen.
    Oracle.Execute("UPDATE mld_opdr SET mld_opdr_halted = 1 WHERE mld_opdr_key = " + activeopdr.opdr_key);
    shared.trackaction("ORDHLT", activeopdr.opdr_key);
  }
  else if (onHold)
  { // Als "Onderbroken starten" aan staat dan deze opdracht op "On Hold" zetten. Dan geen "ORDHLT" tracking genereren.
    Oracle.Execute("UPDATE mld_opdr SET mld_opdr_halted = 1 WHERE mld_opdr_key = " + ingesloten[i]);
  }
}

// Geen message "De opdracht PXXX/Y is geaccepteerd" meer geven (AADS#20339)
result.success = true;

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