@@ -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(
["id", "speaker_profile__name", "email", "paid_carts",],
users,
link_view=attendee,
return []