Changeset - a445eed23988
[Not reviewed]
Merge
0 3 0
Christopher Neugebauer - 8 years ago 2016-09-20 09:41:47
chrisjrn@gmail.com
Merge branch 'chrisjrn/reports_20160919'
3 files changed with 56 insertions and 1 deletions:
0 comments (0 inline, 0 general)
registrasion/reporting/forms.py
Show inline comments
 
from registrasion.models import conditions
 
from registrasion.models import inventory
 

	
 
from symposion.proposals import models as proposals_models
 

	
 
from django import forms
 

	
 
# Reporting forms.
 

	
 

	
 
class DiscountForm(forms.Form):
...
 
@@ -28,12 +30,20 @@ class UserIdForm(forms.Form):
 
    user = forms.IntegerField(
 
        label="User ID",
 
        required=False,
 
    )
 

	
 

	
 
class ProposalKindForm(forms.Form):
 
    kind = forms.ModelMultipleChoiceField(
 
        queryset=proposals_models.ProposalKind.objects.all(),
 
        required=False,
 
    )
 

	
 

	
 

	
 
def model_fields_form_factory(model):
 
    ''' Creates a form for specifying fields from a model to display. '''
 

	
 
    fields = model._meta.get_fields()
 

	
 
    choices = []
registrasion/reporting/views.py
Show inline comments
...
 
@@ -2,12 +2,13 @@ import forms
 

	
 
import collections
 
import datetime
 

	
 
from django.conf import settings
 
from django.contrib.auth.decorators import user_passes_test
 
from django.contrib.auth.models import User
 
from django.core.urlresolvers import reverse
 
from django.db import models
 
from django.db.models import F, Q
 
from django.db.models import Count, Max, Sum
 
from django.db.models import Case, When, Value
 
from django.shortcuts import render
...
 
@@ -15,12 +16,14 @@ from django.shortcuts import render
 
from registrasion.controllers.item import ItemController
 
from registrasion.models import commerce
 
from registrasion.models import people
 
from registrasion import util
 
from registrasion import views
 

	
 
from symposion.schedule import models as schedule_models
 

	
 
from reports import get_all_reports
 
from reports import Links
 
from reports import ListReport
 
from reports import QuerysetReport
 
from reports import report_view
 

	
...
 
@@ -578,24 +581,61 @@ def attendee_data(request, form, user_id=None):
 
    # DO the report for individual attendees
 

	
 
    field_names = [
 
        AttendeeProfile._meta.get_field(field).verbose_name for field in fields
 
    ]
 

	
 
    headings = ["User ID", "Name", "Product", "Item Status"] + field_names
 
    headings = ["User ID", "Name", "Email", "Product", "Item Status"] + field_names
 
    data = []
 
    for item in items:
 
        profile = by_user[item.cart.user]
 
        line = [
 
            item.cart.user.id,
 
            getattr(profile, name_field),
 
            profile.attendee.user.email,
 
            item.product,
 
            status_display[item.cart.status],
 
        ] + [
 
            getattr(profile, field) for field in fields
 
        ]
 
        data.append(line)
 

	
 
    output.append(AttendeeListReport(
 
        "Attendees by item with profile data", headings, data, link_view=attendee
 
    ))
 
    return output
 

	
 

	
 
@report_view(
 
    "Speaker Registration Status",
 
    form_type=forms.ProposalKindForm,
 
)
 
def speaker_registrations(request, form):
 
    ''' Shows registration status for speakers with a given proposal kind. '''
 

	
 
    kinds = form.cleaned_data["kind"]
 

	
 
    presentations = schedule_models.Presentation.objects.filter(
 
        proposal_base__kind=kinds,
 
    ).exclude(
 
        cancelled=True,
 
    )
 

	
 
    users = User.objects.filter(
 
        Q(speaker_profile__presentations__in=presentations) |
 
        Q(speaker_profile__copresentations__in=presentations)
 
    )
 

	
 
    paid_carts = commerce.Cart.objects.filter(status=commerce.Cart.STATUS_PAID)
 

	
 
    paid_carts = Case(When(cart__in=paid_carts, then=Value(1)), default=Value(0), output_field=models.IntegerField())
 
    users = users.annotate(paid_carts=Sum(paid_carts))
 
    users=users.order_by("paid_carts")
 

	
 
    return QuerysetReport(
 
        "Speaker Registration Status",
 
        ["id", "speaker_profile__name", "email", "paid_carts",],
 
        users,
 
        link_view=attendee,
 
    )
 

	
 
    return []
registrasion/urls.py
Show inline comments
...
 
@@ -51,12 +51,17 @@ reports = [
 
        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"^reconciliation/?$", rv.reconciliation, name="reconciliation"),
 
    url(
 
        r"^speaker_registrations/?$",
 
        rv.speaker_registrations,
 
        name="speaker_registrations",
 
    ),
 
]
 

	
 

	
 
urlpatterns = [
 
    url(r"^reports/", include(reports)),
 
    url(r"^", include(public))  # This one must go last.
0 comments (0 inline, 0 general)