Cancelling events: Fix incorrect refund amount in emails

This commit is contained in:
Raphael Michel
2020-03-06 18:09:38 +01:00
parent 4f6712ccbe
commit b7528ae1cf
2 changed files with 27 additions and 8 deletions

View File

@@ -150,8 +150,6 @@ def cancel_event(self, event: Event, subevent: int, auto_refund: bool, keep_fee_
for o in orders_to_cancel.only('id', 'total'):
try:
refund_amount = Decimal('0.00')
fee = Decimal('0.00')
if keep_fees:
fee += o.fees.filter(
@@ -167,6 +165,8 @@ def cancel_event(self, event: Event, subevent: int, auto_refund: bool, keep_fee_
fee = round_decimal(min(fee, o.payment_refund_sum), event.currency)
_cancel_order(o.pk, user, send_mail=False, cancellation_fee=fee)
refund_amount = o.payment_refund_sum
if auto_refund:
_try_auto_refund(o.pk)
@@ -182,7 +182,6 @@ def cancel_event(self, event: Event, subevent: int, auto_refund: bool, keep_fee_
for o in orders_to_change.values_list('id', flat=True):
with transaction.atomic():
o = event.orders.select_for_update().get(pk=o)
refund_amount = Decimal('0.00')
total = Decimal('0.00')
positions = []
@@ -210,6 +209,8 @@ def cancel_event(self, event: Event, subevent: int, auto_refund: bool, keep_fee_
ocm.add_fee(f)
ocm.commit()
refund_amount = o.payment_refund_sum - o.total
if auto_refund:
_try_auto_refund(o.pk)

View File

@@ -43,15 +43,25 @@ class EventCancelTests(TestCase):
@classscope(attr='o')
def test_cancel_send_mail(self):
gc = self.o.issued_gift_cards.create(currency="EUR")
self.order.payments.create(
amount=Decimal('46.00'),
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
provider='giftcard',
info='{"gift_card": %d}' % gc.pk
)
self.order.status = Order.STATUS_PAID
self.order.save()
cancel_event(
self.event.pk, subevent=None,
auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00",
keep_fees=True, send=True, send_subject="Event canceled", send_message="Event canceled :-(",
keep_fees=True, send=True, send_subject="Event canceled", send_message="Event canceled :-( {refund_amount}",
user=None
)
assert len(djmail.outbox) == 1
self.order.refresh_from_db()
assert self.order.status == Order.STATUS_CANCELED
assert '46.00' in djmail.outbox[0].body
@classscope(attr='o')
def test_cancel_send_mail_attendees(self):
@@ -265,16 +275,24 @@ class SubEventCancelTests(TestCase):
@classscope(attr='o')
def test_cancel_mixed_order(self):
gc = self.o.issued_gift_cards.create(currency="EUR")
self.order.payments.create(
amount=Decimal('46.00'),
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
provider='giftcard',
info='{"gift_card": %d}' % gc.pk
)
self.order.status = Order.STATUS_PAID
self.order.save()
cancel_event(
self.event.pk, subevent=self.se1.pk,
auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00",
keep_fees=True, send=True, send_subject="Event canceled", send_message="Event canceled :-(",
keep_fees=True, send=True, send_subject="Event canceled", send_message="Event canceled :-( {refund_amount}",
user=None
)
self.order.refresh_from_db()
assert self.order.status == Order.STATUS_PENDING
assert self.order.positions.filter(subevent=self.se2).count() == 1
assert self.order.positions.filter(subevent=self.se1).count() == 0
assert self.order.status == Order.STATUS_PAID
assert '23.00' in djmail.outbox[0].body
@classscope(attr='o')
def test_cancel_partially_keep_fees(self):