From: Yoan Le Clanche Date: Mon, 21 Dec 2020 14:37:05 +0000 (+0100) Subject: Refactoring of suggestions into a mixin X-Git-Tag: 2.8.1-pro~181 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=157083b7483f29d75484bb92756eb690d277ccc9;p=teleforma.git Refactoring of suggestions into a mixin --- diff --git a/teleforma/models/core.py b/teleforma/models/core.py index 2be29f75..4c6542f3 100755 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -530,6 +530,26 @@ class Media(MediaBase): ordering = ['rank'] +class SuggestionsMixin(Model): + suggested_seminars = models.ManyToManyField('Seminar', related_name="%(class)ss_related", + verbose_name=_('suggested seminars'), + blank=True, null=True) + suggested_conferences = models.ManyToManyField('Conference', related_name="%(class)ss_related", + verbose_name=_('suggested conferences'), + blank=True, null=True) + + class Meta(MetaCore): + abstract = True + + @property + def visible_suggested_seminars(self): + return self.suggested_seminars.published() + + def visible_suggested_conferences(self): + return self.suggested_conferences.published().filter(date_begin__gte=datetime.datetime.today()) + + + class WebclassMixin(Model): webclass = models.BooleanField(_('Web class'), default=False) webclass_max_participants = models.IntegerField(_('Web class : nombre maxium de participants'), blank=True, null=True) @@ -677,7 +697,7 @@ class WebclassMixin(Model): # raise ValidationError("Dates are incorrect") -class Conference(Displayable, WebclassMixin): +class Conference(Displayable, WebclassMixin, SuggestionsMixin): sub_title = models.CharField(_('sub title'), max_length=1024, blank=True) public_id = models.CharField(_('public id'), max_length=255, blank=True) @@ -713,12 +733,6 @@ class Conference(Displayable, WebclassMixin): notes = generic.GenericRelation(Note) - suggested_seminars = models.ManyToManyField('Seminar', related_name="conference_suggested_seminars", - verbose_name=_('suggested seminars'), - blank=True, null=True) - suggested_conferences = models.ManyToManyField('Conference', related_name="conference_suggested_conferences", - verbose_name=_('suggested conferences'), - blank=True, null=True) additional_info = tinymce.models.HTMLField( "Informations complémentaires", help_text="Affiché sur la page formation du shop", @@ -815,10 +829,6 @@ class Conference(Displayable, WebclassMixin): url = reverse('teleforma-conference-detail', kwargs={'pk':self.id}) return "%s%s" % (settings.TELEFORMA_MASTER_HOST, url) - @property - def suggestions(self): - return (list(self.suggested_seminars.all()) + list(self.suggested_conferences.all()))[:3] - def set_as_read(self, user): """ set as read for user """ if user not in self.readers.all(): diff --git a/teleforma/models/pro.py b/teleforma/models/pro.py index ceb09c44..d15c8227 100644 --- a/teleforma/models/pro.py +++ b/teleforma/models/pro.py @@ -56,7 +56,7 @@ class SeminarType(models.Model): verbose_name = _('Seminar type') -class Seminar(ClonableMixin, Displayable): +class Seminar(ClonableMixin, Displayable, SuggestionsMixin): # title, description, keywords, dates and status are given by Displayable # status values : 1: draft, 2: published @@ -107,12 +107,6 @@ class Seminar(ClonableMixin, Displayable): date_added = models.DateTimeField(_('date added'), auto_now_add=True) date_modified = models.DateTimeField(_('date modified'), auto_now=True) date_forced = models.DateTimeField(_('date forced'), null=True, blank=True) - suggested_seminars = models.ManyToManyField('Seminar', related_name="seminar_suggested_seminars", - verbose_name=_('suggested seminars'), - blank=True, null=True) - suggested_conferences = models.ManyToManyField('Conference', related_name="seminar_suggested_conferences", - verbose_name=_('suggested conferences'), - blank=True, null=True) additional_info = tinymce.models.HTMLField( "Informations complémentaires", help_text="Affiché sur la page formation du shop",