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

FFIB лет %!s(int64=5): %!d(string=назад)
Родитель
Сommit
689da9aee6

+ 1 - 1
account/models.py

@@ -483,7 +483,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):
483 483
             'subscribe': self.subscribe,
484 484
             'membercardid': self.membercardid,
485 485
             'memberusercardcode': self.memberusercardcode,
486
-            'created_at': tc.local_string(self.created_at, format='%Y-%m-%d'),
486
+            'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),
487 487
 
488 488
             # 会员信息
489 489
             'integral': self.integral,

+ 29 - 27
api/admin_views.py

@@ -2,28 +2,28 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+import json
6
+from collections import defaultdict
7
+from datetime import datetime
8
+from itertools import chain, groupby
9
+
5 10
 from django.conf import settings
6 11
 from django.db import transaction
12
+from django.db.models import Count, Sum
7 13
 from django_logit import logit
8 14
 from django_response import response
9 15
 from paginator import pagination
10 16
 from TimeConvert import TimeConvert as tc
11
-from django.db.models import Sum, Count
12
-from datetime import datetime
13 17
 
14
-from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, SaleclerkInfo, ModelInfo
15
-from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, ModelSaleStatisticInfo
18
+from account.models import UserInfo
16 19
 from integral.models import SaleclerkSubmitLogInfo
17 20
 from logs.models import MchInfoEncryptLogInfo
18
-from account.models import UserInfo
21
+from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, ModelInfo, SaleclerkInfo
22
+from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo,
23
+                              ModelSaleStatisticInfo)
19 24
 from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode,
20 25
                                      ProductMachineStatusCode, UserStatusCode)
21 26
 
22
-from collections import defaultdict
23
-import json
24
-from itertools import groupby,chain
25
-
26
-
27 27
 
28 28
 WECHAT = settings.WECHAT
29 29
 
@@ -349,11 +349,11 @@ def statistic_distributor(request):
349 349
         if i2 < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[i2]['ymd']:
350 350
             daily_logs[i]['code1'] = daily_code1_logs[i2]['num']
351 351
             i2 += 1
352
-        
352
+
353 353
         if i3 < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[i3]['ymd']:
354 354
             daily_logs[i]['code2'] = daily_code2_logs[i3]['num']
355 355
             i3 += 1
356
-        
356
+
357 357
         if i4 < len(daily_code2_hasScan_logs) and daily_logs[i]['ymd'] == daily_code2_hasScan_logs[i4]['ymd']:
358 358
             daily_logs[i]['has_code2_scan_num'] = daily_code2_hasScan_logs[i4]['num']
359 359
             i4 += 1
@@ -380,15 +380,15 @@ def statistic_distributor(request):
380 380
         if i2 < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[i2]['model_uni_name']:
381 381
             model_logs[i]['code1'] = model_code1_logs[i2]['num']
382 382
             i2 += 1
383
-        
383
+
384 384
         if i3 < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[i3]['model_uni_name']:
385 385
             model_logs[i]['code2'] = model_code2_logs[i3]['num']
386 386
             i3 += 1
387
-        
387
+
388 388
         if i4 < len(model_code2_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code2_hasScan_logs[i4]['model_uni_name']:
389 389
             model_logs[i]['has_code2_scan_num'] = model_code2_hasScan_logs[i4]['num']
390 390
             i4 += 1
391
-    
391
+
392 392
     model_logs.sort(key=lambda k: (-k['num']))
393 393
 
394 394
     distributor_logs = list(logs.values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
@@ -413,11 +413,11 @@ def statistic_distributor(request):
413 413
         if i2 < len(distributor_code1_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_logs[i2]['distributor_name']:
414 414
             distributor_logs[i]['code1'] = distributor_code1_logs[i2]['num']
415 415
             i2 += 1
416
-        
416
+
417 417
         if i3 < len(distributor_code2_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_logs[i3]['distributor_name']:
418 418
             distributor_logs[i]['code2'] = distributor_code2_logs[i3]['num']
419 419
             i3 += 1
420
-        
420
+
421 421
         if i4 < len(distributor_code2_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_hasScan_logs[i4]['distributor_name']:
422 422
             distributor_logs[i]['has_code2_scan_num'] = distributor_code2_hasScan_logs[i4]['num']
423 423
             i4 += 1
@@ -430,6 +430,7 @@ def statistic_distributor(request):
430 430
         'distributor_logs': distributor_logs
431 431
     })
432 432
 
433
+
433 434
 def dashboard(request):
434 435
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
435 436
     admin_id = request.POST.get('admin_id', '')
@@ -444,7 +445,7 @@ def dashboard(request):
444 445
     except AdministratorInfo.DoesNotExist:
445 446
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
446 447
 
447
-    #销售员统计
448
+    # 销售员统计
448 449
     sale_logs = SaleclerkSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, test_sn=False, status=True)
449 450
 
450 451
     sale_count = sale_logs.count()
@@ -455,7 +456,7 @@ def dashboard(request):
455 456
 
456 457
     sale_distributor_logs = list(sale_logs.values('distributor_name').annotate(num=Count('pk')).order_by('-num'))[:10]
457 458
 
458
-    #消费者统计
459
+    # 消费者统计
459 460
     logs = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, status=True)
460 461
 
461 462
     consumer_count = logs.count()
@@ -477,6 +478,7 @@ def dashboard(request):
477 478
         'consumer_count': consumer_count,
478 479
     })
