[FIX] Calendar - set tz compatible in template mail and view (from email link). now...
authorKersten Jeremy <jke@openerp.com>
Mon, 5 May 2014 10:46:11 +0000 (12:46 +0200)
committerKersten Jeremy <jke@openerp.com>
Mon, 5 May 2014 10:46:11 +0000 (12:46 +0200)
bzr revid: jke@openerp.com-20140505104611-6qwpwwslxen0bea5

addons/calendar/calendar.py
addons/calendar/calendar_data.xml
addons/calendar/controllers/main.py

index 0063b70..7f94572 100644 (file)
@@ -712,6 +712,24 @@ class calendar_event(osv.Model):
                     return attendee
         return False
 
+    def get_date_formats(self, cr, uid, context):
+        lang = context.get("lang")
+        res_lang = self.pool.get('res.lang')
+        lang_params = {}
+        if lang:
+            ids = res_lang.search(request.cr, uid, [("code", "=", lang)])
+            if ids:
+                lang_params = res_lang.read(request.cr, uid, ids[0], ["date_format", "time_format"])
+        format_date = lang_params.get("date_format", '%B-%d-%Y')
+        format_time = lang_params.get("time_format", '%I-%M %p')
+        return (format_date, format_time)
+
+    def get_display_time_tz(self, cr, uid, ids, tz=False, context=None):
+        if tz:
+            context["tz"] = tz
+        ev = self.browse(cr, uid, ids, context=context)[0]
+        return self._get_display_time(cr, uid, ev.zstart, ev.zstop, ev.duration, ev.allday, context=context)
+
     def _get_display_time(self, cr, uid, zstart, zstop, zduration, zallday, context=None):
         """
             Return date and time (from to from) based on duration with timezone in string :
@@ -724,19 +742,22 @@ class calendar_event(osv.Model):
 
         tz = context.get('tz', False)
         if not tz:  # tz can have a value False, so dont do it in the default value of get !
-            tz = pytz.timezone('UTC')
+            context['tz'] = self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['tz'])['tz']
+            tz = context['tz']
 
+        format_date, format_time = self.get_date_formats(cr, uid, context=context)
         date = fields.datetime.context_timestamp(cr, uid, datetime.strptime(zstart, tools.DEFAULT_SERVER_DATETIME_FORMAT), context=context)
         date_deadline = fields.datetime.context_timestamp(cr, uid, datetime.strptime(zstop, tools.DEFAULT_SERVER_DATETIME_FORMAT), context=context)
-        event_date = date.strftime('%B-%d-%Y')
-        display_time = date.strftime('%H-%M')
+        event_date = date.strftime(format_date)
+        display_time = date.strftime(format_time)
+
         if zallday:
             time = _("AllDay , %s") % (event_date)
         elif zduration < 24:
             duration = date + timedelta(hours=zduration)
-            time = ("%s at (%s To %s) (%s)") % (event_date, display_time, duration.strftime('%H-%M'), tz)
+            time = ("%s at (%s To %s) (%s)") % (event_date, display_time, duration.strftime(format_time), tz)
         else:
-            time = ("%s at %s To\n %s at %s (%s)") % (event_date, display_time, date_deadline.strftime('%B-%d-%Y'), date_deadline.strftime('%H-%M'), tz)
+            time = ("%s at %s To\n %s at %s (%s)") % (event_date, display_time, date_deadline.strftime(format_date), date_deadline.strftime(format_time), tz)
         return time
 
     def _compute(self, cr, uid, ids, fields, arg, context=None):
@@ -1338,7 +1359,7 @@ class calendar_event(osv.Model):
         # Used for view in controller
         invitation = {'meeting': {}, 'attendee': []}
 
-        meeting = self.browse(cr, uid, int(meeting_id), context)
+        meeting = self.browse(cr, uid, int(meeting_id), context=context)
         invitation['meeting'] = {
             'event': meeting.name,
             'where': meeting.location,
@@ -1364,7 +1385,8 @@ class calendar_event(osv.Model):
         elif interval == 'dayname':
             res = date.strftime('%A')
         elif interval == 'time':
-            res = date.strftime('%I:%M %p')
+            dummy, format_time = self.get_date_formats(cr, uid, context=context)
+            res = date.strftime(format_time)
         return res
 
     def search(self, cr, uid, args, offset=0, limit=0, order=None, context=None, count=False):
@@ -1711,6 +1733,7 @@ class ir_http(osv.AbstractModel):
 
         if error_message:
             raise BadRequest(error_message)
+
         return True
 
 
index e4e6101..a56b664 100644 (file)
                             <div style="height: 50px;text-align: left;font-size : 14px;border-collapse: separate;margin-top:10px">
                                 <strong style="margin-left:12px">Dear ${object.cn}</strong> ,<br/>
                                 <p style="margin-left:12px">The date of the meeting has been changed...<br/>
-                                The meeting created by ${object.event_id.user_id.partner_id.name} is now scheduled for : ${object.event_id.display_time}.</p>
+                                The meeting created by ${object.event_id.user_id.partner_id.name} is now scheduled for : ${object.event_id.get_display_time_tz(tz=object.partner_id.tz)}.</p>
                             </div>
                             <div style="height: auto;margin-left:12px;margin-top:30px;">
                                 <table>
index 34710f5..cb19191 100644 (file)
@@ -33,10 +33,18 @@ class meeting_invitation(http.Controller):
         registry = openerp.modules.registry.RegistryManager.get(db)
         meeting_pool = registry.get('calendar.event')
         attendee_pool = registry.get('calendar.attendee')
+        partner_pool = registry.get('res.partner')
         with registry.cursor() as cr:
-            attendee_data = meeting_pool.get_attendee(cr, openerp.SUPERUSER_ID, id)
             attendee = attendee_pool.search_read(cr, openerp.SUPERUSER_ID, [('access_token', '=', token)], [])
 
+            if attendee and attendee[0] and attendee[0].get('partner_id'):
+                partner_id = int(attendee[0].get('partner_id')[0])
+                tz = partner_pool.read(cr, openerp.SUPERUSER_ID, partner_id, ['tz'])['tz']
+            else:
+                tz = False
+
+            attendee_data = meeting_pool.get_attendee(cr, openerp.SUPERUSER_ID, id, dict(tz=tz))
+
         if attendee:
             attendee_data['current_attendee'] = attendee[0]