:art: Models update for tenancy

huangqimin001 2 年 前
コミット
28f8bc3cb9

+ 24 - 0
account/migrations/0057_auto_20221105_2316.py

@@ -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
+    ]

+ 20 - 16
account/models.py

@@ -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')

+ 9 - 9
coupon/models.py

@@ -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)

+ 9 - 9
integral/models.py

@@ -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'销售员扫码出库记录')

+ 2 - 1
kodo/settings.py

@@ -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', )

+ 3 - 3
logs/models.py

@@ -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):

+ 24 - 0
marketcode/migrations/0008_auto_20221105_2316.py

@@ -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
+    ]

+ 3 - 3
marketcode/models.py

@@ -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'一物一码信息')

+ 19 - 0
mch/migrations/0064_alter_modelinfo_display.py

@@ -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
+    ]

+ 22 - 22
mch/models.py

@@ -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'活动信息')

+ 14 - 14
member/models.py

@@ -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'会员活动投稿福利解锁信息')

+ 3 - 3
sales/models.py

@@ -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
tenancy/__init__.py


+ 18 - 0
tenancy/admin.py

@@ -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)

+ 8 - 0
tenancy/apps.py

@@ -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'

+ 71 - 0
tenancy/migrations/0001_initial.py

@@ -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
+    ]

+ 34 - 0
tenancy/migrations/0002_auto_20221105_2323.py

@@ -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
tenancy/migrations/__init__.py


+ 142 - 0
tenancy/models.py

@@ -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
+        }

+ 7 - 0
tenancy/tests.py

@@ -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.

+ 7 - 0
tenancy/views.py

@@ -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.