Exemple #1
0
def _serialize_availability(availability):
    for data in availability.viewvalues():
        data['room'] = rooms_schema.dump(data['room'], many=False).data
        data['blockings'] = serialize_blockings(data['blockings'])
        data['nonbookable_periods'] = serialize_nonbookable_periods(
            data['nonbookable_periods'])
        data['unbookable_hours'] = serialize_unbookable_hours(
            data['unbookable_hours'])
        data.update({
            k: serialize_occurrences(data[k]) if k in data else []
            for k in [
                'candidates', 'pre_bookings', 'bookings', 'conflicts',
                'pre_conflicts'
            ]
        })
    return availability
Exemple #2
0
def get_buildings():
    buildings = defaultdict(dict)
    for room in Room.query.filter_by(is_active=True):
        buildings[room.building].setdefault('rooms', []).append(room)

    buildings_tmp = defaultdict(dict)
    for building_name, building_data in buildings.iteritems():
        room_with_lat_lon = next((r for r in building_data['rooms'] if r.longitude and r.latitude), None)
        if not room_with_lat_lon:
            continue

        buildings_tmp[building_name]['rooms'] = rooms_schema.dump(building_data['rooms']).data
        buildings_tmp[building_name]['floors'] = sorted({room.floor for room in building_data['rooms']})
        buildings_tmp[building_name]['number'] = building_name
        buildings_tmp[building_name]['longitude'] = room_with_lat_lon.longitude
        buildings_tmp[building_name]['latitude'] = room_with_lat_lon.latitude
    return buildings_tmp
Exemple #3
0
 def _process(self, args):
     rooms = Room.query.filter(Room.is_active,
                               Room.id.in_(args.pop('room_ids')))
     date_range, availability = get_rooms_availability(rooms, **args)
     date_range = [dt.isoformat() for dt in date_range]
     for room_id in availability:
         data = availability[room_id]
         data['room'] = rooms_schema.dump(data['room'], many=False).data
         data.update({
             k: serialize_occurrences(data[k])
             for k in [
                 'candidates', 'pre_bookings', 'bookings', 'conflicts',
                 'pre_conflicts'
             ]
         })
     return jsonify_data(flash=False,
                         availability=availability,
                         date_range=date_range)
Exemple #4
0
    def _process(self, args):
        query = search_for_rooms(args, only_available=True)
        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 room_id in availability:
            data = availability[room_id]
            data['room'] = rooms_schema.dump(data['room'], many=False).data
            data.update({
                k: serialize_occurrences(data[k])
                for k in [
                    'candidates', 'pre_bookings', 'bookings', 'conflicts',
                    'pre_conflicts'
                ]
            })
            data.update({
                'num_days_available':
                len(date_range) - len(data['conflicts']),
                'all_days_available':
                not data['conflicts']
            })
        return jsonify_data(flash=False,
                            availability=availability,
                            date_range=date_range)
Exemple #5
0
 def _process(self):
     rooms = (Room.query
              .filter_by(is_active=True)
              .options(subqueryload('available_equipment').load_only('id'))
              .all())
     return jsonify(rooms_schema.dump(rooms).data)
Exemple #6
0
 def _process(self, args):
     filter_availability = args.get('start_dt') and args.get('end_dt')
     query = search_for_rooms(args, only_available=filter_availability)
     query = query.limit(args['limit']).offset(args['offset'])
     rooms, total = with_total_rows(query)
     return jsonify(total=total, rooms=rooms_schema.dump(rooms).data)
Exemple #7
0
 def _process(self, args):
     return jsonify([
         dict(suggestion,
              room=rooms_schema.dump(suggestion['room'], many=False).data)
         for suggestion in get_suggestions(args, limit=NUM_SUGGESTIONS)
     ])
Exemple #8
0
 def _process(self):
     return jsonify(rooms_schema.dump(self.room, many=False))
Exemple #9
0
 def _process(self):
     rooms = (Room.query
              .filter_by(is_active=True)
              .options(subqueryload('available_equipment').load_only('id'))
              .all())
     return jsonify(rooms_schema.dump(rooms).data)