479 480
 
481
+
480 482
 def statistic_consumer(request):
481 483
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
482 484
     admin_id = request.POST.get('admin_id', '')
@@ -490,8 +492,8 @@ def statistic_consumer(request):
490 492
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
491 493
     except AdministratorInfo.DoesNotExist:
492 494
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
493
-    
494
-    #消费者统计
495
+
496
+    # 消费者统计
495 497
     logs = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, status=True)
496 498
 
497 499
     daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
@@ -506,7 +508,7 @@ def statistic_consumer(request):
506 508
         if j < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[j]['ymd']:
507 509
             daily_logs[i]['code1'] = daily_code1_logs[j]['num']
508 510
             j += 1
509
-        
511
+
510 512
         if k < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[k]['ymd']:
511 513
             daily_logs[i]['code2'] = daily_code2_logs[k]['num']
512 514
             k += 1
@@ -523,11 +525,11 @@ def statistic_consumer(request):
523 525
         if j < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[j]['model_uni_name']:
524 526
             model_logs[i]['code1'] = model_code1_logs[j]['num']
525 527
             j += 1
526
-        
528
+
527 529
         if k < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[k]['model_uni_name']:
528 530
             model_logs[i]['code2'] = model_code2_logs[k]['num']
529 531
             k += 1
530
-    
532
+
531 533
     model_logs.sort(key=lambda k: (-k['num']))
532 534
 
533 535
     province_logs = list(logs.values('province').annotate(num=Count('pk')).order_by('province'))
@@ -542,15 +544,15 @@ def statistic_consumer(request):
542 544
         if j < len(province_code1_logs) and province_logs[i]['province'] == province_code1_logs[j]['province']:
543 545
             province_logs[i]['code1'] = province_code1_logs[j]['num']
544 546
             j += 1
545
-        
547
+
546 548
         if k < len(province_code2_logs) and province_logs[i]['province'] == province_code2_logs[k]['province']:
547 549
             province_logs[i]['code2'] = province_code2_logs[k]['num']
548 550
             k += 1
549
-    
551
+
550 552
     province_logs.sort(key=lambda k: (-k['num']))
551 553
 
552 554
     return response(200, 'Get Consumer Statistic Success', u'获取消费者统计成功', data={
553 555
         'daily_logs': daily_logs,
554 556
         'model_logs': model_logs,
555 557
         'province_logs': province_logs,
556
-    })
558
+    })

+ 1 - 1
api/encrypt_views.py

@@ -145,7 +145,7 @@ def decrypt(request, v='v2'):
145 145
         mdli.decrypt_count += 1
146 146
         mdli.save()
147 147
 
148
-    #弃用老版本的劵形式,和会员系统统一
148
+    # 弃用老版本的劵形式,和会员系统统一
149 149
     if v == 'v1':
150 150
         has_unexpired_activity = False
151 151
         coupon_infos = {}

+ 7 - 6
api/mch_views.py

@@ -2,6 +2,8 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+import json
6
+
5 7
 from django.conf import settings
6 8
 from django.contrib.auth.hashers import check_password
7 9
 from django.db import transaction
@@ -10,19 +12,18 @@ from django_response import response
10 12
 from pywe_miniapp import get_phone_number
11 13
 from pywe_storage import RedisStorage
12 14
 from TimeConvert import TimeConvert as tc
13
-import json
14 15
 
15
-from logs.models import MchInfoEncryptLogInfo
16 16
 from account.models import UserInfo
17
+from coupon.models import CouponInfo, UserCouponInfo
17 18
 from integral.models import SaleclerkSubmitLogInfo
19
+from logs.models import MchInfoEncryptLogInfo
18 20
 from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,
19 21
                         LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo)
20
-from coupon.models import CouponInfo, UserCouponInfo
21 22
 from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
22 23
 from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode,
23 24
                                      ProductModelStatusCode, UserStatusCode)
