[IMP] refactoring of readgroup method. The work is pretty much complete with this commit. Now, it correctly fills in empty group using _read_group_fill_results (orm.py)

bzr revid: ged@openerp.com-20140402073800-0ggxqfpyo2in8ozt
This commit is contained in:
Gery Debongnie 2014-04-02 09:38:00 +02:00
parent 30e787511f
commit 8c93dcbf62
1 changed files with 11 additions and 15 deletions

View File

@ -2115,7 +2115,7 @@ class BaseModel(object):
pass pass
def _read_group_fill_results(self, cr, uid, domain, groupby, groupby_list, aggregated_fields, def _read_group_fill_results(self, cr, uid, domain, groupby, remaining_groupbys, aggregated_fields,
read_group_result, read_group_order=None, context=None): read_group_result, read_group_order=None, context=None):
"""Helper method for filling in empty groups for all possible values of """Helper method for filling in empty groups for all possible values of
the field being grouped by""" the field being grouped by"""
@ -2135,8 +2135,8 @@ class BaseModel(object):
result_template = dict.fromkeys(aggregated_fields, False) result_template = dict.fromkeys(aggregated_fields, False)
result_template[groupby + '_count'] = 0 result_template[groupby + '_count'] = 0
if groupby_list and len(groupby_list) > 1: if remaining_groupbys:
result_template['__context'] = {'group_by': groupby_list[1:]} result_template['__context'] = {'group_by': remaining_groupbys}
# Merge the left_side (current results as dicts) with the right_side (all # Merge the left_side (current results as dicts) with the right_side (all
# possible values as m2o pairs). Both lists are supposed to be using the # possible values as m2o pairs). Both lists are supposed to be using the
@ -2396,10 +2396,9 @@ class BaseModel(object):
def format_result (fromquery): def format_result (fromquery):
domain_group = [dom for gb in annotated_groupbys for dom in get_domain(gb, fromquery[gb['field']])] domain_group = [dom for gb in annotated_groupbys for dom in get_domain(gb, fromquery[gb['field']])]
result = { result = { '__domain': domain_group + domain }
'__domain': domain_group + domain, if len(groupby) - len(annotated_groupbys) >= 1:
'__context': {'group_by': groupby[len(annotated_groupbys):]} result['__context'] = { 'group_by': groupby[len(annotated_groupbys):]}
}
result.update(fromquery) result.update(fromquery)
for k,v in result.iteritems(): for k,v in result.iteritems():
gb = groupby_dict.get(k) gb = groupby_dict.get(k)
@ -2408,16 +2407,13 @@ class BaseModel(object):
del result['id'] del result['id']
return result return result
result = map(format_result, data)
for gb in groupby_fields: for gb in groupby_fields:
if gb in self._group_by_full: if gb in self._group_by_full:
print "DING" result = self._read_group_fill_results(cr, uid, domain, gb, groupby[len(annotated_groupbys):],
result = map(format_result, data) aggregated_fields, result, read_group_order=order,
context=context)
# TO DO!!!!!!!!!!!!
# if first_groupby in self._group_by_full:
# result = self._read_group_fill_results(cr, uid, domain, first_groupby, groupby,
# aggregated_fields, result, read_group_order=order,
# context=context)
return result return result
def _inherits_join_add(self, current_model, parent_model_name, query): def _inherits_join_add(self, current_model, parent_model_name, query):