+ })
@@ -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'劵不存在') |