diff --git a/app/models/order.py b/app/models/order.py index 6e5391c..b7fe624 100644 --- a/app/models/order.py +++ b/app/models/order.py @@ -132,3 +132,19 @@ class Order(db.Model): def can_modify_payment(self, user_id: int) -> bool: user = User.query.filter_by(id=user_id).first() return user and (user.is_admin() or user == self.courier) + + @staticmethod + def get_by_slug(slug: str) -> "typing.Optional[Order]": + """ + Find an order by slug. Also matches orders by ID if they don't have a slug + """ + order_id = None + try: + order_id = int(slug) + except: + pass + + return Order.query.filter( + (Order.slug == slug) | + ((Order.slug == None) & (Order.id == order_id)) + ).first() diff --git a/app/notification.py b/app/notification.py index 5569f2f..d6cf1cb 100644 --- a/app/notification.py +++ b/app/notification.py @@ -18,7 +18,7 @@ def webhook_text(order: Order) -> typing.Optional[str]: if order.courier is not None: # pylint: disable=C0301, C0209 return " {3} is going to {1}, order <{0}|here>! Deadline in {2} minutes!".format( - url_for("order_bp.order_from_slug", order_slug=order.slug, _external=True), + url_for("order_bp.order_from_slug", order_slug=order.slug or order.id, _external=True), order.location_name, remaining_minutes(order.stoptime), order.courier.username.title(), @@ -28,7 +28,7 @@ def webhook_text(order: Order) -> typing.Optional[str]: return " New order for {}. Deadline in {} minutes. <{}|Open here.>".format( order.location_name, remaining_minutes(order.stoptime), - url_for("order_bp.order_from_slug", order_slug=order.slug, _external=True), + url_for("order_bp.order_from_slug", order_slug=order.slug or order.id, _external=True), ) diff --git a/app/templates/order.html b/app/templates/order.html index 0ad5611..5d9965a 100644 --- a/app/templates/order.html +++ b/app/templates/order.html @@ -23,7 +23,7 @@