Handle multiregs with zero cost
authorMagnus Hagander <magnus@hagander.net>
Tue, 20 Feb 2018 09:51:50 +0000 (10:51 +0100)
committerMagnus Hagander <magnus@hagander.net>
Tue, 20 Feb 2018 09:51:50 +0000 (10:51 +0100)
This can happen when a user registers multiple users using the new
workflow, and they all use either free reg types (like speaker) or
discount voucher codes.

postgresqleu/confreg/views.py
postgresqleu/urls.py
template.jinja/confreg/regmulti_zeropay.html [new file with mode: 0644]

index 125ddea17c61905eab462f5a955b1cb037499e76..190d53bc1c33017d41c93f44e0d85d0f08de1dbf 100644 (file)
@@ -508,15 +508,28 @@ def multireg_newinvoice(request, confname):
                        errors.append('Total amount has changed, likely due to a registration being concurrently changed. Please try again.')
 
                if form.is_valid() and not errors:
-                       bp = _create_and_assign_bulk_payment(request.user,
-                                                                                                conference,
-                                                                                                pendingregs,
-                                                                                                invoicerows,
-                                                                                                form.data['recipient'],
-                                                                                                form.data['address'],
-                                                                                                False)
+                       if totalwithvat == 0:
+                               # Free! This is either a multireg for example for speakers, or it could be
+                               # a registration made entirely out of vouchers. So just mark the payments
+                               # as completed (the invoicerows_for_registration step has already marked any
+                               # vouchers or discount codes as used)
+                               for r in pendingregs:
+                                       r.payconfirmedat = datetime.now()
+                                       r.payconfirmedby = "Multireg/nopay"
+                                       r.save()
+                                       notify_reg_confirmed(r)
+                               return HttpResponseRedirect("../z/")
+                       else:
+                               # Else generate a bulk payment and invoice for it
+                               bp = _create_and_assign_bulk_payment(request.user,
+                                                                                                        conference,
+                                                                                                        pendingregs,
+                                                                                                        invoicerows,
+                                                                                                        form.data['recipient'],
+                                                                                                        form.data['address'],
+                                                                                                        False)
 
-                       return HttpResponseRedirect("../b{0}/".format(bp.id))
+                               return HttpResponseRedirect("../b{0}/".format(bp.id))
 
                # Add the errors to the form, so they're actually visible.
                for e in errors:
@@ -532,6 +545,12 @@ def multireg_newinvoice(request, confname):
                'totalwithvat': totalwithvat,
        })
 
+@login_required
+def multireg_zeropay(request, confname):
+       conference = get_object_or_404(Conference, urlname=confname)
+       return render_conference_response(request, conference, 'reg', 'confreg/regmulti_zeropay.html', {
+       })
+
 @login_required
 @transaction.atomic
 def multireg_bulkview(request, confname, bulkid):
index 83ac80f9b61e596de30ea4a2f1e6305e8def2c13..f4f6aaf9b965c67e0579f1a5298dba0eb86b0aa5 100644 (file)
@@ -54,6 +54,7 @@ urlpatterns = patterns('',
        (r'^events/(?P<confname>[^/]+)/register/other/(?P<regid>(\d+)/)?$', postgresqleu.confreg.views.multireg),
        (r'^events/(?P<confname>[^/]+)/register/other/newinvoice/$', postgresqleu.confreg.views.multireg_newinvoice),
        (r'^events/(?P<confname>[^/]+)/register/other/b(?P<bulkid>(\d+))/$', postgresqleu.confreg.views.multireg_bulkview),
+       (r'^events/(?P<confname>[^/]+)/register/other/z/$', postgresqleu.confreg.views.multireg_zeropay),
        (r'^events/register/attach/([a-z0-9]{64})/$', postgresqleu.confreg.views.multireg_attach),
        (r'^events/([^/]+)/bulkpay/$', postgresqleu.confreg.views.bulkpay),
        (r'^events/([^/]+)/bulkpay/(\d+)/$', postgresqleu.confreg.views.bulkpay_view),
diff --git a/template.jinja/confreg/regmulti_zeropay.html b/template.jinja/confreg/regmulti_zeropay.html
new file mode 100644 (file)
index 0000000..3348b45
--- /dev/null
@@ -0,0 +1,13 @@
+{%extends "base.html" %}
+{%block title%}Conference registration payment{%endblock%}
+{%block content%}
+<h1>Conference registration payment</h1>
+<p>
+  The registrations you were making do not require a payment, thanks
+  to registration types and/or discount vouchers used. As such, they
+  have flagged as completed automatically.
+</p>
+<p>
+  <a href="../">Return</a> to the registration overview.
+</p>
+{%endblock%}