From d4a145dde5e8ec2c2fdef3f8ae9ad0f9d93795da Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Mon, 27 Feb 2023 16:21:51 +0100 Subject: [PATCH] Create testimonial only when timing is reached --- teleforma/migrations/0014_testimonial_sent.py | 18 +++++ teleforma/models/pro.py | 1 + .../teleforma/seminar_testimonial.html | 4 +- teleforma/views/pro.py | 69 ++++++++++++------- 4 files changed, 64 insertions(+), 28 deletions(-) create mode 100644 teleforma/migrations/0014_testimonial_sent.py diff --git a/teleforma/migrations/0014_testimonial_sent.py b/teleforma/migrations/0014_testimonial_sent.py new file mode 100644 index 00000000..f8c414de --- /dev/null +++ b/teleforma/migrations/0014_testimonial_sent.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2023-02-15 17:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('teleforma', '0013_seminarpart_index'), + ] + + operations = [ + migrations.AddField( + model_name='testimonial', + name='sent', + field=models.BooleanField(default=False, verbose_name='Envoyé par email ?'), + ), + ] diff --git a/teleforma/models/pro.py b/teleforma/models/pro.py index bc320555..a9fbddf0 100644 --- a/teleforma/models/pro.py +++ b/teleforma/models/pro.py @@ -437,6 +437,7 @@ class Testimonial(models.Model): date_added = models.DateTimeField(_('date added'), auto_now_add=True, null=True) date_modified = models.DateTimeField(_('date modified'), blank=True, null=True) title = models.CharField(_('title'), max_length=255, blank=True) + sent = models.BooleanField("Envoyé par email ?", default=False) def get_title(self): if self.date_modified: diff --git a/teleforma/templates/teleforma/seminar_testimonial.html b/teleforma/templates/teleforma/seminar_testimonial.html index 08dfba8b..224289f3 100644 --- a/teleforma/templates/teleforma/seminar_testimonial.html +++ b/teleforma/templates/teleforma/seminar_testimonial.html @@ -46,8 +46,8 @@ {% endif %} {% endif %} - {% trans "Training begin date" %} : {{ first_revision.date|date:'j F Y' }} - {% trans "Training end date" %} : {% if testimonial.date_modified %}{{ testimonial.date_modified|date:'j F Y' }}{% else %}{{ testimonial.date_added|date:'j F Y' }}{% endif %} + {% trans "Training begin date" %} : {{ first_revision.date|date:'j F Y' }} + {% trans "Training end date" %} : {% if testimonial.date_modified %}{{ testimonial.date_modified|date:'j F Y' }}{% else %}{{ testimonial.date_added|date:'j F Y' }}{% endif %} diff --git a/teleforma/views/pro.py b/teleforma/views/pro.py index 29e06211..65f62098 100644 --- a/teleforma/views/pro.py +++ b/teleforma/views/pro.py @@ -234,7 +234,7 @@ class SeminarView(SeminarAccessMixin, DetailView): context['parts'] = seminar.get_parts(user) - validated = seminar_validated(user, seminar) + validated = seminar_validated(user, seminar) and get_seminar_delta(user, seminar) >= 0 if validated: # check if testimonial exists and create it testimonials = Testimonial.objects.filter( @@ -501,7 +501,7 @@ class AnswersView(ListView): context['organization'] = organization context['date'] = answer.question.seminar.expiry_date - if seminar_validated(user, seminar): + if seminar_validated(user, seminar) and get_seminar_delta(user, seminar) >= 0: testimonial = Testimonial(user=user, seminar=seminar) now = datetime.datetime.now() if context['date'] < now: @@ -809,6 +809,44 @@ class PDFTemplateResponseMixin(TemplateResponseMixin): context['site_url'] = Site.objects.get_current().domain return context + +def get_testimonial_context(testimonial): + """ make it a stateless function so we can use it in django admin command to send testimonial pdf """ + context = {'testimonial': testimonial} + seminar = testimonial.seminar + context['seminar'] = seminar + user = testimonial.user + revisions = SeminarRevision.objects.filter( + seminar=seminar, user=user).order_by('date') + + if revisions: + context['first_revision'] = revisions[0] + + testimonials = Testimonial.objects.filter( + seminar=seminar, user=user) + if testimonials: + context['testimonial'] = testimonials[0] + + context['hours_presentiel'] = 0 + context['hours_elearning'] = seminar.duration + context['blended'] = False + if seminar.conference: + if seminar.conference.webclass and seminar.conference in user.auditor.get().conferences.all(): + context['blended'] = True + context['conference'] = seminar.conference + context['hours_presentiel'] = (seminar.duration.as_seconds() - seminar.conference.webclass_hours_complementary.as_seconds()) / 3600 + context['hours_elearning'] = seminar.conference.webclass_hours_complementary + + hours = seminar.duration.as_seconds() / 3600 + context['nb_parts'] = seminar.is_multipart and seminar.number_of_parts or 5 + context['nb_days'] = int(hours / 6) + context['nb_semi_days'] = (hours / 3 ) % 2 >= 1 and 1 or 0 + context['title'] = seminar.title + if seminar.level == "Spécialisation": + context['title'] = seminar.course.title + " - " + seminar.title + return context + + class TestimonialView(PDFTemplateResponseMixin, SeminarView): context_object_name = "seminar" @@ -821,33 +859,12 @@ class TestimonialView(PDFTemplateResponseMixin, SeminarView): context = super(TestimonialView, self).get_context_data(**kwargs) seminar = context['seminar'] - revisions = SeminarRevision.objects.filter( - seminar=seminar, user=self.request.user).order_by('date') - if revisions: - context['first_revision'] = revisions[0] - testimonials = Testimonial.objects.filter( seminar=seminar, user=self.request.user) + if testimonials: - context['testimonial'] = testimonials[0] - - context['hours_presentiel'] = 0 - context['hours_elearning'] = seminar.duration - context['blended'] = False - if seminar.conference: - if seminar.conference.webclass and seminar.conference in self.request.user.auditor.get().conferences.all(): - context['blended'] = True - context['conference'] = seminar.conference - context['hours_presentiel'] = (seminar.duration.as_seconds() - seminar.conference.webclass_hours_complementary.as_seconds()) / 3600 - context['hours_elearning'] = seminar.conference.webclass_hours_complementary - - hours = seminar.duration.as_seconds() / 3600 - context['nb_parts'] = seminar.is_multipart and seminar.number_of_parts or 5 - context['nb_days'] = int(hours / 6) - context['nb_semi_days'] = (hours / 3 ) % 2 >= 1 and 1 or 0 - context['title'] = seminar.title - if seminar.level == "Spécialisation": - context['title'] = seminar.course.title + " - " + seminar.title + testimonial = testimonials[0] + context.update(get_testimonial_context(testimonial)) return context -- 2.39.5