[IMP] changes the readgroup method to allow better control in the groupby field when it is a date/datetime (for example, it is now possible to group by week/quarter) (orm.py)

bzr revid: ged@openerp.com-20140107085800-hwyt41j3hwj1h1n8
This commit is contained in:
Gery Debongnie 2014-01-07 09:58:00 +01:00
parent 2489338a33
commit c2a0f93b9e
1 changed files with 5 additions and 5 deletions

View File

@ -2684,7 +2684,7 @@ class BaseModel(object):
'display_format': display_format,
'interval': interval,
}
qualified_groupby_field = "to_char(%s,%%s)" % qualified_groupby_field
qualified_groupby_field = "date_trunc('%s',%s)" % (interval, qualified_groupby_field)
flist = "%s as %s " % (qualified_groupby_field, groupby)
elif groupby_type == 'boolean':
qualified_groupby_field = "coalesce(%s,false)" % qualified_groupby_field
@ -2711,8 +2711,6 @@ class BaseModel(object):
gb = groupby and (' GROUP BY ' + qualified_groupby_field) or ''
from_clause, where_clause, where_clause_params = query.get_sql()
if group_by_params and group_by_params.get('groupby_format'):
where_clause_params = [group_by_params['groupby_format']] + where_clause_params + [group_by_params['groupby_format']]
where_clause = where_clause and ' WHERE ' + where_clause
limit_str = limit and ' limit %d' % limit or ''
offset_str = offset and ' offset %d' % offset or ''
@ -2749,8 +2747,10 @@ 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'):
_default = datetime.datetime(1970, 1, 1) # force starts of month
groupby_datetime = dateutil.parser.parse(alldata[d['id']][groupby], default=_default)
groupby_datetime = alldata[d['id']][groupby]
if isinstance(groupby_datetime, basestring):
_default = datetime.datetime(1970, 1, 1) # force starts of month
groupby_datetime = dateutil.parser.parse(groupby_datetime, 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':