mirror of
https://github.com/pretix/pretix.git
synced 2026-08-28 13:34:40 +00:00
OrderChangeManager: Respect addons on cancellation check (Z#23193427) (#5132)
* OrderChangeManager: Respect addons on cancellation check (Z#23193427) * Update src/tests/base/test_orders.py Co-authored-by: luelista <weller@rami.io> --------- Co-authored-by: luelista <weller@rami.io>
This commit is contained in:
co-authored by
luelista
parent
21e5620f3f
commit
c2d5d40be6
@@ -2768,7 +2768,11 @@ class OrderChangeManager:
|
|||||||
|
|
||||||
def _check_complete_cancel(self):
|
def _check_complete_cancel(self):
|
||||||
current = self.order.positions.count()
|
current = self.order.positions.count()
|
||||||
cancels = len([o for o in self._operations if isinstance(o, (self.CancelOperation, self.SplitOperation))])
|
cancels = sum([
|
||||||
|
1 + o.position.addons.count() for o in self._operations if isinstance(o, self.CancelOperation)
|
||||||
|
]) + len([
|
||||||
|
o for o in self._operations if isinstance(o, self.SplitOperation)
|
||||||
|
])
|
||||||
adds = len([o for o in self._operations if isinstance(o, self.AddOperation)])
|
adds = len([o for o in self._operations if isinstance(o, self.AddOperation)])
|
||||||
if current > 0 and current - cancels + adds < 1:
|
if current > 0 and current - cancels + adds < 1:
|
||||||
raise OrderError(self.error_messages['complete_cancel'])
|
raise OrderError(self.error_messages['complete_cancel'])
|
||||||
|
|||||||
@@ -1759,11 +1759,19 @@ class OrderChangeManagerTests(TestCase):
|
|||||||
|
|
||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_cancel_all_in_order(self):
|
def test_cancel_all_in_order(self):
|
||||||
|
self.shirt.category = self.event.categories.create(name='Add-ons', is_addon=True)
|
||||||
|
self.ticket.addons.create(addon_category=self.shirt.category)
|
||||||
|
self.ocm.add_position(self.shirt, None, Decimal('13.00'), addon_to=self.op1)
|
||||||
|
self.ocm.commit()
|
||||||
|
self.order.refresh_from_db()
|
||||||
|
self.ocm = OrderChangeManager(self.order, None)
|
||||||
|
|
||||||
|
assert self.order.positions.count() == 3
|
||||||
self.ocm.cancel(self.op1)
|
self.ocm.cancel(self.op1)
|
||||||
self.ocm.cancel(self.op2)
|
self.ocm.cancel(self.op2)
|
||||||
with self.assertRaises(OrderError):
|
with self.assertRaises(OrderError):
|
||||||
self.ocm.commit()
|
self.ocm.commit()
|
||||||
assert self.order.positions.count() == 2
|
assert self.order.positions.count() == 3
|
||||||
|
|
||||||
@classscope(attr='o')
|
@classscope(attr='o')
|
||||||
def test_empty(self):
|
def test_empty(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user