<% /*
     $Revision$
     $Id$

    Description: query voor lopende zaken


*/ %>
<%

function sqlRecentdatum(refkey, node)
{   // Voeg laatste tracking datum toe
    var sqltrack = "";
    // Pietlutten zouden voor node bezoeker ook naar de bijbehorende afspraak moeten kijken
    if (node == "bezoeker")
    {
      sqltrack = ", (SELECT MAX (fac_tracking_datum) "
              + "  FROM (SELECT t.fac_tracking_datum "
              + "          FROM fac_tracking t, fac_srtnotificatie sn "
              + "         WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key "
              + "               AND t.fac_tracking_refkey = " + refkey
              + "               AND sn.fac_srtnotificatie_xmlnode = 'bezoeker' "
              + "        UNION "
              + "        SELECT t.fac_tracking_datum "
              + "          FROM fac_tracking t, fac_srtnotificatie sn "
              + "         WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key "
              + "               AND t.fac_tracking_refkey = (SELECT bez_afspraak_key "
              + "                                              FROM bez_bezoekers "
              + "                                             WHERE bez_bezoekers_key = " + refkey + ") "
              + "               AND sn.fac_srtnotificatie_xmlnode = 'afspraak')) recentdatum";
    }
    else
    {
      sqltrack = ", (SELECT MAX(t.fac_tracking_datum)"
              + "     FROM fac_tracking t"
              + "        , fac_srtnotificatie sn"
              + "    WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
              + "      AND t.fac_tracking_refkey = " + refkey
              + "      AND sn.fac_srtnotificatie_xmlnode = " + safe.quoted_sql(node)
              + "  ) recentdatum";
    }
  return sqltrack;
}

// Bij MLD hebben we de discipline_key toch al en kunnen we strenger controleren
// Merk op dat het nog wel een beetje grof is: we betrekken ALG en PRS-scope er verder niet
// bij
function lees_rechten_sql(ppkey, discipline_veld, autfunctions)
{
    var sql = "";
    if (ppkey != user_key)
    {
       sql = " AND {0} IN ".format(discipline_veld)
            + "     (SELECT ins_discipline_key"
            + "       FROM fac_v_webgebruiker w, "
            + "            fac_functie"
            + "      WHERE fac_functie_code IN ({0})".format(safe.quoted_sql_join(autfunctions))
            + "        AND w.prs_perslid_key = {0}".format(user_key)
            + "        AND fac_gebruiker_prs_level_read < 9)";
    }
    return sql;
}

