Merge branch 'chrisjrn/manifest'
This commit is contained in:
		
						commit
						b6b6a600ee
					
				
					 2 changed files with 86 additions and 0 deletions
				
			
		|  | @ -765,3 +765,88 @@ def speaker_registrations(request, form): | |||
|     ) | ||||
| 
 | ||||
|     return [] | ||||
| 
 | ||||
| 
 | ||||
| @report_view( | ||||
|     "Manifest", | ||||
|     forms.ProductAndCategoryForm, | ||||
| ) | ||||
| def manifest(request, form): | ||||
|     ''' Produces the registration manifest for people with the given product type.''' | ||||
| 
 | ||||
|     products = form.cleaned_data["product"] | ||||
|     categories = form.cleaned_data["category"] | ||||
| 
 | ||||
|     line_items = ( | ||||
|         Q(lineitem__product__in=products) | | ||||
|         Q(lineitem__product__category__in=categories) | ||||
|     ) | ||||
| 
 | ||||
|     invoices = commerce.Invoice.objects.filter( | ||||
|         line_items, | ||||
|         status=commerce.Invoice.STATUS_PAID, | ||||
|     ).select_related( | ||||
|         "cart", | ||||
|         "user", | ||||
|         "user__attendee", | ||||
|         "user__attendee__attendeeprofilebase" | ||||
|     ) | ||||
| 
 | ||||
|     users = set(i.user for i in invoices) | ||||
| 
 | ||||
|     carts = commerce.Cart.objects.filter( | ||||
|         user__in=users | ||||
|     ) | ||||
| 
 | ||||
|     items = commerce.ProductItem.objects.filter( | ||||
|         cart__in=carts | ||||
|     ).select_related( | ||||
|         "product", | ||||
|         "product__category", | ||||
|         "cart", | ||||
|         "cart__user", | ||||
|         "cart__user__attendee", | ||||
|         "cart__user__attendee__attendeeprofilebase" | ||||
|     ).order_by("product__category__order", "product__order") | ||||
| 
 | ||||
|     users = {} | ||||
| 
 | ||||
|     for item in items: | ||||
|         cart = item.cart | ||||
|         if cart.user not in users: | ||||
|             users[cart.user] = {"unpaid": [], "paid": [], "refunded": []} | ||||
|         items = users[cart.user] | ||||
|         if cart.status == commerce.Cart.STATUS_ACTIVE: | ||||
|             items["unpaid"].append(item) | ||||
|         elif cart.status == commerce.Cart.STATUS_PAID: | ||||
|             items["paid"].append(item) | ||||
|         elif cart.status == commerce.Cart.STATUS_RELEASED: | ||||
|             items["refunded"].append(item) | ||||
| 
 | ||||
|     users_by_name = list(users.keys()) | ||||
|     users_by_name.sort(key=( | ||||
|         lambda i: i.attendee.attendeeprofilebase.attendee_name().lower() | ||||
|     )) | ||||
| 
 | ||||
|     headings = ["User ID", "Name", "Paid", "Unpaid", "Refunded"] | ||||
| 
 | ||||
|     def format_items(item_list): | ||||
|         strings = [ | ||||
|             "%d x %s" % (item.quantity, str(item.product)) for item in item_list | ||||
|         ] | ||||
|         return ", \n".join(strings) | ||||
| 
 | ||||
|     output = [] | ||||
|     for user in users_by_name: | ||||
|         items = users[user] | ||||
|         output.append([ | ||||
|             user.id, | ||||
|             user.attendee.attendeeprofilebase.attendee_name(), | ||||
|             format_items(items["paid"]), | ||||
|             format_items(items["unpaid"]), | ||||
|             format_items(items["refunded"]), | ||||
|         ]) | ||||
| 
 | ||||
|     return ListReport("Manifest", headings, output) | ||||
| 
 | ||||
|     #attendeeprofilebase.attendee_name() | ||||
|  |  | |||
|  | @ -54,6 +54,7 @@ reports = [ | |||
|     url(r"^attendee_data/?$", rv.attendee_data, name="attendee_data"), | ||||
|     url(r"^attendee/([0-9]*)$", rv.attendee, name="attendee"), | ||||
|     url(r"^credit_notes/?$", rv.credit_notes, name="credit_notes"), | ||||
|     url(r"^manifest/?$", rv.manifest, name="manifest"), | ||||
|     url(r"^discount_status/?$", rv.discount_status, name="discount_status"), | ||||
|     url(r"^invoices/?$", rv.invoices, name="invoices"), | ||||
|     url( | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer