Treat partially paid expired orders as overpaid orders (Z#23147757) (#3990)

* Treat partially paid expired orders as overpaid orders (Z#23147757)

* Use is_overpaid from annotate_overpayments in OrderFilterForm

* Revert change to pending sum

* Show warning on order page

---------

Co-authored-by: Mira Weller <weller@rami.io>
This commit is contained in:
Raphael Michel
2024-03-22 10:17:51 +01:00
committed by GitHub
parent e4e0bd7ca0
commit 2d8fba7d7c
3 changed files with 12 additions and 8 deletions

View File

@@ -451,9 +451,9 @@ class Order(LockModel, LoggedModel):
if results:
qs = qs.annotate(
is_overpaid=Case(
When(~Q(status=Order.STATUS_CANCELED) & Q(pending_sum_t__lt=-1e-8),
When(~Q(status__in=(Order.STATUS_CANCELED, Order.STATUS_EXPIRED)) & Q(pending_sum_t__lt=-1e-8),
then=Value(1)),
When(Q(status=Order.STATUS_CANCELED) & Q(pending_sum_rc__lt=-1e-8),
When(Q(status__in=(Order.STATUS_CANCELED, Order.STATUS_EXPIRED)) & Q(pending_sum_rc__lt=-1e-8),
then=Value(1)),
default=Value(0),
output_field=models.IntegerField()
@@ -468,7 +468,7 @@ class Order(LockModel, LoggedModel):
is_underpaid=Case(
When(Q(status=Order.STATUS_PAID) & Q(pending_sum_t__gt=1e-8),
then=Value(1)),
When(Q(status=Order.STATUS_CANCELED) & Q(pending_sum_rc__gt=1e-8),
When(Q(status__in=(Order.STATUS_CANCELED, Order.STATUS_EXPIRED)) & Q(pending_sum_rc__gt=1e-8),
then=Value(1)),
default=Value(0),
output_field=models.IntegerField()

View File

@@ -309,11 +309,8 @@ class OrderFilterForm(FilterForm):
elif s in ('p', 'n', 'e', 'c', 'r'):
qs = qs.filter(status=s)
elif s == 'overpaid':
qs = Order.annotate_overpayments(qs, refunds=False, results=False, sums=True)
qs = qs.filter(
Q(~Q(status=Order.STATUS_CANCELED) & Q(pending_sum_t__lt=0))
| Q(Q(status=Order.STATUS_CANCELED) & Q(pending_sum_rc__lt=0))
)
qs = Order.annotate_overpayments(qs, refunds=False, results=True, sums=False)
qs = qs.filter(is_overpaid=True)
elif s == 'rc':
qs = qs.filter(
cancellation_requests__isnull=False

View File

@@ -124,6 +124,13 @@
</button>
</div>
</form>
{% elif order.status == "e" and order.payment_refund_sum != 0 %}
<div class="alert alert-warning">
{% blocktrans trimmed with amount=order.payment_refund_sum|money:request.event.currency %}
This order is expired even though it received payments of {{ amount }}. You can choose to refund
the money below or reactivate it by extending the payment deadline.
{% endblocktrans %}
</div>
{% endif %}
<div class="row">