]> git.parisson.com Git - teleforma.git/commitdiff
Cleanup and small fixes
authorYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 6 Jan 2022 17:20:14 +0000 (18:20 +0100)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 6 Jan 2022 17:20:14 +0000 (18:20 +0100)
app/settings.py
teleforma/management/commands/teleforma-message-all-seminar-users.py
teleforma/models/core.py
teleforma/models/pro.py
teleforma/templates/postman/base_folder.html
teleforma/templates/teleforma/inc/answer_list.html
teleforma/templatetags/teleforma_tags.py
teleforma/urls.py
teleforma/views/crfpa.py

index 216f7615d29414630fa40c18fc7958e995ecc03b..63825f7343167d2bca2124aa20f230630bcf1a9f 100644 (file)
@@ -18,7 +18,7 @@ TEMPLATE_DEBUG = DEBUG
 RECOVERY = True
 
 # disable to debug websocket and improve performance
-DEBUG_TOOLBAR = False
+DEBUG_TOOLBAR = True
 
 
 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
@@ -185,8 +185,8 @@ INSTALLED_APPS = (
     'jsonrpc',
     'sorl.thumbnail',
     'django_extensions',
-    'dj_pagination',
     'postman',
+    'dj_pagination',
     # 'markup_mixin',
     'notes',
     # 'timezones',
@@ -199,6 +199,7 @@ INSTALLED_APPS = (
     'multichoice',
     'true_false',
     'essay',
+
 )
 
 
index c299d8810c30294a8c78f4367af4a7a1cc723e1a..546b124bbd9b7aa4acad54d748539097c3081048 100644 (file)
@@ -1,20 +1,15 @@
 from optparse import make_option
 from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
+from django.contrib.sites.models import Site
+from django.core.management.base import BaseCommand
 from django.contrib.auth.models import User
-from django.contrib.auth.forms import PasswordResetForm
-from django.contrib.auth.tokens import default_token_generator
-from django.template.defaultfilters import slugify
 from django.template.loader import render_to_string
-from django.core.mail import send_mail, mail_admins
 from django.utils import translation
+from postman.models import Message
 
 from teleforma.views.pro import get_seminar_delta
-from teleforma.models import *
-import logging
 import datetime
-from postman.models import *
-from postman.utils import email_visitor, notify_user
+from postman.utils import notify_user
 from teleforma.context_processors import seminar_validated
 
 
@@ -72,5 +67,6 @@ class Command(BaseCommand):
                     mess.save()
 
                     if not settings.DEBUG:
-                        notify_user(mess, 'acceptance')
+                        site = Site.objects.all()[0]
+                        notify_user(mess, 'acceptance', site)
                 #
index 0943e50cdfc6fa095825eaa2ba4e45919cab1340..99f05e594f5fd9d36e12cd73b617a4cbfa03df6d 100755 (executable)
@@ -624,6 +624,12 @@ class Media(MediaBase):
             url = sorl_default.backend.get_thumbnail(self.poster_file, geometry).url
         return url
 
+    # TODO : return appropriate value
+    # probably need to store it in a field
+    @property
+    def approx_duration(self):
+        return Duration(seconds=100)
+
     class Meta(MetaCore):
         db_table = app_label + '_' + 'media'
         ordering = ['rank']
index 0f9c618b4296a6a50531ede67d9b1cc061c08f52..32a2e0ef68dd4f12c05726aab7ae904f40aeed22 100644 (file)
@@ -258,8 +258,8 @@ class Answer(models.Model):
     question    = models.ForeignKey(Question, related_name="answer", verbose_name=_('question'), on_delete=models.CASCADE)
     answer      = models.TextField(_('answer'))
     status      = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=2)
-    treated     = models.BooleanField(_('treated'))
-    validated   = models.BooleanField(_('validated'))
+    treated     = models.BooleanField(_('treated'), default=False)
+    validated   = models.BooleanField(_('validated'), default=False)
     date_submitted = models.DateTimeField(_('date submitted'), auto_now=True, null=True)
     date_validated = models.DateTimeField(_('date validated'), null=True)
     date_added     = models.DateTimeField(_('date added'), auto_now_add=True, null=True)
index 7426226bd2b34c24bef7e3285e3d30d184135393..d3b183c803df9647b25995db47794e19554661db 100644 (file)
@@ -20,6 +20,7 @@
 
 {% if pm_messages %}
 
+
 <div id="paginate_fix">
 {% autopaginate pm_messages %}{% paginate %}
 </div>
index 5e227a0276ce3a0e3c65c712a62410b02a98217c..bd8a8e4f120a1ae121594952829923d9905c52f7 100644 (file)
@@ -1,10 +1,11 @@
 {% load i18n %}
-{% load teleforma_tags %}
-{% load pagination_tags %}
+{% load teleforma_tags pagination_tags %}
 
