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

    File:               mld_forward_save.asp
    Description:        Doorsturen van een opdracht naar een andere vakgroep
    Parameters:         mld_melding_key

    Context:
    Note:               Merk op dat je ook naar vakgroepen mag sturen waar je normaal
                        geen rechten voor hebt!
                        Als S("mld_forward_all") == 0 dan alleen naar dezelfde srtdiscipline
*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();

var mld_key = getQParamInt('mld_key');
var stdm_key = getFParamInt("stdm");
var opmerk = getFParam("opmerk", "");
var this_mld = mld.func_enabled_melding(mld_key);
user.auth_required_or_abort(this_mld.canForward || this_mld.canFixMelding);

var mld_melding = mld.mld_melding_info(mld_key);
lcl.set_dialect(mld_melding.srtdisc, "MLD_SRTDISCIPLINE_KEY");

var locatiekey = mld_melding.loc_key;
if (locatiekey < 0 && mld_melding.deladdress)
{ // Als we geen locatiekey hebben maar wel een afleveradres, kunnen we mogelijk ook een locatiekey bepalen
  var sql = "SELECT alg_locatie_key"
          + "  FROM mld_adres"
          + " WHERE mld_adres_key = " + mld_melding.deladdress;
  oRs = Oracle.Execute(sql);
  if (!oRs.eof && oRs("alg_locatie_key").Value)
    locatiekey = oRs("alg_locatie_key").Value;
  oRs.Close();
}
var prs_bedrijf_key = mld.dienst_controle(stdm_key, locatiekey, mld_melding.bld_key, mld_melding.room_key, mld_melding.perslid_key_voor);

var sql = "SELECT mm.mld_stdmelding_key"
        + "     , mm.mld_melding_opmerking"
        + "     , mm.mld_melding_spoed"
        + "     , msm.mld_ins_discipline_key"
        + "  FROM mld_melding mm, mld_stdmelding msm"
        + " WHERE mm.mld_stdmelding_key = msm.mld_stdmelding_key"
        + "   AND mld_melding_key = " + mld_key;
var oRs = Oracle.Execute(sql);
var old_stdm = oRs("mld_stdmelding_key").Value;
var old_disc = oRs("mld_ins_discipline_key").Value;
var mld_opm = oRs("mld_melding_opmerking").Value || "";
var spoed = oRs("mld_melding_spoed").Value;
oRs.Close();

var this_stdm = mld.mld_stdmeldinginfo(stdm_key);
var new_disc = this_stdm.ins_discipline_key;
var autoorder = (this_stdm.autoorder? 1 : 0) == 1;
var save_notitie = false;

var result = {success: true, message: "", key: mld_key, autoorder: autoorder};

if (stdm_key == old_stdm)
{
  result.message = L("lcl_not_forwarded");
}
else
{
  result.message = L("lcl_forwarded");
  var fields =  [ { dbs: "mld_stdmelding_key",          typ: "key",     frm: "stdm",   track: L("lcl_complain"),          foreign: "mld_stdmelding" },
                  { dbs: "mld_melding_behandelaar_key", typ: "key",     val: -1,       track: L("lcl_mld_behandelaar"),   foreign: "prs_perslid" }
                ];
  if ((S("mld_forward_opm_flags") & 2) == 2)
  { // Achteraan notitieveld.
    save_notitie = true;

    var note = getFParam("opmerk", "");
    if (note != "")
    {
      var fields_note =  [ { dbs: "mld_melding_key",               typ: "key",     val: mld_key },
                           { dbs: "prs_perslid_key",               typ: "key",     val: user_key },
                           { dbs: "mld_melding_note_omschrijving", typ: "varchar", frm: "opmerk",   len: 4000 },
                           { dbs: "mld_melding_note_flag",         typ: "number",  val: 0 }
                    ];
      var noteIns = buildInsert("mld_melding_note", fields_note);
      Oracle.Execute(noteIns.sql);
    }
  }
  else
  { // Achteraan opmerkingsveld.
    var new_opm = mld_opm + "\n" + opmerk;
    fields.push({ dbs: "mld_melding_opmerking",       typ: "varchar", val: new_opm,  track: L("lcl_mld_inf_Opmerking"), len: 4000 });
  }

  if (!this_stdm.prioriteiten[spoed])
    fields.push({ dbs: "mld_melding_spoed",  typ: "key",    val: 3,      track: L("lcl_mld_urg"), foreign: mld.getpriotext });
  var mldUpd = buildTrackingUpdate("mld_melding", " mld_melding_key = " + mld_key, fields);
  Oracle.Execute(mldUpd.sql);
  if (mldUpd.trackarray.length)
  {
    var formattedID = this_stdm.ins_srtdiscipline_prefix + mld_key + " (" + this_stdm.discipline_omschrijving + "/" + this_stdm.stdmelding_omschrijving + ")";
    mld.trackmeldingupdate(mld_key, L("lcl_mld_is_mldupdtrack").format(formattedID) + "\n" + mldUpd.trackarray.join("\n"));
  }

  // Eventuele (gewijzigde) objecten zijn nu ook opgeslagen.
  // Nu kan de definitieve mld_melding.mld_melding_einddatum_std en mld_melding.mld_melding_t_uitvoertijd bepaald en gezet worden.
  mld.finishmeldingiu(mld_key);

  mld.keepFlexDocuments(mld_key, old_stdm, stdm_key);

  // mldUpd.oldjsvals bevat helaas niet old_disc dus die hebben we al eerder bepaald.
  // Met status=5 (afgemeld) zitten we in de uitzonderlijke situatie dat iemand achteraf
  // nog adminstratief de melding corrigeerd. Dan blijven we wel van de status af.
  if (mld_melding.mld_status != 5)
  { // Zetten van de status op ingevoerd en afhandelen van de tracking.
    if (old_disc != new_disc)
    {
      mld.setmeldingstatus(mld_key, 3); // Evt naar 'ingezien'
      mld.setmeldingstatus(mld_key, 2); // Terug naar 'ingevoerd'
    }
    mld.nextworkflowstep(mld_key, -1); // Is de nieuwe een workflowstart?
  }
}

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