From 58ff6bf52cfe4436568e7c214936e0bd0000afe2 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 27 Oct 2016 18:39:52 +0200 Subject: [PATCH] [FIX] website_blog: fix navlist date/filter/order Before this fix, the tz was ignored in the search. So the group by counter was not especially the number of blog post displayed. The month display was wrong, date_begin was localized. Start was eg (in Europe/brussels) : 10/31/2016 22:00:00. So if we don't localize this time with babel, we got October as displayed month instead of November The Archive was not sorted by year desc, now it is. Old behaviour was strange: 2015: December, Octobre 2016: December, Octobre => Year asc, Month desc --- addons/website_blog/controllers/main.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index e21696d63b2..a466dcf3701 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -4,6 +4,9 @@ import json import werkzeug import itertools +import pytz +import babel.dates +from collections import OrderedDict from odoo import http, fields, _ from odoo.addons.website.controllers.main import QueryURL @@ -29,13 +32,20 @@ class WebsiteBlog(http.Controller): (r, label) = group['post_date'] start, end = r.split('/') group['post_date'] = label - group['date_begin'] = fields.Date.to_string(self._to_date(start)) - group['date_end'] = fields.Date.to_string(self._to_date(end)) - group['month'] = self._to_date(start).strftime("%B") - group['year'] = self._to_date(start).strftime("%Y") - return {year: [m for m in months] for year, months in itertools.groupby(groups, lambda g: g['year'])} + group['date_begin'] = start + group['date_end'] = end + + locale = request.context.get('lang', 'en_US') + start = pytz.UTC.localize(fields.Datetime.from_string(start)) + tzinfo = pytz.timezone(request.context.get('tz', 'utc') or 'utc') + + group['month'] = babel.dates.format_datetime(start, format='MMMM', tzinfo=tzinfo, locale=locale) + group['year'] = babel.dates.format_datetime(start, format='YYYY', tzinfo=tzinfo, locale=locale) + + return OrderedDict((year, [m for m in months]) for year, months in itertools.groupby(groups, lambda g: g['year'])) def _to_date(self, dt): + # TODO remove me in master/saas-14 return fields.Date.from_string(dt) @http.route([