No Description

tenancy_admin_views.py 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. from django.db import transaction
  4. from django_logit import logit
  5. from django_response import response
  6. from paginator import pagination
  7. from TimeConvert import TimeConvert as tc
  8. from django.db.models import Q
  9. from api.tenancy_views import tenancy_tracking_info_subscribe
  10. from kodo.decorators import check_admin
  11. from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
  12. from utils.error.errno_utils import TenancyStatusCode
  13. from utils.kuaidi.synquery import KuaiDi100
  14. @logit
  15. @check_admin
  16. def shot_list(request, administrator):
  17. page = request.POST.get('page', 1)
  18. num = request.POST.get('num', 20)
  19. query = request.POST.get('query', '')
  20. shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk')
  21. if query:
  22. shots = shots.filter(Q(sn__icontains=query))
  23. count = shots.count()
  24. shots = [shot.data for shot in shots]
  25. shots, left = pagination(shots, page, num)
  26. return response(data={
  27. 'shots': shots,
  28. 'left': left,
  29. 'count': count,
  30. })
  31. @logit
  32. @check_admin
  33. def shot_detail(request, administrator):
  34. shot_id = request.POST.get('shot_id', '')
  35. try:
  36. shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True)
  37. except TenancyShotInfo.DoesNotExist:
  38. return response(TenancyStatusCode.TENANCY_SHOT_NOT_FOUND)
  39. return response(data={
  40. 'shot': shot.data,
  41. })
  42. @logit
  43. @check_admin
  44. def shot_create(request, administrator):
  45. model_id = request.POST.get('model_id', '')
  46. model_name = request.POST.get('model_name', '')
  47. sn = request.POST.get('sn', '')
  48. front_cap_status = request.POST.get('front_cap_status', 1)
  49. rear_cap_status = request.POST.get('rear_cap_status', 1)
  50. lens_hood_status = request.POST.get('lens_hood_status', 1)
  51. tripod_ring_status = request.POST.get('tripod_ring_status', 1)
  52. appearance_performance_status = request.POST.get('appearance_performance_status', 1)
  53. tenancy_status = request.POST.get('tenancy_status', 0)
  54. shot = TenancyShotInfo.objects.create(
  55. model_id=model_id,
  56. model_name=model_name,
  57. sn=sn,
  58. front_cap_status=front_cap_status,
  59. rear_cap_status=rear_cap_status,
  60. lens_hood_status=lens_hood_status,
  61. tripod_ring_status=tripod_ring_status,
  62. appearance_performance_status=appearance_performance_status,
  63. tenancy_status=tenancy_status,
  64. )
  65. return response(data={
  66. 'shot': shot.data,
  67. })
  68. @logit
  69. @check_admin
  70. def shot_update(request, administrator):
  71. shot_id = request.POST.get('shot_id', '')
  72. model_id = request.POST.get('model_id', '')
  73. model_name = request.POST.get('model_name', '')
  74. sn = request.POST.get('sn', '')
  75. front_cap_status = request.POST.get('front_cap_status', 1)
  76. rear_cap_status = request.POST.get('rear_cap_status', 1)
  77. lens_hood_status = request.POST.get('lens_hood_status', 1)
  78. tripod_ring_status = request.POST.get('tripod_ring_status', 1)
  79. appearance_performance_status = request.POST.get('appearance_performance_status', 1)
  80. tenancy_status = request.POST.get('tenancy_status', 0)
  81. shot, _ = TenancyShotInfo.objects.update_or_create(shot_id=shot_id, defaults={
  82. 'model_id': model_id,
  83. 'model_name': model_name,
  84. 'sn': sn,
  85. 'front_cap_status': front_cap_status,
  86. 'rear_cap_status': rear_cap_status,
  87. 'lens_hood_status': lens_hood_status,
  88. 'tripod_ring_status': tripod_ring_status,
  89. 'appearance_performance_status': appearance_performance_status,
  90. 'tenancy_status': tenancy_status,
  91. })
  92. return response(data={
  93. 'shot': shot.data,
  94. })
  95. @logit
  96. @check_admin
  97. def shot_request_list(request, administrator):
  98. page = request.POST.get('page', 1)
  99. num = request.POST.get('num', 20)
  100. query = request.POST.get('query', '')
  101. start_time = request.POST.get('start_time', '')
  102. end_time = request.POST.get('end_time', '')
  103. request_status = request.POST.get('request_status', 'all')
  104. reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
  105. if query:
  106. reqs = reqs.filter(Q(phone__icontains=query) | Q(name__icontains=query))
  107. if request_status != 'all':
  108. reqs = reqs.filter(request_status=request_status)
  109. if start_time and end_time:
  110. start_time = tc.string_to_utc_datetime(start_time, format='%Y%m%d')
  111. end_time = tc.string_to_utc_datetime(end_time + ' 23:59:59', format='%Y%m%d %H:%M:%S')
  112. reqs = reqs.filter(created_at__range=(start_time, end_time))
  113. count = reqs.count()
  114. reqs = [req.admindata for req in reqs]
  115. reqs, left = pagination(reqs, page, num)
  116. return response(data={
  117. 'reqs': reqs,
  118. 'left': left,
  119. 'count': count,
  120. })
  121. @logit
  122. @check_admin
  123. def shot_request_detail(request, administrator):
  124. req_id = request.POST.get('req_id') or request.POST.get('request_id')
  125. try:
  126. req = TenancyShotRequestInfo.objects.get(request_id=req_id, status=True)
  127. except TenancyShotRequestInfo.DoesNotExist:
  128. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  129. return response(data={
  130. 'req': req.admindata,
  131. })
  132. @logit
  133. @check_admin
  134. @transaction.atomic
  135. def shot_request_update(request, administrator):
  136. req_id = request.POST.get('req_id') or request.POST.get('request_id')
  137. shot_id = request.POST.get('shot_id', '')
  138. name = request.POST.get('name', '')
  139. phone = request.POST.get('phone', '')
  140. postcode = request.POST.get('postcode', '')
  141. location = request.POST.get('location', '')
  142. purpose = request.POST.get('purpose', '')
  143. return_date = request.POST.get('return_date', '')
  144. request_status = request.POST.get('request_status', '')
  145. express_name = request.POST.get('express_name', '')
  146. express_com = request.POST.get('express_com', '')
  147. tracking_number = request.POST.get('tracking_number', '')
  148. back_express_name = request.POST.get('back_express_name', '')
  149. back_express_com = request.POST.get('back_express_com', '')
  150. back_tracking_number = request.POST.get('back_tracking_number', '')
  151. try:
  152. req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
  153. except TenancyShotRequestInfo.DoesNotExist:
  154. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  155. old_tracking_number = req.tracking_number
  156. old_back_tracking_number = req.back_tracking_number
  157. if shot_id:
  158. req.shot_id = shot_id
  159. if name:
  160. req.name = name
  161. if phone:
  162. req.phone = phone
  163. if postcode:
  164. req.postcode = postcode
  165. if location:
  166. req.location = location
  167. if purpose:
  168. req.purpose = purpose
  169. if return_date:
  170. req.return_date = tc.to_date(return_date)
  171. if request_status:
  172. req.request_status = request_status
  173. if express_name:
  174. req.express_name = express_name
  175. if express_com:
  176. req.express_com = express_com
  177. if tracking_number:
  178. req.tracking_number = tracking_number
  179. if back_express_name:
  180. req.back_express_name = back_express_name
  181. if back_express_com:
  182. req.back_express_com = back_express_com
  183. if back_tracking_number:
  184. req.back_tracking_number = back_tracking_number
  185. req.save()
  186. if tracking_number and tracking_number != old_tracking_number:
  187. tenancy_tracking_info_subscribe(req, 'tracking')
  188. if back_tracking_number and back_tracking_number != old_back_tracking_number:
  189. tenancy_tracking_info_subscribe(req, 'back_tracking')
  190. return response(data={
  191. 'req': req.admindata,
  192. })
  193. @logit
  194. @check_admin
  195. @transaction.atomic
  196. def shot_request_audit(request, administrator):
  197. req_id = request.POST.get('req_id') or request.POST.get('request_id')
  198. audit_status = request.POST.get('audit_status', 0)
  199. try:
  200. req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
  201. except TenancyShotRequestInfo.DoesNotExist:
  202. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  203. req.audit_status = audit_status
  204. req.save()
  205. return response(data={
  206. 'req': req.admindata,
  207. })
  208. @logit
  209. @check_admin
  210. @transaction.atomic
  211. def shot_request_send(request, administrator):
  212. req_id = request.POST.get('req_id') or request.POST.get('request_id')
  213. express_name = request.POST.get('express_name', '')
  214. express_com = request.POST.get('express_com', '')
  215. tracking_number = request.POST.get('tracking_number', '')
  216. try:
  217. req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
  218. except TenancyShotRequestInfo.DoesNotExist:
  219. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  220. old_tracking_number = req.tracking_number
  221. req.express_name = express_name
  222. req.express_com = express_com
  223. req.tracking_number = tracking_number
  224. req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_SEND
  225. req.request_status_at = {TenancyShotRequestInfo.TENANCY_TRACKING_SEND: tc.utc_datetime()}
  226. req.save()
  227. if tracking_number and tracking_number != old_tracking_number:
  228. tenancy_tracking_info_subscribe(req, 'tracking')
  229. return response(data={
  230. 'req': req.admindata,
  231. })
  232. @logit
  233. @check_admin
  234. @transaction.atomic
  235. def shot_request_signed(request, administrator):
  236. req_id = request.POST.get('req_id') or request.POST.get('request_id')
  237. try:
  238. req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
  239. except TenancyShotRequestInfo.DoesNotExist:
  240. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  241. req.request_status = TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED
  242. request_status_at = req.request_status_at
  243. request_status_at[TenancyShotRequestInfo.TENANCY_TRACKING_BACK_SIGNED] = tc.utc_datetime()
  244. req.request_status_at = request_status_at
  245. req.save()
  246. return response(data={
  247. 'req': req.admindata,
  248. })
  249. @logit
  250. @check_admin
  251. def shot_request_tracking_info(request):
  252. request_id = request.POST.get('request_id', '')
  253. type_ = request.POST.get('type', 'tracking') # tracking / back_tracking
  254. try:
  255. req = TenancyShotRequestInfo.objects.get(pk=maintenance_id, status=True)
  256. except TenancyShotRequestInfo.DoesNotExist:
  257. return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
  258. tracking_info = {}
  259. if type_ == 'tracking':
  260. if req.express_com and req.tracking_number:
  261. tracking_info = KuaiDi100().track(req.express_com, req.tracking_number)
  262. req.tracking_info = tracking_info
  263. req.save()
  264. else:
  265. if req.back_express_com and req.back_tracking_number:
  266. tracking_info = KuaiDi100().track(req.back_express_com, req.back_tracking_number)
  267. req.back_tracking_info = tracking_info
  268. req.save()
  269. if tracking_info:
  270. try:
  271. tracking_info = json.loads(tracking_info)
  272. except Exception:
  273. tracking_info = {}
  274. if tracking_info:
  275. tenancy_tracking_info_subscribe(req, 'tracking')
  276. return response(data={
  277. 'type': type_,
  278. 'tracking_info': tracking_info,
  279. })