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…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer