+ (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,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
|