views.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #coding=utf-8
  2. import traceback
  3. import json
  4. from django.utils import timezone
  5. from libs import utils
  6. from libs.http import JSONError, JSONResponse,DataGridJSONResponse
  7. from apps.account.decorators import token_required
  8. from django.db import transaction, IntegrityError
  9. from apps.exceptions import CustomError
  10. from apps.foundation.models import BizLog
  11. from django.db.models import Q, Sum
  12. from django.conf import settings
  13. from .models import *
  14. from .serializers import *
  15. from .filters import *
  16. from apps.customer.models import Customer
  17. from apps.account.models import Branch
  18. @token_required
  19. def branch_list(request):
  20. f = BranchFilter(request.GET, queryset=Branch.objects.filter())
  21. rows, total = utils.get_page_data(request, f.qs)
  22. serializer = BranchSerializer(rows, many=True)
  23. return DataGridJSONResponse(serializer.data, total)
  24. @token_required
  25. def branch_save(request):
  26. id = request.GET.get('id')
  27. data = json.loads(request.body)
  28. try:
  29. with transaction.atomic():
  30. serializer = BranchSerializer.factory(request.user, data, id)
  31. serializer.validSave()
  32. return JSONResponse(serializer.data)
  33. except CustomError as e:
  34. return JSONError(e.get_error_msg())
  35. except Exception as e:
  36. traceback.print_exc()
  37. return JSONError(u'保存失败!')
  38. @token_required
  39. def self_branch(request):
  40. order = Branch.objects.filter(id=request.user.branch_id).first()
  41. data = {}
  42. if order:
  43. data = {'name': order.name, 'tel': order.tel, 'address': order.address}
  44. return JSONResponse({'data': data})
  45. @token_required
  46. def member_list(request):
  47. f = CustomerFilter(request.GET, queryset=Customer.objects.filter(branch=request.user.branch))
  48. rows, total = utils.get_page_data(request, f.qs)
  49. serializer = CustomerSerializer(rows, many=True)
  50. return DataGridJSONResponse(serializer.data, total)
  51. @token_required
  52. def member_coupon_list(request):
  53. f = MemberCouponFilter(request.GET, queryset=MemberCoupon.objects.filter(member__branch=request.user.branch))
  54. rows, total = utils.get_page_data(request, f.qs)
  55. serializer = MemberCouponSerializer(rows, many=True)
  56. return DataGridJSONResponse(serializer.data, total)
  57. @token_required
  58. def coupon_write_off(request):
  59. id = request.GET.get('id')
  60. try:
  61. with transaction.atomic():
  62. instance = MemberCoupon.getById(id)
  63. if instance.member.branch and instance.member.branch_id != request.user.branch_id:
  64. raise CustomError(u'禁止跨店操作!')
  65. instance.writeOff()
  66. BizLog.objects.addnew(request.user, BizLog.CHECK, u"核销会员优惠券,id=%d" % instance.id)
  67. except CustomError as e:
  68. return JSONError(e.get_error_msg())
  69. except Exception as e:
  70. traceback.print_exc()
  71. return JSONError(u'核销失败!')
  72. return JSONResponse()
  73. @token_required
  74. def coupon_cancel_write_off(request):
  75. id = request.GET.get('id')
  76. try:
  77. with transaction.atomic():
  78. instance = MemberCoupon.getById(id)
  79. if instance.member.branch and instance.member.branch_id != request.user.branch_id:
  80. raise CustomError(u'禁止跨店操作!')
  81. instance.cancelWriteOff()
  82. BizLog.objects.addnew(request.user, BizLog.CHECK, u"撤销核销会员优惠券,id=%d" % instance.id)
  83. except CustomError as e:
  84. return JSONError(e.get_error_msg())
  85. except Exception as e:
  86. traceback.print_exc()
  87. return JSONError(u'撤销核销失败!')
  88. return JSONResponse()
  89. @token_required
  90. def order_list(request):
  91. if request.user.is_superuser:
  92. rows = Order.objects.filter()
  93. else:
  94. rows = Order.objects.filter(branch=request.user.branch)
  95. f = OrderFilter(request.GET, queryset=rows)
  96. rows_sum = f.qs.aggregate(
  97. sum_rebate=Sum('rebate'),
  98. sum_amount=Sum('amount')
  99. )
  100. more = {
  101. 'sum_amount':rows_sum['sum_amount'],
  102. 'sum_rebate':rows_sum['sum_rebate'],
  103. }
  104. rows, total = utils.get_page_data(request, f.qs)
  105. serializer = OrderSerializer(rows, many=True)
  106. return DataGridJSONResponse(serializer.data, total, more)
  107. @token_required
  108. def coupon_list(request):
  109. f = BranchFilter(request.GET, queryset=Coupon.objects.filter(branch=request.user.branch))
  110. rows, total = utils.get_page_data(request, f.qs)
  111. serializer = CouponSerializer(rows, many=True)
  112. return DataGridJSONResponse(serializer.data, total)
  113. @token_required
  114. def coupon_save(request):
  115. id = request.GET.get('id')
  116. data = json.loads(request.body)
  117. try:
  118. with transaction.atomic():
  119. data['branch'] = request.user.branch_id
  120. serializer = CouponSerializer.factory(request.user, data, id)
  121. serializer.validSave()
  122. return JSONResponse(serializer.data)
  123. except CustomError as e:
  124. return JSONError(e.get_error_msg())
  125. except Exception as e:
  126. traceback.print_exc()
  127. return JSONError(u'保存失败!')
  128. @token_required
  129. def coupon_dict(request):
  130. rows = Coupon.objects.filter(
  131. Q(branch=request.user.branch, enabled=True) &
  132. Q(
  133. Q(end_date__isnull=False) & Q(end_date__gt=timezone.now().date()) |
  134. Q(end_date__isnull=True)
  135. )
  136. )
  137. serializer = CouponComboboxSerializer(rows, many=True)
  138. return DataGridJSONResponse(serializer.data, rows.count())
  139. @token_required
  140. def activity_list(request):
  141. if request.user.is_superuser:
  142. rows = Activity.objects.filter(delete=False)
  143. else:
  144. rows = Activity.objects.filter(branch_id=request.user.branch_id, delete=False)
  145. f = ActivityFilter(request.GET, queryset=rows)
  146. rows, total = utils.get_page_data(request, f.qs)
  147. serializer = ActivitySerializer(rows, many=True)
  148. return DataGridJSONResponse(serializer.data, total)
  149. @token_required
  150. def activity_save(request):
  151. id = request.GET.get('id')
  152. data = json.loads(request.body)
  153. try:
  154. with transaction.atomic():
  155. data['branch'] = request.user.branch_id
  156. serializer = ActivitySerializer.factory(request.user, data, id)
  157. serializer.validSave()
  158. return JSONResponse(serializer.data)
  159. except CustomError as e:
  160. return JSONError(e.get_error_msg())
  161. except Exception as e:
  162. traceback.print_exc()
  163. return JSONError(u'保存失败!')
  164. @token_required
  165. def activity_delete(request):
  166. id = request.GET.get('id')
  167. try:
  168. with transaction.atomic():
  169. order = Activity.objects.filter(id=id).first()
  170. if order.check_status == settings.PASS:
  171. raise CustomError(u'该活动已审核')
  172. order.delete = True
  173. order.save()
  174. BizLog.objects.addnew(request.user, BizLog.INSERT, u"删除活动[%s],id=%s" % (order.title, order.id))
  175. return JSONResponse({})
  176. except CustomError as e:
  177. return JSONError(e.get_error_msg())
  178. except Exception as e:
  179. traceback.print_exc()
  180. return JSONError(u'保存失败!')
  181. @token_required
  182. def activity_check(request):
  183. id = request.GET.get('id')
  184. status = request.GET.get('status')
  185. try:
  186. with transaction.atomic():
  187. order = Activity.objects.filter(id=id).first()
  188. if order.delete:
  189. raise CustomError(u'该活动已删除')
  190. if order.check_status == int(status):
  191. raise CustomError(u'该活动已当前状态不允许执行此操作')
  192. if int(status) == settings.PASS:
  193. order.check_status = settings.PASS
  194. order.save()
  195. BizLog.objects.addnew(request.user, BizLog.INSERT, u"审核活动[%s],id=%s" % (order.title, order.id))
  196. else:
  197. order.check_status = settings.DEFAULT
  198. order.save()
  199. BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动撤销审核[%s],id=%s" % (order.title, order.id))
  200. return JSONResponse({})
  201. except CustomError as e:
  202. return JSONError(e.get_error_msg())
  203. except Exception as e:
  204. traceback.print_exc()
  205. return JSONError(u'保存失败!')
  206. @token_required
  207. def activity_signs_save(request):
  208. id = request.GET.get('id')
  209. signs = request.POST.get('signs')
  210. try:
  211. with transaction.atomic():
  212. signs = json.loads(signs)
  213. order = Activity.objects.filter(id=id).first()
  214. if order.delete:
  215. raise CustomError(u'该活动已删除')
  216. save_sign = ''
  217. for sign in signs:
  218. save_sign += sign + ','
  219. order.required_signs = save_sign
  220. order.save()
  221. BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动设置必填项[%s],id=%s" % (order.title, order.id),signs )
  222. return JSONResponse({})
  223. except CustomError as e:
  224. return JSONError(e.get_error_msg())
  225. except Exception as e:
  226. traceback.print_exc()
  227. return JSONError(u'保存失败!')
  228. @token_required
  229. def activity_coupon_save(request):
  230. id = request.GET.get('id')
  231. coupon_ids = request.POST.get('coupons')
  232. try:
  233. with transaction.atomic():
  234. coupons = json.loads(coupon_ids)
  235. order = Activity.objects.filter(id=id).first()
  236. if order.delete:
  237. raise CustomError(u'该活动已删除')
  238. ActivityCoupon.objects.filter(activity=order).delete()
  239. for coupon in coupons:
  240. ActivityCoupon.objects.create(
  241. activity=order,
  242. coupon_id=coupon
  243. )
  244. BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动添加优惠券[%s],id=%s" % (order.title, order.id),coupon_ids )
  245. return JSONResponse({})
  246. except CustomError as e:
  247. return JSONError(e.get_error_msg())
  248. except Exception as e:
  249. traceback.print_exc()
  250. return JSONError(u'保存失败!')