5
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
|
+ })
|
|
|
|
@@ -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 = {}
|
|
|
|
@@ -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:
|
|
|
|
@@ -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
|
|
|
|
@@ -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
|
|
|
|
|
@@ -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 += [
|
|
|
|
@@ -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
|
|
|
|
|
@@ -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
|
|
|
|
@@ -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
|
|
|
|
|
@@ -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:
|
|
|
|
@@ -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)
|
|
|
|
@@ -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)
|
|
|
|
@@ -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.
|
|
|
|
@@ -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.
|
|
|
|
@@ -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
|
|
|
|
|
@@ -755,17 +755,17 @@ class ActivityInfo(BaseModelMixin):
|
|
755
|
755
|
@property
|
|
756
|
756
|
def coupon_info3(self):
|
|
757
|
757
|
try:
|
|
758
|
|
- coupon_info = CouponInfo.objects.get(coupon_id=self.coupon_id)
|
|
759
|
|
- return {
|
|
760
|
|
- 'coupon_image': coupon_info.coupon_image_url,
|
|
761
|
|
- 'coupon_expire_at': coupon_info.coupon_expire_at,
|
|
762
|
|
- 'coupon_value': coupon_info.coupon_value,
|
|
763
|
|
- 'coupon_title': coupon_info.coupon_title,
|
|
764
|
|
- 'coupon_valid_period': coupon_info.coupon_valid_period,
|
|
765
|
|
- 'coupon_id': coupon_info.coupon_id,
|
|
766
|
|
- 'activity_id': self.activity_id,
|
|
767
|
|
- 'activity_name': self.activity_name,
|
|
768
|
|
- }
|
|
769
|
|
- except:
|
|
770
|
|
- return {}
|
|
771
|
|
-
|
|
|
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,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)
|
|
|
|
@@ -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
|
|
|
|
|
@@ -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.
|
|
|
|
@@ -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.
|
|
|
|
@@ -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'劵不存在')
|