Skip to content
Extraits de code Groupes Projets
Valider a316de6a rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[fix] transfert lignes de temps pour recurring events

parent 9d906da5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -5,8 +5,12 @@ import pytz ...@@ -5,8 +5,12 @@ import pytz
from datetime import timedelta from datetime import timedelta
from odoo import models, fields, api from odoo import models, fields, api
from odoo.fields import Date
from odoo.tools import pycompat
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
from odoo.addons.calendar.models.calendar import calendar_id2real_id
class CGScopAttendee(models.Model): class CGScopAttendee(models.Model):
_inherit = 'calendar.attendee' _inherit = 'calendar.attendee'
...@@ -340,3 +344,90 @@ class CGScopCalendar(models.Model): ...@@ -340,3 +344,90 @@ class CGScopCalendar(models.Model):
'default_ur_financial_system_id': event.ur_financial_system_id.id, '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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter