def _process(self, args): new_booking_data = { 'booking_reason': args['booking_reason'], 'room_usage': 'current_user' if args.get('user_id', None) is None else 'someone', 'booked_for_user': User.get(args.get('user_id', session.user.id)), 'start_dt': args['start_dt'], 'end_dt': args['end_dt'], 'repeat_frequency': args['repeat_frequency'], 'repeat_interval': args['repeat_interval'], } additional_booking_attrs = {} if not should_split_booking(self.booking, new_booking_data): has_date_changed = not has_same_dates(self.booking, new_booking_data) room = self.booking.room self.booking.modify(new_booking_data, session.user) if (has_date_changed and not room.can_book(session.user, allow_admin=False) and room.can_prebook(session.user, allow_admin=False) and self.booking.is_accepted): self.booking.reset_approval(session.user) else: new_booking = split_booking(self.booking, new_booking_data) additional_booking_attrs['new_booking_id'] = new_booking.id db.session.flush() today = date.today() calendar = get_room_calendar(args['start_dt'] or today, args['end_dt'] or today, [args['room_id']]) return jsonify( booking=dict(_serialize_booking_details(self.booking), **additional_booking_attrs), room_calendar=_serialize_availability(calendar).values())
def _process(self, args): data = { 'booking_reason': args['booking_reason'], 'room_usage': 'current_user' if args.get('user_id', None) is None else 'someone', 'booked_for_user': User.get(args.get('user_id', session.user.id)), 'start_dt': args['start_dt'], 'end_dt': args['end_dt'], 'repeat_frequency': args['repeat_frequency'], 'repeat_interval': args['repeat_interval'], } has_date_changed = not has_same_dates(self.booking, data) self.booking.modify(data, session.user) room = self.booking.room if (has_date_changed and not room.can_book(session.user, allow_admin=False) and room.can_prebook(session.user, allow_admin=False) and self.booking.is_accepted): self.booking.reset_approval(session.user) db.session.flush() start_date = args['start_dt'] end_date = args['end_dt'] calendar = get_room_calendar(start_date or date.today(), end_date or date.today(), [args['room_id']]) return jsonify( booking=_serialize_booking_details(self.booking), room_calendar=_serialize_availability(calendar).values())
def populate_db(): """Populate DB with fun stuff""" # set tileserver URL rb_settings.set( 'tileserver_url', 'https://indico-maps.web.cern.ch/styles/cern/{z}/{x}/{y}.png') location = Location(name="CERN") owner = User.get(0) for area in MAP_AREAS: map_area = MapArea(name=area[0], top_left_latitude=area[1], top_left_longitude=area[2], bottom_right_latitude=area[3], bottom_right_longitude=area[4]) db.session.add(map_area) for name in shower_names: # split name in parts building, floor, number = ROOM_RE.match(name).groups() # random number of showers, since we don't have time # to figure out what it really is num_showers = random.choice([2, 3, 4]) file_name = './photos/{}.png'.format(name.replace('/', '_')) photo_data = None # Check if there's a photo in './photos/xxxx' and use it if os.path.exists(file_name): with open(file_name, 'r') as f: photo_data = f.read() else: print cformat("%{yellow}!%{reset} Photo for {} not found!").format( name) for num_shower in range(num_showers): room = Room(building=building, floor=floor, number=number, verbose_name="Shower {}".format(num_shower + 1), location=location, division='CERN', owner=owner, capacity=1) if photo_data: room.photo = Photo(data=photo_data) if building in GEO_INFO: room.latitude, room.longitude = GEO_INFO[building] db.session.add(room) db.session.commit()
def restore(event_id, user_id, message): """Restore a deleted event.""" event = Event.get(event_id) user = User.get(user_id) if user_id else None if event is None: click.secho('This event does not exist', fg='red') sys.exit(1) elif not event.is_deleted: click.secho('This event is not deleted', fg='yellow') sys.exit(1) event.restore(message, user) signals.core.after_process.send() db.session.commit() click.secho(f'Event undeleted: "{event.title}"', fg='green')
def restore(event_id, user_id, message): """Restore a deleted event.""" event = Event.get(event_id) user = User.get(user_id) if user_id else None if event is None: click.secho('This event does not exist', fg='red') sys.exit(1) elif not event.is_deleted: click.secho('This event is not deleted', fg='yellow') sys.exit(1) event.is_deleted = False text = f'Event restored: {message}' if message else 'Event restored' event.log(EventLogRealm.event, EventLogKind.positive, 'Event', text, user=user) db.session.commit() click.secho(f'Event undeleted: "{event.title}"', fg='green')
def _process(self, args): data = { 'booking_reason': args['booking_reason'], 'room_usage': 'current_user' if args.get('user_id', None) is None else 'someone', 'booked_for_user': User.get(args.get('user_id', session.user.id)), 'start_dt': args['start_dt'], 'end_dt': args['end_dt'], 'repeat_frequency': args['repeat_frequency'], 'repeat_interval': args['repeat_interval'], } self.booking.modify(data, session.user) db.session.flush() start_date = args['start_dt'] end_date = args['end_dt'] calendar = get_room_calendar(start_date or date.today(), end_date or date.today(), [args['room_id']]) return jsonify(booking=_serialize_booking_details(self.booking), room_calendar=_serialize_availability(calendar).values())
def _process(self, args): data = { 'booking_reason': args['booking_reason'], 'room_usage': 'current_user' if args.get('user_id', None) is None else 'someone', 'booked_for_user': User.get(args.get('user_id', session.user.id)), 'start_dt': args['start_dt'], 'end_dt': args['end_dt'], 'repeat_frequency': args['repeat_frequency'], 'repeat_interval': args['repeat_interval'], } self.booking.modify(data, session.user) db.session.flush() start_date = args['start_dt'] end_date = args['end_dt'] calendar = get_room_calendar(start_date or date.today(), end_date or date.today(), [args['room_id']]) return jsonify( booking=_serialize_booking_details(self.booking), room_calendar=_serialize_availability(calendar).values())
def _deserialize(self, value, attr, data, **kwargs): return User.get(value, is_deleted=False)