Fix marking an overpaid order as paid manually

This commit is contained in:
Raphael Michel
2018-11-20 10:37:08 +01:00
parent d4c1fcf838
commit aee44a3284
2 changed files with 24 additions and 1 deletions

View File

@@ -673,7 +673,7 @@ class OrderTransition(OrderView):
def post(self, *args, **kwargs): def post(self, *args, **kwargs):
to = self.request.POST.get('status', '') to = self.request.POST.get('status', '')
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p' and self.mark_paid_form.is_valid(): if self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and to == 'p' and self.mark_paid_form.is_valid():
ps = self.order.pending_sum ps = max(0, self.order.pending_sum)
try: try:
p = self.order.payments.get( p = self.order.payments.get(
state__in=(OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED), state__in=(OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED),

View File

@@ -587,6 +587,29 @@ def test_order_mark_paid_blocked(client, env):
assert o.status == Order.STATUS_EXPIRED assert o.status == Order.STATUS_EXPIRED
@pytest.mark.django_db
def test_order_mark_paid_overpaid_exired(client, env):
o = Order.objects.get(id=env[2].id)
o.status = Order.STATUS_EXPIRED
o.expires = now() - timedelta(days=5)
o.save()
o.payments.create(state=OrderPayment.PAYMENT_STATE_CONFIRMED, amount=o.total * 2)
assert o.pending_sum == -1 * o.total
q = Quota.objects.create(event=env[0], size=0)
q.items.add(env[3])
client.login(email='dummy@dummy.dummy', password='dummy')
response = client.post('/control/event/dummy/dummy/orders/FOO/transition', {
'status': 'p',
'force': 'on'
}, follow=True)
assert 'alert-success' in response.rendered_content
o = Order.objects.get(id=env[2].id)
assert o.status == Order.STATUS_PAID
assert o.payments.last().amount == 0
assert o.pending_sum == -1 * o.total
@pytest.mark.django_db @pytest.mark.django_db
def test_order_mark_paid_forced(client, env): def test_order_mark_paid_forced(client, env):
o = Order.objects.get(id=env[2].id) o = Order.objects.get(id=env[2].id)