def product_form_dispatcher(request): """Dispatches to the added-to-cart view or to the selected variant. This is needed as the product form can have several submit buttons: - The add-to-cart button - The switch to the selected variant button (only in the case the variants of of the product are displayed as select box. This may change in future, when the switch may made with an ajax request.) """ if request.REQUEST.get("add-to-cart") is not None: return add_to_cart(request) else: product_id = request.POST.get("product_id") product = muecke_get_object_or_404(Product, pk=product_id) options = muecke_utils.parse_properties(request) variant = product.get_variant(options) if variant is None: variant = product.get_default_variant() return muecke.core.utils.set_message_cookie( variant.get_absolute_url(), msg=_(u"The choosen combination of properties is not deliverable.") ) return HttpResponseRedirect(variant.get_absolute_url())
def select_variant_from_properties(request): """ This is called via an ajax call if the combination of properties are changed. """ product_id = request.POST.get("product_id") try: variant = Product.objects.get(pk=product_id) except Product.DoesNotExist: return HttpResponse("") else: product = variant.parent options = muecke_utils.parse_properties(request) variant = product.get_variant(options) if variant is None: msg = _(u"The choosen combination of properties is not deliverable.") variant = product.get_default_variant() else: msg = _(u"The product has been changed according to your selection.") result = simplejson.dumps({ "product": product_inline(request, variant), "message": msg, }, cls=LazyEncoder) return HttpResponse(result)