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
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
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)
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)
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)
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)
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) ])
def _process(self): return jsonify(rooms_schema.dump(self.room, many=False))
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)