24 25
 from utils.redis.connect import r
25
-from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MINI_PROGRAM_GIS_LIST, MEMBER_UPGRADE_INFO
26
+from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MEMBER_UPGRADE_INFO, MINI_PROGRAM_GIS_LIST
26 27
 
27 28
 
28 29
 WECHAT = settings.WECHAT
@@ -264,7 +265,7 @@ def consumer_info_api(request):
264 265
 
265 266
         if encrypt_logs:
266 267
             code_version = encrypt_logs[0].version
267
-    
268
+
268 269
     user.code_version = code_version
269 270
     user.save()
270 271
 
@@ -313,7 +314,7 @@ def consumer_info_api(request):
313 314
                 )
314 315
             except:
315 316
                 continue
316
-        
317
+
317 318
         # 更新销售员提交的表
318 319
         logs = SaleclerkSubmitLogInfo.objects.filter(code=serialNo, model_pk=model.pk)
319 320
         for log in logs:

+ 2 - 2
api/member_views.py

@@ -14,8 +14,8 @@ from account.models import UserInfo
14 14
 from coupon.models import UserCouponInfo
15 15
 from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityInfo, MemberActivitySigninInfo,
16 16
                            MemberActivitySignupInfo, RightInfo)
17
-from utils.error.errno_utils import (MemberActivityStatusCode, MemberCouponStatusCode, MemberGoodStatusCode, MemberRightStatusCode,
18
-                                     UserStatusCode)
17
+from utils.error.errno_utils import (MemberActivityStatusCode, MemberCouponStatusCode, MemberGoodStatusCode,
18
+                                     MemberRightStatusCode, UserStatusCode)
19 19
 from utils.redis.connect import r
20 20
 from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MEMBER_UPGRADE_INFO
21 21
 from utils.redis.rshot import get_member_shot_data

+ 3 - 2
api/model_views.py

@@ -10,7 +10,7 @@ from django_response import response
10 10
 from paginator import pagination
11 11
 
12 12
 from account.models import UserInfo
13
-from mch.models import AdministratorInfo, ModelInfo, ModelCameraBodyInfo
13
+from mch.models import AdministratorInfo, ModelCameraBodyInfo, ModelInfo
14 14
 from utils.error.errno_utils import AdministratorStatusCode, ProductModelStatusCode, UserStatusCode
15 15
 
16 16
 
@@ -159,6 +159,7 @@ def model_list(request):
159 159
         'left': left,
160 160
     })
161 161
 
162
+
162 163
 @logit
163 164
 def model_name_list(request):
164 165
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
@@ -175,7 +176,7 @@ def model_name_list(request):
175 176
     models = list(models)
176 177
 
177 178
     return response(200, 'Get Model Name List Success', u'获取型号列表成功', {
178
-        'models': sorted(set(models),key=models.index)
179
+        'models': sorted(set(models), key=models.index)
179 180
     })
180 181
 
181 182
 

+ 4 - 4
api/urls.py

@@ -5,8 +5,8 @@ from django_file_upload import views as file_views
5 5
 
6 6
 from account import tourguide_views
7 7
 from account import views as account_views
8
-from api import (admin_views, clerk_views, distributor_views, encrypt_views, mch_views, member_views, model_views,
9
-                 operator_views, refresh_views, sr_views, staff_views, log_views)
8
+from api import (admin_views, clerk_views, distributor_views, encrypt_views, log_views, mch_views, member_views,
9
+                 model_views, operator_views, refresh_views, sr_views, staff_views)
10 10
 from box import views as box_views
11 11
 from geo import views as geo_views
12 12
 from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views,
@@ -230,8 +230,8 @@ urlpatterns += [
230 230
     url(r'^clerk/integral/list$', sale_views.clerk_integral_list_api, name='clerk_integral_list_api'),  # 店员销售积分列表
231 231
     url(r'^clerk/model/list$', sale_views.clerk_model_list_api, name='clerk_model_list_api'),
232 232
     url(r'^clerk/checkout/serialNo$', sale_views.clerk_checkout_serialNo_api, name='clerk_checkout_serialNo_api'),  # 校验序列号
233
-    url(r'^clerk/query/coupon$', sale_views.clerk_query_coupon, name='clerk_query_coupon'), 
234
-    url(r'^clerk/writeoff/coupon$', sale_views.clerk_writeoff_coupon, name='clerk_writeoff_coupon'), 
233
+    url(r'^clerk/query/coupon$', sale_views.clerk_query_coupon, name='clerk_query_coupon'),
234
+    url(r'^clerk/writeoff/coupon$', sale_views.clerk_writeoff_coupon, name='clerk_writeoff_coupon'),
235 235
 ]
