Merge branch 'chrisjrn/reports_20160919'
This commit is contained in:
commit
a445eed239
3 changed files with 56 additions and 1 deletions
|
@ -1,6 +1,8 @@
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.models import inventory
|
from registrasion.models import inventory
|
||||||
|
|
||||||
|
from symposion.proposals import models as proposals_models
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
# Reporting forms.
|
# Reporting forms.
|
||||||
|
@ -31,6 +33,14 @@ class UserIdForm(forms.Form):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ProposalKindForm(forms.Form):
|
||||||
|
kind = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=proposals_models.ProposalKind.objects.all(),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def model_fields_form_factory(model):
|
def model_fields_form_factory(model):
|
||||||
''' Creates a form for specifying fields from a model to display. '''
|
''' Creates a form for specifying fields from a model to display. '''
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import datetime
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
|
from django.contrib.auth.models import User
|
||||||
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
|
||||||
|
@ -18,6 +19,8 @@ from registrasion.models import people
|
||||||
from registrasion import util
|
from registrasion import util
|
||||||
from registrasion import views
|
from registrasion import views
|
||||||
|
|
||||||
|
from symposion.schedule import models as schedule_models
|
||||||
|
|
||||||
from reports import get_all_reports
|
from reports import get_all_reports
|
||||||
from reports import Links
|
from reports import Links
|
||||||
from reports import ListReport
|
from reports import ListReport
|
||||||
|
@ -581,13 +584,14 @@ def attendee_data(request, form, user_id=None):
|
||||||
AttendeeProfile._meta.get_field(field).verbose_name for field in fields
|
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 = []
|
data = []
|
||||||
for item in items:
|
for item in items:
|
||||||
profile = by_user[item.cart.user]
|
profile = by_user[item.cart.user]
|
||||||
line = [
|
line = [
|
||||||
item.cart.user.id,
|
item.cart.user.id,
|
||||||
getattr(profile, name_field),
|
getattr(profile, name_field),
|
||||||
|
profile.attendee.user.email,
|
||||||
item.product,
|
item.product,
|
||||||
status_display[item.cart.status],
|
status_display[item.cart.status],
|
||||||
] + [
|
] + [
|
||||||
|
@ -599,3 +603,39 @@ def attendee_data(request, form, user_id=None):
|
||||||
"Attendees by item with profile data", headings, data, link_view=attendee
|
"Attendees by item with profile data", headings, data, link_view=attendee
|
||||||
))
|
))
|
||||||
return output
|
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 []
|
||||||
|
|
|
@ -54,6 +54,11 @@ reports = [
|
||||||
),
|
),
|
||||||
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"),
|
||||||
|
url(
|
||||||
|
r"^speaker_registrations/?$",
|
||||||
|
rv.speaker_registrations,
|
||||||
|
name="speaker_registrations",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue