Distinguish new and old members

This commit is contained in:
Yohann D'ANELLO 2020-04-17 00:48:54 +02:00
parent 080510bcf2
commit 96ad5385b0
6 changed files with 51 additions and 22 deletions

View File

@ -5,7 +5,7 @@ from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Q, BooleanField from django.db.models import Q
from django.shortcuts import resolve_url, redirect from django.shortcuts import resolve_url, redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
@ -33,7 +33,6 @@ class UserCreateView(CreateView):
""" """
form_class = SignUpForm form_class = SignUpForm
success_url = reverse_lazy('registration:email_validation_sent')
template_name = 'registration/signup.html' template_name = 'registration/signup.html'
second_form = ProfileForm second_form = ProfileForm
@ -46,6 +45,7 @@ class UserCreateView(CreateView):
wei_form = WEIRegistrationForm() wei_form = WEIRegistrationForm()
del wei_form.fields["user"] del wei_form.fields["user"]
del wei_form.fields["caution_check"] del wei_form.fields["caution_check"]
del wei_form.fields["first_year"]
context["wei_form"] = wei_form context["wei_form"] = wei_form
context["wei_registration_form"] = WEISignupForm() context["wei_registration_form"] = WEISignupForm()
@ -62,6 +62,7 @@ class UserCreateView(CreateView):
return self.form_invalid(form) return self.form_invalid(form)
wei_form = None wei_form = None
self.wei = False
if "wei" in settings.INSTALLED_APPS: if "wei" in settings.INSTALLED_APPS:
wei_signup_form = WEISignupForm(self.request.POST) wei_signup_form = WEISignupForm(self.request.POST)
@ -70,10 +71,13 @@ class UserCreateView(CreateView):
wei_form = WEIRegistrationForm(self.request.POST) wei_form = WEIRegistrationForm(self.request.POST)
del wei_form.fields["user"] del wei_form.fields["user"]
del wei_form.fields["caution_check"] del wei_form.fields["caution_check"]
del wei_form.fields["first_year"]
if not wei_form.is_valid(): if not wei_form.is_valid():
return self.form_invalid(wei_form) return self.form_invalid(wei_form)
self.wei = True
# Save the user and the profile # Save the user and the profile
user = form.save(commit=False) user = form.save(commit=False)
user.is_active = False user.is_active = False
@ -87,15 +91,22 @@ class UserCreateView(CreateView):
user.profile.send_email_validation_link() user.profile.send_email_validation_link()
if wei_form is not None: if self.wei:
wei_registration = wei_form.instance wei_registration = wei_form.instance
wei_registration.user = user wei_registration.user = user
wei_registration.wei = WEIClub.objects.order_by('date_start').last() wei_registration.wei = WEIClub.objects.order_by('date_start').last()
wei_registration.caution_check = False wei_registration.caution_check = False
wei_registration.first_year = True
wei_registration.save() wei_registration.save()
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self):
if self.wei:
return reverse_lazy('registration:email_validation_sent') # TODO Load WEI survey
else:
return reverse_lazy('registration:email_validation_sent')
class UserValidateView(TemplateView): class UserValidateView(TemplateView):
""" """

View File

@ -3,7 +3,6 @@
from django import forms from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget
from .models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole from .models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole

View File

