5de1653e7091eeb430dc867f1334363e0951f4fR502">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.

kodosale - Gogs: Go Git Service

Нет описания

huangqimin: 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
..
migrations 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
static 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
__init__.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
admin.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
apps.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
models.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
tests.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
views.py 9e28f52376 :tada: Initial лет %!s(int64=6): %!d(string=назад)
adminSystem - Gogs: Go Git Service

No Description

LICENSE 1.1KB

    The MIT License (MIT) Copyright (c) 2015-2017, Jon Schlinkert. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.