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