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

     File:               mld_instemmen.asp
     Description:        Het -helemaal aan het begin- instemmen met de indiening van een melding
                         Wie er kan/moet instemmen hangt af van mld_melding_conceptstatus, als die 0 is,
                         dan is volledig ingestemd en verloopt de melding verder als een melding die geen
                         instemming vereiste. Een (nog) niet-ingestemde melding "bestaat niet" voor het systeem
                         en is dus overal uitgesloten van de meldingen, zie het als een kladje.

                         Wie moet/kan er instemmen?
                         conceptatus = 1: de budgethouder van de kostenplaats
                         conceptatus = 2: de objectbeheerder van het gekoppelde object
                         conceptatus = 4: de afdelingsverantwoordelijke van melding-en-dan-persoon
                         conceptatus = 8: de verantwoordelijke van de melder (melding-voor)

                         Dit wordt eenduidig bepaald door primitieve mld.getinstemmer()
                         Als er geen instemmer bepaald kan(kon) worden wordt(werd) de conceptstatus
                         gekipt. Dan kom je hier dus ook niet.

                         Als escape mag iemand met MLDMSU ook instemmen, tegen onverhoopt vastgelopen meldingen
                         De vraag is nog wel even hoe zo iemand hier terechtkomt (ergens showInstem=true)


     Parameters:         mld_melding_key

     Context:            Niet aannemelijk dat deze als multi-actie wordt gebruikt, maar dat kostte niks extra

  */ %>
<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
var mld_key_arr = getFParamIntArray("mld_key");
var toaster = getFParamInt("toaster", 0) == 1;

var ingesloten = [];
var warnings = [];
// Bepaal de meldingen in de selectie die ook echt ingestemd 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
  if (this_mld.canInstem)
  {
      ingesloten.push(mld_key_arr[i]);
  }
}

user.anything_todo_or_abort(ingesloten.length);


for (var i = 0; i < ingesloten.length; i++)
{
  var mld_melding = mld.mld_melding_info(ingesloten[i]); // Globale variabele met alle mld_melding informatie
  lcl.set_dialect(mld_melding.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
  var stdm_info = mld.mld_stdmeldinginfo(mld_melding.stdm_key);
  var formattedID = stdm_info.ins_srtdiscipline_prefix + ingesloten[i];

  var instemsql = "UPDATE mld_melding SET mld_melding_conceptstatus = 0 WHERE mld_melding_key = {0}".format(ingesloten[i]);
  Oracle.Execute(instemsql);
  mld.trackmeldingupdate(ingesloten[i], L("lcl_mld_is_mldinstemtrack").format(formattedID, (new Perslid(user_key)).naam()));

  mld.setmeldingstatus(ingesloten[i], 2);       // dilemma: nu komt de MLDNEW tracking op naam van de instemmer, niet fout, maar anders dan je dacht?

  // Gequeuede berichten/notificaties en portalberichten van de instemmer verwijderen.
  var clrsql = "BEGIN fac.clrnotifications ('MLD2CO', " + ingesloten[i] + "); END;";
  Oracle.Execute(clrsql);

  // Nu een reeks acties die normaliter ook bij de MLDNEW gebeuren, dat gebeurt helaas niet intrinsiek
  // met het zetten van de status. Inspiratie uit mld.nextworkflowstep en mld_edit_melding_save.
  // Niet al deze stappen zullen in combinatie voorkomen, maar dat maakt niet uit, dat hoeven we hier
  // niet uit te zoeken.
  mld.notifybehandelteam(ingesloten[i], 999);   // die 999 is dummy maar wel > 0...
  mld.addautoorder(ingesloten[i]);              // behandel eventuele auto-order configuratie

  // Alleen als we hiermee met een concept-workflowroot-melding hebben ingestemd,
  // moeten we deze workflow alsnog aftrappen. Latere workflow-stappen worden immers
  // door afmelden/afwijzen getriggerd, niet door aanmaken.
  // Dit is een potentiele wfroot als het niet al in een wf zit, beetje ongerijmd maar wel waar.
  if (mld_melding.noWorkflow)
  {
    mld.nextworkflowstep(ingesloten[i], -1);      // Dan mag nu een workflow alsnog starten (die was in proc nog tegengehouden ivm concept)
  }
}

var result = { key: ingesloten.join(","), success: ingesloten.length, warning: warnings.join("\n") };
if (toaster && ingesloten.length == 1)
  result.toaster = L("lcl_mld_ingestemd").format(formattedID);
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>
