Replaces _generate with _generate_from_cart and _generate

This commit is contained in:
Christopher Neugebauer 2016-09-15 08:38:33 +10:00
parent 613667aa30
commit a9bc647570

View file

@ -44,7 +44,7 @@ class InvoiceController(ForId, object):
cart_controller.validate_cart() # Raises ValidationError on fail. cart_controller.validate_cart() # Raises ValidationError on fail.
cls.update_old_invoices(cart) cls.update_old_invoices(cart)
invoice = cls._generate(cart) invoice = cls._generate_from_cart(cart)
return cls(invoice) return cls(invoice)
@ -74,7 +74,7 @@ class InvoiceController(ForId, object):
@classmethod @classmethod
@transaction.atomic @transaction.atomic
def _generate(cls, cart): def _generate_from_cart(cls, cart):
''' Generates an invoice for the given cart. ''' ''' Generates an invoice for the given cart. '''
cart.refresh_from_db() cart.refresh_from_db()
@ -86,14 +86,13 @@ class InvoiceController(ForId, object):
"product", "product",
"product__category", "product__category",
) )
if len(product_items) == 0:
raise ValidationError("Your cart is empty.")
product_items = product_items.order_by( product_items = product_items.order_by(
"product__category__order", "product__order" "product__category__order", "product__order"
) )
if len(product_items) == 0:
raise ValidationError("Your cart is empty.")
discount_items = commerce.DiscountItem.objects.filter(cart=cart) discount_items = commerce.DiscountItem.objects.filter(cart=cart)
discount_items = discount_items.select_related( discount_items = discount_items.select_related(
"discount", "discount",
@ -101,8 +100,6 @@ class InvoiceController(ForId, object):
"product__category", "product__category",
) )
line_items = []
def format_product(product): def format_product(product):
return "%s - %s" % (product.category.name, product.name) return "%s - %s" % (product.category.name, product.name)
@ -110,6 +107,8 @@ class InvoiceController(ForId, object):
description = discount.description description = discount.description
return "%s (%s)" % (description, format_product(product)) return "%s (%s)" % (description, format_product(product))
line_items = []
for item in product_items: for item in product_items:
product = item.product product = item.product
line_item = commerce.LineItem( line_item = commerce.LineItem(
@ -131,10 +130,17 @@ class InvoiceController(ForId, object):
# Generate the invoice # Generate the invoice
user = cart.user user = cart.user
reservation_limit = cart.reservation_duration + cart.time_last_updated min_due_time = cart.reservation_duration + cart.time_last_updated
return cls._generate(cart.user, cart, min_due_time, line_items)
@classmethod
@transaction.atomic
def _generate(cls, user, cart, min_due_time, line_items):
# Never generate a due time that is before the issue time # Never generate a due time that is before the issue time
issued = timezone.now() issued = timezone.now()
due = max(issued, reservation_limit) due = max(issued, min_due_time)
# Get the invoice recipient # Get the invoice recipient
profile = people.AttendeeProfileBase.objects.get_subclass( profile = people.AttendeeProfileBase.objects.get_subclass(