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

     File:               opdr_handlerchange.asp
     Description:        Past de behandelaar en/of uitvoerder van een array van opdrachten aan.
     Parameters:
         prs_key         De nieuwe behandelaar van de opdracht(en).
         uitv_key        De nieuwe uitvoerder van de opdracht(en).
         opdr_key        Array van opdracht keys van opdrachten waarvan de behandelaar moet worden aangepast.
     Context:
     Note:

*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
var uitv_key = getFParamInt("uitv_key"); // Uitvoerder destination.
var prs_key = getFParamInt("prs_key"); // Behandelaar destination.
var uitv_type_dest = getFParam("uitv_type"); // Type uitvoerder destination.
var opdr_key_arr = getFParamIntArray("opdr_key_arr");

var tobechanged = 0;
var ingesloten = [];
var notmoved = [];
// Bepaal de opdrachten in de selectie waarvan ook echt de behandelaar aangepast kan of mag worden.
for (var i = 0; i < opdr_key_arr.length; i++)
{
  var this_opdr = mld.func_enabled_opdracht(opdr_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke opdracht
  var mld_opdr = this_opdr.mld_opdr;

  var canSelection = true;
  var uitv_type_src = "PI";
  if (mld_opdr.uitv_type == "B")
  {
    if (mld_opdr.uitv_intern)
      var uitv_type_src = "BI";
    else
    {
      var uitv_type_src = "BE"; // Kan niet voorkomen.
      canSelection = false;
    }
  }

  // Kan de beheerder bij de interne persoon/het interne bedrijf ofwel kan de beheerder bij de uitvoerder voor desbetreffende disipline? Dit checken.
  // Als de beheerder niet is ingevuld is, dan hoef ik het niet te checken.
  if (prs_key > 0)
  {
    var sql = "SELECT prs_perslid_key"
            + "  FROM fac_v_webgebruiker f"
            + "     , fac_functie ff"
            + " WHERE f.fac_functie_key = ff.fac_functie_key"
            + "   AND ins_discipline_key = " + mld_opdr.opdr_disc_key  // Discipline opdracht.
            + "   AND (fac_functie_code = 'WEB_MLDBOF'"
            + "     OR fac_functie_code = 'WEB_MLDBO3'"
            + (uitv_type_dest == "BI"
              ? "     OR fac_functie_code = 'WEB_ORDBO2'"  // Alleen bij interne bedrijven zie je ook personen met WEB_ORDBO2 rechten.
              : "")
            + "     OR fac_functie_code = 'WEB_ORDBOF')"
            + "   AND f.fac_gebruiker_prs_level_write < 9"
            + "   AND f.fac_gebruiker_alg_level_write < 9"
            + "   AND prs_perslid_key = " + prs_key  // Beheerder opdracht.
    oRs = Oracle.Execute(sql);
    canSelection = !oRs.eof;
    oRs.close();
  }

  if (this_opdr.canChange && canSelection)
  {
    ingesloten.push({ opdr_key: opdr_key_arr[i],
                      mld_key: mld_opdr.mld_key,
                      volgnr: mld_opdr.volgnr,
                      srtdiscbes: mld_opdr.srtdiscbes
                    });
    tobechanged++;
  }
  else
    notmoved.push(opdr_key_arr[i]);
}
// Altijd doorgaan en resultaat teruggeven. Ook als er geen enkele opdracht wordt verplaatst.
//user.anything_todo_or_abort(tobechanged > 0); // We klagen niet over enkele wel en enkele niet.

// Opdrachttype van de laatst gecontroleerde opdracht is prima.
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");

for (var i = 0; i < ingesloten.length; i++)
{ // Zetten van de uitvoerder en/of beheerder plus het afhandelen van de tracking voor elke opdracht.
  if (uitv_type_dest == "BI")
    var fields = [{ dbs: "prs_perslid_key",      typ: "key", val: prs_key,  track: L("lcl_mld_behandelaar"), foreign: "prs_perslid" },
                  { dbs: "mld_uitvoerende_keys", typ: "key", val: uitv_key, track: ingesloten[i].srtdiscbes? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"), foreign: "mld_uitvoerende" }];
  else if (uitv_type_dest == "PI")
    var fields = [{ dbs: "mld_uitvoerende_keys", typ: "key", val: uitv_key, track: ingesloten[i].srtdiscbes? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"), foreign: "mld_uitvoerende" }];


  var mldUpd = buildTrackingUpdate("mld_opdr", "mld_opdr_key = " + ingesloten[i].opdr_key, fields);

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

var result = { message: "", notmoved: notmoved.join(","), success: true };
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>
