]> git.0d.be Git - panikweb.git/commitdiff
standardize week numbers on iso format
authorFrédéric Péters <fpeters@0d.be>
Wed, 4 Sep 2013 15:34:47 +0000 (17:34 +0200)
committerFrédéric Péters <fpeters@0d.be>
Wed, 4 Sep 2013 15:34:47 +0000 (17:34 +0200)
panikweb/paniktags/templatetags/paniktags.py
panikweb/utils.py [new file with mode: 0644]
panikweb/views.py
panikweb_templates/templates/program.html

index 826e63597e9715f9a0560bdbc0ed44b9df10d526..4872e1581b9e9a30a5a62136a78f43699e13a90b 100644 (file)
@@ -10,10 +10,11 @@ from django.conf import settings
 from django.db.models.query import QuerySet
 from django.utils import simplejson
 from datetime import datetime, timedelta
-from django.views.generic.dates import _date_from_string
 
 from emissions.utils import period_program
 
+from panikweb import utils
+
 register = template.Library()
 
 @register.filter(name='zip')
@@ -93,11 +94,12 @@ def metanav(context, active=None):
        }
 
 @register.inclusion_tag('includes/week.html', takes_context=True)
-def weekview(context, year=None, week=None, weekday=None, fragment= None):
-    year = year if year else datetime.today().year
-    week = week if week else datetime.today().isocalendar()[1]-1
+def weekview(context, year=None, week=None, weekday=None, fragment=None):
+    year = year if year else datetime.today().isocalendar()[0]
+    week = week if week else datetime.today().isocalendar()[1]
     weekday = weekday if weekday else datetime.today().weekday()
-    date = _date_from_string(str(year), '%Y', '1', '%w', str(week), '%W')
+
+    date = utils.tofirstdayinisoweek(year, week)
     date = datetime(*date.timetuple()[:3])
 
     program = period_program(date, date+timedelta(days=7))
diff --git a/panikweb/utils.py b/panikweb/utils.py
new file mode 100644 (file)
index 0000000..f24078a
--- /dev/null
@@ -0,0 +1,9 @@
+from datetime import datetime, timedelta
+
+def tofirstdayinisoweek(year, week):
+    # from http://stackoverflow.com/questions/5882405/get-date-from-iso-week-number-in-python
+    ret = datetime.strptime('%04d-%02d-1' % (year, week), '%Y-%W-%w')
+    if datetime(year, 1, 4).isoweekday() > 4:
+        ret -= timedelta(days=7)
+    return ret
+
index 40f9115fe92e2f14c740e218669c6687e809ef56..760c3977d9986d07954aca8da026cbd88c931057 100644 (file)
@@ -19,6 +19,8 @@ from emissions.models import Category, Emission, Episode, Diffusion, SoundFile,
 
 from emissions.utils import whatsonair, period_program
 
+from . import utils
+
 
 class EmissionMixin:
     def get_emission_context(self, emission, episode_ids=None):
@@ -109,19 +111,22 @@ class ProgramView(TemplateView):
     def get_context_data(self, year=None, week=None, **kwargs):
         context = super(ProgramView, self).get_context_data(**kwargs)
         context['sectionName'] = "Emissions"
-        schedules = Schedule.objects.select_related().order_by('datetime')
-        days = []
-        for day in range(7):
-            days.append({'schedules': [x for x in schedules if x.is_on_weekday(day+1)],
-                         'datetime': datetime(2007, 1, day+1)})
-        context['days'] = days
+
         context['weekday'] = datetime.today().weekday()
-        context['week'] = week = int(week) if week is not None else datetime.today().isocalendar()[1]-1
-        context['year'] = year = int(year) if year is not None else datetime.today().year
-        context['week_first_day'] = datetime.strptime(str(year)+' '+str(week)+' 1', '%Y %U %w')
-        context['week_last_day'] = context['week_first_day'] + timedelta(days=+6)
-        context['week_previous'] =  context['week_first_day'] + timedelta(days=-7)
-        context['week_next'] = context['week_last_day']
+
+        context['week'] = week = int(week) if week is not None else datetime.today().isocalendar()[1]
+        context['year'] = year = int(year) if year is not None else datetime.today().isocalendar()[0]
+        context['week_first_day'] = utils.tofirstdayinisoweek(year, week)
+        context['week_last_day'] = context['week_first_day'] + timedelta(days=6)
+
+        previous_week = context['week_first_day'] - timedelta(days=7)
+        context['previous_week_no'] = previous_week.isocalendar()[1]
+        context['previous_week_year'] = previous_week.isocalendar()[0]
+
+        next_week = context['week_first_day'] + timedelta(days=7)
+        context['next_week_no'] = next_week.isocalendar()[1]
+        context['next_week_year'] = next_week.isocalendar()[0]
+
         return context
 
 program = ProgramView.as_view()
index 64335a7a9e4f575c28657bb9066d1f2cc353f8fd..ac12376ca0181ecd5b4b47720aa84e0e2304b178 100644 (file)
@@ -8,10 +8,10 @@
        <div class="program ">
                <nav class="center">
                        <ul class="custom distributed">
-                               {% if week_previous %}
+                               {% if previous_week_no %}
                                <li>
                                        <a 
-                                               href="{% url 'program_week' year=week_previous|date:"Y" week=week_previous|date:"W" %}" 
+                                               href="{% url 'program_week' year=previous_week_year week=previous_week_no %}" 
                                                class="icon-chevron-sign-left"
                                                ></a>
                                </li>
@@ -19,7 +19,7 @@
                                <li>Du {{week_first_day|date:"l j N"}} au {{week_last_day|date:"l j N"}}</li>
                                <li>
                                        <a 
-                                               href="{% url 'program_week' year=week_last_day|date:"Y" week=week_last_day|date:"W" %}" 
+                                               href="{% url 'program_week' year=next_week_year week=next_week_no %}" 
                                                class="icon-chevron-sign-right"
                                                ></a>
                                </li>