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

    File:        res_bez_oproep.asp
    Description: Een bezoeker oproepen
    Parameters:
    Context:
    Note:
*/ %>
<%
JSON_Result = true;
%>

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

<%
protectRequest.validateToken();

var bez_key = getFParamInt("bez_key", -1);
var opnieuw = getFParamInt("opnieuw", -1);

if (bez_key < 0)
{   // Eerstvolgende bezoeker zoeken
    var res_key = getFParamInt("res_key"); // dan moet die er zijn
    var sql = "SELECT bez_bezoekers_key"
            + "  FROM res_rsv_ruimte rrr,"
            + "       bez_afspraak a,"
            + "       bez_bezoekers bb"
            + " WHERE res_reservering_key = " + res_key
            + "   AND rrr.res_rsv_ruimte_key = a.res_rsv_ruimte_key"
            + "   AND a.bez_afspraak_key = bb.bez_afspraak_key"
            //+ "   AND TRUNC(res_rsv_ruimte_van) = TRUNC(SYSDATE)" // Meerdaagse POOL-reservering is wel obscuur trouwens
            + "   AND bb.bez_bezoekers_done IS NOT NULL" // Moet binnen zijn
            + "   AND bb.bez_bezoekers_oproep IS NULL" // Nog niet opgeroepen
            + "   AND bb.bez_bezoekers_out IS NULL"  // En nog zeker niet weg
            + " ORDER BY bb.bez_bezoekers_done"; // Eerste eerst
    var oRs = Oracle.Execute(sql);
    if (oRs.Eof)
        abort_with_warning(L("lcl_res_bez_novisitor")); // Geen geschikte bezoeker
    var bez_key = oRs("bez_bezoekers_key").Value;
    oRs.Close();
}

// Nu heeft bez_key een waarde. Onder welke (pool)-reservering valt hij?
var sql = "SELECT bez_afspraak_naam,"
        + "       bez_bezoekers_pasnr,"
        + "       bez_bezoekers_done,"
        + "       bez_bezoekers_oproep,"
        + "       bez_bezoekers_out,"
        + "       rrr.res_reservering_key,"
        + "       res_reservering_ispool,"
        +         lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')
        + "  FROM res_ruimte rr,"
        + "       res_ruimte_opstelling rro,"
        + "       res_rsv_ruimte rrr,"
        + "       res_reservering r,"
        + "       bez_afspraak a,"
        + "       bez_bezoekers bb"
        + " WHERE bez_bezoekers_key = " + bez_key
        + "   AND rr.res_ruimte_key = rro.res_ruimte_key"
        + "   AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
        + "   AND rrr.res_rsv_ruimte_key = a.res_rsv_ruimte_key"
        + "   AND rrr.res_reservering_key = r.res_reservering_key"
        + "   AND a.bez_afspraak_key = bb.bez_afspraak_key";
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
    shared.record_not_found();
if (oRs("bez_bezoekers_out").Value != null)
    abort_with_warning(L("lcl_res_bez_hasleft").format(toTimeString(oRs("bez_bezoekers_out").Value)));
if (oRs("bez_bezoekers_oproep").Value != null && opnieuw == -1)
    abort_with_warning(L("lcl_res_bez_wascalled").format(toTimeString(oRs("bez_bezoekers_oproep").Value)));

var res_key = oRs("res_reservering_key").Value;
var ispool = oRs("res_reservering_ispool").Value == 1;
var ruimtenr = oRs("res_ruimte_nr").Value; // Bij ispool is dit de ruimte waaronder de bezoeker
                                           // oorspronkelijk is aangemeld.
                                           // Dat passen we straks nog aan
var bez_naam = oRs("bez_afspraak_naam").Value;
var bez_badge = oRs("bez_bezoekers_pasnr").Value||"";
var aangemeld = new Date(oRs("bez_bezoekers_done").Value);
var wachttijd = Math.floor((new Date() - aangemeld) / 1000 / 60);
oRs.Close()

if (ispool)
{   // Nu uitzoeken achter welke balie *ik* zit
    var sql = "SELECT rrr.res_rsv_ruimte_key"
            + "     , a.bez_afspraak_key"
            + "     , " + lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')
            + "  FROM res_ruimte rr"
            + "     , res_ruimte_opstelling rro"
            + "     , res_v_aanwezigrsv_ruimte rrr"
            + "     , bez_afspraak a"
            + " WHERE rrr.res_rsv_ruimte_key = a.res_rsv_ruimte_key(+)"
            + "   AND rr.res_ruimte_key = rro.res_ruimte_key"
            + "   AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
            + "   AND rrr.res_reservering_key = " + res_key
            + "   AND rrr.res_rsv_ruimte_host_key = " + user_key;
    var oRs = Oracle.Execute(sql);
    // Kan niet falen: als ik niet achter een balie zit had ik de lijst al nooit gezien

    var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
    var afs_key = oRs("bez_afspraak_key").Value;
    var ruimtenr = oRs("res_ruimte_nr").Value;
    oRs.Close()
    if (!afs_key)
        afs_key = createAfspraak(rsv_ruimte_key);
}

// Alleen bij pool reserveringen verplaatsen we de bezoeker naar de
// afspraak bij de deelreservering voor de balie waar ik zit
sql = "UPDATE bez_bezoekers bb"
    + "   SET bez_bezoekers_oproep = SYSDATE"
    + (ispool?"     , bez_afspraak_key = " + afs_key:"")
    + " WHERE bez_bezoekers_key = " + bez_key
    + "   AND bb.bez_bezoekers_done IS NOT NULL" // Moet binnen zijn
    + "   AND bb.bez_bezoekers_oproep " + (opnieuw == -1 ? "IS NULL" : "IS NOT NULL") // Moet binnen zijn
    + "   AND bb.bez_bezoekers_out IS NULL" // Maar nog niet weg
Oracle.Execute(sql);

var result = { success: true,
               message: L("lcl_res_bez_coming").format(bez_naam, bez_badge, ruimtenr, toDateTimeString(aangemeld), wachttijd) };

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