From c56676d281fe950a2a83831809c204338f6d6b92 Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Wed, 1 Apr 2020 11:16:57 +0200 Subject: [PATCH] Adapt test module --- base_time_window/models/__init__.py | 4 ++-- base_time_window/readme/DESCRIPTION.rst | 3 ++- base_time_window/readme/USAGE.rst | 30 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 base_time_window/readme/USAGE.rst diff --git a/base_time_window/models/__init__.py b/base_time_window/models/__init__.py index b878f0eaf..122ebbf3e 100644 --- a/base_time_window/models/__init__.py +++ b/base_time_window/models/__init__.py @@ -1,2 +1,2 @@ -from . import base_time_weekday -from . import base_time_window +from . import time_weekday +from . import time_window_mixin diff --git a/base_time_window/readme/DESCRIPTION.rst b/base_time_window/readme/DESCRIPTION.rst index f8c3d63ba..ad077245b 100644 --- a/base_time_window/readme/DESCRIPTION.rst +++ b/base_time_window/readme/DESCRIPTION.rst @@ -1 +1,2 @@ -This module provides base classes to manage time windows. +This module provides base classes and models to manage time windows through +`time.window.mixin`. diff --git a/base_time_window/readme/USAGE.rst b/base_time_window/readme/USAGE.rst new file mode 100644 index 000000000..f27eb7352 --- /dev/null +++ b/base_time_window/readme/USAGE.rst @@ -0,0 +1,30 @@ +Example implementation for the mixin can be found in module `test_base_time_window`. + +As a time window will always be linked to a related model thourgh a M2o relation, +when defining the new model inheriting the mixin, one should pay attention to the +following points in order to have the overlapping check work properly: + +- Define class property `_overlap_check_field`: This must state the M2o field to + use for the to check of overlapping time window records linked to a specific + record of the related model. + +- Add the M2o field to the related model in the `api.constrains`: + + +For example: + +.. code-block:: python + + class PartnerTimeWindow(models.Model): + _name = 'partner.time.window' + _inherit = 'time.window.mixin' + + partner_id = fields.Many2one( + res.partner', required=True, index=True, ondelete='cascade' + ) + + _overlap_check_field = 'partner_id' + + @api.constrains('partner_id') + def check_window_no_overlaps(self): + return super().check_window_no_overlaps()