<%@ LANGUAGE = JavaScript %>
<% /*
     $Revision$
     $Id$

    File:               bez_edit_bezoekers_save.asp
    Description:        Sla de wijzigingen van formulier bez_edit_bezoekers.asp op
    Parameters:
    Context:            POST formulier vanuit bez_edit_bezoekers.asp
                        welke alleen vanuit het blokje onder een reservering wordt aangeroepen
    Note:               Eventueel worden ook parkeerplaatsen gereserveerd

*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="bez_edit_bezoekers_save.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/status.inc" -->
<%
protectRequest.validateToken();

var urole = getQParamSafe("urole");

var afspraak_key = getFParamInt("afspr_key", -1);
if (afspraak_key == -1)
  afspraak_key = getQParamInt("afspr_key", -1);
var bez_actie_key = getFParamInt("actie_key", -1);
var isRes = false;
if (afspraak_key == -1)
{
  isRes = true;
  var rsv_ruimte_key = getQParamInt("rsv_ruimte_key"); // dan moet deze er zijn
  sql = "SELECT a.bez_afspraak_key"
      + "  FROM bez_afspraak a"
      + " WHERE a.res_rsv_ruimte_key = " + rsv_ruimte_key;
  oRs = Oracle.Execute(sql);
  if (!oRs.eof)
    afspraak_key = oRs("bez_afspraak_key").value;
}
var this_bez = bez.func_enabled_afspraak(afspraak_key);
user.auth_required_or_abort(this_bez.canReadAny);

var beztrack = [];
var result = saveBezoekers(afspraak_key, rsv_ruimte_key, { urole: urole });
afspraak_key = result.afspr_key;

// Is de afspraak verwijderd
var appointmentisdeleted = false;
sql = "SELECT bez_afspraak_key"
    + "  FROM bez_afspraak"
    + " WHERE bez_afspraak_key = " + afspraak_key;
oRs = Oracle.Execute(sql);
if (oRs.eof)
{ // Afspraak is verwijderd
  appointmentisdeleted = true;
  bez.trackafspraakupdate(afspraak_key, L("lcl_bez_appdel") + "\n" + result.beztrack.join("\n"));
}
else
{
  if (S("res_appointment_action"))
    saveBezAction(afspraak_key, bez_actie_key);
  if (result.beztrack && result.beztrack.length > 0)
    bez.trackafspraakupdate(afspraak_key, L("lcl_bez_is_bezupdtrack").format(afspraak_key) + "\n" + result.beztrack.join("\n"));
}

// Als de afspraak van een reservering is verwijderd dan tracking van afspraak onder die reservering hangen (enigszins illegaal).
if (isRes && appointmentisdeleted)
{ // Afspraak van een reservering is verwijderd.
  sql = "SELECT sn.fac_srtnotificatie_key"
      + "  FROM fac_srtnotificatie sn"
      + " WHERE sn.fac_srtnotificatie_code LIKE 'RESUPD'";
  oRs = Oracle.Execute(sql);
  var snkeyRESUPD = oRs("fac_srtnotificatie_key").value;

  // Alle tracking die een omschrijving heeft kan direct omgezet worden
  sql = "UPDATE fac_tracking"
      + "   SET fac_srtnotificatie_key = " + snkeyRESUPD
      + "     , fac_tracking_refkey = " + rsv_ruimte_key
      + " WHERE fac_tracking_key IN"
      + "       (SELECT ft.fac_tracking_key"
      + "          FROM fac_tracking ft"
      + "             , fac_srtnotificatie sn"
      + "         WHERE ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
       + "          AND sn.fac_srtnotificatie_code LIKE 'BEZ%'"
       + "          AND ft.fac_tracking_oms IS NOT NULL"
       + "          AND fac_tracking_refkey = " + afspraak_key + ")";
  Oracle.Execute(sql);

  // Alle tracking die geen omschrijving heeft, de omschrijving vullen met standaard srtnotificatietext (fallback voor ongedefineerde teksten)
  sql = "SELECT ft.fac_tracking_key"
      + "     , sn.fac_srtnotificatie_code"
      + "  FROM fac_tracking ft"
      + "     , fac_srtnotificatie sn"
      + " WHERE ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
      + "   AND sn.fac_srtnotificatie_code LIKE 'BEZ%'"
      + "   AND ft.fac_tracking_oms IS NULL"
      + "   AND fac_tracking_refkey = " + afspraak_key;
  oRs = Oracle.Execute(sql);
  while (!oRs.eof)
  {
    sql = "UPDATE fac_tracking"
        + "   SET fac_srtnotificatie_key = " + snkeyRESUPD
        + "     , fac_tracking_refkey = " + rsv_ruimte_key
        + "     , fac_tracking_oms = " + safe.quoted_sql(status.getsrtnotificatietext(oRs("fac_srtnotificatie_code").value))
        + " WHERE fac_tracking_key = " + oRs("fac_tracking_key").value;
    Oracle.Execute(sql);
    oRs.MoveNext();
  }
}

// Klantspecifieke check functie (hookfunction) voor de invoer
var pResult = new HookResult();
if (!custfunc.bez_postsave(result.bezkeyArr, pResult))
{
  abort_with_warning(pResult.errmsg);
}

var closeParams = { afspraak_key: afspraak_key,
                    bezkeyArr: result.bezkeyArr, // alle
                    beznewkeyArr: result.beznewkeyArr, // de nieuwe
                    warning: result.warning,
                    success: true
                  }
Response.Write(JSON.stringify(closeParams));
%>
