diff --git a/resource_booking/i18n/es.po b/resource_booking/i18n/es.po
index cc2e3b06..0acd71f6 100644
--- a/resource_booking/i18n/es.po
+++ b/resource_booking/i18n/es.po
@@ -1349,9 +1349,3 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
msgid "because you belong to the chosen resource combination:"
msgstr ""
-
-#~ msgid "Next Activity Resource Booking"
-#~ msgstr "Siguiente actividad de reserva de recursos"
-
-#~ msgid "Who requested this booking?"
-#~ msgstr "¿Quién solicitó esta reserva/cita?"
diff --git a/resource_booking/i18n/fr_FR.po b/resource_booking/i18n/fr_FR.po
index ef223482..d1986ac7 100644
--- a/resource_booking/i18n/fr_FR.po
+++ b/resource_booking/i18n/fr_FR.po
@@ -1360,12 +1360,3 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:resource_booking.message_combination_assigned
msgid "because you belong to the chosen resource combination:"
msgstr ""
-
-#~ msgid "Who requested this booking?"
-#~ msgstr "Qui a demandé cette réservation ?"
-
-#~ msgid "SMS Delivery error"
-#~ msgstr "Erreur de livraison SMS"
-
-#~ msgid "Followers (Channels)"
-#~ msgstr "Abonnés (Chaînes)"
diff --git a/resource_booking/migrations/15.0.1.4.0/post-migration.py b/resource_booking/migrations/15.0.1.4.0/post-migration.py
deleted file mode 100644
index 27678d64..00000000
--- a/resource_booking/migrations/15.0.1.4.0/post-migration.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2023 Tecnativa - Carolina Fernandez
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from openupgradelib import openupgrade
-
-
-def convert_resource_booking_partners(env):
- openupgrade.m2o_to_x2m(
- env.cr,
- env["resource.booking"],
- "resource_booking",
- "partner_ids",
- "old_partner_id",
- )
-
-
-@openupgrade.migrate()
-def migrate(env, version):
- """Put partner_id in partner_ids"""
- convert_resource_booking_partners(env)
diff --git a/resource_booking/migrations/15.0.1.4.0/pre-migration.py b/resource_booking/migrations/15.0.1.4.0/pre-migration.py
deleted file mode 100644
index 50dd4a68..00000000
--- a/resource_booking/migrations/15.0.1.4.0/pre-migration.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2023 Tecnativa - Carolina Fernandez
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-
-def migrate(env):
- env.cr.execute(
- """
- ALTER TABLE resource_booking RENAME partner_id TO old_partner_id
- """,
- )
diff --git a/resource_booking/migrations/16.0.1.0.0/pre-migration.py b/resource_booking/migrations/16.0.1.0.0/pre-migration.py
deleted file mode 100644
index b614ea3c..00000000
--- a/resource_booking/migrations/16.0.1.0.0/pre-migration.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from openupgradelib import openupgrade
-
-xmlids_spec = [
- (
- "resource_booking.menu_resource_resource",
- "resource_booking.resource_resource_menu",
- ),
- (
- "resource_booking.menu_resource_calendar",
- "resource_booking.resource_calendar_menu",
- ),
- (
- "resource_booking.menu_view_resource_calendar_leaves_search",
- "resource_booking.resource_calendar_leaves_menu",
- ),
- (
- "resource_booking.resource_booking_combination_form",
- "resource_booking.resource_booking_combination_view_form",
- ),
- (
- "resource_booking.resource_booking_type_form",
- "resource_booking.resource_booking_type_view_form",
- ),
- (
- "resource_booking.resource_booking_form",
- "resource_booking.resource_booking_view_form",
- ),
-]
-
-
-@openupgrade.migrate(use_env=False)
-def migrate(cr, version):
- openupgrade.rename_xmlids(cr, xmlids_spec)
diff --git a/resource_booking/models/res_partner.py b/resource_booking/models/res_partner.py
index 180ea2aa..4f454cfc 100644
--- a/resource_booking/models/res_partner.py
+++ b/resource_booking/models/res_partner.py
@@ -12,8 +12,12 @@ class ResPartner(models.Model):
)
def _compute_resource_booking_count(self):
- for p in self:
- p.resource_booking_count = len(p.resource_booking_ids)
+ booking_data = self.env["resource.booking"].read_group(
+ [("partner_id", "in", self.ids)], ["partner_id"], ["partner_id"]
+ )
+ data = {x["partner_id"][0]: x["partner_id_count"] for x in booking_data}
+ for record in self:
+ record.resource_booking_count = data.get(record.id, 0)
def action_view_resource_booking(self):
self.ensure_one()
diff --git a/resource_booking/models/resource_booking.py b/resource_booking/models/resource_booking.py
index d9464dbd..06400c9d 100644
--- a/resource_booking/models/resource_booking.py
+++ b/resource_booking/models/resource_booking.py
@@ -172,14 +172,6 @@ class ResourceBooking(models.Model):
tracking=True,
help="Who will attend this booking?",
)
- partner_ids = fields.Many2many(
- "res.partner",
- string="Contacts",
- store=True,
- compute="_compute_partner_ids",
- inverse="_inverse_partner_ids",
- help="E.g. multiple people in a room. Used by sale_resource_booking_period",
- )
user_id = fields.Many2one(
comodel_name="res.users",
default=lambda self: self._default_user_id(),
@@ -405,15 +397,6 @@ def _compute_stop(self):
# Either value is False: no stop date
record.stop = False
- @api.depends("partner_id")
- def _compute_partner_ids(self):
- for record in self:
- if record.partner_id:
- record.partner_ids = [(6, 0, [record.partner_id.id])]
-
- def _inverse_partner_ids(self):
- pass
-
@api.depends("meeting_id.user_id")
def _compute_user_id(self):
"""Get user from related meeting, if available."""
diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py
index 28f2dbef..595db4aa 100644
--- a/resource_booking/tests/test_backend.py
+++ b/resource_booking/tests/test_backend.py
@@ -618,7 +618,9 @@ def test_location(self):
self.assertEqual(rb.location, "Office 3")
def test_videocall_location(self):
- """Videocall location across records works as expected."""
+ """Videocall location across records works as expected.
+ We need to set dummy urls to prevent the _set_videocall_location() method
+ of calendar from doing so."""
rbt2 = self.rbt.copy({"videocall_location": "Videocall Office 2"})
rb_f = Form(self.env["resource.booking"])
rb_f.partner_ids.add(self.partner)
@@ -638,29 +640,28 @@ def test_videocall_location(self):
self.assertEqual(rb.videocall_location, "Videocall Office 2")
# Still can change it independently
with Form(rb) as rb_f:
- rb_f.videocall_location = "Videocall Office 1"
- self.assertEqual(rb.videocall_location, "Videocall Office 1")
+ rb_f.videocall_location = "https://Videocall Office 1"
+ self.assertEqual(rb.videocall_location, "https://Videocall Office 1")
self.assertEqual(rbt2.videocall_location, "Videocall Office 2")
# Schedule the booking, meeting inherits videocall location from it
with Form(rb) as rb_f:
rb_f.start = "2021-03-01 08:00:00"
self.assertEqual(rb.state, "scheduled")
- self.assertEqual(rb.videocall_location, "Videocall Office 1")
- self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 1")
- # Changing meeting videocall location changes videocall location of booking
+ self.assertEqual(rb.videocall_location, "https://Videocall Office 1")
+ self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 1")
with Form(rb.meeting_id) as meeting_f:
- meeting_f.videocall_location = "Videocall Office 2"
- self.assertEqual(rb.videocall_location, "Videocall Office 2")
- self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 2")
+ meeting_f.videocall_location = "https://Videocall Office 2"
+ self.assertEqual(rb.videocall_location, "https://Videocall Office 2")
+ self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 2")
# Changing booking videocall location changes meeting location
with Form(rb) as rb_f:
- rb_f.videocall_location = "Videocall Office 3"
- self.assertEqual(rb.meeting_id.videocall_location, "Videocall Office 3")
- self.assertEqual(rb.videocall_location, "Videocall Office 3")
+ rb_f.videocall_location = "https://Videocall Office 3"
+ self.assertEqual(rb.videocall_location, "https://Videocall Office 3")
+ self.assertEqual(rb.meeting_id.videocall_location, "https://Videocall Office 3")
# When unscheduled, it keeps videocall location untouched
rb.action_unschedule()
self.assertFalse(rb.meeting_id)
- self.assertEqual(rb.videocall_location, "Videocall Office 3")
+ self.assertEqual(rb.videocall_location, "https://Videocall Office 3")
def test_organizer_sync(self):
"""Resource booking and meeting organizers are properly synced."""
@@ -777,7 +778,7 @@ def test_suggested_and_subscribed_recipients(self):
# Requester and combination must be suggested
self.assertEqual(
rb._message_get_suggested_recipients(),
- {rb.id: [(rb.partner_id.id, "some customer", None, "Requester")]},
+ {rb.id: [(rb.partner_ids.id, "some customer", None, "Attendees")]},
)
def test_creating_rbt_has_tags(self):
diff --git a/resource_booking/tests/test_portal.py b/resource_booking/tests/test_portal.py
index 5c7939fe..273e4d02 100644
--- a/resource_booking/tests/test_portal.py
+++ b/resource_booking/tests/test_portal.py
@@ -7,33 +7,28 @@
from freezegun import freeze_time
from lxml.html import fromstring
+from odoo.tests import new_test_user, tagged
from odoo.tests.common import HttpCase
from .common import create_test_data
@freeze_time("2021-02-26 09:00:00", tick=True)
+@tagged("post_install", "-at_install")
class PortalCase(HttpCase):
- def setUp(self):
- super().setUp()
- create_test_data(self)
- self.user_portal, self.user_manager = self.env["res.users"].create(
- [
- {
- "name": "portal",
- "login": "ptl",
- "password": "ptl",
- "groups_id": [(4, self.env.ref("base.group_portal").id, 0)],
- },
- {
- "name": "manager",
- "login": "mgr",
- "password": "mgr",
- "groups_id": [
- (4, self.env.ref("resource_booking.group_manager").id, 0)
- ],
- },
- ]
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ create_test_data(cls)
+
+ cls.user_portal = new_test_user(
+ cls.env, login="ptl", password="ptl", groups="base.group_portal"
+ )
+ cls.user_manager = new_test_user(
+ cls.env,
+ login="mgr",
+ password="mgr",
+ groups="resource_booking.group_manager",
)
def _url_xml(self, url, data=None, timeout=10):
@@ -195,7 +190,7 @@ def test_portal_scheduling_conflict(self):
)
)
# Public guy's booking and related meeting are OK in backend
- booking_public.invalidate_cache(ids=booking_public.ids)
+ booking_public.invalidate_model()
self.assertEqual(booking_public.state, "confirmed")
self.assertEqual(len(booking_public.meeting_id.attendee_ids), 2)
for attendee in booking_public.meeting_id.attendee_ids:
diff --git a/resource_booking/views/menus.xml b/resource_booking/views/menus.xml
index df3df927..78ed311f 100644
--- a/resource_booking/views/menus.xml
+++ b/resource_booking/views/menus.xml
@@ -39,13 +39,13 @@
groups="group_manager"
/>