@@ -5,7 +5,7 @@ from django_logit import logit |
||
| 5 | 5 |
from django_response import response |
| 6 | 6 |
from paginator import pagination |
| 7 | 7 |
|
| 8 |
-from member.models import MemberActivityInfo |
|
| 8 |
+from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo |
|
| 9 | 9 |
from utils.error.errno_utils import MemberActivityStatusCode |
| 10 | 10 |
|
| 11 | 11 |
|
@@ -50,3 +50,188 @@ def activity_detail(request): |
||
| 50 | 50 |
return response(data={
|
| 51 | 51 |
'activity': act.details(user_id), |
| 52 | 52 |
}) |
| 53 |
+ |
|
| 54 |
+ |
|
| 55 |
+@logit |
|
| 56 |
+def activity_signup(request): |
|
| 57 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 58 |
+ user_id = request.POST.get('user_id', '')
|
|
| 59 |
+ activity_id = request.POST.get('activity_id', '')
|
|
| 60 |
+ fields = request.POST.get('fields', fields)
|
|
| 61 |
+ |
|
| 62 |
+ try: |
|
| 63 |
+ act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) |
|
| 64 |
+ except MemberActivityInfo.DoesNotExist: |
|
| 65 |
+ return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) |
|
| 66 |
+ |
|
| 67 |
+ MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
|
|
| 68 |
+ 'title': act.title, |
|
| 69 |
+ 'fields': fields, |
|
| 70 |
+ }) |
|
| 71 |
+ |
|
| 72 |
+ # TODO: 立即推送模版消息(报名成功,时间,地点) |
|
| 73 |
+ # TODO: 延迟(活动当天)推送模版消息(时间,地点) |
|
| 74 |
+ |
|
| 75 |
+ return response(data={
|
|
| 76 |
+ 'activity': act.data(user_id), |
|
| 77 |
+ }) |
|
| 78 |
+ |
|
| 79 |
+ |
|
| 80 |
+@logit |
|
| 81 |
+def activity_signup_detail(request): |
|
| 82 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 83 |
+ user_id = request.POST.get('user_id', '')
|
|
| 84 |
+ activity_id = request.POST.get('activity_id', '')
|
|
| 85 |
+ |
|
| 86 |
+ try: |
|
| 87 |
+ signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True) |
|
| 88 |
+ except MemberActivitySignupInfo.DoesNotExist: |
|
| 89 |
+ return response() |
|
| 90 |
+ |
|
| 91 |
+ return response(data={
|
|
| 92 |
+ 'signup_info': signup_info.data, |
|
| 93 |
+ }) |
|
| 94 |
+ |
|
| 95 |
+ |
|
| 96 |
+@logit |
|
| 97 |
+def activity_contribute_create(request): |
|
| 98 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 99 |
+ user_id = request.POST.get('user_id', '')
|
|
| 100 |
+ activity_id = request.POST.get('activity_id', '')
|
|
| 101 |
+ main_activity_id = request.POST.get('main_activity_id', '')
|
|
| 102 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
| 103 |
+ title = request.POST.get('title', '')
|
|
| 104 |
+ content = request.POST.get('content', '')
|
|
| 105 |
+ images = get_query_value(request, 'images', val_cast_type='listjson') |
|
| 106 |
+ video_url = request.POST.get('video_url', '')
|
|
| 107 |
+ |
|
| 108 |
+ # 报名字段 |
|
| 109 |
+ user_name = request.POST.get('user_name', '')
|
|
| 110 |
+ user_avatar = request.POST.get('user_avatar', '')
|
|
| 111 |
+ |
|
| 112 |
+ # 校验用户是否存在 |
|
| 113 |
+ try: |
|
| 114 |
+ UserInfo.objects.get(user_id=user_id) |
|
| 115 |
+ except UserInfo.DoesNotExist: |
|
| 116 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
| 117 |
+ |
|
| 118 |
+ MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
|
|
| 119 |
+ 'title': act.title, |
|
| 120 |
+ 'name': user_name, |
|
| 121 |
+ 'avatar': user_avatar, |
|
| 122 |
+ }) |
|
| 123 |
+ |
|
| 124 |
+ contribution = MemberActivityContributionInfo.objects.create( |
|
| 125 |
+ brand_id=brand_id, |
|
| 126 |
+ user_id=user_id, |
|
| 127 |
+ activity_id=activity_id, |
|
| 128 |
+ main_activity_id=main_activity_id, |
|
| 129 |
+ content_type=content_type, |
|
| 130 |
+ title=title, |
|
| 131 |
+ content=content, |
|
| 132 |
+ images=images, |
|
| 133 |
+ video_url=video_url, |
|
| 134 |
+ user_name=user_name, |
|
| 135 |
+ user_avatar=user_avatar, |
|
| 136 |
+ ) |
|
| 137 |
+ |
|
| 138 |
+ return response(data={
|
|
| 139 |
+ 'contribution': contribution.data, |
|
| 140 |
+ }) |
|
| 141 |
+ |
|
| 142 |
+ |
|
| 143 |
+@logit |
|
| 144 |
+def activity_contribute_update(request): |
|
| 145 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 146 |
+ user_id = request.POST.get('user_id', '')
|
|
| 147 |
+ activity_id = request.POST.get('activity_id', '')
|
|
| 148 |
+ main_activity_id = request.POST.get('main_activity_id', '')
|
|
| 149 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
| 150 |
+ contribution_id = request.POST.get('contribution_id', '')
|
|
| 151 |
+ title = request.POST.get('title', '')
|
|
| 152 |
+ content = request.POST.get('content', '')
|
|
| 153 |
+ images = get_query_value(request, 'images', val_cast_type='listjson') |
|
| 154 |
+ video_url = request.POST.get('video_url', '')
|
|
| 155 |
+ |
|
| 156 |
+ # 校验用户是否存在 |
|
| 157 |
+ try: |
|
| 158 |
+ UserInfo.objects.get(user_id=user_id) |
|
| 159 |
+ except UserInfo.DoesNotExist: |
|
| 160 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
| 161 |
+ |
|
| 162 |
+ try: |
|
| 163 |
+ signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, main_activity_id=main_activity_id, status=True) |
|
| 164 |
+ except MemberActivitySignupInfo.DoesNotExist: |
|
| 165 |
+ signup_info = None |
|
| 166 |
+ |
|
| 167 |
+ contribution, _ = MemberActivityContributionInfo.objects.update_or_create(brand_id=brand_id, user_id=user_id, activity_id=activity_id, contribution_id=contribution_id, defaults={
|
|
| 168 |
+ 'title': title, |
|
| 169 |
+ 'content': content, |
|
| 170 |
+ 'images': images, |
|
| 171 |
+ 'video_url': video_url, |
|
| 172 |
+ 'user_name': signup_info.name if signup_info else '', |
|
| 173 |
+ 'user_avatar': signup_info.final_avatar if signup_info else '', |
|
| 174 |
+ 'audit_status': 0, |
|
| 175 |
+ }) |
|
| 176 |
+ |
|
| 177 |
+ return response(data={
|
|
| 178 |
+ 'contribution': contribution.data, |
|
| 179 |
+ }) |
|
| 180 |
+ |
|
| 181 |
+ |
|
| 182 |
+@logit |
|
| 183 |
+def activity_contribute_list(request): |
|
| 184 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 185 |
+ user_id = request.POST.get('user_id', '')
|
|
| 186 |
+ main_activity_id = request.POST.get('main_activity_id', '')
|
|
| 187 |
+ activity_id = request.POST.get('activity_id', '')
|
|
| 188 |
+ content_type = get_query_value(request, 'content_type', val_cast_type='int') |
|
| 189 |
+ is_myself = get_query_value(request, 'is_myself', val_cast_type='int') |
|
| 190 |
+ audit_status = get_query_value(request, 'audit_status', val_cast_type='int') |
|
| 191 |
+ is_audit_pass = get_query_value(request, 'is_audit_pass', val_cast_type='int') |
|
| 192 |
+ is_selected = get_query_value(request, 'is_selected', val_cast_type='int') |
|
| 193 |
+ page = request.POST.get('page', 1)
|
|
| 194 |
+ num = request.POST.get('num', 20)
|
|
| 195 |
+ |
|
| 196 |
+ if main_activity_id: |
|
| 197 |
+ contributions = MemberActivityContributionInfo.objects.filter(main_activity_id=main_activity_id, status=True) |
|
| 198 |
+ else: |
|
| 199 |
+ contributions = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, status=True) |
|
| 200 |
+ |
|
| 201 |
+ if 'content_type' in request.POST: |
|
| 202 |
+ contributions = contributions.filter(content_type=content_type) |
|
| 203 |
+ if 'is_myself' in request.POST: |
|
| 204 |
+ if is_myself: |
|
| 205 |
+ contributions = contributions.filter(user_id=user_id) |
|
| 206 |
+ else: |
|
| 207 |
+ contributions = contributions.exclude(user_id=user_id) |
|
| 208 |
+ if 'audit_status' in request.POST: |
|
| 209 |
+ contributions = contributions.filter(audit_status=audit_status) |
|
| 210 |
+ if 'is_audit_pass' in request.POST: |
|
| 211 |
+ if is_audit_pass: |
|
| 212 |
+ contributions = contributions.filter(audit_status=MemberActivityContributionInfo.AUDIT_PASS) |
|
| 213 |
+ else: |
|
| 214 |
+ contributions = contributions.exclude(audit_status=MemberActivityContributionInfo.AUDIT_PASS) |
|
| 215 |
+ if 'is_selected' in request.POST: |
|
| 216 |
+ contributions = contributions.filter(is_selected=is_selected) |
|
| 217 |
+ contributions = contributions.order_by('-pk')
|
|
| 218 |
+ contributions, left = pagination(contributions, page, num) |
|
| 219 |
+ contributions = [contribution.data for contribution in contributions] |
|
| 220 |
+ |
|
| 221 |
+ return response(data={
|
|
| 222 |
+ 'contributions': contributions, |
|
| 223 |
+ 'left': left, |
|
| 224 |
+ }) |
|
| 225 |
+ |
|
| 226 |
+ |
|
| 227 |
+@logit |
|
| 228 |
+def activity_contribute_detail(request): |
|
| 229 |
+ brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
|
|
| 230 |
+ contribution_id = request.POST.get('contribution_id', '')
|
|
| 231 |
+ |
|
| 232 |
+ try: |
|
| 233 |
+ contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True) |
|
| 234 |
+ except MemberActivityContributionInfo.DoesNotExist: |
|
| 235 |
+ return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND) |
|
| 236 |
+ |
|
| 237 |
+ return response(data=contribution.data) |
@@ -0,0 +1,21 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+# Generated by Django 3.2.6 on 2023-05-15 08:07 |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations |
|
| 6 |
+import jsonfield.fields |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+class Migration(migrations.Migration): |
|
| 10 |
+ |
|
| 11 |
+ dependencies = [ |
|
| 12 |
+ ('member', '0061_alter_memberactivityinfo_feed_id'),
|
|
| 13 |
+ ] |
|
| 14 |
+ |
|
| 15 |
+ operations = [ |
|
| 16 |
+ migrations.AddField( |
|
| 17 |
+ model_name='memberactivitysignupinfo', |
|
| 18 |
+ name='fields', |
|
| 19 |
+ field=jsonfield.fields.JSONField(blank=True, default='[]', help_text='自定义报名字段', null=True, verbose_name='fields'), |
|
| 20 |
+ ), |
|
| 21 |
+ ] |
@@ -718,6 +718,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
| 718 | 718 |
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名') |
| 719 | 719 |
phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话') |
| 720 | 720 |
|
| 721 |
+ fields = JSONField(_(u'fields'), blank=True, null=True, default='[]', help_text=u'自定义报名字段') |
|
| 722 |
+ |
|
| 721 | 723 |
class Meta: |
| 722 | 724 |
verbose_name = _(u'会员活动报名信息') |
| 723 | 725 |
verbose_name_plural = _(u'会员活动报名信息') |
@@ -741,6 +743,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
| 741 | 743 |
'avatar': self.final_avatar, |
| 742 | 744 |
'name': self.name, |
| 743 | 745 |
'phone': self.phone, |
| 746 |
+ 'fields': json.loads(self.fields) if self.fields else [], |
|
| 744 | 747 |
} |
| 745 | 748 |
|
| 746 | 749 |
@property |
@@ -753,6 +756,7 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): |
||
| 753 | 756 |
'avatar': self.final_avatar, |
| 754 | 757 |
'name': self.name, |
| 755 | 758 |
'phone': self.phone, |
| 759 |
+ 'fields': json.loads(self.fields) if self.fields else [], |
|
| 756 | 760 |
} |
| 757 | 761 |
|
| 758 | 762 |
|
@@ -10,3 +10,17 @@ urlpatterns = [ |
||
| 10 | 10 |
url(r'^member/activity/list$', activity_mp_views.activity_list, name='mp_member_activity_list'), # 获取会员分区活动列表 |
| 11 | 11 |
url(r'^member/activity/detail$', activity_mp_views.activity_detail, name='mp_member_activity_detail'), # 获取会员分区活动详情 |
| 12 | 12 |
] |
| 13 |
+ |
|
| 14 |
+# activity signup |
|
| 15 |
+urlpatterns += [ |
|
| 16 |
+ url(r'^member/activity/signup$', activity_mp_views.activity_signup, name='mp_member_activity_signup'), # 会员活动报名 |
|
| 17 |
+ url(r'^member/activity/signup/detail$', activity_mp_views.activity_signup_detail, name='mp_member_activity_signup_detail'), # 获取会员活动报名信息 |
|
| 18 |
+] |
|
| 19 |
+ |
|
| 20 |
+# activity contribution |
|
| 21 |
+urlpatterns += [ |
|
| 22 |
+ url(r'^member/activity/contribute/create$', activity_mp_views.activity_contribute_create, name='mp_member_activity_contribute_create'), |
|
| 23 |
+ url(r'^member/activity/contribute/list$', activity_mp_views.activity_contribute_list, name='member_activity_contribute_list'), |
|
| 24 |
+ url(r'^member/activity/contribute/update$', activity_mp_views.activity_contribute_update, name='member_aactivity_contribute_update'), |
|
| 25 |
+ url(r'^member/activity/contribute/detail$', activity_mp_views.activity_contribute_detail, name='member_activity_contribute_detail'), |
|
| 26 |
+] |