Merge branch 'tamron' of git.xfoto.com.cn:Kodo/kodo into tamron

huangqimin001 10 月之前
父節點
當前提交
21cfb42807
共有 2 個文件被更改,包括 139 次插入85 次删除
  1. 45 37
      api/lensman_admin_views.py
  2. 94 48
      tenancy/models.py

+ 45 - 37
api/lensman_admin_views.py

@@ -2,6 +2,8 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+from datetime import datetime
6
+
5 7
 from django.conf import settings
6 8
 from django_logit import logit
7 9
 from django_response import response
@@ -21,21 +23,27 @@ def lensman_list(request, administrator):
21 23
     query = request.POST.get('query', '')
22 24
     lensman_status = request.POST.get('lensman_status', '')
23 25
     end_date = tc.to_date(request.POST.get('end_date', ''))
24
-    integral_end_date = tc.to_date(request.POST.get('integral_end_date', ''))
26
+    integral_end_date_start = request.POST.get('integral_end_date_start', '')
27
+    integral_end_date_end = request.POST.get('integral_end_date_end', '')
25 28
 
26 29
     logs = LensmanInfo.objects.filter(status=True).order_by('-pk')
27 30
 
28 31
     if query:
29
-      logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query))
30
-    
32
+        logs = logs.filter(Q(name__icontains=query) |
33
+                           Q(phone__icontains=query))
34
+
31 35
     if lensman_status:
32
-       logs = logs.filter(lensman_status=lensman_status)
33
-      
36
+        logs = logs.filter(lensman_status=lensman_status)
37
+
34 38
     if end_date:
35
-       logs = logs.filter(end_date__lte=end_date)
36
-    
37
-    if integral_end_date:
38
-       logs = logs.filter(integral_end_date__lte=integral_end_date)
39
+        logs = logs.filter(end_date__lte=end_date)
40
+
41
+    if integral_end_date_start and integral_end_date_end:
42
+        ftime = datetime.strptime(
43
+            integral_end_date_start + ' 00:00:00', '%Y%m%d %H:%M:%S')
44
+        ttime = datetime.strptime(
45
+            integral_end_date_end + ' 23:59:59', '%Y%m%d %H:%M:%S')
46
+        logs = logs.filter(integral_end_date__range=[ftime, ttime])
39 47
 
40 48
     count = logs.count()
41 49
     logs, left = pagination(logs, page, num)
@@ -56,10 +64,10 @@ def lensman_audit(request, administrator):
56 64
     end_date = tc.to_date(request.POST.get('end_date', ''))
57 65
 
58 66
     try:
59
-      lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
67
+        lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
60 68
     except LensmanInfo.DoesNotExist:
61
-      return response(200, 'Lensman Not Found', u'摄影师不存在')
62
-    
69
+        return response(200, 'Lensman Not Found', u'摄影师不存在')
70
+
63 71
     lensman.lensman_status = LensmanInfo.ACTIVATED
64 72
     lensman.start_date = start_date
65 73
     lensman.end_date = end_date
@@ -75,17 +83,18 @@ def lensman_update(request, administrator):
75 83
     lensman_id = request.POST.get('lensman_id', '')
76 84
     start_date = tc.to_date(request.POST.get('start_date', ''))
77 85
     end_date = tc.to_date(request.POST.get('end_date', ''))
78
-    integral_start_date = tc.to_date(request.POST.get('integral_start_date', ''))
86
+    integral_start_date = tc.to_date(
87
+        request.POST.get('integral_start_date', ''))
79 88
     integral_end_date = tc.to_date(request.POST.get('integral_end_date', ''))
80 89
     name = request.POST.get('name', '')
81 90
     phone = request.POST.get('phone', '')
82 91
     remark = request.POST.get('remark', '')
83
-        
92
+
84 93
     try:
85
-      lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
94
+        lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
86 95
     except LensmanInfo.DoesNotExist:
87
-      return response(200, 'Lensman Not Found', u'摄影师不存在')
88
-    
96
+        return response(200, 'Lensman Not Found', u'摄影师不存在')
97
+
89 98
     lensman.start_date = start_date
90 99
     lensman.end_date = end_date
91 100
     lensman.integral_start_date = integral_start_date
@@ -102,19 +111,19 @@ def lensman_update(request, administrator):
102 111
 @logit
103 112
 @check_admin
104 113
 def lensman_integral_list(request, administrator):
105
-  user_id = request.POST.get('user_id', '')
114
+    user_id = request.POST.get('user_id', '')
115
+
116
+    try:
117
+        lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
118
+    except LensmanInfo.DoesNotExist:
119
+        return response(200, 'Lensman Not Found', u'摄影师不存在')
106 120
 
107
-  try:
108
-    lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
109
-  except LensmanInfo.DoesNotExist:
110
-    return response(200, 'Lensman Not Found', u'摄影师不存在')
111
-  
112
-  integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True)
121
+    integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(
122
+        user_id=user_id, status=True)
113 123
 
114
-  integrals = [integral.admindata for integral in integrals]
115
-  
124
+    integrals = [integral.admindata for integral in integrals]
116 125
 
117
-  return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)
126
+    return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)
118 127
 
119 128
 
120 129
 @logit
@@ -125,20 +134,19 @@ def lensman_integral_update(request):
125 134
     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
126 135
 
127 136
     try:
128
-      lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
137
+        lensman = LensmanInfo.objects.get(user_id=user_id, status=True)
129 138
     except LensmanInfo.DoesNotExist:
130
-      return response(200, 'Lensman Not Found', u'摄影师不存在')
131
-    
139
+        return response(200, 'Lensman Not Found', u'摄影师不存在')
140
+
132 141
     lensman.integral += integral
133 142
     lensman.save()
134
-  
143
+
135 144
     LensmanIntegralIncomeExpensesInfo.objects.create(
136
-      brand_id=brand_id,
137
-      user_id=user_id,
138
-      integral=integral,
139
-      remark=remark,
140
-      expired_at=lensman.integral_end_date,
145
+        brand_id=brand_id,
146
+        user_id=user_id,
147
+        integral=integral,
148
+        remark=remark,
149
+        expired_at=lensman.integral_end_date,
141 150
     )
142 151
 
143 152
     return response(200, 'Lensman Integral Update Success', u'摄影师积分更新成功')
144
-

+ 94 - 48
tenancy/models.py

@@ -16,17 +16,28 @@ class TenancyShotInfo(BaseModelMixin):
16 16
         (1, u'已租'),
17 17
     )
18 18
 
19
-    admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
20
-    shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True, unique=True)
21
-    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
22
-    model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
23
-    sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)
24
-    front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
25
-    rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
26
-    lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
27
-    tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
28
-    appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
29
-    tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')
19
+    admin_id = models.CharField(_(u'admin_id'), max_length=32,
20
+                                blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
21
+    shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True,
22
+                             null=True, help_text=u'镜头唯一标识', db_index=True, unique=True)
23
+    model_id = models.CharField(_(u'model_id'), max_length=32,
24
+                                blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
25
+    model_name = models.CharField(
26
+        _(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
27
+    sn = models.CharField(_(u'sn'), max_length=32, blank=True,
28
+                          null=True, help_text=u'序列号', db_index=True)
29
+    front_cap_status = models.BooleanField(
30
+        _(u'front_cap_status'), default=False, help_text=u'前盖状态')
31
+    rear_cap_status = models.BooleanField(
32
+        _(u'rear_cap_status'), default=False, help_text=u'后盖状态')
33
+    lens_hood_status = models.BooleanField(
34
+        _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
35
+    tripod_ring_status = models.BooleanField(
36
+        _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
37
+    appearance_performance_status = models.BooleanField(
38
+        _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
39
+    tenancy_status = models.IntegerField(
40
+        _(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')
30 41
 
31 42
     class Meta:
32 43
         verbose_name = _(u'租赁镜头信息')
@@ -70,53 +81,84 @@ class TenancyShotRequestInfo(BaseModelMixin):
70 81
         (2, u'未通过'),
71 82
     )
72 83
 
73
-    request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True)
74
-    admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
84
+    request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True,
85
+                                null=True, help_text=u'申请唯一标识', db_index=True, unique=True)
86
+    admin_id = models.CharField(_(u'admin_id'), max_length=32,
87
+                                blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
75 88
 
76
-    request_number = models.CharField(_(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True)
89
+    request_number = models.CharField(
90
+        _(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True)
77 91
 
78
-    shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)
79
-    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)
92
+    shot_id = models.CharField(_(u'shot_id'), max_length=32,
93
+                               blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)
94
+    model_id = models.CharField(_(u'model_id'), max_length=32,
95
+                                blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)
80 96
 
81
-    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
97
+    user_id = models.CharField(_(u'user_id'), max_length=32,
98
+                               blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
82 99
 
83 100
     # 镜头配件信息
84
-    front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
85
-    rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
86
-    lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
87
-    tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
88
-    appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
101
+    front_cap_status = models.BooleanField(
102
+        _(u'front_cap_status'), default=False, help_text=u'前盖状态')
103
+    rear_cap_status = models.BooleanField(
104
+        _(u'rear_cap_status'), default=False, help_text=u'后盖状态')
105
+    lens_hood_status = models.BooleanField(
106
+        _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
107
+    tripod_ring_status = models.BooleanField(
108
+        _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
109
+    appearance_performance_status = models.BooleanField(
110
+        _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
89 111
 
90 112
     # 身份证信息
91
-    identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')
92
-    identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')
113
+    identity_card_number = models.CharField(
114
+        _(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')
115
+    identity_card_name = models.CharField(
116
+        _(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')
93 117
 
94 118
     # 邮寄信息
95
-    name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')
96
-    phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话')
97
-    location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')
98
-    postcode = models.CharField(_(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码')
119
+    name = models.CharField(_(u'name'), max_length=255,
120
+                            blank=True, null=True, help_text=u'用户姓名')
121
+    phone = models.CharField(_(u'phone'), max_length=11,
122
+                             blank=True, null=True, help_text=u'用户电话')
123
+    location = models.CharField(
124
+        _(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')
125
+    postcode = models.CharField(
126
+        _(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码')
99 127
 
100 128
     # 租赁信息
101
-    purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途')
102
-    return_date = models.DateField(_(u'return_date'), blank=True, null=True, help_text=u'预定归还日期')
129
+    purpose = models.CharField(
130
+        _(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途')
131
+    return_date = models.DateField(
132
+        _(u'return_date'), blank=True, null=True, help_text=u'预定归还日期')
103 133
 
104 134
     # 公司 =》 用户
105
-    express_name = models.CharField(_(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司')
106
-    express_com = models.CharField(_(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码')
107
-    tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号')
108
-    tracking_info = JSONField(_(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息')
109
-    tracking_signed = models.BooleanField(_(u'tracking_signed'), default=False, help_text=u'快递是否已签收')
110
-    tracking_signed_images = JSONField(_(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表')
135
+    express_name = models.CharField(
136
+        _(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司')
137
+    express_com = models.CharField(
138
+        _(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码')
139
+    tracking_number = models.CharField(
140
+        _(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号')
141
+    tracking_info = JSONField(
142
+        _(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息')
143
+    tracking_signed = models.BooleanField(
144
+        _(u'tracking_signed'), default=False, help_text=u'快递是否已签收')
145
+    tracking_signed_images = JSONField(
146
+        _(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表')
111 147
 
112 148
     # 用户 =》 公司
113
-    back_express_name = models.CharField(_(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司')
114
-    back_express_com = models.CharField(_(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码')
115
-    back_tracking_number = models.CharField(_(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号')
116
-    back_tracking_info = JSONField(_(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息')
117
-    back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')
118
-
119
-    audit_status = models.IntegerField(_(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True)
149
+    back_express_name = models.CharField(
150
+        _(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司')
151
+    back_express_com = models.CharField(
152
+        _(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码')
153
+    back_tracking_number = models.CharField(
154
+        _(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号')
155
+    back_tracking_info = JSONField(
156
+        _(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息')
157
+    back_tracking_signed = models.BooleanField(
158
+        _(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')
159
+
160
+    audit_status = models.IntegerField(
161
+        _(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True)
120 162
     # REQUEST_STATUS = (
121 163
     #     (0, u'寄出'),
122 164
     #     (1, u'寄出已签收'),
@@ -124,10 +166,13 @@ class TenancyShotRequestInfo(BaseModelMixin):
124 166
     #     (3, u'寄回已签收并检查无损坏'),
125 167
     # )
126 168
     # request_status = models.IntegerField(_(u'request_status'), choices=REQUEST_STATUS, default=0, help_text=u'租借申请状态')
127
-    request_status = models.CharField(_(u'request_status'), max_length=16, default='', help_text=u'租借申请状态')
128
-    request_status_at = JSONField(_(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间')
169
+    request_status = models.CharField(
170
+        _(u'request_status'), max_length=16, default='', help_text=u'租借申请状态')
171
+    request_status_at = JSONField(
172
+        _(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间')
129 173
 
130
-    remark = models.CharField(_(u'remark'), max_length=256, default='', help_text=u'备注')
174
+    remark = models.CharField(
175
+        _(u'remark'), max_length=256, default='', help_text=u'备注')
131 176
 
132 177
     class Meta:
133 178
         verbose_name = _(u'租赁镜头申请信息')
@@ -185,7 +230,7 @@ class TenancyShotRequestInfo(BaseModelMixin):
185 230
             'back_tracking_signed': self.back_tracking_signed,
186 231
             'audit_status': self.audit_status,
187 232
             'request_status': self.request_status,
188
-            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%dT%H:%M:%S.%fZ')) for k, v in self.request_status_at.items()},
233
+            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%d %H:%M:%S')) for k, v in self.request_status_at.items()},
189 234
             'created_at': tc.local_date_string(utc_dt=self.created_at),
190 235
             'remark': self.remark,
191 236
         }
@@ -198,7 +243,8 @@ class TenancyShotRequestInfo(BaseModelMixin):
198 243
             admin = None
199 244
 
200 245
         try:
201
-            shot = TenancyShotInfo.objects.get(shot_id=self.shot_id, status=True)
246
+            shot = TenancyShotInfo.objects.get(
247
+                shot_id=self.shot_id, status=True)
202 248
         except TenancyShotInfo.DoesNotExist:
203 249
             shot = None
204 250