Skip to content

Commit

Permalink
Merge PR #3096 into 18.0
Browse files Browse the repository at this point in the history
Signed-off-by sebalix
  • Loading branch information
OCA-git-bot committed Nov 7, 2024
2 parents 312207d + 65152f8 commit 946d7d8
Show file tree
Hide file tree
Showing 44 changed files with 2,989 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .oca/oca-port/blacklist/base_time_window.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"pull_requests": {
"2213": "Nothing to port"
}
}
148 changes: 148 additions & 0 deletions base_time_window/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
================
Base Time Window
================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:691b5e5fe2cbf6d3dd1c48944761fe474d8a922798d18eb2f7c876566596f98c
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
:target: https://github.com/OCA/server-tools/tree/18.0/base_time_window
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-base_time_window
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module provides base classes and models to manage time windows
through time.window.mixin.

**Table of contents**

.. contents::
:local:

Usage
=====

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:: 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()
Known issues / Roadmap
======================

- Storing times using float_time widget requires extra processing to
ensure computations are done in the right timezone, because the value
is not stored as UTC in the database, and must therefore be related
to a tz field.

float_time in this sense should only be used for durations and not
for a "point in time" as this is always needs a Date for a timezone
conversion to be done properly. (Because a conversion from UTC to
e.g. Europe/Brussels won't give the same result in winter or summer
because of Daylight Saving Time).

Therefore the right move would be to use a resource.calendar to
define time windows using Datetime with recurrences.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20base_time_window%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* ACSONE SA/NV
* Camptocamp

Contributors
------------

- Laurent Mignon <[email protected]>
- Akim Juillerat <[email protected]>
- SodexisTeam <[email protected]>

Trobz

- Dung Tran <[email protected]>
- Khoi (Kien Kim) <[email protected]>

Other credits
-------------

The development of this module has been financially supported by:

- Camptocamp

The migration of this module from 17.0 to 18.0 was financially supported
by:

- Camptocamp

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/18.0/base_time_window>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions base_time_window/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
14 changes: 14 additions & 0 deletions base_time_window/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
{
"name": "Base Time Window",
"summary": "Base model to handle time windows",
"version": "18.0.1.0.0",
"category": "Technical Settings",
"author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/server-tools",
"depends": ["base"],
"data": ["data/time_weekday.xml", "security/ir.model.access.xml"],
"installable": True,
}
26 changes: 26 additions & 0 deletions base_time_window/data/time_weekday.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo noupdate="1">
<record model="time.weekday" id="time_weekday_monday">
<field name="name">0</field>
</record>
<record model="time.weekday" id="time_weekday_tuesday">
<field name="name">1</field>
</record>
<record model="time.weekday" id="time_weekday_wednesday">
<field name="name">2</field>
</record>
<record model="time.weekday" id="time_weekday_thursday">
<field name="name">3</field>
</record>
<record model="time.weekday" id="time_weekday_friday">
<field name="name">4</field>
</record>
<record model="time.weekday" id="time_weekday_saturday">
<field name="name">5</field>
</record>
<record model="time.weekday" id="time_weekday_sunday">
<field name="name">6</field>
</record>
</odoo>
163 changes: 163 additions & 0 deletions base_time_window/i18n/base_time_window.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_time_window
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_window_mixin.py:0
#, python-format
msgid "%(end_time)s must be > %(start_time)s"
msgstr ""

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_window_mixin.py:0
#, python-format
msgid "%(record_name)s overlaps %(other_name)s"
msgstr ""

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_window_mixin.py:0
#, python-format
msgid "At least one time.weekday is required"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__create_uid
msgid "Created by"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__create_date
msgid "Created on"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__display_name
msgid "Display Name"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__4
msgid "Friday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_window_mixin__time_window_start
msgid "From"
msgstr ""

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_window_mixin.py:0
#, python-format
msgid "Hour should be between 00 and 23"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__id
msgid "ID"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday____last_update
msgid "Last Modified on"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__write_uid
msgid "Last Updated by"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__write_date
msgid "Last Updated on"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__0
msgid "Monday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__name
msgid "Name"
msgstr ""

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_weekday.py:0
#: model:ir.model.constraint,message:base_time_window.constraint_time_weekday_name_uniq
#, python-format
msgid "Name must be unique"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__5
msgid "Saturday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_weekday__smart_search
#: model:ir.model.fields,field_description:base_time_window.field_time_window_mixin__smart_search
msgid "Smart Search"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__6
msgid "Sunday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__3
msgid "Thursday"
msgstr ""

#. module: base_time_window
#: model:ir.model,name:base_time_window.model_time_weekday
msgid "Time Week Day"
msgstr ""

#. module: base_time_window
#: model:ir.model,name:base_time_window.model_time_window_mixin
msgid "Time Window"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_window_mixin__time_window_weekday_ids
msgid "Time Window Weekday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields,field_description:base_time_window.field_time_window_mixin__time_window_end
msgid "To"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__1
msgid "Tuesday"
msgstr ""

#. module: base_time_window
#: model:ir.model.fields.selection,name:base_time_window.selection__time_weekday__name__2
msgid "Wednesday"
msgstr ""

#. module: base_time_window
#. odoo-python
#: code:addons/base_time_window/models/time_window_mixin.py:0
#, python-format
msgid "{days}: From {start} to {end}"
msgstr ""
Loading

0 comments on commit 946d7d8

Please sign in to comment.