OrderChangeManager: Do not mark order pending when adjusting price to actual payment

This commit is contained in:
Raphael Michel
2018-10-31 10:42:44 +01:00
parent a39b207ad5
commit c8cc527aee
2 changed files with 28 additions and 6 deletions

View File

@@ -922,12 +922,13 @@ class OrderChangeManager:
def _check_paid_price_change(self):
if self.order.status == Order.STATUS_PAID and self._totaldiff > 0:
self.order.status = Order.STATUS_PENDING
self.order.set_expires(
now(),
self.order.event.subevents.filter(id__in=self.order.positions.values_list('subevent_id', flat=True))
)
self.order.save()
if self.order.pending_sum > Decimal('0.00'):
self.order.status = Order.STATUS_PENDING
self.order.set_expires(
now(),
self.order.event.subevents.filter(id__in=self.order.positions.values_list('subevent_id', flat=True))
)
self.order.save()
elif self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and self._totaldiff < 0:
if self.order.pending_sum <= Decimal('0.00'):
self.order.status = Order.STATUS_PAID

View File

@@ -777,6 +777,27 @@ class OrderChangeManagerTests(TestCase):
assert self.order.pending_sum == Decimal('2.00')
assert self.order.status == Order.STATUS_PENDING
def test_change_paid_stays_paid_when_overpaid(self):
self.order.status = Order.STATUS_PAID
self.order.save()
self.order.payments.create(
provider='manual',
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
amount=self.order.total,
)
self.order.payments.create(
provider='manual',
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
amount=Decimal('2.00'),
)
assert self.order.pending_sum == Decimal('-2.00')
self.ocm.change_price(self.op1, Decimal('25.00'))
self.ocm.commit()
self.order.refresh_from_db()
assert self.order.total == Decimal('48.00')
assert self.order.pending_sum == Decimal('0.00')
assert self.order.status == Order.STATUS_PAID
def test_add_item_quota_required(self):
self.quota.delete()
with self.assertRaises(OrderError):