Skip to content

Commit

Permalink
Fix invalid Account summary sum when no values
Browse files Browse the repository at this point in the history
  • Loading branch information
alexsierro committed Apr 21, 2024
1 parent 8637528 commit ddfd7bc
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 36 deletions.
56 changes: 32 additions & 24 deletions invoicing/admin.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import csv
import datetime
from decimal import Decimal

from django.contrib import admin, messages
from django.db.models import Sum, Q, F
from django.http import HttpResponse
from django.db.models.functions import Coalesce
from django.forms import DecimalField
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.utils.html import format_html

Expand Down Expand Up @@ -331,18 +335,18 @@ def changelist_view(self, request, extra_context=None):

if year:

total_invoiced = Sum('total_price', filter=(
Q(invoice__date_invoice__year=year)))
total_invoiced = Coalesce(Sum('total_price', filter=(
Q(invoice__date_invoice__year=year))), Decimal(0))

total_paid = Sum('total_price', filter=(
Q(invoice__date_paid__year=year) & Q(invoice__date_invoice__year=year)))
total_paid = Coalesce(Sum('total_price', filter=(
Q(invoice__date_paid__year=year) & Q(invoice__date_invoice__year=year))), Decimal(0))

total_postpaid = Sum('total_price', filter=(
Q(invoice__date_paid__year=year) & Q(invoice__date_invoice__year__lt=year)))
total_postpaid = Coalesce(Sum('total_price', filter=(
Q(invoice__date_paid__year=year) & Q(invoice__date_invoice__year__lt=year))), Decimal(0))

metrics = {
'qty_used': Sum('qty', filter=Q(date__year=year)),
'total_used': Sum('total_price', filter=Q(date__year=year)),
'qty_used': Coalesce(Sum('qty', filter=Q(date__year=year)), float(0)),
'total_used': Coalesce(Sum('total_price', filter=Q(date__year=year)), Decimal(0)),
'total_invoiced': total_invoiced,
'total_paid': total_paid,
'total_diff': total_invoiced - total_paid,
Expand All @@ -354,17 +358,19 @@ def changelist_view(self, request, extra_context=None):

total_invoiced = Sum('total_price', filter=(
Q(invoice__isnull=False)))
total_invoiced = Coalesce(Sum('total_price', filter=(
Q(invoice__isnull=False))), Decimal(0))

total_paid = Sum('total_price', filter=(
Q(invoice__date_paid__isnull=False)))
total_paid = Coalesce(Sum('total_price', filter=(
Q(invoice__date_paid__isnull=False))), Decimal(0))

metrics = {
'qty_used': Sum('qty'),
'total_used': Sum('total_price'),
'total_invoiced': Sum('total_price', filter=(
Q(invoice__isnull=False))),
'total_paid': Sum('total_price', filter=(
Q(invoice__date_paid__isnull=False))),
'qty_used': Coalesce(Sum('qty'), float()),
'total_used': Coalesce(Sum('total_price'), Decimal(0)),
'total_invoiced': Coalesce(Sum('total_price', filter=(
Q(invoice__isnull=False))), Decimal(0)),
'total_paid': Coalesce(Sum('total_price', filter=(
Q(invoice__date_paid__isnull=False))), Decimal(0)),
'total_diff': total_invoiced - total_paid
}

Expand All @@ -375,20 +381,22 @@ def changelist_view(self, request, extra_context=None):
.order_by('-total_used')
)

print(response.context_data['summary'])

response.context_data['summary_total'] = dict(
qs.aggregate(**metrics)
)

# --- Calculate Payment summary
if year:
metrics = {
'amount_due': Sum(F('amount') - F('amount_deduction_machine') - F('amount_deduction_cash'),
filter=Q(date_paid__year=year))
'amount_due': Coalesce(Sum(F('amount') - F('amount_deduction_machine') - F('amount_deduction_cash'),
filter=Q(date_paid__year=year)), Decimal(0))
}

else:
metrics = {
'amount_due': Sum('amount', filter=Q(date_paid__isnull=False))
'amount_due': Coalesce(Sum('amount', filter=Q(date_paid__isnull=False)), Decimal(0))
}

