@@ -2,13 +2,14 @@ |
||
| 2 | 2 |
|
| 3 | 3 |
from __future__ import division |
| 4 | 4 |
|
| 5 |
-from django.conf import settings |
|
| 5 |
+from django.db import transaction |
|
| 6 | 6 |
from django_logit import logit |
| 7 | 7 |
from django_response import response |
| 8 | 8 |
from paginator import pagination |
| 9 |
+from TimeConvert import TimeConvert as tc |
|
| 9 | 10 |
|
| 10 | 11 |
from kodo.decorators import check_admin |
| 11 |
-from tenancy.models import TenancyShotInfo |
|
| 12 |
+from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo |
|
| 12 | 13 |
from utils.error.errno_utils import TenancyStatusCode |
| 13 | 14 |
|
| 14 | 15 |
|
@@ -31,7 +32,6 @@ def shot_list(request, administrator): |
||
| 31 | 32 |
@logit |
| 32 | 33 |
@check_admin |
| 33 | 34 |
def shot_detail(request, administrator): |
| 34 |
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 35 | 35 |
shot_id = request.POST.get('shot_id', '')
|
| 36 | 36 |
|
| 37 | 37 |
try: |
@@ -47,7 +47,6 @@ def shot_detail(request, administrator): |
||
| 47 | 47 |
@logit |
| 48 | 48 |
@check_admin |
| 49 | 49 |
def shot_create(request, administrator): |
| 50 |
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 51 | 50 |
model_name = request.POST.get('model_name', '')
|
| 52 | 51 |
sn = request.POST.get('sn', '')
|
| 53 | 52 |
fittings_type = request.POST.get('fittings_type', 0)
|
@@ -68,7 +67,6 @@ def shot_create(request, administrator): |
||
| 68 | 67 |
@logit |
| 69 | 68 |
@check_admin |
| 70 | 69 |
def shot_update(request, administrator): |
| 71 |
- brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 72 | 70 |
shot_id = request.POST.get('shot_id', '')
|
| 73 | 71 |
model_name = request.POST.get('model_name', '')
|
| 74 | 72 |
sn = request.POST.get('sn', '')
|
@@ -85,3 +83,141 @@ def shot_update(request, administrator): |
||
| 85 | 83 |
return response(data={
|
| 86 | 84 |
'shot': shot.data, |
| 87 | 85 |
}) |
| 86 |
+ |
|
| 87 |
+ |
|
| 88 |
+@logit |
|
| 89 |
+@check_admin |
|
| 90 |
+def shot_request_list(request, administrator): |
|
| 91 |
+ page = request.POST.get('page', 1)
|
|
| 92 |
+ num = request.POST.get('num', 20)
|
|
| 93 |
+ |
|
| 94 |
+ reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
|
|
| 95 |
+ reqs = [req.data for req in reqs] |
|
| 96 |
+ reqs, left = pagination(reqs, page, num) |
|
| 97 |
+ |
|
| 98 |
+ return response(data={
|
|
| 99 |
+ 'reqs': reqs, |
|
| 100 |
+ 'left': left, |
|
| 101 |
+ }) |
|
| 102 |
+ |
|
| 103 |
+ |
|
| 104 |
+@logit |
|
| 105 |
+@check_admin |
|
| 106 |
+def shot_request_detail(request, administrator): |
|
| 107 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 108 |
+ |
|
| 109 |
+ try: |
|
| 110 |
+ req = TenancyShotRequestInfo.objects.get(request_id=req_id, status=True) |
|
| 111 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 112 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 113 |
+ |
|
| 114 |
+ return response(data={
|
|
| 115 |
+ 'req': req.data, |
|
| 116 |
+ }) |
|
| 117 |
+ |
|
| 118 |
+ |
|
| 119 |
+@logit |
|
| 120 |
+@check_admin |
|
| 121 |
+@transaction.atomic |
|
| 122 |
+def shot_request_update(request, administrator): |
|
| 123 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 124 |
+ shot_id = request.POST.get('shot_id', '')
|
|
| 125 |
+ name = request.POST.get('name', '')
|
|
| 126 |
+ phone = request.POST.get('phone', '')
|
|
| 127 |
+ postcode = request.POST.get('postcode', '')
|
|
| 128 |
+ location = request.POST.get('location', '')
|
|
| 129 |
+ purpose = request.POST.get('purpose', '')
|
|
| 130 |
+ return_date = request.POST.get('return_date', '')
|
|
| 131 |
+ request_status = request.POST.get('request_status', '')
|
|
| 132 |
+ tracking_number = request.POST.get('tracking_number', '')
|
|
| 133 |
+ back_tracking_number = request.POST.get('back_tracking_number', '')
|
|
| 134 |
+ |
|
| 135 |
+ try: |
|
| 136 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True) |
|
| 137 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 138 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 139 |
+ |
|
| 140 |
+ if shot_id: |
|
| 141 |
+ req.shot_id = shot_id |
|
| 142 |
+ if name: |
|
| 143 |
+ req.name = name |
|
| 144 |
+ if phone: |
|
| 145 |
+ req.phone = phone |
|
| 146 |
+ if postcode: |
|
| 147 |
+ req.postcode = postcode |
|
| 148 |
+ if location: |
|
| 149 |
+ req.location = location |
|
| 150 |
+ if purpose: |
|
| 151 |
+ req.purpose = purpose |
|
| 152 |
+ if return_date: |
|
| 153 |
+ req.return_date = tc.to_date(return_date) |
|
| 154 |
+ if request_status: |
|
| 155 |
+ req.request_status = request_status |
|
| 156 |
+ if tracking_number: |
|
| 157 |
+ req.tracking_number = tracking_number |
|
| 158 |
+ if back_tracking_number: |
|
| 159 |
+ req.back_tracking_number = back_tracking_number |
|
| 160 |
+ req.save() |
|
| 161 |
+ |
|
| 162 |
+ return response(data={
|
|
| 163 |
+ 'req': req.data, |
|
| 164 |
+ }) |
|
| 165 |
+ |
|
| 166 |
+ |
|
| 167 |
+@logit |
|
| 168 |
+@check_admin |
|
| 169 |
+@transaction.atomic |
|
| 170 |
+def shot_request_audit(request, administrator): |
|
| 171 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 172 |
+ audit_status = request.POST.get('audit_status', 0)
|
|
| 173 |
+ |
|
| 174 |
+ try: |
|
| 175 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True) |
|
| 176 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 177 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 178 |
+ |
|
| 179 |
+ req.audit_status = audit_status |
|
| 180 |
+ req.save() |
|
| 181 |
+ |
|
| 182 |
+ return response(data={
|
|
| 183 |
+ 'req': req.data, |
|
| 184 |
+ }) |
|
| 185 |
+ |
|
| 186 |
+ |
|
| 187 |
+@logit |
|
| 188 |
+@check_admin |
|
| 189 |
+@transaction.atomic |
|
| 190 |
+def shot_request_send(request, administrator): |
|
| 191 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 192 |
+ tracking_number = request.POST.get('tracking_number', '')
|
|
| 193 |
+ |
|
| 194 |
+ try: |
|
| 195 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True) |
|
| 196 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 197 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 198 |
+ |
|
| 199 |
+ req.tracking_number = tracking_number |
|
| 200 |
+ req.save() |
|
| 201 |
+ |
|
| 202 |
+ return response(data={
|
|
| 203 |
+ 'req': req.data, |
|
| 204 |
+ }) |
|
| 205 |
+ |
|
| 206 |
+ |
|
| 207 |
+@logit |
|
| 208 |
+@check_admin |
|
| 209 |
+@transaction.atomic |
|
| 210 |
+def shot_request_signed(request, administrator): |
|
| 211 |
+ req_id = request.POST.get('req_id') or request.POST.get('request_id')
|
|
| 212 |
+ |
|
| 213 |
+ try: |
|
| 214 |
+ req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True) |
|
| 215 |
+ except TenancyShotRequestInfo.DoesNotExist: |
|
| 216 |
+ return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND) |
|
| 217 |
+ |
|
| 218 |
+ req.request_status = '寄回已签收并检查无损坏' |
|
| 219 |
+ req.save() |
|
| 220 |
+ |
|
| 221 |
+ return response(data={
|
|
| 222 |
+ 'req': req.data, |
|
| 223 |
+ }) |
@@ -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'租赁镜头申请不存在') |