diff --git a/base_time_window/README.rst b/base_time_window/README.rst index 9ebf42ee7c2..e951ba61867 100644 --- a/base_time_window/README.rst +++ b/base_time_window/README.rst @@ -111,6 +111,7 @@ Contributors - Laurent Mignon - Akim Juillerat +- SodexisTeam Trobz diff --git a/base_time_window/__manifest__.py b/base_time_window/__manifest__.py index 7e8deb02a19..5389a3147e0 100644 --- a/base_time_window/__manifest__.py +++ b/base_time_window/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Time Window", "summary": "Base model to handle time windows", - "version": "16.0.1.0.0", + "version": "17.0.1.0.0", "category": "Technical Settings", "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/base_time_window/models/time_weekday.py b/base_time_window/models/time_weekday.py index 872f4fcf29d..fbdd9ee14c8 100644 --- a/base_time_window/models/time_weekday.py +++ b/base_time_window/models/time_weekday.py @@ -32,13 +32,6 @@ def _compute_display_name(self): for record in self: record.display_name = translated_values[record.name] - def name_get(self): - """ - WORKAROUND since Odoo doesn't handle properly records where name is - a selection - """ - return [(r.id, r.display_name) for r in self] - @api.model @tools.ormcache("name") def _get_id_by_name(self, name): @@ -47,15 +40,15 @@ def _get_id_by_name(self, name): @api.model_create_multi def create(self, vals_list): records = super().create(vals_list) - self._get_id_by_name.clear_cache(self) + self.env.registry.clear_cache() # _get_id_by_name return records def write(self, vals): result = super().write(vals) - self._get_id_by_name.clear_cache(self) + self.env.registry.clear_cache() # _get_id_by_name return result def unlink(self): result = super().unlink() - self._get_id_by_name.clear_cache(self) + self.env.registry.clear_cache() # _get_id_by_name return result diff --git a/base_time_window/readme/CONTRIBUTORS.md b/base_time_window/readme/CONTRIBUTORS.md index 71699b857ac..068364ab8e4 100644 --- a/base_time_window/readme/CONTRIBUTORS.md +++ b/base_time_window/readme/CONTRIBUTORS.md @@ -1,5 +1,6 @@ - Laurent Mignon \<\> - Akim Juillerat \<\> +- SodexisTeam \<\> Trobz diff --git a/base_time_window/static/description/index.html b/base_time_window/static/description/index.html index b70b5ccbeb8..8b1cdfe7bc5 100644 --- a/base_time_window/static/description/index.html +++ b/base_time_window/static/description/index.html @@ -457,6 +457,7 @@

Contributors

Trobz

    diff --git a/base_time_window/tests/__init__.py b/base_time_window/tests/__init__.py new file mode 100644 index 00000000000..c3e9801e241 --- /dev/null +++ b/base_time_window/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_time_weekday +from . import test_time_window_mixin +from . import test_models diff --git a/base_time_window/tests/test_models.py b/base_time_window/tests/test_models.py new file mode 100644 index 00000000000..3f03f4dcb68 --- /dev/null +++ b/base_time_window/tests/test_models.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class TestTimeWindowModel(models.Model): + _name = "test.time.window.model" + _description = "Test Time Window Model" + _inherit = "time.window.mixin" + _time_window_overlap_check_field = "partner_id" + + partner_id = fields.Many2one( + "res.partner", required=True, index=True, ondelete="cascade" + ) diff --git a/base_time_window/tests/test_time_weekday.py b/base_time_window/tests/test_time_weekday.py new file mode 100644 index 00000000000..a48cb809df8 --- /dev/null +++ b/base_time_window/tests/test_time_weekday.py @@ -0,0 +1,16 @@ +# Copyright 2024 sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestTimeWeekday(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.time_weekday = cls.env["time.weekday"] + cls.time_weekday_saturday = cls.time_weekday.search([("name", "=", "5")]) + + def test_weekday_delete(cls): + cls.time_weekday._get_id_by_name(cls.time_weekday_saturday.name) + cls.time_weekday_saturday.unlink() diff --git a/base_time_window/tests/test_time_window_mixin.py b/base_time_window/tests/test_time_window_mixin.py new file mode 100644 index 00000000000..cf9972570f4 --- /dev/null +++ b/base_time_window/tests/test_time_window_mixin.py @@ -0,0 +1,83 @@ +from odoo_test_helper import FakeModelLoader + +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestTimeWindowMixin(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + from .test_models import TestTimeWindowModel + + cls.loader.update_registry((TestTimeWindowModel,)) + + cls.customer1 = cls.env["res.partner"].create({"name": "Test1"}) + cls.customer2 = cls.env["res.partner"].create({"name": "Test2"}) + cls.customer3 = cls.env["res.partner"].create({"name": "Test3"}) + + cls.weekday1 = cls.env["time.weekday"].search([("name", "=", "1")]) + cls.weekday2 = cls.env["time.weekday"].search([("name", "=", "2")]) + + def test_time_window_no_overlap(self): + with self.assertRaises(ValidationError): + self.record1 = self.env["test.time.window.model"].create( + { + "partner_id": self.customer1.id, + "time_window_start": 9.0, + "time_window_end": 12.0, + } + ) + + with self.assertRaises(ValidationError): + self.env["test.time.window.model"].create( + { + "partner_id": self.customer2.id, + "time_window_start": 15.0, + "time_window_end": 13.0, + "time_window_weekday_ids": self.weekday1.ids, + } + ) + + self.record2 = self.env["test.time.window.model"].create( + { + "partner_id": self.customer3.id, + "time_window_start": 13.0, + "time_window_end": 15.0, + "time_window_weekday_ids": self.weekday1.ids, + } + ) + self.assertTrue(self.record2) + + with self.assertRaises(ValidationError): + self.record3 = self.env["test.time.window.model"].create( + { + "partner_id": self.customer3.id, + "time_window_start": 15.0, + "time_window_end": 25.0, + "time_window_weekday_ids": self.weekday1.ids, + } + ) + + with self.assertRaises(ValidationError): + self.record4 = self.env["test.time.window.model"].create( + { + "partner_id": self.customer3.id, + "time_window_start": 0.998, + "time_window_end": 22.0, + "time_window_weekday_ids": self.weekday1.ids, + } + ) + + with self.assertRaises(ValidationError): + self.record5 = self.env["test.time.window.model"].create( + { + "partner_id": self.customer3.id, + "time_window_start": 25, + "time_window_end": 22.0, + "time_window_weekday_ids": self.weekday1.ids, + } + )