Skip to content
Snippets Groups Projects
Unverified Commit 37591e9f authored by Sandro Lutz's avatar Sandro Lutz
Browse files

Add option to renew reservation

parent e4ec0e36
No related branches found
No related tags found
No related merge requests found
Pipeline #70049 passed
......@@ -2,7 +2,7 @@ import threading
from datetime import datetime, timedelta
from sqlalchemy import DateTime, cast, func
from flask import current_app
from bot.reminders import add_reservation_reminder, remove_reservation_reminder
from bot.reminders import add_reservation_reminder, remove_reservation_reminder, update_reservation_reminder
from app import db
from app.models import Reservation
from .lock import Lock
......@@ -36,6 +36,23 @@ class ReservationController():
return reservation
@classmethod
def extend(cls, reservation):
with cls.workplaces_lock:
user = reservation.user
if not user.is_confirmed:
raise UserNotConfirmedError
if user.is_blocked:
raise UserBlockedError
reservation.time_end = datetime.now() + current_app.config.get('RESERVATION_DURATION', timedelta(hours=1))
db.session.commit()
update_reservation_reminder(reservation)
@staticmethod
def get(reservation_id):
return Reservation.query.get(reservation_id)
......
......@@ -9,7 +9,7 @@ from app.models import User
from .lock import Lock
from .reservation import ReservationController
from .record import RecordController
from ..exceptions import ActiveReservationExistsError, \
from ..exceptions import ActiveReservationExistsError, NoActiveReservationExistsError, \
ActiveRecordExistsError, NoActiveRecordError, ReservationExpiredError, \
NoFreeWorkplaceError, UserRegistrationInvalidDataError, TelegramUserAlreadyLinkedError, InvalidUserTokenError
......@@ -160,12 +160,17 @@ class UserController():
@staticmethod
def reserve(user):
if ReservationController.has_active_reservation(user):
raise ActiveReservationExistsError
reservation = ReservationController.get_active_reservation(user)
ReservationController.extend(reservation)
return reservation
if RecordController.has_active_record(user):
raise ActiveRecordExistsError
return ReservationController.create(user)
def extend_reservation(user):
if not ReservationController.has_active_reservation(user):
raise NoActiveReservationExistsError
@staticmethod
def start_record(user):
......
......@@ -21,6 +21,10 @@ class ActiveReservationExistsError(Error):
pass
class NoActiveReservationExistsError(Error):
"""Raised when there is no active reservation for the given user."""
pass
class ActiveRecordExistsError(Error):
"""Raised when there is already an active record
for the given user."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment