Files
event-tools/event_track_calendar_event/models/event_track.py
2025-09-15 14:31:21 +02:00

99 lines
3.0 KiB
Python

# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
from odoo import Command, api, fields, models
_logger = logging.getLogger(__name__)
class EventTrack(models.Model):
_inherit = "event.track"
calendar_event_ids = fields.One2many(
"calendar.event", "event_track_id", "Time slot", copy=True
)
date = fields.Datetime(compute="_compute_date")
def _compute_date(self):
"""
Date become a field computed from first calendar event date.
"""
for event_track in self:
if event_track.calendar_event_ids:
event_track.date = event_track.calendar_event_ids.sorted(
key=lambda r: r.start
)[0].start
else:
event_track.date = None
def get_calendar_event_values(self):
"""
Return default values of calendar events.
"""
return {
# due to google calendar unexpected notifications, for the moment we
# disable attendees of calendar event
# uncomment following line to re-enable
#'partner_ids':[Command.set(self.get_calendar_event_partner_value())],
"partner_ids": [Command.set([])],
"location": self.location_id.name if self.location_id else "",
#'user_id':self.user_id.id,
"privacy": "confidential",
}
def get_calendar_event_partner_value(self):
"""
Compute list of partner ids for calendar event.
"""
# compute list of attendees
partner_ids = []
# add event track contact
if self.partner_id:
partner_ids.append(self.partner_id.id)
# add event registration attendees
partner_ids.extend(
[
registration.partner_id.id
for registration in self.event_id.registration_ids
if registration.partner_id
]
)
return partner_ids
def sync_calendar_event(self):
"""
Synchronize calendar event values with event track data.
"""
_logger.warning("sync_calendar_event...")
for track in self:
track.calendar_event_ids.with_context(no_mail_to_attendees=True).write(
track.get_calendar_event_values()
)
_logger.warning("sync_calendar_event done !")
@api.model_create_multi
def create(self, vals_list):
"""
After creation of event track synchronise calendar event values.
"""
res = super().create(vals_list)
res.sync_calendar_event()
return res
def write(self, vals):
"""
After modification of event track synchronise calendar event values.
"""
res = super().write(vals)
self.sync_calendar_event()
return res
def unlink(self):
for track in self:
for calendar_event in track.calendar_event_ids:
calendar_event.unlink()
return super().unlink()