39 lines
1.3 KiB
Python
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
|