views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. """ Admin views """
  2. from django.core.urlresolvers import reverse
  3. from django.http import HttpResponseRedirect
  4. from django.shortcuts import render_to_response, get_object_or_404
  5. from django.template import RequestContext
  6. from django.contrib.admin.views.decorators import staff_member_required
  7. from django.contrib.auth.decorators import permission_required
  8. from accounts.utils import get_subscriptions
  9. from catalog.models import (Item, Book, Map, Movie, Person, Subscription,
  10. ZipCode)
  11. from store_order.models import Order, OrderItem
  12. from catalog.forms import (MovieForm, MapForm, PersonForm, BookForm,
  13. SubscriptionForm, PostalCodeForm)
  14. @staff_member_required
  15. @permission_required('pbp_core.store_admin_login')
  16. def store_admin_home(request):
  17. """ Store Admin Home page """
  18. #TODO: security, etc
  19. return render_to_response("pbp_store/store_admin/home.html",
  20. context_instance=RequestContext(request))
  21. @staff_member_required
  22. @permission_required('pbp_core.store_catalog_edit')
  23. def add_edit_subscription(request, sku=None,
  24. template='pbp_store/store_admin/add_edit.html'):
  25. """ Add catalogs form """
  26. return add_edit(request, Subscription, SubscriptionForm, "Subscription",
  27. sku=sku, template=template)
  28. @staff_member_required
  29. @permission_required('pbp_core.store_catalog_edit')
  30. def add_edit_book(request, sku=None,
  31. template='pbp_store/store_admin/add_edit.html'):
  32. """ Add / edit book """
  33. return add_edit(request, Book, BookForm, "Book", sku=sku,
  34. template=template)
  35. @staff_member_required
  36. @permission_required('pbp_core.store_catalog_edit')
  37. def add_edit_map(request, sku=None, template='pbp_store/store_admin/add_edit.html'):
  38. """ Add / edit map """
  39. return add_edit(request, Map, MapForm, "Map", sku=sku, template=template)
  40. @staff_member_required
  41. @permission_required('pbp_core.store_catalog_edit')
  42. def add_edit_movie(request, sku=None,
  43. template='pbp_store/store_admin/add_edit.html'):
  44. """ Add / edit movie """
  45. return add_edit(request, Movie, MovieForm, "Movie", sku=sku,
  46. template=template)
  47. def add_edit(request, model, modelform, title, sku=None, template=None):
  48. """ Add edit item """
  49. item = None
  50. edit_mode = False
  51. if sku:
  52. item = get_object_or_404(model, sku=sku)
  53. edit_mode = True
  54. form = modelform(request.POST or None, request.FILES or None,
  55. instance=item)
  56. if form.is_valid():
  57. item = form.save(commit=False)
  58. if not edit_mode:
  59. item.created_by = request.user
  60. item.last_updated_by = request.user
  61. item.save()
  62. if item.is_book:
  63. form.save_m2m()
  64. return HttpResponseRedirect(reverse('catalog_list'))
  65. cancel_url = reverse('catalog_list')
  66. return render_to_response(template, {'form': form, 'edit_mode': edit_mode,
  67. 'item_type': title, 'cancel_url': cancel_url },
  68. context_instance=RequestContext(request))
  69. @staff_member_required
  70. @permission_required('pbp_core.store_catalog_edit')
  71. def delete_item(request, sku, template='pbp_store/store_admin/delete_confirm.html'):
  72. """ Add movie """
  73. item = get_object_or_404(Item, sku=sku)
  74. if request.method == 'POST':
  75. item.deleted = True
  76. item.last_updated_by = request.user
  77. item.save()
  78. return HttpResponseRedirect(reverse('catalog_list'))
  79. return render_to_response(template, {'item': item},
  80. context_instance=RequestContext(request))
  81. @staff_member_required
  82. @permission_required('pbp_core.store_catalog_view')
  83. def list_catalog(request, category='all',
  84. template='pbp_store/store_admin/catalog_list.html'):
  85. """ Simple list of all the catalogs """
  86. config = {'movie': Movie,
  87. 'book': Book,
  88. 'map': Map,
  89. 'subscription': Subscription,
  90. 'all': Item}
  91. model = config.get(category, Item)
  92. # sort by title or price, asc or desc default to title asc
  93. catalog = model.objects.active()
  94. return render_to_response(template, {'catalog': catalog,
  95. 'category': category},
  96. context_instance=RequestContext(request))
  97. @staff_member_required
  98. @permission_required('pbp_core.store_admin_orders')
  99. def list_orders(request, template='pbp_store/store_admin/order_list.html'):
  100. """ Simple list of all the orders """
  101. config = {'init': Order.INIT,
  102. 'submitted': Order.SUBMITTED,
  103. 'processed': Order.PROCESSED,
  104. 'shipped': Order.SHIPPED,
  105. 'cancelled': Order.CANCELLED}
  106. status = request.GET.get('status', 'processed')
  107. if status == 'all':
  108. orders = Order.objects.all()
  109. else:
  110. status_filter = config.get(status)
  111. orders = Order.objects.filter(status=status_filter)
  112. return render_to_response(template, {'orders': orders, 'status': status},
  113. context_instance=RequestContext(request))
  114. @staff_member_required
  115. @permission_required('pbp_core.store_admin_orders')
  116. def view_order_detail(request, order_number,
  117. template='pbp_store/store_admin/order.html'):
  118. """ View order details """
  119. order = get_object_or_404(Order, pk=order_number)
  120. return render_to_response(template, {'order': order},
  121. context_instance=RequestContext(request))
  122. @staff_member_required
  123. @permission_required('pbp_core.store_admin_orders')
  124. def list_subscriptions(
  125. request, template='pbp_store/store_admin/subscription_list.html'):
  126. """ Simple list of all the orders """
  127. config = {'init': Order.INIT,
  128. 'submitted': Order.SUBMITTED,
  129. 'processed': Order.PROCESSED,
  130. 'shipped': Order.SHIPPED,
  131. 'cancelled': Order.CANCELLED}
  132. status = request.GET.get('status', 'processed')
  133. if status == 'all':
  134. order_items = OrderItem.objects.filter(
  135. product__subclass_type__iexact=Subscription.__name__.lower())
  136. else:
  137. status_filter = config.get(status)
  138. order_items = OrderItem.objects.filter(
  139. product__subclass_type__iexact=Subscription.__name__.lower()
  140. ).filter(order__status=status_filter)
  141. return render_to_response(template, {'order_items': order_items,
  142. 'status': status},
  143. context_instance=RequestContext(request))
  144. @staff_member_required
  145. @permission_required('pbp_core.store_admin_orders')
  146. def subscription_detail(
  147. request, order_number, order_item=None,
  148. template='pbp_store/store_admin/subscription_detail.html'):
  149. """ Simple list of all the orders """
  150. order = get_object_or_404(Order, pk=order_number)
  151. if order_number:
  152. order_items = get_subscriptions(order=order)
  153. return render_to_response(
  154. template, {'order_items': order_items, 'order': order},
  155. context_instance=RequestContext(request))
  156. @staff_member_required
  157. @permission_required('pbp_core.store_catalog_view')
  158. def list_postal_codes(request, template='pbp_store/store_admin/postal_code_list.html'):
  159. """ list the postal codes """
  160. postal_codes = ZipCode.objects.active()
  161. return render_to_response(template, {'postal_codes': postal_codes},
  162. context_instance=RequestContext(request))
  163. @staff_member_required
  164. @permission_required('pbp_core.store_catalog_edit')
  165. def add_edit_postal_code(request, postal_code=None,
  166. template='pbp_store/store_admin/add_edit.html'):
  167. """ Add edit postal_code """
  168. item = None
  169. edit_mode = False
  170. if postal_code:
  171. item = get_object_or_404(ZipCode, zipcode=postal_code)
  172. edit_mode = True
  173. form = PostalCodeForm(request.POST or None, instance=item)
  174. if form.is_valid():
  175. item = form.save(commit=False)
  176. if not edit_mode:
  177. item.created_by = request.user
  178. item.last_updated_by = request.user
  179. item.save()
  180. return HttpResponseRedirect(reverse('postal_code_list'))
  181. cancel_url = reverse('postal_code_list')
  182. return render_to_response(template, {'form': form, 'edit_mode': edit_mode,
  183. 'item_type': 'Postal Code', 'cancel_url': cancel_url},
  184. context_instance=RequestContext(request))
  185. @staff_member_required
  186. @permission_required('pbp_core.store_catalog_edit')
  187. def delete_postal_code(request, postal_code,
  188. template='pbp_store/store_admin/delete_confirm.html'):
  189. """ Add movie """
  190. item = get_object_or_404(ZipCode, zipcode=postal_code)
  191. if request.method == 'POST':
  192. item.deleted = True
  193. item.last_updated_by = request.user
  194. item.save()
  195. return HttpResponseRedirect(reverse('postal_code_list'))
  196. return render_to_response(template, {'item': item},
  197. context_instance=RequestContext(request))
  198. @staff_member_required
  199. @permission_required('pbp_core.store_catalog_view')
  200. def list_persons(request, template='pbp_store/store_admin/person_list.html'):
  201. """ list the postal codes """
  202. persons = Person.objects.active()
  203. return render_to_response(template, {'persons': persons},
  204. context_instance=RequestContext(request))
  205. @staff_member_required
  206. @permission_required('pbp_core.store_catalog_edit')
  207. def add_edit_person(request, person_slug=None,
  208. template='pbp_store/store_admin/add_edit.html'):
  209. """ Add edit Author """
  210. item = None
  211. edit_mode = False
  212. if person_slug:
  213. item = get_object_or_404(Person, slug=person_slug)
  214. edit_mode = True
  215. form = PersonForm(request.POST or None, request.FILES or None,
  216. instance=item)
  217. if form.is_valid():
  218. item = form.save(commit=False)
  219. if not edit_mode:
  220. item.created_by = request.user
  221. item.last_updated_by = request.user
  222. item.save()
  223. return HttpResponseRedirect(reverse('person_list'))
  224. cancel_url = reverse('person_list')
  225. return render_to_response(template, {'form': form, 'edit_mode': edit_mode,
  226. 'item_type': 'Person', 'cancel_url': cancel_url},
  227. context_instance=RequestContext(request))
  228. @staff_member_required
  229. @permission_required('pbp_core.store_catalog_edit')
  230. def delete_person(request, person_slug,
  231. template='pbp_store/store_admin/delete_confirm.html'):
  232. """ Add movie """
  233. item = get_object_or_404(Person, slug=person_slug)
  234. if request.method == 'POST':
  235. item.deleted = True
  236. item.last_updated_by = request.user
  237. item.save()
  238. return HttpResponseRedirect(reverse('person_list'))
  239. return render_to_response(template, {'item': item},
  240. context_instance=RequestContext(request))