| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- from django.http import HttpResponseRedirect
- from django.contrib import messages
- from django.core.urlresolvers import reverse
- from django.utils.translation import ugettext_lazy as _
-
- from oscar.core.loading import get_class
- ProgressChecker = get_class('checkout.utils', 'ProgressChecker')
-
-
- def prev_steps_must_be_complete(view_fn):
- """
- Decorator for checking that previous steps of the checkout
- are complete.
-
- The completed steps (identified by URL-names) are stored in the session.
- If this fails, then we redirect to the next uncompleted step.
- """
- def _view_wrapper(self, request, *args, **kwargs):
- checker = ProgressChecker()
- if not checker.are_previous_steps_complete(request):
- messages.error(request, _("You must complete this step of the checkout first"))
- url_name = checker.get_next_step(request)
- return HttpResponseRedirect(reverse(url_name))
- return view_fn(self, request, *args, **kwargs)
- return _view_wrapper
-
-
- def basket_required(view_fn):
- """
- Decorator for checking that the user has a non-empty basket
- or has a frozen one in the session
- """
- def _view_wrapper(self, request, *args, **kwargs):
- if request.basket.is_empty and not 'checkout_basket_id' in request.session:
- messages.error(request, _("You must add some products to your basket before checking out"))
- return HttpResponseRedirect(reverse('oscar-basket'))
- return view_fn(self, request, *args, **kwargs)
- return _view_wrapper
-
|