No Description

models.py 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. # -*- coding: utf-8 -*-
  2. from django.db import models
  3. from django.utils.translation import ugettext_lazy as _
  4. from django_models_ext import BaseModelMixin
  5. from jsonfield import JSONField
  6. from shortuuidfield import ShortUUIDField
  7. from TimeConvert import TimeConvert as tc
  8. from mch.models import AdministratorInfo, ModelInfo
  9. class TenancyShotInfo(BaseModelMixin):
  10. TENANCY_STATUS = (
  11. (0, u'未租'),
  12. (1, u'已租'),
  13. )
  14. admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
  15. shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True, unique=True)
  16. model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
  17. model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
  18. sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)
  19. front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
  20. rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
  21. lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
  22. tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
  23. appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
  24. tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')
  25. class Meta:
  26. verbose_name = _(u'租赁镜头信息')
  27. verbose_name_plural = _(u'租赁镜头信息')
  28. def __unicode__(self):
  29. return '%d' % self.pk
  30. @property
  31. def data(self):
  32. try:
  33. model = ModelInfo.objects.get(model_id=self.model_id, status=True)
  34. except ModelInfo.DoesNotExist:
  35. model = None
  36. return {
  37. 'shot_id': self.shot_id,
  38. 'model_id': self.model_id,
  39. 'model_info': model.admindata if model else {},
  40. 'sn': self.sn,
  41. 'front_cap_status': self.front_cap_status,
  42. 'rear_cap_status': self.rear_cap_status,
  43. 'lens_hood_status': self.lens_hood_status,
  44. 'tripod_ring_status': self.tripod_ring_status,
  45. 'appearance_performance_status': self.appearance_performance_status,
  46. 'tenancy_status': self.tenancy_status,
  47. 'tenancy_status_str': dict(TenancyShotInfo.TENANCY_STATUS).get(self.tenancy_status),
  48. 'created_at': tc.local_string(utc_dt=self.created_at),
  49. }
  50. class TenancyShotRequestInfo(BaseModelMixin):
  51. TENANCY_TRACKING_SEND = u'寄出运送中'
  52. TENANCY_TRACKING_SEND_SIGNED = u'寄出签收'
  53. TENANCY_TRACKING_BACK = u'寄回运送中'
  54. TENANCY_TRACKING_BACK_SIGNED = u'寄回签收'
  55. AUDIT_PASS = 1
  56. AUDIT_STATUS = (
  57. (0, u'未审批'),
  58. (1, u'已通过'),
  59. (2, u'未通过'),
  60. )
  61. request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True)
  62. admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)
  63. shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)
  64. model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)
  65. user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
  66. # 镜头配件信息
  67. front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')
  68. rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')
  69. lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')
  70. tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')
  71. appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')
  72. # 身份证信息
  73. identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')
  74. identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')
  75. # 邮寄信息
  76. name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')
  77. phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话')
  78. location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')
  79. postcode = models.CharField(_(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码')
  80. # 租赁信息
  81. purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途')
  82. return_date = models.DateField(_(u'return_date'), blank=True, null=True, help_text=u'预定归还日期')
  83. # 公司 =》 用户
  84. express_name = models.CharField(_(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司')
  85. express_com = models.CharField(_(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码')
  86. tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号')
  87. tracking_info = JSONField(_(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息')
  88. tracking_signed = models.BooleanField(_(u'tracking_signed'), default=False, help_text=u'快递是否已签收')
  89. tracking_signed_images = JSONField(_(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表')
  90. # 用户 =》 公司
  91. back_express_name = models.CharField(_(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司')
  92. back_express_com = models.CharField(_(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码')
  93. back_tracking_number = models.CharField(_(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号')
  94. back_tracking_info = JSONField(_(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息')
  95. back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')
  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. remark = models.CharField(_(u'remark'), max_length=256, default='', help_text=u'备注')
  107. class Meta:
  108. verbose_name = _(u'租赁镜头申请信息')
  109. verbose_name_plural = _(u'租赁镜头申请信息')
  110. def __unicode__(self):
  111. return '%d' % self.pk
  112. @property
  113. def data(self):
  114. try:
  115. shot = TenancyShotInfo.objects.get(shot_id=self.shot_id)
  116. except TenancyShotInfo.DoesNotExist:
  117. shot = None
  118. try:
  119. model = ModelInfo.objects.get(model_id=self.model_id, status=True)
  120. except ModelInfo.DoesNotExist:
  121. model = None
  122. return {
  123. 'req_id': self.request_id,
  124. 'request_id': self.request_id,
  125. 'shot_id': self.shot_id,
  126. 'model_info': model.admindata,
  127. 'shot_info': shot.data if shot else {},
  128. 'front_cap_status': self.front_cap_status,
  129. 'rear_cap_status': self.rear_cap_status,
  130. 'lens_hood_status': self.lens_hood_status,
  131. 'tripod_ring_status': self.tripod_ring_status,
  132. 'appearance_performance_status': self.appearance_performance_status,
  133. 'front_cap_status': self.front_cap_status,
  134. 'rear_cap_status': self.rear_cap_status,
  135. 'lens_hood_status': self.lens_hood_status,
  136. 'tripod_ring_status': self.tripod_ring_status,
  137. 'appearance_performance_status': self.appearance_performance_status,
  138. 'user_id': self.user_id,
  139. 'name': self.name,
  140. 'phone': self.phone,
  141. 'location': self.location,
  142. 'postcode': self.postcode,
  143. 'purpose': self.purpose,
  144. 'return_date': tc.local_date_string(self.return_date),
  145. 'express_name': self.express_name,
  146. 'express_com': self.express_com,
  147. 'tracking_number': self.tracking_number,
  148. 'tracking_info': self.tracking_info,
  149. 'tracking_signed': self.tracking_signed,
  150. 'tracking_signed_images': self.tracking_signed_images,
  151. 'back_express_name': self.back_express_name,
  152. 'back_express_com': self.back_express_com,
  153. 'back_tracking_number': self.back_tracking_number,
  154. 'back_tracking_info': self.back_tracking_info,
  155. 'back_tracking_signed': self.back_tracking_signed,
  156. 'audit_status': self.audit_status,
  157. 'request_status': self.request_status,
  158. 'request_status_at': {k: tc.local_date_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()},
  159. 'created_at': tc.local_date_string(utc_dt=self.created_at),
  160. 'remark': self.remark,
  161. }
  162. @property
  163. def admindata(self):
  164. try:
  165. admin = AdministratorInfo.objects.get(admin_id=self.admin_id)
  166. except AdministratorInfo.DoesNotExist:
  167. admin = None
  168. try:
  169. shot = TenancyShotInfo.objects.get(shot_id=self.shot_id, status=True)
  170. except TenancyShotInfo.DoesNotExist:
  171. shot = None
  172. try:
  173. model = ModelInfo.objects.get(model_id=self.model_id, status=True)
  174. except ModelInfo.DoesNotExist:
  175. model = None
  176. return {
  177. 'req_id': self.request_id,
  178. 'request_id': self.request_id,
  179. 'shot_id': self.shot_id,
  180. 'shot_info': shot.data if shot else {},
  181. 'model_info': model.admindata,
  182. 'user_id': self.user_id,
  183. 'name': self.name,
  184. 'phone': self.phone,
  185. 'location': self.location,
  186. 'postcode': self.postcode,
  187. 'purpose': self.purpose,
  188. 'return_date': tc.local_date_string(self.return_date),
  189. 'express_name': self.express_name,
  190. 'express_com': self.express_com,
  191. 'tracking_number': self.tracking_number,
  192. 'tracking_info': self.tracking_info,
  193. 'tracking_signed': self.tracking_signed,
  194. 'tracking_signed_images': self.tracking_signed_images,
  195. 'back_express_name': self.back_express_name,
  196. 'back_express_com': self.back_express_com,
  197. 'back_tracking_number': self.back_tracking_number,
  198. 'back_tracking_info': self.back_tracking_info,
  199. 'back_tracking_signed': self.back_tracking_signed,
  200. 'audit_status': self.audit_status,
  201. 'request_status': self.request_status,
  202. '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()},
  203. 'created_at': tc.local_string(utc_dt=self.created_at),
  204. 'admin_id': self.admin_id,
  205. 'admin_data': admin.admindata if admin else {},
  206. 'front_cap_status': self.front_cap_status,
  207. 'rear_cap_status': self.rear_cap_status,
  208. 'lens_hood_status': self.lens_hood_status,
  209. 'tripod_ring_status': self.tripod_ring_status,
  210. 'appearance_performance_status': self.appearance_performance_status,
  211. 'remark': self.remark,
  212. }