diff --git a/registrasion/controllers/invoice.py b/registrasion/controllers/invoice.py index dafb134b9dd8fc6cdf39bde6770d11b00615e6a2..264049c86486febb699d343c16e667b7797cf774 100644 --- a/registrasion/controllers/invoice.py +++ b/registrasion/controllers/invoice.py @@ -57,6 +57,7 @@ class InvoiceController(object): return value @classmethod + @transaction.atomic def _generate(cls, cart): ''' Generates an invoice for the given cart. ''' invoice = rego.Invoice.objects.create( @@ -65,7 +66,6 @@ class InvoiceController(object): cart_revision=cart.revision, value=Decimal() ) - invoice.save() product_items = rego.ProductItem.objects.filter(cart=cart) @@ -85,7 +85,6 @@ class InvoiceController(object): quantity=item.quantity, price=product.price, ) - line_item.save() invoice_value += line_item.quantity * line_item.price for item in discount_items: @@ -95,11 +94,13 @@ class InvoiceController(object): quantity=item.quantity, price=cls.resolve_discount_value(item) * -1, ) - line_item.save() invoice_value += line_item.quantity * line_item.price - # TODO: calculate line items from discounts invoice.value = invoice_value + + if invoice.value == 0: + invoice.paid = True + invoice.save() return invoice