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

    File:        pda/bez_list.asp
    Description: Toont de actuele en aanstaande bezoekers van de plaats waar ik ben
                 Bedoeld voor rondlopende receptiemw of BHV-ers. BEZBOF vereist
    Parameters:
    Context:     Vanuit mobile device short url
    Note:
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->

<%
    var qrc = getQParamInt("qrc", 0) != 0;

    var locatie_key = getQParamInt("locatie_key", user.alg_locatie_key({withcurrent:true})); // Locatie
    var gebouw_key = getQParamInt("gebouw_key", user.alg_gebouw_key({withcurrent:true})); // Gebouw, kan -1 zijn, dan niet gebruiken
    var verdieping_key = getQParamInt("verdieping_key", user.alg_verdieping_key({withcurrent:true}));
    var offset = getQParamInt("offset", 0);
    var days = getQParamInt("days", 1);

    authparams = user.checkAutorisation("WEB_BEZBOF");

    sql = "SELECT a.bez_afspraak_key"
        + "     , a.bez_afspraak_datum"
        + "     , b.bez_afspraak_naam"
        + "     , b.bez_afspraak_bedrijf"
        + "     , a.bez_afspraak_gastheer"
        + "     , a.bez_afspraak_ruimte"
        + "     , a.bez_afspraak_eind"
        + "     , a.bez_afspraak_opmerking"
        + "     , b.bez_bezoekers_done"
        + "     , b.bez_bezoekers_out "
        + "     , b.bez_bezoekers_key"
        + "     , b.bez_bezoekers_pasnr"
        + "     , b.bez_bezoekers_opmerking"
        + "     , b.bez_bezoekers_flag"
        + "     , " + lcl.xsqla("t.bez_actie_omschrijving", "t.bez_actie_key")
        + "     , (SELECT LISTAGG(" + "bez_kenmerk_omschrijving || ':'|| CHR(160) || "  // kenmerken van de bezoeker
                                    + " CASE WHEN k.bez_kenmerk_kenmerktype IN ('R','r','S')"
                                    + "      THEN flx.getdomeinwaarde(k.fac_kenmerkdomein_key, kw.bez_kenmerkwaarde_waarde)"
                                    + "      WHEN (   k.bez_kenmerk_kenmerktype = 'N'"
                                    + "           AND k.bez_kenmerk_lengte = 1"
                                    + "           AND k.bez_kenmerk_nmin = 0"
                                    + "           AND k.bez_kenmerk_nmax = 1"
                                    + "           AND (k.bez_kenmerk_dec = 0 OR k.bez_kenmerk_dec IS NULL)"
                                    + "           )"
                                    + "      THEN DECODE (kw.bez_kenmerkwaarde_waarde, "
                                    + "                   0, "+safe.qL("lcl_check_0")+", "
                                    + "                   1, "+safe.qL("lcl_check_1")+", "
                                    + "                   kw.bez_kenmerkwaarde_waarde)"
                                    + "      ELSE kw.bez_kenmerkwaarde_waarde"
                                    + "  END"
                              + ", CHR(13)"
            + "                  )"
            + "           WITHIN GROUP (ORDER BY k.bez_kenmerk_volgnr)"
            + "      FROM bez_kenmerk k, bez_kenmerkwaarde kw"
            + "     WHERE kw.bez_bezoekers_key = b.bez_bezoekers_key"
            + "       AND k.bez_kenmerk_key = kw.bez_kenmerk_key"
            + "       AND BITAND(k.bez_kenmerk_inlijst, 1) = 1"
            + "       AND k.bez_kenmerk_verwijder IS NULL"
            + "       AND kw.bez_kenmerkwaarde_verwijder IS NULL"
            + "   ) flex"
        + " FROM bez_afspraak a"
        + ", bez_bezoekers b"
        + ", bez_actie t"
        + ", alg_locatie l"
        + ", alg_v_allonrgoed_gegevens v "
        + " WHERE a.bez_afspraak_key = b.bez_afspraak_key"
        + " AND t.bez_actie_key(+) = a.bez_actie_key"
        + " AND a.alg_onrgoed_keys = v.alg_onroerendgoed_keys(+)"
        + " AND a.alg_locatie_key = l.alg_locatie_key"
        + (offset >=0 ? " AND bez_bezoekers_out IS NULL" : "")  // weg = niet meer interessant, tenzij terugkijken
        + " AND a.bez_afspraak_datum BETWEEN TRUNC(SYSDATE+"+offset+") AND TRUNC(SYSDATE+"+offset+"+"+days+")";

    if (authparams.ALGreadlevel > -1) {  // Er geldt een autorisatiebeperking
       sql += " AND EXISTS ("
           + " SELECT 'x'"
           + " FROM fac_v_my_locations lr "
           + " WHERE lr.prs_perslid_key = " + user_key
           + " AND a.alg_locatie_key = lr.alg_locatie_key"
           + " AND lr.niveau = " + authparams.ALGreadlevel + ")";
    }
    if (S("vis_afspraak_onrgoed_uses_keys") == 1) {
       // Als we keys gebruiken (meestal) moeten/kunnen we gebouw ook checken
       // wat alleen nog nodig is als de scope op gebouw ligt (locatie deden we al
       if (authparams.ALGreadlevel > 3)  // denk ik, checken
         sql += " AND EXISTS ("
             + " SELECT 'x'"
             + " FROM fac_v_my_buildings gr "
             + " WHERE gr.prs_perslid_key = " + user_key
             + " AND v.alg_gebouw_key = gr.alg_gebouw_key"
             + " AND gr.niveau = " + authparams.ALGreadlevel + ")";
    }

    if (gebouw_key > -1 && S("vis_afspraak_onrgoed_uses_keys") == 1) {
      sql += " AND (l.alg_locatie_key IS NULL OR v.alg_gebouw_key = " + gebouw_key +")";
    }
    if (locatie_key > -1) {
      sql += " AND (l.alg_locatie_key IS NULL OR l.alg_locatie_key = " + locatie_key +")";
    }
    if (verdieping_key > -1 && S("vis_afspraak_onrgoed_uses_keys") == 1) {
      sql += " AND (l.alg_locatie_key IS NULL OR v.alg_verdieping_key = " + verdieping_key +")";
    }
    sql += " ORDER BY bez_afspraak_datum, bez_afspraak_naam";

    var rst = new ResultsetTable({ keyColumn: "bez_bezoekers_key",
                                   sql: sql,
                                   ID: "vistable",
                                   linkColumn: fncolLink,
                                   headerColumn: fnHeader,
                                   detailColumn: fnBezoeker,
                                   asideColumn: fnStatus,
                                   subheaderColumn: fnBestemming,
                                   showAll: true
                                  });

    function fncolLink(oRs)
    {
        return "../pda/afspraak.asp?afs_key=" + oRs("bez_afspraak_key").Value;
    };
    function fnBestemming(oRs) {
        var flagkey = oRs("bez_bezoekers_flag").Value||0;
        var bestemming = "<div class='listbodykop'>"
                       + "" + I("fa-user") + "&nbsp;" +safe.html(oRs("bez_afspraak_gastheer").value)
                       + (oRs("bez_afspraak_ruimte").value ? "<br>" + I("fa-map-marker") + "&nbsp;" + safe.html(oRs("bez_afspraak_ruimte").value) : "")
                       + (flagkey ? "<br>&nbsp;<span class='bezflag"+flagkey+"'>" + I("fa-fclt-flag") + "</span>&nbsp;" + L("lcl_bez_flag" + flagkey) : "")
                       + (oRs("bez_bezoekers_done").value != null ? "<br>" + I("fa-sign-in-alt") + "&nbsp;" + toDateTimeString(oRs("bez_bezoekers_done").value) : "")
                       + (oRs("bez_bezoekers_out").value != null ? "<br>" + I("fa-sign-out-alt") + "&nbsp;" + toDateTimeString(oRs("bez_bezoekers_out").value) : "")
                       + "</div>"
                       + "<div class='listbodytext'>"//+ safe.html(oRs("bez_afspraak_gastheer").value)
                       + (oRs("bez_afspraak_opmerking").value ? safe.html(oRs("bez_afspraak_opmerking").value) + "<br>" : "")
                       + (oRs("bez_bezoekers_opmerking").value ? safe.html(oRs("bez_bezoekers_opmerking").value) + "<br>" : "")
                       + "</div>";
        var flexkenmerken = LIST_KENMERK_COL(oRs, {kmcol: "flex"});

        return bestemming + flexkenmerken;
    }
    function fnBezoeker(oRs)
    {
        var actie_nodig = oRs("bez_bezoekers_done").value == null && oRs("bez_bezoekers_out").value == null;
        return safe.html(oRs("bez_afspraak_naam").value) + (oRs("bez_afspraak_bedrijf").value ? " ("+ safe.html(oRs("bez_afspraak_bedrijf").value)+ ")" : "")
                + (actie_nodig ? "<br>" + oRs("bez_actie_omschrijving").value : "" );
    };
    function fnHeader(oRs)
    {
        return (offset == 0 && days == 1 ? toTimeString(new Date(oRs("bez_afspraak_datum").value)) : toDateTimeString(new Date(oRs("bez_afspraak_datum").value), null, null, true));
    };
    function fnStatus(oRs)
    {
        var res = "";
        // We weten dat vertrokken bezoekers niet voorkomen hier
        if (oRs("bez_bezoekers_done").value == null) {
            res = L("lcl_vis_expected_st");
        }
        if (oRs("bez_bezoekers_done").value != null) {
            res = L("lcl_vis_inside_st");
        }
        return res + (oRs("bez_bezoekers_pasnr").value ? " #"+safe.html(oRs("bez_bezoekers_pasnr").value) : "");
    };
%>
<html>
<head><%
    FCLTMHeader.Generate({});
%></head>
<body>
<%
    // deze lijkt deprecated, hoe dan wel? CurrentPosition is slechts hypothetisch van belang
    var xfunc = user.func_enabled("BEZ", null, CurrentPosition, user_key);

    PAGE_START();
    HEADER({title: L("lcl_mobile_bezoek") + " " + CurrentPosition,
           addaction: (xfunc.canRead("WEB_BEZUSE") ? "../pda/afspraak.asp?afs_key=-1" : null),
           back: false,
           home: !qrc});
    CONTENT_START();

    var cnt = rst.processResultset();

    CONTENT_END();
    FOOTER();
    PAGE_END();
PDA_PAGE_END(); %>
	</body>
</html>
<% ASPPAGE_END(); %>
