@@ -0,0 +1,24 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-11-05 15:16 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('account', '0056_alter_userintegralincomeexpensesinfo_integral_from'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AddField( |
|
15 |
+ model_name='userinfo', |
|
16 |
+ name='identity_card_name', |
|
17 |
+ field=models.CharField(blank=True, help_text='身份证姓名', max_length=32, null=True, verbose_name='identity_card_name'), |
|
18 |
+ ), |
|
19 |
+ migrations.AddField( |
|
20 |
+ model_name='userinfo', |
|
21 |
+ name='identity_card_number', |
|
22 |
+ field=models.CharField(blank=True, help_text='身份证号', max_length=32, null=True, verbose_name='identity_card_number'), |
|
23 |
+ ), |
|
24 |
+ ] |
@@ -102,8 +102,8 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
102 | 102 |
province_name = models.CharField(_(u'province_name'), max_length=255, blank=True, null=True, help_text=u'用户省份信息') |
103 | 103 |
|
104 | 104 |
# 用户身份 |
105 |
- islensman = models.BooleanField(_(u'islensman'), default=False, help_text=_(u'摄影师?')) |
|
106 |
- istourguide = models.BooleanField(_(u'istourguide'), default=False, help_text=_(u'导游?')) |
|
105 |
+ islensman = models.BooleanField(_(u'islensman'), default=False, help_text=u'摄影师?') |
|
106 |
+ istourguide = models.BooleanField(_(u'istourguide'), default=False, help_text=u'导游?') |
|
107 | 107 |
|
108 | 108 |
balance = models.IntegerField(_(u'balance'), default=0, help_text=u'用户余额(分)') |
109 | 109 |
freeze_income_balance = models.IntegerField(_(u'freeze_income_balance'), default=0, help_text=u'用户收入冻结余额(分)') |
@@ -112,25 +112,25 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
112 | 112 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED, help_text=u'用户状态') |
113 | 113 |
outtake_status = models.IntegerField(_(u'outtake_status'), choices=USER_STATUS, default=UNVERIFIED, help_text=u'花絮摄影师状态') |
114 | 114 |
|
115 |
- assign_ip = models.CharField(_(u'assign_ip'), max_length=32, blank=True, null=True, help_text=_(u'分配IP')) |
|
116 |
- assign_at = models.DateTimeField(_(u'assign_at'), blank=True, null=True, help_text=_(u'分配时间')) |
|
115 |
+ assign_ip = models.CharField(_(u'assign_ip'), max_length=32, blank=True, null=True, help_text=u'分配IP') |
|
116 |
+ assign_at = models.DateTimeField(_(u'assign_at'), blank=True, null=True, help_text=u'分配时间') |
|
117 | 117 |
|
118 |
- signup_ip = models.CharField(_(u'signup_ip'), max_length=32, blank=True, null=True, help_text=_(u'注册IP')) |
|
119 |
- signup_at = models.DateTimeField(_(u'signup_at'), blank=True, null=True, help_text=_(u'注册时间')) |
|
118 |
+ signup_ip = models.CharField(_(u'signup_ip'), max_length=32, blank=True, null=True, help_text=u'注册IP') |
|
119 |
+ signup_at = models.DateTimeField(_(u'signup_at'), blank=True, null=True, help_text=u'注册时间') |
|
120 | 120 |
|
121 |
- login_ip = models.CharField(_(u'login_ip'), max_length=32, blank=True, null=True, help_text=_(u'登录IP')) |
|
122 |
- login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=_(u'登录时间')) |
|
121 |
+ login_ip = models.CharField(_(u'login_ip'), max_length=32, blank=True, null=True, help_text=u'登录IP') |
|
122 |
+ login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=u'登录时间') |
|
123 | 123 |
|
124 | 124 |
subscribe = models.IntegerField(_(u'subscribe'), default=0, help_text=u'是否关注', db_index=True) |
125 |
- new_subscribe = models.BooleanField(_(u'new_subscribe'), default=False, help_text=_(u'是否新增关注')) |
|
125 |
+ new_subscribe = models.BooleanField(_(u'new_subscribe'), default=False, help_text=u'是否新增关注') |
|
126 | 126 |
|
127 | 127 |
code_version = models.IntegerField(_(u'code_version'), default=1, help_text=u'统览码版本', db_index=True) |
128 | 128 |
|
129 |
- has_membercard = models.BooleanField(_(u'has_membercard'), default=False, help_text=_(u'是否激活会员卡')) |
|
130 |
- membercardid = models.CharField(_(u'membercardid'), max_length=32, blank=True, null=True, help_text=_(u'会员卡编号'), db_index=True) |
|
131 |
- memberusercardcode = models.CharField(_(u'memberusercardcode'), max_length=32, blank=True, null=True, help_text=_(u'用户会员卡编号'), db_index=True) |
|
129 |
+ has_membercard = models.BooleanField(_(u'has_membercard'), default=False, help_text=u'是否激活会员卡') |
|
130 |
+ membercardid = models.CharField(_(u'membercardid'), max_length=32, blank=True, null=True, help_text=u'会员卡编号', db_index=True) |
|
131 |
+ memberusercardcode = models.CharField(_(u'memberusercardcode'), max_length=32, blank=True, null=True, help_text=u'用户会员卡编号', db_index=True) |
|
132 | 132 |
|
133 |
- test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户')) |
|
133 |
+ test_user = models.BooleanField(_(u'test_user'), default=False, help_text=u'是否为测试用户') |
|
134 | 134 |
|
135 | 135 |
# 会员信息 |
136 | 136 |
integral = models.IntegerField(_(u'integral'), default=0, help_text=u'会员积分') |
@@ -140,12 +140,16 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
140 | 140 |
level = models.IntegerField(_(u'level'), choices=LEVEL_TUPLE, default=MEMBER_NO, help_text=u'会员等级') |
141 | 141 |
|
142 | 142 |
# 优惠券信息 |
143 |
- coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'优惠券过期时间')) |
|
143 |
+ coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=u'优惠券过期时间') |
|
144 | 144 |
|
145 | 145 |
# 维修员信息 |
146 |
- is_maintenance = models.BooleanField(_(u'is_maintenance'), default=False, help_text=_(u'是否维修员')) |
|
146 |
+ is_maintenance = models.BooleanField(_(u'is_maintenance'), default=False, help_text=u'是否维修员') |
|
147 | 147 |
|
148 |
- resgister_at = models.DateTimeField(_(u'resgister_at'), blank=True, null=True, help_text=_(u'注册镜头时间')) |
|
148 |
+ resgister_at = models.DateTimeField(_(u'resgister_at'), blank=True, null=True, help_text=u'注册镜头时间') |
|
149 |
+ |
|
150 |
+ # 身份证信息 |
|
151 |
+ identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号') |
|
152 |
+ identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名') |
|
149 | 153 |
|
150 | 154 |
class Meta: |
151 | 155 |
verbose_name = _(u'userinfo') |
@@ -26,14 +26,14 @@ class CouponInfo(BaseModelMixin): |
||
26 | 26 |
|
27 | 27 |
coupon_title = models.CharField(_(u'coupon_title'), max_length=255, blank=True, null=True, help_text=u'券标题') |
28 | 28 |
coupon_detail = RichTextField(_(u'coupon_detail'), blank=True, null=True, help_text=u'券详情') |
29 |
- coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)')) |
|
29 |
+ coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=u'维修券金额(单位:分)') |
|
30 | 30 |
coupon_image = models.ImageField(_(u'coupon_image'), upload_to=upload_path, blank=True, null=True, help_text=u'券图片') |
31 | 31 |
|
32 |
- coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=_(u'维修券类型')) |
|
33 |
- coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'维修券有效时间(单位:天)')) |
|
34 |
- coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间')) |
|
32 |
+ coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=u'维修券类型') |
|
33 |
+ coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=u'维修券有效时间(单位:天)') |
|
34 |
+ coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=u'维修券过期时间') |
|
35 | 35 |
|
36 |
- is_coupon_admin_writeoff = models.BooleanField(_(u'is_coupon_admin_writeoff'), default=True, help_text=_(u'是否是管理员核销')) |
|
36 |
+ is_coupon_admin_writeoff = models.BooleanField(_(u'is_coupon_admin_writeoff'), default=True, help_text=u'是否是管理员核销') |
|
37 | 37 |
coupon_limit_model_ids = JSONField(_(u'coupon_limit_model_ids'), blank=True, null=True, help_text=u'券限制使用 model_ids') |
38 | 38 |
|
39 | 39 |
class Meta: |
@@ -101,9 +101,9 @@ class UserCouponInfo(BaseModelMixin): |
||
101 | 101 |
coupon_value = models.IntegerField(_(u'coupon_value'), default=0, blank=True, null=True, help_text=u'券金额(单位:分)') |
102 | 102 |
coupon_image = models.ImageField(_(u'coupon_image'), upload_to=upload_path, blank=True, null=True, help_text=u'券图片') |
103 | 103 |
|
104 |
- active_at = models.DateTimeField(_(u'active_at'), blank=True, null=True, help_text=_(u'生效时间')) |
|
105 |
- expire_at = models.DateTimeField(_(u'expire_at'), blank=True, null=True, help_text=_(u'过期时间')) |
|
106 |
- coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'券有效时间(单位:天)')) |
|
104 |
+ active_at = models.DateTimeField(_(u'active_at'), blank=True, null=True, help_text=u'生效时间') |
|
105 |
+ expire_at = models.DateTimeField(_(u'expire_at'), blank=True, null=True, help_text=u'过期时间') |
|
106 |
+ coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=u'券有效时间(单位:天)') |
|
107 | 107 |
|
108 | 108 |
coupon_limit_model_ids = JSONField(_(u'coupon_limit_model_ids'), blank=True, null=True, help_text=u'券限制使用 model_ids') |
109 | 109 |
|
@@ -111,7 +111,7 @@ class UserCouponInfo(BaseModelMixin): |
||
111 | 111 |
admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True) |
112 | 112 |
admin_name = models.CharField(_(u'admin_name'), max_length=255, blank=True, null=True, help_text=u'核销员名称', db_index=True) |
113 | 113 |
used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=u'维修券核销时间') |
114 |
- is_coupon_admin_writeoff = models.BooleanField(_(u'is_coupon_admin_writeoff'), default=True, help_text=_(u'是否是管理员核销')) |
|
114 |
+ is_coupon_admin_writeoff = models.BooleanField(_(u'is_coupon_admin_writeoff'), default=True, help_text=u'是否是管理员核销') |
|
115 | 115 |
|
116 | 116 |
clerk_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'销售员唯一标识', db_index=True) |
117 | 117 |
clerk_name = models.CharField(_(u'clerk_name'), max_length=32, blank=True, null=True, help_text=u'销售员名称', db_index=True) |
@@ -49,7 +49,7 @@ class SaleclerkIntegralIncomeExpensesInfo(BaseModelMixin): |
||
49 | 49 |
|
50 | 50 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
51 | 51 |
|
52 |
- test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户')) |
|
52 |
+ test_user = models.BooleanField(_(u'test_user'), default=False, help_text=u'是否为测试用户') |
|
53 | 53 |
|
54 | 54 |
class Meta: |
55 | 55 |
verbose_name = _(u'saleclerkintegralincomeexpensesinfo') |
@@ -104,26 +104,26 @@ class SaleclerkSubmitLogInfo(BaseModelMixin): |
||
104 | 104 |
image = models.FileField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') |
105 | 105 |
code_image = models.FileField(_(u'code_image'), upload_to=upload_path, blank=True, null=True, help_text=u'序列号图片') |
106 | 106 |
|
107 |
- has_scan = models.BooleanField(_(u'has_scan'), default=False, help_text=_(u'是否被消费者扫过')) |
|
107 |
+ has_scan = models.BooleanField(_(u'has_scan'), default=False, help_text=u'是否被消费者扫过') |
|
108 | 108 |
|
109 | 109 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
110 | 110 |
|
111 |
- dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交')) |
|
111 |
+ dupload = models.BooleanField(_(u'dupload'), default=False, help_text=u'是否为重复提交') |
|
112 | 112 |
|
113 |
- test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户')) |
|
114 |
- test_sn = models.BooleanField(_(u'test_sn'), default=False, help_text=_(u'是否为测试序列号')) |
|
113 |
+ test_user = models.BooleanField(_(u'test_user'), default=False, help_text=u'是否为测试用户') |
|
114 |
+ test_sn = models.BooleanField(_(u'test_sn'), default=False, help_text=u'是否为测试序列号') |
|
115 | 115 |
|
116 | 116 |
ym = models.IntegerField(_(u'ym'), default=0, help_text=u'年月', db_index=True) # 例:201712, tc.local_string(format='%Y%m') |
117 | 117 |
ymd = models.IntegerField(_(u'ymd'), default=0, help_text=u'年月日', db_index=True) # 例:20171208, tc.local_string(format='%Y%m%d') |
118 | 118 |
|
119 | 119 |
trackingNo = models.CharField(_(u'trackingNo'), max_length=32, blank=True, null=True, help_text=u'快递单号') |
120 | 120 |
|
121 |
- is_wxwork = models.BooleanField(_(u'is_wxwork'), default=False, help_text=_(u'是否为企业微信端')) |
|
121 |
+ is_wxwork = models.BooleanField(_(u'is_wxwork'), default=False, help_text=u'是否为企业微信端') |
|
122 | 122 |
|
123 |
- is_staff_delete = models.BooleanField(_(u'is_staff_delete'), default=False, help_text=_(u'是否管理员删除')) |
|
124 |
- code_version = models.IntegerField(_(u'code_version'), default=1, help_text=_(u'统览码版本'), db_index=True) |
|
123 |
+ is_staff_delete = models.BooleanField(_(u'is_staff_delete'), default=False, help_text=u'是否管理员删除') |
|
124 |
+ code_version = models.IntegerField(_(u'code_version'), default=1, help_text=u'统览码版本', db_index=True) |
|
125 | 125 |
|
126 |
- is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛')) |
|
126 |
+ is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
|
127 | 127 |
|
128 | 128 |
class Meta: |
129 | 129 |
verbose_name = _(u'销售员扫码出库记录') |
@@ -50,6 +50,7 @@ INSTALLED_APPS = ( |
||
50 | 50 |
'django_admin', |
51 | 51 |
'django_rlog', |
52 | 52 |
'django_we', |
53 |
+ 'daterange_filter', |
|
53 | 54 |
'corsheaders', |
54 | 55 |
'simditor', |
55 | 56 |
'api', |
@@ -71,8 +72,8 @@ INSTALLED_APPS = ( |
||
71 | 72 |
'server', |
72 | 73 |
'staff', |
73 | 74 |
'statistic', |
75 |
+ 'tenancy', |
|
74 | 76 |
'website', |
75 |
- 'daterange_filter', |
|
76 | 77 |
) |
77 | 78 |
|
78 | 79 |
INSTALLED_APPS += ('multidomain', ) |
@@ -148,7 +148,7 @@ class ComplementCodeLogInfo(BaseModelMixin): |
||
148 | 148 |
|
149 | 149 |
is_contacted = models.BooleanField(_(u'is_contacted'), default=False, help_text=u'是否已联系用户') |
150 | 150 |
|
151 |
- is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛')) |
|
151 |
+ is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
|
152 | 152 |
|
153 | 153 |
class Meta: |
154 | 154 |
verbose_name = _(u'补码记录') |
@@ -198,8 +198,8 @@ class ComplementCodeLogInfo(BaseModelMixin): |
||
198 | 198 |
class AdministratorLoginLogInfo(BaseModelMixin): |
199 | 199 |
admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员唯一标识') |
200 | 200 |
admin_name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'管理员姓名') |
201 |
- login_ip = models.CharField(_(u'login_ip'), max_length=32, blank=True, null=True, help_text=_(u'登录IP')) |
|
202 |
- login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=_(u'登录时间')) |
|
201 |
+ login_ip = models.CharField(_(u'login_ip'), max_length=32, blank=True, null=True, help_text=u'登录IP') |
|
202 |
+ login_at = models.DateTimeField(_(u'login_at'), blank=True, null=True, help_text=u'登录时间') |
|
203 | 203 |
|
204 | 204 |
@property |
205 | 205 |
def admindata(self): |
@@ -0,0 +1,24 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-11-05 15:16 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('marketcode', '0007_alter_marketcodeinfo_status'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AlterField( |
|
15 |
+ model_name='marketcodeinfo', |
|
16 |
+ name='code_index', |
|
17 |
+ field=models.IntegerField(default=0, help_text='该码在批次中的偏移量', verbose_name='code_index'), |
|
18 |
+ ), |
|
19 |
+ migrations.AlterField( |
|
20 |
+ model_name='marketcodeinfo', |
|
21 |
+ name='code_url', |
|
22 |
+ field=models.CharField(blank=True, db_index=True, help_text='28位普通码字符', max_length=128, null=True, verbose_name='code_url'), |
|
23 |
+ ), |
|
24 |
+ ] |
@@ -11,10 +11,10 @@ class MarketCodeInfo(BaseModelMixin): |
||
11 | 11 |
|
12 | 12 |
lattice = models.CharField(_(u'code'), max_length=361, blank=True, null=True, help_text=u'361 字节的 01 点阵,用于支持生成 19 * 19 的微型码,0 为白,1 为黑') |
13 | 13 |
code = models.CharField(_(u'code'), max_length=16, blank=True, null=True, help_text=u'九位的字符串原始码', db_index=True) |
14 |
- code_index = models.IntegerField(_(u'code_index'), default=0, help_text=u'该码在批次中的偏移量 ') |
|
15 |
- code_url = models.CharField(_(u'code_url'), max_length=128, blank=True, null=True, help_text=u'28位普通码字符 ', db_index=True) |
|
14 |
+ code_index = models.IntegerField(_(u'code_index'), default=0, help_text=u'该码在批次中的偏移量') |
|
15 |
+ code_url = models.CharField(_(u'code_url'), max_length=128, blank=True, null=True, help_text=u'28位普通码字符', db_index=True) |
|
16 | 16 |
|
17 |
- has_used = models.BooleanField(_(u'has_used'), default=False, help_text=_(u'是否已使用')) |
|
17 |
+ has_used = models.BooleanField(_(u'has_used'), default=False, help_text=u'是否已使用') |
|
18 | 18 |
|
19 | 19 |
class Meta: |
20 | 20 |
verbose_name = _(u'一物一码信息') |
@@ -0,0 +1,19 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-11-05 15:16 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('mch', '0063_auto_20210915_1653'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AlterField( |
|
15 |
+ model_name='modelinfo', |
|
16 |
+ name='display', |
|
17 |
+ field=models.BooleanField(default=True, help_text='是否显示', verbose_name='display'), |
|
18 |
+ ), |
|
19 |
+ ] |
@@ -173,15 +173,15 @@ class ModelInfo(BaseModelMixin): |
||
173 | 173 |
|
174 | 174 |
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') |
175 | 175 |
|
176 |
- display = models.BooleanField(_(u'display'), default=True, help_text=_(u'Display')) |
|
176 |
+ display = models.BooleanField(_(u'display'), default=True, help_text=u'是否显示') |
|
177 | 177 |
|
178 |
- is_important = models.BooleanField(_(u'is_important'), default=False, help_text=_(u'是否重要型号')) |
|
178 |
+ is_important = models.BooleanField(_(u'is_important'), default=False, help_text=u'是否重要型号') |
|
179 | 179 |
|
180 | 180 |
shot_type_id = models.CharField(_(u'shot_type_id'), max_length=32, blank=True, null=True, help_text=u'镜头类型唯一标识', db_index=True) |
181 | 181 |
shot_member_integral = models.IntegerField(_(u'shot_member_integral'), default=0, help_text=u'【消费者】镜头会员积分') |
182 | 182 |
shot_member_image = models.ImageField(_(u'shot_member_image'), upload_to=upload_path, blank=True, null=True, help_text=u'镜头会员图片') |
183 | 183 |
shot_member_name = models.CharField(_(u'shot_member_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称') |
184 |
- is_show_shot = models.BooleanField(_(u'is_show_shot'), default=False, help_text=_(u'是否在镜头类型里显示')) |
|
184 |
+ is_show_shot = models.BooleanField(_(u'is_show_shot'), default=False, help_text=u'是否在镜头类型里显示') |
|
185 | 185 |
|
186 | 186 |
class Meta: |
187 | 187 |
verbose_name = _(u'型号信息') |
@@ -340,13 +340,13 @@ class ModelCameraBodyInfo(BaseModelMixin): |
||
340 | 340 |
model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号名称') |
341 | 341 |
model_full_name = models.CharField(_(u'model_full_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称') |
342 | 342 |
model_image = models.ImageField(_(u'model_image'), upload_to=upload_path, blank=True, null=True, help_text=u'镜头图片') |
343 |
- is_important = models.BooleanField(_(u'is_important'), default=False, help_text=_(u'是否重要型号')) |
|
343 |
+ is_important = models.BooleanField(_(u'is_important'), default=False, help_text=u'是否重要型号') |
|
344 | 344 |
|
345 | 345 |
camera_brand_name = models.CharField(_(u'camera_brand_name'), max_length=255, blank=True, null=True, help_text=u'机身品牌') |
346 | 346 |
camera_name = models.CharField(_(u'camera_name'), max_length=255, blank=True, null=True, help_text=u'机身名称') |
347 | 347 |
camera_image = models.ImageField(_(u'camera_image'), upload_to=upload_path, blank=True, null=True, help_text=u'机身图片') |
348 | 348 |
camera_market_time = models.DateField(_(u'camera_market_time'), blank=True, null=True, help_text=u'机身上市日期') |
349 |
- is_ILDC = models.BooleanField(_(u'is_ILDC'), default=False, help_text=_(u'是否需要原厂转接环')) |
|
349 |
+ is_ILDC = models.BooleanField(_(u'is_ILDC'), default=False, help_text=u'是否需要原厂转接环') |
|
350 | 350 |
remark = models.CharField(_(u'remark'), max_length=255, blank=True, null=True, help_text=u'备注') |
351 | 351 |
|
352 | 352 |
class Meta: |
@@ -492,11 +492,11 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin): |
||
492 | 492 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED, help_text=u'用户状态', db_index=True) |
493 | 493 |
refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因') |
494 | 494 |
|
495 |
- is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=_(u'是否已授权')) |
|
495 |
+ is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=u'是否已授权') |
|
496 | 496 |
|
497 |
- test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户')) |
|
497 |
+ test_user = models.BooleanField(_(u'test_user'), default=False, help_text=u'是否为测试用户') |
|
498 | 498 |
|
499 |
- is_online_sales = models.BooleanField(_(u'is_online_sales'), default=False, help_text=_(u'是否为网销')) |
|
499 |
+ is_online_sales = models.BooleanField(_(u'is_online_sales'), default=False, help_text=u'是否为网销') |
|
500 | 500 |
|
501 | 501 |
class Meta: |
502 | 502 |
verbose_name = _(u'经销商销售员信息') |
@@ -695,15 +695,15 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
695 | 695 |
|
696 | 696 |
verifyResult = models.IntegerField(_(u'verifyResult'), default=0, help_text=u'验证结果', db_index=True) |
697 | 697 |
|
698 |
- dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交')) |
|
698 |
+ dupload = models.BooleanField(_(u'dupload'), default=False, help_text=u'是否为重复提交') |
|
699 | 699 |
|
700 |
- submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=_(u'是否为活动期间上传')) |
|
701 |
- activity_id = models.IntegerField(_(u'activity_id'), default=0, help_text=_(u'活动唯一标识')) |
|
702 |
- coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间')) |
|
703 |
- coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)')) |
|
704 |
- has_used = models.BooleanField(_(u'has_used'), default=False, help_text=_(u'是否已核销')) |
|
700 |
+ submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=u'是否为活动期间上传') |
|
701 |
+ activity_id = models.IntegerField(_(u'activity_id'), default=0, help_text=u'活动唯一标识') |
|
702 |
+ coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=u'维修券过期时间') |
|
703 |
+ coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=u'维修券金额(单位:分)') |
|
704 |
+ has_used = models.BooleanField(_(u'has_used'), default=False, help_text=u'是否已核销') |
|
705 | 705 |
admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True) |
706 |
- used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=_(u'维修券核销时间')) |
|
706 |
+ used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=u'维修券核销时间') |
|
707 | 707 |
|
708 | 708 |
code_version = models.IntegerField(_(u'code_version'), default=1, help_text=u'统览码版本', db_index=True) |
709 | 709 |
|
@@ -714,7 +714,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
714 | 714 |
|
715 | 715 |
province = models.CharField(_(u'province'), max_length=32, blank=True, null=True, help_text=u'省份', db_index=True) |
716 | 716 |
|
717 |
- test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户')) |
|
717 |
+ test_user = models.BooleanField(_(u'test_user'), default=False, help_text=u'是否为测试用户') |
|
718 | 718 |
|
719 | 719 |
class Meta: |
720 | 720 |
verbose_name = _(u'消费者信息提交记录') |
@@ -813,15 +813,15 @@ class ActivityInfo(BaseModelMixin): |
||
813 | 813 |
|
814 | 814 |
model_uni_names = JSONField(_(u'model_uni_names'), default=[], blank=True, null=True, help_text=u'型号统一名称列表') |
815 | 815 |
|
816 |
- start_at = models.DateTimeField(_(u'start_at'), help_text=_(u'start_at')) |
|
817 |
- end_at = models.DateTimeField(_(u'end_at'), help_text=_(u'end_at')) |
|
816 |
+ start_at = models.DateTimeField(_(u'start_at'), help_text=u'start_at') |
|
817 |
+ end_at = models.DateTimeField(_(u'end_at'), help_text=u'end_at') |
|
818 | 818 |
|
819 | 819 |
coupon_id = models.CharField(_(u'coupon_id'), max_length=32, blank=True, null=True, help_text=u'券唯一标识', db_index=True) |
820 | 820 |
|
821 |
- coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=_(u'维修券类型')) |
|
822 |
- coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'维修券有效时间(单位:天)')) |
|
823 |
- coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间')) |
|
824 |
- coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)')) |
|
821 |
+ coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=u'维修券类型') |
|
822 |
+ coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=u'维修券有效时间(单位:天)') |
|
823 |
+ coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=u'维修券过期时间') |
|
824 |
+ coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=u'维修券金额(单位:分)') |
|
825 | 825 |
|
826 | 826 |
class Meta: |
827 | 827 |
verbose_name = _(u'活动信息') |
@@ -50,7 +50,7 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin): |
||
50 | 50 |
|
51 | 51 |
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True) |
52 | 52 |
|
53 |
- is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛')) |
|
53 |
+ is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
|
54 | 54 |
|
55 | 55 |
class Meta: |
56 | 56 |
verbose_name = _(u'会员商品信息') |
@@ -238,14 +238,14 @@ class RightInfo(BaseModelMixin, BrandInfoMixin): |
||
238 | 238 |
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True) |
239 | 239 |
|
240 | 240 |
# 券相关 |
241 |
- is_send_coupon = models.BooleanField(_(u'is_send_coupon'), default=False, help_text=_(u'是否发券')) |
|
242 |
- is_continue_send_coupon = models.BooleanField(_(u'is_continue_send_coupon'), default=False, help_text=_(u'是否持续发券')) |
|
243 |
- coupon_num = models.IntegerField(_(u'coupon_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
244 |
- coupon_level1_num = models.IntegerField(_(u'coupon_level1_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
245 |
- coupon_level2_num = models.IntegerField(_(u'coupon_level2_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
246 |
- coupon_level3_num = models.IntegerField(_(u'coupon_level3_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
247 |
- coupon_level4_num = models.IntegerField(_(u'coupon_level4_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
248 |
- coupon_level5_num = models.IntegerField(_(u'coupon_level5_num'), default=0, help_text=_(u'券每会员级别发放张数')) |
|
241 |
+ is_send_coupon = models.BooleanField(_(u'is_send_coupon'), default=False, help_text=u'是否发券') |
|
242 |
+ is_continue_send_coupon = models.BooleanField(_(u'is_continue_send_coupon'), default=False, help_text=u'是否持续发券') |
|
243 |
+ coupon_num = models.IntegerField(_(u'coupon_num'), default=0, help_text=u'券每会员级别发放张数') |
|
244 |
+ coupon_level1_num = models.IntegerField(_(u'coupon_level1_num'), default=0, help_text=u'券每会员级别发放张数') |
|
245 |
+ coupon_level2_num = models.IntegerField(_(u'coupon_level2_num'), default=0, help_text=u'券每会员级别发放张数') |
|
246 |
+ coupon_level3_num = models.IntegerField(_(u'coupon_level3_num'), default=0, help_text=u'券每会员级别发放张数') |
|
247 |
+ coupon_level4_num = models.IntegerField(_(u'coupon_level4_num'), default=0, help_text=u'券每会员级别发放张数') |
|
248 |
+ coupon_level5_num = models.IntegerField(_(u'coupon_level5_num'), default=0, help_text=u'券每会员级别发放张数') |
|
249 | 249 |
coupon_level1_id = models.CharField(_(u'coupon_level1_id'), max_length=32, blank=True, null=True, help_text=u'券唯一标识', db_index=True) |
250 | 250 |
coupon_level2_id = models.CharField(_(u'coupon_level2_id'), max_length=32, blank=True, null=True, help_text=u'券唯一标识', db_index=True) |
251 | 251 |
coupon_level3_id = models.CharField(_(u'coupon_level3_id'), max_length=32, blank=True, null=True, help_text=u'券唯一标识', db_index=True) |
@@ -387,7 +387,7 @@ class MemberActivityInfo(BaseModelMixin, BrandInfoMixin): |
||
387 | 387 |
|
388 | 388 |
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True) |
389 | 389 |
|
390 |
- is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛')) |
|
390 |
+ is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
|
391 | 391 |
|
392 | 392 |
class Meta: |
393 | 393 |
verbose_name = _(u'会员活动信息') |
@@ -788,10 +788,10 @@ class MemberActivityContributionWelfareInfo(BaseModelMixin, BrandInfoMixin): |
||
788 | 788 |
welfare_type = models.IntegerField(_(u'welfare_type'), choices=WELFARE_TYPE, default=0, help_text=u'福利类型', db_index=True) |
789 | 789 |
welfare_title = models.CharField(_(u'welfare_title'), max_length=255, blank=True, null=True, help_text=u'福利标题') |
790 | 790 |
welfare_detail = RichTextField(_(u'welfare_detail'), blank=True, null=True, help_text=u'福利详情') |
791 |
- welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=_(u'福利数量')) |
|
791 |
+ welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=u'福利数量') |
|
792 | 792 |
welfare_image = models.ImageField(_(u'welfare_image'), upload_to=upload_path, blank=True, null=True, help_text=u'福利图片') |
793 | 793 |
|
794 |
- is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=_(u'是否已上传七牛')) |
|
794 |
+ is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛') |
|
795 | 795 |
|
796 | 796 |
class Meta: |
797 | 797 |
verbose_name = _(u'会员活动投稿福利信息') |
@@ -844,7 +844,7 @@ class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMi |
||
844 | 844 |
|
845 | 845 |
welfare_id = models.CharField(_(u'welfare_id'), max_length=32, blank=True, null=True, help_text=u'福利唯一标识', db_index=True) |
846 | 846 |
welfare_type = models.IntegerField(_(u'welfare_type'), choices=WELFARE_TYPE, default=0, help_text=u'福利类型', db_index=True) |
847 |
- welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=_(u'福利数量')) |
|
847 |
+ welfare_value = models.IntegerField(_(u'welfare_value'), default=0, help_text=u'福利数量') |
|
848 | 848 |
|
849 | 849 |
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名') |
850 | 850 |
phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话') |
@@ -852,7 +852,7 @@ class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMi |
||
852 | 852 |
|
853 | 853 |
tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号') |
854 | 854 |
|
855 |
- is_handled = models.BooleanField(_(u'is_handled'), default=False, help_text=_(u'是否已处理')) |
|
855 |
+ is_handled = models.BooleanField(_(u'is_handled'), default=False, help_text=u'是否已处理') |
|
856 | 856 |
|
857 | 857 |
class Meta: |
858 | 858 |
verbose_name = _(u'会员活动投稿福利解锁信息') |
@@ -39,9 +39,9 @@ class SalesResponsibilityInfo(BaseModelMixin): |
||
39 | 39 |
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS_TUPLE, default=UNVERIFIED, help_text=u'用户状态', db_index=True) |
40 | 40 |
refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因') |
41 | 41 |
|
42 |
- is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=_(u'是否已授权')) |
|
42 |
+ is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=u'是否已授权') |
|
43 | 43 |
|
44 |
- is_super = models.BooleanField(_(u'is_super'), default=False, help_text=_(u'是否超级销售担当')) |
|
44 |
+ is_super = models.BooleanField(_(u'is_super'), default=False, help_text=u'是否超级销售担当') |
|
45 | 45 |
|
46 | 46 |
class Meta: |
47 | 47 |
verbose_name = _(u'销售担当信息') |
@@ -91,7 +91,7 @@ class SalesResponsibilityInfoModelsSaleStatisticInfo(BaseModelMixin): |
||
91 | 91 |
# 型号 |
92 | 92 |
model_id = models.CharField(_(u'model_id'), max_length=32, help_text=u'型号唯一标识', db_index=True) |
93 | 93 |
model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称', db_index=True) |
94 |
- is_important = models.BooleanField(_(u'is_important'), default=True, help_text=_(u'是否重要型号')) |
|
94 |
+ is_important = models.BooleanField(_(u'is_important'), default=True, help_text=u'是否重要型号') |
|
95 | 95 |
|
96 | 96 |
ymd = models.IntegerField(_(u'ymd'), default=0, help_text=u'年月日', db_index=True) # 例:20171208, tc.local_string(format='%Y%m%d'), 0 为全部 |
97 | 97 |
|
@@ -0,0 +1,18 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from django.contrib import admin |
|
4 |
+ |
|
5 |
+from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class TenancyShotInfoAdmin(admin.ModelAdmin): |
|
9 |
+ list_display = ('shot_id', 'model_name', 'sn', 'fittings_type', 'tenancy_status', 'status', 'created_at', 'updated_at') |
|
10 |
+ list_filter = ('fittings_type', 'tenancy_status', 'status') |
|
11 |
+ |
|
12 |
+ |
|
13 |
+class TenancyShotRequestInfoAdmin(admin.ModelAdmin): |
|
14 |
+ list_display = ('request_id', 'shot_id', 'user_id', 'identity_card_number', 'identity_card_name', 'name', 'phone', 'location', 'postcode', 'purpose', 'return_date', 'express_name', 'express_com', 'tracking_number', 'tracking_signed', 'back_express_name', 'back_express_com', 'back_tracking_number', 'back_tracking_signed', 'audit_status', 'request_status', 'status', 'created_at', 'updated_at') |
|
15 |
+ |
|
16 |
+ |
|
17 |
+admin.site.register(TenancyShotInfo, TenancyShotInfoAdmin) |
|
18 |
+admin.site.register(TenancyShotRequestInfo, TenancyShotRequestInfoAdmin) |
@@ -0,0 +1,8 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.apps import AppConfig |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class TenancyConfig(AppConfig): |
|
8 |
+ name = 'tenancy' |
@@ -0,0 +1,71 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-11-05 14:52 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+import jsonfield.fields |
|
6 |
+import shortuuidfield.fields |
|
7 |
+ |
|
8 |
+ |
|
9 |
+class Migration(migrations.Migration): |
|
10 |
+ |
|
11 |
+ initial = True |
|
12 |
+ |
|
13 |
+ dependencies = [ |
|
14 |
+ ] |
|
15 |
+ |
|
16 |
+ operations = [ |
|
17 |
+ migrations.CreateModel( |
|
18 |
+ name='TenancyShotInfo', |
|
19 |
+ fields=[ |
|
20 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
21 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), |
|
22 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
23 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
24 |
+ ('shot_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='镜头唯一标识', max_length=22, null=True, unique=True)), |
|
25 |
+ ('model_name', models.CharField(blank=True, help_text='型号名称', max_length=255, null=True, verbose_name='model_name')), |
|
26 |
+ ('sn', models.CharField(blank=True, db_index=True, help_text='序列号', max_length=32, null=True, verbose_name='sn')), |
|
27 |
+ ('fittings_type', models.IntegerField(choices=[(0, '前盖'), (1, '后盖'), (2, '遮光罩'), (3, '脚架环'), (4, '外观性能')], default=0, help_text='配件类型', verbose_name='fittings_type')), |
|
28 |
+ ('tenancy_status', models.IntegerField(choices=[(0, '未租'), (1, '已租')], default=0, help_text='租借状态', verbose_name='tenancy_status')), |
|
29 |
+ ], |
|
30 |
+ options={ |
|
31 |
+ 'verbose_name': '租赁镜头信息', |
|
32 |
+ 'verbose_name_plural': '租赁镜头信息', |
|
33 |
+ }, |
|
34 |
+ ), |
|
35 |
+ migrations.CreateModel( |
|
36 |
+ name='TenancyShotRequestInfo', |
|
37 |
+ fields=[ |
|
38 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
39 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), |
|
40 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
41 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
42 |
+ ('request_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='申请唯一标识', max_length=22, null=True, unique=True)), |
|
43 |
+ ('shot_id', models.CharField(blank=True, db_index=True, help_text='镜头唯一标识', max_length=32, null=True, verbose_name='shot_id')), |
|
44 |
+ ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')), |
|
45 |
+ ('name', models.CharField(blank=True, help_text='姓名', max_length=255, null=True, verbose_name='name')), |
|
46 |
+ ('phone', models.CharField(blank=True, help_text='电话', max_length=11, null=True, verbose_name='phone')), |
|
47 |
+ ('location', models.CharField(blank=True, help_text='用户地址', max_length=255, null=True, verbose_name='location')), |
|
48 |
+ ('postcode', models.CharField(blank=True, help_text='用户邮政编码', max_length=255, null=True, verbose_name='postcode')), |
|
49 |
+ ('purpose', models.CharField(blank=True, help_text='用途', max_length=255, null=True, verbose_name='purpose')), |
|
50 |
+ ('return_date', models.DateField(blank=True, help_text='预定归还日期', null=True, verbose_name='return_date')), |
|
51 |
+ ('express_name', models.CharField(blank=True, help_text='快递公司', max_length=255, null=True, verbose_name='express_name')), |
|
52 |
+ ('express_com', models.CharField(blank=True, help_text='快递编码', max_length=255, null=True, verbose_name='express_com')), |
|
53 |
+ ('tracking_number', models.CharField(blank=True, help_text='快递单号', max_length=255, null=True, verbose_name='tracking_number')), |
|
54 |
+ ('tracking_info', jsonfield.fields.JSONField(blank=True, default={}, help_text='快递信息', null=True, verbose_name='tracking_info')), |
|
55 |
+ ('tracking_signed', models.BooleanField(default=False, help_text='快递是否已签收', verbose_name='tracking_signed')), |
|
56 |
+ ('tracking_signed_images', jsonfield.fields.JSONField(blank=True, default=[], help_text='快递签收图片列表', null=True, verbose_name='tracking_signed_images')), |
|
57 |
+ ('back_express_name', models.CharField(blank=True, help_text='寄回快递公司', max_length=255, null=True, verbose_name='back_express_name')), |
|
58 |
+ ('back_express_com', models.CharField(blank=True, help_text='寄回快递编码', max_length=255, null=True, verbose_name='back_express_com')), |
|
59 |
+ ('back_tracking_number', models.CharField(blank=True, help_text='寄回快递单号', max_length=255, null=True, verbose_name='back_tracking_number')), |
|
60 |
+ ('back_tracking_info', jsonfield.fields.JSONField(blank=True, default={}, help_text='寄回快递信息', null=True, verbose_name='back_tracking_info')), |
|
61 |
+ ('back_tracking_signed', models.BooleanField(default=False, help_text='寄回快递是否已签收', verbose_name='back_tracking_signed')), |
|
62 |
+ ('audit_status', models.IntegerField(choices=[(0, '未审批'), (1, '已通过'), (2, '未通过')], db_index=True, default=0, help_text='审批状态', verbose_name='audit_status')), |
|
63 |
+ ('request_status', models.CharField(default='', help_text='租借申请状态', max_length=16, verbose_name='request_status')), |
|
64 |
+ ('request_status_at', jsonfield.fields.JSONField(blank=True, default={}, help_text='租借申请状态变更时间', null=True, verbose_name='request_status_at')), |
|
65 |
+ ], |
|
66 |
+ options={ |
|
67 |
+ 'verbose_name': '租赁镜头申请信息', |
|
68 |
+ 'verbose_name_plural': '租赁镜头申请信息', |
|
69 |
+ }, |
|
70 |
+ ), |
|
71 |
+ ] |
@@ -0,0 +1,34 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 3.2.16 on 2022-11-05 15:23 |
|
3 |
+ |
|
4 |
+from django.db import migrations, models |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('tenancy', '0001_initial'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AddField( |
|
15 |
+ model_name='tenancyshotrequestinfo', |
|
16 |
+ name='identity_card_name', |
|
17 |
+ field=models.CharField(blank=True, help_text='身份证姓名', max_length=32, null=True, verbose_name='identity_card_name'), |
|
18 |
+ ), |
|
19 |
+ migrations.AddField( |
|
20 |
+ model_name='tenancyshotrequestinfo', |
|
21 |
+ name='identity_card_number', |
|
22 |
+ field=models.CharField(blank=True, help_text='身份证号', max_length=32, null=True, verbose_name='identity_card_number'), |
|
23 |
+ ), |
|
24 |
+ migrations.AlterField( |
|
25 |
+ model_name='tenancyshotrequestinfo', |
|
26 |
+ name='name', |
|
27 |
+ field=models.CharField(blank=True, help_text='用户姓名', max_length=255, null=True, verbose_name='name'), |
|
28 |
+ ), |
|
29 |
+ migrations.AlterField( |
|
30 |
+ model_name='tenancyshotrequestinfo', |
|
31 |
+ name='phone', |
|
32 |
+ field=models.CharField(blank=True, help_text='用户电话', max_length=11, null=True, verbose_name='phone'), |
|
33 |
+ ), |
|
34 |
+ ] |
@@ -0,0 +1,142 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from django.db import models |
|
4 |
+from django.utils.translation import ugettext_lazy as _ |
|
5 |
+from django_models_ext import BaseModelMixin |
|
6 |
+from jsonfield import JSONField |
|
7 |
+from shortuuidfield import ShortUUIDField |
|
8 |
+from TimeConvert import TimeConvert as tc |
|
9 |
+ |
|
10 |
+from mch.models import ModelInfo |
|
11 |
+ |
|
12 |
+ |
|
13 |
+class TenancyShotInfo(BaseModelMixin): |
|
14 |
+ FITTINGS_TYPE = ( |
|
15 |
+ (0, u'前盖'), |
|
16 |
+ (1, u'后盖'), |
|
17 |
+ (2, u'遮光罩'), |
|
18 |
+ (3, u'脚架环'), |
|
19 |
+ (4, u'外观性能'), |
|
20 |
+ ) |
|
21 |
+ |
|
22 |
+ TENANCY_STATUS = ( |
|
23 |
+ (0, u'未租'), |
|
24 |
+ (1, u'已租'), |
|
25 |
+ ) |
|
26 |
+ |
|
27 |
+ shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True, unique=True) |
|
28 |
+ model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') |
|
29 |
+ sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True) |
|
30 |
+ fittings_type = models.IntegerField(_(u'fittings_type'), choices=FITTINGS_TYPE, default=0, help_text=u'配件类型') |
|
31 |
+ tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态') |
|
32 |
+ |
|
33 |
+ class Meta: |
|
34 |
+ verbose_name = _(u'租赁镜头信息') |
|
35 |
+ verbose_name_plural = _(u'租赁镜头信息') |
|
36 |
+ |
|
37 |
+ def __unicode__(self): |
|
38 |
+ return '%d' % self.pk |
|
39 |
+ |
|
40 |
+ @property |
|
41 |
+ def data(self): |
|
42 |
+ return { |
|
43 |
+ 'shot_id': self.shot_id, |
|
44 |
+ 'model_name': self.model_name, |
|
45 |
+ 'sn': self.sn, |
|
46 |
+ 'fittings_type': self.fittings_type, |
|
47 |
+ 'fittings_type_str': dict(TenancyShotInfo.FITTINGS_TYPE).get(self.fittings_type), |
|
48 |
+ 'tenancy_status': self.tenancy_status, |
|
49 |
+ 'tenancy_status_str': dict(TenancyShotInfo.TENANCY_STATUS).get(self.tenancy_status), |
|
50 |
+ 'created_at': tc.local_string(utc_dt=self.created_at), |
|
51 |
+ } |
|
52 |
+ |
|
53 |
+ |
|
54 |
+class TenancyShotRequestInfo(BaseModelMixin): |
|
55 |
+ AUDIT_PASS = 1 |
|
56 |
+ AUDIT_STATUS = ( |
|
57 |
+ (0, u'未审批'), |
|
58 |
+ (1, u'已通过'), |
|
59 |
+ (2, u'未通过'), |
|
60 |
+ ) |
|
61 |
+ |
|
62 |
+ request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True) |
|
63 |
+ shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True) |
|
64 |
+ |
|
65 |
+ user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
66 |
+ |
|
67 |
+ # 身份证信息 |
|
68 |
+ identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号') |
|
69 |
+ identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名') |
|
70 |
+ |
|
71 |
+ # 邮寄信息 |
|
72 |
+ name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名') |
|
73 |
+ phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话') |
|
74 |
+ location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址') |
|
75 |
+ postcode = models.CharField(_(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码') |
|
76 |
+ |
|
77 |
+ # 租赁信息 |
|
78 |
+ purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途') |
|
79 |
+ return_date = models.DateField(_(u'return_date'), blank=True, null=True, help_text=u'预定归还日期') |
|
80 |
+ |
|
81 |
+ # 公司 =》 用户 |
|
82 |
+ express_name = models.CharField(_(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司') |
|
83 |
+ express_com = models.CharField(_(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码') |
|
84 |
+ tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号') |
|
85 |
+ tracking_info = JSONField(_(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息') |
|
86 |
+ tracking_signed = models.BooleanField(_(u'tracking_signed'), default=False, help_text=u'快递是否已签收') |
|
87 |
+ tracking_signed_images = JSONField(_(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表') |
|
88 |
+ |
|
89 |
+ # 用户 =》 公司 |
|
90 |
+ back_express_name = models.CharField(_(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司') |
|
91 |
+ back_express_com = models.CharField(_(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码') |
|
92 |
+ back_tracking_number = models.CharField(_(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号') |
|
93 |
+ back_tracking_info = JSONField(_(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息') |
|
94 |
+ back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收') |
|
95 |
+ |
|
96 |
+ audit_status = models.IntegerField(_(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True) |
|
97 |
+ # REQUEST_STATUS = ( |
|
98 |
+ # (0, u'寄出'), |
|
99 |
+ # (1, u'寄出已签收'), |
|
100 |
+ # (2, u'寄回'), |
|
101 |
+ # (3, u'寄回已签收并检查无损坏'), |
|
102 |
+ # ) |
|
103 |
+ # request_status = models.IntegerField(_(u'request_status'), choices=REQUEST_STATUS, default=0, help_text=u'租借申请状态') |
|
104 |
+ request_status = models.CharField(_(u'request_status'), max_length=16, default='', help_text=u'租借申请状态') |
|
105 |
+ request_status_at = JSONField(_(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间') |
|
106 |
+ |
|
107 |
+ class Meta: |
|
108 |
+ verbose_name = _(u'租赁镜头申请信息') |
|
109 |
+ verbose_name_plural = _(u'租赁镜头申请信息') |
|
110 |
+ |
|
111 |
+ def __unicode__(self): |
|
112 |
+ return '%d' % self.pk |
|
113 |
+ |
|
114 |
+ @property |
|
115 |
+ def data(self): |
|
116 |
+ return { |
|
117 |
+ 'request_id': self.request_id, |
|
118 |
+ 'shot_id': self.shot_id, |
|
119 |
+ 'user_id': self.user_id, |
|
120 |
+ 'name': self.name, |
|
121 |
+ 'phone': self.phone, |
|
122 |
+ 'location': self.location, |
|
123 |
+ 'postcode': self.postcode, |
|
124 |
+ 'purpose': self.purpose, |
|
125 |
+ 'return_date': tc.local_date_string(self.return_date), |
|
126 |
+ 'express_name': self.express_name, |
|
127 |
+ 'express_com': self.express_com, |
|
128 |
+ 'tracking_number': self.tracking_number, |
|
129 |
+ 'tracking_info': self.tracking_info, |
|
130 |
+ 'tracking_signed': self.tracking_signed, |
|
131 |
+ 'tracking_signed_images': self.tracking_signed_images, |
|
132 |
+ 'back_express_name': self.back_express_name, |
|
133 |
+ 'back_express_com': self.back_express_com, |
|
134 |
+ 'back_tracking_number': self.back_tracking_number, |
|
135 |
+ 'back_tracking_info': self.back_tracking_info, |
|
136 |
+ 'back_tracking_signed': self.back_tracking_signed, |
|
137 |
+ 'audit_status': self.audit_status, |
|
138 |
+ 'request_status': self.request_status, |
|
139 |
+ 'request_status_at': {k: tc.local_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()}, |
|
140 |
+ 'created_at': tc.local_string(utc_dt=self.created_at), |
|
141 |
+ 'updated_at': tc.local_string(utc_dt=self.updated_at), |
|
142 |
+ } |
@@ -0,0 +1,7 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.test import TestCase |
|
5 |
+ |
|
6 |
+ |
|
7 |
+# Create your tests here. |
@@ -0,0 +1,7 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.shortcuts import render |
|
5 |
+ |
|
6 |
+ |
|
7 |
+# Create your views here. |