From 0956746fc8e4330943267d85e7446b4fc12f9a7c Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Tue, 8 Apr 2025 12:55:27 -0400 Subject: [PATCH] caldav_sync: fix for incorrect organizer setting Prior to this fix, the organizer on events was being incorrectly set to the database's admin user in some cases, when synchronizing an event from the CalDAV server. --- caldav_sync/__manifest__.py | 2 +- caldav_sync/models/calendar_event.py | 26 +++++++------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/caldav_sync/__manifest__.py b/caldav_sync/__manifest__.py index b44a211..fba9cf5 100644 --- a/caldav_sync/__manifest__.py +++ b/caldav_sync/__manifest__.py @@ -8,7 +8,7 @@ { "name": "CalDAV Synchronization", - "version": "18.0.0.6.2", + "version": "18.0.0.6.3", "license": "LGPL-3", "category": "Productivity", "summary": "Synchronize Odoo Calendar Events with CalDAV Servers", diff --git a/caldav_sync/models/calendar_event.py b/caldav_sync/models/calendar_event.py index 3e53e10..fa95ae3 100644 --- a/caldav_sync/models/calendar_event.py +++ b/caldav_sync/models/calendar_event.py @@ -856,7 +856,10 @@ class CalendarEvent(models.Model): end = component.get("dtend") and component.decoded("dtend") if isinstance(end, datetime): end = end.astimezone(utc).replace(tzinfo=None) - organizer = self._get_organizer_partner(component) + organizer_partner = self._get_organizer_partner(component) + # Get the Odoo user ID associated with the organizer partner + # If no Odoo user is associated, set to False (external) + organizer = organizer_partner.user_ids[0].id if organizer_partner.user_ids else False attendee_ids = self._get_attendee_partners(component, user.partner_id.email) values = { "name": str(component.get("summary")), @@ -869,24 +872,9 @@ class CalendarEvent(models.Model): "videocall_location": self._extract_component_text(component, "conference"), "caldav_uid": str(component.get("uid")), "partner_ids": [(6, 0, attendee_ids.ids)], - "partner_id": organizer.id if organizer else user.partner_id.id, - # For user_id: - # - If there's an organizer with an Odoo user account, use that - # - If there's an organizer but no Odoo account, set to False (external) - # - If no organizer, the current user owns it - "user_id": ( - # For debugging - ( - _logger.info("Looking up user for organizer: %s", organizer) - or _logger.info("Organizer ID: %s", organizer.id) - or self.env["res.users"] - .search([("partner_id", "=", organizer.id)], limit=1) - .id - or False - ) - if organizer - else user.id - ), + "partner_id": organizer_partner.id if organizer_partner else user.partner_id.id, + "user_id": organizer, + } return values