]> git.parisson.com Git - teleforma.git/commitdiff
Add retraction form
authorYoan Le Clanche <yoanl@pilotsystems.net>
Mon, 18 Mar 2024 09:41:11 +0000 (10:41 +0100)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Mon, 18 Mar 2024 09:41:11 +0000 (10:41 +0100)
teleforma/forms.py
teleforma/migrations/0027_student_stop_retractation.py [new file with mode: 0644]
teleforma/models/crfpa.py
teleforma/static/teleforma/css/teleforma.css
teleforma/templates/teleforma/retractation.html [new file with mode: 0644]
teleforma/urls.py
teleforma/views/core.py
teleforma/views/crfpa.py

index 61bcfc7718f93c49426828d44187f3a46a126884..9301fb4549e200f70b04e4ec0afd99b04d40ae0d 100644 (file)
@@ -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 (file)
index 0000000..8c274df
--- /dev/null
@@ -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'),
+        ),
+    ]
index 405f5eb61c00c27f7a0da652ca5222d820c5ed5f..84046525e74cb319fc07d4548d5591843383d7b6 100644 (file)
@@ -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:
index 68f465f224fb86ec2e5c29cb6777033d6e7197a7..0efb41c8879b014cefe11f03aa937a76d332b0b7 100644 (file)
@@ -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 (file)
index 0000000..7db5f40
--- /dev/null
@@ -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 %}
+   <li><a href="{% url 'teleforma-desk-period-course' period.id course.id %}">{{ course.title }}</a></li>
+  {% endwith %}
+ {% endfor %}
+{% endblock courses %}
+
+{% block course %}
+
+<form action="" method="POST" id="retractation-form">
+    {% csrf_token %}
+    {{ form.as_p }}
+
+    <input type="submit" value="Valider" />
+</form>
+{% endblock course %}
+
+{% block chat %}
+{% endblock chat %}
index 73a91d74a42307f8d69f965aaff614cc256f0e61..d2bc5ba9b777bbb1cadd711c97f1f5143967634a 100644 (file)
@@ -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<period_id>.*)/courses/(?P<pk>.*)/detail/$', 
         CourseView.as_view(),
         name="teleforma-desk-period-course"),
+    url(r'^desk/periods/(?P<period_id>.*)/courses/(?P<pk>.*)/retractation/$', 
+        RetractationView.as_view(),
+        name="teleforma-desk-period-course-retractation"),
 
     # Media
     url(r'^desk/periods/(?P<period_id>.*)/medias/transcode/(?P<pk>.*)/detail/$',
index 153224e2ee855cb35c98671fc415beba02142439..dc32ba72b0320a45e974c58350106754560d15dd 100644 (file)
@@ -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')
index 2105e2ce2ff889accc71719df6d3c135e1e63382..0429e61edfed6415ad8cdfc051e93e3a24ee4802 100644 (file)
@@ -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'