Xavier (Open ERP) has proposed merging 
lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo
 into lp:openobject-server with 
lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-xmo as a 
prerequisite.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo/+merge/81877

Some reformatting and refactoring (mostly variable extraction) of the datetime 
munging in read_group, to try and make the code clearer and more readable.

And stop doing string munging when we have perfectly good datetime objects to 
manipulate
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-read_group-dates-formatting-reformatting-xmo/+merge/81877
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/trunk-read_group-dates-formatting-xmo.
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py	2011-11-10 16:57:29 +0000
+++ openerp/osv/orm.py	2011-11-10 16:57:29 +0000
@@ -2463,23 +2463,25 @@
         data.sort(lambda x,y: cmp(data_ids.index(x['id']), data_ids.index(y['id'])))
 
         for d in data:
+            group_data = alldata[d['id']]
             if groupby:
-                d['__domain'] = [(groupby, '=', alldata[d['id']][groupby] or False)] + domain
+                grouping_value = group_data[groupby]
+                d['__domain'] = [(groupby, '=', grouping_value or False)] + domain
                 if not isinstance(groupby_list, (str, unicode)):
                     if groupby or not context.get('group_by_no_leaf', False):
                         d['__context'] = {'group_by': groupby_list[1:]}
-            if groupby and groupby in fget:
-                if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
-                    dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m')
-                    days = calendar.monthrange(dt.year, dt.month)[1]
-
-                    date_value = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d')
-                    d[groupby] = babel.dates.format_date(
-                        date_value, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
-                    d['__domain'] = [(groupby, '>=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-01', '%Y-%m-%d').strftime('%Y-%m-%d') or False),\
-                                     (groupby, '<=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-' + str(days), '%Y-%m-%d').strftime('%Y-%m-%d') or False)] + domain
-                del alldata[d['id']][groupby]
-            d.update(alldata[d['id']])
+
+                if groupby in fget:
+                    if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
+                        dt = datetime.datetime.strptime(grouping_value, '%Y-%m')
+                        _, month_length = calendar.monthrange(dt.year, dt.month)
+
+                        d[groupby] = babel.dates.format_date(
+                            dt, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
+                        d['__domain'] = [(groupby, '>=', grouping_value and dt.replace(day=1).strftime('%Y-%m-%d') or False),
+                                         (groupby, '<=', grouping_value and dt.replace(day=month_length).strftime('%Y-%m-%d') or False)] + domain
+                    del group_data[groupby]
+            d.update(group_data)
             del d['id']
         return data
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to