236 236
 
237 237
 urlpatterns += [

+ 1 - 1
commands/management/commands/gis.py

@@ -9,9 +9,9 @@ from django.db import transaction
9 9
 from django_models_ext import ProvinceModelMixin, ProvinceShortModelMixin
10 10
 from django_six import CompatibilityBaseCommand, close_old_connections
11 11
 
12
-from statistic.models import ConsumeProvinceSaleStatisticInfo
13 12
 from account.models import UserInfo
14 13
 from mch.models import ConsumeInfoSubmitLogInfo
14
+from statistic.models import ConsumeProvinceSaleStatisticInfo
15 15
 from utils.redis.connect import r
16 16
 from utils.redis.rkeys import MINI_PROGRAM_GIS_LIST
17 17
 

+ 1 - 2
commands/management/commands/membercard.py

@@ -89,7 +89,6 @@ class Command(CompatibilityBaseCommand):
89 89
                     log.phone = userinfo.phone
90 90
                     log.save()
91 91
 
92
-
93 92
                 try:
94 93
                     phoneinfo = requests.get(settings.PHONE_2_ADMINISTRATIVE_DIVISION.format(phone))
95 94
                 except Exception as e:
@@ -100,7 +99,7 @@ class Command(CompatibilityBaseCommand):
100 99
                 except Exception as e:
101 100
                     logger.info(e.message)
102 101
                     continue
103
-                
102
+
104 103
                 logs = ConsumeInfoSubmitLogInfo.objects.filter(user_id=userinfo.user_id)
105 104
                 for log in logs:
106 105
                     log.province = log.province if log.lat and log.lon else province_name

+ 1 - 1
commands/management/commands/subscribe.py

@@ -8,11 +8,11 @@ from django_redis_connector import connector
8 8
 from django_six import CompatibilityBaseCommand, close_old_connections
9 9
 from django_we.models import SubscribeUserInfo
10 10
 from pywe_storage import RedisStorage
11
-from pywe_user import get_user_info
12 11
 
13 12
 from account.models import UserInfo
14 13
 from mch.models import BrandInfo
15 14
 from pre.custom_message import sendcustomwxamessage
15
+from pywe_user import get_user_info
16 16
 from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST
17 17
 
18 18
 

+ 2 - 3
coupon/models.py

@@ -51,7 +51,6 @@ class CouponInfo(BaseModelMixin):
51 51
     def coupon_image_url(self):
52 52
         return upload_file_url(self.coupon_image)
53 53
 
54
-
55 54
     @property
56 55
     def final_expire_at(self):
57 56
         if self.coupon_expire_type == CouponInfo.FIXED_EXPIRED_TIME:
@@ -131,8 +130,8 @@ class UserCouponInfo(BaseModelMixin):
131 130
             'coupon_value': self.coupon_value,
132 131
             'coupon_image_url': self.coupon_image_url,
133 132
             'is_coupon_admin_writeoff': self.is_coupon_admin_writeoff,
134
-            'active_at': tc.local_string(self.active_at, format='%Y%m%d'),
135
-            'expire_at': tc.local_string(self.expire_at, format='%Y-%m-%d'),
133
+            'active_at': tc.local_string(utc_dt=self.active_at, format='%Y%m%d'),
134
+            'expire_at': tc.local_string(utc_dt=self.expire_at, format='%Y-%m-%d'),
136 135
             'coupon_valid_period': self.coupon_valid_period,
137 136
             'coupon_limit_model_ids': self.coupon_limit_model_ids,
138 137
             'has_actived': self.has_actived,

+ 0 - 2
integral/admin.py

@@ -1,6 +1,5 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
-from daterange_filter.filter import DateRangeFilter
4 3
 from django.contrib import admin
5 4
 from django_admin import AdvancedExportExcelModelAdmin, ReadOnlyModelAdmin
6 5
 
@@ -21,6 +20,5 @@ class SaleclerkSubmitLogInfoAdmin(AdvancedExportExcelModelAdmin, ReadOnlyModelAd
21 20
     search_fields = ('code', 'trackingNo', 'distributor_name', 'clerk_name', 'model_name', 'model_uni_name')
22 21
 
23 22
 
24
-
25 23
 admin.site.register(SaleclerkIntegralIncomeExpensesInfo, SaleclerkIntegralIncomeExpensesInfoAdmin)
26 24
 admin.site.register(SaleclerkSubmitLogInfo, SaleclerkSubmitLogInfoAdmin)

+ 0 - 1
kodo/settings.py

@@ -86,7 +86,6 @@ MIDDLEWARE = (
86 86
     'django.middleware.common.CommonMiddleware',
87 87
     # 'django.middleware.csrf.CsrfViewMiddleware',
88 88
     'django.contrib.auth.middleware.AuthenticationMiddleware',
89
-    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
90 89
     'django.contrib.messages.middleware.MessageMiddleware',
91 90
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
92 91
     'django.middleware.security.SecurityMiddleware',

+ 2 - 2
logs/models.py

@@ -18,8 +18,8 @@ class MchInfoEncryptLogInfo(BaseModelMixin):
18 18
 
19 19
     sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)
20 20
 
21
-    #二维码版本
22
-    version=models.IntegerField(_(u'version'), default=2, help_text=u'二维码版本', db_index=True)
21
+    # 二维码版本
22
+    version = models.IntegerField(_(u'version'), default=2, help_text=u'二维码版本', db_index=True)
23 23
 
24 24
     # 一物一码
25 25
     application_id = models.IntegerField(_(u'application_id'), default=0, help_text=u'申请单号', db_index=True)

+ 1 - 0
marketcode/tests.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.test import TestCase
5 5
 
6
+
6 7
 # Create your tests here.

+ 1 - 0
marketcode/views.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.shortcuts import render
5 5
 
6
+
6 7
 # Create your views here.

+ 3 - 2
mch/admin.py

@@ -8,8 +8,9 @@ from django_admin import AdvancedActionsModelAdmin, AdvancedExportExcelModelAdmi
8 8
 from django_models_ext import ProvinceShortModelMixin
9 9
 from pysnippets.strsnippets import strip
10 10
 
11
-from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,
12
-                        LatestAppInfo, LatestAppScreenInfo, ModelInfo, ModelCameraBodyInfo, OperatorInfo, SaleclerkInfo)
11
+from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo,
12
+                        DistributorInfo, LatestAppInfo, LatestAppScreenInfo, ModelCameraBodyInfo, ModelInfo,
13
+                        OperatorInfo, SaleclerkInfo)
13 14
 from utils.redis.rshot import update_member_shot_data
