Пример #1
0
    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())
Пример #2
0
    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())
Пример #3
0
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()
Пример #4
0
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')
Пример #5
0
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')
Пример #6
0
    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())
Пример #7
0
    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())
Пример #8
0
 def _deserialize(self, value, attr, data, **kwargs):
     return User.get(value, is_deleted=False)