Merge branch 'random_bug_fixes'
This commit is contained in:
commit
7c86f848f1
6 changed files with 32 additions and 42 deletions
|
@ -71,7 +71,7 @@ def available_discounts(user, categories, products):
|
|||
# is not available any more.
|
||||
past_uses = commerce.DiscountItem.objects.filter(
|
||||
cart__user=user,
|
||||
cart__status=commerce.Cart.STATUS_PAID, # Only past carts count
|
||||
cart__status=commerce.Cart.STATUS_PAID, # Only past carts count
|
||||
discount=real_discount,
|
||||
)
|
||||
agg = past_uses.aggregate(Sum("quantity"))
|
||||
|
|
|
@ -10,6 +10,7 @@ register = template.Library()
|
|||
|
||||
_ProductAndQuantity = namedtuple("ProductAndQuantity", ["product", "quantity"])
|
||||
|
||||
|
||||
class ProductAndQuantity(_ProductAndQuantity):
|
||||
''' Class that holds a product and a quantity.
|
||||
|
||||
|
|
|
@ -26,12 +26,16 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
|
|||
super(RegistrationCartTestCase, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
if False:
|
||||
if True:
|
||||
# If you're seeing segfaults in tests, enable this.
|
||||
call_command('flush', verbosity=0, interactive=False,
|
||||
reset_sequences=False,
|
||||
allow_cascade=False,
|
||||
inhibit_post_migrate=False)
|
||||
call_command(
|
||||
'flush',
|
||||
verbosity=0,
|
||||
interactive=False,
|
||||
reset_sequences=False,
|
||||
allow_cascade=False,
|
||||
inhibit_post_migrate=False
|
||||
)
|
||||
|
||||
super(RegistrationCartTestCase, self).tearDown()
|
||||
|
||||
|
@ -51,11 +55,11 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
|
|||
password='top_secret')
|
||||
|
||||
attendee1 = people.Attendee.get_instance(cls.USER_1)
|
||||
profile1 = people.AttendeeProfileBase.objects.create(
|
||||
people.AttendeeProfileBase.objects.create(
|
||||
attendee=attendee1,
|
||||
)
|
||||
attendee2 = people.Attendee.get_instance(cls.USER_2)
|
||||
profile2 = people.AttendeeProfileBase.objects.create(
|
||||
people.AttendeeProfileBase.objects.create(
|
||||
attendee=attendee2,
|
||||
)
|
||||
|
||||
|
|
|
@ -484,7 +484,7 @@ class InvoiceTestCase(RegistrationCartTestCase):
|
|||
invoice.pay("Paying into the void.", cnval, pre_validate=False)
|
||||
|
||||
notes = commerce.CreditNote.objects.filter(invoice=invoice.invoice)
|
||||
notes = sorted(notes, key = lambda note: note.value)
|
||||
notes = sorted(notes, key=lambda note: note.value)
|
||||
|
||||
self.assertEqual(cnval, notes[0].value)
|
||||
self.assertEqual(val, notes[1].value)
|
||||
|
|
|
@ -16,11 +16,11 @@ from collections import namedtuple
|
|||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.decorators import user_passes_test
|
||||
from django.contrib import messages
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.http import Http404
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.shortcuts import redirect
|
||||
from django.shortcuts import render
|
||||
|
||||
|
@ -41,17 +41,17 @@ class GuidedRegistrationSection(_GuidedRegistrationSection):
|
|||
''' Represents a section of a guided registration page.
|
||||
|
||||
Attributes:
|
||||
title (str): The title of the section.
|
||||
title (str): The title of the section.
|
||||
|
||||
discounts ([registrasion.contollers.discount.DiscountAndQuantity, ...]):
|
||||
discounts ([registrasion.contollers.discount.DiscountAndQuantity, ...]):
|
||||
A list of discount objects that are available in the section. You
|
||||
can display ``.clause`` to show what the discount applies to, and
|
||||
``.quantity`` to display the number of times that discount can be
|
||||
applied.
|
||||
|
||||
description (str): A description of the section.
|
||||
description (str): A description of the section.
|
||||
|
||||
form (forms.Form): A form to display.
|
||||
form (forms.Form): A form to display.
|
||||
'''
|
||||
pass
|
||||
|
||||
|
@ -568,7 +568,6 @@ def invoice_access(request, access_code):
|
|||
user__attendee__access_code=access_code,
|
||||
).order_by("-issue_time")
|
||||
|
||||
|
||||
if not invoices:
|
||||
raise Http404()
|
||||
|
||||
|
@ -630,7 +629,12 @@ def invoice(request, invoice_id, access_code=None):
|
|||
return render(request, "registrasion/invoice.html", data)
|
||||
|
||||
|
||||
@login_required
|
||||
def _staff_only(user):
|
||||
''' Returns true if the user is staff. '''
|
||||
return user.is_staff
|
||||
|
||||
|
||||
@user_passes_test(_staff_only)
|
||||
def manual_payment(request, invoice_id):
|
||||
''' Allows staff to make manual payments or refunds on an invoice.
|
||||
|
||||
|
@ -650,16 +654,10 @@ def manual_payment(request, invoice_id):
|
|||
# object.
|
||||
}
|
||||
|
||||
Raises:
|
||||
Http404: if the logged in user is not staff.
|
||||
|
||||
'''
|
||||
|
||||
FORM_PREFIX = "manual_payment"
|
||||
|
||||
if not request.user.is_staff:
|
||||
raise Http404()
|
||||
|
||||
current_invoice = InvoiceController.for_id_or_404(invoice_id)
|
||||
|
||||
form = forms.ManualPaymentForm(
|
||||
|
@ -668,21 +666,21 @@ def manual_payment(request, invoice_id):
|
|||
)
|
||||
|
||||
if request.POST and form.is_valid():
|
||||
form.instance.invoice = inv
|
||||
form.instance.invoice = current_invoice.invoice
|
||||
form.instance.entered_by = request.user
|
||||
form.save()
|
||||
current_invoice.update_status()
|
||||
form = forms.ManualPaymentForm(prefix=FORM_PREFIX)
|
||||
|
||||
data = {
|
||||
"invoice": inv,
|
||||
"invoice": current_invoice.invoice,
|
||||
"form": form,
|
||||
}
|
||||
|
||||
return render(request, "registrasion/manual_payment.html", data)
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(_staff_only)
|
||||
def refund(request, invoice_id):
|
||||
''' Marks an invoice as refunded and requests a credit note for the
|
||||
full amount paid against the invoice.
|
||||
|
@ -696,14 +694,8 @@ def refund(request, invoice_id):
|
|||
redirect:
|
||||
Redirects to ``invoice``.
|
||||
|
||||
Raises:
|
||||
Http404: if the logged in user is not staff.
|
||||
|
||||
'''
|
||||
|
||||
if not request.user.is_staff:
|
||||
raise Http404()
|
||||
|
||||
current_invoice = InvoiceController.for_id_or_404(invoice_id)
|
||||
|
||||
try:
|
||||
|
@ -715,7 +707,7 @@ def refund(request, invoice_id):
|
|||
return redirect("invoice", invoice_id)
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(_staff_only)
|
||||
def credit_note(request, note_id, access_code=None):
|
||||
''' Displays a credit note.
|
||||
|
||||
|
@ -741,19 +733,12 @@ def credit_note(request, note_id, access_code=None):
|
|||
# refund of the credit note.
|
||||
}
|
||||
|
||||
Raises:
|
||||
Http404: If the logged in user is not staff.
|
||||
|
||||
|
||||
'''
|
||||
|
||||
if not request.user.is_staff:
|
||||
raise Http404()
|
||||
|
||||
current_note = CreditNoteController.for_id_or_404(note_id)
|
||||
|
||||
apply_form = forms.ApplyCreditNoteForm(
|
||||
note.invoice.user,
|
||||
current_note.credit_note.invoice.user,
|
||||
request.POST or None,
|
||||
prefix="apply_note"
|
||||
)
|
||||
|
@ -775,7 +760,7 @@ def credit_note(request, note_id, access_code=None):
|
|||
|
||||
elif request.POST and refund_form.is_valid():
|
||||
refund_form.instance.entered_by = request.user
|
||||
refund_form.instance.parent = note
|
||||
refund_form.instance.parent = current_note.credit_note
|
||||
refund_form.save()
|
||||
messages.success(
|
||||
request,
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
[flake8]
|
||||
exclude = registrasion/migrations/*, build/*
|
||||
exclude = registrasion/migrations/*, build/*, docs/*
|
||||
|
|
Loading…
Reference in a new issue