Adds paid invoices by date report

This commit is contained in:
Christopher Neugebauer 2016-09-19 15:03:21 +10:00
parent 851c37508a
commit f41bd9c65b
2 changed files with 47 additions and 1 deletions

View file

@ -1,10 +1,13 @@
import forms import forms
import collections
import datetime
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.db.models import F, Q from django.db.models import F, Q
from django.db.models import Count, Sum from django.db.models import Count, Max, Sum
from django.db.models import Case, When, Value from django.db.models import Case, When, Value
from django.shortcuts import render from django.shortcuts import render
@ -265,6 +268,44 @@ def product_status(request, form):
return ListReport("Inventory", headings, data) return ListReport("Inventory", headings, data)
@report_view("Paid invoices by date", form_type=forms.ProductAndCategoryForm)
def paid_invoices_by_date(request, form):
''' Shows the number of paid invoices containing given products or
categories per day. '''
products = form.cleaned_data["product"]
categories = form.cleaned_data["category"]
invoices = commerce.Invoice.objects.filter(
Q(lineitem__product__in=products) | Q(lineitem__product__category__in=categories),
status=commerce.Invoice.STATUS_PAID,
)
payments = commerce.PaymentBase.objects.all()
payments = payments.filter(
invoice__in=invoices,
)
payments = payments.order_by("invoice")
invoice_max_time = payments.values("invoice").annotate(max_time=Max("time"))
by_date = collections.defaultdict(int)
for line in invoice_max_time:
time = line["max_time"]
date = datetime.datetime(
year=time.year, month=time.month, day=time.day
)
by_date[date] += 1
data = [(date, count) for date, count in sorted(by_date.items())]
data = [(date.strftime("%Y-%m-%d"), count) for date, count in data]
return ListReport(
"Paid Invoices By Date",
["date", "count"],
data,
)
@report_view("Credit notes") @report_view("Credit notes")
def credit_notes(request, form): def credit_notes(request, form):
''' Shows all of the credit notes in the system. ''' ''' Shows all of the credit notes in the system. '''

View file

@ -46,6 +46,11 @@ reports = [
url(r"^attendee/([0-9]*)$", rv.attendee, name="attendee"), url(r"^attendee/([0-9]*)$", rv.attendee, name="attendee"),
url(r"^credit_notes/?$", rv.credit_notes, name="credit_notes"), url(r"^credit_notes/?$", rv.credit_notes, name="credit_notes"),
url(r"^items_sold/?$", rv.items_sold, name="items_sold"), url(r"^items_sold/?$", rv.items_sold, name="items_sold"),
url(
r"^paid_invoices_by_date/?$",
rv.paid_invoices_by_date,
name="paid_invoices_by_date"
),
url(r"^product_status/?$", rv.product_status, name="product_status"), url(r"^product_status/?$", rv.product_status, name="product_status"),
url(r"^reconciliation/?$", rv.reconciliation, name="reconciliation"), url(r"^reconciliation/?$", rv.reconciliation, name="reconciliation"),
] ]