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