handle_products now uses the transactional set_quantities.
This commit is contained in:
parent
e3ec128147
commit
8796670328
1 changed files with 11 additions and 16 deletions
|
@ -299,12 +299,8 @@ def handle_products(request, category, products, prefix):
|
||||||
)
|
)
|
||||||
|
|
||||||
if request.method == "POST" and products_form.is_valid():
|
if request.method == "POST" and products_form.is_valid():
|
||||||
try:
|
|
||||||
if products_form.has_changed():
|
if products_form.has_changed():
|
||||||
set_quantities_from_products_form(products_form, current_cart)
|
set_quantities_from_products_form(products_form, current_cart)
|
||||||
except ValidationError:
|
|
||||||
# There were errors, but they've already been added to the form.
|
|
||||||
pass
|
|
||||||
|
|
||||||
# If category is required, the user must have at least one
|
# If category is required, the user must have at least one
|
||||||
# in an active+valid cart
|
# in an active+valid cart
|
||||||
|
@ -326,20 +322,19 @@ def handle_products(request, category, products, prefix):
|
||||||
return products_form, discounts, handled
|
return products_form, discounts, handled
|
||||||
|
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def set_quantities_from_products_form(products_form, current_cart):
|
def set_quantities_from_products_form(products_form, current_cart):
|
||||||
# TODO: issue #8 is a problem here.
|
# TODO: issue #8 is a problem here.
|
||||||
quantities = list(products_form.product_quantities())
|
quantities = list(products_form.product_quantities())
|
||||||
quantities.sort(key=lambda item: item[1])
|
quantities.sort(key=lambda item: item[1])
|
||||||
for product_id, quantity, field_name in quantities:
|
|
||||||
product = rego.Product.objects.get(pk=product_id)
|
product_quantities = [
|
||||||
|
(rego.Product.objects.get(pk=i[0]), i[1]) for i in quantities
|
||||||
|
]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
current_cart.set_quantity(product, quantity, batched=True)
|
current_cart.set_quantities(product_quantities)
|
||||||
except ValidationError as ve:
|
except ValidationError as ve:
|
||||||
products_form.add_error(field_name, ve)
|
products_form.add_error(None, ve)
|
||||||
if products_form.errors:
|
|
||||||
raise ValidationError("Cannot add that stuff")
|
|
||||||
current_cart.end_batch()
|
|
||||||
|
|
||||||
|
|
||||||
def handle_voucher(request, prefix):
|
def handle_voucher(request, prefix):
|
||||||
|
|
Loading…
Reference in a new issue