models.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. # coding=utf-8
  2. import datetime
  3. from django.db import models
  4. from django.conf import settings
  5. from utils.exceptions import CustomError
  6. from apps.log.models import BizLog
  7. from django.contrib.auth import get_user_model
  8. User = get_user_model()
  9. from apps.upload.models import Upload
  10. from apps import order
  11. class Product(models.Model):
  12. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='package_create_user', verbose_name=u"添加人",
  13. on_delete=models.PROTECT, editable=False)
  14. create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
  15. month = models.IntegerField(verbose_name=u'贷款期限')
  16. name = models.CharField(verbose_name=u'产品名称', max_length=200)
  17. enable = models.BooleanField(verbose_name=u'是否在用', default=True,)
  18. main_image = models.ForeignKey(Upload, verbose_name=u'主图', on_delete=models.SET_NULL, null=True,
  19. related_name='main_image')
  20. notes = models.CharField(verbose_name=u'备注', max_length=200, null=True,)
  21. class Meta:
  22. db_table = "product"
  23. verbose_name = u"贷款产品"
  24. ordering = ('-id',)
  25. default_permissions = ()
  26. permissions = [
  27. ]
  28. class ProductImages(models.Model):
  29. name = models.CharField(verbose_name=u'名称', max_length=200)
  30. product = models.ForeignKey(Product, verbose_name=u'产品', on_delete=models.PROTECT, related_name='product_images')
  31. image = models.ForeignKey(Upload, verbose_name=u'图片', on_delete=models.PROTECT)
  32. class Meta:
  33. db_table = "product_images"
  34. verbose_name = u"产品图片"
  35. ordering = ('id',)
  36. default_permissions = ()
  37. @staticmethod
  38. def getById(id):
  39. try:
  40. id = int(id)
  41. except:
  42. raise CustomError(u'无效的ID')
  43. instance = ProductImages.objects.filter(pk=id).first()
  44. if not instance:
  45. raise CustomError(u'未找到相应的产品图片')
  46. return instance
  47. class Order(models.Model):
  48. category = models.PositiveSmallIntegerField(choices=order.CATEGORY_CHOICES, verbose_name=u"订单类型", default=order.ZERO)
  49. status = models.PositiveSmallIntegerField(choices=order.STATUS_CHOICES, verbose_name=u"订单状态", default=order.ZERO, editable=False)
  50. seller = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='order_seller', verbose_name=u"业务人员",
  51. on_delete=models.PROTECT)
  52. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='order_create_user', verbose_name=u"添加人",
  53. on_delete=models.PROTECT, editable=False)
  54. create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
  55. cancel_reason = models.CharField(max_length=100, verbose_name=u"未通过原因", null=True, editable=False)
  56. vmodel = models.CharField(max_length=100, verbose_name=u"车型", null=True)
  57. invioce = models.CharField(max_length=10, verbose_name=u"车辆发票金额", null=True)
  58. ptax = models.CharField(max_length=10, verbose_name=u"购置税", null=True)
  59. insurance = models.CharField(max_length=10, verbose_name=u"保险", null=True)
  60. boutique = models.CharField(max_length=10, verbose_name=u"精品", null=True)
  61. wextension = models.CharField(max_length=10, verbose_name=u"延保", null=True)
  62. upkeep = models.CharField(max_length=10, verbose_name=u"保养", null=True)
  63. dpratio = models.CharField(max_length=10, verbose_name=u"首付比例", null=True)
  64. lamount = models.CharField(max_length=10, verbose_name=u"申请贷款金额", null=True)
  65. laompany = models.ForeignKey(Product, verbose_name=u'贷款产品', on_delete=models.PROTECT)
  66. name = models.CharField(max_length=10, verbose_name=u"姓名")
  67. sex = models.PositiveSmallIntegerField(choices=order.GENDER_CHOICES, verbose_name=u"性别", default=order.ZERO)
  68. bdate = models.DateField(verbose_name=u"出生日期", null=True)
  69. rpr = models.PositiveSmallIntegerField(choices=order.HUKOU_CHOICES, verbose_name=u"户口", default=order.ZERO)
  70. nationality = models.PositiveSmallIntegerField(choices=order.NATIONALITY_CHOICES, verbose_name=u"国籍/地区", default=order.ZERO)
  71. ntype = models.PositiveSmallIntegerField(choices=order.ITYPE_CHOICES, verbose_name=u"身份证件类型", default=order.ZERO)
  72. inumber = models.CharField(max_length=18, verbose_name=u"身份证件号码", null=True)
  73. dincome = models.CharField(max_length=10, verbose_name=u"税后收入", null=True)
  74. mstatus = models.PositiveSmallIntegerField(choices=order.HUNYIN_CHOICES, verbose_name=u"婚姻状况", default=order.ZERO)
  75. elevel = models.PositiveSmallIntegerField(choices=order.JIAOYU_CHOICES, verbose_name=u"教育程度", default=order.ZERO)
  76. naddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
  77. hptype = models.PositiveSmallIntegerField(choices=order.FAGNCHAN_CHOICES, verbose_name=u"现居住房产类型", default=order.ZERO)
  78. maddress = models.PositiveSmallIntegerField(choices=order.YOUJI_CHOICES, verbose_name=u"邮寄地址", default=order.ZERO)
  79. email = models.CharField(max_length=100, verbose_name=u"电子邮箱", null=True)
  80. wx = models.CharField(max_length=100, verbose_name=u"微信号", null=True)
  81. phone = models.CharField(max_length=15, verbose_name=u"住宅固定电话", null=True)
  82. tel = models.CharField(max_length=11, verbose_name=u"手机号")
  83. wname = models.CharField(max_length=100, verbose_name=u"现工作单位名称", null=True)
  84. wphone = models.CharField(max_length=15, verbose_name=u"单位电话", null=True)
  85. waddress = models.CharField(max_length=100, verbose_name=u"现工作单位地址", null=True)
  86. itype = models.PositiveSmallIntegerField(choices=order.HANGYE_CHOICES, verbose_name=u"行业类型", default=order.ZERO)
  87. otype = models.PositiveSmallIntegerField(choices=order.ZHIYE_CHOICES, verbose_name=u"职业类型", default=order.ZERO)
  88. position = models.CharField(max_length=20, verbose_name=u"职位", null=True)
  89. wbst = models.PositiveSmallIntegerField(choices=order.BOOL_CHOICES, verbose_name=u"是否挂靠", default=order.ONE)
  90. bstname = models.CharField(max_length=100, verbose_name=u"挂靠公司名称", null=True)
  91. bstcode = models.CharField(max_length=100, verbose_name=u"挂靠公司组织机构代码", null=True)
  92. bsttel = models.CharField(max_length=100, verbose_name=u"挂靠公司电话", null=True)
  93. bstaddress = models.CharField(max_length=100, verbose_name=u"挂靠公司地址", null=True)
  94. cname = models.CharField(max_length=10, verbose_name=u"联系人1名称", null=True)
  95. ctel = models.CharField(max_length=11, verbose_name=u"联系人1手机号", null=True)
  96. relation = models.PositiveSmallIntegerField(choices=order.GUANXI_CHOICES, verbose_name=u"与借款人关系", default=order.ZERO)
  97. caddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
  98. ctname = models.CharField(max_length=10, verbose_name=u"联系人2姓名", null=True)
  99. cttel = models.CharField(max_length=11, verbose_name=u"联系人2手机号", null=True)
  100. thesame = models.PositiveSmallIntegerField(choices=order.BOOL_CHOICES, verbose_name=u"是否有共同借款人", default=order.ONE)
  101. tsname = models.CharField(max_length=10, verbose_name=u"共借人姓名", null=True)
  102. tsbdate = models.DateField(verbose_name=u"出生日期", null=True)
  103. tsitype = models.PositiveSmallIntegerField(choices=order.ITYPE_CHOICES, verbose_name=u"身份证件类型", default=order.ZERO)
  104. tsinumber = models.CharField(max_length=18, verbose_name=u"身份证件号码", null=True)
  105. tstel = models.CharField(max_length=11, verbose_name=u"手机号", null=True)
  106. tsrelation = models.PositiveSmallIntegerField(choices=order.GUANXI_CHOICES, verbose_name=u"与借款人关系",
  107. default=order.ZERO)
  108. tsnaddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
  109. tsmaddress = models.PositiveSmallIntegerField(choices=order.YOUJI_CHOICES, verbose_name=u"邮寄地址", default=order.ZERO)
  110. tsemail = models.CharField(max_length=50, verbose_name=u"电子邮箱", null=True)
  111. tswx = models.CharField(max_length=20, verbose_name=u"微信号", null=True)
  112. tswname = models.CharField(max_length=100, verbose_name=u"现工作单位名称", null=True)
  113. tswphone = models.CharField(max_length=15, verbose_name=u"单位电话", null=True)
  114. tswaddress = models.CharField(max_length=100, verbose_name=u"现工作单位地址", null=True)
  115. tsmincome = models.CharField(max_length=10, verbose_name=u"税后月收入", null=True)
  116. notes = models.CharField(max_length=210, verbose_name=u"备注", null=True)
  117. class Meta:
  118. db_table = "order"
  119. verbose_name = u"订单管理"
  120. ordering = ('-create_time',)
  121. default_permissions = ()
  122. permissions = [
  123. ]
  124. def get_path(self, image_type):
  125. today = datetime.datetime.today()
  126. year = today.year
  127. month = today.month
  128. if month < 10:
  129. parent_month = '{}-0{}'.format(year, month)
  130. else:
  131. parent_month = '{}-{}'.format(year, month)
  132. return '{}/{}/{}/申请/{}/'.format(parent_month, self.seller.name, self.name, OrderImages.TYPE_CHOICE[int(image_type) -1][1])
  133. @staticmethod
  134. def get_instance_by_id(id):
  135. try:
  136. id = int(id)
  137. except:
  138. raise CustomError('无效的订单ID')
  139. instance = Order.objects.filter(pk=id).first()
  140. if not instance:
  141. raise CustomError('未找到对应的订单')
  142. return instance
  143. class OrderImages(models.Model):
  144. ONE = 1
  145. TOW = 2
  146. THREE = 3
  147. FOUR = 4
  148. FIVE = 5
  149. SIX = 6
  150. TYPE_CHOICE = (
  151. (ONE, '身份证', ),
  152. (TOW, '驾驶证', ),
  153. (THREE, '收入类',),
  154. (FOUR, '流水类',),
  155. (FIVE, '营业执照', ),
  156. (SIX, '挂靠协议', ),
  157. )
  158. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICE, default=ONE)
  159. order = models.ForeignKey(Order, verbose_name=u'产品', on_delete=models.PROTECT, related_name='order_images')
  160. image = models.ForeignKey(Upload, verbose_name=u'图片', on_delete=models.SET_NULL, null=True,)
  161. enable = models.BooleanField(verbose_name=u'是否在用', default=True, )
  162. class Meta:
  163. db_table = "order_images"
  164. verbose_name = u"订单图片"
  165. ordering = ('id',)
  166. default_permissions = ()
  167. @staticmethod
  168. def getById(id):
  169. try:
  170. id = int(id)
  171. except:
  172. raise CustomError(u'无效的ID')
  173. instance = OrderImages.objects.filter(pk=id).first()
  174. if not instance:
  175. raise CustomError(u'未找到相应的图片')
  176. return instance
  177. class OrderDetailEdit(models.Model):
  178. ZERO = 0
  179. ONE = 1
  180. TYPE_CHOICE = (
  181. (ZERO, '资料'),
  182. (ONE, '图片'),
  183. )
  184. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICE, default=ZERO)
  185. order = models.ForeignKey(Order, verbose_name=u'产品', on_delete=models.PROTECT, related_name='order_detail_edit')
  186. value = models.CharField(max_length=20, verbose_name=u'订单明细对象值') # 文字资料存自动名称,图片存OrderImages type值
  187. edit_time = models.DateTimeField(verbose_name=u'修改时间', null=True)
  188. reason = models.CharField(max_length=200, verbose_name=u'修改原因', null=True)
  189. class Meta:
  190. db_table = "order_detail_edit"
  191. verbose_name = u"订单明细修改"
  192. ordering = ('id',)
  193. default_permissions = ()