From e2d027f71b093083e18d133df58c12e23196c62e Mon Sep 17 00:00:00 2001 From: Christopher Neugebauer Date: Tue, 20 Sep 2016 10:33:43 +1000 Subject: [PATCH] Adds a report for consumption of a discount. Fixes #78 --- registrasion/reporting/forms.py | 10 +++++++++- registrasion/reporting/views.py | 34 +++++++++++++++++++++++++++++++++ registrasion/urls.py | 2 +- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/registrasion/reporting/forms.py b/registrasion/reporting/forms.py index 94e99491..8543209b 100644 --- a/registrasion/reporting/forms.py +++ b/registrasion/reporting/forms.py @@ -1,8 +1,16 @@ +from registrasion.models import conditions from registrasion.models import inventory from django import forms -# Staff-facing forms. +# Reporting forms. + + +class DiscountForm(forms.Form): + discount = forms.ModelMultipleChoiceField( + queryset=conditions.DiscountBase.objects.all(), + required=False, + ) class ProductAndCategoryForm(forms.Form): diff --git a/registrasion/reporting/views.py b/registrasion/reporting/views.py index 1eea40f3..2ec5d08f 100644 --- a/registrasion/reporting/views.py +++ b/registrasion/reporting/views.py @@ -268,6 +268,40 @@ def product_status(request, form): return ListReport("Inventory", headings, data) +@report_view("Product status", form_type=forms.DiscountForm) +def discount_status(request, form): + ''' Summarises the usage of a given discount. ''' + + discounts = form.cleaned_data["discount"] + + + items = commerce.DiscountItem.objects.filter( + Q(discount__in=discounts), + ).select_related("cart", "product", "product__category") + + items = group_by_cart_status( + items, + ["discount",], + ["discount", "discount__description",], + ) + + headings = [ + "Discount", "Paid", "Reserved", "Unreserved", "Refunded", + ] + data = [] + + for item in items: + data.append([ + item["discount__description"], + item["total_paid"], + item["total_reserved"], + item["total_unreserved"], + item["total_refunded"], + ]) + + return ListReport("Usage by item", 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 diff --git a/registrasion/urls.py b/registrasion/urls.py index 64fecbe0..d6850ef7 100644 --- a/registrasion/urls.py +++ b/registrasion/urls.py @@ -45,7 +45,7 @@ reports = [ url(r"^attendee/?$", 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"^items_sold/?$", rv.items_sold, name="items_sold"), + url(r"^discount_status/?$", rv.discount_status, name="discount_status"), url( r"^paid_invoices_by_date/?$", rv.paid_invoices_by_date,