From: yleclanche Date: Tue, 10 Sep 2019 09:08:57 +0000 (+0200) Subject: Add portrait, introduction text and "accept" checkbox to registration form X-Git-Tag: 1.4.1~5^2~12^2~14 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=afa5b3186f9a18aeeae43854a2573dd116de0cf6;p=teleforma.git Add portrait, introduction text and "accept" checkbox to registration form --- diff --git a/teleforma/admin.py b/teleforma/admin.py index a111973c..b4fd1fdf 100644 --- a/teleforma/admin.py +++ b/teleforma/admin.py @@ -249,6 +249,8 @@ class HomeAdmin(admin.ModelAdmin): form.base_fields['video'].queryset = Media.objects.filter(type='webm') return form +class ParametersAdmin(admin.ModelAdmin): + pass class NewsItemAdmin(admin.ModelAdmin): list_filter = ('deleted', 'course', 'creator') @@ -347,6 +349,7 @@ admin.site.register(Professor, ProfessorAdmin) admin.site.register(StudentGroup, StudentGroupAdmin) admin.site.register(GroupedMessage) admin.site.register(Home, HomeAdmin) +admin.site.register(Parameters, ParametersAdmin) admin.site.register(NewsItem, NewsItemAdmin) admin.site.register(AppointmentPeriod, AppointmentPeriodAdmin) # admin.site.register(AppointmentDay, AppointmentDayAdmin) diff --git a/teleforma/forms.py b/teleforma/forms.py index 998ab42e..fd66dd96 100644 --- a/teleforma/forms.py +++ b/teleforma/forms.py @@ -1,7 +1,8 @@ -from django.forms import ModelForm, ModelChoiceField +from teleforma.models import * +from django.forms import ModelForm, ModelChoiceField, BooleanField from postman.forms import WriteForm as PostmanWriteForm from postman.fields import BasicCommaSeparatedUserField -from teleforma.models import * + from registration.forms import RegistrationForm from django.utils.translation import ugettext_lazy as _ from extra_views import CreateWithInlinesView, UpdateWithInlinesView, InlineFormSet @@ -21,10 +22,11 @@ class ConferenceForm(ModelForm): class UserForm(ModelForm): captcha = CaptchaField() + accept = BooleanField() class Meta: model = User - fields = ['first_name', 'last_name', 'email', ] + fields = ['first_name', 'last_name', 'email', 'accept'] RegistrationForm.base_fields.update(UserForm.base_fields) @@ -46,7 +48,6 @@ class StudentForm(ModelForm): exclude = ['user', 'trainings', 'options'] - RegistrationForm.base_fields.update(StudentForm.base_fields) @@ -71,9 +72,10 @@ class StudentInline(InlineFormSet): model = Student can_delete = False - fields = ['level', 'iej', 'period', 'training', 'platform_only', 'procedure', + fields = ['portrait', 'level', 'iej', 'period', 'training', 'platform_only', 'procedure', 'written_speciality', 'oral_1', 'promo_code'] + def get_factory_kwargs(self): kwargs = super(StudentInline, self).get_factory_kwargs() @@ -81,6 +83,8 @@ class StudentInline(InlineFormSet): formfield = field.formfield(**kwargs) if field.name == 'period': formfield.queryset = Period.objects.filter(is_open=True) + elif field.name == 'portrait': + formfield.widget.attrs.update(accept="image/*;capture=camera") return formfield kwargs.update({ diff --git a/teleforma/models/core.py b/teleforma/models/core.py index f05927b7..3bedb087 100644 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -152,6 +152,8 @@ class Period(Model): date_exam_end = models.DateTimeField(_("date de fin d'examens"), null=True, blank=True) nb_script = models.IntegerField(_("nombre maximal de copies"), null=True, blank=True) date_close_accounts = models.DateField("date de fermeture des comptes étudiants", null = True, blank = True) + date_inscription_start = models.DateField("date d'ouverture des inscriptions", null = True, blank = True) + date_inscription_end = models.DateField("date de fermeture des inscriptions", null=True, blank=True) def __unicode__(self): return self.name diff --git a/teleforma/models/crfpa.py b/teleforma/models/crfpa.py index e57cd409..f5a3e985 100755 --- a/teleforma/models/crfpa.py +++ b/teleforma/models/crfpa.py @@ -131,6 +131,7 @@ class Student(Model): "A student profile" user = models.ForeignKey(User, related_name='student', verbose_name=_('user'), unique=True) + portrait = models.ImageField(max_length=500, upload_to='portraits/', blank=False, null=True) iej = models.ForeignKey('IEJ', related_name='student', verbose_name=_('iej'), blank=True, null=True, on_delete=models.SET_NULL) trainings = models.ManyToManyField('Training', related_name='student_trainings', verbose_name=_('trainings'), @@ -176,7 +177,8 @@ class Student(Model): fascicule = models.BooleanField(_('envoi des fascicules'), blank=True, default=False) - + + def __unicode__(self): try: return self.user.last_name + ' ' + self.user.first_name @@ -358,7 +360,25 @@ class Home(models.Model): def __unicode__(self): return self.title +class Parameters(models.Model): + """ used to store various unique parameters """ + + inscription_text = HTMLField("Texte d'inscription", blank=True) + class Meta(MetaCore): + verbose_name = "Paramètres" + verbose_name_plural = "Paramètres" + + def save(self, *args, **kwargs): + self.__class__.objects.exclude(id=self.id).delete() + super(Parameters, self).save(*args, **kwargs) + + @classmethod + def load(cls): + try: + return cls.objects.get() + except cls.DoesNotExist: + return cls() class NewsItem(models.Model): diff --git a/teleforma/templates/registration/registration_form.html b/teleforma/templates/registration/registration_form.html index 13d5b5a8..82556739 100644 --- a/teleforma/templates/registration/registration_form.html +++ b/teleforma/templates/registration/registration_form.html @@ -3,65 +3,102 @@ {% load telemeta_utils %} {% load teleforma_tags %} -{% block title %}
{% trans "Pre-registration" %} - {% description %}
{% endblock %} +{% block title %} +
{% trans "Pre-registration" %} - {% description %}
{% endblock %} {% block content %} -
-
{% csrf_token %} -