14 15
 
15 16
 

+ 17 - 21
mch/models.py

@@ -337,7 +337,7 @@ class ModelCameraBodyInfo(BaseModelMixin):
337 337
     def final_camera_market_time(self):
338 338
         if not self.camera_market_time:
339 339
             return ''
340
-        return tc.local_string(self.camera_market_time, format='%Y-%m-%d')
340
+        return tc.local_string(utc_dt=self.camera_market_time, format='%Y-%m-%d')
341 341
 
342 342
     @property
343 343
     def data(self):
@@ -693,7 +693,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
693 693
             'serialNo': self.serialNo,
694 694
             'integral': model_info.shot_member_integral,
695 695
             'dupload': self.dupload,
696
-            'created_at': tc.local_string(self.created_at, format='%Y-%m-%d'),
696
+            'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),
697 697
         }
698 698
 
699 699
 
@@ -737,10 +737,7 @@ class ActivityInfo(BaseModelMixin):
737 737
         final_expire_at = self.final_expire_at(created_at=created_at)
738 738
         if not final_expire_at:
739 739
             return ''
740
-        y = tc.local_string(final_expire_at, format='%Y')
741
-        m = tc.local_string(final_expire_at, format='%m')
742
-        d = tc.local_string(final_expire_at, format='%d')
743
-        return u'{}年{}月{}日'.format(y, m, d)
740
+        return tc.local_string(utc_dt=final_expire_at, format=u'%Y年%m月%d日', isuc=True)
744 741
 
745 742
     def has_unexpired_activity(self, model_name):
746 743
         return ((self.model_uni_names and model_name in self.model_uni_names) or not self.model_uni_names) and (self.start_at <= tc.utc_datetime() < self.end_at)
@@ -751,7 +748,6 @@ class ActivityInfo(BaseModelMixin):
751 748
             'coupon_value': self.coupon_value,
752 749
             'coupon_has_expired': tc.utc_datetime() >= self.final_expire_at(created_at=created_at),
753 750
         }
754
-    
755 751
 
756 752
     def coupon_info2(self, created_at=None):
757 753
         return self.coupon_info(created_at=created_at),
@@ -759,17 +755,17 @@ class ActivityInfo(BaseModelMixin):
759 755
     @property
760 756
     def coupon_info3(self):
761 757
         try:
762
-            coupon_info = CouponInfo.objects.get(coupon_id=self.coupon_id)
763
-            return {
764
-                'coupon_image': coupon_info.coupon_image_url,
765
-                'coupon_expire_at': coupon_info.coupon_expire_at,
766
-                'coupon_value': coupon_info.coupon_value,
767
-                'coupon_title': coupon_info.coupon_title,
768
-                'coupon_valid_period': coupon_info.coupon_valid_period,
769
-                'coupon_id': coupon_info.coupon_id,
770
-                'activity_id': self.activity_id,
771
-                'activity_name': self.activity_name,
772
-            }
773
-        except:
774
-            return {}
775
-        
758
+            coupon = CouponInfo.objects.get(coupon_id=self.coupon_id)
759
+        except CouponInfo.DoesNotExist:
760
+            coupon = None
761
+
762
+        return {
763
+            'coupon_image': coupon.coupon_image_url,
764
+            'coupon_expire_at': coupon.coupon_expire_at,
765
+            'coupon_value': coupon.coupon_value,
766
+            'coupon_title': coupon.coupon_title,
767
+            'coupon_valid_period': coupon.coupon_valid_period,
768
+            'coupon_id': coupon.coupon_id,
769
+            'activity_id': self.activity_id,
770
+            'activity_name': self.activity_name,
771
+        } if coupon else {}

+ 2 - 2
member/models.py

@@ -330,7 +330,7 @@ class MemberActivityInfo(BaseModelMixin):
330 330
             'activity_id': self.activity_id,
331 331
             'title': self.title,
332 332
             'subtitle': self.subtitle,
333
-            'date': tc.local_string(self.date, format='%Y-%m-%d'),
333
+            'date': tc.local_string(utc_dt=self.date, format='%Y-%m-%d'),
334 334
             'city': self.city,
335 335
             'location': self.location,
336 336
             'lat': self.lat,
@@ -350,7 +350,7 @@ class MemberActivityInfo(BaseModelMixin):
350 350
             'activity_id': self.activity_id,
351 351
             'title': self.title,
352 352
             'subtitle': self.subtitle,
353
-            'date': tc.local_string(self.date, format='%Y-%m-%d'),
353
+            'date': tc.local_string(utc_dt=self.date, format='%Y-%m-%d'),
354 354
             'city': self.city,
355 355
             'location': self.location,
356 356
             'lat': self.lat,

+ 12 - 8
page/sale_views.py

@@ -2,6 +2,10 @@
2 2
 
3 3
 from __future__ import division
4 4
 
5
+import os
6
+import string
7
+import sys
8
+
5 9
 from django.conf import settings
6 10
 from django.db import transaction
7 11
 from django_logit import logit
@@ -10,16 +14,14 @@ from paginator import pagination
10 14
 from TimeConvert import TimeConvert as tc
11 15
 
12 16
 from account.models import UserInfo
17
+from coupon.models import UserCouponInfo
13 18
 from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
14 19
 from logs.models import MchInfoEncryptLogInfo
15
-from coupon.models import UserCouponInfo
16 20
 from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo
17 21
 from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
18 22
                               SaleclerkSaleStatisticInfo, SaleStatisticInfo)
19
-from utils.error.errno_utils import (ProductBrandStatusCode, ProductDistributorStatusCode, ProductMachineStatusCode,
20
-                                     ProductModelStatusCode, SaleclerkStatusCode, CouponStatusCode)
21
-import os,sys,string
22
-
23
+from utils.error.errno_utils import (CouponStatusCode, ProductBrandStatusCode, ProductDistributorStatusCode,
24
+                                     ProductMachineStatusCode, ProductModelStatusCode, SaleclerkStatusCode)
23 25
 
24 26
 
25 27
 @logit
@@ -99,7 +101,7 @@ def clerk_sale_submit_api(request):
99 101
     # 是否被消费者扫过
100 102
     has_scan = ConsumeInfoSubmitLogInfo.objects.filter(model_id=model.model_id, serialNo=serialNo).exists()
101 103
 
102
-    #是否是新二维码,即统览码2
104
+    # 是否是新二维码,即统览码2
103 105
     if not code_version:
104 106
         code_version = 1
105 107
         code = filter(lambda ch: ch in '0123456789', serialNo)
@@ -458,6 +460,7 @@ def clerk_query_coupon(request):
458 460
         'user_coupon': user_coupon.data
459 461
     })
460 462
 
463
+
461 464
 @logit
462 465
 def clerk_writeoff_coupon(request):
463 466
     brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK)
@@ -490,7 +493,7 @@ def clerk_writeoff_coupon(request):
490 493
     try:
491 494
         user_coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id)
492 495
         if user_coupon.has_used:
493
-            return response(CouponStatusCode.COUPON_HAS_USED) 
496
+            return response(CouponStatusCode.COUPON_HAS_USED)
494 497
         elif user_coupon.is_coupon_admin_writeoff:
