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