|
# -*- coding: utf-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django_models_ext import BaseModelMixin, upload_file_path, upload_file_url, upload_path
from simditor.fields import RichTextField
from shortuuidfield import ShortUUIDField
from TimeConvert import TimeConvert as tc
from mch.models import ModelInfo
class GoodsInfo(BaseModelMixin):
PHYSICAL = 0
VIRTUAL = 1
GOOD_TYPE_TUPLE = (
(PHYSICAL, u'实物'),
(VIRTUAL, u'虚拟'),
)
good_id = ShortUUIDField(_(u'good_id'), max_length=32, blank=True, null=True, help_text=u'商品唯一标识', db_index=True, unique=True)
good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True)
title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'商品名称')
desc = RichTextField(_(u'desc'), blank=True, null=True, help_text=u'商品描述')
image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'商品图片')
is_slider = models.BooleanField(_(u'is_slider'), default=True, help_text=_(u'是否为轮播商品'), db_index=True)
slider_image = models.ImageField(_(u'slider_image'), upload_to=upload_path, blank=True, null=True, help_text=u'商品轮播图片')
integral = models.IntegerField(_(u'integral'), default=99999, help_text=u'兑换所需积分')
fee = models.IntegerField(_(u'fee'), default=99999, help_text=u'兑换需额外支付金额,单位分')
minlevel = models.IntegerField(_(u'minlevel'), default=0, help_text=u'兑换最低会员级别')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', 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 slider_image_path(self):
return upload_file_path(self.slider_image)
@property
def slider_image_url(self):
return upload_file_url(self.slider_image)
@property
def data(self):
return {
'good_id': self.good_id,
'good_type': self.good_type,
'title': self.title,
'desc': self.desc,
'image': self.image_url,
'slider_image': self.slider_image_url,
'integral': self.integral,
'fee': self.fee,
'minlevel': self.minlevel,
'able': True,
}
class RightInfo(BaseModelMixin):
PHYSICAL = 0
VIRTUAL = 1
COUPON = 2
RIGHT_TYPE_TUPLE = (
(PHYSICAL, u'实物'),
(VIRTUAL, u'虚拟'),
(COUPON, u'优惠券'),
)
right_id = ShortUUIDField(_(u'right_id'), max_length=32, blank=True, null=True, help_text=u'权益唯一标识', db_index=True, unique=True)
right_type = models.IntegerField(_(u'right_type'), choices=RIGHT_TYPE_TUPLE, default=VIRTUAL, help_text=u'权益类型', db_index=True)
icon = models.ImageField(_(u'icon'), upload_to=upload_path, blank=True, null=True, help_text=u'权益图标')
title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'权益名称')
subtitle = models.CharField(_(u'subtitle'), max_length=255, blank=True, null=True, help_text=u'权益二级名称')
detail = RichTextField(_(u'detail'), blank=True, null=True, help_text=u'权益详情')
level1 = models.CharField(_(u'level1'), max_length=255, blank=True, null=True, help_text=u'level1')
level2 = models.CharField(_(u'level2'), max_length=255, blank=True, null=True, help_text=u'level2')
level3 = models.CharField(_(u'level3'), max_length=255, blank=True, null=True, help_text=u'level3')
level4 = models.CharField(_(u'level4'), max_length=255, blank=True, null=True, help_text=u'level4')
level5 = models.CharField(_(u'level5'), max_length=255, blank=True, null=True, help_text=u'level5')
minlevel = models.IntegerField(_(u'minlevel'), default=0, help_text=u'权益最低会员级别')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
class Meta:
verbose_name = _(u'会员权益信息')
verbose_name_plural = _(u'会员权益信息')
def __unicode__(self):
return unicode(self.pk)
@property
def icon_path(self):
return upload_file_path(self.icon)
@property
def icon_url(self):
return upload_file_url(self.icon)
@property
def data(self):
return {
'right_id': self.right_id,
'right_type': self.right_type,
'icon': self.icon_url,
'title': self.title,
'subtitle': self.subtitle,
'detail': self.detail,
'level1': self.level1,
'level2': self.level2,
'level3': self.level3,
'level4': self.level4,
'level5': self.level5,
'minlevel': self.minlevel,
"able": True,
"left_num": 3,
"left_tip": 3,
}
class ShotTypeInfo(BaseModelMixin):
shot_type_id = ShortUUIDField(_(u'shot_type_id'), max_length=32, blank=True, null=True, help_text=u'镜头类型唯一标识', db_index=True, unique=True)
shot_type_name = models.CharField(_(u'shot_type_name'), max_length=255, blank=True, null=True, help_text=u'镜头类型名称')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
class Meta:
verbose_name = _(u'镜头类型信息')
verbose_name_plural = _(u'镜头类型信息')
def __unicode__(self):
return unicode(self.pk)
@property
def shots(self):
models = ModelInfo.objects.filter(shot_type_id=self.shot_type_id, status=True)
return [model.shot_member_data for model in models]
@property
def data(self):
return {
'type_id': self.shot_type_id,
'type_name': self.shot_type_name,
'shots': self.shots,
}
class MemberActivityInfo(BaseModelMixin):
title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'活动名称')
subtitle = models.CharField(_(u'subtitle'), max_length=255, blank=True, null=True, help_text=u'活动二级名称')
date = models.DateField(_(u'date'), blank=True, null=True, help_text=u'活动时间')
location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'活动地点')
lat = models.FloatField(_(u'lat'), default=1.0, help_text=u'纬度')
lon = models.FloatField(_(u'lon'), default=1.0, help_text=u'经度')
integral = models.IntegerField(_(u'integral'), default=0, help_text=u'会员积分')
image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'活动内容图片')
cover = models.ImageField(_(u'cover'), upload_to=upload_path, blank=True, null=True, help_text=u'活动列表图片')
is_slider = models.BooleanField(_(u'is_slider'), default=True, help_text=_(u'是否为轮播活动'), db_index=True)
slider_image = models.ImageField(_(u'slider_image'), upload_to=upload_path, blank=True, null=True, help_text=u'活动轮播图片')
content_rich_text = RichTextField(_(u'content_rich_text'), blank=True, null=True, help_text=u'活动描述')
share_img_link = models.CharField(_(u'share_img_link'), max_length=255, blank=True, null=True, help_text=u'活动图片分享')
share_h5_link = models.CharField(_(u'share_h5_link'), max_length=255, blank=True, null=True, help_text=u'活动H5分享')
position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', 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 cover_path(self):
return upload_file_path(self.cover)
@property
def cover_url(self):
return upload_file_url(self.cover)
@property
def slider_image_path(self):
return upload_file_path(self.slider_image)
@property
def slider_image_url(self):
return upload_file_url(self.slider_image)
@property
def data(self):
return {
'id': self.pk,
'title': self.title,
'subtitle': self.subtitle,
'date': tc.local_string(self.date, '%Y-%m-%d'),
'location': self.location,
'lat': self.lat,
'lon': self.lon,
'integral': self.integral,
'cover_url': self.cover_url,
'content_rich_text': self.content_rich_text,
'share_img_link': self.share_img_link,
'share_h5_link': self.share_h5_link,
'state': 0,
'is_signed': 0,
}
|