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" /> - @@ -136,7 +135,6 @@ -