示例#1
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')
     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, availability=availability)
     room_ids = [id_ for id_, in search_query.with_entities(Room.id)]
     if filter_availability:
         room_ids_without_availability_filter = [
             id_ for id_, in search_for_rooms(args).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))
示例#2
0
文件: rooms.py 项目: pferreir/indico
 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')
     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, availability=availability)
     room_ids = [id_ for id_, in search_query.with_entities(Room.id)]
     total = len(room_ids) if not filter_availability else search_for_rooms(args).count()
     return jsonify(rooms=room_ids, total=total, availability_days=self._get_date_range(args))
示例#3
0
    def _process(self, args):
        query = search_for_rooms(args, availability=not args['unavailable'])
        if 'limit' in args:
            query = query.limit(args.pop('limit'))

        rooms = query.all()
        if 'additional_room_ids' in args:
            rooms.extend(
                Room.query.filter(Room.is_active,
                                  Room.id.in_(
                                      args.pop('additional_room_ids'))))

        date_range, availability = get_rooms_availability(
            rooms,
            args['start_dt'],
            args['end_dt'],
            args['repeat_frequency'],
            args['repeat_interval'],
            flexibility=0)
        date_range = [dt.isoformat() for dt in date_range]

        for data in availability.viewvalues():
            # add additional helpful attributes
            data.update({
                'num_days_available':
                len(date_range) - len(data['conflicts']),
                'all_days_available':
                not data['conflicts']
            })

        serialized = _serialize_availability(availability)
        return jsonify_data(flash=False,
                            availability=serialized.items(),
                            date_range=date_range)
示例#4
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, 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 = get_number_of_skipped_days_for_rooms(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
示例#5
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, 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 = get_number_of_skipped_days_for_rooms(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
示例#6
0
文件: rooms.py 项目: adityamj/indico
    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))
示例#7
0
def get_suggestions(filters, limit=None):
    room_filters = {key: value for key, value in filters.iteritems()
                    if key in ('capacity', 'equipment', 'building', 'text', 'floor')}

    query = search_for_rooms(room_filters)
    query = query.filter(~Room.filter_available(filters['start_dt'], filters['end_dt'],
                                                (filters['repeat_frequency'], filters['repeat_interval'])))
    rooms = query.all()
    if filters['repeat_frequency'] == RepeatFrequency.NEVER:
        return sort_suggestions(get_single_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'],
                                                               limit=limit))
    else:
        return get_number_of_skipped_days_for_rooms(rooms, filters['start_dt'], filters['end_dt'],
                                                    filters['repeat_frequency'], filters['repeat_interval'],
                                                    limit=limit)