<%@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/kenmerk_common.inc" -->
<!-- #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 = getFParamSafe("urole", "bo");
var saveDates = getFParamInt("saveDates", 0) == 1;

var behandelaar_key  = getFParamInt("sBehandel", user_key);

var mld_ins_discipline_key = getFParamInt("mld_ins_discipline", -1);
var behandelaar2_key = getFParamInt("sBehandel2", -1);

var opmerk = getFParam("opmerk", "");

// 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 ingesloten = [];
var reqStatusEmptyMelding = [];
var this_mld;
var mld_info;
var mld_std;
// Bepaal de meldingen in de selectie die
// ook echt geaccepteerd kunnen of mogen worden.
for (var i = 0; i < mld_key_arr.length; i++)
{
  this_mld = mld.func_enabled_melding(mld_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke melding
  mld_info = mld.mld_melding_info(mld_key_arr[i]);
  mld_std  = mld.mld_stdmeldinginfo(mld_info.stdm_key);

  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))
  {
    // Zijn er nog kenmerken of objecten die nu wel verplicht zijn?
    reqStatusEmptyMelding = mld.getReqStatusEmptyMelding(reqStatusEmptyMelding, mld_key_arr[i], 4); // Melding status "In behandeling(4)"

    // 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 && mld_info.primaire_behandelaar != 0 &&       // Behandelaar alleen in situatie 1 voor bonotify 0 (niet) en 1 (bof) tracken.
                                            ((hasFParam("sBehandel") && (mld_info.behandel_key || -1) != behandelaar_key)
                                              || (this_mld.canVakgBOFwrite && !hasFParam("sBehandel") && (mld_info.behandel_key || -1) == -1)),  // Bij accepteren van meldingen van vakgroepen met behandelteams: onzichtbaar onaangeroerd laten of vullen met de Acceptator (indien canVakgBOFwrite)
                      saveBehandelaar2: !this_mld.canWrite("WEB_MLDBO3") && mld_info.bonotify < 2 &&
                                            hasFParam("sBehandel2") && (mld_info.behandel2_key || -1) != behandelaar2_key,
                      saveBehandelteam: hasFParam("mld_ins_discipline") && (mld_info.mld_ins_discipline_key || -1) != mld_ins_discipline_key
                    });
  }
}
user.anything_todo_or_abort(!reqStatusEmptyMelding.length, reqStatusEmptyMelding.join("<br />"));
user.anything_todo_or_abort(ingesloten.length > 0); // We klagen niet over enkele wel en enkele niet

var datefields = [];
if (saveDates && mld_key_arr.length == 1 && this_mld.canWriteDatums)
{ // De startdatum ophalen die opgeslagen moet worden.
  var params_startdate = { disc_with_startdatum: mld_std.startdatum };
  var startdate_info = mld.getstartdatesave(ingesloten[0].mld_key, params_startdate);
  var startdate = startdate_info.startdate;
  datefields.push(startdate_info.startfield);

  if (mld_std.show_actiedatum && hasFParam("actiondate"))
  { // Actiedatum was invulbaar en is meegegeven.
    datefields.push({ dbs: "mld_melding_actiedatum", typ: "datetime", frm: "actiondate", track: L("lcl_mld_actiondate") });
  }

  // enddate_std wordt m.b.v. trigger en database functie mld.geteinddatum(startdate, stdm_key, prio, geb_key) berekend.
  // mld_melding_acceptdatum_std wordt ook in de trigger bepaald

  // De einddatum is de meegegeven einddatum (zoals mogelijk bepaald en aangepast), maar als die niet wordt meegegeven is het
  // gewoon enddate_std en dat regelt de trigger wel, dus DAN MOET IK HEM NIET MEEGEVEN
  // De tijd van de einddatum wordt nu altijd opgeslagen onafhankelijk of de tijd getoond wordt.
  if (hasFParam("enddate"))
  {
    // Als gevolg van het verschil in tijdstip tussen meldingscherm openen en melding opslaan
    // de einddatum corrigeren als deze voor de startdatum is komen te liggen.
    var enddate = getFParamDate("enddate", new Date);
    if (enddate < startdate)
      enddate = startdate;
    datefields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: enddate, track: mld_std.planbaar == 2? false: L("lcl_mld_enddate") });
  }
}

for (var i = 0; i < ingesloten.length; i++)
{
  var params  = { saveBehandelaar: ingesloten[i].saveBehandelaar,
                  saveBehandelaar2: ingesloten[i].saveBehandelaar2,
                  saveBehandelteam: ingesloten[i].saveBehandelteam,
                  remark: opmerk,
                  handler: behandelaar_key,
                  processor: behandelaar2_key,
                  treatmentteam: mld_ins_discipline_key,
                  canFOwrite: authparamsMLDFOF,
                  canBOwrite: authparamsMLDBOF || authparamsMLDBO3,
                  datefields: datefields
                }
  mld.acceptmelding(ingesloten[i].mld_key, params);

  // Notificeren van default mld_kenmerkblokmelding behandelteam en behandelaar.
  var sql = "SELECT kbm.mld_kenmerkblokmelding_key"
          + "     , kbm.ins_discipline_key"
          + "     , kbm.prs_perslid_key"
          + "     , CASE"
          + "       WHEN kbm.mld_kenmerkblokmelding_afmelddatum IS NOT NULL THEN 1"
          + "       ELSE 0"
          + "       END complete"
          + "  FROM mld_kenmerkblokmelding kbm"
          + " WHERE kbm.mld_melding_key = " + ingesloten[i].mld_key;
  var oRs = Oracle.Execute(sql);
  while (!oRs.eof)
  {
    var disc_key = oRs("ins_discipline_key").Value;
    var prs_key = oRs("prs_perslid_key").Value;
    var complete = oRs("complete").Value == 1;
    if (!complete && prs_key > 0)
    {
      // Niet tracken, want dat verwart met de behandeling van de hoofdmeldingen.
      // De behandeling van het blok wordt toegewezen, niet de behandeling van de melding immmers.
      mld.notifybehandelaar2(ingesloten[i].mld_key, prs_key); // Notificatie behandelaar blok.
    }
    else if (!complete && disc_key > 0)
    {
      // Wel MLDBHG notificatie, geen MLDBHG tracking want dat zou verwarren met het hoofdbehandelteam.
      mld.notifybehandelteam(ingesloten[i].mld_key, disc_key, true); // Notificatie behandelteam blok.
    }
    oRs.MoveNext();
  }
  oRs.Close();
}

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