def add_to_cart(self, chain, request, product_slug, product=None, formset=None, purchases=None, context=None, next='cart.cart', invalid='cart.cart', messages=None, **kwargs): if messages is None: messages = FlashMessages() # Next and invalid params are allowed to be present into query next = request.POST.get( 'next', request.GET.get('next', next)) invalid = request.POST.get( 'invalid', request.GET.get('invalid', invalid)) if product is None: try: product = modules.product.Product.objects.polymorphic().get( slug=product_slug) except modules.product.Product.DoesNotExist: raise Http404 if context is None: context = {} if formset is None: formset = self.get_add_to_cart_formset( product=product, data=request.POST) redirection = redirect(next) # Purchase will in most cases not yet be assigned, # it could be assigned however during the capture fase. if purchases is None: purchases = [] # We require a valid formset if formset.is_valid(): # get data from form for form in formset: purchase_args = self.get_purchase_args( product=product, form=form) try: purchase = modules.store.make_purchase( request=request, **purchase_args) except PurchaseInvalid as error: messages.error(request, _("{0} could not be added to " "your cart.") .format(product)) messages.error(request, error) redirection = redirect(invalid) # We will redirect to invalid, but keep on adding # valid purchases (in case multiple purchases are made) continue purchases.append(purchase) else: messages.error(request, _("Your cart could not be updated.")) messages.error(request, get_error_message(formset)) redirection = redirect(invalid) # Get the cart cart = self.get_cart(request=request, messages=messages) if purchases: # Add purchases to cart for purchase in purchases: try: self.add_purchase( request=request, purchase=purchase, cart=cart) messages.success(request, _("{0} has been added to your " "cart.") .format(purchase.product)) except PurchaseInvalid as error: messages.error(request, _("{0} could not be added to " "your cart.") .format(purchase.product)) messages.error(request, error) redirection = redirect(invalid) # Keep track of our cart cart.track(request) if chain: return chain.execute( request, product=product, purchases=purchases, formset=formset, context=context, redirection=redirection, next=next, invalid=invalid, messages=messages, **kwargs) messages.transmit() return redirection
def edit_purchase(self, chain, request, purchase_id, purchase=None, form=None, context=None, next='cart.cart', invalid='cart.cart', messages=None, **kwargs): if messages is None: messages = FlashMessages() # Next and invalid params are allowed to be present into query next = request.POST.get( 'next', request.GET.get('next', next)) invalid = request.POST.get( 'invalid', request.GET.get('invalid', invalid)) if purchase is None: try: purchase = modules.store.Purchase.objects.polymorphic().get( pk=purchase_id) except modules.store.Purchase.DoesNotExist: raise Http404 if form is None: form = self.get_edit_purchase_form( purchase=purchase, data=request.POST) # Get the cart cart = self.get_cart(request=request, messages=messages) redirection = redirect(next) if 'remove' in request.POST: self.remove_purchase(request=request, purchase=purchase, cart=cart) else: # We require a valid form if form.is_valid(): purchase_args = self.get_edit_purchase_args( purchase=purchase, form=form) try: purchase = modules.store.make_purchase( request=request, **purchase_args) self.update_purchase( request=request, purchase=purchase, cart=cart) messages.success(request, _("Your cart has been " "updated.")) except PurchaseInvalid as error: messages.error(request, _("Your cart could not be " "updated.")) messages.error(request, error) redirection = redirect(invalid) else: messages.error(request, _("Your cart could not be " "updated.")) messages.error(request, get_error_message(form)) redirection = redirect(invalid) if chain: return chain.execute( request, purchase=purchase, form=form, context=context, redirection=redirection, messages=messages, **kwargs) messages.transmit() return redirection
def edit_purchase(request, purchase_id, **kwargs): try: purchase = Purchase.objects.polymorphic().get(pk=purchase_id) except Purchase.DoesNotExist: raise Http404 cart = cart_from_request(request) messages = FlashMessages() form = EditPurchaseForm.factory( purchase, data=request.POST )(request.POST) if 'remove' in request.POST: cart.remove(purchase) messages.success( request, _( "{0} has been removed from your " "cart." ).format(purchase) ) else: # We require a valid form if form.is_valid(): try: purchase = Purchase.make(**form.get_edit_purchase_args()) cart.update(purchase) messages.success(request, _("Your cart has been updated.")) except PurchaseInvalid as error: messages.error( request, _( "Your cart could not be " "updated." ) ) messages.error(request, error) else: messages.error(request, _("Your cart could not be updated.")) messages.error(request, get_error_message(form)) # Provide default response yield redirect( reverse( request.POST.get( 'next', request.GET.get('next', 'cart:cart')), current_app=resolve(request.path).namespace ) ) yield chaining.update( purchase=purchase, cart=cart, messages=messages) if (yield chaining.forward).result is None: raise ViewNotImplemented if cart.has_changed(): cart.calculate() cart.save() messages.transmit()
context = {} redirection = None form = self.ContactForm(request.POST or None) context['contact_form'] = form if request.method == 'POST': if form.is_valid(): redirection = redirect(next) if next else None mailer.send_mail('contact', { 'message' : form.cleaned_data['message'], 'name' : form.cleaned_data['name'], 'email' : form.cleaned_data['email'] }) else: messages.error(request, get_error_message(form)) redirection = redirect(invalid) if invalid else None if chain: return chaining.execute( request, form=form, context=context, next=next, invalid=invalid, redirection=redirection, messages=messages, **kwargs) elif redirection: messages.transmit() return redirection else: messages.clear() return render(request, 'store/contact.html', context) {% endif %}
def add_to_cart(request, **kwargs): cart = cart_from_request(request) messages = FlashMessages() form = AddToCartForm.factory(data=request.POST)(request.POST) # Create purchase purchase = None if form.is_valid(): try: purchase = Purchase.make(**form.get_purchase_args()) except PurchaseInvalid as error: messages.error(request, _("Could not be added to your cart.")) messages.error(request, error) else: messages.error(request, _("Your cart could not be updated.")) messages.error(request, get_error_message(form)) # Add purchase to cart if purchase is not None: try: cart.add(purchase) messages.success( request, _( "{0} has been added to your " "cart." ).format(purchase) ) except PurchaseInvalid as error: messages.error( request, _( "{0} could not be added to " "your cart." ).format(purchase) ) messages.error(request, error) # Provide default response yield redirect( reverse( request.POST.get( 'next', request.GET.get('next', 'cart:cart')), current_app=resolve(request.path).namespace ) ) yield chaining.update( purchase=purchase, cart=cart, messages=messages) if (yield chaining.forward).result is None: raise ViewNotImplemented if cart.has_changed(): cart.calculate() cart.save() cart.track(request) messages.transmit()