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

     Accepteer een melding door FO (alleen direct na invoer) of BO (vanuit lijst of expliciet)
     Zet de huidige user (die kennelijk dus een behandelaar kan zijn) direct als de behandelaar.
     Deze eerste behandelaar wordt vooralsnog niet expliciet getrackt, dat wordt geimpliceerd
     door het accepteren

     De vakgroep (discipline) setting MLD_DISC_PARAMS_BONOTIFY geeft aan of de notificatie moeten worden verstuurd.
     MLD_DISC_PARAMS_BONOTIFY: 0=niet, 1=bof, 2=bo3, 3=bo3 (aanmaak nieuwe melding) en dan bof (accepteren melding).

     Sturing notificaties MLD2BO en MLD2B3 puur op basis van mld_disc_params_bonotify (Niet op de geconfigureerde WEB_MLDBO3 en WEB_MLDBOF rechten).
     Notificaties: MLD2BO: Er is een nieuwe melding XXX.
                   MLD2B3: Voor melding XXX is uw acceptatie vereist.
                        | notificatie 1      | notificatie 2             |
     BONOTIFY           | (status Nieuw (2)) | (status Geaccepteerd (4)) | Te configureren WEB_MLDBO3 en WEB_MLDBOF rechten
     0 (niet)           |       X            |         X                 |
     1 (bof)            |       BOF(MLD2BO)  |         X                 | Alleen WEB_MLDBOF rechten zijn actief (niemand heeft WEB_MLDBO3 rechten).
     2 (bo3)            |       BO3(MLD2B3)  |         X                 | Zowel de WEB_MLDBO3 als WEB_MLDBOF rechten zijn actief.
     3 (bo3 en dan bof) |       BO3(MLD2B3)  |         BOF(MLD2BO)       | Zowel de WEB_MLDBO3 als WEB_MLDBOF rechten zijn actief.

*/ %>

<%
var JSON_Result = true;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="mld.inc" -->
<!-- #include file="mld_edit_note.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<%
protectRequest.validateToken();
var mld_key_arr = getFParamIntArray("mld_key");
var multi = getFParamInt("multi", 0) == 1;
var maybeDouble = getFParamInt("maybeDouble", 0) == 1;
var urole = getFParam("urole", "bo");

var opmerk = getFParam("opmerk", "");
var has_opmerk = hasFParam("opmerk");
var behandelaar_key = getFParamInt("sBehandel", user_key);

// Geen autfunction bepaald. Je komt bij FIN niet binnen met een bepaalde rol (urole).
// Alleen PRSreadlevel en PRSwritelevel van belang want fac_functie_min_level = 7 (lezen en schrijven organisatie)
var authparamsMLDBOF = user.checkAutorisation("WEB_MLDBOF", true);
var authparamsMLDBO3 = user.checkAutorisation("WEB_MLDBO3", true);
var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true);

var result = {};
var toberejected = 0;
var ingesloten = [];
// Bepaal de meldingen in de selectie die
// ook echt geaccepteerd kunnen of mogen worden.
for (var i = 0; i < mld_key_arr.length; i++)
{
  var this_mld = mld.func_enabled_melding(mld_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke melding
  var mld_info = mld.mld_melding_info(mld_key_arr[i]);
  var mld_std = mld.mld_stdmeldinginfo(mld_info.stdm);

  var maybeDouble = (!mld_info.parent_key && (mld_std.doublecheck == 2 || mld_std.doublecheck == 3));
  // Geen child melding en bulk actie mag de maybeDouble meldingen niet op geaccepteerd zetten
  if (this_mld.canAccept && !mld_info.parent_key && !(multi && maybeDouble))
  {
    // Als je niet accepteert met MLDBO3 rechten en je hebt niet de BO3 notificatie aanstaan dan de behandelaar opslaan.
    // BO notificatie accept 0=niet, 1=bof, 2=bo3, 3=bo3 (aanmaak nieuwe melding) en dan bof (accepteren melding)
    ingesloten.push({mld_key: mld_key_arr[i],
                     saveBehandelaar: !this_mld.canWrite("WEB_MLDBO3") && mld_info.bonotify < 2 // Behandelaar alleen in situatie 1 voor bonotify 0 (niet) en 1 (bof) tracken.
                    });
    toberejected++;
  }
}
user.anything_todo_or_abort(toberejected > 0); // We klagen niet over enkele wel en enkele niet

for (var i = 0; i < ingesloten.length; i++)
{
  sql = "SELECT mm.mld_melding_opmerking"
      + "  FROM mld_melding mm"
      + " WHERE mld_melding_key = " + ingesloten[i].mld_key;
  oRs = Oracle.Execute(sql);
  var mld_opm = oRs("mld_melding_opmerking").value||"";
  oRs.Close();

  var setLines = [];
  if (ingesloten[i].saveBehandelaar)
    setLines.push("mld_melding_behandelaar_key = " + behandelaar_key);
  if (has_opmerk)
  {
    if (S("mld_note_mode") == 2)
    {
       note_save(ingesloten[i].mld_key,
                 opmerk,
                 {     isFE: false,
                    zichtFE: true /* altijd */
                });
    }
    else
    {
        setLines.push("mld_melding_opmerking = " + safe.quoted_sql(mld_opm + "\n" + opmerk));
    }
  }
  if (setLines.length > 0)
    var behsql = "UPDATE mld_melding SET " + setLines.join(", ")
               + " WHERE mld_melding_key = " + ingesloten[i].mld_key;

  if (authparamsMLDBOF || authparamsMLDBO3)
  {
    // Zetten van de status op geaccepteerd en afhandelen van de tracking.
    mld.setmeldingstatus(ingesloten[i].mld_key, 4);
    // Eventueel de behandelaar of opmerking opslaan.
    if (setLines.length > 0)
      Oracle.Execute(behsql);
    // Geen message "De melding PXXX/Y is geaccepteerd" meer geven (AADS#20339)
  }
  else if (authparamsMLDFOF)
  {
    mld.setmeldingstatus(ingesloten[i].mld_key, 0);
    // Eventueel de behandelaar of opmerking opslaan.
    if (setLines.length > 0)
      Oracle.Execute(behsql);
  }

  // Alleen als behandelaar is opgeslagen dit tracken.
  if (ingesloten[i].saveBehandelaar)
    // Als behandelaar_key==user_key dan wel tracking maar geen notificatie
    mld.trackbehandelaar(ingesloten[i].mld_key, behandelaar_key, behandelaar_key == user_key);
}

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