@@ -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'租赁镜头申请不存在') |