Esempio n. 1
0
def get_suggestions(filters, limit=None):
    blocked_rooms = get_blocked_rooms(filters['start_dt'], filters['end_dt'], [BlockedRoomState.accepted])
    rooms = [room for room in search_for_rooms(filters, availability=False) if room not in blocked_rooms]
    if filters['repeat_frequency'] == RepeatFrequency.NEVER:
        suggestions = sort_suggestions(get_single_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'],
                                                                      limit=limit))
    else:
        suggestions = sort_suggestions(get_recurring_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'],
                                                                         filters['repeat_frequency'],
                                                                         filters['repeat_interval'], limit=limit))
    for entry in suggestions:
        entry['room_id'] = entry.pop('room').id
    return suggestions
Esempio n. 2
0
def get_suggestions(filters, limit=None):
    blocked_rooms = get_blocked_rooms(filters['start_dt'], filters['end_dt'], [BlockedRoomState.accepted])
    rooms = [room for room in search_for_rooms(filters, availability=False) if room not in blocked_rooms]
    if filters['repeat_frequency'] == RepeatFrequency.NEVER:
        suggestions = sort_suggestions(get_single_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'],
                                                                      limit=limit))
    else:
        suggestions = sort_suggestions(get_recurring_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'],
                                                                         filters['repeat_frequency'],
                                                                         filters['repeat_interval'], limit=limit))
    for entry in suggestions:
        entry['room_id'] = entry.pop('room').id
    return suggestions
Esempio n. 3
0
    def _process(self, args):
        filter_availability = all(x in args for x in ('start_dt', 'end_dt', 'repeat_frequency', 'repeat_interval'))
        only_unavailable = args.pop('unavailable')
        admin_override_enabled = args.pop('admin_override_enabled')
        if not filter_availability:
            availability = None
            if only_unavailable:
                raise UnprocessableEntity('Required data to filter by availability is not present')
        else:
            availability = not only_unavailable
        search_query = search_for_rooms(args, allow_admin=admin_override_enabled, availability=availability)
        rooms = [(id_, room_name) for id_, room_name, in search_query.with_entities(Room.id, Room.full_name)]

        # We can't filter by blocking's acl in the search_query, so we need to adjust the results
        rooms = self._adjust_blockings(rooms, args, availability)
        room_ids = [room[0] for room in rooms]
        if filter_availability:
            room_ids_without_availability_filter = [
                id_ for id_, in search_for_rooms(args, allow_admin=admin_override_enabled).with_entities(Room.id)
            ]
        else:
            room_ids_without_availability_filter = room_ids
        return jsonify(rooms=room_ids, rooms_without_availability_filter=room_ids_without_availability_filter,
                       total=len(room_ids_without_availability_filter), availability_days=self._get_date_range(args))
Esempio n. 4
0
def test_search_for_rooms_with_entities(dummy_room, dummy_user):
    session.set_session_user(dummy_user)
    assert search_for_rooms({}).with_entities(
        Room.id, Room.full_name).one() == (dummy_room.id, '1/2-3')
Esempio n. 5
0
def test_search_for_rooms(dummy_room, dummy_user):
    session.set_session_user(dummy_user)
    assert search_for_rooms({}).one() == dummy_room