Cancel payments if the pending price of the order changes

This commit is contained in:
Raphael Michel
2018-11-20 17:41:33 +01:00
parent 106c8d373d
commit b49b2035bd
2 changed files with 27 additions and 0 deletions

View File

@@ -931,6 +931,21 @@ class OrderChangeManager:
if self.order.pending_sum <= Decimal('0.00'): if self.order.pending_sum <= Decimal('0.00'):
self.order.status = Order.STATUS_PAID self.order.status = Order.STATUS_PAID
self.order.save() self.order.save()
elif self.open_payment:
self.open_payment.state = OrderPayment.PAYMENT_STATE_CANCELED
self.open_payment.save()
self.order.log_action('pretix.event.order.payment.canceled', {
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
}, user=self.user, auth=self.auth)
elif self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and self._totaldiff > 0:
if self.open_payment:
self.open_payment.state = OrderPayment.PAYMENT_STATE_CANCELED
self.open_payment.save()
self.order.log_action('pretix.event.order.payment.canceled', {
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
}, user=self.user, auth=self.auth)
def _check_paid_to_free(self): def _check_paid_to_free(self):
if self.order.total == 0 and (self._totaldiff < 0 or (self.split_order and self.split_order.total > 0)): if self.order.total == 0 and (self._totaldiff < 0 or (self.split_order and self.split_order.total > 0)):

View File

@@ -1103,6 +1103,18 @@ class OrderChangeManagerTests(TestCase):
assert o2.invoice_address != ia assert o2.invoice_address != ia
assert o2.invoice_address.company == 'Sample' assert o2.invoice_address.company == 'Sample'
def test_change_price_of_pending_order_with_payment(self):
self.order.status = Order.STATUS_PENDING
self.order.save()
assert self.order.payments.last().state == OrderPayment.PAYMENT_STATE_CREATED
assert self.order.payments.last().amount == Decimal('46.00')
self.ocm.change_price(self.op1, Decimal('27.00'))
self.ocm.commit()
assert self.order.payments.last().state == OrderPayment.PAYMENT_STATE_CANCELED
assert self.order.payments.last().amount == Decimal('46.00')
def test_split_reverse_charge(self): def test_split_reverse_charge(self):
ia = self._enable_reverse_charge() ia = self._enable_reverse_charge()