f-f6b5b717017b9ccd16fa23749b22d971c0cddd5aR139">139
+
+ if shot_id:
+ req.shot_id = shot_id
+ if name:
+ req.name = name
+ if phone:
+ req.phone = phone
+ if postcode:
+ req.postcode = postcode
+ if location:
+ req.location = location
+ if purpose:
+ req.purpose = purpose
+ if return_date:
+ req.return_date = tc.to_date(return_date)
+ if request_status:
+ req.request_status = request_status
+ if tracking_number:
+ req.tracking_number = tracking_number
+ if back_tracking_number:
+ req.back_tracking_number = back_tracking_number
+ req.save()
+
+ return response(data={
+ 'req': req.data,
+ })
+
+
+@logit
+@check_admin
+@transaction.atomic
+def shot_request_audit(request, administrator):
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
+ audit_status = request.POST.get('audit_status', 0)
+
+ try:
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
+ except TenancyShotRequestInfo.DoesNotExist:
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
+
+ req.audit_status = audit_status
+ req.save()
+
+ return response(data={
+ 'req': req.data,
+ })
+
+
+@logit
+@check_admin
+@transaction.atomic
+def shot_request_send(request, administrator):
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
+ tracking_number = request.POST.get('tracking_number', '')
+
+ try:
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
+ except TenancyShotRequestInfo.DoesNotExist:
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
+
+ req.tracking_number = tracking_number
+ req.save()
+
+ return response(data={
+ 'req': req.data,
+ })
+
+
+@logit
+@check_admin
+@transaction.atomic
+def shot_request_signed(request, administrator):
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
+
+ try:
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
+ except TenancyShotRequestInfo.DoesNotExist:
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
+
+ req.request_status = '寄回已签收并检查无损坏'
+ req.save()
+
+ return response(data={
+ 'req': req.data,
+ })
@@ -3,17 +3,19 @@ |
||
| 3 | 3 |
from __future__ import division |
| 4 | 4 |
|
| 5 | 5 |
from django.conf import settings |
| 6 |
+from django.db import transaction |
|
| 6 | 7 |
from django_logit import logit |
| 8 |
+from django_query import get_query_value |
|
| 7 | 9 |
from django_response import response |
| 8 | 10 |
from paginator import pagination |
| 11 |
+from TimeConvert import TimeConvert as tc |
|
| 9 | 12 |
|
| 10 |
-from tenancy.models import TenancyShotInfo |
|
| 13 |
+from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo |
|
| 11 | 14 |
from utils.error.errno_utils import TenancyStatusCode |
| 12 | 15 |
|
| 13 | 16 |
|
| 14 | 17 |
@logit |
| 15 | 18 |
def shot_list(request): |
| 16 |
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 17 | 19 |
page = request.POST.get('page', 1)
|
| 18 | 20 |
num = request.POST.get('num', 20)
|
| 19 | 21 |
|
@@ -29,7 +31,6 @@ def shot_list(request): |
||
| 29 | 31 |
|
| 30 | 32 |
@logit |
| 31 | 33 |
def shot_detail(request): |
| 32 |
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 33 | 34 |
shot_id = request.POST.get('shot_id', '')
|
| 34 | 35 |
|
| 35 | 36 |
try: |
@@ -40,3 +41,103 @@ def shot_detail(request): |
||
| 40 | 41 |
return response(data={
|
| 41 | 42 |
'shot': shot.data, |
| 42 | 43 |
}) |
| 44 |
+ |
|
| 45 |
+ |
|
| 46 |
+@logit |
|
| 47 |
+def shot_request_create(request): |
|
| 48 |
+ shot_id = request.POST.get('shot_id', '')
|
|
| 49 |
+ user_id = request.POST.get('user_id', '')
|
|
| 50 |
+ name = request.POST.get('name', '')
|
|
| 51 |
+ phone = request.POST.get('phone', '')
|
|
| 52 |
+ postcode = request.POST.get('postcode', '')
|
|
| 53 |
+ location = request.POST.get('location', '')
|
|
| 54 |
+ purpose = request.POST.get('purpose', '')
|
|
| 55 |
+ return_date = tc.to_date(request.POST.get('return_date', '') or settings.DEFAULT_START_DATE)
|
|
| 56 |
+ |
|
| 57 |
+ req = TenancyShotRequestInfo.objects.create( |
|
| 58 |
+ shot_id=shot_id, |
|
| 59 |
+ user_id=user_id, |
|
| 60 |
+ name=name, |
|
| 61 |
+ phone=phone, |
|
| 62 |
+ postcode=postcode, |
|
| 63 |
+ location=location, |
|
| 64 |
+ purpose=purpose, |
|
| 65 |
+ return_date=return_date, |
|
| 66 |
+ ) |
|
| 67 |
+ |
|
| 68 |
+ return response(data={
|
|
| 69 |
+ 'req': req.data, |
|
| 70 |
+ }) |
|
| 71 |
+ |
|
| 72 |
+ |
|
| 73 |
+@logit |
|
| 74 |
+def shot_request_list(request): |
|
| 75 |
+ user_id = request.POST.get('user_id', '')
|
|
| 76 |
+ page = request.POST.get('page', 1)
|
|
| 77 |
+ num = request.POST.get('num', 20)
|
|
| 78 |
+ |
|
| 79 |
+ reqs = TenancyShotRequestInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
|
|
| 80 |
+ reqs = [req.data for req in reqs] |
|
| 81 |
+ reqs, left = pagination(reqs, page, num) |
|
| 82 |
+ |
|
| 83 |
+ return response(data={
|
|
| 84 |
+ 'reqs': reqs, |
|
| 85 |
+ 'left': left, |
|
| 86 |
+ }) |
|
| 87 |
+ |
|
| 88 |
+ |
|
| 89 |
+@logit |
|
| 90 |
+def shot_request_detail(request): |
|
| 91 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 92 |
+ user_id = request.POST.get('user_id', '')
|
|
| 93 |
+ |
|
| 94 |
+ try: |
|
| 95 |
+ req = TenancyShotRequestInfo.objects.get(request_id=req_id, user_id=user_id, status=True) |
|
| 96 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 97 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 98 |
+ |
|
| 99 |
+ return response(data={
|
|
| 100 |
+ 'req': req.data, |
|
| 101 |
+ }) |
|
| 102 |
+ |
|
| 103 |
+ |
|
| 104 |
+@logit |
|
| 105 |
+@transaction.atomic |
|
| 106 |
+def shot_request_signed(request): |
|
| 107 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 108 |
+ user_id = request.POST.get('user_id', '')
|
|
| 109 |
+ signed_images = get_query_value(request, 'signed_images', val_cast_type='listjson') |
|
| 110 |
+ |
|
| 111 |
+ try: |
|
| 112 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, user_id=user_id, status=True) |
|
| 113 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 114 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 115 |
+ |
|
| 116 |
+ req.tracking_signed_images = signed_images |
|
| 117 |
+ req.request_status = '寄出已签收' |
|
| 118 |
+ req.save() |
|
| 119 |
+ |
|
| 120 |
+ return response(data={
|
|
| 121 |
+ 'req': req.data, |
|
| 122 |
+ }) |
|
| 123 |
+ |
|
| 124 |
+ |
|
| 125 |
+@logit |
|
| 126 |
+@transaction.atomic |
|
| 127 |
+def shot_request_sendback(request): |
|
| 128 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 129 |
+ user_id = request.POST.get('user_id', '')
|
|
| 130 |
+ back_tracking_number = request.POST.get('back_tracking_number', '')
|
|
| 131 |
+ |
|
| 132 |
+ try: |
|
| 133 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, user_id=user_id, status=True) |
|
| 134 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 135 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 136 |
+ |
|
| 137 |
+ req.back_tracking_number = back_tracking_number |
|
| 138 |
+ req.request_status = '寄出已签收' |
|
| 139 |
+ req.save() |
|
| 140 |
+ |
|
| 141 |
+ return response(data={
|
|
| 142 |
+ 'req': req.data, |
|
| 143 |
+ }) |
@@ -324,7 +324,7 @@ urlpatterns += [ |
||
| 324 | 324 |
url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'), |
| 325 | 325 |
] |
| 326 | 326 |
|
| 327 |
-# 租赁 |
|
| 327 |
+# 租赁镜头 |
|
| 328 | 328 |
urlpatterns += [ |
| 329 | 329 |
# 小程序接口 |
| 330 | 330 |
url(r'^tenancy/shot/list$', tenancy_views.shot_list, name='tenancy_shot_list'), |
@@ -340,6 +340,19 @@ urlpatterns += [ |
||
| 340 | 340 |
# 租赁申请 |
| 341 | 341 |
urlpatterns += [ |
| 342 | 342 |
# 小程序接口 |
| 343 |
+ url(r'^tenancy/shot/request/create$', tenancy_views.shot_request_create, name='tenancy_shot_request_create'), |
|
| 344 |
+ url(r'^tenancy/shot/request/list$', tenancy_views.shot_request_list, name='tenancy_shot_request_list'), |
|
| 345 |
+ url(r'^tenancy/shot/request/detail$', tenancy_views.shot_request_detail, name='tenancy_shot_request_detail'), |
|
| 346 |
+ url(r'^tenancy/shot/request/signed$', tenancy_views.shot_request_signed, name='tenancy_shot_request_signed'), |
|
| 347 |
+ url(r'^tenancy/shot/request/sendback$', tenancy_views.shot_request_sendback, name='tenancy_shot_request_sendback'), |
|
| 343 | 348 |
|
| 344 | 349 |
# 后台管理接口 |
| 350 |
+ url(r'^admin/tenancy/shot/request/list$', tenancy_admin_views.shot_request_list, name='admin_tenancy_shot_request_list'), |
|
| 351 |
+ url(r'^admin/tenancy/shot/request/detail$', tenancy_admin_views.shot_request_detail, name='admin_tenancy_shot_request_detail'), |
|
| 352 |
+ url(r'^admin/tenancy/shot/request/update$', tenancy_admin_views.shot_request_update, name='admin_tenancy_shot_request_update'), |
|
| 353 |
+ url(r'^admin/tenancy/shot/request/audit$', tenancy_admin_views.shot_request_audit, name='admin_tenancy_shot_request_audit'), |
|
| 354 |
+ url(r'^admin/tenancy/shot/request/send$', tenancy_admin_views.shot_request_send, name='admin_tenancy_shot_request_send'), |
|
| 355 |
+ url(r'^admin/tenancy/shot/request/signed$', tenancy_admin_views.shot_request_signed, name='admin_tenancy_shot_request_signed'), |
|
| 356 |
+ |
|
| 357 |
+ # 快递信息回调接口 |
|
| 345 | 358 |
] |
@@ -113,9 +113,15 @@ class TenancyShotRequestInfo(BaseModelMixin): |
||
| 113 | 113 |
|
| 114 | 114 |
@property |
| 115 | 115 |
def data(self): |
| 116 |
+ try: |
|
| 117 |
+ shot = TenancyShotInfo.objects.get(shot_id=self.shot_id) |
|
| 118 |
+ except TenancyShotInfo.DoesNotExist: |
|
| 119 |
+ shot = None |
|
| 116 | 120 |
return {
|
| 121 |
+ 'req_id': self.request_id, |
|
| 117 | 122 |
'request_id': self.request_id, |
| 118 | 123 |
'shot_id': self.shot_id, |
| 124 |
+ 'shot_info': shot.data if shot else {},
|
|
| 119 | 125 |
'user_id': self.user_id, |
| 120 | 126 |
'name': self.name, |
| 121 | 127 |
'phone': self.phone, |
@@ -216,3 +216,5 @@ class MaintenanceStatusCode(BaseStatusCode): |
||
| 216 | 216 |
class TenancyStatusCode(BaseStatusCode): |
| 217 | 217 |
""" 租赁相关错误码 5090xx """ |
| 218 | 218 |
TENANCY_SHOT_NOT_FOUND = StatusCodeField(509001, 'Tenancy Shot Not Found', description=u'租赁镜头不存在') |
| 219 |
+ |
|
| 220 |
+ TENANCY_SHOT_REQUEST_NOT_FOUND = StatusCodeField(509011, 'Tenancy Shot Request Not Found', description=u'租赁镜头申请不存在') |