Tous les champs sont requis

- - {{ form }} - {% for formset in inlines %} - {{ formset.management_form }} - {% for form in formset %} - {{ form }} - {% endfor %} - {% endfor %} -
-

-  {% trans "Submit" %} -
-
- - +

Tous les champs sont requis

+ + + {% for field in form.visible_fields %} + {% if field.name != 'accept' %} + + + + + {% endif %} + {% endfor %} + {% for formset in inlines %} + {{ formset.management_form }} + {% for form in formset %} + {{ form }} + {% endfor %} + {% endfor %} + {% for field in form.visible_fields %} + {% if field.name == 'accept' %} + + + + + {% endif %} + {% endfor %} +
{{ field.label_tag }} + {{ field.errors }} + {{ field }} +
+ + {{ field.help_text }} + +
J'accepte les conditions générales d'inscription + {{ field.errors }} + {{ field }} +
+ + {{ field.help_text }} + +
+

+  {% trans "Submit" %} + + + + {% endblock %} diff --git a/teleforma/templates/telemeta/profile_detail.html b/teleforma/templates/telemeta/profile_detail.html index f099163b..6dc414e4 100644 --- a/teleforma/templates/telemeta/profile_detail.html +++ b/teleforma/templates/telemeta/profile_detail.html @@ -56,6 +56,7 @@
+
{% trans "First Name" %}
{{ usr.first_name }}
{% trans "Last Name" %}
{{ usr.last_name }}
{% trans "Username" %}
{{ usr.username }}
diff --git a/teleforma/views/crfpa.py b/teleforma/views/crfpa.py index 8b7da0eb..6bc069fd 100644 --- a/teleforma/views/crfpa.py +++ b/teleforma/views/crfpa.py @@ -31,6 +31,7 @@ # knowledge of the CeCILL license and that you accept its terms. # # Authors: Guillaume Pellerin +from teleforma.models.crfpa import Parameters from teleforma.models.core import Period from teleforma.views.core import * from teleforma.forms import WriteForm @@ -461,6 +462,13 @@ class UserAddView(CreateWithInlinesView): form_class = UserForm inlines = [ProfileInline, StudentInline] + def get_context_data(self, **kwargs): + context = super(UserAddView, self).get_context_data(**kwargs) + parameters = Parameters.load() + context['introduction'] = parameters.inscription_text + return context + + def forms_valid(self, form, inlines): messages.info(self.request, _("You have successfully register your account.")) first_name = form.cleaned_data['first_name'] @@ -514,7 +522,6 @@ class RegistrationPDFView(PDFTemplateResponseMixin, TemplateView): if not student.oral_2: student.oral_2 = Course.objects.get(code='X') student.save() - profile = user.profile.all()[0] if profile.city: profile.city = profile.city.upper()