Browse Source

[IMP] Handle timezones

pull/139/head
Agathe Mollé 9 years ago
committed by Alejandro Santana
parent
commit
478ff1afba
  1. 42
      super_calendar/models/super_calendar_configurator.py

42
super_calendar/models/super_calendar_configurator.py

@ -28,6 +28,7 @@
import logging
from datetime import datetime
from pytz import timezone, utc
from mako.template import Template
from openerp import _, api, exceptions, fields, models, tools
from openerp.tools.safe_eval import safe_eval
@ -103,29 +104,31 @@ class SuperCalendarConfigurator(models.Model):
f_date_start = line.date_start_field_id.name
f_date_stop = line.date_stop_field_id.name
f_duration = line.duration_field_id.name
if (f_user and
cur_rec[f_user] and
# Check if f_user refer to a res.users
if (f_user and cur_rec[f_user] and
cur_rec[f_user]._model._name != 'res.users'):
raise exceptions.ValidationError(
_("The 'User' field of record %s (%s) "
"does not refer to res.users")
% (cur_rec[f_descr], line.name.model))
if (((f_descr and cur_rec[f_descr]) or
line.description_code) and
if ((cur_rec[f_descr] or line.description_code) and
cur_rec[f_date_start]):
duration = False
if line.date_start_field_id.ttype == 'date':
date_format = tools.DEFAULT_SERVER_DATE_FORMAT
else:
date_format = tools.DEFAULT_SERVER_DATETIME_FORMAT
date_start = datetime.strptime(
cur_rec[f_date_start], date_format
)
if (not line.duration_field_id and
line.date_stop_field_id and
cur_rec[f_date_start] and
cur_rec[f_date_stop]):
if line.date_start_field_id.ttype == 'date':
date_format = tools.DEFAULT_SERVER_DATE_FORMAT
else:
date_format = tools.DEFAULT_SERVER_DATETIME_FORMAT
date_start = datetime.strptime(
cur_rec[f_date_start], date_format
)
if line.date_stop_field_id.ttype == 'date':
date_format = tools.DEFAULT_SERVER_DATE_FORMAT
else:
@ -135,8 +138,10 @@ class SuperCalendarConfigurator(models.Model):
)
date_diff = (date_stop - date_start)
duration = date_diff.total_seconds() / 3600
elif line.duration_field_id:
duration = cur_rec[f_duration]
if line.description_type != 'code':
name = cur_rec[f_descr]
else:
@ -144,9 +149,22 @@ class SuperCalendarConfigurator(models.Model):
mytemplate = Template(line.description_code)
name = mytemplate.render(**parse_dict)
# Convert date_start to UTC timezone if it is a date field
# in order to be stored in UTC in the database
if line.date_start_field_id.ttype == 'date':
tz = timezone(self._context.get('tz')
or self.env.user.tz
or 'UTC')
local_date_start = tz.localize(date_start)
utc_date_start = local_date_start.astimezone(utc)
date_start = datetime.strftime(
utc_date_start,
tools.DEFAULT_SERVER_DATETIME_FORMAT
)
super_calendar_values = {
'name': name,
'date_start': cur_rec[f_date_start],
'date_start': date_start,
'duration': duration,
'user_id': (f_user and cur_rec[f_user].id),
'configurator_id': self.id,

Loading…
Cancel
Save