<% /*
     $Revision$
     $Id$

     File:        res_rsv_ruimte_by_placetime.inc
     Description: Shared functions for res/res_rsv_ruimte_by_placetime.asp
                  and pda/reservering_new_by_placetime_2.asp
*/

rrpt = {
    aantal_resruimten_in_gebouw_sql: function(p_disc_key_arr, p_act_key, p_geb_key, p_flr_key, p_resdate)
    {
        // Bepaal het aantal items in dit gebouw
        var where_res_act = (p_act_key > -1 ? " AND res_activiteit_key = " + p_act_key : "");
        var where_res_disc = (p_disc_key_arr.length > 0 ? " AND res_discipline_key IN (" + p_disc_key_arr.join(",") + ")" : "");
        var lsql = "SELECT ins_discipline_omschrijving"
                 + "     , ins_discipline_key"
                 + "     , COUNT(*) aantal"
                 + "  FROM ("
                         + "  SELECT " + lcl.xsqla("rd.ins_discipline_omschrijving", "rd.ins_discipline_key")
                         + "       , rd.ins_discipline_key"
                         + "       , rr.res_ruimte_nr"
                         + "    FROM res_v_aanwezigruimte   rr"
                         + "       , res_alg_ruimte         rar"
                         + "       , alg_v_allonroerendgoed plts"
                         + "       , res_discipline         rd"
                         + "   WHERE rar.alg_ruimte_key = plts.alg_onroerendgoed_keys"
                         + "     AND plts.alg_type ='R'"
                         + "     AND rr.res_ruimte_key = rar.res_ruimte_key"
                         + "     AND rar.res_alg_ruimte_verwijder IS NULL"
                         + (p_flr_key > -1 ? "  AND plts.alg_verdieping_key = " + p_flr_key
                                           : (p_geb_key > -1 ? "  AND plts.alg_gebouw_key = " + p_geb_key : "")
                           )
                         + "     AND rd.ins_discipline_key = rr.res_discipline_key"
                         + "     AND rr.res_discipline_key IN"
                                + "  (SELECT res_discipline_key"
                                + "     FROM res_activiteitdiscipline"
                                + "    WHERE (1=1)"
                                +      where_res_act
                                +      where_res_disc
                                + "  )"
                         + "     AND (  rr.res_ruimte_vervaldatum IS NULL"
                         + "         OR rr.res_ruimte_vervaldatum > " + (p_resdate ? p_resdate.toSQL() : "SYSDATE")
                         + "         )"
                         + "   GROUP BY ins_discipline_omschrijving, rd.ins_discipline_key, rr.res_ruimte_nr"
                 + "       )"
                 + " GROUP BY ins_discipline_omschrijving, ins_discipline_key"
                 + " ORDER BY 1";
        return lsql;
    },

    dagbezetting_resruimten_in_gebouw_sql: function(p_disc_key_arr, p_act_key, p_geb_key, p_flr_key, p_dateoffset, p_datelimit, p_resdate)
    {

        // TODO YKPN/MVP mag versimpeld tot wel/niet per dag.
        // Als we dat generiek willen moet dit simpeler en hoeven we de intervallen niet te weten
        var lsql = "SELECT datum, SUM (gevuld) gevuld, MAX (aantal) aantal, MAX (vrijedag) vrijedag, MAX (weekdag) weekdag "
                 + "  FROM ("
                      + "   SELECT "+ lcl.xsqla("rd.ins_discipline_omschrijving", "rd.ins_discipline_key")
                      + "        , TRUNC (rrr.res_rsv_ruimte_van) datum"
                      + "        , SUM(DECODE( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van),0,0,1)) gevuld"
                      + "        , vrij.mld_vrije_dagen_key vrijedag"               // >0 is vrijedag
                      + "        , fac.getweekdaynum (res_rsv_ruimte_van) weekdag"  // 7 en 1 zijn weekend
                      + "        , COUNT(*) aantal"
                      + "     FROM res_v_aanwezigrsv_ruimte rrr"
                      + "        , res_v_aanwezigruimte     rr"
                      + "        , res_ruimte_opstelling    rro"
                      + "        , alg_v_allonroerendgoed   plts"
                      + "        , mld_vrije_dagen          vrij"
                      + "        , res_discipline           rd"
                      + "    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
                      + "      AND rro.res_ruimte_key = rr.res_ruimte_key"
                      + "      AND plts.alg_onroerendgoed_keys = "
                            + "   (SELECT MIN(alg_ruimte_key)"
                            + "      FROM res_alg_ruimte rar2"
                            + "     WHERE rar2.res_ruimte_key = rr.res_ruimte_key"
                            + "       AND rar2.res_alg_ruimte_verwijder IS NULL"
                            + "   )"
                      + "      AND plts.alg_type = 'R'"
                      + "      AND rd.ins_discipline_key = rr.res_discipline_key"
                      + "      AND vrij.mld_vrije_dagen_datum(+) = TRUNC(rrr.res_rsv_ruimte_van)"
                      + "      AND rrr.res_rsv_ruimte_dirtlevel = 0"  // nodig?
                      + (p_flr_key > -1 ? "  AND plts.alg_verdieping_key = " + p_flr_key
                                        : (p_geb_key > -1 ? "  AND plts.alg_gebouw_key = " + p_geb_key : "")
                        )
                      + (p_disc_key_arr.length > 0 ? " AND rr.res_discipline_key IN (" + p_disc_key_arr.join(",") + ")"
                                         : " AND rr.res_discipline_key IN (SELECT res_discipline_key"
                                                                       + "   FROM res_activiteitdiscipline"
                                                                       + "  WHERE res_activiteit_key = " + p_act_key
                                                                       + ")"
                        )
                      + (p_resdate ? " AND TRUNC(rrr.res_rsv_ruimte_van) = " + p_resdate.toSQL()
                                   : " AND TRUNC(rrr.res_rsv_ruimte_van) BETWEEN TRUNC(SYSDATE +"+(p_dateoffset||0)+") AND TRUNC(SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+")"
                        )
                      + "    GROUP BY vrij.mld_vrije_dagen_key, TRUNC(rrr.res_rsv_ruimte_van), res_rsv_ruimte_van, ins_discipline_omschrijving"
                      + "   UNION ALL"  // de dagen zonder reserveringen, ja, die ALL moet, vraag ff niet waarom
                      + "   SELECT NULL"
                      + "        , TRUNC(SYSDATE + " + p_dateoffset + "+ (LEVEL - 1)) dag"
                      + "        , 0"
                      + "        , 0"
                      + "        , fac.getweekdaynum(SYSDATE + " + p_dateoffset + "+(LEVEL - 1))"
                      + "        , 0"
                      + "     FROM DUAL"
                      + "   CONNECT BY LEVEL <= " + p_datelimit
                      + "   UNION ALL "  // de vrije dagen daarvan
                      + "   SELECT NULL"
                      + "        , mld_vrije_dagen_datum"
                      + "        , 0"
                      + "        , 1"
                      + "        , 0"
                      + "        , 0"
                      + "     FROM mld_vrije_dagen vrij"
                      + "    WHERE vrij.mld_vrije_dagen_datum BETWEEN TRUNC(SYSDATE +" + (p_dateoffset||0) + ") AND TRUNC(SYSDATE-1+" + (p_dateoffset||0) + "+" + p_datelimit + ")"
                 + "       )"
                 + " GROUP BY datum"
                 + " ORDER BY 1";

        if (p_resdate)
        {
            lsql = "SELECT * FROM (" + lsql + ") WHERE datum = " + p_resdate.toSQL();
        }
        return lsql;
    },

    dagbezetting_resruimten_in_aanweziggebouw_sql: function(p_act_key, p_geb_key, p_flr_key, p_dateoffset, p_datelimit, p_resdate, p_gebdisc_key)
    {
        // TODO YKPN/MVP mag versimpeld tot wel/niet per dag. Als we dat generiek willen moet dit simpeler en hoeven we de intervallen niet te weten
        var lsql = " SELECT datum"
                 + "      , SUM(gevuld)   gevuld"
                 + "      , MAX(aantal)   aantal"
                 + "      , MAX(vrijedag) vrijedag"
                 + "      , MAX(weekdag)  weekdag"
                 + "      , MAX(aantal_ruimten) ruimten"
                 + "   FROM ("
                       + "   SELECT " + lcl.xsqla("rd.ins_discipline_omschrijving", "rd.ins_discipline_key")
                       + "        , TRUNC(rrr.res_rsv_ruimte_van) datum"
                       + "        , SUM(DECODE( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van),0,0,1)) gevuld"
                       + "        , vrij.mld_vrije_dagen_key vrijedag"   // >0 is vrijedag
                       + "        , fac.getweekdaynum (res_rsv_ruimte_van) weekdag"  // 7 en 1 zijn weekend
                       + "        , COUNT(*) aantal"
                       + "        , 0 aantal_ruimten"
                       + "     FROM res_v_aanwezigrsv_ruimte rrr"
                       + "        , res_v_aanwezigruimte     rr"
                       + "        , res_ruimte_opstelling    rro"
                       + "        , alg_v_allonroerendgoed   plts"
                       + "        , mld_vrije_dagen          vrij"
                       + "        , res_discipline           rd"
                       + "    WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
                       + "      AND rro.res_ruimte_key = rr.res_ruimte_key"
                       + "      AND (  rr.res_ruimte_startdatum IS NULL"
                       + "          OR rr.res_ruimte_startdatum <= TRUNC(rrr.res_rsv_ruimte_van)"
                       + "          )"
                       + "      AND (  rr.res_ruimte_vervaldatum IS NULL"
                       + "          OR rr.res_ruimte_vervaldatum > TRUNC(rrr.res_rsv_ruimte_van)"
                       + "          )"
                       + "      AND plts.alg_onroerendgoed_keys = "
                       + "          (SELECT MIN (alg_ruimte_key)"
                       + "                 FROM res_alg_ruimte rar2"
                       + "                WHERE rar2.res_ruimte_key = rr.res_ruimte_key"
                       + "                  AND rar2.res_alg_ruimte_verwijder IS NULL"
                       + "          )"
                       + "      AND plts.alg_type = 'R'"
                       + "      AND rd.ins_discipline_key = rr.res_discipline_key"
                       + "      AND vrij.mld_vrije_dagen_datum(+) = TRUNC(rrr.res_rsv_ruimte_van)"
                       + "      AND rrr.res_rsv_ruimte_dirtlevel = 0"  // nodig?
                       + (p_flr_key > -1 ? "  AND plts.alg_verdieping_key = " + p_flr_key
                                         : (p_geb_key > -1 ? "  AND plts.alg_gebouw_key = " + p_geb_key : "")
                         )
                       + (p_gebdisc_key > -1 ? " AND rr.res_discipline_key = " + p_gebdisc_key
                                          : " AND rr.res_discipline_key IN (SELECT res_discipline_key FROM res_activiteitdiscipline WHERE res_activiteit_key = " + p_act_key + ")"
                         )
                       + (p_resdate ? " AND TRUNC(rrr.res_rsv_ruimte_van) = " + p_resdate.toSQL()
                                    : " AND TRUNC(rrr.res_rsv_ruimte_van) BETWEEN TRUNC(SYSDATE +"+(p_dateoffset||0)+") AND TRUNC(SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+")"
                         )
                       + "    GROUP BY vrij.mld_vrije_dagen_key, TRUNC(rrr.res_rsv_ruimte_van), res_rsv_ruimte_van, ins_discipline_omschrijving"
                       + "   UNION ALL"  // de dagen zonder reserveringen, ja, die ALL moet, vraag ff niet waarom
                       + "   SELECT NULL"
                       + "        , d.dag"
                       + "        , 0"
                       + "        , 0"
                       + "        , d.dagnr"
                       + "        , 0"
                       + "        , COUNT(*)"
                       + "     FROM res_v_aanwezigruimte   rr"
                       + "        , alg_v_allonroerendgoed plts"
                       + "        , (SELECT TRUNC(SYSDATE + "             + p_dateoffset + " + (LEVEL - 1)) dag"
                       + "                , fac.getweekdaynum(SYSDATE + " + p_dateoffset + " + (LEVEL - 1)) dagnr"
                       + "             FROM DUAL"
                       + "           CONNECT BY LEVEL <= " + p_datelimit
                       + "          ) d"
                       + "    WHERE plts.alg_onroerendgoed_keys ="
                       + "           (SELECT MIN (alg_ruimte_key)"
                       + "              FROM res_alg_ruimte rar2"
                       + "             WHERE rar2.res_ruimte_key = rr.res_ruimte_key"
                       + "               AND rar2.res_alg_ruimte_verwijder IS NULL"
                       + "           )"
                       + "      AND plts.alg_type = 'R'"
                       + (p_flr_key > -1 ? "  AND plts.alg_verdieping_key = " + p_flr_key
                                         : (p_geb_key > -1 ? "  AND plts.alg_gebouw_key = " + p_geb_key : "")
                         )
                       + (p_gebdisc_key > -1 ? " AND rr.res_discipline_key = " + p_gebdisc_key
                                          : " AND rr.res_discipline_key IN (SELECT res_discipline_key FROM res_activiteitdiscipline WHERE res_activiteit_key= " + p_act_key+")"
                         )
                       + "      AND (  rr.res_ruimte_vervaldatum IS NULL"
                       + "          OR rr.res_ruimte_vervaldatum > d.dag"
                       + "          )"
                       + "    GROUP BY d.dag, d.dagnr"
                       + "   UNION ALL "  // de vrije dagen daarvan
                       + "   SELECT NULL"
                       + "        , mld_vrije_dagen_datum"
                       + "        , 0"
                       + "        , 1"
                       + "        , 0"
                       + "        , 0"
                       + "        , 0"
                       + "     FROM mld_vrije_dagen vrij"
                       + "    WHERE vrij.mld_vrije_dagen_datum BETWEEN TRUNC(SYSDATE +" + (p_dateoffset||0) + ") AND TRUNC(SYSDATE-1+" + (p_dateoffset||0) + "+" +p_datelimit+")"
                 + "        )"
                 + " GROUP BY datum "
                 + " ORDER BY 1" ;

        if (p_resdate)
        {
            lsql = "SELECT * FROM (" + lsql + ") WHERE datum = " + p_resdate.toSQL();
        }
        return lsql;
    },

    mijn_verdiepingen_met_resruimten_sql: function(p_disc_key_arr, p_act_key, p_gebouw_key, p_alglevel, p_dateoffset, p_resdate)
    {
        var where_res_act = (p_act_key > -1 ? " AND res_activiteit_key = " + p_act_key : "");
        var where_res_disc = (p_disc_key_arr.length > 0 ? " AND res_discipline_key IN (" + p_disc_key_arr.join(",") + ")" : "");
        var lsql = " SELECT l.alg_locatie_plaats"
                 + "      , g.alg_gebouw_naam"
                 + "      , g.alg_gebouw_key"
                 + "      , g.alg_gebouw_image"
                 + "      , v.alg_verdieping_key"
                 + "      , v.alg_verdieping_omschrijving"
                 + "      , v.alg_verdieping_code"
                 + "      , v.alg_verdieping_volgnr"
                 + "      , " + lcl.xsqla("rd.ins_discipline_omschrijving", "rd.ins_discipline_key")
                 + "      , rr.res_ruimte_nr "
                 + "   FROM res_v_aanwezigruimte     rr"
                 + "      , alg_v_aanwezigruimte     ar"
                 + "      , res_alg_ruimte           rar"
                 + "      , alg_v_allonroerendgoed   plts"
                 + "      , alg_v_aanweziggebouw     g"
                 + "      , alg_v_aanwezigverdieping v"
                 + "      , alg_locatie              l"
                 + "      , alg_district             di"
                 + "      , res_discipline           rd"
                 + "  WHERE di.alg_district_key = l.alg_district_key"
                 + "    AND g.alg_locatie_key = l.alg_locatie_key"
                 + "    AND plts.alg_verdieping_key = v.alg_verdieping_key"
                 + "    AND v.alg_gebouw_key = g.alg_gebouw_key"
                 + (p_gebouw_key > -1 ? " AND g.alg_gebouw_key = " + p_gebouw_key : "")
                 + "    AND ar.alg_ruimte_key = plts.alg_onroerendgoed_keys"
                 + "    AND plts.alg_type = 'R'"
                 + "    AND rd.ins_discipline_key = rr.res_discipline_key"
                 + "    AND rar.res_alg_ruimte_verwijder IS NULL"
                 + "    AND rar.res_ruimte_key = rr.res_ruimte_key"
                 + "    AND rar.alg_ruimte_key = ar.alg_ruimte_key"
                 + "    AND (  rr.res_ruimte_vervaldatum IS NULL"
                 + "        OR rr.res_ruimte_vervaldatum > " + (p_resdate ? p_resdate.toSQL() : "SYSDATE+"+(p_dateoffset||0) )
                 + "        )"
                 + "    AND rr.res_discipline_key IN"
                        + " (SELECT res_discipline_key"
                        + "    FROM res_activiteitdiscipline"
                        + "   WHERE (1=1)"
                        +     where_res_act
                        +     where_res_disc
                 + "        )"

        if (p_alglevel > -1 )
        {  // Er is een scope-beperking van kracht
            lsql += "   AND v.alg_verdieping_key IN"
                  + "       (SELECT alg_verdieping_key"
                  + "          FROM fac_v_my_floors"
                  + "         WHERE prs_perslid_key = " + user_key
                  + "           AND niveau = " + p_alglevel
                  + "       )";
        }
        lsql += " GROUP BY l.alg_locatie_plaats, g.alg_gebouw_naam, g.alg_gebouw_key, g.alg_gebouw_image,v.alg_verdieping_key, v.alg_verdieping_omschrijving, v.alg_verdieping_volgnr, v.alg_verdieping_code, rd.ins_discipline_omschrijving,rr.res_ruimte_nr"
              + " ORDER BY alg_locatie_plaats, alg_gebouw_naam, alg_verdieping_volgnr, alg_verdieping_code";

        if (p_gebouw_key == -1)
        {
            lsql = "SELECT alg_locatie_plaats"
                 + "     , alg_gebouw_naam"
                 + "     , alg_gebouw_key"
                 + "     , alg_gebouw_image"
                 + "     , ins_discipline_omschrijving"
                 + "     , COUNT(*) aantal"
                 + "  FROM (" + lsql + ")"
                 + " GROUP BY alg_locatie_plaats"
                 + "        , alg_gebouw_naam"
                 + "        , alg_gebouw_key"
                 + "        , alg_gebouw_image"
                 + "        , ins_discipline_omschrijving"
                 + " ORDER BY alg_locatie_plaats, alg_gebouw_naam, ins_discipline_omschrijving";
        }
        else
        {
            lsql = "SELECT alg_locatie_plaats"
                 + "     , alg_gebouw_naam"
                 + "     , alg_gebouw_key"
                 + "     , alg_gebouw_image"
                 + "     , alg_verdieping_key"
                 + "     , alg_verdieping_omschrijving"
                 + "     , alg_verdieping_volgnr"
                 + "     , alg_verdieping_code"
                 + "     , ins_discipline_omschrijving"
                 + "     , COUNT (*) aantal"
                 + "  FROM (" + lsql + ")"
                 + " GROUP BY alg_locatie_plaats"
                 + "        , alg_gebouw_naam"
                 + "        , alg_gebouw_key"
                 + "        , alg_gebouw_image"
                 + "        , alg_verdieping_key"
                 + "        , alg_verdieping_omschrijving"
                 + "        , alg_verdieping_volgnr"
                 + "        , alg_verdieping_code"
                 + "        , ins_discipline_omschrijving"
                 + " ORDER BY alg_locatie_plaats, alg_gebouw_naam, ins_discipline_omschrijving, alg_verdieping_volgnr";
           }
        return lsql;
    },

    res_ruimte_bezetting_op_dag_sql: function(p_disc_key_arr, p_act_key, p_gebouw_key, p_floor_key, p_alglevel, p_resdate, onlyfree)
    {
        // Bloktijden van de activiteit
        var bloktijden = res.getBloktijden(p_act_key, p_disc_key_arr[0], p_resdate, p_gebouw_key);

        var van = null;
        var tot = null;
        if (bloktijden.length == 1) // We doen hier nog geen intervallen, maar als er 1 interval bekend is,
        {                           // gebruiken we die tijden ipv de openingstijden van de res_ruimte.
            van = bloktijden[0].startdatum.getHours() + (bloktijden[0].startdatum.getMinutes() / 60);
            tot = bloktijden[0].einddatum.getHours() + (bloktijden[0].einddatum.getMinutes() / 60);
        }
        var safe_van = van === null || isNaN(parseFloat(van)) ? "NULL" : parseFloat(van);
        var safe_tot = tot === null || isNaN(parseFloat(tot)) ? "NULL" : parseFloat(tot);

        var sql = " SELECT rr.res_ruimte_key"
                + "      , " + lcl.xsqla("rr.res_ruimte_nr", "rr.res_ruimte_key")
                + "      , " + lcl.xsqla("rr.res_ruimte_omschrijving", "rr.res_ruimte_key")
                + "      , plaan.alg_plaatsaanduiding plaats"
                + "      , rr.res_discipline_key"
                + "      , v.alg_verdieping_omschrijving"
                + "      , rr.res_ruimte_image"
                + "      , COUNT(rsv.res_ruimte_key) bezet"
                + "   FROM res_v_aanwezigalg_ruimte  rar"
                + "      , alg_v_allonroerendgoed    plts"
                + "      , alg_v_allonrgoed_gegevens plaan"
                + "      , alg_v_aanwezigverdieping  v"
                + "      , res_v_aanwezigruimte      rr" // reserveerbare ruimten
                + "      , res_discipline            rd"
                + "      , (SELECT rro.res_ruimte_key"
                + "              , rrr.res_rsv_ruimte_van"
                + "              , rrr.res_rsv_ruimte_tot"
                + "           FROM res_v_aanwezigrsv_ruimte  rrr"
                + "              , res_reservering           r"
                + "              , res_ruimte_opstelling     rro"
                + "          WHERE r.res_reservering_key = rrr.res_reservering_key"
                + "            AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
                + "            AND rrr.res_rsv_ruimte_dirtlevel = 0"
                + "            AND TRUNC(rrr.res_rsv_ruimte_van) = TRUNC(" + p_resdate.toSQL() + ")" // Dezelfde dag
                + "            AND r.res_reservering_verwijder IS NULL"
                + "        ) rsv"
                + "  WHERE rr.res_ruimte_key = rar.res_ruimte_key"
                + "    AND rr.res_ruimte_key = rsv.res_ruimte_key(+)"
                // Voor de >= staat voor de (tot/van) tijd van de bestaande reservering ('(+)' => if any), en na de >= staat voor de (van/tot) tijd van de te maken reservering
                + "    AND (rsv.res_rsv_ruimte_tot(+) - TRUNC(rsv.res_rsv_ruimte_tot(+))) * 24 >= COALESCE(" + safe_van + ", rr.res_ruimte_begintijd, " + S("res_t1") + ") " // Vergelijk fractionele uren
                + "    AND (rsv.res_rsv_ruimte_van(+) - TRUNC(rsv.res_rsv_ruimte_van(+))) * 24 <= COALESCE(" + safe_tot + ", rr.res_ruimte_eindtijd, "  + S("res_t2") + ") " // Vergelijk fractionele uren
                + "    AND rar.alg_ruimte_key = plts.alg_ruimte_key"
                + "    AND plts.alg_onroerendgoed_keys = plaan.alg_onroerendgoed_keys"
                + "    AND plts.alg_type = plaan.alg_type"
                + "    AND plts.alg_gebouw_key = " + p_gebouw_key
                + (p_floor_key > -1 ? " AND plts.alg_verdieping_key = " + p_floor_key : "")
                + "    AND plts.alg_type = 'R'"
                + "    AND plts.alg_verdieping_key = v.alg_verdieping_key"
                + (p_alglevel > -1 ? " AND v.alg_verdieping_key IN"
                                   + "     (SELECT alg_verdieping_key"
                                   + "        FROM fac_v_my_floors"
                                   + "       WHERE prs_perslid_key = " + user_key
                                   + "         AND niveau = " + p_alglevel
                                   + "     )"
                                   : "")
                + "    AND rd.ins_discipline_key = rr.res_discipline_key"
                + (p_disc_key_arr.length > 0 ? " AND rr.res_discipline_key IN (" + p_disc_key_arr.join(",") + ")"
                                   : " AND rr.res_discipline_key IN"
                                   + "     (SELECT res_discipline_key"
                                   + "        FROM res_activiteitdiscipline"
                                   + "       WHERE res_activiteit_key = " + p_act_key
                                   + "     )"
                  )
                + "  GROUP BY rr.res_ruimte_key"
                + "         , rr.res_ruimte_nr"
                + "         , rr.res_ruimte_omschrijving"
                + "         , plaan.alg_plaatsaanduiding"
                + "         , rr.res_discipline_key"
                + "         , v.alg_verdieping_omschrijving"
                + "         , rr.res_ruimte_image"
                + (onlyfree ? " HAVING COUNT (rsv.res_ruimte_key) = 0" : ""); // Alleen beschikbare ruimtes (met bezet = 0)
        return sql;
    },

    // Bepaal een (kleurings)class obv de bezetting tov de capaciteit voor een ruimte(s)
    // Hier gaan we niet op uren kijken maar op de beschikbaarheid van een ruimte over de dag.
    bezettings_class_ruimte: function (p_bezet, p_capaciteit, p_minimum)
    {
        var lclass = "";
        __Log('bezet:'+p_bezet+' capaciteit:'+p_capaciteit+' minimum:'+p_minimum)
        if      (p_bezet == 0)                          { lclass = "beschikb100"; }
        else if (p_bezet == p_capaciteit)               { lclass = "beschikb0";   }
        else if (p_bezet >= p_capaciteit - p_minimum*2) { lclass = "beschikb10";  }
        else                                            { lclass = "beschikb50";  }
        return lclass;
    },

    // Geef de beschikbare intervallen uit p_bloktijden op p_resdate van p_res_ruimte_key, "" indien onbeschikbaar
    getIntervalString: function (p_res_ruimte_key, p_resdate, p_bloktijden)
    {
        var lres="";
        var l_bloktijden = p_bloktijden.slice(0);
        // bloktijden eerst resetten (snap niet waarom, ik heb toch een kopie?) JGL?
        for (var i = 0; i < l_bloktijden.length; i++)
        {
            l_bloktijden[i].bezet = false;
        }
        var lsql = "SELECT rm.res_reservering_key"
                 + "     , rm.res_rsv_ruimte_volgnr"
                 + "     , rm.res_rsv_ruimte_key"
                 + "     , rm.res_rsv_ruimte_omschrijving"
                 + "     , rm.res_rsv_ruimte_van"
                 + "     , rm.res_rsv_ruimte_tot"
                 + "     , 0 res_disc_params_preposttime"
                 + "  FROM res_rsv_ruimte rm"
                 + "     , res_ruimte_opstelling ro"
                 + " WHERE rm.res_ruimte_opstel_key = ro.res_ruimte_opstel_key"
                 + "   AND rm.res_rsv_ruimte_van < {0}".format(p_resdate.endToSQL())
                 + "   AND rm.res_rsv_ruimte_tot > {0}".format(p_resdate.beginToSQL())
                 + "   AND ro.res_ruimte_key = " + p_res_ruimte_key
                 + "   AND rm.res_rsv_ruimte_verwijder IS NULL"
                 + "   AND rm.res_rsv_ruimte_dirtlevel = 0"
                 + " ORDER BY rm.res_rsv_ruimte_van"; // Eerste vooraan.

        // Bekijk voor dit object voor deze dag welke van de intervallen al bezet zijn
        // en welke dus nog niet

        var loRs = Oracle.Execute(lsql);
        while (!loRs.Eof)
        {
            var van = new Date(loRs("res_rsv_ruimte_van").Value);
            var tot = new Date(loRs("res_rsv_ruimte_tot").Value);
            for (var i = 0; i < l_bloktijden.length; i++)
            {
                if (van < l_bloktijden[i].einddatum && tot > l_bloktijden[i].startdatum)
                {
                    l_bloktijden[i].bezet = true;
                }
            }
            loRs.MoveNext();
        }
        loRs.Close();

        for (var i = 0; i < l_bloktijden.length; i++)
        {
            if (!l_bloktijden[i].bezet)
                lres += l_bloktijden[i].name +" | ";
        }
        if (lres.substr(lres.length-3, 3) == " | ")
            lres = lres.substr(0, lres.length-3);
        else
            lres = "";

        return lres;
    }

}
%>
