models.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #coding=utf-8
  2. import datetime
  3. from django.db import models
  4. from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin
  5. from django.utils import timezone
  6. from django.conf import settings
  7. from apps.exceptions import CustomError
  8. from apps.foundation.consts import CONTENT_TYPE_SORTING, MENU_TO_MODEL
  9. from apps.foundation.models import BizLog
  10. class Branch(models.Model):
  11. name = models.CharField(max_length=200, verbose_name=u"名称")
  12. tel = models.CharField(max_length=50, verbose_name=u"电话")
  13. address = models.CharField(max_length=200, verbose_name=u"地址")
  14. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  15. create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
  16. @staticmethod
  17. def getById(id):
  18. try:
  19. id = int(id)
  20. except:
  21. raise CustomError(u'无效的门店')
  22. instance = Branch.objects.filter(pk=id).first()
  23. if not instance:
  24. raise CustomError(u'未找到相应的门店')
  25. return instance
  26. class Meta:
  27. db_table = "branch"
  28. ordering = ['-id']
  29. verbose_name = u"门店管理"
  30. class Member(models.Model):
  31. branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT, null=True, blank=True)
  32. nickname = models.CharField(max_length=200, verbose_name=u"名称")
  33. tel = models.CharField(max_length=50, verbose_name=u"电话")
  34. create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
  35. class Meta:
  36. db_table = "member"
  37. ordering = ['-id']
  38. verbose_name = u"会员管理"
  39. class Activity(models.Model):
  40. branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT)
  41. title = models.CharField(max_length=200, verbose_name=u"标题")
  42. describe = models.TextField(verbose_name=u'活动介绍')
  43. end_date = models.DateField(verbose_name=u"截止日期")
  44. amount = models.FloatField(verbose_name=u"费用", default=0)
  45. rebate = models.FloatField(verbose_name=u"返利", default=0)
  46. check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核", editable=False, default=settings.DEFAULT)
  47. branch_name = models.CharField(max_length=200, verbose_name=u"门店名称", null=True, blank=True)
  48. branch_tel = models.CharField(max_length=50, verbose_name=u"门店电话", null=True, blank=True)
  49. branch_address = models.CharField(max_length=200, verbose_name=u"门店地址", null=True, blank=True)
  50. create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
  51. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  52. delete = models.BooleanField(verbose_name=u"删除", default=False)
  53. class Meta:
  54. db_table = "activity"
  55. ordering = ['-id']
  56. verbose_name = u"活动管理"
  57. class Order(models.Model):
  58. DEFAULT = 0
  59. FINISH = 1
  60. FAIL = 2
  61. STATUS_CHOICES = (
  62. (DEFAULT, u'待付款'),
  63. (FINISH, u'已完成'),
  64. (FAIL, u'失败'),
  65. )
  66. branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT)
  67. activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
  68. member = models.ForeignKey(Member, verbose_name=u"会员", on_delete=models.PROTECT)
  69. amount = models.FloatField(verbose_name=u"费用", default=0)
  70. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"状态", default=DEFAULT, editable=False)
  71. model = models.CharField(max_length=200, verbose_name=u"车型", null=True, blank=True)
  72. tel = models.CharField(max_length=100, verbose_name=u"电话", null=True, blank=True)
  73. number = models.CharField(max_length=50, verbose_name=u"车牌号", null=True, blank=True)
  74. create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
  75. delete = models.BooleanField(verbose_name=u"删除", default=False)
  76. class Meta:
  77. db_table = "order"
  78. ordering = ['-id']
  79. verbose_name = u"订单管理"
  80. class Coupon(models.Model):
  81. FIXED_DATE = 0
  82. RECEIVE_TIMING = 1
  83. OFF_TYPE_CHOICES = (
  84. (FIXED_DATE, u'固定日期'),
  85. (RECEIVE_TIMING, u'领取计时'),
  86. )
  87. branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT)
  88. name = models.CharField(max_length=200, verbose_name=u"名称")
  89. off_type = models.PositiveSmallIntegerField(choices=OFF_TYPE_CHOICES, verbose_name=u"核销方式", default=FIXED_DATE)
  90. end_date = models.DateField(verbose_name=u"截止日期", null=True, blank=True)
  91. end_days = models.IntegerField(verbose_name=u"截止天数", null=True, blank=True)
  92. create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
  93. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  94. class Meta:
  95. db_table = "coupon"
  96. ordering = ['-id']
  97. verbose_name = u"优惠券"
  98. class MemberCoupon(models.Model):
  99. member = models.ForeignKey(Member, verbose_name=u"会员", on_delete=models.PROTECT)
  100. coupon = models.ForeignKey(Coupon, verbose_name=u"优惠券", on_delete=models.PROTECT)
  101. activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
  102. receive_date = models.DateField(verbose_name=u"领取日期", null=True, blank=True)
  103. end_date = models.DateField(verbose_name=u"有效期至", null=True, blank=True)
  104. write_off = models.BooleanField(verbose_name=u"核销", default=True)
  105. write_off_time = models.DateTimeField(verbose_name=u"核销时间", editable=False, null=True, blank=True)
  106. class Meta:
  107. db_table = "member_coupon"
  108. ordering = ['-id']
  109. verbose_name = u"会员优惠券"
  110. def writeOff(self):
  111. now = datetime.datetime.date(timezone.now())
  112. if self.write_off:
  113. raise CustomError(u'该优惠券已核销,禁止重复使用!')
  114. if self.end_date and now > self.end_date:
  115. raise CustomError(u'该优惠券已过有效期,禁止使用!')
  116. self.write_off = True
  117. self.write_off_time = timezone.now()
  118. self.save()
  119. def cancelWriteOff(self):
  120. if not self.write_off:
  121. raise CustomError(u'该优惠券尚未核销,禁止撤销!')
  122. self.write_off = False
  123. self.write_off_time = None
  124. self.save()
  125. @staticmethod
  126. def getById(id):
  127. try:
  128. id = int(id)
  129. except:
  130. raise CustomError(u'无效的会员优惠券ID')
  131. instance = MemberCoupon.objects.filter(pk=id).first()
  132. if not instance:
  133. raise CustomError(u'未找到相应的会员优惠券')
  134. return instance
  135. class ActivityCoupon(models.Model):
  136. activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
  137. coupon = models.ForeignKey(Coupon, verbose_name=u"优惠券", on_delete=models.PROTECT)
  138. class Meta:
  139. db_table = "activity_coupon"
  140. ordering = ['-id']
  141. verbose_name = u"活动优惠券"