495 498
             return response(CouponStatusCode.COUPON_PERMISSION_DENIED)
496 499
         elif not user_coupon.has_expired:
@@ -502,12 +505,13 @@ def clerk_writeoff_coupon(request):
502 505
             user_coupon.used_at = tc.utc_datetime()
503 506
             user_coupon.save()
504 507
         else:
505
-          return response(CouponStatusCode.COUPON_EXPIRED)
508
+            return response(CouponStatusCode.COUPON_EXPIRED)
506 509
     except UserCouponInfo.DoesNotExist:
507 510
         return response(CouponStatusCode.COUPON_NOT_FOUND)
508 511
 
509 512
     return response(200, 'Write Off Coupon Success', u'劵核销成功')
510 513
 
514
+
511 515
 @logit
512 516
 def clerk_checkout_serialNo_api(request):
513 517
     brandID = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_PK)

+ 7 - 7
pre/views.py

@@ -128,7 +128,7 @@ def pre_new_models(fpath='./pre/static/models_20180816.xls'):
128 128
     nrows = sheet.nrows
129 129
     for idx in range(1, nrows):
130 130
         rvals = sheet.row_values(idx)
131
-        print rvals
131
+        print(rvals)
132 132
 
133 133
         jancode = strip(rvals[0])
134 134
         if not jancode:
@@ -159,18 +159,18 @@ def pre_adaptive_cameras(fpath=u'./pre/static/腾龙镜头适用机型V1.xlsx'):
159 159
     for sheet in sheets:
160 160
         model_name = sheet.name
161 161
         model_full_name = sheet.row_values(2)[0]
162
-        print model_name, model_full_name
162
+        print(model_name, model_full_name)
163 163
         nrows = sheet.nrows
164 164
         for idx in range(4, nrows):
165 165
             rvals = sheet.row_values(idx)
166
-            print rvals
166
+            print(rvals)
167 167
             for val in rvals:
168 168
                 val = strip(val)
169 169
                 if not val:
170 170
                     continue
171 171
                 if u'卡口' in val:
172 172
                     continue
173
-                print val
173
+                print(val)
174 174
                 ModelCameraBodyInfo.objects.get_or_create(
175 175
                     brand_id=settings.KODO_DEFAULT_BRAND_ID,
176 176
                     brand_name=settings.KODO_DEFAULT_BRAND_NAME,
@@ -249,7 +249,7 @@ def refreshs():
249 249
     logs = ConsumeInfoSubmitLogInfo.objects.filter(verifyResult=1, dupload=False, test_user=False)
250 250
 
251 251
     for log in logs:
252
-        ymd = tc.local_string(tc.to_local_datetime(log.created_at), format='%Y%m%d')
252
+        ymd = tc.local_string(utc_dt=log.created_at, format='%Y%m%d')
253 253
 
254 254
         try:
255 255
             mdl = ModelInfo.objects.get(model_id=log.model_id)
@@ -329,7 +329,7 @@ def refreshs():
329 329
                 'lat': log.lat,
330 330
                 'lon': log.lon,
331 331
                 'phone': log.phone,
332
-                'ymd': tc.local_string(tc.to_local_datetime(log.created_at), format='%Y%m%d'),
332
+                'ymd': tc.local_string(utc_dt=log.created_at, format='%Y%m%d'),
333 333
                 'model_id': log.model_id,
334 334
                 'serialNo': log.serialNo
335 335
             })
@@ -345,7 +345,7 @@ def refreshs2():
345 345
     logs = SaleclerkSubmitLogInfo.objects.filter(dupload=False, test_user=False, test_sn=False, status=True)
346 346
 
347 347
     for log in logs:
348
-        ymd = tc.local_string(tc.to_local_datetime(log.created_at), format='%Y%m%d')
348
+        ymd = tc.local_string(utc_dt=log.created_at, format='%Y%m%d')
349 349
 
350 350
         try:
351 351
             brand = BrandInfo.objects.get(pk=log.brand_pk)

+ 2 - 2
requirements.txt

@@ -1,4 +1,4 @@
1
-CodeConvert==2.0.5
1
+CodeConvert==3.0.2
2 2
 Pillow==5.0.0
3 3
 StatusCode==1.0.0
4 4
 TimeConvert==1.5.1
@@ -7,7 +7,7 @@ isoweek==1.3.3
7 7
 jsonfield==2.0.2
8 8
 mock==2.0.0
9 9
 monetary==1.0.3
10
-mysqlclient==1.4.5
10
+mysqlclient==1.4.6
11 11
 pysnippets==1.1.2
12 12
 qiniu==7.2.6
13 13
 requests==2.21.0

+ 1 - 1
requirements_deploy.txt

