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

    File:               mld_forward_save.asp
    Description:        Doorsturen van een melding 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/save2db.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="mld.inc" -->

<%
protectRequest.validateToken();

var mld_key     = getQParamInt("mld_key");
var fwdType     = getQParamInt("fwdType");
var opmerk      = getFParam("opmerk", "");

var this_mld    = mld.func_enabled_melding(mld_key);
user.auth_required_or_abort(fwdType & 1 ? (this_mld.canForward || this_mld.canFixMelding) : this_mld.canForwardTeam);

var mld_melding = mld.mld_melding_info(mld_key);

var old_disc  = mld_melding.disc_key;
var new_disc  = getFParamInt("disc", old_disc);
var old_stdm  = mld_melding.stdm_key;
var new_stdm  = getFParamInt("stdm", old_stdm);
var has_new_stdm = fwdType == 1 && old_stdm != new_stdm;

var old_mld_disc  = mld_melding.mld_ins_discipline_key || -1;
var new_mld_disc  = getFParamInt("mld_ins_discipline", old_mld_disc);

var old_beh   = mld_melding.behandel_key  || -1;
var new_beh   = getFParamInt("sBehandel", old_beh);
var old_beh2  = mld_melding.behandel2_key || -1;
var new_beh2  = getFParamInt("sBehandel2", old_beh2);
var old_kpkey = mld_melding.kostenpl_key || -1;
var new_kpkey = getFParamInt("account", old_kpkey);

