From 62be2c1a7a9afef7385bd3ec3c25b48a01518804 Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Thu, 24 Sep 2020 17:43:17 +0200 Subject: [PATCH] Add action to clone from UI : https://trackers.pilotsystems.net/probarreau/0931 --- .../commands/teleforma-copy-seminars.py | 10 ++-- teleforma/models/pro.py | 49 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/teleforma/management/commands/teleforma-copy-seminars.py b/teleforma/management/commands/teleforma-copy-seminars.py index d0b3940f..fb03eb67 100644 --- a/teleforma/management/commands/teleforma-copy-seminars.py +++ b/teleforma/management/commands/teleforma-copy-seminars.py @@ -26,8 +26,8 @@ class Logger: self.logger.addHandler(self.hdlr) self.logger.setLevel(logging.INFO) -class Command(BaseCommand): - help = """Copy some seminars and their content thanks to their expiry date year""" +class Command(BaseCommand): + help = """Copy some seminars and their content thanks to their expiry date year. Check 'clone_to_next_year' function from Seminar to an alternative way using admin UI.""" args = ['site_domain from_year to_year log_file'] language_code = 'fr_FR' less = ['Societes_3', 'Travail_8', 'DSS_7', 'PI_2'] @@ -50,7 +50,11 @@ class Command(BaseCommand): if seminar.expiry_date: if seminar.period == from_period and not seminar.code in self.less: clone = seminar.clone() - clone.publish_date = seminar.publish_date.replace(year=to_year) + try: + clone.publish_date = seminar.publish_date.replace(year=to_year) + except ValueError: + # probably a 29th of february + clone.publish_date = seminar.publish_date.replace(day=28, year=to_year) clone.expiry_date = seminar.expiry_date.replace(year=to_year) clone.date_forced = datetime.datetime(to_year, 1, 1) clone.period = to_period diff --git a/teleforma/models/pro.py b/teleforma/models/pro.py index ee53f2f8..81e11865 100644 --- a/teleforma/models/pro.py +++ b/teleforma/models/pro.py @@ -168,6 +168,55 @@ class Seminar(ClonableMixin, Displayable): def suggestions(self): return (list(self.suggested_seminars.all())+list(self.suggested_conferences.all()))[:3] + def clone_to_next_year(self): + """ copy the seminar for next year """ + log = "" + clone = self.clone() + from_year = self.publish_date.year + to_year = from_year + 1 + to_period, c = Period.objects.get_or_create(name=str(to_year)) + from_period, c = Period.objects.get_or_create(name=str(from_year)) + try: + clone.publish_date = self.publish_date.replace(year=to_year) + except ValueError: + # probably a 29th of february + clone.publish_date = self.publish_date.replace(day=28, year=to_year) + clone.expiry_date = self.expiry_date.replace(year=to_year) + clone.date_forced = datetime.datetime(to_year, 1, 1) + clone.period = to_period + clone.status = 1 + clone.quiz = self.quiz + clone.save() + log += 'https://' + self.site.domain + reverse('teleforma-seminar-detail', kwargs={'pk': clone.id}) + '
' + + for field in self._meta.many_to_many: + + if field.rel.to == Document: + source = getattr(self, field.attname) + destination = getattr(clone, field.attname) + for item in source.all(): + item.period = from_period + item.save() + item_clone = item.clone() + item_clone.readers = [] + item_clone.period = to_period + item_clone.save() + destination.remove(item) + destination.add(item_clone) + # print ("media cloned and assigned:", item_clone) + + elif field.rel.to == Media: + source = getattr(self, field.attname) + destination = getattr(clone, field.attname) + for item in source.all(): + destination.add(item) + + for question in self.question.all(): + question_clone = question.clone() + question_clone.seminar = clone + question_clone.save() + return log + class Meta(MetaCore): db_table = app_label + '_' + 'seminar' verbose_name = _('Seminar') -- 2.39.5