Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from django.shortcuts import render, get_object_or_404
  2. from django.contrib.auth.decorators import login_required
  3. from django.views.generic import ListView
  4. from django.core.urlresolvers import reverse
  5. from django.http import HttpResponseRedirect
  6. from django.contrib import messages
  7. from oscar.apps.address.forms import UserAddressForm
  8. from oscar.view.generic import ModelView
  9. from oscar.core.loading import import_module
  10. import_module('address.models', ['UserAddress'], locals())
  11. import_module('order.models', ['Order', 'Line'], locals())
  12. import_module('basket.models', ['Basket'], locals())
  13. import_module('basket.factory', ['BasketFactory'], locals())
  14. @login_required
  15. def profile(request):
  16. u"""Return a customers's profile"""
  17. # Load last 5 orders as preview
  18. orders = Order._default_manager.filter(user=request.user)[0:5]
  19. return render(request, 'oscar/customer/profile.html', locals())
  20. class OrderHistoryView(ListView):
  21. u"""Customer order history"""
  22. context_object_name = "orders"
  23. template_name = 'oscar/customer/order-history.html'
  24. paginate_by = 20
  25. def get_queryset(self):
  26. u"""Return a customer's orders"""
  27. return Order._default_manager.filter(user=self.request.user)
  28. class OrderDetailView(ModelView):
  29. u"""Customer order details"""
  30. template_file = "oscar/customer/order.html"
  31. def get_model(self):
  32. u"""Return an order object or 404"""
  33. return get_object_or_404(Order, user=self.request.user, number=self.kwargs['order_number'])
  34. def handle_GET(self, order):
  35. self.response = render(self.request, self.template_file, locals())
  36. class OrderLineView(ModelView):
  37. u"""Customer order line"""
  38. def get_model(self):
  39. u"""Return an order object or 404"""
  40. order = get_object_or_404(Order, user=self.request.user, number=self.kwargs['order_number'])
  41. return order.lines.get(id=self.kwargs['line_id'])
  42. def handle_GET(self, line):
  43. return HttpResponseRedirect(reverse('oscar-customer-order-view', kwargs={'order_number': line.order.number}))
  44. def handle_POST(self, line):
  45. self.response = HttpResponseRedirect(reverse('oscar-customer-order-view', kwargs={'order_number': line.order.number}))
  46. super(OrderLineView, self).handle_POST(line)
  47. def do_reorder(self, line):
  48. # Get basket
  49. basket = BasketFactory().get_or_create_open_basket(self.request, self.response)
  50. if not line.product:
  51. return
  52. # Convert line attributes into basket options
  53. options = []
  54. for attribute in line.attributes.all():
  55. if attribute.option:
  56. options.append({'option': attribute.option, 'value': attribute.value})
  57. basket.add_product(line.product, 1, options)
  58. messages.info(self.request, "Line reordered")
  59. self.response = HttpResponseRedirect(reverse('oscar-basket'))
  60. class AddressBookView(ListView):
  61. u"""Customer address book"""
  62. context_object_name = "addresses"
  63. template_name = 'oscar/customer/address-book.html'
  64. paginate_by = 40
  65. def get_queryset(self):
  66. u"""Return a customer's addresses"""
  67. return UserAddress._default_manager.filter(user=self.request.user)
  68. class AddressView(ModelView):
  69. u"""Customer address view"""
  70. template_file = "oscar/customer/address-form.html"
  71. def get_model(self):
  72. u"""Return an address object or a 404"""
  73. return get_object_or_404(UserAddress, user=self.request.user, pk=self.kwargs['address_id'])
  74. def handle_GET(self, address):
  75. form = UserAddressForm(instance=address)
  76. self.response = render(self.request, self.template_file, locals())
  77. def do_save(self, address):
  78. u"""Save an address"""
  79. form = UserAddressForm(self.request.POST, instance=address)
  80. if form.is_valid():
  81. a = form.save()
  82. self.response = HttpResponseRedirect(reverse('oscar-customer-address-book'))
  83. else:
  84. self.response = render(self.request, self.template_file, locals())
  85. def do_delete(self, address):
  86. u"""Delete an address"""
  87. address.delete()
  88. self.response = HttpResponseRedirect(reverse('oscar-customer-address-book'))