From: Yoan Le Clanche Date: Mon, 18 Mar 2024 09:41:11 +0000 (+0100) Subject: Add retraction form X-Git-Tag: 2.9.0~34 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=030d00dee9ce384c9fa3d13cd747e374e04a2665;p=teleforma.git Add retraction form --- diff --git a/teleforma/forms.py b/teleforma/forms.py index 61bcfc77..9301fb45 100644 --- a/teleforma/forms.py +++ b/teleforma/forms.py @@ -340,3 +340,10 @@ class WriteForm(PostmanWriteForm): """compute recipient if 'auto' is set""" recipients = self.cleaned_data['recipients'] return recipients + + +class RetractationForm(ModelForm): + class Meta: + model = Student + fields = ['stop_retractation'] + \ No newline at end of file diff --git a/teleforma/migrations/0027_student_stop_retractation.py b/teleforma/migrations/0027_student_stop_retractation.py new file mode 100644 index 00000000..8c274df0 --- /dev/null +++ b/teleforma/migrations/0027_student_stop_retractation.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.13 on 2024-03-14 17:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('teleforma', '0026_period_nb_script_per_session'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='stop_retractation', + field=models.BooleanField(default=False, verbose_name='Abandonne son droit de retractation'), + ), + ] diff --git a/teleforma/models/crfpa.py b/teleforma/models/crfpa.py index 405f5eb6..84046525 100644 --- a/teleforma/models/crfpa.py +++ b/teleforma/models/crfpa.py @@ -212,6 +212,7 @@ class Student(models.Model): unique=True) payment_generated = models.BooleanField(_('échances générées'), default=False) + stop_retractation = models.BooleanField('En accédant à la plateforme et à donc à son contenu, je renonce à mon droit de rétractation.', default=False) def __str__(self): try: diff --git a/teleforma/static/teleforma/css/teleforma.css b/teleforma/static/teleforma/css/teleforma.css index 68f465f2..0efb41c8 100644 --- a/teleforma/static/teleforma/css/teleforma.css +++ b/teleforma/static/teleforma/css/teleforma.css @@ -3328,4 +3328,17 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad } #content .home-text p { padding-left: 0.8em; +} + +#retractation-form { + padding: 20px; +} +#retractation-form p, #retractation-form input { + margin-left: 20px; +} +#retractation-form p { + display: flex; + flex-direction: row-reverse; + justify-content: start; + font-weight: bold; } \ No newline at end of file diff --git a/teleforma/templates/teleforma/retractation.html b/teleforma/templates/teleforma/retractation.html new file mode 100644 index 00000000..7db5f400 --- /dev/null +++ b/teleforma/templates/teleforma/retractation.html @@ -0,0 +1,24 @@ +{% extends "teleforma/courses.html" %} +{% load i18n %} +{% load teleforma_tags %} + +{% block courses %} +{% for c in all_courses %} + {% with c.course as course %} +
  • {{ course.title }}
  • + {% endwith %} + {% endfor %} +{% endblock courses %} + +{% block course %} + +
    + {% csrf_token %} + {{ form.as_p }} + + +
    +{% endblock course %} + +{% block chat %} +{% endblock chat %} diff --git a/teleforma/urls.py b/teleforma/urls.py index 73a91d74..d2bc5ba9 100644 --- a/teleforma/urls.py +++ b/teleforma/urls.py @@ -63,7 +63,7 @@ from .views.crfpa import (AnnalsCourseView, AnnalsIEJView, AnnalsView, CRFPAProfileView, NewsItemCreate, NewsItemDelete, NewsItemList, NewsItemUpdate, ReceiptPDFView, ReceiptPDFViewDownload, RegistrationPDFView, - RegistrationPDFViewDownload, UserAddView, + RegistrationPDFViewDownload, RetractationView, UserAddView, UserCompleteView, UserLoginView, UsersExportView, UsersView, WriteView, update_training, UserAddUseYourLawOriginView) @@ -155,6 +155,9 @@ urlpatterns = [ url(r'^desk/periods/(?P.*)/courses/(?P.*)/detail/$', CourseView.as_view(), name="teleforma-desk-period-course"), + url(r'^desk/periods/(?P.*)/courses/(?P.*)/retractation/$', + RetractationView.as_view(), + name="teleforma-desk-period-course-retractation"), # Media url(r'^desk/periods/(?P.*)/medias/transcode/(?P.*)/detail/$', diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 153224e2..dc32ba72 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -596,6 +596,31 @@ class CourseView(CourseAccessMixin, DetailView): @method_decorator(access_required) def dispatch(self, *args, **kwargs): + + # redirect to a retractation page if the student has paid in the 14 last days + print(args) + print(kwargs) + student = None + # import pdb;pdb.set_trace() + try: + student = self.request.user.student.get() + except Student.DoesNotExist: + pass + if student and student.total_fees and not student.stop_retractation: + if student.total_fees: + two_week_ago = None + two_week_ago = datetime.datetime.now() - datetime.timedelta(days=14) + old_payments = student.payments.filter(date_paid__lt=two_week_ago).count() + print(old_payments) + if old_payments: + pass + # student.stop_retractation = True + # student.save() + else: + payment_in_retractation_period = student.payments.filter(date_paid__gte=two_week_ago).count() + if payment_in_retractation_period: + return HttpResponseRedirect(reverse('teleforma-desk-period-course-retractation', kwargs={'period_id': kwargs['period_id'], 'pk': kwargs['pk']})) + return super(CourseView, self).dispatch(*args, **kwargs) @jsonrpc_method('teleforma.get_course_media_urls') diff --git a/teleforma/views/crfpa.py b/teleforma/views/crfpa.py index 2105e2ce..0429e61e 100644 --- a/teleforma/views/crfpa.py +++ b/teleforma/views/crfpa.py @@ -52,7 +52,8 @@ from django.utils.decorators import method_decorator from django.utils.translation import ugettext_lazy as _ from django.views.decorators.csrf import csrf_exempt from django.views.generic.base import TemplateView, View -from django.views.generic.edit import CreateView, DeleteView, UpdateView +from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView, DeleteView, UpdateView, FormView from django.views.generic.list import ListView from postman.forms import AnonymousWriteForm from postman.views import WriteView as PostmanWriteView @@ -60,12 +61,12 @@ from xlwt import Workbook from django.conf import settings from ..decorators import access_required -from ..forms import (CorrectorForm, NewsItemForm, UserForm, WriteForm, +from ..forms import (CorrectorForm, NewsItemForm, RetractationForm, UserForm, WriteForm, get_unique_username, UserUseYourLawOriginForm) from ..models.core import Course, CourseType, Document, NamePaginator, Period from ..models.crfpa import (IEJ, Discount, NewsItem, Parameters, Payback, Payment, Profile, Student, Training, months_choices, payment_choices) -from ..views.core import (PDFTemplateResponseMixin, format_courses, +from ..views.core import (CourseAccessMixin, PDFTemplateResponseMixin, format_courses, get_courses, get_periods) from ..views.profile import ProfileView @@ -755,7 +756,6 @@ class UserAddUseYourLawOriginView(UserAddView): form_class = UserUseYourLawOriginForm - class UserCompleteView(TemplateView): template_name = 'registration/registration_complete.html' @@ -770,6 +770,29 @@ class UserCompleteView(TemplateView): return context +class RetractationView(CourseAccessMixin, DetailView, UpdateView): + + model = Course + form_class = RetractationForm + template_name = 'teleforma/retractation.html' + + def get_context_data(self, **kwargs): + context = super(RetractationView, self).get_context_data(**kwargs) + return context + + def get_form_kwargs(self): + kwargs = super(RetractationView, self).get_form_kwargs() + kwargs['instance'] = self.request.user.student.get() + return kwargs + + def post(self, request, *args, **kwargs): + return FormView.post(self, request, *args, **kwargs) + + def get_success_url(self): + return reverse_lazy('teleforma-desk-period-course', kwargs = {'pk': self.kwargs['pk'], 'period_id': self.kwargs['period_id']}) + + + class RegistrationPDFView(PDFTemplateResponseMixin, TemplateView): template_name = 'registration/registration_pdf.html'