From fa0aa2925ff2640bf907ce5a424b09dfc74d3f06 Mon Sep 17 00:00:00 2001
From: pedrambiria <pebr@odoo.com>
Date: Thu, 22 Jun 2023 15:54:33 +0000
Subject: [PATCH] [FIX] microsoft_calendar: delete events correctly when
 reseting account

Before this commit, if you reset your microsoft callendar account and
set to remove events from Odoo, it won't remove them. The problem is
that the ('ms_universal_event_id', '!=', False) condition is not
implemented, and it can't remove the existing events.

opw-3382445

closes odoo/odoo#126674

X-original-commit: c4d8530c51e48e1f7c264b2b0c1efdab8d1fe0e6
Signed-off-by: Arnaud Joset (arj) <arj@odoo.com>
Signed-off-by: Pedram Bi Ria (pebr) <pebr@odoo.com>
---
 addons/microsoft_calendar/models/microsoft_sync.py |  6 ++++++
 .../tests/test_microsoft_event.py                  | 14 ++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/addons/microsoft_calendar/models/microsoft_sync.py b/addons/microsoft_calendar/models/microsoft_sync.py
index 49b169154fa3..c85232966092 100644
--- a/addons/microsoft_calendar/models/microsoft_sync.py
+++ b/addons/microsoft_calendar/models/microsoft_sync.py
@@ -133,6 +133,12 @@ class MicrosoftSync(models.AbstractModel):
                 if with_uid
                 else [('microsoft_id', '=', False)]
             )
+        elif operator == '!=' and not value:
+            return (
+                [('microsoft_id', 'ilike', f'{IDS_SEPARATOR}_')]
+                if with_uid
+                else [('microsoft_id', '!=', False)]
+            )
         return (
             ['|'] * (len(value) - 1) + [_domain(v) for v in value]
             if operator.lower() == 'in'
diff --git a/addons/microsoft_calendar/tests/test_microsoft_event.py b/addons/microsoft_calendar/tests/test_microsoft_event.py
index 85707688496e..88a8885c80b2 100644
--- a/addons/microsoft_calendar/tests/test_microsoft_event.py
+++ b/addons/microsoft_calendar/tests/test_microsoft_event.py
@@ -288,3 +288,17 @@ class TestMicrosoftEvent(TestCommon):
 
         # assert
         self.assertEqual(len(matched._events), 0)
+
+    def test_search_set_ms_universal_event_id(self):
+        not_synced_events = self.env['calendar.event'].search([('ms_universal_event_id', '=', False)])
+        synced_events = self.env['calendar.event'].search([('ms_universal_event_id', '!=', False)])
+
+        self.assertIn(self.simple_event, synced_events)
+        self.assertNotIn(self.simple_event, not_synced_events)
+
+        self.simple_event.ms_universal_event_id = ''
+        not_synced_events = self.env['calendar.event'].search([('ms_universal_event_id', '=', False)])
+        synced_events = self.env['calendar.event'].search([('ms_universal_event_id', '!=', False)])
+
+        self.assertNotIn(self.simple_event, synced_events)
+        self.assertIn(self.simple_event, not_synced_events)
-- 
GitLab