From ff29819ca1ec6cfae8ccf0bc555ac2b7b79600aa Mon Sep 17 00:00:00 2001 From: Yingtong Li Date: Wed, 19 Jun 2019 16:26:55 +1000 Subject: [PATCH] Add associate membership registration --- .../jinja2/ssmembership/signup/complete.html | 29 +++++ .../jinja2/ssmembership/signup/index.html | 114 ++++++++++++++++++ ssmembership/urls.py | 2 + ssmembership/views.py | 53 ++++++++ 4 files changed, 198 insertions(+) create mode 100644 ssmembership/jinja2/ssmembership/signup/complete.html create mode 100644 ssmembership/jinja2/ssmembership/signup/index.html diff --git a/ssmembership/jinja2/ssmembership/signup/complete.html b/ssmembership/jinja2/ssmembership/signup/complete.html new file mode 100644 index 0000000..2f6fefb --- /dev/null +++ b/ssmembership/jinja2/ssmembership/signup/complete.html @@ -0,0 +1,29 @@ +{% extends 'ssmain/base.html' %} + +{# + Society Self-Service + Copyright © 2018-2019 Yingtong Li (RunasSudo) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +#} + +{% block title %}Subscription complete{% endblock %} + +{% block content %} +

Subscription complete

+ +

Your associate membership and email subscription have been successfully processed.

+ +

You can view and edit your membership details by logging in.

+{% endblock %} diff --git a/ssmembership/jinja2/ssmembership/signup/index.html b/ssmembership/jinja2/ssmembership/signup/index.html new file mode 100644 index 0000000..09701e7 --- /dev/null +++ b/ssmembership/jinja2/ssmembership/signup/index.html @@ -0,0 +1,114 @@ +{% extends 'ssmain/base.html' %} + +{# + Society Self-Service + Copyright © 2018-2019 Yingtong Li (RunasSudo) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +#} + +{% block title %}Subscribe to {{ settings.ORG_NAME }} Mail{% endblock %} + +{% block content %} +

Subscribe to {{ settings.ORG_NAME }} Mail

+ +

To become an associate member of {{ settings.ORG_NAME }} and subscribe to {{ settings.ORG_NAME }} Mail, please enter your details below:

+ +
+ {% if errors %} +
    + {% for error in errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %} +
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+

MUMUS Mail

+ +
+ + +
+
+ +
+ {% for group in import('sspromotions.models').Group.objects.all() %} + {% if group.subscribable %} +
+
+ + +
+
+ {% endif %} + {% endfor %} +

MUMUS Mail is personalised for you. Choose the groups that you would like to see first in each edition of MUMUS Mail.

+
+
+
+ + +
+{% endblock %} + +{% block script %} + {{ super() }} + +{% endblock %} diff --git a/ssmembership/urls.py b/ssmembership/urls.py index 81c6cfe..f20ba48 100644 --- a/ssmembership/urls.py +++ b/ssmembership/urls.py @@ -24,4 +24,6 @@ urlpatterns = [ path('onboard/signed', views.onboard_signed, name='monboard_signed'), path('onboard/search', views.onboard_search, name='monboard_search'), path('onboard/save', views.onboard_save, name='monboard_save'), + path('signup/', views.signup_index, name='signup_index'), + path('signup/save', views.signup_save, name='signup_save'), ] diff --git a/ssmembership/views.py b/ssmembership/views.py index 10d56a3..112243f 100644 --- a/ssmembership/views.py +++ b/ssmembership/views.py @@ -23,6 +23,7 @@ from django.db import transaction from django.http import HttpResponse from django.shortcuts import render, redirect from django.urls import reverse +from django.utils import timezone from . import monboard from . import models @@ -159,3 +160,55 @@ def onboard_save(request): monboard.delete_by_email(request.POST['email_orig']) return render(request, 'ssmembership/onboard/complete.html') + +def signup_index(request): + return render(request, 'ssmembership/signup/index.html', { + 'member': models.Member(), + 'years': models.Member.YEARS + }) + +def signup_save(request): + if request.method != 'POST': + return redirect(reverse('signup_index')) + + member = models.Member() + member.student_id = request.POST['student_id'] + member.email = request.POST['email'] + member.first_name = request.POST['first_name'] + member.last_name = request.POST['last_name'] + member.phone = request.POST['phone'] + member.year = int(request.POST['year']) + member.is_msa = True if request.POST['is_msa'] == '1' else '0' + member.member_type = 2 # Associate Member + + # Calculate expiration date + member.expires = timezone.now().date().replace(month=3, day=20) + member.expires = member.expires.replace(year=member.expires.year+1) + if member.expires < timezone.now().date(): # Add 1 year if after Mar 20, else add 2 years + member.expires = member.expires.replace(year=member.expires.year+1) + + errors = member.validation_problems() + + if models.Member.objects.filter(email=request.POST['email']).count() > 0: + errors.append('Member with this email already exists') + + if len(errors) > 0: + return render(request, 'ssmembership/signup/index.html', { + 'member': member, + 'years': models.Member.YEARS, + 'errors': errors + }) + + with transaction.atomic(): + member.save() + + # Update bulletin + import sspromotions.models + sspromotions.models.BulletinSubscription.set_member_subscribed(member, True if request.POST['bulletin_subscribe'] == '1' else False) + for group in sspromotions.models.Group.objects.filter(subscribable=True).all(): + if ('bulletin_group_' + str(group.id)) in request.POST and request.POST['bulletin_group_' + str(group.id)]: + group.subscribe_member(member, True) + else: + group.subscribe_member(member, False) + + return render(request, 'ssmembership/signup/complete.html')