Huge batch of pep8 fixes
This commit is contained in:
parent
bcb63fd1cd
commit
17693754de
21 changed files with 105 additions and 111 deletions
|
@ -82,6 +82,7 @@ class IncludedProductDiscountAdmin(admin.ModelAdmin, EffectsDisplayMixin):
|
||||||
DiscountForCategoryInline,
|
DiscountForCategoryInline,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(conditions.SpeakerDiscount)
|
@admin.register(conditions.SpeakerDiscount)
|
||||||
class SpeakerDiscountAdmin(admin.ModelAdmin, EffectsDisplayMixin):
|
class SpeakerDiscountAdmin(admin.ModelAdmin, EffectsDisplayMixin):
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,6 @@ class CartController(object):
|
||||||
|
|
||||||
product_quantities = list(product_quantities)
|
product_quantities = list(product_quantities)
|
||||||
|
|
||||||
|
|
||||||
# n.b need to add have the existing items first so that the new
|
# n.b need to add have the existing items first so that the new
|
||||||
# items override the old ones.
|
# items override the old ones.
|
||||||
all_product_quantities = dict(itertools.chain(
|
all_product_quantities = dict(itertools.chain(
|
||||||
|
|
|
@ -40,7 +40,8 @@ class CreditNoteController(ForId, object):
|
||||||
paid.
|
paid.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from invoice import InvoiceController # Circular imports bleh.
|
# Circular Import
|
||||||
|
from registrasion.controllers.invoice import InvoiceController
|
||||||
inv = InvoiceController(invoice)
|
inv = InvoiceController(invoice)
|
||||||
inv.validate_allowed_to_pay()
|
inv.validate_allowed_to_pay()
|
||||||
|
|
||||||
|
@ -64,7 +65,8 @@ class CreditNoteController(ForId, object):
|
||||||
a cancellation fee. Must be 0 <= percentage <= 100.
|
a cancellation fee. Must be 0 <= percentage <= 100.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from invoice import InvoiceController # Circular imports bleh.
|
# Circular Import
|
||||||
|
from registrasion.controllers.invoice import InvoiceController
|
||||||
|
|
||||||
assert(percentage >= 0 and percentage <= 100)
|
assert(percentage >= 0 and percentage <= 100)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ from decimal import Decimal
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Sum
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from registrasion.contrib.mail import send_email
|
from registrasion.contrib.mail import send_email
|
||||||
|
|
|
@ -3,7 +3,6 @@ from registrasion.models import commerce
|
||||||
from registrasion.models import inventory
|
from registrasion.models import inventory
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,10 +30,11 @@ class ApplyCreditNoteForm(forms.Form):
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
key = lambda inv: (0 - (inv["user_id"] == self.user.id), inv["id"])
|
key = lambda inv: (0 - (inv["user_id"] == self.user.id), inv["id"]) # noqa
|
||||||
invoices_annotated.sort(key=key)
|
invoices_annotated.sort(key=key)
|
||||||
|
|
||||||
template = "Invoice %(id)d - user: %(user_email)s (%(user_id)d) - $%(value)d"
|
template = ('Invoice %(id)d - user: %(user_email)s (%(user_id)d) '
|
||||||
|
'- $%(value)d')
|
||||||
return [
|
return [
|
||||||
(invoice["id"], template % invoice)
|
(invoice["id"], template % invoice)
|
||||||
for invoice in invoices_annotated
|
for invoice in invoices_annotated
|
||||||
|
@ -57,6 +57,7 @@ class CancellationFeeForm(forms.Form):
|
||||||
max_value=100,
|
max_value=100,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ManualCreditNoteRefundForm(forms.ModelForm):
|
class ManualCreditNoteRefundForm(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -407,6 +408,7 @@ def staff_products_form_factory(user):
|
||||||
|
|
||||||
return StaffProductsForm
|
return StaffProductsForm
|
||||||
|
|
||||||
|
|
||||||
def staff_products_formset_factory(user):
|
def staff_products_formset_factory(user):
|
||||||
''' Creates a formset of StaffProductsForm for the given user. '''
|
''' Creates a formset of StaffProductsForm for the given user. '''
|
||||||
form_type = staff_products_form_factory(user)
|
form_type = staff_products_form_factory(user)
|
||||||
|
@ -446,7 +448,7 @@ class InvoicesWithProductAndStatusForm(forms.Form):
|
||||||
qs = qs.order_by("id")
|
qs = qs.order_by("id")
|
||||||
|
|
||||||
self.fields['invoice'].queryset = qs
|
self.fields['invoice'].queryset = qs
|
||||||
#self.fields['invoice'].initial = [i.id for i in qs] # UNDO THIS LATER
|
# self.fields['invoice'].initial = [i.id for i in qs] # UNDO THIS LATER
|
||||||
|
|
||||||
|
|
||||||
class InvoiceEmailForm(InvoicesWithProductAndStatusForm):
|
class InvoiceEmailForm(InvoicesWithProductAndStatusForm):
|
||||||
|
|
|
@ -63,7 +63,6 @@ class GroupByForm(forms.Form):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def model_fields_form_factory(model):
|
def model_fields_form_factory(model):
|
||||||
''' Creates a form for specifying fields from a model to display. '''
|
''' Creates a form for specifying fields from a model to display. '''
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import csv
|
import csv
|
||||||
import registrasion.reporting.forms
|
|
||||||
|
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
|
@ -163,7 +163,7 @@ def sales_payment_summary():
|
||||||
data.append([
|
data.append([
|
||||||
"Credit notes - (claimed credit notes + unclaimed credit notes)",
|
"Credit notes - (claimed credit notes + unclaimed credit notes)",
|
||||||
all_credit_notes - claimed_credit_notes -
|
all_credit_notes - claimed_credit_notes -
|
||||||
refunded_credit_notes - unclaimed_credit_notes,
|
refunded_credit_notes - unclaimed_credit_notes
|
||||||
])
|
])
|
||||||
|
|
||||||
return ListReport("Sales and Payments Summary", headings, data)
|
return ListReport("Sales and Payments Summary", headings, data)
|
||||||
|
@ -291,8 +291,8 @@ def discount_status(request, form):
|
||||||
|
|
||||||
items = group_by_cart_status(
|
items = group_by_cart_status(
|
||||||
items,
|
items,
|
||||||
["discount",],
|
["discount"],
|
||||||
["discount", "discount__description",],
|
["discount", "discount__description"],
|
||||||
)
|
)
|
||||||
|
|
||||||
headings = [
|
headings = [
|
||||||
|
@ -362,6 +362,7 @@ def paid_invoices_by_date(request, form):
|
||||||
data,
|
data,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@report_view("Credit notes")
|
@report_view("Credit notes")
|
||||||
def credit_notes(request, form):
|
def credit_notes(request, form):
|
||||||
''' Shows all of the credit notes in the system. '''
|
''' Shows all of the credit notes in the system. '''
|
||||||
|
@ -375,7 +376,9 @@ def credit_notes(request, form):
|
||||||
|
|
||||||
return QuerysetReport(
|
return QuerysetReport(
|
||||||
"Credit Notes",
|
"Credit Notes",
|
||||||
["id", "invoice__user__attendee__attendeeprofilebase__invoice_recipient", "status", "value"], # NOQA
|
["id",
|
||||||
|
"invoice__user__attendee__attendeeprofilebase__invoice_recipient",
|
||||||
|
"status", "value"],
|
||||||
notes,
|
notes,
|
||||||
headings=["id", "Owner", "Status", "Value"],
|
headings=["id", "Owner", "Status", "Value"],
|
||||||
link_view=views.credit_note,
|
link_view=views.credit_note,
|
||||||
|
@ -383,7 +386,7 @@ def credit_notes(request, form):
|
||||||
|
|
||||||
|
|
||||||
@report_view("Invoices")
|
@report_view("Invoices")
|
||||||
def invoices(request,form):
|
def invoices(request, form):
|
||||||
''' Shows all of the invoices in the system. '''
|
''' Shows all of the invoices in the system. '''
|
||||||
|
|
||||||
invoices = commerce.Invoice.objects.all().order_by("status", "id")
|
invoices = commerce.Invoice.objects.all().order_by("status", "id")
|
||||||
|
@ -562,6 +565,7 @@ def attendee_list(request):
|
||||||
|
|
||||||
ProfileForm = forms.model_fields_form_factory(AttendeeProfile)
|
ProfileForm = forms.model_fields_form_factory(AttendeeProfile)
|
||||||
|
|
||||||
|
|
||||||
@report_view(
|
@report_view(
|
||||||
"Attendees By Product/Category",
|
"Attendees By Product/Category",
|
||||||
form_type=forms.mix_form(
|
form_type=forms.mix_form(
|
||||||
|
@ -580,7 +584,8 @@ def attendee_data(request, form, user_id=None):
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
by_category = form.cleaned_data["group_by"] == forms.GroupByForm.GROUP_BY_CATEGORY
|
by_category = (
|
||||||
|
form.cleaned_data["group_by"] == forms.GroupByForm.GROUP_BY_CATEGORY)
|
||||||
|
|
||||||
products = form.cleaned_data["product"]
|
products = form.cleaned_data["product"]
|
||||||
categories = form.cleaned_data["category"]
|
categories = form.cleaned_data["category"]
|
||||||
|
@ -597,7 +602,8 @@ def attendee_data(request, form, user_id=None):
|
||||||
|
|
||||||
# Add invoice nag link
|
# Add invoice nag link
|
||||||
links = []
|
links = []
|
||||||
invoice_mailout = reverse(views.invoice_mailout, args=[]) + "?" + request.META["QUERY_STRING"]
|
invoice_mailout = reverse(views.invoice_mailout, args=[])
|
||||||
|
invoice_mailout += "?" + request.META["QUERY_STRING"]
|
||||||
links += [
|
links += [
|
||||||
(invoice_mailout + "&status=1", "Send invoice reminders",),
|
(invoice_mailout + "&status=1", "Send invoice reminders",),
|
||||||
(invoice_mailout + "&status=2", "Send mail for paid invoices",),
|
(invoice_mailout + "&status=2", "Send mail for paid invoices",),
|
||||||
|
@ -621,7 +627,7 @@ def attendee_data(request, form, user_id=None):
|
||||||
by_user[profile.attendee.user] = profile
|
by_user[profile.attendee.user] = profile
|
||||||
|
|
||||||
cart = "attendee__user__cart"
|
cart = "attendee__user__cart"
|
||||||
cart_status = cart + "__status"
|
cart_status = cart + "__status" # noqa
|
||||||
product = cart + "__productitem__product"
|
product = cart + "__productitem__product"
|
||||||
product_name = product + "__name"
|
product_name = product + "__name"
|
||||||
category = product + "__category"
|
category = product + "__category"
|
||||||
|
@ -631,12 +637,12 @@ def attendee_data(request, form, user_id=None):
|
||||||
grouping_fields = (category, category_name)
|
grouping_fields = (category, category_name)
|
||||||
order_by = (category, )
|
order_by = (category, )
|
||||||
first_column = "Category"
|
first_column = "Category"
|
||||||
group_name = lambda i: "%s" % (i[category_name], )
|
group_name = lambda i: "%s" % (i[category_name], ) # noqa
|
||||||
else:
|
else:
|
||||||
grouping_fields = (product, product_name, category_name)
|
grouping_fields = (product, product_name, category_name)
|
||||||
order_by = (category, )
|
order_by = (category, )
|
||||||
first_column = "Product"
|
first_column = "Product"
|
||||||
group_name = lambda i: "%s - %s" % (i[category_name], i[product_name])
|
group_name = lambda i: "%s - %s" % (i[category_name], i[product_name]) # noqa
|
||||||
|
|
||||||
# Group the responses per-field.
|
# Group the responses per-field.
|
||||||
for field in fields:
|
for field in fields:
|
||||||
|
@ -663,7 +669,7 @@ def attendee_data(request, form, user_id=None):
|
||||||
def display_field(value):
|
def display_field(value):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
status_count = lambda status: Case(When(
|
status_count = lambda status: Case(When( # noqa
|
||||||
attendee__user__cart__status=status,
|
attendee__user__cart__status=status,
|
||||||
then=Value(1),
|
then=Value(1),
|
||||||
),
|
),
|
||||||
|
@ -710,7 +716,8 @@ def attendee_data(request, form, user_id=None):
|
||||||
else:
|
else:
|
||||||
return attr
|
return attr
|
||||||
|
|
||||||
headings = ["User ID", "Name", "Email", "Product", "Item Status"] + field_names
|
headings = ["User ID", "Name", "Email", "Product", "Item Status"]
|
||||||
|
headings.extend(field_names)
|
||||||
data = []
|
data = []
|
||||||
for item in items:
|
for item in items:
|
||||||
profile = by_user[item.cart.user]
|
profile = by_user[item.cart.user]
|
||||||
|
@ -726,7 +733,8 @@ def attendee_data(request, form, user_id=None):
|
||||||
data.append(line)
|
data.append(line)
|
||||||
|
|
||||||
output.append(AttendeeListReport(
|
output.append(AttendeeListReport(
|
||||||
"Attendees by item with profile data", headings, data, link_view=attendee
|
"Attendees by item with profile data", headings, data,
|
||||||
|
link_view=attendee
|
||||||
))
|
))
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
@ -763,7 +771,7 @@ def speaker_registrations(request, form):
|
||||||
|
|
||||||
return QuerysetReport(
|
return QuerysetReport(
|
||||||
"Speaker Registration Status",
|
"Speaker Registration Status",
|
||||||
["id", "speaker_profile__name", "email", "paid_carts",],
|
["id", "speaker_profile__name", "email", "paid_carts"],
|
||||||
users,
|
users,
|
||||||
link_view=attendee,
|
link_view=attendee,
|
||||||
)
|
)
|
||||||
|
@ -776,7 +784,10 @@ def speaker_registrations(request, form):
|
||||||
forms.ProductAndCategoryForm,
|
forms.ProductAndCategoryForm,
|
||||||
)
|
)
|
||||||
def manifest(request, form):
|
def manifest(request, form):
|
||||||
''' Produces the registration manifest for people with the given product type.'''
|
'''
|
||||||
|
Produces the registration manifest for people with the given product
|
||||||
|
type.
|
||||||
|
'''
|
||||||
|
|
||||||
products = form.cleaned_data["product"]
|
products = form.cleaned_data["product"]
|
||||||
categories = form.cleaned_data["category"]
|
categories = form.cleaned_data["category"]
|
||||||
|
@ -835,9 +846,9 @@ def manifest(request, form):
|
||||||
headings = ["User ID", "Name", "Paid", "Unpaid", "Refunded"]
|
headings = ["User ID", "Name", "Paid", "Unpaid", "Refunded"]
|
||||||
|
|
||||||
def format_items(item_list):
|
def format_items(item_list):
|
||||||
strings = [
|
strings = []
|
||||||
"%d x %s" % (item.quantity, str(item.product)) for item in item_list
|
for item in item_list:
|
||||||
]
|
strings.append('%d x %s' % (item.quantity, str(item.product)))
|
||||||
return ", \n".join(strings)
|
return ", \n".join(strings)
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
|
@ -853,4 +864,4 @@ def manifest(request, form):
|
||||||
|
|
||||||
return ListReport("Manifest", headings, output)
|
return ListReport("Manifest", headings, output)
|
||||||
|
|
||||||
#attendeeprofilebase.attendee_name()
|
# attendeeprofilebase.attendee_name()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
from registrasion.controllers.batch import BatchController
|
from registrasion.controllers.batch import BatchController
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ from registrasion.models import people
|
||||||
from registrasion.controllers.batch import BatchController
|
from registrasion.controllers.batch import BatchController
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from patches import MixInPatches
|
from registrasion.tests.patches import MixInPatches
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ class RegistrationCartTestCase(MixInPatches, TestCase):
|
||||||
cls.RESERVATION = datetime.timedelta(hours=1)
|
cls.RESERVATION = datetime.timedelta(hours=1)
|
||||||
|
|
||||||
cls.categories = []
|
cls.categories = []
|
||||||
for i in xrange(2):
|
for i in range(2):
|
||||||
cat = inventory.Category.objects.create(
|
cat = inventory.Category.objects.create(
|
||||||
name="Category " + str(i + 1),
|
name="Category " + str(i + 1),
|
||||||
description="This is a test category",
|
description="This is a test category",
|
||||||
|
@ -81,7 +81,7 @@ class RegistrationCartTestCase(MixInPatches, TestCase):
|
||||||
cls.CAT_2 = cls.categories[1]
|
cls.CAT_2 = cls.categories[1]
|
||||||
|
|
||||||
cls.products = []
|
cls.products = []
|
||||||
for i in xrange(4):
|
for i in range(4):
|
||||||
prod = inventory.Product.objects.create(
|
prod = inventory.Product.objects.create(
|
||||||
name="Product " + str(i + 1),
|
name="Product " + str(i + 1),
|
||||||
description="This is a test product.",
|
description="This is a test product.",
|
||||||
|
@ -460,7 +460,6 @@ class BasicCartTests(RegistrationCartTestCase):
|
||||||
cart.cart.refresh_from_db()
|
cart.cart.refresh_from_db()
|
||||||
self.assertEqual(cart.cart.reservation_duration, new_res)
|
self.assertEqual(cart.cart.reservation_duration, new_res)
|
||||||
|
|
||||||
|
|
||||||
def test_reservation_duration_removals(self):
|
def test_reservation_duration_removals(self):
|
||||||
''' Reservation duration should update with removals
|
''' Reservation duration should update with removals
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -3,8 +3,8 @@ import pytz
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
from registrasion.controllers.discount import DiscountController
|
from registrasion.controllers.discount import DiscountController
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
@ -47,36 +47,36 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
||||||
def test_add_to_cart_ceiling_date_range(self):
|
def test_add_to_cart_ceiling_date_range(self):
|
||||||
self.make_ceiling(
|
self.make_ceiling(
|
||||||
"date range ceiling",
|
"date range ceiling",
|
||||||
start_time=datetime.datetime(2015, 01, 01, tzinfo=UTC),
|
start_time=datetime.datetime(2015, 1, 1, tzinfo=UTC),
|
||||||
end_time=datetime.datetime(2015, 02, 01, tzinfo=UTC))
|
end_time=datetime.datetime(2015, 2, 1, tzinfo=UTC))
|
||||||
|
|
||||||
current_cart = TestingCartController.for_user(self.USER_1)
|
current_cart = TestingCartController.for_user(self.USER_1)
|
||||||
|
|
||||||
# User should not be able to add whilst we're before start_time
|
# User should not be able to add whilst we're before start_time
|
||||||
self.set_time(datetime.datetime(2014, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2014, 1, 1, tzinfo=UTC))
|
||||||
with self.assertRaises(ValidationError):
|
with self.assertRaises(ValidationError):
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
|
|
||||||
# User should be able to add whilst we're during date range
|
# User should be able to add whilst we're during date range
|
||||||
# On edge of start
|
# On edge of start
|
||||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC))
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
# In middle
|
# In middle
|
||||||
self.set_time(datetime.datetime(2015, 01, 15, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 15, tzinfo=UTC))
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
# On edge of end
|
# On edge of end
|
||||||
self.set_time(datetime.datetime(2015, 02, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 2, 1, tzinfo=UTC))
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
|
|
||||||
# User should not be able to add whilst we're after date range
|
# User should not be able to add whilst we're after date range
|
||||||
self.set_time(datetime.datetime(2014, 01, 01, minute=01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2014, 1, 1, minute=1, tzinfo=UTC))
|
||||||
with self.assertRaises(ValidationError):
|
with self.assertRaises(ValidationError):
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
|
|
||||||
def test_add_to_cart_ceiling_limit_reserved_carts(self):
|
def test_add_to_cart_ceiling_limit_reserved_carts(self):
|
||||||
self.make_ceiling("Limit ceiling", limit=1)
|
self.make_ceiling("Limit ceiling", limit=1)
|
||||||
|
|
||||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC))
|
||||||
|
|
||||||
first_cart = TestingCartController.for_user(self.USER_1)
|
first_cart = TestingCartController.for_user(self.USER_1)
|
||||||
second_cart = TestingCartController.for_user(self.USER_2)
|
second_cart = TestingCartController.for_user(self.USER_2)
|
||||||
|
@ -113,7 +113,7 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
||||||
self.__validation_test()
|
self.__validation_test()
|
||||||
|
|
||||||
def __validation_test(self):
|
def __validation_test(self):
|
||||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC))
|
||||||
|
|
||||||
first_cart = TestingCartController.for_user(self.USER_1)
|
first_cart = TestingCartController.for_user(self.USER_1)
|
||||||
second_cart = TestingCartController.for_user(self.USER_2)
|
second_cart = TestingCartController.for_user(self.USER_2)
|
||||||
|
@ -144,7 +144,7 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
||||||
"Multi-product limit discount ceiling",
|
"Multi-product limit discount ceiling",
|
||||||
limit=2,
|
limit=2,
|
||||||
)
|
)
|
||||||
for i in xrange(2):
|
for i in range(2):
|
||||||
cart = TestingCartController.for_user(self.USER_1)
|
cart = TestingCartController.for_user(self.USER_1)
|
||||||
cart.add_to_cart(self.PROD_1, 1)
|
cart.add_to_cart(self.PROD_1, 1)
|
||||||
cart.next_cart()
|
cart.next_cart()
|
||||||
|
@ -162,7 +162,7 @@ class CeilingsTestCases(RegistrationCartTestCase):
|
||||||
# after second.
|
# after second.
|
||||||
self.make_ceiling("Multi-product limit ceiling", limit=2)
|
self.make_ceiling("Multi-product limit ceiling", limit=2)
|
||||||
|
|
||||||
for i in xrange(2):
|
for i in range(2):
|
||||||
cart = TestingCartController.for_user(self.USER_1)
|
cart = TestingCartController.for_user(self.USER_1)
|
||||||
cart.add_to_cart(self.PROD_1, 1)
|
cart.add_to_cart(self.PROD_1, 1)
|
||||||
cart.next_cart()
|
cart.next_cart()
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
import datetime
|
import datetime
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from decimal import Decimal
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
from registrasion.models import conditions
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from registrasion.models import inventory
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.test_helpers import TestHelperMixin
|
||||||
from controller_helpers import TestingCreditNoteController
|
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
from test_helpers import TestHelperMixin
|
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
@ -142,7 +139,7 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
invoice.refund()
|
invoice.refund()
|
||||||
|
|
||||||
# There should be one credit note generated out of the invoice.
|
# There should be one credit note generated out of the invoice.
|
||||||
cn = self._credit_note_for_invoice(invoice.invoice)
|
cn = self._credit_note_for_invoice(invoice.invoice) # noqa
|
||||||
|
|
||||||
self.assertEquals(1, commerce.CreditNote.unclaimed().count())
|
self.assertEquals(1, commerce.CreditNote.unclaimed().count())
|
||||||
|
|
||||||
|
@ -324,7 +321,7 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
# will be invalidated. A new invoice should be generated.
|
# will be invalidated. A new invoice should be generated.
|
||||||
cart.add_to_cart(self.PROD_1, 1)
|
cart.add_to_cart(self.PROD_1, 1)
|
||||||
invoice = TestingInvoiceController.for_id(invoice.invoice.id)
|
invoice = TestingInvoiceController.for_id(invoice.invoice.id)
|
||||||
invoice2 = TestingInvoiceController.for_cart(cart.cart)
|
invoice2 = TestingInvoiceController.for_cart(cart.cart) # noqa
|
||||||
cn2 = self._credit_note_for_invoice(invoice.invoice)
|
cn2 = self._credit_note_for_invoice(invoice.invoice)
|
||||||
|
|
||||||
invoice._refresh()
|
invoice._refresh()
|
||||||
|
@ -387,7 +384,6 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
notes_value = self._generate_multiple_credit_notes()
|
notes_value = self._generate_multiple_credit_notes()
|
||||||
invoice = self._manual_invoice(notes_value - 1)
|
invoice = self._manual_invoice(notes_value - 1)
|
||||||
|
|
||||||
|
|
||||||
self.assertEqual(notes_value - 1, invoice.invoice.total_payments())
|
self.assertEqual(notes_value - 1, invoice.invoice.total_payments())
|
||||||
self.assertTrue(invoice.invoice.is_paid)
|
self.assertTrue(invoice.invoice.is_paid)
|
||||||
|
|
||||||
|
@ -403,14 +399,14 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
''' Tests that excess credit notes are untouched if they're not needed
|
''' Tests that excess credit notes are untouched if they're not needed
|
||||||
'''
|
'''
|
||||||
|
|
||||||
notes_value = self._generate_multiple_credit_notes()
|
notes_value = self._generate_multiple_credit_notes() # noqa
|
||||||
notes_old = commerce.CreditNote.unclaimed().filter(
|
notes_old = commerce.CreditNote.unclaimed().filter(
|
||||||
invoice__user=self.USER_1
|
invoice__user=self.USER_1
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create a manual invoice whose value is smaller than any of the
|
# Create a manual invoice whose value is smaller than any of the
|
||||||
# credit notes we created
|
# credit notes we created
|
||||||
invoice = self._manual_invoice(1)
|
invoice = self._manual_invoice(1) # noqa
|
||||||
notes_new = commerce.CreditNote.unclaimed().filter(
|
notes_new = commerce.CreditNote.unclaimed().filter(
|
||||||
invoice__user=self.USER_1
|
invoice__user=self.USER_1
|
||||||
)
|
)
|
||||||
|
@ -422,7 +418,7 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
def test_credit_notes_are_not_applied_if_user_has_multiple_invoices(self):
|
def test_credit_notes_are_not_applied_if_user_has_multiple_invoices(self):
|
||||||
|
|
||||||
# Have an invoice pending with no credit notes; no payment will be made
|
# Have an invoice pending with no credit notes; no payment will be made
|
||||||
invoice1 = self._invoice_containing_prod_1(1)
|
invoice1 = self._invoice_containing_prod_1(1) # noqa
|
||||||
# Create some credit notes.
|
# Create some credit notes.
|
||||||
self._generate_multiple_credit_notes()
|
self._generate_multiple_credit_notes()
|
||||||
|
|
||||||
|
@ -435,7 +431,7 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
|
|
||||||
def test_credit_notes_are_applied_even_if_some_notes_are_claimed(self):
|
def test_credit_notes_are_applied_even_if_some_notes_are_claimed(self):
|
||||||
|
|
||||||
for i in xrange(10):
|
for i in range(10):
|
||||||
# Generate credit note
|
# Generate credit note
|
||||||
invoice1 = self._manual_invoice(1)
|
invoice1 = self._manual_invoice(1)
|
||||||
invoice1.pay("Pay", invoice1.invoice.value)
|
invoice1.pay("Pay", invoice1.invoice.value)
|
||||||
|
@ -467,5 +463,5 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
|
|
||||||
def test_cancellation_fee_is_applied_when_another_invoice_is_unpaid(self):
|
def test_cancellation_fee_is_applied_when_another_invoice_is_unpaid(self):
|
||||||
|
|
||||||
extra_invoice = self._manual_invoice(23)
|
extra_invoice = self._manual_invoice(23) # noqa
|
||||||
self.test_cancellation_fee_is_applied()
|
self.test_cancellation_fee_is_applied()
|
||||||
|
|
|
@ -5,9 +5,9 @@ from decimal import Decimal
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.controllers.discount import DiscountController
|
from registrasion.controllers.discount import DiscountController
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ from django.core.exceptions import ValidationError
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.controllers.category import CategoryController
|
from registrasion.controllers.category import CategoryController
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
|
|
||||||
from registrasion.models import commerce
|
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.controllers.category import CategoryController
|
|
||||||
from controller_helpers import TestingCartController
|
|
||||||
from controller_helpers import TestingInvoiceController
|
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,10 @@ import datetime
|
||||||
|
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
|
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from controller_helpers import TestingCreditNoteController
|
from registrasion.tests.controller_helpers import TestingCreditNoteController
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
|
|
||||||
|
|
||||||
class TestHelperMixin(object):
|
class TestHelperMixin(object):
|
||||||
|
|
||||||
|
|
|
@ -7,12 +7,11 @@ from django.core.exceptions import ValidationError
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.models import inventory
|
from registrasion.models import inventory
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from controller_helpers import TestingCreditNoteController
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.test_helpers import TestHelperMixin
|
||||||
from test_helpers import TestHelperMixin
|
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
@ -67,7 +66,7 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
|
|
||||||
def test_create_invoice_fails_if_cart_invalid(self):
|
def test_create_invoice_fails_if_cart_invalid(self):
|
||||||
self.make_ceiling("Limit ceiling", limit=1)
|
self.make_ceiling("Limit ceiling", limit=1)
|
||||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC))
|
||||||
current_cart = TestingCartController.for_user(self.USER_1)
|
current_cart = TestingCartController.for_user(self.USER_1)
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
|
|
||||||
|
@ -166,7 +165,6 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
current_cart.add_to_cart(self.PROD_1, 1)
|
current_cart.add_to_cart(self.PROD_1, 1)
|
||||||
return TestingInvoiceController.for_cart(current_cart.cart)
|
return TestingInvoiceController.for_cart(current_cart.cart)
|
||||||
|
|
||||||
|
|
||||||
def test_zero_value_invoice_is_automatically_paid(self):
|
def test_zero_value_invoice_is_automatically_paid(self):
|
||||||
invoice_1 = self._make_zero_value_invoice()
|
invoice_1 = self._make_zero_value_invoice()
|
||||||
self.assertTrue(invoice_1.invoice.is_paid)
|
self.assertTrue(invoice_1.invoice.is_paid)
|
||||||
|
@ -220,7 +218,7 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
|
||||||
# generate an invoice
|
# generate an invoice
|
||||||
self.add_timedelta(self.RESERVATION * 2)
|
self.add_timedelta(self.RESERVATION * 2)
|
||||||
cart2.add_to_cart(self.PROD_2, 1)
|
cart2.add_to_cart(self.PROD_2, 1)
|
||||||
inv2 = TestingInvoiceController.for_cart(cart2.cart)
|
TestingInvoiceController.for_cart(cart2.cart)
|
||||||
|
|
||||||
# Re-get inv1's invoice; it should void itself on loading.
|
# Re-get inv1's invoice; it should void itself on loading.
|
||||||
inv1 = TestingInvoiceController(inv1.invoice)
|
inv1 = TestingInvoiceController(inv1.invoice)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
from registrasion.models import commerce
|
from registrasion.models import commerce
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
|
|
||||||
from registrasion.models import commerce
|
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.controllers.category import CategoryController
|
|
||||||
from controller_helpers import TestingCartController
|
|
||||||
from controller_helpers import TestingInvoiceController
|
|
||||||
from registrasion.controllers.product import ProductController
|
from registrasion.controllers.product import ProductController
|
||||||
|
|
||||||
from symposion.conference import models as conference_models
|
from symposion.conference import models as conference_models
|
||||||
|
@ -16,7 +10,7 @@ from symposion.schedule import models as schedule_models
|
||||||
from symposion.speakers import models as speaker_models
|
from symposion.speakers import models as speaker_models
|
||||||
|
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
@ -41,7 +35,7 @@ class SpeakerTestCase(RegistrationCartTestCase):
|
||||||
name="TEST_SECTION",
|
name="TEST_SECTION",
|
||||||
slug="testsection",
|
slug="testsection",
|
||||||
)
|
)
|
||||||
proposal_section = proposal_models.ProposalSection.objects.create(
|
proposal_section = proposal_models.ProposalSection.objects.create( # noqa
|
||||||
section=section,
|
section=section,
|
||||||
closed=False,
|
closed=False,
|
||||||
published=False,
|
published=False,
|
||||||
|
|
|
@ -8,10 +8,10 @@ from django.db import transaction
|
||||||
|
|
||||||
from registrasion.models import conditions
|
from registrasion.models import conditions
|
||||||
from registrasion.models import inventory
|
from registrasion.models import inventory
|
||||||
from controller_helpers import TestingCartController
|
from registrasion.tests.controller_helpers import TestingCartController
|
||||||
from controller_helpers import TestingInvoiceController
|
from registrasion.tests.controller_helpers import TestingInvoiceController
|
||||||
|
|
||||||
from test_cart import RegistrationCartTestCase
|
from registrasion.tests.test_cart import RegistrationCartTestCase
|
||||||
|
|
||||||
UTC = pytz.timezone('UTC')
|
UTC = pytz.timezone('UTC')
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class VoucherTestCases(RegistrationCartTestCase):
|
||||||
def test_apply_voucher(self):
|
def test_apply_voucher(self):
|
||||||
voucher = self.new_voucher()
|
voucher = self.new_voucher()
|
||||||
|
|
||||||
self.set_time(datetime.datetime(2015, 01, 01, tzinfo=UTC))
|
self.set_time(datetime.datetime(2015, 1, 1, tzinfo=UTC))
|
||||||
|
|
||||||
cart_1 = TestingCartController.for_user(self.USER_1)
|
cart_1 = TestingCartController.for_user(self.USER_1)
|
||||||
cart_1.apply_voucher(voucher.code)
|
cart_1.apply_voucher(voucher.code)
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
import datetime
|
import datetime
|
||||||
import sys
|
|
||||||
from registrasion import util
|
|
||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
from registrasion import forms
|
from registrasion import forms
|
||||||
|
@ -926,6 +924,7 @@ Email = namedtuple(
|
||||||
("subject", "body", "from_email", "recipient_list"),
|
("subject", "body", "from_email", "recipient_list"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@user_passes_test(_staff_only)
|
@user_passes_test(_staff_only)
|
||||||
def invoice_mailout(request):
|
def invoice_mailout(request):
|
||||||
''' Allows staff to send emails to users based on their invoice status. '''
|
''' Allows staff to send emails to users based on their invoice status. '''
|
||||||
|
@ -951,8 +950,8 @@ def invoice_mailout(request):
|
||||||
subject = form.cleaned_data["subject"]
|
subject = form.cleaned_data["subject"]
|
||||||
body = Template(form.cleaned_data["body"]).render(
|
body = Template(form.cleaned_data["body"]).render(
|
||||||
Context({
|
Context({
|
||||||
"invoice" : invoice,
|
"invoice": invoice,
|
||||||
"user" : invoice.user,
|
"user": invoice.user,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
recipient_list = [invoice.user.email]
|
recipient_list = [invoice.user.email]
|
||||||
|
|
Loading…
Reference in a new issue