@ -7,7 +7,7 @@ from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from member.models import Role, Club, Membership from member.models import Role, Club, Membership
from note.models import NoteSpecial, MembershipTransaction from note.models import MembershipTransaction
class WEIClub(Club): class WEIClub(Club):
@ -188,6 +188,12 @@ class WEIRegistration(models.Model):
verbose_name=_("Register on the mailing list to stay informed of the art events of the campus (1 mail/week)"), verbose_name=_("Register on the mailing list to stay informed of the art events of the campus (1 mail/week)"),
) )
first_year = models.BooleanField(
default=False,
verbose_name=_("first year"),
help_text=_("Tells if the user is new in the school.")
)
information_json = models.TextField( information_json = models.TextField(
default="{}", default="{}",
verbose_name=_("registration information"), verbose_name=_("registration information"),
@ -210,13 +216,6 @@ class WEIRegistration(models.Model):
""" """
self.information_json = json.dumps(information) self.information_json = json.dumps(information)
@property
def is_first_year(self):
"""
We assume that a user is a new member if it not fully registered yet.
"""
return not self.user.profile.registration_valid
def __str__(self): def __str__(self):
return str(self.user) return str(self.user)

View File

@ -71,16 +71,13 @@ class WEIRegistrationTable(tables.Table):
}, },
) )
def render_is_first_year(self, value):
return _("yes") if value else _("no")
class Meta: class Meta:
attrs = { attrs = {
'class': 'table table-condensed table-striped table-hover' 'class': 'table table-condensed table-striped table-hover'
} }
model = WEIRegistration model = WEIRegistration
template_name = 'django_tables2/bootstrap4.html' template_name = 'django_tables2/bootstrap4.html'
fields = ('user', 'is_first_year',) fields = ('user', 'first_year',)
row_attrs = { row_attrs = {
'class': 'table-row', 'class': 'table-row',
'id': lambda record: "row-" + str(record.pk), 'id': lambda record: "row-" + str(record.pk),

View File

@ -16,7 +16,7 @@ from note.tables import HistoryTable
from permission.backends import PermissionBackend from permission.backends import PermissionBackend
from permission.views import ProtectQuerysetMixin from permission.views import ProtectQuerysetMixin
from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam, WEIRole
from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembershipForm from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembershipForm
from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable
@ -77,7 +77,10 @@ class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
context['member_list'] = membership_table context['member_list'] = membership_table
pre_registrations = WEIRegistration.objects.filter( pre_registrations = WEIRegistration.objects.filter(
PermissionBackend.filter_queryset(self.request.user, WEIRegistration, "view")).filter(membership=None) PermissionBackend.filter_queryset(self.request.user, WEIRegistration, "view")).filter(
membership=None,
wei=club
)
pre_registrations_table = WEIRegistrationTable(data=pre_registrations, prefix="pre-registration-") pre_registrations_table = WEIRegistrationTable(data=pre_registrations, prefix="pre-registration-")
pre_registrations_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1)) pre_registrations_table.paginate(per_page=20, page=self.request.GET.get('membership-page', 1))
context['pre_registrations'] = pre_registrations_table context['pre_registrations'] = pre_registrations_table
@ -258,10 +261,12 @@ class WEIRegisterView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
def get_form(self, form_class=None): def get_form(self, form_class=None):
form = super().get_form(form_class) form = super().get_form(form_class)
form.fields["user"].initial = self.request.user form.fields["user"].initial = self.request.user
del form.fields["first_year"]
return form return form
def form_valid(self, form): def form_valid(self, form):
form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"]) form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"])
form.instance.first_year = False
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self): def get_success_url(self):
@ -310,6 +315,12 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea
return context return context
def get_form(self, form_class=None):
form = super().get_form(form_class)
if WEIRegistration.objects.get(pk=self.kwargs["pk"]).first_year:
del form.fields["roles"]
return form
def form_valid(self, form): def form_valid(self, form):
""" """
Create membership, check that all is good, make transactions Create membership, check that all is good, make transactions
@ -336,7 +347,7 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea
_("This user don't have enough money to join this club, and can't have a negative balance.")) _("This user don't have enough money to join this club, and can't have a negative balance."))
return super().form_invalid(form) return super().form_invalid(form)
if not registration.caution_check and True: # TODO: Replace it with "is 2A+" if not registration.caution_check and not registration.first_year:
form.add_error('bus', _("This user didn't give her/his caution check.")) form.add_error('bus', _("This user didn't give her/his caution check."))
return super().form_invalid(form) return super().form_invalid(form)
@ -347,6 +358,13 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea
# Now, all is fine, the membership can be created. # Now, all is fine, the membership can be created.
if registration.first_year:
membership = form.instance
membership.save()
membership.refresh_from_db()
membership.roles.set(WEIRole.objects.filter(name="1A").all())
membership.save()
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self): def get_success_url(self):

View File

@ -47,6 +47,9 @@
<hr> <hr>
<dt class="col-xl-6">{% trans 'first year'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.first_year|yesno }}</dd>
<dt class="col-xl-6">{% trans 'gender'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'gender'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.gender }}</dd> <dd class="col-xl-6">{{ registration.gender }}</dd>
@ -74,8 +77,10 @@
<dt class="col-xl-6">{% trans 'Payment from Société générale' %}</dt> <dt class="col-xl-6">{% trans 'Payment from Société générale' %}</dt>
<dd class="col-xl-6">{{ registration.soge_credit|yesno }}</dd> <dd class="col-xl-6">{{ registration.soge_credit|yesno }}</dd>
{% if not registration.first_year %}
<dt class="col-xl-6">{% trans 'caution check given'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'caution check given'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.caution_check|yesno }}</dd> <dd class="col-xl-6">{{ registration.caution_check|yesno }}</dd>
{% endif %}
</dl> </dl>
</div> </div>
<div class="card-footer text-center"> <div class="card-footer text-center">
@ -115,7 +120,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if not registration.caution_check %} {% if not registration.caution_check and not registration.first_year %}
<div class="alert alert-danger"> <div class="alert alert-danger">
{% trans "The user didn't give her/his caution check." %} {% trans "The user didn't give her/his caution check." %}
</div> </div>