-{% autopaginate object_list %}
+{% autopaginate object_list %}
 {% paginate %}
 
+{{ object_list.count }}
+
 <div id="users">
   <table class="listing" width="100%">
    <thead>
index 84414bc090e64a24bd231d343923d773aebbdff3..7d47c9163c589190bbd3d785aeff156bb544ff70 100644 (file)
@@ -251,7 +251,7 @@ def quiz_validated(seminar, user):
 def summary(text, N):
     t = text[:N]
     if not ' ' in t:
-        t = text[:N/2]
+        t = text[:int(N/2)]
     return t + '...'
 
 @register.filter
index adc4a5a0fbae6abdb91f50fda5ab9a7418af5c28..32eaed73b8dd0b5c2ff6072102418615dbd3efb6 100644 (file)
@@ -45,13 +45,12 @@ from django.contrib.auth.views import (LoginView, LogoutView,
                                        PasswordResetView)
 from django.views import static
 from teleforma.views.core import ConferenceRecordView, ConferenceView, CourseView, HelpView, MediaTranscodedView, MediaView, join_webclass
-from teleforma.views.crfpa import UserLoginView, UsersCourseView, UsersIejView, UsersTrainingView, UsersView, UsersXLSExport
+from teleforma.views.crfpa import UserLoginView, UsersCourseView, UsersIejView, UsersTrainingView, UsersView
 from teleforma.views.pro import AnswerDetailView, AnswerDetailViewTest, AnswerView, AnswersPendingView, AnswersTreatedView, QuizQuestionView, SeminarDocumentDownloadView, SeminarDocumentView, SeminarMediaView, SeminarView, SeminarsView, TestimonialDownloadView, TestimonialKnowledgeView, TestimonialListView, TestimonialPaybackView, TestimonialView, evaluation_form_detail, webclass_bbb_webhook
 from teleforma.views.profile import ProfileView
 from teleforma.views.home import HomeView
 
 htdocs_forma = os.path.dirname(__file__) + '/static/teleforma/'
-user_export = UsersXLSExport()
 profile_view = ProfileView()
 media = MediaView()
 home_view = HomeView()
@@ -134,11 +133,11 @@ urlpatterns = [
     
 
     # Questions
-    url(r'^desk/seminars/(?P<id>.*)/questions/(?P<pk>.*)/$', AnswerView.as_view(),
+    url(r'^desk/seminars/(?P<id>.*)/questions/(?P<pk>\d+)/$', AnswerView.as_view(),
         name="teleforma-question-answer"),
     url(r'^desk/answers_pending/$', AnswersPendingView.as_view(), name="teleforma-answers-pending"),
     url(r'^desk/answers_treated/$', AnswersTreatedView.as_view(), name="teleforma-answers-treated"),
-    url(r'^desk/answers/(?P<pk>.*)/$', AnswerDetailView.as_view(), name="teleforma-answer-detail"),
+    url(r'^desk/answers/(?P<pk>\d+)/$', AnswerDetailView.as_view(), name="teleforma-answer-detail"),
 
     # Evaluations
     url(r'^forms/', include('forms_builder.forms.urls')),
@@ -165,18 +164,18 @@ urlpatterns = [
     url(r'^users/(?P<username>[A-Za-z0-9@+._-]+)/profile/$', profile_view.profile_detail,
                                name="teleforma-profile-detail"),
     url(r'^users/(?P<id>.*)/login/$', UserLoginView.as_view(), name="teleforma-user-login"),
-    url(r'^users/all/export/$', user_export.all, name="teleforma-users-xls-export"),
+    url(r'^users/all/export/$', user_export.all, name="teleforma-users-xls-export"),
 
     url(r'^users/by_training/(\w+)/$', UsersTrainingView.as_view(), name="teleforma-training-users"),
-    url(r'^users/by_training/(?P<id>.*)/export/$', user_export.by_training,
-        name="teleforma-training-users-export"),
+    url(r'^users/by_training/(?P<id>.*)/export/$', user_export.by_training,
+        name="teleforma-training-users-export"),
 
     url(r'^users/by_iej/(\w+)/$', UsersIejView.as_view(), name="teleforma-iej-users"),
-    url(r'^users/by_iej/(?P<id>.*)/export/$', user_export.by_iej, name="teleforma-iej-users-export"),
+    url(r'^users/by_iej/(?P<id>.*)/export/$', user_export.by_iej, name="teleforma-iej-users-export"),
 
     url(r'^users/by_course/(\w+)/$', UsersCourseView.as_view(), name="teleforma-course-users"),
-    url(r'^users/by_course/(?P<id>.*)/export/$', user_export.by_course,
-        name="teleforma-course-users-export"),
+    url(r'^users/by_course/(?P<id>.*)/export/$', user_export.by_course,
+        name="teleforma-course-users-export"),
 
 
 # CSS+Images (FIXME: for developement only)
index 78ac0a0784d2341a2b04c3c0ab2d5535683ac833..6029d7969c35e26f490dfc7a1de2cd46b068ae52 100644 (file)
 #
 # Authors: Guillaume Pellerin <yomguy@parisson.com>
 
-
-from teleforma.views.core import *
+from django.contrib.auth import get_backends, login
+from django.contrib.auth.decorators import login_required, permission_required
+from django.contrib.auth.models import User
+from django.core.paginator import InvalidPage
+from django.shortcuts import redirect
+from django.utils.decorators import method_decorator
+from django.views.generic.base import View
+from django.views.generic.list import ListView
+from teleforma.models.core import Course, CourseType, NamePaginator
+from teleforma.models.crfpa import IEJ, Training
 
 
 def format_crfpa_courses(courses, course=None, queryset=None, types=None, admin=False):
@@ -41,11 +49,11 @@ def format_crfpa_courses(courses, course=None, queryset=None, types=None, admin=
         for c in queryset:
             if c and (c.code != 'X' or admin == True):
                 courses.append({'course': c, 'types': types.all(),
-                'date': c.date_modified, 'number': c.number})
+                                'date': c.date_modified, 'number': c.number})
     elif course:
         if course.code != 'X' or admin == True:
             courses.append({'course': course, 'types': types.all(),
-            'date': course.date_modified, 'number': course.number})
+                            'date': course.date_modified, 'number': course.number})
     return courses
 
 
@@ -61,43 +69,46 @@ def get_crfpa_courses(user, date_order=False, num_order=False):
     if professor:
         professor = user.professor.get()
         courses = format_crfpa_courses(courses, queryset=professor.courses.all(),
-                                  types=CourseType.objects.all())
+                                       types=CourseType.objects.all())
 
     elif student:
         student = user.student.get()
-        s_courses = {student.procedure:student.training.procedure,
-                           student.written_speciality:student.training.written_speciality,
-                           student.oral_speciality:student.training.oral_speciality,
-                           student.oral_1:student.training.oral_1,
-                           student.oral_2:student.training.oral_2,
-                           student.options:student.training.options,
-                        }
+        s_courses = {student.procedure: student.training.procedure,
+                     student.written_speciality: student.training.written_speciality,
+                     student.oral_speciality: student.training.oral_speciality,
+                     student.oral_1: student.training.oral_1,
+                     student.oral_2: student.training.oral_2,
+                     student.options: student.training.options,
+                     }
 
         for course in s_courses:
             courses = format_crfpa_courses(courses, course=course,
-                               types=s_courses[course])
+                                           types=s_courses[course])
 
         synthesis_note = student.training.synthesis_note
         if synthesis_note:
             courses = format_crfpa_courses(courses,
-                            queryset=Course.objects.filter(synthesis_note=True),
-                            types=synthesis_note)
+                                           queryset=Course.objects.filter(
+                                               synthesis_note=True),
+                                           types=synthesis_note)
 
         obligation = student.training.obligation
         if obligation:
             courses = format_crfpa_courses(courses,
-                            queryset=Course.objects.filter(obligation=True),
-                            types=obligation)
+                                           queryset=Course.objects.filter(
+                                               obligation=True),
+                                           types=obligation)
 
         magistral = student.training.magistral
         if magistral:
             courses = format_crfpa_courses(courses,
-                            queryset=Course.objects.filter(magistral=True),
-                            types=magistral)
+                                           queryset=Course.objects.filter(
+                                               magistral=True),
+                                           types=magistral)
 
     elif user.is_staff or user.is_superuser:
         courses = format_crfpa_courses(courses, queryset=Course.objects.all(),
-                    types=CourseType.objects, admin=True)
+                                       types=CourseType.objects, admin=True)
     else:
         courses = None
 
@@ -112,7 +123,7 @@ def get_crfpa_courses(user, date_order=False, num_order=False):
 class UsersView(ListView):
 
     model = User
-    template_name='teleforma/users.html'
+    template_name = 'teleforma/users.html'
     context_object_name = 'users'
     #paginate_by = 12
 
@@ -124,7 +135,8 @@ class UsersView(ListView):
         context['trainings'] = Training.objects.all()
         context['iejs'] = IEJ.objects.all()
         context['courses'] = Course.objects.all()
-        paginator = NamePaginator(self.object_list, on="last_name", per_page=10)
+        paginator = NamePaginator(
+            self.object_list, on="last_name", per_page=10)
         try:
             page = int(self.request.GET.get('page', '1'))
         except ValueError:
@@ -147,7 +159,8 @@ class UserLoginView(View):
     def get(self, request, id):
         user = User.objects.get(id=id)
         backend = get_backends()[0]
