Adds payment access codes.
This commit is contained in:
parent
3dab78ab25
commit
ea1d6f52e6
3 changed files with 49 additions and 6 deletions
|
@ -126,6 +126,23 @@ class InvoiceController(object):
|
||||||
|
|
||||||
return invoice
|
return invoice
|
||||||
|
|
||||||
|
def can_view(self, user=None, access_code=None):
|
||||||
|
''' Returns true if the accessing user is allowed to view this invoice,
|
||||||
|
or if the given access code matches this invoice's user's access code.
|
||||||
|
'''
|
||||||
|
|
||||||
|
if user == self.invoice.user:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if user.is_staff:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if self.invoice.user.attendee.access_code == access_code:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _refresh(self):
|
def _refresh(self):
|
||||||
''' Refreshes the underlying invoice and cart objects. '''
|
''' Refreshes the underlying invoice and cart objects. '''
|
||||||
self.invoice.refresh_from_db()
|
self.invoice.refresh_from_db()
|
||||||
|
|
|
@ -7,8 +7,11 @@ urlpatterns = patterns(
|
||||||
url(r"^category/([0-9]+)$", "product_category", name="product_category"),
|
url(r"^category/([0-9]+)$", "product_category", name="product_category"),
|
||||||
url(r"^checkout$", "checkout", name="checkout"),
|
url(r"^checkout$", "checkout", name="checkout"),
|
||||||
url(r"^invoice/([0-9]+)$", "invoice", name="invoice"),
|
url(r"^invoice/([0-9]+)$", "invoice", name="invoice"),
|
||||||
|
url(r"^invoice/([0-9]+)/([A-Z0-9]+)$", views.invoice, name="invoice"),
|
||||||
url(r"^invoice/([0-9]+)/manual_payment$",
|
url(r"^invoice/([0-9]+)/manual_payment$",
|
||||||
views.manual_payment, name="manual_payment"),
|
views.manual_payment, name="manual_payment"),
|
||||||
|
url(r"^invoice_access/([A-Z0-9]+)$", views.invoice_access,
|
||||||
|
name="invoice_access"),
|
||||||
url(r"^profile$", "edit_profile", name="attendee_edit"),
|
url(r"^profile$", "edit_profile", name="attendee_edit"),
|
||||||
url(r"^register$", "guided_registration", name="guided_registration"),
|
url(r"^register$", "guided_registration", name="guided_registration"),
|
||||||
url(r"^register/([0-9]+)$", "guided_registration",
|
url(r"^register/([0-9]+)$", "guided_registration",
|
||||||
|
|
|
@ -424,18 +424,41 @@ def checkout_errors(request, errors):
|
||||||
return render(request, "registrasion/checkout_errors.html", data)
|
return render(request, "registrasion/checkout_errors.html", data)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
def invoice_access(request, access_code):
|
||||||
def invoice(request, invoice_id):
|
''' Redirects to the first unpaid invoice for the attendee that matches
|
||||||
''' Displays an invoice for a given invoice id. '''
|
the given access code, if any. '''
|
||||||
|
|
||||||
|
invoices = rego.Invoice.objects.filter(
|
||||||
|
user__attendee__access_code=access_code,
|
||||||
|
status=rego.Invoice.STATUS_UNPAID,
|
||||||
|
).order_by("issue_time")
|
||||||
|
|
||||||
|
if not invoices:
|
||||||
|
raise Http404()
|
||||||
|
|
||||||
|
invoice = invoices[0]
|
||||||
|
|
||||||
|
return redirect("invoice", invoice.id, access_code)
|
||||||
|
|
||||||
|
|
||||||
|
def invoice(request, invoice_id, access_code=None):
|
||||||
|
''' Displays an invoice for a given invoice id.
|
||||||
|
This view is not authenticated, but it will only allow access to either:
|
||||||
|
the user the invoice belongs to; staff; or a request made with the correct
|
||||||
|
access code.
|
||||||
|
'''
|
||||||
|
|
||||||
invoice_id = int(invoice_id)
|
invoice_id = int(invoice_id)
|
||||||
inv = rego.Invoice.objects.get(pk=invoice_id)
|
inv = rego.Invoice.objects.get(pk=invoice_id)
|
||||||
|
|
||||||
if request.user != inv.cart.user and not request.user.is_staff:
|
|
||||||
raise Http404()
|
|
||||||
|
|
||||||
current_invoice = InvoiceController(inv)
|
current_invoice = InvoiceController(inv)
|
||||||
|
|
||||||
|
if not current_invoice.can_view(
|
||||||
|
user=request.user,
|
||||||
|
access_code=access_code,
|
||||||
|
):
|
||||||
|
raise Http404()
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"invoice": current_invoice.invoice,
|
"invoice": current_invoice.invoice,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue