[FORWARD] Forward port of saas-2 fixes until revision 4957 chs@openerp.com-20130930125946-exr791f83seaa9br

bzr revid: tde@openerp.com-20131003150138-dgi593kd3n0vflgp
This commit is contained in:
Thibault Delavallée 2013-10-03 17:01:38 +02:00
commit c98ff51f72
2 changed files with 56 additions and 2 deletions

View File

@ -39,7 +39,6 @@
"""
import babel.dates
import calendar
import collections
import copy
@ -54,6 +53,8 @@ import time
import traceback
import types
import babel.dates
import dateutil.parser
import psycopg2
from lxml import etree
@ -2736,7 +2737,8 @@ class BaseModel(object):
d['__context'] = {'group_by': groupby_list[1:]}
if groupby and groupby in fget:
if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
groupby_datetime = datetime.datetime.strptime(alldata[d['id']][groupby], '%Y-%m-%d')
_default = datetime.datetime(1970, 1, 1) # force starts of month
groupby_datetime = dateutil.parser.parse(alldata[d['id']][groupby], default=_default)
d[groupby] = babel.dates.format_date(
groupby_datetime, format=group_by_params.get('display_format', 'MMMM yyyy'), locale=context.get('lang', 'en_US'))
if group_by_params.get('interval') == 'month':

View File

@ -1,3 +1,4 @@
from collections import defaultdict
from openerp.tools import mute_logger
import common
@ -100,6 +101,57 @@ class TestORM(common.TransactionCase):
found = self.partner.search_read(self.cr, UID, [['name', '=', 'Does not exists']], ['name'])
self.assertEqual(len(found), 0)
def test_groupby_date(self):
partners = dict(
A='2012-11-19',
B='2012-12-17',
C='2012-12-31',
D='2013-01-07',
E='2013-01-14',
F='2013-01-28',
G='2013-02-11',
)
all_partners = []
partners_by_day = defaultdict(set)
partners_by_month = defaultdict(set)
partners_by_year = defaultdict(set)
for name, date in partners.items():
p = self.partner.create(self.cr, UID, dict(name=name, date=date))
all_partners.append(p)
partners_by_day[date].add(p)
partners_by_month[date.rsplit('-', 1)[0]].add(p)
partners_by_year[date.split('-', 1)[0]].add(p)
def read_group(interval, domain=None):
main_domain = [('id', 'in', all_partners)]
if domain:
domain = ['&'] + main_domain + domain
else:
domain = main_domain
display_format, groupby_format = {
'year': ('YYYY', 'yyyy'),
'month': ('YYYY-MM', 'yyyy-mm'),
'day': ('yyyy-MM-dd', 'yyyy-mm-dd'),
}[interval]
datetime_format = {
'date': dict(interval=interval, display_format=display_format, groupby_format=groupby_format)
}
context = dict(datetime_format=datetime_format)
rg = self.partner.read_group(self.cr, self.uid, domain, ['date'], 'date', context=context)
result = {}
for r in rg:
result[r['date']] = set(self.partner.search(self.cr, self.uid, r['__domain']))
return result
self.assertDictEqual(read_group('day'), partners_by_day)
self.assertDictEqual(read_group('month'), partners_by_month)
self.assertDictEqual(read_group('year'), partners_by_year)
class TestInherits(common.TransactionCase):
""" test the behavior of the orm for models that use _inherits;