|
# -*- coding: utf-8 -*-
from django.conf import settings
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django_models_ext import (BaseModelMixin, ProvinceShortModelMixin, SexModelMixin, upload_file_path,
upload_file_url, upload_path)
from jsonfield import JSONField
from shortuuidfield import ShortUUIDField
from TimeConvert import TimeConvert as tc
class AdministratorInfo(BaseModelMixin):
ADMINISTRATOR = 0
MAINTENANCE = 1
USER_TYPE_TUPLE = (
(ADMINISTRATOR, u'管理员'),
(MAINTENANCE, u'维修员'),
)
ACTIVATED = 1
DISABLED = 2
DELETED = 3
USER_STATUS_TUPLE = (
(ACTIVATED, u'已激活'),
(DISABLED, u'已禁用'),
(DELETED, u'已删除'),
)
admin_id = ShortUUIDField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员唯一标识', db_index=True, unique=True)
admin_type = models.IntegerField(_(u'admin_type'), choices=USER_TYPE_TUPLE, default=ADMINISTRATOR, help_text=u'管理员类型', db_index=True)
phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'管理员电话', db_index=True)
password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'管理员密码')
encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'管理员密码')
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'管理员姓名')
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS_TUPLE, default=ACTIVATED, help_text=u'管理员状态', db_index=True)
class Meta:
verbose_name = _(u'管理员信息')
verbose_name_plural = _(u'管理员信息')
def __unicode__(self):
return u'{}-{}'.format(self.name, self.phone)
class OperatorInfo(BaseModelMixin):
ACTIVATED = 1
DISABLED = 2
DELETED = 3
USER_STATUS_TUPLE = (
(ACTIVATED, u'已激活'),
(DISABLED, u'已禁用'),
(DELETED, u'已删除'),
)
operator_id = ShortUUIDField(_(u'operator_id'), max_length=32, blank=True, null=True, help_text=u'操作员唯一标识', db_index=True, unique=True)
phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'操作员电话', db_index=True)
password = models.CharField(_(u'password'), max_length=255, blank=True, null=True, help_text=u'操作员密码')
encryption = models.CharField(_(u'encryption'), max_length=255, blank=True, null=True, help_text=u'操作员密码')
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'操作员姓名')
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
brand_domain = models.CharField(_(u'brand_domain'), max_length=255, blank=True, null=True, help_text=u'品牌域名')
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS_TUPLE, default=ACTIVATED, help_text=u'操作员状态', db_index=True)
class Meta:
verbose_name = _(u'操作员信息')
verbose_name_plural = _(u'操作员信息')
def __unicode__(self):
return u'{}-{}'.format(self.name, self.phone)
@property
def data(self):
return {
'operator_id': self.operator_id,
'phone': self.phone,
'name': self.name,
}
@property
def kododata(self):
return {
'optor_id': self.operator_id,
'brand_domain': self.brand_domain or settings.KODO_DEFAULT_BRAND_DOMAIN,
}
class BrandInfo(BaseModelMixin):
brand_id = ShortUUIDField(_(u'brand_id'), max_length=32, help_text=u'品牌唯一标识', db_index=True, unique=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
brand_descr = models.TextField(_(u'brand_descr'), max_length=255, blank=True, null=True, help_text=u'品牌描述')
brand_logo = models.ImageField(_(u'brand_logo'), upload_to=upload_path, blank=True, null=True, help_text=u'品牌商标')
brand_domain = models.CharField(_(u'brand_domain'), max_length=255, blank=True, null=True, help_text=u'品牌域名')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序')
class Meta:
verbose_name = _(u'品牌信息')
verbose_name_plural = _(u'品牌信息')
def __unicode__(self):
return unicode(self.pk)
@property
def brand_logo_url(self):
return upload_file_url(self.brand_logo)
@property
def data(self):
return {
'brand_id': str(self.pk),
'brand_name': self.brand_name,
'brand_descr': self.brand_descr,
}
class ModelInfo(BaseModelMixin):
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
jancode = models.CharField(_(u'jancode'), max_length=16, blank=True, null=True, help_text=u'JAN_CODE', db_index=True)
model_id = ShortUUIDField(_(u'model_id'), max_length=32, help_text=u'型号唯一标识', db_index=True, unique=True)
model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号名称')
model_uni_name = models.CharField(_(u'model_uni_name'), max_length=32, blank=True, null=True, help_text=u'型号统一名称')
model_full_name = models.CharField(_(u'model_full_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称')
model_descr = models.TextField(_(u'model_descr'), max_length=255, blank=True, null=True, help_text=u'型号描述')
category = models.CharField(_(u'category'), max_length=32, blank=True, null=True, help_text=u'型号类别', db_index=True)
warehouse = models.CharField(_(u'warehouse'), max_length=32, blank=True, null=True, help_text=u'所属仓库', db_index=True)
image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片')
url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接')
image2 = models.ImageField(_(u'image2'), upload_to=upload_path, blank=True, null=True, help_text=u'图片2')
factory_yuan = models.FloatField(_(u'factory_yuan'), default=1000, help_text=u'出厂价(元)')
factory_fee = models.IntegerField(_(u'factory_fee'), default=100000, help_text=u'出厂价(分)')
integral = models.IntegerField(_(u'integral'), default=100, help_text=u'积分')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序')
display = models.BooleanField(_(u'display'), default=True, help_text=_(u'Display'), db_index=True)
class Meta:
verbose_name = _(u'型号信息')
verbose_name_plural = _(u'型号信息')
def __unicode__(self):
return unicode(self.pk)
@property
def image_path(self):
return upload_file_path(self.image)
@property
def image_url(self):
return upload_file_url(self.image)
@property
def image2_path(self):
return upload_file_path(self.image2)
@property
def image2_url(self):
return upload_file_url(self.image2)
@property
def data(self):
return {
'jancode': self.jancode,
'model_id': str(self.pk),
'model_name': self.model_name,
'model_descr': self.model_descr,
}
@property
def imgdata(self):
return {
'image_url': self.image_url,
'url': self.url,
}
@property
def images(self):
return [self.imgdata] if self.image else []
# imgs = ModelImageInfo.objects.filter(model_id=self.model_id, status=True)
# return [img.data for img in imgs]
@property
def admindata(self):
return {
'jancode': self.jancode,
'model_id': self.model_id,
'model_name': self.model_name,
'model_uni_name': self.model_uni_name,
'model_full_name': self.model_full_name,
'model_descr': self.model_descr,
'category': self.category,
'warehouse': self.warehouse,
'image_path': self.image_path,
'image_url': self.image_url,
'image2_path': self.image2_path,
'image2_url': self.image2_url,
'factory_yuan': self.factory_yuan,
'integral': self.integral,
}
fulldata = admindata
class ModelImageInfo(BaseModelMixin):
model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片')
url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序')
class Meta:
verbose_name = _(u'型号图片信息')
verbose_name_plural = _(u'型号图片信息')
def __unicode__(self):
return unicode(self.pk)
@property
def image_url(self):
return upload_file_url(self.image)
@property
def data(self):
return {
'image_url': self.image_url,
'url': self.url,
}
class DistributorInfo(BaseModelMixin):
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
distributor_id = ShortUUIDField(_(u'distributor_id'), max_length=32, help_text=u'经销商唯一标识', db_index=True, unique=True)
distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称')
distributor_short_name = models.CharField(_(u'distributor_short_name'), max_length=8, blank=True, null=True, help_text=u'经销商简称')
distributor_descr = models.TextField(_(u'distributor_descr'), max_length=255, blank=True, null=True, help_text=u'经销商描述')
distributor_province_code = models.CharField(_(u'distributor_province_code'), max_length=6, blank=True, null=True, help_text=u'经销商所在省份编码')
distributor_province_name = models.CharField(_(u'distributor_province_name'), max_length=3, choices=ProvinceShortModelMixin.PROVINCE_NAME_TUPLE, default=ProvinceShortModelMixin.PROVINCE_DEFAULT_NAME, blank=True, null=True, help_text=u'经销商所在省份名称')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序')
class Meta:
verbose_name = _(u'经销商信息')
verbose_name_plural = _(u'经销商信息')
def __unicode__(self):
return unicode(self.pk)
@property
def data(self):
return {
'distributor_id': str(self.pk),
'distributor_name': self.distributor_name,
'distributor_short_name': self.distributor_short_name,
'distributor_descr': self.distributor_descr,
}
@property
def admindata(self):
return {
'distributor_id': self.distributor_id,
'distributor_name': self.distributor_name,
'distributor_short_name': self.distributor_short_name,
'distributor_descr': self.distributor_descr,
'province_code': self.distributor_province_code,
'province_name': self.distributor_province_name,
}
class SaleclerkInfo(BaseModelMixin, SexModelMixin):
REFUSED = -1
UNVERIFIED = 0
ACTIVATED = 1
DISABLED = 2
DELETED = 3
ASSIGN = 10
USER_STATUS = (
(REFUSED, u'已拒绝'),
(UNVERIFIED, u'未验证'),
(ACTIVATED, u'已激活'),
(DISABLED, u'已禁用'),
(DELETED, u'已删除'),
(ASSIGN, u'已分配'),
)
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True)
distributor_name = models.CharField(_(u'distributor_name'), max_length=32, blank=True, null=True, help_text=u'经销商名称')
clerk_id = ShortUUIDField(_(u'clerk_id'), max_length=32, help_text=u'店员唯一标识', db_index=True, unique=True)
clerk_name = models.CharField(_(u'clerk_name'), max_length=32, blank=True, null=True, help_text=u'店员名称')
clerk_sex = models.IntegerField(_(u'clerk_sex'), choices=SexModelMixin.SEX_TUPLE, default=SexModelMixin.MALE, help_text=u'店员性别', db_index=True)
clerk_phone = models.CharField(_(u'clerk_phone'), max_length=11, blank=True, null=True, help_text=u'店员联系电话')
unionid = models.CharField(_(u'unionid'), max_length=32, blank=True, null=True, help_text=u'微信 UnionID', db_index=True)
openid = models.CharField(_(u'openid'), max_length=32, blank=True, null=True, help_text=u'微信 OpenID', db_index=True)
num = models.IntegerField(_(u'num'), default=0, help_text=u'支数')
integral = models.IntegerField(_(u'integral'), default=0, help_text=u'积分')
total_integral = models.IntegerField(_(u'total_integral'), default=0, help_text=u'全部积分')
user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=UNVERIFIED, help_text=u'用户状态', db_index=True)
refused_reason = models.TextField(_(u'refused_reason'), blank=True, null=True, help_text=u'审核拒绝原因')
is_auth = models.BooleanField(_(u'is_auth'), default=False, help_text=_(u'是否已授权'), db_index=True)
test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True)
class Meta:
verbose_name = _(u'经销商销售员信息')
verbose_name_plural = _(u'经销商销售员信息')
unique_together = (
('unionid', 'brand_id'),
)
def __unicode__(self):
return unicode(self.pk)
@property
def admindata(self):
return {
'distributor_id': self.distributor_id,
'distributor_name': self.distributor_name,
'clerk_id': self.clerk_id,
'clerk_name': self.clerk_name,
'clerk_sex': self.clerk_sex,
'clerk_phone': self.clerk_phone,
'num': self.num,
'integral': self.integral,
'total_integral': self.total_integral,
'status': self.user_status,
'refused_reason': self.refused_reason,
'is_auth': self.is_auth,
}
data = admindata
class BrandModelDistributorPriceInfo(BaseModelMixin):
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True)
distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称')
factory_yuan = models.FloatField(_(u'factory_yuan'), default=1000, help_text=u'出厂价(元)')
factory_fee = models.IntegerField(_(u'factory_fee'), default=100000, help_text=u'出厂价(分)')
integral = models.IntegerField(_(u'integral'), default=100, help_text=u'积分')
class Meta:
verbose_name = _(u'品牌/型号/代理商价格信息')
verbose_name_plural = _(u'品牌/型号/代理商价格信息')
unique_together = (
('brand_id', 'model_id', 'distributor_id'),
)
def __unicode__(self):
return unicode(self.pk)
class LatestAppInfo(BaseModelMixin):
latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号')
latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名')
latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP')
latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接')
latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号')
latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名')
latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接')
class Meta:
verbose_name = _(u'升级配置信息')
verbose_name_plural = _(u'升级配置信息')
def __unicode__(self):
return u'{0.pk}'.format(self)
@property
def final_latest_adr_url(self):
return self.latest_adr_url or upload_file_url(self.latest_adr_app)
@property
def data(self):
return {
'latest_adr_version_code': self.latest_adr_version_code,
'latest_adr_version_name': self.latest_adr_version_name,
'latest_adr_url': self.final_latest_adr_url,
'latest_ios_version_code': self.latest_ios_version_code,
'latest_ios_version_name': self.latest_ios_version_name,
'latest_ios_url': self.latest_ios_url,
}
@property
def adr(self):
return {
'latest_adr_version_code': self.latest_adr_version_code,
'latest_adr_version_name': self.latest_adr_version_name,
'latest_adr_url': self.final_latest_adr_url,
}
class LatestAppScreenInfo(BaseModelMixin):
latest_adr_version_code = models.IntegerField(_(u'latest_adr_version_code'), default=0, help_text=u'最新安卓版本号')
latest_adr_version_name = models.CharField(_(u'latest_adr_version_name'), max_length=16, blank=True, null=True, help_text=u'最新安卓版本名')
latest_adr_app = models.FileField(_(u'latest_adr_app'), upload_to=upload_path, blank=True, null=True, help_text=u'最新版安卓 APP')
latest_adr_url = models.URLField(_(u'latest_adr_url'), max_length=255, blank=True, null=True, help_text=u'最新版 APP 链接')
latest_ios_version_code = models.IntegerField(_(u'latest_ios_version_code'), default=0, help_text=u'最新 iOS 版本号')
latest_ios_version_name = models.CharField(_(u'latest_ios_version_name'), max_length=16, blank=True, null=True, help_text=u'最新 iOS 版本名')
latest_ios_url = models.URLField(_(u'latest_ios_url'), max_length=255, blank=True, null=True, help_text=u'最新版 iOS 链接')
class Meta:
verbose_name = _(u'升级配置信息(数据大屏)')
verbose_name_plural = _(u'升级配置信息(数据大屏)')
def __unicode__(self):
return u'{0.pk}'.format(self)
@property
def final_latest_adr_url(self):
return self.latest_adr_url or upload_file_url(self.latest_adr_app)
@property
def data(self):
return {
'latest_adr_version_code': self.latest_adr_version_code,
'latest_adr_version_name': self.latest_adr_version_name,
'latest_adr_url': self.final_latest_adr_url,
'latest_ios_version_code': self.latest_ios_version_code,
'latest_ios_version_name': self.latest_ios_version_name,
'latest_ios_url': self.latest_ios_url,
}
@property
def adr(self):
return {
'latest_adr_version_code': self.latest_adr_version_code,
'latest_adr_version_name': self.latest_adr_version_name,
'latest_adr_url': self.final_latest_adr_url,
}
class ConsumeInfoSubmitLogInfo(BaseModelMixin):
user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户手机', db_index=True)
iv = models.CharField(_(u'iv'), max_length=255, blank=True, null=True, help_text=u'iv')
encryptedData = models.CharField(_(u'encryptedData'), max_length=255, blank=True, null=True, help_text=u'encryptedData')
lat = models.FloatField(_(u'lat'), default=1.0, help_text=u'纬度')
lon = models.FloatField(_(u'lon'), default=1.0, help_text=u'经度')
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
distributor_id = models.CharField(_(u'distributor_id'), max_length=32, blank=True, null=True, help_text=u'经销商唯一标识', db_index=True)
distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称')
serialNo = models.CharField(_(u'serialNo'), max_length=16, blank=True, null=True, help_text=u'序列号', db_index=True)
verifyResult = models.IntegerField(_(u'verifyResult'), default=0, help_text=u'验证结果', db_index=True)
dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交'), db_index=True)
submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=_(u'是否为活动期间上传'), db_index=True)
activity_id = models.IntegerField(_(u'activity_id'), default=0, help_text=_(u'活动唯一标识'))
coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间'))
coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)'))
has_used = models.BooleanField(_(u'has_used'), default=False, help_text=_(u'是否已核销'), db_index=True)
admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'核销员唯一标识', db_index=True)
used_at = models.DateTimeField(_(u'used_at'), blank=True, null=True, help_text=_(u'维修券核销时间'))
test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True)
class Meta:
verbose_name = _(u'消费者信息提交记录')
verbose_name_plural = _(u'消费者信息提交记录')
def __unicode__(self):
return unicode(self.pk)
@property
def model_info(self):
try:
info = ModelInfo.objects.get(model_id=self.model_id).fulldata
except ModelInfo.DoesNotExist:
info = {}
return info
@property
def coupon_info(self):
return {
'coupon_expire_at': '',
'coupon_value': 0,
'coupon_has_expired': True,
},
@property
def data(self):
if self.submit_during_activity:
try:
act = ActivityInfo.objects.get(pk=self.activity_id)
except ActivityInfo.DoesNotExist:
act = None
else:
act = None
return {
'lat': self.lat,
'lon': self.lon,
'brand_id': self.brand_id,
'brand_name': self.brand_name,
'model_id': self.model_id,
'model_name': self.model_name,
'model_info': self.model_info,
'serialNo': self.serialNo,
'verifyResult': self.verifyResult,
'submit_during_activity': self.submit_during_activity,
'coupon_info': act.coupon_info(created_at=self.created_at) if act else self.coupon_info,
'has_used': self.has_used,
'used_at': self.used_at,
}
class ActivityInfo(BaseModelMixin):
FIXED_EXPIRED_TIME = 0
CHANGED_EXPIRED_TIME = 1
COUPON_EXPIRED_TIME_TUPLE = (
(FIXED_EXPIRED_TIME, u'固定结束时间'),
(CHANGED_EXPIRED_TIME, u'可变结束时间'),
)
activity_name = models.CharField(_(u'activity_name'), max_length=255, blank=True, null=True, help_text=u'活动名称')
model_uni_names = JSONField(_(u'model_uni_names'), default=[], blank=True, null=True, help_text=u'型号统一名称列表')
start_at = models.DateTimeField(_(u'start_at'), help_text=_(u'start_at'))
end_at = models.DateTimeField(_(u'end_at'), help_text=_(u'end_at'))
coupon_expire_type = models.IntegerField(_(u'coupon_expire_type'), choices=COUPON_EXPIRED_TIME_TUPLE, default=FIXED_EXPIRED_TIME, help_text=_(u'维修券类型'))
coupon_valid_period = models.IntegerField(_(u'coupon_valid_period'), default=0, help_text=_(u'维修券有效时间(单位:天)'))
coupon_expire_at = models.DateTimeField(_(u'coupon_expire_at'), blank=True, null=True, help_text=_(u'维修券过期时间'))
coupon_value = models.IntegerField(_(u'coupon_value'), default=0, help_text=_(u'维修券金额(单位:分)'))
class Meta:
verbose_name = _(u'活动信息')
verbose_name_plural = _(u'活动信息')
def __unicode__(self):
return unicode(self.pk)
def final_expire_at(self, created_at=None):
if self.coupon_expire_type == ActivityInfo.FIXED_EXPIRED_TIME:
return self.coupon_expire_at
return tc.utc_datetime(dt=created_at, days=self.coupon_valid_period)
def final_coupon_expire_at(self, created_at=None):
final_expire_at = self.final_expire_at(created_at=created_at)
if not final_expire_at:
return ''
y = tc.local_string(final_expire_at, format='%Y')
m = tc.local_string(final_expire_at, format='%m')
d = tc.local_string(final_expire_at, format='%d')
return u'{}年{}月{}日'.format(y, m, d)
def has_unexpired_activity(self, model_name):
return (self.model_uni_names and model_name in self.model_uni_names) and (self.start_at <= tc.utc_datetime() < self.end_at)
def coupon_info(self, created_at=None):
coupon_expire_at = self.final_coupon_expire_at(created_at=created_at)
return {
'coupon_expire_at': coupon_expire_at,
'coupon_value': self.coupon_value,
'coupon_has_expired': tc.utc_datetime() >= coupon_expire_at,
},
|