diff --git a/src/shop/admin.py b/src/shop/admin.py index 1605d336..0a226834 100644 --- a/src/shop/admin.py +++ b/src/shop/admin.py @@ -163,7 +163,7 @@ class OrderAdmin(admin.ModelAdmin): inlines = [ProductInline, ShopTicketInline] - actions = ['mark_order_as_paid', 'mark_order_as_refunded'] + actions = ['mark_order_as_paid', 'mark_order_as_refunded', 'mark_order_as_cancelled'] def mark_order_as_paid(self, request, queryset): for order in queryset.filter(paid=False): @@ -175,6 +175,11 @@ class OrderAdmin(admin.ModelAdmin): order.mark_as_refunded(request) mark_order_as_refunded.description = 'Mark order(s) as refunded' + def mark_order_as_cancelled(self, request, queryset): + for order in queryset.filter(cancelled=False): + order.mark_as_cancelled(request) + mark_order_as_cancelled.description = 'Mark order(s) as cancelled' + def get_user_email(obj): return obj.order.user.email diff --git a/src/shop/models.py b/src/shop/models.py index e4ee2751..a30bfb6e 100644 --- a/src/shop/models.py +++ b/src/shop/models.py @@ -227,6 +227,13 @@ class Order(CreatedUpdatedModel): messages.success(request, "Order %s marked as refunded, no tickets to delete" % self.pk) self.save() + def mark_as_cancelled(self, request): + if self.paid: + messages.error(request, "Order %s is paid, cannot cancel a paid order!" % self.pk) + else: + self.cancelled = True + self.save() + def is_not_handed_out(self): if self.orderproductrelation_set.filter(handed_out=True).count() == 0: return True