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

     File:  bez_check_in.asp
     Note:  De multi-variant wordt alleen gebruikt als S("vis_allow_check_all") == 1
*/ %>

<%
var JSON_Result = true;
%>

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

<%
protectRequest.validateToken();

var bez_key_arr = getFParamIntArray("bez_key");
var	undo_check_in = S("vis_allow_uncheck") && (getFParamInt("undo_check_in", 0) == 1);
var message = "";
var checkInDone = [];
var badges = [];
var autoprint = [];
var tobeapproved = 0;

var sql = "SELECT distinct bez_afspraak_key"
        + "  FROM bez_bezoekers"
        + " WHERE bez_bezoekers_key " + (bez_key_arr.length > 0? " IN (" + bez_key_arr.join(",") + ")" : " = -1");
var oRs = Oracle.Execute(sql);
while (!oRs.eof)
{
    var afspr_key = oRs("bez_afspraak_key").value;
    var this_bez = bez.func_enabled_afspraak(afspr_key);
    user.auth_required_or_abort(this_bez.canCheckInOut);
    oRs.MoveNext();
}
oRs.Close();

for (i = 0 ; i < bez_key_arr.length; i++)
{
  if (undo_check_in)
		var bezoekers_done = " TO_DATE(NULL)";
	else
		var bezoekers_done = " SYSDATE";

  // Voorkom wijzigingen aan toekomstige afspraken (UWVA#15416)
  sql = "SELECT bez_afspraak_datum"
      + "     , b.bez_afspraak_key"
      + "     , b.bez_afspraak_naam"
      + "     , bez_bezoekers_pasnr"
      + "     , bez_actie_flags"
      + "     , a.alg_locatie_key"
      + "     , a.alg_onrgoed_keys"
      + "  FROM bez_afspraak a, bez_actie ba, bez_bezoekers b"
      + " WHERE a.bez_afspraak_key = b.bez_afspraak_key"
      + "   AND a.bez_actie_key = ba.bez_actie_key(+)"
      + "   AND TRUNC(SYSDATE) >= TRUNC(bez_afspraak_datum) - " + S("vis_future_checkin")
      + (undo_check_in? "   AND bez_bezoekers_out IS NULL" : "")
      + "   AND b.bez_bezoekers_key = " + bez_key_arr[i];

  oRs_A = Oracle.Execute(sql);
  if (!oRs_A.eof)
  { // afspraak is vandaag of eerder, dan mag het
    var afspr_key = oRs_A("bez_afspraak_key").value;
    var bezoeker = oRs_A("bez_afspraak_naam").value;
    var flags = oRs_A("bez_actie_flags").value||0;
    autoprint[i] = !undo_check_in
                     && (S("vis_badgeprint_enable")&1==1) // autoprint
                     && ((flags&2)==2 || (S("vis_badgeprint_enable")&4)==0) // dit is autobadge of niet 'alleen-voor-autobadge'

    if (!undo_check_in &&
        S("vis_bo_uses_badgenrs") == 1 &&
        (flags & 2) && // auto-badge
        oRs_A("bez_bezoekers_pasnr").Value == null)
    {
      var loc_key = oRs_A("alg_locatie_key").Value;
      var onr_key = oRs_A("alg_onrgoed_keys").Value||-1;
      var seq_name = "ALG_LOCATIE_KEY_" + loc_key + "_BADGE"; // Badge nummering per locatie is de default.
      if ((S("vis_badgeprint_enable")&8) == 1) //badgenummering per gebouw
      {
        if (onr_key > 0)
        {
          sql = "SELECT alg_gebouw_key"
              + "  FROM alg_v_onroerendgoed"
              + " WHERE alg_onroerendgoed_keys = " + onr_key;
          var oRs_G = Oracle.Execute(sql);
          if (!oRs_G.eof)
            seq_name = "ALG_GEBOUW_" + oRs_G("alg_gebouw_key").Value + "_BADGE";
          oRs_G.Close();
        }
      }
      var today = new Date();
      var sql = "BEGIN"
              + " fac.sequence_nextval("+safe.quoted_sql(seq_name)+", 1, "+ today.endToSQL() + "); "
              + "END;";
      Oracle.Execute(sql);
      var sql = "SELECT fac_sequence_lastval"
              + "  FROM fac_sequence"
              + " WHERE fac_sequence_name = " + safe.quoted_sql(seq_name);
      var oRs_S = Oracle.Execute(sql);
      var cnt = oRs_S("fac_sequence_lastval").Value;
      oRs_S.Close();

        badges[i] = ("000000000" + String(cnt)).slice(-S("vis_autobadgelength"));
        var letters = S("vis_autobadgeletters"); // Bijvoorbeeld "ABCDEF"
        if (letters.length)
        {
            // Elke dag volgende letter
            var letter = letters.substr(((new Date).getTime() /1000/60/60/24) % (letters.length), 1);
            badges[i]= letter + badges[i];
        }
    }
    sql = "UPDATE bez_bezoekers"
        + "   SET bez_bezoekers_done = " + bezoekers_done
        + "     , bez_bezoekers_pasnr = COALESCE(bez_bezoekers_pasnr, " + safe.quoted_sql(badges[i]) + ")"
        + " WHERE bez_bezoekers_key = " + bez_key_arr[i];
    oRs = Oracle.Execute(sql);
    // Undo ook afzonderlijk tracken!
    // We tracken uiteindelijk bij de bezoeker tegenwoordig
    if (undo_check_in)
      shared.trackaction("BEZUNI", bez_key_arr[i], L("lcl_bez_is_in_1") + bezoeker + L("lcl_bez_is_in_3") ); // undo checkin
    else
      shared.trackaction("BEZDON", bez_key_arr[i], L("lcl_bez_is_in_1") + bezoeker + L("lcl_bez_is_in_2") ); // checkin

    checkInDone[i] = true;
    tobeapproved++;

    // Customer hook
    pResult = new HookResult();
    custfunc.bez_checkdone(bez_key_arr[i], pResult);
    if (pResult.errmsg != null)
    {
      message = pResult.errmsg;
    }
  }
  else
  { // toekomstige afspraak of is al weg
    checkInDone[i] = false;
  }
  oRs_A.Close();
}
if (tobeapproved == 0) // enkele wel en enkele niet klagen we niet over
  message = L("lcl_bez_no_checkin");

var result = {bez_key_arr: bez_key_arr,
              undo_check_in: undo_check_in,
              checkInDone: checkInDone,
              badges: badges,
              autoprint: autoprint,
              message: message};
Response.Write(JSON.stringify(result));
%>
