]> git.parisson.com Git - teleforma.git/commitdiff
Add action to clone from UI : https://trackers.pilotsystems.net/probarreau/0931
authorYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 24 Sep 2020 15:43:17 +0000 (17:43 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Thu, 24 Sep 2020 15:43:17 +0000 (17:43 +0200)
teleforma/management/commands/teleforma-copy-seminars.py
teleforma/models/pro.py

index d0b3940f7b8ad872c1364536660ddb18077393a1..fb03eb67f2b618decd8af2a8301cc531fe14fd55 100644 (file)
@@ -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
index ee53f2f8ef86667cf0f4f1bb3dbf790fbb6eb4b2..81e118650430b6ad33ba194a42ad9012e23d9379 100644 (file)
@@ -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}) + '<br/>'
+
+        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')