-        user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
+        user.backend = "%s.%s" % (
+            backend.__module__, backend.__class__.__name__)
         login(self.request, user)
         return redirect('teleforma-desk')
 
@@ -171,6 +184,7 @@ class UsersTrainingView(UsersView):
     def dispatch(self, *args, **kwargs):
         return super(UsersTrainingView, self).dispatch(*args, **kwargs)
 
+
 class UsersIejView(UsersView):
 
     def get_queryset(self):
@@ -186,6 +200,7 @@ class UsersIejView(UsersView):
     def dispatch(self, *args, **kwargs):
         return super(UsersIejView, self).dispatch(*args, **kwargs)
 
+
 class UsersCourseView(UsersView):
 
     def get_queryset(self):
@@ -201,120 +216,9 @@ class UsersCourseView(UsersView):
     def dispatch(self, *args, **kwargs):
         return super(UsersCourseView, self).dispatch(*args, **kwargs)
 
+
 def get_course_code(obj):
     if obj:
         return str(obj.code)
     else:
         return ''
-
-class UsersXLSExport(object):
-
-    first_row = 2
-
-    def export_user(self, counter, user):
-        student = Student.objects.filter(user=user)
-        if student:
-            student = Student.objects.get(user=user)
-            row = self.sheet.row(counter + self.first_row)
-            row.write(0, user.last_name)
-            row.write(1, user.first_name)
-            row.write(9, user.email)
-            row.write(2, str(student.iej))
-            code = student.training.code
-            if student.platform_only:
-                code = 'I - ' + code
-            row.write(3, str(code))
-            row.write(4, get_course_code(student.procedure))
-            row.write(5, get_course_code(student.written_speciality))
-            row.write(6, get_course_code(student.oral_speciality))
-            row.write(7, get_course_code(student.oral_1))
-            row.write(8, get_course_code(student.oral_2))
-
-            profile = Profile.objects.filter(user=user)
-            if profile:
-                profile = Profile.objects.get(user=user)
-                row.write(10, profile.address)
-                row.write(11, profile.postal_code)
-                row.write(12, profile.city)
-                row.write(13, profile.telephone)
-                row.write(14, user.date_joined.strftime("%d/%m/%Y"))
-            return counter + 1
-        else:
-            return counter
-
-    @method_decorator(permission_required('is_staff'))
-    def export(self, request):
-        self.users = self.users.order_by('last_name')
-        self.book = Workbook()
-        self.sheet = self.book.add_sheet('Etudiants')
-
-        row = self.sheet.row(0)
-        cols = [{'name':'NOM', 'width':5000},
-                {'name':'PRENOM', 'width':5000},
-                {'name':'IEJ', 'width':2500},
-                {'name':'FORMATION', 'width':6000},
-                {'name':'PROC', 'width':2500},
-                {'name':'Ecrit Spe', 'width':3000},
-                {'name':'Oral Spe', 'width':3000},
-                {'name':'ORAL 1', 'width':3000},
-                {'name':'ORAL 2', 'width':3000},
-                {'name':'MAIL', 'width':7500},
-                {'name':'ADRESSE', 'width':7500},
-                {'name':'CP', 'width':2500},
-                {'name':'VILLE', 'width':5000},
-                {'name':'TEL', 'width':5000},
-                {'name':"Date d'inscription", 'width':5000}
-                ]
-        i = 0
-        for col in cols:
-            row.write(i, col['name'])
-            self.sheet.col(i).width = col['width']
-            i += 1
-
-        counter = 0
-        for user in self.users:
-            counter = self.export_user(counter, user)
-        response = HttpResponse(mimetype="application/vnd.ms-excel")
-        response['Content-Disposition'] = 'attachment; filename=users.xls'
-        self.book.save(response)
-        return response
-
-    @method_decorator(permission_required('is_staff'))
-    def all(self, request):
-        self.users = User.objects.all()
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_training(self, request, id):
-        training = Training.objects.filter(id=id)
-        self.users = User.objects.filter(student__training__in=training)
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_iej(self, request, id):
-        iej = IEJ.objects.filter(id=id)
-        self.users = User.objects.filter(student__iej__in=iej)
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_course(self, request, id):
-        course = Course.objects.filter(id=id)
-        self.users = User.objects.filter(student__training__courses__in=course)
-        return self.export(request)
-
-    @method_decorator(login_required)
-    def profile_detail(self, request, username, template='teleforma/profile_detail.html'):
-        user = User.objects.get(username=username)
-        try:
-            profile = user.get_profile()
-        except:
-            profile = None
-        student = user.student.all()
-        payment = None
-        if student and (user.username == request.user.username or request.user.is_superuser):
-            student = user.student.get()
-            payment = student.payments.order_by('-id').all()
-            if payment:
-                payment = payment[0]
-
-        return render(request, template, {'profile' : profile, 'usr': user, 'payment':payment})