@@ -8,8 +8,8 @@ from mch.models import ConsumeInfoSubmitLogInfo |
||
8 | 8 |
|
9 | 9 |
|
10 | 10 |
class UserInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin): |
11 |
- list_display = ('user_id', 'nickname', 'phone', 'appid', 'unionid', 'openid', 'openid_miniapp', 'location', 'balance', 'integral', 'freeze_integral', 'user_status', 'test_user', 'status', 'created_at', 'updated_at') |
|
12 |
- list_filter = ('user_from', 'appid', 'subscribe', 'has_membercard', 'test_user', 'sex', 'user_status', 'status', 'code_version', 'new_subscribe', 'created_at', 'integral') |
|
11 |
+ list_display = ('user_id', 'nickname', 'phone', 'appid', 'unionid', 'openid', 'openid_miniapp', 'location', 'balance', 'integral', 'freeze_integral', 'user_status', 'test_user', 'integral', 'freeze_integral', 'shots_num', 'level', 'coupon_expire_at', 'is_maintenance', 'status', 'created_at', 'updated_at') |
|
12 |
+ list_filter = ('user_from', 'appid', 'subscribe', 'has_membercard', 'test_user', 'is_maintenance', 'sex', 'user_status', 'status', 'code_version', 'new_subscribe', 'created_at', 'integral') |
|
13 | 13 |
readonly_fields = ('user_id', ) |
14 | 14 |
search_fields = ('user_id', 'username', 'unionid', 'openid', 'openid_miniapp', 'name', 'phone', 'location', 'memberusercardcode') |
15 | 15 |
|
@@ -0,0 +1,20 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.29 on 2021-09-05 17:09 |
|
3 |
+from __future__ import unicode_literals |
|
4 |
+ |
|
5 |
+from django.db import migrations, models |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class Migration(migrations.Migration): |
|
9 |
+ |
|
10 |
+ dependencies = [ |
|
11 |
+ ('account', '0053_userinfo_resgister_at'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.AddField( |
|
16 |
+ model_name='userinfo', |
|
17 |
+ name='coupon_expire_at', |
|
18 |
+ field=models.DateTimeField(blank=True, help_text='\u4f18\u60e0\u5238\u8fc7\u671f\u65f6\u95f4', null=True, verbose_name='coupon_expire_at'), |
|
19 |
+ ), |
|
20 |
+ ] |
@@ -139,6 +139,9 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
139 | 139 |
shots_num = models.IntegerField(_(u'shots_num'), default=0, help_text=u'主持镜头数') |
140 | 140 |
level = models.IntegerField(_(u'level'), choices=LEVEL_TUPLE, default=MEMBER_NO, help_text=u'会员等级') |
141 | 141 |
|
142 |
+ # 优惠券信息 |
|
143 |
+ coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'优惠券过期时间')) |
|
144 |
+ |
|
142 | 145 |
# 维修员信息 |
143 | 146 |
is_maintenance = models.BooleanField(_(u'is_maintenance'), default=False, help_text=_(u'是否维修员')) |
144 | 147 |
|
@@ -0,0 +1,43 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+import logging |
|
4 |
+import time |
|
5 |
+ |
|
6 |
+from django_six import CompatibilityBaseCommand, close_old_connections |
|
7 |
+from TimeConvert import TimeConvert as tc |
|
8 |
+ |
|
9 |
+from account.models import UserInfo |
|
10 |
+from coupon.models import CouponInfo, UserCouponInfo |
|
11 |
+from member.models import RightInfo |
|
12 |
+from utils.redis.connect import r |
|
13 |
+from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST |
|
14 |
+ |
|
15 |
+ |
|
16 |
+logger = logging.getLogger('console') |
|
17 |
+ |
|
18 |
+ |
|
19 |
+class Command(CompatibilityBaseCommand): |
|
20 |
+ def handle(self, *args, **options): |
|
21 |
+ coupon_ids = [] |
|
22 |
+ |
|
23 |
+ rights = RightInfo.objects.filter(is_send_coupon=True, status=True) |
|
24 |
+ for right in rights: |
|
25 |
+ for coupon_id in [right.coupon_level1_id, right.coupon_level2_id, right.coupon_level3_id, right.coupon_level4_id, right.coupon_level5_id]: |
|
26 |
+ if not coupon_id: |
|
27 |
+ continue |
|
28 |
+ |
|
29 |
+ try: |
|
30 |
+ coupon = CouponInfo.objects.get(coupon_id=coupon_id) |
|
31 |
+ except CouponInfo.DoesNotExist: |
|
32 |
+ continue |
|
33 |
+ |
|
34 |
+ coupon_ids.append(coupon_id) |
|
35 |
+ |
|
36 |
+ users = UserInfo.objects.all() |
|
37 |
+ for user in users: |
|
38 |
+ coupons = UserCouponInfo.objects.filter(coupon_id__in=coupon_ids, status=True).order_by('-expire_at') |
|
39 |
+ if not coupons: |
|
40 |
+ continue |
|
41 |
+ |
|
42 |
+ user.coupon_expire_at = coupons[0].expire_at |
|
43 |
+ user.save() |
@@ -87,7 +87,7 @@ class SaleclerkSubmitLogInfo(BaseModelMixin): |
||
87 | 87 |
model_uni_name = models.CharField(_(u'model_uni_name'), max_length=255, blank=True, null=True, help_text=u'型号统称') |
88 | 88 |
|
89 | 89 |
distributor_pk = models.IntegerField(_(u'distributor_pk'), default=0, help_text=u'经销商PK', db_index=True) |
90 |
- distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True) |
|
90 |
+ distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True) |
|
91 | 91 |
distributor_name = models.CharField(_(u'distributor_name'), max_length=32, blank=True, null=True, help_text=u'经销商名称') |
92 | 92 |
|
93 | 93 |
clerk_id = models.CharField(_(u'clerk_id'), max_length=32, blank=True, null=True, help_text=u'店员唯一标识', db_index=True) |
@@ -152,11 +152,19 @@ class SaleclerkSubmitLogInfo(BaseModelMixin): |
||
152 | 152 |
def admindata(self): |
153 | 153 |
try: |
154 | 154 |
distributor = DistributorInfo.objects.get(distributor_id=self.distributor_id) |
155 |
- sr = SalesResponsibilityInfo.objects.get(sr_id=distributor.sr_id) |
|
156 |
- |
|
155 |
+ except DistributorInfo.DoesNotExist: |
|
156 |
+ distributor = None |
|
157 |
+ if distributor: |
|
158 |
+ try: |
|
159 |
+ sr = SalesResponsibilityInfo.objects.get(sr_id=distributor.sr_id) |
|
160 |
+ except SalesResponsibilityInfo.DoesNotExist: |
|
161 |
+ sr = None |
|
162 |
+ else: |
|
163 |
+ sr = None |
|
164 |
+ if sr: |
|
157 | 165 |
office = distributor.office |
158 | 166 |
sr_name = sr.name |
159 |
- except: |
|
167 |
+ else: |
|
160 | 168 |
office = '' |
161 | 169 |
sr_name = '' |
162 | 170 |
|
@@ -1,7 +1,7 @@ |
||
1 | 1 |
CodeConvert==3.0.2 |
2 | 2 |
Pillow==8.3.1 |
3 | 3 |
StatusCode==1.0.0 |
4 |
-TimeConvert==1.5.4 |
|
4 |
+TimeConvert==1.6.0 |
|
5 | 5 |
furl==2.1.2 |
6 | 6 |
isoweek==1.3.3 |
7 | 7 |
jsonfield==3.1.0 |