Dynamic object lists.
[wolnelektury.git] / src / funding / models.py
index 8dbc711..089b875 100644 (file)
@@ -1,3 +1,4 @@
+
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -12,7 +13,7 @@ from django.template.loader import render_to_string
 from django.urls import reverse
 from django.utils.html import mark_safe
 from django.utils.timezone import utc
-from django.utils.translation import ugettext_lazy as _, override
+from django.utils.translation import gettext_lazy as _, override
 from catalogue.models import Book
 from catalogue.utils import get_random_hash
 from polls.models import Poll
@@ -69,8 +70,10 @@ class Offer(models.Model):
 
     def clear_cache(self):
         clear_cached_renders(self.top_bar)
+        clear_cached_renders(self.top_bar_2022)
         clear_cached_renders(self.list_bar)
         clear_cached_renders(self.detail_bar)
+        clear_cached_renders(self.detail_bar_2022)
         clear_cached_renders(self.status)
         clear_cached_renders(self.status_more)
 
@@ -202,7 +205,7 @@ class Offer(models.Model):
             'is_current': self.is_current(),
             'is_win': offer_sum >= self.target,
             'missing': self.target - offer_sum,
-            'percentage': 100 * offer_sum / self.target,
+            'percentage': min(100, 100 * offer_sum / self.target),
 
             'show_title': True,
             'show_title_calling': True,
@@ -243,6 +246,24 @@ class Offer(models.Model):
     def status_more(self):
         return {'offer': self}
 
+    @cached_render('funding/2022/includes/funding.html')
+    def top_bar_2022(self):
+        ctx = self.basic_info()
+        ctx.update({
+            'link': True,
+            'closeable': True,
+            'add_class': 'funding-top-header',
+        })
+        return ctx
+
+    @cached_render('funding/2022/includes/funding.html')
+    def detail_bar_2022(self):
+        ctx = self.basic_info()
+        ctx.update({
+            'show_title': False,
+        })
+        return ctx
+
 
 class Perk(models.Model):
     """ A perk offer.