You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from django.core.urlresolvers import resolve
  2. from oscar.core.loading import import_module
  3. import_module('shipping.repository', ['Repository'], locals())
  4. class CheckoutSessionData(object):
  5. u"""Class responsible for marshalling all the checkout session data."""
  6. SESSION_KEY = 'checkout_data'
  7. def __init__(self, request):
  8. self.request = request
  9. if self.SESSION_KEY not in self.request.session:
  10. self.request.session[self.SESSION_KEY] = {}
  11. def _check_namespace(self, namespace):
  12. if namespace not in self.request.session[self.SESSION_KEY]:
  13. self.request.session[self.SESSION_KEY][namespace] = {}
  14. def _get(self, namespace, key, default=None):
  15. u"""Return session value or None"""
  16. self._check_namespace(namespace)
  17. if key in self.request.session[self.SESSION_KEY][namespace]:
  18. return self.request.session[self.SESSION_KEY][namespace][key]
  19. return default
  20. def _set(self, namespace, key, value):
  21. u"""Set session value"""
  22. self._check_namespace(namespace)
  23. self.request.session[self.SESSION_KEY][namespace][key] = value
  24. self.request.session.modified = True
  25. def _unset(self, namespace, key):
  26. u"""Unset session value"""
  27. self._check_namespace(namespace)
  28. if key in self.request.session[self.SESSION_KEY][namespace]:
  29. del self.request.session[self.SESSION_KEY][namespace][key]
  30. self.request.session.modified = True
  31. def flush(self):
  32. u"""Delete session key"""
  33. self.request.session[self.SESSION_KEY] = {}
  34. # Shipping addresses
  35. def ship_to_user_address(self, address):
  36. u"""Set existing shipping address id to session and unset address fields from session"""
  37. self._set('shipping', 'user_address_id', address.id)
  38. self._unset('shipping', 'new_address_fields')
  39. def ship_to_new_address(self, address_fields):
  40. u"""Set new shipping address details to session and unset shipping address id"""
  41. self._set('shipping', 'new_address_fields', address_fields)
  42. self._unset('shipping', 'user_address_id')
  43. def new_address_fields(self):
  44. u"""Get shipping address fields from session"""
  45. return self._get('shipping', 'new_address_fields')
  46. def user_address_id(self):
  47. u"""Get user address id from session"""
  48. return self._get('shipping', 'user_address_id')
  49. # Shipping methods
  50. def use_free_shipping(self):
  51. u"""Set "free shipping" code to session"""
  52. self._set('shipping', 'method_code', '__free__')
  53. def use_shipping_method(self, code):
  54. u"""Set shipping method code to session"""
  55. self._set('shipping', 'method_code', code)
  56. def shipping_method(self):
  57. u"""
  58. Returns the shipping method model based on the
  59. data stored in the session.
  60. """
  61. code = self._get('shipping', 'method_code')
  62. if not code:
  63. return None
  64. return Repository().find_by_code(code)
  65. # Payment methods
  66. def pay_by(self, method):
  67. self._set('payment', 'method', method)
  68. def payment_method(self):
  69. return self._get('payment', 'method')
  70. def billing_address_same_as_shipping(self):
  71. self._set('payment', 'billing_address_same_as_shipping', True)
  72. def is_billing_address_same_as_shipping(self):
  73. return self._get('payment', 'billing_address_same_as_shipping', False)
  74. # Submission methods
  75. def set_submitted_basket(self, basket):
  76. self._set('submission', 'basket_id', basket.id)
  77. def get_submitted_basket_id(self):
  78. self._get('submission', 'basket_id')