bemade-addons/caldav_sync/models/calendar_recurrence.py

39 lines
1.3 KiB
Python

from odoo import models, fields, api
import uuid
import logging
_logger = logging.getLogger(__name__)
class RecurrenceRule(models.Model):
_inherit = "calendar.recurrence"
caldav_uid = fields.Char(
readonly=True,
copy=False,
)
_sql_constraints = [
("caldav_uid_unique", "UNIQUE (caldav_uid)", "caldav_uid must be unique")
]
@api.model_create_multi
def create(self, vals_list):
if not self._context.get("caldav_keep_ids"):
for vals in vals_list:
vals["caldav_uid"] = str(uuid.uuid4())
else:
for vals in vals_list:
base_event = self.env["calendar.event"].browse(vals["base_event_id"])
vals.update(caldav_uid=base_event.caldav_uid)
return super().create(vals_list)
@api.model
def _detach_events(self, events):
"""When events are detached from a recurrence, their CalDAV UID and recurrence-id
are no longer going to be valid, so we remove them from the server. They may then
be re-written to the server with their new IDs later, but we don't care about
that here."""
detached_events = super()._detach_events(events)
for event in detached_events:
event._sync_unlink_to_caldav()
return detached_events