Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

utils.py 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.core.urlresolvers import resolve
  2. class ProgressChecker(object):
  3. """
  4. Class for testing whether the appropriate steps of the checkout
  5. have been completed.
  6. """
  7. # List of URL names that have to be completed (in this order)
  8. urls_for_steps = ['oscar-checkout-shipping-address',
  9. 'oscar-checkout-shipping-method',
  10. 'oscar-checkout-payment',
  11. 'oscar-checkout-preview',
  12. 'oscar-checkout-submit',]
  13. def are_previous_steps_complete(self, request):
  14. """
  15. Checks whether the previous checkout steps have been completed.
  16. This uses the URL-name and the class-level list of required
  17. steps.
  18. """
  19. # Extract the URL name from the path
  20. complete_steps = self._get_completed_steps(request)
  21. try:
  22. url_name = self._get_url_name(request)
  23. current_step_index = self.urls_for_steps.index(url_name)
  24. last_completed_step_index = len(complete_steps) - 1
  25. return current_step_index <= last_completed_step_index + 1
  26. except ValueError:
  27. # Can't find current step index - must be manipulation
  28. return False
  29. except IndexError:
  30. # No complete steps - only allowed to be on first page
  31. return current_step_index == 0
  32. def step_complete(self, request):
  33. """
  34. Record a checkout step as complete.
  35. """
  36. url_name = self._get_url_name(request)
  37. complete_steps = self._get_completed_steps(request)
  38. if not url_name in complete_steps:
  39. # Only add name if this is the first time the step
  40. # has been completed.
  41. complete_steps.append(url_name)
  42. request.session['checkout_complete_steps'] = complete_steps
  43. def get_next_step(self, request):
  44. """
  45. Returns the next incomplete step of the checkout.
  46. """
  47. completed_steps = self._get_completed_steps(request)
  48. if len(completed_steps):
  49. return self.urls_for_steps[len(completed_steps)]
  50. else:
  51. return self.urls_for_steps[0]
  52. def all_steps_complete(self, request):
  53. """
  54. Order has been submitted - clear the completed steps from
  55. the session.
  56. """
  57. request.session['checkout_complete_steps'] = []
  58. def _get_url_name(self, request):
  59. return resolve(request.path).url_name
  60. def _get_completed_steps(self, request):
  61. return request.session.get('checkout_complete_steps', [])