@@ -1,3 +1,3 @@
1 1
 ipdb==0.11
2 2
 ipython==5.8.0
3
-uwsgi==2.0.17
3
+uwsgi==2.0.18

+ 2 - 2
requirements_dj.txt

@@ -1,9 +1,9 @@
1
-Django==1.11.26
1
+Django==1.11.29
2 2
 django-admin==2.0.1
3 3
 django-cors-headers==3.0.2
4 4
 django-curtail-uuid==1.0.4
5 5
 django-daterange-filter==1.3.0
6
-django-detect==1.0.17
6
+django-detect==1.0.18
7 7
 django-file-md5==1.0.3
8 8
 django-file-upload==1.1.1
9 9
 django-ip==1.0.2

+ 1 - 1
requirements_pywe.txt

@@ -8,7 +8,7 @@ pywe-custom-message==1.0.1
8 8
 pywe-miniapp==1.1.5
9 9
 pywe-oauth==1.1.1
10 10
 pywe-pay==1.0.13
11
-pywe-pay-notify==1.0.4
11
+pywe-pay-notify==1.0.5
12 12
 pywe-response==1.0.1
13 13
 pywe-sign==1.1.0
14 14
 pywe-wxa-cv==1.0.0

+ 2 - 2
shells/views.py

@@ -3,8 +3,8 @@
3 3
 from django.conf import settings
4 4
 from django_redis_connector import connector
5 5
 from pywe_storage import RedisStorage
6
-from pywe_user import get_all_users
7 6
 
7
+from pywe_user import get_all_users
8 8
 from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST
9 9
 
10 10
 
@@ -15,7 +15,7 @@ WECHAT = settings.WECHAT
15 15
 
16 16
 
17 17
 def fetch_users_func(authorizer_appid, infos):
18
-    print authorizer_appid, infos
18
+    print(authorizer_appid, infos)
19 19
     openids = infos.get('data', {}).get('openid', [])
20 20
     for openid in openids:
21 21
         r1.rpushjson(SUBSCRIBE_USERINFO_LIST % authorizer_appid, {

+ 1 - 0
staff/tests.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.test import TestCase
5 5
 
6
+
6 7
 # Create your tests here.

+ 1 - 0
staff/views.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.shortcuts import render
5 5
 
6
+
6 7
 # Create your views here.

+ 1 - 0
utils/error/errno_utils.py

@@ -256,6 +256,7 @@ class PermissionStatusCode(BaseStatusCode):
256 256
     """ 4099xx 权限相关错误码 """
257 257
     PERMISSION_DENIED = StatusCodeField(409900, 'Permission Denied', description=u'权限不足')
258 258
 
259
+
259 260
 class CouponStatusCode(BaseStatusCode):
260 261
     """ 4050xx 优惠劵相关错误码 """
261 262
     COUPON_NOT_FOUND = StatusCodeField(405001, 'Coupon Not Found', description=u'劵不存在')

+ 1 - 1
utils/redis/rbrief.py

@@ -9,7 +9,7 @@ from utils.redis.rkeys import TODAY_INCOME, TOTAL_INCOME, WEEK_INCOME, WEEK_SOLD
9 9
 
10 10
 def set_brief_info(uid, ptype, fee, dt=None):
11 11
     """ 更新简报信息 """
12
-    ymd, week = (tc.local_string(tc.to_local_datetime(dt), format='%Y%m%d'), Week.withdate(dt)) if dt else (tc.local_string(format='%Y%m%d'), Week.thisweek().isoformat())
12
+    ymd, week = (tc.local_string(utc_dt=dt, format='%Y%m%d'), Week.withdate(dt)) if dt else (tc.local_string(format='%Y%m%d'), Week.thisweek().isoformat())
13 13
 
14 14
     # 总收入
15 15
     r.incr(TOTAL_INCOME % (uid, ptype), fee)

+ 1 - 1
utils/zbar/zbar.py

@@ -41,7 +41,7 @@ def zbar(path):
41 41
 def test_zbar():
42 42
     # In[4]: test_zbar()
43 43
     # [u'189415']
44
-    print zbar(settings.TESTING_ZBAR)
44
+    print(zbar(settings.TESTING_ZBAR))
45 45
 
46 46
 
47 47
 if __name__ == '__main__':

+ 1 - 1
utils/zbar/zbar2.py

@@ -28,4 +28,4 @@ def zbar2(path):
28 28
 def test_zbar2():
29 29
     # In[5]: test_zbar()
30 30
     # [u'189415']
31
-    print zbar2(settings.TESTING_ZBAR)
31
+    print(zbar2(settings.TESTING_ZBAR))