qs = Invoice.objects.all()
Expand All @@ -402,14 +410,14 @@ def changelist_view(self, request, extra_context=None):

if year:
metrics = {
'deduction_cash': Sum('amount_deduction_cash', filter=Q(date_paid__year=year)),
'deduction_machine': Sum('amount_deduction_machine', filter=Q(date_paid__year=year))
'deduction_cash': Coalesce(Sum('amount_deduction_cash', filter=Q(date_paid__year=year)), Decimal(0)),
'deduction_machine': Coalesce(Sum('amount_deduction_machine', filter=Q(date_paid__year=year)), Decimal(0))
}

else:
metrics = {
'deduction_cash': Sum('amount_deduction_cash', filter=Q(date_paid__isnull=False)),
'deduction_machine': Sum('amount_deduction_machine', filter=Q(date_paid__isnull=False)),
'deduction_cash': Coalesce(Sum('amount_deduction_cash', filter=Q(date_paid__isnull=False)), Decimal(0)),
'deduction_machine': Coalesce(Sum('amount_deduction_machine', filter=Q(date_paid__isnull=False)), Decimal(0))
}

qs = Invoice.objects.all()
Expand Down
24 changes: 12 additions & 12 deletions invoicing/templates/admin/account_summary_change_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,21 @@ <h1> {% trans 'Accounts' %} </h1>
<tr class="{% cycle 'row1' 'row2' %}">
<td width="20%"> {{ row.resource__account__number }} </td>
<td width="20%"> {{ row.resource__account__name }} </td>
<td class="la"> {{ row.total_used| default:0 | format_currency }} </td>
<td class="la"> {{ row.total_invoiced | default:0 | format_currency }} </td>
<td class="la"> {{ row.total_paid| default:0 | format_currency }} </td>
<td class="la"> {{ row.total_diff | default:0 | format_currency }} </td>
<td class="la"> {{ row.total_postpaid| default:0 | format_currency }} </td>
<td class="la"> {{ row.total_used | format_currency }} </td>
<td class="la"> {{ row.total_invoiced | format_currency }} </td>
<td class="la"> {{ row.total_paid | format_currency }} </td>
<td class="la"> {{ row.total_diff | format_currency }} </td>
<td class="la"> {{ row.total_postpaid | format_currency }} </td>
</tr>
{% endfor %}
<tr style="font-weight:bold; border-top:2px solid #DDDDDD;">
<td> Total </td>
<td class="la"></td>
<td class="la"> {{ summary_total.total_used | default:0 | format_currency}} </td>
<td class="la"> {{ summary_total.total_invoiced | default:0 | format_currency }} </td>
<td class="la"> {{ summary_total.total_paid | default:0 | format_currency}} </td>
<td class="la"> {{ summary_total.total_diff | default:0 | format_currency}} </td>
<td class="la"> {{ summary_total.total_postpaid | default:0 | format_currency}} </td>
<td class="la"> {{ summary_total.total_used | format_currency}} </td>
<td class="la"> {{ summary_total.total_invoiced | format_currency }} </td>
<td class="la"> {{ summary_total.total_paid | format_currency}} </td>
<td class="la"> {{ summary_total.total_diff | format_currency}} </td>
<td class="la"> {{ summary_total.total_postpaid | format_currency}} </td>
</tr>
</tbody>
</table>
Expand All @@ -68,12 +68,12 @@ <h1> {% trans 'Payments' %} </h1>
{% for row in payement_methods %}
<tr class="{% cycle 'row1' 'row2' %}">
<td> {{ row.payment_method }}</td>
<td class="la"> {{ row.amount_due | default:0 | format_currency}} </td>
<td class="la"> {{ row.amount_due | format_currency}} </td>
</tr>
{% endfor %}
<tr style="font-weight:bold; border-top:2px solid #DDDDDD;">
<td> Total </td>
<td class="la">{{ payment_total | default:0 | format_currency}}</td>
<td class="la">{{ payment_total | format_currency}}</td>

</tr>
</tbody>
Expand Down

0 comments on commit ddfd7bc

Please sign in to comment.