Adds paid invoices by date report
This commit is contained in:
parent
851c37508a
commit
f41bd9c65b
2 changed files with 47 additions and 1 deletions
|
@ -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. '''
|
||||||
|
|
|
@ -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"),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue