[MERGE] Fix bug 932170 - formatLang() should render using context timezone
authorOlivier Dony <odo@openerp.com>
Wed, 15 Feb 2012 14:47:27 +0000 (15:47 +0100)
committerOlivier Dony <odo@openerp.com>
Wed, 15 Feb 2012 14:47:27 +0000 (15:47 +0100)
bzr revid: odo@openerp.com-20120215144727-4vtoxdz7dk9si3wn

1  2 
openerp/report/report_sxw.py

@@@ -295,16 -292,22 +292,24 @@@ class rml_parse(object)
                  return ''
  
              date_format = self.lang_dict['date_format']
-             parse_format = DT_FORMAT
+             parse_format = DEFAULT_SERVER_DATE_FORMAT
              if date_time:
-                 value=value.split('.')[0]
+                 value = value.split('.')[0]
                  date_format = date_format + " " + self.lang_dict['time_format']
-                 parse_format = DHM_FORMAT
-             if not isinstance(value, time.struct_time):
-                 return time.strftime(date_format, time.strptime(value[:get_date_length(parse_format)], parse_format))
+                 parse_format = DEFAULT_SERVER_DATETIME_FORMAT
+             if isinstance(value, basestring):
++                # FIXME: the trimming is probably unreliable if format includes day/month names
++                #        and those would need to be translated anyway. 
+                 date = datetime.strptime(value[:get_date_length(parse_format)], parse_format)
+             elif isinstance(value, time.struct_time):
+                 date = datetime(*value[:6])
              else:
                  date = datetime(*value.timetuple()[:6])
+             if date_time:
+                 # Convert datetime values to the expected client/context timezone
+                 date = datetime_field.context_timestamp(self.cr, self.uid,
+                                                         timestamp=date,
+                                                         context=self.localcontext)
              return date.strftime(date_format)
  
          res = self.lang_dict['lang_obj'].format('%.' + str(digits) + 'f', value, grouping=grouping, monetary=monetary)