better reporting of active/upcoming items
authorTero Marttila <terom@fixme.fi>
Mon, 15 Jul 2013 03:13:09 +0300
changeset 7 8202196630d3
parent 6 e821a59bf3a7
child 8 5c8a19fa6a29
better reporting of active/upcoming items
qrurls/admin.py
qrurls/models.py
qrurls/views.py
--- a/qrurls/admin.py	Mon Jul 15 03:02:49 2013 +0300
+++ b/qrurls/admin.py	Mon Jul 15 03:13:09 2013 +0300
@@ -15,16 +15,18 @@
     readonly_fields = (
         'qrcode_url',
         'qrcode_img',
+        'active_item',
+        'upcoming_item',
     )
     list_display = (
         'shorturl',
     )
     fieldsets = (
         (None, {
-            'fields': ('shorturl', )
+            'fields': ('shorturl', 'active_item', 'upcoming_item')
         }),
         ("QRCode", {
-            'fields': ('qrcode_url', 'qrcode_img', ),
+            'fields': ('qrcode_url', 'qrcode_img'),
         }),
     )
     inlines = (URLItemInline, )
--- a/qrurls/models.py	Mon Jul 15 03:02:49 2013 +0300
+++ b/qrurls/models.py	Mon Jul 15 03:13:09 2013 +0300
@@ -28,12 +28,20 @@
     def get_absolute_url (self) :
         return reverse('shorturl', args=[self.shorturl])
 
-    def get_item (self, now=None) :
+    def active_item(self, now=None) :
+        """Currently published URLItem."""
         if now is None :
             now = timezone.now()
 
         return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('-published')[0]
 
+    def upcoming_item(self, now=None) :
+        """Following published URLItem."""
+        if now is None :
+            now = timezone.now()
+
+        return URLItem.objects.filter(shorturl=self, published__lt=now).order_by('published')[0]
+
     def __unicode__ (self) :
         return self.shorturl
 
@@ -50,22 +58,26 @@
     def get_absolute_url (self) :
         return self.url
     
-    def published_state (self) :
+    def published_age (self) :
         now = timezone.now()
 
-        publish_date = self.published.strftime("%Y-%m-%d")
-
         if now > self.published:
             td = now - self.published
         else :
             td = self.published - now
 
-        print now, self.published, td
-
         days, seconds = td.days, td.seconds
         m, s = divmod(seconds, 60)
         h, m = divmod(m, 60)
-        age = "{h}h {m}m {s}s".format(h=h, m=m, s=s)
+
+        return days, "{h}h {m}m {s}s".format(h=h, m=m, s=s)
+
+    def published_state (self) :
+        now = timezone.now()
+
+        publish_date = self.published.strftime("%Y-%m-%d")
+
+        days, age = self.published_age()
 
         if self.published < now and days :
             return "Published ({date})".format(date=publish_date)
@@ -77,4 +89,10 @@
             return "Scheduled ({age})".format(age=age)
 
     def __unicode__ (self) :
-        return self.url
+        days, age = self.published_age()
+
+        return u"[{days}d {age}] {url}".format(
+                url=self.get_absolute_url(),
+                days=days,
+                age=age,
+        )
--- a/qrurls/views.py	Mon Jul 15 03:02:49 2013 +0300
+++ b/qrurls/views.py	Mon Jul 15 03:13:09 2013 +0300
@@ -11,7 +11,7 @@
 
     try :
         # most recent
-        url_item = url.get_item()
+        url_item = url.active_item()
     except IndexError :
         raise Http404()