lcl.set_dialect(mld_melding.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");

var locatiekey = mld_melding.loc_key;
if (locatiekey < 0 && mld_melding.deladdress_key > 0)
{ // 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_key;
  oRs = Oracle.Execute(sql);
  if (!oRs.eof && oRs("alg_locatie_key").Value)
    locatiekey = oRs("alg_locatie_key").Value;
  oRs.Close();
}

// Zijn er objecten aan de melding gekoppeld? Zet de ins_deel_keys in een array.
var obj_key_arr = [];
for (var i=0; i<mld_melding.room_obj_arr.length; i++)
{
  obj_key_arr.push(mld_melding.room_obj_arr[i].ins_key);
}
var prs_bedrijf_key = mld.dienst_controle(new_stdm, locatiekey, (mld_melding.bttype == "B"? mld_melding.bld_key : null), mld_melding.room_key, obj_key_arr, mld_melding.perslid_key_voor);

var sql = "SELECT m.mld_melding_opmerking"
        + "     , m.mld_melding_spoed"
        + "     , m.mld_melding_einddatum"
        + "     , m.mld_melding_einddatum_std"
        + "     , m.mld_alg_locatie_key alg_locatie_key"
        + "     , COALESCE (aog.alg_gebouw_key, aog.alg_terreinsector_key) alg_gebouw_key"
        + "     , aog.alg_verdieping_key alg_verdieping_key"
        + "     , aog.alg_ruimte_key alg_ruimte_key"
        + "  FROM mld_melding m, mld_stdmelding sm, alg_v_allonrgoed_gegevens aog"
        + " WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key"
        + "   AND m.mld_melding_key = " + mld_key
        + "   AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)";

var oRs = Oracle.Execute(sql);
var mld_opm             = oRs("mld_melding_opmerking").Value || "";
var spoed               = oRs("mld_melding_spoed").Value;
var einddatum           = new Date(oRs("mld_melding_einddatum").Value);
var einddatum_std       = new Date(oRs("mld_melding_einddatum_std").Value);
var alg_ruimte_key      = oRs("alg_ruimte_key").Value || -1;
var alg_verdieping_key  = oRs("alg_verdieping_key").Value || -1;
var alg_gebouw_key      = oRs("alg_gebouw_key").Value || -1;
var alg_locatie_key     = oRs("alg_locatie_key").Value || -1;
oRs.Close();

var this_stdm = mld.mld_stdmeldinginfo(new_stdm);

// Alleen als stdm veranderd is
if (has_new_stdm)
{
  // Abort als required alg_level van new_stdm niet ingevuld is
  // Alleen als dit ingevuld kon worden in de oude melding (volgens de old_srtdisc)
  sql = "SELECT sd.ins_srtdiscipline_alg"
      + "  FROM mld_stdmelding sm"
      + "     , mld_discipline d"
      + "     , ins_srtdiscipline sd"
      + " WHERE sm.mld_ins_discipline_key = d.ins_discipline_key"
      + "   AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
      + "   AND sm.mld_stdmelding_key = " + old_stdm;

  var oRs = Oracle.Execute(sql);
  var ins_srtdiscipline_alg = oRs("ins_srtdiscipline_alg").Value || 0;
  if (ins_srtdiscipline_alg > 0)
  {
    switch (this_stdm.alg_onrgoed_niveau)
    {
      case "R": if (alg_ruimte_key     == -1 && ins_srtdiscipline_alg == 1) { abort_with_warning(L("lcl_mld_room_not_specified"));     }
                break;
      case "V": if (alg_verdieping_key == -1 && ins_srtdiscipline_alg <= 3) { abort_with_warning(L("lcl_mld_floor_not_specified"));    }
                break;
      case "G": if (alg_gebouw_key     == -1 && ins_srtdiscipline_alg <= 5) { abort_with_warning(L("lcl_mld_building_not_specified")); }
                break;
      case "L": if (alg_locatie_key    == -1 && ins_srtdiscipline_alg <= 7) { abort_with_warning(L("lcl_mld_location_not_specified")); }
                break;
    }
  }
  oRs.Close();
}

if (has_new_stdm)
{   // gewijzigde standaardmelding
    var sql = "SELECT sd.ins_srtdiscipline_ins       obj"
            + "     , sm.ins_srtinst_verplichtstatus req"
            + "     , sm.alg_onrgoed_obj_niveau      canhave_niveau"
            + "     , sm.mld_stdmelding_prsafdobj    canhave_prsafd"
            + "  FROM mld_stdmelding    sm"
            + "     , mld_discipline    md"
            + "     , ins_srtdiscipline sd"
            + " WHERE sm.mld_ins_discipline_key = md.ins_discipline_key"
            + "   AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
            + "   AND sm.mld_stdmelding_key = ";
    var oRs = Oracle.Execute(sql + new_stdm);
    var new_obj_soft_req = oRs("req").Value == 21;
    var new_obj_required = oRs("req").Value == 2;
    oRs.Close;
    var oRs = Oracle.Execute(sql + old_stdm);
    var old_obj_allowed = oRs("obj").Value == 1;
    var old_obj_niveau = oRs("canhave_niveau").Value || "";
    var old_obj_prsafd = oRs("canhave_prsafd").Value;
    oRs.Close();
    if (new_obj_required)
    {   // Het is nu verplicht een object te hebben waar de melding over gaat.
        if (old_obj_allowed && (old_obj_niveau != "" || old_obj_prsafd > 0))
        {   // De huidige melding kan objecten bevatten. Zijn er objecten bij de huidige melding geregistreerd?
            var sql = "SELECT COUNT(*) aantal"
                    + "  FROM mld_melding_object"
                    + " WHERE mld_melding_key = " + mld_key;
            var oRs = Oracle.Execute(sql);
            var old_has_obj = oRs("aantal").Value > 0;
            oRs.Close();
            if (!old_has_obj) // Geen objecten -> selecteer eerst object
                abort_with_warning(L("lcl_mld_forward_err_add_obj"));
        }
        else
        {
            abort_with_warning(L("lcl_mld_forward_err_add_cont"));
        }
    }
    else if (new_obj_soft_req)
    {
        // Heeft de oude situatie objecten.
        var sql = "SELECT COUNT(*) aantal"
                + "  FROM mld_melding_object"
                + " WHERE mld_melding_key = " + mld_key;
        var oRs = Oracle.Execute(sql);
        var old_has_obj = oRs("aantal").Value > 0;
        oRs.Close();

        // Als de oude situatie geen objecten heeft, hadden die wel ingevuld kunnen zijn.
        if (!old_has_obj && old_obj_allowed)
        {
            var sql = "SELECT COALESCE(m.mld_alg_onroerendgoed_keys, m.mld_alg_locatie_key) onrgoed_keys"
                    + "     , COALESCE(a.alg_type, 'L') alg_type"
                    + "  FROM mld_melding m"
                    + "     , alg_v_allonroerendgoed a"
                    + " WHERE m.mld_alg_onroerendgoed_keys = a.alg_onroerendgoed_keys(+)"
                    + "   AND mld_melding_key = " + mld_key;
            var oRs = Oracle.Execute(sql);
            var alg_key = oRs("onrgoed_keys").Value;
            var alg_niveau = oRs("alg_type").Value;
            oRs.Close();

            var sql = get_objecten_sql(alg_key, alg_niveau, user_key, null, old_stdm, {extracode: "UITV"});
            var oRs = Oracle.Execute(sql);
            var old_had_obj = !oRs.eof;
            oRs.Close();
            if (old_had_obj)  // geen objecten terwijl het wel mogelijk was -> selecteer eerst object
            {
                abort_with_warning(L("lcl_mld_forward_err_add_obj"));
            }
        }
        // else: Er zijn objecten bekend bij deze melding, of er hadden nooit objecten ingevuld kunnen worden
    }
}

var autoorder = has_new_stdm && this_stdm.autoorder == 1;

var result = { success: true, message: "", key: mld_key, autoorder: autoorder };
if ((fwdType == 1 && new_stdm     == old_stdm     && new_beh  == old_beh) ||
    (fwdType == 2 && new_mld_disc == old_mld_disc && new_beh2 == old_beh2))
{
  result.message = L("lcl_not_forwarded");
  result.success = false;
}
else
{
  result.toaster = L("lcl_forwarded");

  var fields = [];
  if (fwdType == 1)
  {
    fields =  [{ dbs: "mld_stdmelding_key", typ: "key", frm: "stdm", track: L("lcl_complain"), buildTrackText: buildStdmTrackText }];

    if (S("mld_forward_can_assign") && mld_melding.primaire_behandelaar != 0)
    {
      fields.push({ dbs: "mld_melding_behandelaar_key", typ: "key", frm: "sBehandel", foreign: "prs_perslid" });
    }
    else if (mld_melding.mld_status != 5)
    {
      fields.push({ dbs: "mld_melding_behandelaar_key", typ: "key", val: -1,          foreign: "prs_perslid" });
    }

    if (has_new_stdm && this_stdm.default_ins_disc_key && this_stdm.default_ins_disc_key > 0)
    {
      fields.push({ dbs: "mld_ins_discipline_key", typ: "key", val: this_stdm.default_ins_disc_key, track: L("mld_processing_group"), foreign: "mld_discipline" });
    }
  }
  else if (fwdType == 2)
  {
    fields =  [{ dbs: "mld_ins_discipline_key", typ: "key", frm: "mld_ins_discipline", track: true /*L("mld_processing_group")*/, foreign: "mld_discipline" }];

    if (S("mld_forward_can_assign"))
    {
      fields.push({ dbs: "mld_melding_behandelaar2_key", typ: "key", frm: "sBehandel2", foreign: "prs_perslid" });
    }
    else if (mld_melding.mld_status != 5)
    {
      fields.push({ dbs: "mld_melding_behandelaar2_key", typ: "key", val: -1,           foreign: "prs_perslid" });
    }
  }

  fields.push({ dbs: "mld_melding_tag_key", typ: "key", frm: "tag_key", track: L("mld_melding_tag_naam"), foreign: "mld_tag" });

  if (old_kpkey != new_kpkey)
    fields.push({ dbs: "prs_kostenplaats_key", typ: "key", val: new_kpkey, track: L("lcl_mld_inf_Kostenplaats"), foreign: "prs_kostenplaats" });

  if (S("mld_melding_flags") > 0)
    fields.push({ dbs: "mld_melding_flag",            typ: "number",   frm: "mldflag" /* notrack */ });

  // Altijd toevoegen als notitieveld.

  var note = getFParam("opmerk", "");
  var eigenMelding = user.isCollega(mld_melding.melder_key);
  var zichtbaarFE = getFParam("zichtbaarFE", (eigenMelding ? "on" : "off"));
  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: (zichtbaarFE=="on" ? 1 : 0) }
                  ];
    var noteIns = buildInsert("mld_melding_note", fields_note);
    Oracle.Execute(noteIns.sql);
  }

  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 (this_stdm.planbaar != 2)
  {
    // Als een melding wordt doorgestuurd naar een andere stdmelding die niet planbaar is, kan de einddatum aangepast worden door de trigger mld_t_mld_melding_B_IU.
    // Dan wordt dat niet getrackt. Hier controleren of de einddatum door de trigger is aangepast en desnoods tracking toevoegen.
    var sql = "SELECT m.mld_melding_einddatum"
            + "  FROM mld_melding m"
            + " WHERE m.mld_melding_key = " + mld_key;
    var oRs = Oracle.Execute(sql);
    var einddatum_new = new Date(oRs("mld_melding_einddatum").Value);
    oRs.Close();

    var enddateTracking = "";
    // Compare minutes, not (milli)seconds
    if (Math.floor(einddatum.getTime()/60000) != Math.floor(einddatum_new.getTime()/60000))
      enddateTracking = L("lcl_mld_enddate") + ": " + buildTrackText("datetime", einddatum, einddatum_new);
  }

  // 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);

  if (this_stdm.planbaar != 2)
  {
    var sql = "SELECT m.mld_melding_einddatum_std"
            + "  FROM mld_melding m"
            + " WHERE m.mld_melding_key = " + mld_key;
    var oRs = Oracle.Execute(sql);
    var einddatum_std_new = new Date(oRs("mld_melding_einddatum_std").Value);
    oRs.Close();

    // Compare minutes, not (milli)seconds
    if (Math.floor(einddatum_std.getTime()/60000) != Math.floor(einddatum_std_new.getTime()/60000))
    {
        sql = "UPDATE mld_melding"
            + "   SET mld_melding_einddatum = " + einddatum_std_new.toSQL(true)
            + " WHERE mld_melding_key = " + mld_key;
        Oracle.Execute(sql);
        enddateTracking = L("lcl_mld_enddate") + ": " + buildTrackText("datetime", einddatum, einddatum_std_new); // Vervangt mogelijke bestaande enddate-tracking
    }

    if (enddateTracking != "")
        mldUpd.trackarray.push(enddateTracking);
  }

  mld.keepFlexDocuments(mld_key, old_stdm, new_stdm);
  var flexdoctrack = mld.moveFlexStdmelding(mld_key, old_stdm, new_stdm);

  // Sql met de huidige kenmerken rekening houdend met de juiste vakgroep en melding.
  // Ander kenmerken worden door de functie saveFlexKenmerken verwijderd (FSN#18613)
  // Alleen de verplichte kenmerken werden getoond en opgeslagen.
  // Niet verplichte kenmerken die bij de oude melding ook voorkwamen blijven opgeslagen/bestaan.
  currentKenmerkenSQL = "SELECT vk.mld_kenmerk_key"
                      + "     , mld_kenmerkmelding_waarde"
                      + "     , vk.mld_kenmerk_toonbaar"
                      + "     , vk.fac_functie_key"
                      + "  FROM mld_kenmerkmelding km"
                      + "     , mld_kenmerk vk"
                      + "     , mld_melding m"
                      + "     , mld_stdmelding s"
                      + "     , mld_discipline d"
                      + " WHERE km.mld_kenmerk_key = vk.mld_kenmerk_key"
                      + "   AND km.mld_kenmerkmelding_verwijder IS NULL"
                      + "   AND km.mld_melding_key = m.mld_melding_key"
                      + "   AND m.mld_melding_key = " + mld_key
                      + "   AND s.mld_stdmelding_key = m.mld_stdmelding_key"
                      + "   AND s.mld_ins_discipline_key = d.ins_discipline_key"
                      + "   AND ((vk.mld_stdmelding_key IS NULL                    AND vk.mld_kenmerk_niveau = 'A')"
                      + "     OR (vk.mld_stdmelding_key = s.mld_stdmelding_key     AND vk.mld_kenmerk_niveau = 'S')"
                      + "     OR (vk.mld_stdmelding_key = s.mld_ins_discipline_key AND vk.mld_kenmerk_niveau = 'D')"
                      + "     OR (vk.mld_stdmelding_key = d.ins_srtdiscipline_key  AND vk.mld_kenmerk_niveau = 'T'))"
                      + "   AND vk.mld_kenmerk_key IN (SELECT mk.mld_kenmerk_key"
                      + "                              FROM mld_kenmerk mk"
                      + "                                 , mld_srtkenmerk sk"
                      + "                                 , mld_stdmelding s"
                      + "                                 , mld_discipline d"
                      + "                                 , (SELECT mko.mld_kenmerk_key"
                      + "                                         , mko.mld_srtkenmerk_key"
                      + "                                      FROM mld_kenmerkmelding mkm"
                      + "                                         , mld_kenmerk mko"
                      + "                                         , mld_stdmelding so"
                      + "                                         , mld_discipline do"
                      + "                                     WHERE mkm.mld_kenmerk_key = mko.mld_kenmerk_key"
                      + "                                       AND so.mld_ins_discipline_key = do.ins_discipline_key"
                      + "                                       AND ((mko.mld_stdmelding_key IS NULL                     AND mko.mld_kenmerk_niveau = 'A')"
                      + "                                         OR (mko.mld_stdmelding_key = so.mld_stdmelding_key     AND mko.mld_kenmerk_niveau = 'S')"
                      + "                                         OR (mko.mld_stdmelding_key = so.mld_ins_discipline_key AND mko.mld_kenmerk_niveau = 'D')"
                      + "                                         OR (mko.mld_stdmelding_key = do.ins_srtdiscipline_key  AND mko.mld_kenmerk_niveau = 'T'))"
                      + "                                       AND mkm.mld_melding_key = " + mld_key
                      + "                                       AND so.mld_stdmelding_key = " + old_stdm + ") kenm_old"
                      + "                             WHERE s.mld_ins_discipline_key = d.ins_discipline_key"
                      + "                               AND mk.mld_srtkenmerk_key = sk.mld_srtkenmerk_key"
                      + "                               AND sk.mld_srtkenmerk_kenmerktype NOT IN ('M')"
                      + "                               AND ((mk.mld_stdmelding_key IS NULL                    AND mk.mld_kenmerk_niveau = 'A')"
                      + "                                 OR (mk.mld_stdmelding_key = s.mld_stdmelding_key     AND mk.mld_kenmerk_niveau = 'S')"
                      + "                                 OR (mk.mld_stdmelding_key = s.mld_ins_discipline_key AND mk.mld_kenmerk_niveau = 'D')"
                      + "                                 OR (mk.mld_stdmelding_key = d.ins_srtdiscipline_key  AND mk.mld_kenmerk_niveau = 'T'))"
                      + "                               AND mk.mld_srtkenmerk_key = kenm_old.mld_srtkenmerk_key(+)"
                      + "                               AND s.mld_stdmelding_key = " + new_stdm
                      + "                               AND mk.mld_kenmerk_verwijder IS NULL)";

  allKenmerkenSQL     = "SELECT COALESCE (" + lcl.xsql("k.mld_kenmerk_omschrijving", "k.mld_kenmerk_key")
                      + "              ,  " + lcl.xsql("t.mld_srtkenmerk_omschrijving", "t.mld_srtkenmerk_key") + ") kenmerk_omschrijving"
                      + "     , t.mld_srtkenmerk_kenmerktype kenmerk_kenmerktype"
                      + "     , t.mld_srtkenmerk_systeem     kenmerk_systeem"
                      + "     , k.mld_kenmerk_toonbaar       kenmerk_readonly"
                      + "     , k.mld_kenmerk_uniek          kenmerk_uniek"
                      + "     , fac_kenmerkdomein_key"
                      + "  FROM mld_kenmerk k"
                      + "     , mld_srtkenmerk t"
                      + " WHERE k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
                      + "   AND k.mld_kenmerk_key = "; /* wordt in saveFlexkenmerken uitgebreid */

  var flextrack = [];
  if (this_mld.canFlexChange) // anders veel te riskant (FSN#38017)
  {
    var flextrack = saveFlexKenmerken(mld_key, { kenmerkTable: "mld_kenmerkmelding",
                                                 kenmerkParentKey : "mld_melding_key",
                                                 kenmerkWaarde: "mld_kenmerkmelding_waarde",
                                                 kenmerkKey: "mld_kenmerk_key",
                                                 kenmerkToonbaar: "mld_kenmerk_toonbaar",
                                                 currentKenmerkenSQL: currentKenmerkenSQL,
                                                 allKenmerkenSQL: allKenmerkenSQL,
                                                 requestQF: Request.Form,
                                                 isNew: false,
                                                 flexPath: "MLD/M",
                                                 tracking: true,
                                                 module: "MLD"
                                               });
  }

  if (mldUpd.trackarray.length || flexdoctrack.length || flextrack.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.concat(flexdoctrack).concat(flextrack).join("\n"));
  }

  // Als er child meldingen zijn, dan volgen het behandelteam en de behandelaar2 van de child die van de parent.
  // Eerst nagaan of beide velden zijn gewijzigd.
  var parentparams = {saveBehandelteam: old_mld_disc != new_mld_disc,
                      saveBehandelaar2: old_beh2 != new_beh2,
                      behandelteam_key: new_mld_disc,
                      behandelaar2_key: new_beh2
                     };

  // Nu de childmeldingen als het behandelteam en/of de behandelaar2 zijn gewijzigd.
  if (parentparams.saveBehandelteam || parentparams.saveBehandelaar2)
  {
    var child_arr = mld.getchildmeldingen(mld_key);
    mld.updatechildren(child_arr, parentparams);
  }

  // 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 (has_new_stdm && mld_melding.mld_status != 5)
  { // Zetten van de status op ingevoerd en afhandelen van de tracking.
    // De oude status kan 2, 3, en afhankelijk van discipline/setting
    // mld_disc_params_keten of mld_forward_if_active ook 4 of 7 zijn.
    if (old_disc != new_disc)
    {
      if (mld_melding.mld_status == 2)
      {
        // Status blijft "Ingevoerd(2)". Zetten van de status genereert geen tracking en notificaties. Daarom daar zelf voor zorgen.
        mld.trackmeldingforward(mld_key); // Zorgt voor "MLDFWD" tracking en daarme "MLD2BO" notificaties via mld.notifybackoffice.
      }
      else
      {
        // Status was "Geaccepteerd(4)" of "Uitgegeven(7)", kan alleen voorkomen als S("mld_forward_if_active") == 1, maar dat boeit ons hier niet
        // Melding niet terugzetten naar 2 (nieuw) als er al opdrachten zijn. Dat is te zot (en geeft problemen met de opdracht update trigger)
        var sql = "SELECT COUNT(mld_opdr_key) aantal"
                + "  FROM mld_opdr o"
                + " WHERE mld_melding_key = " + mld_key;
        var oRs = Oracle.Execute(sql);
        var nrOpdracht = oRs("aantal").Value;
        oRs.Close();

        if (nrOpdracht == 0)
            mld.setmeldingstatus(mld_key, 2); // Terug naar status "Ingevoerd(2)". Zorgt daarmee voor "MLDFWD" tracking en "MLD2BO" notificaties via mld.notifybackoffice.
      }
    }
    mld.nextworkflowstep(mld_key, -1); // Is de nieuwe een workflowstart?
  }

  // Submit additional tracking MLDBEH als behandelaar is aangepast.
  if (old_beh != new_beh)
    mld.trackbehandelaar(mld_key, new_beh);

  // Submit additional tracking MLDBHG als behandelteam is aangepast.
  if (old_mld_disc != new_mld_disc)
    mld.trackAndNotifyBehandelteam(mld_key, new_mld_disc);
  // Submit additional tracking MLDABH als team-behandelaar is aangepast.
  if (old_beh2 != new_beh2)
    mld.trackbehandelaar2(mld_key, new_beh2);
}

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