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

    File:        bez_delete.asp
    Description: Verwijder een enkele bezoeker of een hele afspraak
    Parameters:  bez_key (en level = "B")
                 afspr_key (en level = "A")
                 level: "B", "A"
    Context:     Vanuit show-scherm en of vanuit overzicht
*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();
var level = getFParam('level');
var message = "";
var afspr_key_arr = {};
var bez_info = [];
var afspr_info = [];

if (level == "B")
{ // Bezoekers verwijderen.
  var bez_key_arr = getFParamIntArray("bez_key");
  for (var i = 0; i < bez_key_arr.length; i++)
  {
    var bez_key = bez_key_arr[i];
    var sql = "SELECT b.bez_afspraak_key,"
            + "       b.bez_afspraak_naam,"
            + "       b.bez_afspraak_bedrijf,"
            + "       a.res_rsv_ruimte_key"
            + "  FROM bez_bezoekers b"
            + "     , bez_afspraak a"
            + " WHERE b.bez_afspraak_key = a.bez_afspraak_key"
            + "   AND b.bez_bezoekers_key = " + bez_key;
    oRs = Oracle.Execute(sql);
    if (oRs.Eof)
    {
      bez_key_arr.splice(i, 1);
      i--;
      oRs.Close();
      continue;
    }
    var afspr_key = oRs("bez_afspraak_key").value;
    if (!(afspr_key in afspr_key_arr))
    {
      var this_bez = bez.func_enabled_afspraak(afspr_key);
      afspr_key_arr[afspr_key] = this_bez.canDelete;
    }
    if (!afspr_key_arr[afspr_key])
    {
      bez_key_arr.splice(i, 1);
      i--;
    }
    else
    {
      bez_info[bez_key] = { naam      : oRs("bez_afspraak_naam").Value || "",
                            bedrijf   : oRs("bez_afspraak_bedrijf").Value || "",
                            afspr_key : afspr_key
                          };

      if (afspr_info[afspr_key])
        afspr_info[afspr_key].bez_count++;
      else
        afspr_info[afspr_key] = { ruimte_key : oRs("res_rsv_ruimte_key").Value,
                                  tracking   : [],
                                  bez_count  : 1
                                };
    }
    oRs.Close();
  }
  user.anything_todo_or_abort(bez_key_arr.length);
  for (var j = 0; j < bez_key_arr.length; j++)
  {
    var bez_key   = bez_key_arr[j];
    var afspr_key = bez_info[bez_key].afspr_key;

    var msg = bez.deleteBezoekers(bez_key, false);

    afspr_info[afspr_key].bez_count--;

    if (!message) message = msg; // 1x is voldoende

    if (!msg) // Bezoeker verwijderd
    {
      afspr_info[afspr_key].tracking.push(L("lcl_bez_is_bezdel") + ": " + bez_info[bez_key].naam + "/" + bez_info[bez_key].bedrijf)

      if (afspr_info[afspr_key].bez_count == 0)
      { // Alle bezoekers zijn verwijderd.

        // De functie cleanAfspraak(afsp_key, moveTracking) zorgt ervoor dat de afspraak wordt verwijderd als er geen bezoekers meer onder hangen.
        // Bij het verwijderen van de afspraak c.q. bezoeker worden de notificaties en tracking van de afspraak c.q. bezoeker ook verwijderd.
        // Als moveTracking == true aan de functie cleanAfspraak wordt meegegeven en de afspraak is van een reservering,
        // dan wordt voordat de afspraak wordt verwijderd de tracking van die afspraak onder die reservering gehangen (enigszins illegaal).
        // Dit gebeurt voor het verwijderen van de afspraak want anders is de tracking al verwijderd.

        if (!bez.cleanAfspraak(afspr_key, true)) // Resultaat cleanAfspraak is true if afspraak == deleted
          bez.trackafspraakupdate(afspr_key, L("lcl_bez_is_bezupdtrack").format(afspr_key) + "\n" + afspr_info[afspr_key].tracking.join("\n"));
        else
        {
          // Het aanmaken van tracking van een afspraak die net is verwijderd is onzinnig/niet nodig. Zeker als alle tracking daarvan net is verwijderd.
          //bez.trackafspraakupdate(afspr_key, L("lcl_bez_appdel") + "\n" + afspr_info[afspr_key].tracking.join("\n"));
          // De functie moveAfspraakTracking wordt al aangeroepen door cleanAfspraak. de functie moveAfspraakTracking bepaald zelf wel de ruimte_key als deze niet wordt meegegeven.
          //if (afspr_info[afspr_key].ruimte_key != null)
          //  bez.moveAfspraakTracking(afspr_key, afspr_info[afspr_key].ruimte_key);
        }
      }
    }
  }
}
else if (level == "A")
{ // Afspraak verwijderen.
  var afspr_key = getFParamInt("afspr_key");
  var this_bez = bez.func_enabled_afspraak(afspr_key);
  user.auth_required_or_abort(this_bez.canDelete);
  message = bez.deleteAfspraak(afspr_key);
}

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