function fac_list_query (params)
{
    var lpkey = params.pkey||user_key;
    var clausesArr = [];
    if (params.showmelding)
    {
        clausesArr.push(
            "SELECT m.prs_perslid_key_voor prs_perslid_key"   // melding voor jou
            + (S("mld_num_prefix_mode") == 1 // kostenplaats of afdeling
              ? ", COALESCE((SELECT prs_afdeling_naam"
              + "              FROM prs_afdeling d1"
              + "             WHERE m.prs_afdeling_key = d1.prs_afdeling_key),"
              + "           (SELECT prs_kostenplaats_nr"
              + "              FROM prs_kostenplaats k"
              + "             WHERE m.prs_kostenplaats_key = k.prs_kostenplaats_key),"
              + "           (SELECT prs_afdeling_naam"
              + "              FROM prs_afdeling d2"
              + "             WHERE m.prs_afdeling_key = d2.prs_afdeling_key)) || '#' || "
              : ", ")
            + "       isd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) item"
            + "     , m.mld_melding_key item_key"
            + "     , l.alg_locatie_code "
              + "     || COALESCE((SELECT '-' || v.alg_plaatsaanduiding || DECODE(v.alg_plaatsomschrijving, '','' , ' (' || v.alg_plaatsomschrijving || ')')"
              + "                    FROM alg_v_allonrgoed_gegevens v"
              + "                   WHERE m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys"
              + "                ), COALESCE(l.alg_locatie_omschrijving, ' ', ' (' || l.alg_locatie_omschrijving || ')')) plaats"
            + "     , 'melding' xmlnode"
            + "     , "+ lcl.xsql('isd.ins_srtdiscipline_omschrijving', 'isd.ins_srtdiscipline_key') + " subtype"
            + "     , '1' soort"
            + "     ,  m.mld_melding_datum datum"
            + "     , CASE WHEN (m.mld_melding_status IN (0, 2, 4, 7))" // lopend
            + "          THEN CASE WHEN BITAND(sm.mld_stdmelding_planbaar,2) = 2 THEN TO_DATE(NULL) "
            + "                    ELSE m.mld_melding_einddatum "
            + "               END "
            + "          ELSE fac.gettrackingdate('MLDAFM', mld_melding_key)" // klaar: dan de afmelddatum
            + "       END datum_eind"
            + (S("mld_selector_mode") == 0
                ? "   ,   " + lcl.xsql('id.ins_discipline_omschrijving', 'id.ins_discipline_key')
                : "   ,   " + lcl.xsql('sm.mld_stdmelding_omschrijving', 'sm.mld_stdmelding_key'))
                + "||DECODE(mld_melding_onderwerp, NULL, '' , ': '||mld_melding_onderwerp) detail"
            + "     , " + lcl.xsql('id.ins_discipline_omschrijving', 'id.ins_discipline_key') + " mobile_detail"
            + "     , " + lcl.xsql('id2.ins_discipline_omschrijving', 'id2.ins_discipline_key') + " status"
            + "     , m.mld_melding_conceptstatus conceptstatus"
            + "     , m.mld_melding_satisfaction satisfaction"
            + "     , m.mld_melding_satisfaction_op satisfaction_op"
            + "     , m.mld_melding_status status_key"
            + "     , NULL bo_status_key"
            + "     , m.mld_melding_flag extra1"
            + "     , m.mld_melding_actiecode mark"
            + "     , COALESCE (sm.mld_stdmelding_image, id.ins_discipline_image, isd.ins_srtdiscipline_image) image"
            + sqlRecentdatum('m.mld_melding_key', 'melding')
            + "  FROM mld_melding m"
            + "     , ins_srtdiscipline isd"
            + "     , ins_tab_discipline id"
            + "     , ins_tab_discipline id2"
            + "     , mld_stdmelding sm"
            + "     , alg_locatie l"
            + " WHERE id.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
            + "   AND sm.mld_ins_discipline_key = id.ins_discipline_key"
            + "   AND m.mld_alg_locatie_key = l.alg_locatie_key(+)"
            + "   AND m.mld_ins_discipline_key = id2.ins_discipline_key(+)"
            + "   AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
            + "   AND m.fac_activiteit_key IS NULL"
            + "   AND (m.mld_workflowstep_key IS NULL OR mld_melding_start_key = mld_melding_key)"
            + "   AND m.mld_melding_datum < SYSDATE + " + S("facilitiesfuture")  // niet te toekomstig
            + "   AND ((m.mld_melding_status IN (5,6) AND fac.gettrackingdate('MLDAFM', mld_melding_key) > SYSDATE - " + S("facilitiespast_mld") + ")" // niet te lang geleden klaar
            + "        OR (m.mld_melding_status = 1 AND fac.gettrackingdate('MLDREJ', mld_melding_key) > SYSDATE - " + S("facilitiespast_mld") + ")" // niet te lang geleden verworpen
            + "        OR m.mld_melding_status NOT IN (1,5,6))"   // of ongeacht alles nog niet klaar
            + lees_rechten_sql(lpkey, "sm.mld_ins_discipline_key", ["WEB_MLDBOF", "WEB_MLDFOF"])
        );
    }

    if (params.showbestelling)
    {
        clausesArr.push(
            "SELECT COALESCE(b.prs_perslid_key_voor, b.prs_perslid_key) prs_perslid_key" // Bestelling voor jou
            + "     , " + safe.quoted_sql(S("bes_bestelling_prefix")) + "||bes_bestelling_key item"
            + "     , bes_bestelling_key item_key"
            + "     , (select mld_adres_naam from mld_adres where mld_adres_key = b.mld_adres_key_lev) plaats"  // waar
            + "     , 'bestelling' xmlnode"
            + "     , (SELECT MIN (" + lcl.xsql('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + ") "
            + "                                        FROM bes_srtgroep sg, bes_srtdeel sd, bes_bestelling_item bi, bes_discipline d "
            + "                                       WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key "
            + "                                         AND d.ins_discipline_key = sg.ins_discipline_key "
            + "                                         AND bi.bes_srtdeel_key = sd.bes_srtdeel_key "
            + "                                         AND bi.bes_bestelling_key = b.bes_bestelling_key) subtype"
            + "     , '3' soort"
            + "     , bes_bestelling_datum datum"
            + "     , COALESCE(fac.gettrackingdate('BESOTV', bes_bestelling_key), bes_bestelling_leverdatum) datum_eind"
            + "     , (SELECT LISTAGG (bes_bestelling_item_aantal || ' x ' || bes_srtdeel_omschrijving, ', ') "
                + "           WITHIN GROUP (ORDER BY bes_srtdeel_omschrijving)||'..' "
                + "  FROM bes_bestelling_item bi, bes_srtdeel sd "
                + " WHERE bi.bes_srtdeel_key = sd.bes_srtdeel_key AND ROWNUM < 2 AND bi.bes_bestelling_key = b.bes_bestelling_key) detail"
            + "     , (SELECT MIN (" + lcl.xsql('ins_discipline_omschrijving', 'ins_discipline_key') + ") "
            + "          FROM bes_discipline "
            + "         WHERE ins_discipline_key IN "
            + "                   (SELECT ins_discipline_key "
            + "                      FROM bes_srtgroep sg, bes_srtdeel sd, bes_bestelling_item bi "
            + "                     WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key "
            + "                       AND bi.bes_srtdeel_key = sd.bes_srtdeel_key "
            + "                       AND bi.bes_bestelling_key = b.bes_bestelling_key)) mobile_detail" /* = subtype, maar ok */
            + "     , ' ' status"
            + "     , NULL conceptstatus"
            + "     , b.bes_bestelling_satisfaction satisfaction"
            + "     , b.bes_bestelling_satisfaction_op satisfaction_op"
            + "     , b.bes_bestelling_status status_key"
            + "     , NULL bo_status_key"
            + "     , NULL extra1"
            + "     , NULL mark"
            + "     , 'fa-shopping-cart' image"
            + sqlRecentdatum('bes_bestelling_key', 'bestelling')
            + "  FROM bes_bestelling b"
            + " WHERE b.fac_activiteit_key IS NULL"
            + "   AND (b.bes_bestelling_status IN (2,3,4,5)"  // lopend
            + "   OR  (b.bes_bestelling_status NOT IN (2,3,4,5) AND b.bes_bestelling_leverdatum BETWEEN SYSDATE - " + S("facilitiespast_bes") + " AND SYSDATE + " + S("facilitiesfuture") + " OR b.bes_bestelling_leverdatum IS NULL))"
        );
    }

    if (params.showdeel)
    {
        clausesArr.push(
            "SELECT ins_alg_ruimte_key prs_perslid_key"
            + "     , ins_deel_omschrijving item"
            + "     , ins_deel_key item_key"
            + "     ,  NULL plaats"  // waar
            + "     , 'deel' xmlnode"
            + "     , " + lcl.xsql('dis.ins_discipline_omschrijving', 'dis.ins_discipline_key') + " subtype"
            + "     , '4' soort"
            + "     , fac.gettrackingdate('INSOUT', ins_deel_key) datum"  // twijfel, zo staan ze blijvend bovenaan
            + "     , NULL datum_eind"  // als het ingenomen is kan dit de INSINN zijn, maar bij innemen valt dit object al weg
            + "     , " + lcl.xsql('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key') + " detail"
            + "     , " + lcl.xsql('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key') + " mobile_detail"
            + "     , ' ' status"
            + "     , NULL conceptstatus"
            + "     , to_number(null) satisfaction"
            + "     , NULL satisfaction_op"
            + "     , NULL status_key"
            + "     , NULL bo_status_key"
            + "     , NULL extra1"
            + "     , NULL mark"
            + "     , sd.ins_srtdeel_image image"
            + sqlRecentdatum('ins_deel_key', 'deel')
            + "  FROM ins_v_aanwezigdeel d"
            + "     , ins_srtdeel sd"
            + "     , ins_srtgroep sg"
            + "     , ins_discipline dis"
            + " WHERE d.ins_alg_ruimte_type = 'P' "
            + "   AND sd.ins_srtdeel_key = d.ins_srtdeel_key"
            + "   AND sg.ins_srtgroep_key = sd.ins_srtgroep_key"
            + "   AND dis.ins_discipline_key = sg.ins_discipline_key"
            + "   AND ins_alg_ruimte_key_org IS NOT NULL" // geleend
            + "   AND fac.gettrackingdate('INSOUT', ins_deel_key) > SYSDATE - " + S("facilitiespast_ins")  // recent aan je uitgegeven
        );
    }

    if (params.showreservering)
    {
        var S_fac_server_timezone = S("fac_server_timezone");
        function toLocalDate(expr) {
            return "CAST ("
                 + "FROM_TZ (CAST ( " + expr + " AS TIMESTAMP), " + safe.quoted_sql(S_fac_server_timezone) + ")"
                 + "         AT TIME ZONE COALESCE (l.alg_locatie_timezone, " + safe.quoted_sql(S_fac_server_timezone) + ") AS DATE)";
        }

        clausesArr.push(
              "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key" // 1 Host ruimtereservering
            + "     , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr item"
            + "     , rr.res_rsv_ruimte_key item_key"
            + "     , (SELECT res_ruimte_nr FROM res_ruimte r, res_ruimte_opstelling ro "
            + "         WHERE rr.res_ruimte_opstel_key=ro.res_ruimte_opstel_key "
            + "           AND ro.res_ruimte_key=r.res_ruimte_key) plaats"  // waar
            + "     , 'reservering'  xmlnode"
            + "     , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
            + "     , '5' soort"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
            + "     , rr.res_rsv_ruimte_omschrijving detail"
            + "     , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
            + "                                                    FROM res_activiteit ra "
            + "                                                   WHERE res_activiteit_key = rr.res_activiteit_key)) mobile_detail"
            + "     , ' ' status"
            + "     , NULL conceptstatus"
            + "     , res_rsv_ruimte_satisfaction satisfaction"
            + "     , res_rsv_ruimte_satisfaction_op satisfaction_op"
            + "     , DECODE (res_rsv_ruimte_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
            + "     , rr.res_status_bo_key bo_status_key"
            + "     , rr.res_rsv_ruimte_flag extra1"
            + "     , NULL mark"
            + "     , ra.res_activiteit_image image"
            + sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
            + "  FROM res_v_aanwezigrsv_ruimte rr"
            + "     , res_activiteit        ra "
            + "     , res_ruimte_opstelling rro"
            + "     , res_alg_ruimte        rar"
            + "     , alg_ruimte            r"
            + "     , alg_verdieping        v"
            + "     , alg_gebouw            g"
            + "     , alg_locatie           l"
            + " WHERE ra.res_activiteit_key = rr.res_activiteit_key"
            + "   AND rro.res_ruimte_key = rar.res_ruimte_key"
            + "   AND rar.alg_ruimte_key = r.alg_ruimte_key"
            + "   AND r.alg_verdieping_key = v.alg_verdieping_key"
            + "   AND v.alg_gebouw_key = g.alg_gebouw_key"
            + "   AND g.alg_locatie_key = l.alg_locatie_key"
            + "   AND rr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
            + "   AND rr.res_ruimte_opstel_key IS NOT NULL"  // alleen reserveerbare ruimte
            + "   AND (rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilitiespast_res") + " AND rr.res_rsv_ruimte_van < SYSDATE + " + S("facilitiesfuture") + ")"
            + (params.specific_day
              ? " AND rr.res_rsv_ruimte_van < TRUNC(SYSDATE + 1 + " + params.days_in_the_future + ")"
              + " AND rr.res_rsv_ruimte_tot >= TRUNC(SYSDATE + " + params.days_in_the_future + ")"
            : "")
            + " UNION ALL " // 3 Host voorzieningreservering, dirtlevel van de onderliggenden bepalen?
            + "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key"
            + "     , DECODE("
            + "           (SELECT ins_discipline_min_level FROM res_discipline WHERE ins_discipline_key = rd.res_discipline_key)" // Ben ik een werkplek-catalogus of niet?
            + "         , 5, rd.res_deel_omschrijving" // Werkplek-omschrijving
            + "         , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr) item"
            + "     , rr.res_rsv_ruimte_key"
            + "     , (SELECT alg_plaatsaanduiding||'-'||DECODE(alg_plaatsomschrijving, '','' ,' (' || alg_plaatsomschrijving || ')') FROM alg_v_onroerendgoed_gegevens ar"
            + "         WHERE rr.alg_ruimte_key = ar.alg_ruimte_key) plaats"  // waar
            + "     , 'reservering' xmlnode"
            + "     , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
            + "     , '7' soort"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
            + "     , rr.res_rsv_ruimte_omschrijving oms"
            + "     , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
            + "                                                    FROM res_activiteit ra "
            + "                                                   WHERE res_activiteit_key = rr.res_activiteit_key)) mobile_detail"
            + "     , ' ' status"
            + "     , NULL conceptstatus"
            + "     , res_rsv_ruimte_satisfaction satisfaction"
            + "     , res_rsv_ruimte_satisfaction_op satisfaction_op"
            + "     , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_deel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
            + "     , rr.res_status_bo_key bo_status_key"
            + "     , rr.res_rsv_ruimte_flag extra1"
            + "     , NULL mark"
            + "     , ra.res_activiteit_image image"
            + sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
            + "  FROM res_v_aanwezigrsv_ruimte rr"
            + "     , res_v_aanwezigrsv_deel  dd"
            + "     , res_deel                rd "
            + "     , res_activiteit          ra "
            + "     , alg_ruimte              r"
            + "     , alg_verdieping          v"
            + "     , alg_gebouw              g"
            + "     , alg_locatie             l"
            + " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
            + "   AND r.alg_verdieping_key = v.alg_verdieping_key"
            + "   AND v.alg_gebouw_key = g.alg_gebouw_key"
            + "   AND g.alg_locatie_key = l.alg_locatie_key"
            + "   AND r.alg_ruimte_key = rr.alg_ruimte_key"
            + "   AND rr.alg_ruimte_key IS NOT NULL"  // niet in reserveerbare ruimte
            + "   AND ra.res_activiteit_key = rr.res_activiteit_key"
            + "   AND rd.res_deel_key = dd.res_deel_key"
            + "   AND (rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilitiespast_res") + " AND rr.res_rsv_ruimte_van < SYSDATE + " + S("facilitiesfuture") + ")"
            + (params.specific_day  // meerdaagse voorzieningen alleen op de start- en einddag, (is res_rsv_deel_van/tot niet beter?)
              ? " AND (   TRUNC(rr.res_rsv_ruimte_van) = TRUNC(SYSDATE + " + params.days_in_the_future + ")"
                + "    OR TRUNC(rr.res_rsv_ruimte_tot) = TRUNC(SYSDATE + " + params.days_in_the_future + "))"
            : "")
            + " UNION ALL " // 5 Host cateringreservering dirtlevel van de onderliggenden bepalen?
            + "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key"
            + "     , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
            + "     , rr.res_rsv_ruimte_key"
            + "     , (SELECT alg_plaatsaanduiding||'-'||DECODE(alg_plaatsomschrijving, '','' ,' (' || alg_plaatsomschrijving || ')') FROM alg_v_onroerendgoed_gegevens ar"
            + "         WHERE rr.alg_ruimte_key = ar.alg_ruimte_key) plaats"  // waar
            + "     , 'reservering' xmlnode"
            + "     , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
            + "     , '9' soort"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
            + "     , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
            + "     , rr.res_rsv_ruimte_omschrijving oms"
            + "     , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
            + "                                                    FROM res_activiteit ra "
            + "                                                   WHERE res_activiteit_key = rr.res_activiteit_key)) mobile_detail"
            + "     , ' ' status"
            + "     , NULL conceptstatus"
            + "     , res_rsv_ruimte_satisfaction satisfaction"
            + "     , res_rsv_ruimte_satisfaction_op satisfaction_op"
            + "     , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_artikel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
            + "     , rr.res_status_bo_key bo_status_key"
            + "     , rr.res_rsv_ruimte_flag extra1"
            + "     , (CASE WHEN res_rsv_artikel_approved = 1 THEN NULL ELSE res_rsv_artikel_approved END) mark" // 1 = alles akkoord: geen aanduiding
            + "     , ra.res_activiteit_image image"
            + sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
            + "  FROM res_v_aanwezigrsv_ruimte  rr"
            + "     , res_v_aanwezigrsv_artikel dd"
            + "     , res_activiteit            ra "
            + "     , alg_ruimte                r"
            + "     , alg_verdieping            v"
            + "     , alg_gebouw                g"
            + "     , alg_locatie               l"
            + " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key "
            + "   AND r.alg_verdieping_key = v.alg_verdieping_key"
            + "   AND v.alg_gebouw_key = g.alg_gebouw_key"
            + "   AND g.alg_locatie_key = l.alg_locatie_key"
            + "   AND r.alg_ruimte_key = rr.alg_ruimte_key"
            + "   AND rr.alg_ruimte_key IS NOT NULL"  // niet in reserveerbare ruimte
            + "   AND ra.res_activiteit_key = rr.res_activiteit_key"
            + "   AND (rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilitiespast_res") + " AND rr.res_rsv_ruimte_van < SYSDATE + " + S("facilitiesfuture") + ")"
            + (params.specific_day
              ? " AND rr.res_rsv_ruimte_van < TRUNC(SYSDATE + 1 + " + params.days_in_the_future + ")"
              + " AND rr.res_rsv_ruimte_tot >= TRUNC(SYSDATE + " + params.days_in_the_future + ")"
            : "")
        );
    }

    if (params.showafspraak)
    {
        clausesArr.push(
            "SELECT COALESCE(a.bez_afspraak_host_key, a.bez_afspraak_contact_key) prs_perslid_key"  // coalsece ivm vis_afspraak_host_uses_keys
            + "     , TO_CHAR (b.bez_afspraak_key) item"
            + "     , b.bez_afspraak_key item_key"
            + "     , (SELECT l.alg_locatie_omschrijving FROM alg_locatie l WHERE l.alg_locatie_key = a.alg_locatie_key) plaats"  // waar
            + "     , 'afspraak' xmlnode"
            + "     , '' subtype"
            + "     , '11' soort"
            + "     , COALESCE(fac.gettrackingdate('BEZDON', b.bez_bezoekers_key), a.bez_afspraak_datum) datum"  // BEZUNI maakt dit weer ongedaan..
            + "     , a.bez_afspraak_eind datum_eind"  // geen nut om BEZOUT te nemen, want dan is-ie weg
            + "     , b.bez_afspraak_naam || (CASE WHEN bez_afspraak_bedrijf IS NOT NULL THEN ' (' || bez_afspraak_bedrijf || ')' END) detail"
            + "     , b.bez_afspraak_naam || (CASE WHEN bez_afspraak_bedrijf IS NOT NULL THEN ' (' || bez_afspraak_bedrijf || ')' END) mobile_detail"
            + "     , (CASE WHEN bez_bezoekers_done IS NOT NULL THEN 'lcl_vis_inside_st' ELSE 'lcl_vis_expected_st' END) status"
            + "     , NULL conceptstatus"
            + "     , NULL satisfaction"
            + "     , NULL satisfaction_op"
            + "     , NULL status_key"
            + "     , NULL bo_status_key"
            + "     , b.bez_bezoekers_flag extra1"
            + "     , NULL mark"
            + "     , 'fa-user-tie' image"
            + sqlRecentdatum('b.bez_bezoekers_key', 'bezoeker')   // keuze tussen afspraak of bezoeker
            + "  FROM bez_bezoekers b"
            + "     , bez_afspraak a"
            + " WHERE b.bez_afspraak_key = a.bez_afspraak_key"
            + "   AND bez_bezoekers_out IS NULL"  // buiten = weg
            + "   AND (a.bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture") + " OR a.bez_afspraak_datum IS NULL)"
            + (params.specific_day
              ? " AND a.bez_afspraak_datum < TRUNC(SYSDATE + 1 + " + params.days_in_the_future + ")"
              + " AND a.bez_afspraak_eind >= TRUNC(SYSDATE + " + params.days_in_the_future + ")"
            : "")
        );
    }

    // als je alles uit zet krijg je niks, geen geldige sql ook
    if (clausesArr.length == 0) return "";

    if (clausesArr.length > 0)
      var sqln = clausesArr.join(" UNION ALL ");

    sqln = "SELECT prs_perslid_key"
         + "     , item"
         + "     , item_key"
         + "     , plaats"
         + "     , xmlnode"
         + "     , subtype"
         + "     , MAX(soort) soort"
         + "     , datum"
         + "     , datum_eind"
         + "     , detail"
         + "     , mobile_detail"
         + "     , status"
         + "     , conceptstatus"
         + "     , satisfaction"
         + "     , satisfaction_op"
         + "     , status_key"
         + "     , recentdatum"
         + "     , bo_status_key"
         + "     , extra1"
         + "     , mark"
         + "     , image"
         + "  FROM (" + sqln + ")"
         + " WHERE prs_perslid_key = " + lpkey
         + "   AND xmlnode IS NOT NULL"
         + " GROUP BY prs_perslid_key"
         + "        , item"
         + "        , item_key"
         + "        , plaats"
         + "        , xmlnode"
         + "        , subtype"
         // + "        , soort" deze expliciet niet om verder te ontdubbelen
         + "        , datum"
         + "        , datum_eind"
         + "        , detail"
         + "        , mobile_detail"
         + "        , status"
         + "        , conceptstatus"
         + "        , satisfaction"
         + "        , satisfaction_op"
         + "        , status_key"
         + "        , recentdatum"
         + "        , bo_status_key"
         + "        , extra1"
         + "        , mark"
         + "        , image";

    return sqln
    }
%>