+        (VIRTUAL, u'虚拟'),
186
+        (COUPON, u'优惠券'),
187
+    )
188
+
189
+    coupon_id = ShortUUIDField(_(u'coupon_id'), max_length=32, blank=True, null=True, help_text=u'券唯一标识', db_index=True, unique=True)
190
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
191
+
192
+    active_at = models.DateTimeField(_(u'active_at'), blank=True, null=True, help_text=_(u'生效时间'))
193
+    expire_at = models.DateTimeField(_(u'expire_at'), blank=True, null=True, help_text=_(u'过期时间'))
194
+
195
+    right_id = models.CharField(_(u'right_id'), max_length=32, blank=True, null=True, help_text=u'权益唯一标识', db_index=True)
196
+    right_type = models.IntegerField(_(u'right_type'), choices=RIGHT_TYPE_TUPLE, default=VIRTUAL, help_text=u'权益类型', db_index=True)
197
+
198
+    icon = models.ImageField(_(u'icon'), upload_to=upload_path, blank=True, null=True, help_text=u'权益图标')
199
+    title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'权益名称')
200
+    subtitle = models.CharField(_(u'subtitle'), max_length=255, blank=True, null=True, help_text=u'权益二级名称')
201
+    detail = RichTextField(_(u'detail'), blank=True, null=True, help_text=u'权益详情')
202
+
203
+    level1 = models.CharField(_(u'level1'), max_length=255, blank=True, null=True, help_text=u'level1')
204
+    level2 = models.CharField(_(u'level2'), max_length=255, blank=True, null=True, help_text=u'level2')
205
+    level3 = models.CharField(_(u'level3'), max_length=255, blank=True, null=True, help_text=u'level3')
206
+    level4 = models.CharField(_(u'level4'), max_length=255, blank=True, null=True, help_text=u'level4')
207
+    level5 = models.CharField(_(u'level5'), max_length=255, blank=True, null=True, help_text=u'level5')
208
+
209
+    minlevel = models.IntegerField(_(u'minlevel'), default=0, help_text=u'权益最低会员级别')
210
+
211
+    position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
212
+
213
+    class Meta:
214
+        verbose_name = _(u'会员券信息')
215
+        verbose_name_plural = _(u'会员券信息')
216
+
217
+    def __unicode__(self):
218
+        return unicode(self.pk)
219
+
220
+    @property
221
+    def icon_path(self):
222
+        return upload_file_path(self.icon)
223
+
224
+    @property
225
+    def icon_url(self):
226
+        return upload_file_url(self.icon)
227
+
228
+    @property
229
+    def data(self):
230
+        return {
231
+            'coupon_id': self.coupon_id,
232
+            'active_at': tc.local_string(self.active_at, format='%Y%m%d'),
233
+            'expire_at': tc.local_string(self.expire_at, format='%Y%m%d'),
234
+            'right_id': self.right_id,
235
+            'right_type': self.right_type,
236
+            'icon': self.icon_url,
237
+            'title': self.title,
238
+            'subtitle': self.subtitle,
239
+            'detail': self.detail,
240
+            'level1': self.level1,
241
+            'level2': self.level2,
242
+            'level3': self.level3,
243
+            'level4': self.level4,
244
+            'level5': self.level5,
245
+            'minlevel': self.minlevel,
246
+            'able': True,
247
+            'left_num': 3,
248
+            'left_tip': 3,
175 249
         }
176 250
 
177 251
 
@@ -262,13 +336,25 @@ class MemberActivityInfo(BaseModelMixin):
262 336
         return upload_file_url(self.slider_image)
263 337
 
264 338
     @property
265
-    def data(self):
339
+    def final_state(self):
340
+        tdate = tc.local_date()
341
+        if tdate < self.date:
342
+            return u'报名中'
343
+        if tdate == self.date:
344
+            return u'活动中'
345
+        return u'已结束'
346
+
347
+    def is_signed(self, user_id):
348
+        # 是否已报名
349
+        return MemberActivitySignupInfo.objects.filter(user_id=user_id, activity_id=self.activity_id, status=True).exists()
350
+
351
+    def data(self, user_id):
266 352
         return {
267 353
             'id': self.activity_id,
268 354
             'activity_id': self.activity_id,
269 355
             'title': self.title,
270 356
             'subtitle': self.subtitle,
271
-            'date': tc.local_string(self.date, '%Y-%m-%d'),
357
+            'date': tc.local_string(self.date, format='%Y-%m-%d'),
272 358
             'city': self.city,
273 359
             'location': self.location,
274 360
             'lat': self.lat,
@@ -279,8 +365,8 @@ class MemberActivityInfo(BaseModelMixin):
279 365
             'share_img_link': self.share_img_link,
280 366
             'share_h5_link': self.share_h5_link,
281 367
             'slider_image': self.slider_image_url,
282
-            'state': 0,
283
-            'is_signed': 0,
368
+            'state': self.final_state,
369
+            'is_signed': self.is_signed(user_id),
284 370
         }
285 371
 
286 372
 

+ 1 - 1
requirements.txt

@@ -1,7 +1,7 @@
1 1
 CodeConvert==2.0.5
2 2
 Pillow==5.0.0
3 3
 StatusCode==1.0.0
4
-TimeConvert==1.5.0
4
+TimeConvert==1.5.1
5 5
 furl==2.1.0
6 6
 isoweek==1.3.3
7 7
 jsonfield==2.0.2

kodo - Gogs: Go Git Service

Geen omschrijving

0034_auto_20190620_1709.py 957B

    # -*- coding: utf-8 -*- # Generated by Django 1.11.20 on 2019-06-20 09:09 from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('mch', '0033_consumeinfosubmitloginfo_activity_id'), ] operations = [ migrations.AddField( model_name='activityinfo', name='coupon_expire_type', field=models.IntegerField(choices=[(0, '\u56fa\u5b9a\u7ed3\u675f\u65f6\u95f4'), (0, '\u53ef\u53d8\u7ed3\u675f\u65f6\u95f4')], default=0, help_text='\u7ef4\u4fee\u5238\u7c7b\u578b', verbose_name='coupon_expire_type'), ), migrations.AddField( model_name='activityinfo', name='coupon_valid_period', field=models.IntegerField(default=0, help_text='\u7ef4\u4fee\u5238\u6709\u6548\u65f6\u95f4\uff08\u5355\u4f4d\uff1a\u5929\uff09', verbose_name='coupon_valid_period'), ), ]