#coding=utf-8 import datetime from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin from django.utils import timezone from django.conf import settings from apps.exceptions import CustomError from apps.foundation.consts import CONTENT_TYPE_SORTING, MENU_TO_MODEL from apps.foundation.models import BizLog class Branch(models.Model): name = models.CharField(max_length=200, verbose_name=u"名称") tel = models.CharField(max_length=50, verbose_name=u"电话") address = models.CharField(max_length=200, verbose_name=u"地址") enabled = models.BooleanField(verbose_name=u"在用", default=True) create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False) @staticmethod def getById(id): try: id = int(id) except: raise CustomError(u'无效的门店') instance = Branch.objects.filter(pk=id).first() if not instance: raise CustomError(u'未找到相应的门店') return instance class Meta: db_table = "branch" ordering = ['-id'] verbose_name = u"门店管理" class Member(models.Model): branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT, null=True, blank=True) nickname = models.CharField(max_length=200, verbose_name=u"名称") tel = models.CharField(max_length=50, verbose_name=u"电话") create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False) class Meta: db_table = "member" ordering = ['-id'] verbose_name = u"会员管理" class Activity(models.Model): branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT) title = models.CharField(max_length=200, verbose_name=u"标题") describe = models.TextField(verbose_name=u'活动介绍') end_date = models.DateField(verbose_name=u"截止日期") amount = models.FloatField(verbose_name=u"费用", default=0) rebate = models.FloatField(verbose_name=u"返利", default=0) check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核", editable=False, default=settings.DEFAULT) branch_name = models.CharField(max_length=200, verbose_name=u"门店名称", null=True, blank=True) branch_tel = models.CharField(max_length=50, verbose_name=u"门店电话", null=True, blank=True) branch_address = models.CharField(max_length=200, verbose_name=u"门店地址", null=True, blank=True) create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False) enabled = models.BooleanField(verbose_name=u"在用", default=True) delete = models.BooleanField(verbose_name=u"删除", default=False) class Meta: db_table = "activity" ordering = ['-id'] verbose_name = u"活动管理" class Order(models.Model): DEFAULT = 0 FINISH = 1 FAIL = 2 STATUS_CHOICES = ( (DEFAULT, u'待付款'), (FINISH, u'已完成'), (FAIL, u'失败'), ) branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT) activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT) member = models.ForeignKey(Member, verbose_name=u"会员", on_delete=models.PROTECT) amount = models.FloatField(verbose_name=u"费用", default=0) status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"状态", default=DEFAULT, editable=False) model = models.CharField(max_length=200, verbose_name=u"车型", null=True, blank=True) tel = models.CharField(max_length=100, verbose_name=u"电话", null=True, blank=True) number = models.CharField(max_length=50, verbose_name=u"车牌号", null=True, blank=True) create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False) delete = models.BooleanField(verbose_name=u"删除", default=False) class Meta: db_table = "order" ordering = ['-id'] verbose_name = u"订单管理" class Coupon(models.Model): FIXED_DATE = 0 RECEIVE_TIMING = 1 OFF_TYPE_CHOICES = ( (FIXED_DATE, u'固定日期'), (RECEIVE_TIMING, u'领取计时'), ) branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT) name = models.CharField(max_length=200, verbose_name=u"名称") off_type = models.PositiveSmallIntegerField(choices=OFF_TYPE_CHOICES, verbose_name=u"核销方式", default=FIXED_DATE) end_date = models.DateField(verbose_name=u"截止日期", null=True, blank=True) end_days = models.IntegerField(verbose_name=u"截止天数", null=True, blank=True) create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False) enabled = models.BooleanField(verbose_name=u"在用", default=True) class Meta: db_table = "coupon" ordering = ['-id'] verbose_name = u"优惠券" class MemberCoupon(models.Model): member = models.ForeignKey(Member, verbose_name=u"会员", on_delete=models.PROTECT) coupon = models.ForeignKey(Coupon, verbose_name=u"优惠券", on_delete=models.PROTECT) activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT) receive_date = models.DateField(verbose_name=u"领取日期", null=True, blank=True) end_date = models.DateField(verbose_name=u"有效期至", null=True, blank=True) write_off = models.BooleanField(verbose_name=u"核销", default=True) write_off_time = models.DateTimeField(verbose_name=u"核销时间", editable=False, null=True, blank=True) class Meta: db_table = "member_coupon" ordering = ['-id'] verbose_name = u"会员优惠券" def writeOff(self): now = datetime.datetime.date(timezone.now()) if self.write_off: raise CustomError(u'该优惠券已核销,禁止重复使用!') if self.end_date and now > self.end_date: raise CustomError(u'该优惠券已过有效期,禁止使用!') self.write_off = True self.write_off_time = timezone.now() self.save() def cancelWriteOff(self): if not self.write_off: raise CustomError(u'该优惠券尚未核销,禁止撤销!') self.write_off = False self.write_off_time = None self.save() @staticmethod def getById(id): try: id = int(id) except: raise CustomError(u'无效的会员优惠券ID') instance = MemberCoupon.objects.filter(pk=id).first() if not instance: raise CustomError(u'未找到相应的会员优惠券') return instance class ActivityCoupon(models.Model): activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT) coupon = models.ForeignKey(Coupon, verbose_name=u"优惠券", on_delete=models.PROTECT) class Meta: db_table = "activity_coupon" ordering = ['-id'] verbose_name = u"活动优惠券"