diff --git a/models/calendar.py b/models/calendar.py
index 0e67bfb27ba10cfee2ce75056058881318c01862..e394c9ef37f0831e89960fa0e82e5c6ed6ff54e5 100644
--- a/models/calendar.py
+++ b/models/calendar.py
@@ -5,8 +5,12 @@ import pytz
 from datetime import timedelta
 
 from odoo import models, fields, api
+from odoo.fields import Date
+from odoo.tools import pycompat
 from odoo.exceptions import UserError, ValidationError
 
+from odoo.addons.calendar.models.calendar import calendar_id2real_id
+
 
 class CGScopAttendee(models.Model):
     _inherit = 'calendar.attendee'
@@ -340,3 +344,90 @@ class CGScopCalendar(models.Model):
                     'default_ur_financial_system_id': event.ur_financial_system_id.id,
                 },
             }
+
+    # ------------------------------------------------------
+    # Override ORM
+    # ------------------------------------------------------
+    @api.multi
+    def read(self, fields=None, load='_classic_read'):
+        """ Surcharge la fonction read de calendar pour gérer le transfert des
+            lignes de temps sur les virtual events.
+
+            Ajoute le calcul de la valeur du champs 'is_tansfered' dans la
+            boucle 'for calendar_id, real_id in select'
+        """
+
+        if not fields:
+            fields = list(self._fields)
+        fields2 = fields and fields[:]
+        EXTRAFIELDS = ('privacy', 'user_id', 'duration', 'allday', 'start', 'rrule')
+        for f in EXTRAFIELDS:
+            if fields and (f not in fields):
+                fields2.append(f)
+
+        select = [(x, calendar_id2real_id(x)) for x in self.ids]
+        real_events = self.browse([real_id for calendar_id, real_id in select])
+        real_data = super(CGScopCalendar, real_events).read(fields=fields2, load=load)
+        real_data = dict((d['id'], d) for d in real_data)
+        # print("real_data")
+        # print(real_data)
+        # print(real_events)
+        # print(select)
+        result = []
+        for calendar_id, real_id in select:
+            if not real_data.get(real_id):
+                continue
+            res = real_data[real_id].copy()
+            ls = calendar_id2real_id(calendar_id, with_date=res and res.get('duration', 0) > 0 and res.get('duration') or 1)
+            if not isinstance(ls, (pycompat.string_types, pycompat.integer_types)) and len(ls) >= 2:
+                res['start'] = ls[1]
+                res['stop'] = ls[2]
+
+                if res['allday']:
+                    res['start_date'] = ls[1]
+                    res['stop_date'] = ls[2]
+                else:
+                    res['start_datetime'] = ls[1]
+                    res['stop_datetime'] = ls[2]
+
+                if 'display_time' in fields:
+                    res['display_time'] = self._get_display_time(ls[1], ls[2], res['duration'], res['allday'])
+
+                attendee = self.env['calendar.attendee'].search([
+                    ('event_id', '=', ls[0]),
+                    ('partner_id', '=', self.env.user.partner_id.id)])
+                # l'attendee a des feuilles de temps liées à la même date
+                if (attendee.timesheet_ids
+                        and attendee.timesheet_ids.filtered(
+                            lambda t: t.date == Date.to_date(ls[1]))):
+                    res['is_transfered'] = True
+                else:
+                    res['is_transfered'] = False
+
+            res['id'] = calendar_id
+            result.append(res)
+
+        for r in result:
+            if r['user_id']:
+                user_id = type(r['user_id']) in (tuple, list) and r['user_id'][0] or r['user_id']
+                partner_id = self.env.user.partner_id.id
+                if user_id == self.env.user.id or partner_id in r.get("partner_ids", []):
+                    continue
+            if r['privacy'] == 'private':
+                for f in r:
+                    recurrent_fields = self._get_recurrent_fields()
+                    public_fields = list(set(recurrent_fields + ['id', 'allday', 'start', 'stop', 'display_start', 'display_stop', 'duration', 'user_id', 'state', 'interval', 'count', 'recurrent_id_date', 'rrule']))
+                    if f not in public_fields:
+                        if isinstance(r[f], list):
+                            r[f] = []
+                        else:
+                            r[f] = False
+                    if f == 'name':
+                        r[f] = _('Busy')
+
+        for r in result:
+            for k in EXTRAFIELDS:
+                if (k in r) and (fields and (k not in fields)):
+                    del r[k]
+
+        return result