paid_invoices_by_date now counts invoices with a $0 value. Fixes #96
This commit is contained in:
parent
922a7ff1d9
commit
f0ab1f944f
1 changed files with 18 additions and 5 deletions
|
@ -2,6 +2,7 @@ import forms
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import datetime
|
import datetime
|
||||||
|
import itertools
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
|
@ -318,21 +319,33 @@ def paid_invoices_by_date(request, form):
|
||||||
categories = form.cleaned_data["category"]
|
categories = form.cleaned_data["category"]
|
||||||
|
|
||||||
invoices = commerce.Invoice.objects.filter(
|
invoices = commerce.Invoice.objects.filter(
|
||||||
Q(lineitem__product__in=products) | Q(lineitem__product__category__in=categories),
|
(
|
||||||
|
Q(lineitem__product__in=products) |
|
||||||
|
Q(lineitem__product__category__in=categories)
|
||||||
|
),
|
||||||
status=commerce.Invoice.STATUS_PAID,
|
status=commerce.Invoice.STATUS_PAID,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Invoices with payments will be paid at the time of their latest payment
|
||||||
payments = commerce.PaymentBase.objects.all()
|
payments = commerce.PaymentBase.objects.all()
|
||||||
payments = payments.filter(
|
payments = payments.filter(
|
||||||
invoice__in=invoices,
|
invoice__in=invoices,
|
||||||
)
|
)
|
||||||
payments = payments.order_by("invoice")
|
payments = payments.order_by("invoice")
|
||||||
invoice_max_time = payments.values("invoice").annotate(max_time=Max("time"))
|
invoice_max_time = payments.values("invoice").annotate(
|
||||||
|
max_time=Max("time")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Zero-value invoices will have no payments, so they're paid at issue time
|
||||||
|
zero_value_invoices = invoices.filter(value=0)
|
||||||
|
|
||||||
|
times = itertools.chain(
|
||||||
|
(line["max_time"] for line in invoice_max_time),
|
||||||
|
(invoice.issue_time for invoice in zero_value_invoices),
|
||||||
|
)
|
||||||
|
|
||||||
by_date = collections.defaultdict(int)
|
by_date = collections.defaultdict(int)
|
||||||
|
for time in times:
|
||||||
for line in invoice_max_time:
|
|
||||||
time = line["max_time"]
|
|
||||||
date = datetime.datetime(
|
date = datetime.datetime(
|
||||||
year=time.year, month=time.month, day=time.day
|
year=time.year, month=time.month, day=time.day
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue