diff --git a/vendor/regidesk/regidesk/templates/regidesk/boardingpass.html b/vendor/regidesk/regidesk/templates/regidesk/boardingpass.html
index e17e3671..21adc3a3 100644
--- a/vendor/regidesk/regidesk/templates/regidesk/boardingpass.html
+++ b/vendor/regidesk/regidesk/templates/regidesk/boardingpass.html
@@ -12,9 +12,13 @@
{% ticket_type as ticket_type %}
{% block header_title %}
-
Boarding Pass for {{ attendee.user.email }}
+Boarding Pass for {{ attendee.user.email }}
+
+
This boarding pass was prepared at {{ boardingpass.created }} and was correct at that time.
+
For an up-to-date list of paid/unpaid items please see this review page.
+
{% endblock %}
{% block body %}
- {{ boardingpass|safe }}
+ {{ boardingpass_body|safe }}
{% endblock %}
diff --git a/vendor/regidesk/regidesk/views.py b/vendor/regidesk/regidesk/views.py
index abd4668c..daf423aa 100644
--- a/vendor/regidesk/regidesk/views.py
+++ b/vendor/regidesk/regidesk/views.py
@@ -50,15 +50,16 @@ def boardingpass(request):
return redirect('/tickets/review')
prepare_boarding_pass(request, templates[0])
- boardingpass = checkin.boardingpass.html_body
+ boardingpass = checkin.boardingpass
qrcode_url = request.build_absolute_uri(reverse("regidesk:checkin_png", args=[checkin.code]))
qrcode = checkin.qrcode
qrcode_string ='
'
not_qrcode_string = '
'
- boardingpass = boardingpass.replace(not_qrcode_string, qrcode_string)
+ boardingpass_body = boardingpass.html_body.replace(not_qrcode_string, qrcode_string)
ctx = { 'attendee': user.attendee,
- 'boardingpass': boardingpass
+ 'boardingpass_body': boardingpass_body,
+ 'boardingpass': boardingpass
}
response = render(request, "regidesk/boardingpass.html", ctx)
@@ -126,19 +127,28 @@ def boarding_prepare(request):
for pk in request.POST.getlist("_selected_action"):
attendee_pks.append(int(pk))
except ValueError:
- return HttpResponseBadRequest()
+ messages.warning(request, ValueError)
+ return redirect("/checkin/overview")
attendees = people.Attendee.objects.filter(pk__in=attendee_pks)
attendees = attendees.select_related(
"user", "attendeeprofilebase", "attendeeprofilebase__attendeeprofile")
- sample_checkin = CheckIn.objects.get_or_create(user=attendees[0].user)[0]
+ try:
+ sample_checkin = CheckIn.objects.get_or_create(user=attendees[0].user)[0]
+ except:
+ messages.warning(request, "Couldn't find a sample checking - did you add a user?")
+ return redirect("/checkin/overview")
+
rendered_template = {}
sample_ctx = {}
bp_template_pk = request.POST.get("template", "")
- if bp_template_pk:
- bp_template = BoardingPassTemplate.objects.get(pk=bp_template_pk)
+ if not bp_template_pk:
+ messages.warning(request, "Need to choose a template")
+ return redirect("/checkin/overview")
+ bp_template = BoardingPassTemplate.objects.get(pk=bp_template_pk)
+ if bp_template:
sample_ctx = {
"user": sample_checkin.user,
"boardingpass": sample_checkin.boardingpass,
@@ -156,9 +166,10 @@ def boarding_prepare(request):
subject = Template(bp_template.subject).render(ctx)
rendered_template['plain'] = Template(bp_template.body).render(ctx)
rendered_template['html'] = Template(bp_template.html_body).render(ctx)
+ request.session['template'] = bp_template.pk
else:
- bp_template = None
subject = None
+ request.session['template'] = None
ctx = {
"attendees": attendees,
@@ -171,10 +182,7 @@ def boarding_prepare(request):
request.session.set_expiry=(300)
request.session['boarding_attendees'] = attendee_pks
- request.session['template'] = bp_template.pk
- response = render(request, "regidesk/boardingpass_prepare.html", ctx)
-
- return response
+ return render(request, "regidesk/boardingpass_prepare.html", ctx)
def prepare_boarding_pass(request, template, attendee=None):
@@ -217,7 +225,7 @@ def prepare_boarding_pass(request, template, attendee=None):
user.checkin.boardingpass = bpass
user.checkin.save()
- return body, html_body
+ return bpass
@permission_required("regidesk.send_boarding_pass")
def boarding_send(request):
@@ -230,8 +238,9 @@ def boarding_send(request):
attendees = people.Attendee.objects.filter(pk__in=request.session['boarding_attendees'])
attendees = attendees.select_related(
- "user", "attendeeprofilebase", "attendeeprofilebase__attendeeprofile")
+ "user", "attendeeprofilebase", "attendeeprofilebase__attendeeprofile")
+ logging.debug(len(attendees))
logging.debug(attendees)
template_pk = request.session['template']
@@ -239,27 +248,29 @@ def boarding_send(request):
for attendee in attendees:
- body, html_body = prepare_boarding_pass(attendee, template)
+ try:
+ user = attendee.user
+ bpass = prepare_boarding_pass(request, template, attendee)
+ msg = EmailMultiAlternatives(
+ bpass.subject,
+ bpass.body,
+ bpass.from_address,
+ [bpass.to_address,],
+ )
+ msg.content_subtype="plain"
+ msg.mixed_subtype="related"
+ if bpass.html_body:
+ msg.attach_alternative(bpass.html_body, "text/html")
+ msg.attach(filename="qrcode.png", content=user.checkin.qrcode, mimetype="image/png")
- msg = EmailMultiAlternatives(
- bpass.subject,
- bpass.body,
- bpass.from_address,
- [bpass.to_address,],
- )
- msg.content_subtype="plain"
- msg.mixed_subtype="related"
- if html_body:
- msg.attach_alternative(html_body, "text/html")
-
- msg.attach(filename="qrcode.png", content=user.checkin.qrcode, mimetype="image/png")
-
- if user in boarding_users:
- with transaction.atomic():
- msg.send()
- bpass.sent = datetime.now()
- bpass.save()
- messages.success(request, "Sent boarding pass to %s" % attendee)
+ if user in boarding_users:
+ with transaction.atomic():
+ msg.send()
+ bpass.sent = datetime.now()
+ bpass.save()
+ messages.success(request, "Sent boarding pass to %s" % attendee)
+ except:
+ messages.warning(request, "Could not send boarding pass to %s" % attendee)
request.session['boarding_attendees'].remove(attendee.pk)