From 7bacbec5ea4c8dff171a76217787d0a2b8694b4d Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Fri, 16 Dec 2022 15:52:16 +0100 Subject: [PATCH 01/33] [REF] Rename module: beesdoo_worker_status -> shift_worker_status Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__init__.py | 1 + shift_worker_status/__manifest__.py | 19 + .../data/beesdoo_worker_status_data.xml | 9 + shift_worker_status/demo/tasks.xml | 55 +++ .../i18n/beesdoo_worker_status.pot | 115 +++++ shift_worker_status/models/__init__.py | 3 + .../models/cooperative_status.py | 407 ++++++++++++++++++ .../models/res_config_settings.py | 13 + shift_worker_status/models/task.py | 135 ++++++ shift_worker_status/readme/CONTRIBUTORS.rst | 2 + shift_worker_status/readme/DESCRIPTION.rst | 1 + shift_worker_status/readme/HISTORY.rst | 13 + shift_worker_status/tests/__init__.py | 1 + .../tests/test_beesdoo_shift.py | 333 ++++++++++++++ .../views/res_config_settings_view.xml | 34 ++ 15 files changed, 1141 insertions(+) create mode 100644 shift_worker_status/__init__.py create mode 100644 shift_worker_status/__manifest__.py create mode 100644 shift_worker_status/data/beesdoo_worker_status_data.xml create mode 100644 shift_worker_status/demo/tasks.xml create mode 100644 shift_worker_status/i18n/beesdoo_worker_status.pot create mode 100644 shift_worker_status/models/__init__.py create mode 100644 shift_worker_status/models/cooperative_status.py create mode 100644 shift_worker_status/models/res_config_settings.py create mode 100644 shift_worker_status/models/task.py create mode 100644 shift_worker_status/readme/CONTRIBUTORS.rst create mode 100644 shift_worker_status/readme/DESCRIPTION.rst create mode 100644 shift_worker_status/readme/HISTORY.rst create mode 100644 shift_worker_status/tests/__init__.py create mode 100644 shift_worker_status/tests/test_beesdoo_shift.py create mode 100644 shift_worker_status/views/res_config_settings_view.xml diff --git a/shift_worker_status/__init__.py b/shift_worker_status/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/shift_worker_status/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py new file mode 100644 index 000000000..dbf7a3ef6 --- /dev/null +++ b/shift_worker_status/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2020 Coop IT Easy SCRL fs +# Elouan Le Bars +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "BEES coop Worker Status manager", + "summary": """ + Worker status management specific to beescoop.""", + "author": "Thibault Francois, Elouan Le Bars, Coop IT Easy SC", + "website": "https://github.com/beescoop/Obeesdoo", + "category": "Cooperative management", + "version": "12.0.1.1.0", + "depends": ["beesdoo_shift"], + "data": [ + "data/beesdoo_worker_status_data.xml", + "views/res_config_settings_view.xml", + ], + "demo": ["demo/tasks.xml"], + "license": "AGPL-3", +} diff --git a/shift_worker_status/data/beesdoo_worker_status_data.xml b/shift_worker_status/data/beesdoo_worker_status_data.xml new file mode 100644 index 000000000..79a0aff3e --- /dev/null +++ b/shift_worker_status/data/beesdoo_worker_status_data.xml @@ -0,0 +1,9 @@ + + + + + beesdoo_worker_status.irregular_penalty + True + + + diff --git a/shift_worker_status/demo/tasks.xml b/shift_worker_status/demo/tasks.xml new file mode 100644 index 000000000..81209976a --- /dev/null +++ b/shift_worker_status/demo/tasks.xml @@ -0,0 +1,55 @@ + + + + + + A_LUN_7:00-9:30 + + + + 7 + 9.5 + 2.5 + 12 + + + + + A_MAR_12:00-14:30 + + + + 12 + 14.5 + 2.5 + 9 + + + + + + A_VEN_7:00-9:30 + + + + 7 + 9.5 + 2.5 + 7 + + + + + diff --git a/shift_worker_status/i18n/beesdoo_worker_status.pot b/shift_worker_status/i18n/beesdoo_worker_status.pot new file mode 100644 index 000000000..82b856d01 --- /dev/null +++ b/shift_worker_status/i18n/beesdoo_worker_status.pot @@ -0,0 +1,115 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * beesdoo_worker_status +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:43 +#, python-format +msgid "A worker cannot replace himself." +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:55 +#, python-format +msgid "Absent - 0 compensation" +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:54 +#, python-format +msgid "Absent - 1 compensation" +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:53 +#, python-format +msgid "Absent - 2 compensations" +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:52 +#, python-format +msgid "Attended" +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:56 +#, python-format +msgid "Cancelled" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model,name:beesdoo_worker_status.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:51 +#, python-format +msgid "Confirmed" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__future_alert_date +msgid "Future Alert Date" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__is_penalised_irregular +msgid "Is Currently Penalised Irregular" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__next_countdown_date +msgid "Next Countdown Date" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_res_config_settings__irregular_penalty +msgid "Penalty for irregular worker with negative counter" +msgstr "" + +#. module: beesdoo_worker_status +#: model_terms:ir.ui.view,arch_db:beesdoo_worker_status.res_config_settings_shift_view_form +msgid "Penalty when irregular worker counter goes below zero." +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_beesdoo_shift_shift__state +msgid "State" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model.fields,help:beesdoo_worker_status.field_res_config_settings__irregular_penalty +msgid "When selected, the irregular worker's counter will decrease\n" +" by two when at zero or below, unless they were in alert\n" +" before or were already penalized." +msgstr "" + +#. module: beesdoo_worker_status +#: code:addons/beesdoo_worker_status/models/task.py:18 +#, python-format +msgid "You must choose between Regular Shift or Compensation Shift." +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model,name:beesdoo_worker_status.model_beesdoo_shift_shift +msgid "beesdoo.shift.shift" +msgstr "" + +#. module: beesdoo_worker_status +#: model:ir.model,name:beesdoo_worker_status.model_cooperative_status +msgid "cooperative.status" +msgstr "" + diff --git a/shift_worker_status/models/__init__.py b/shift_worker_status/models/__init__.py new file mode 100644 index 000000000..065ebc316 --- /dev/null +++ b/shift_worker_status/models/__init__.py @@ -0,0 +1,3 @@ +from . import cooperative_status +from . import task +from . import res_config_settings diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py new file mode 100644 index 000000000..72fa00a72 --- /dev/null +++ b/shift_worker_status/models/cooperative_status.py @@ -0,0 +1,407 @@ +from odoo import api, fields, models + +from odoo.addons.beesdoo_shift.models.cooperative_status import add_days_delta + + +class CooperativeStatus(models.Model): + _inherit = "cooperative.status" + _period = 28 + + ###################################################### + # # + # Override of method to define status behavior # + # # + ###################################################### + + future_alert_date = fields.Date(compute="_compute_future_alert_date") + next_countdown_date = fields.Date(compute="_compute_next_countdown_date") + is_penalised_irregular = fields.Boolean( + string="Is Currently Penalised Irregular", default=False + ) + + @api.depends( + "today", + "irregular_start_date", + "sr", + "holiday_start_time", + "holiday_end_time", + "temporary_exempt_start_date", + "temporary_exempt_end_date", + ) + def _compute_future_alert_date(self): + """Compute date before which the worker is up to date""" + for rec in self: + # Only for irregular worker + if rec.working_mode != "irregular" and not rec.irregular_start_date: + rec.future_alert_date = False + # Alert start time already set + elif rec.alert_start_time: + rec.future_alert_date = False + # Holidays are not set properly + elif bool(rec.holiday_start_time) != bool(rec.holiday_end_time): + rec.future_alert_date = False + # Exemption have not a start and end time + elif bool(rec.temporary_exempt_start_date) != bool( + rec.temporary_exempt_end_date + ): + rec.future_alert_date = False + else: + date = rec.today + counter = rec.sr + # Simulate the countdown + while counter > 0: + date = self._next_countdown_date(rec.irregular_start_date, date) + # Check holidays + if ( + rec.holiday_start_time + and rec.holiday_end_time + and date >= rec.holiday_start_time + and date <= rec.holiday_end_time + ): + date = add_days_delta(date, 1) + continue + # Check temporary exemption + if ( + rec.temporary_exempt_start_date + and rec.temporary_exempt_end_date + and date >= rec.temporary_exempt_start_date + and date <= rec.temporary_exempt_end_date + ): + date = add_days_delta(date, 1) + continue + # Otherwise + date = add_days_delta(date, 1) + counter -= 1 + rec.future_alert_date = self._next_countdown_date( + rec.irregular_start_date, date + ) + + @api.depends( + "today", + "irregular_start_date", + "holiday_start_time", + "holiday_end_time", + "temporary_exempt_start_date", + "temporary_exempt_end_date", + ) + def _compute_next_countdown_date(self): + """ + Compute the following countdown date. This date is the date when + the worker will see his counter changed du to the cron. This + date is like the birthday date of the worker that occurred each + PERIOD. + """ + for rec in self: + # Only for irregular worker + if rec.working_mode != "irregular" and not rec.irregular_start_date: + rec.next_countdown_date = False + # Holidays are not set properly + elif bool(rec.holiday_start_time) != bool(rec.holiday_end_time): + rec.next_countdown_date = False + # Exemption have not a start and end time + elif bool(rec.temporary_exempt_start_date) != bool( + rec.temporary_exempt_end_date + ): + rec.next_countdown_date = False + else: + date = rec.today + next_countdown_date = False + while not next_countdown_date: + date = self._next_countdown_date(rec.irregular_start_date, date) + # Check holidays + if ( + rec.holiday_start_time + and rec.holiday_end_time + and date >= rec.holiday_start_time + and date <= rec.holiday_end_time + ): + date = add_days_delta(date, 1) + continue + # Check temporary exemption + if ( + rec.temporary_exempt_start_date + and rec.temporary_exempt_end_date + and date >= rec.temporary_exempt_start_date + and date <= rec.temporary_exempt_end_date + ): + date = add_days_delta(date, 1) + continue + # Otherwise + next_countdown_date = date + rec.next_countdown_date = next_countdown_date + + ##################################### + # Status Change implementation # + ##################################### + + def write(self, vals): + super(CooperativeStatus, self).write(vals) + self._postpone_alert_start_time() + + def _get_regular_status(self): + self.ensure_one() + counter_unsubscribe = int( + self.env["ir.config_parameter"] + .sudo() + .get_param("regular_counter_to_unsubscribe", -4) + ) + alert_delay = int( + self.env["ir.config_parameter"].sudo().get_param("alert_delay", 28) + ) + grace_delay = int( + self.env["ir.config_parameter"].sudo().get_param("default_grace_delay", 10) + ) + ok = self.sr >= 0 and self.sc >= 0 + grace_delay = grace_delay + self.time_extension + + # check `holiday` + if ( + self.holiday_start_time + and self.holiday_end_time + and self.today >= self.holiday_start_time + and self.today <= self.holiday_end_time + ): + return "holiday" + + # check `exempted`. + # Exempt end date is not required. + elif ( + # Start and end are defined + self.temporary_exempt_start_date + and self.temporary_exempt_end_date + and self.today >= self.temporary_exempt_start_date + and self.today <= self.temporary_exempt_end_date + ) or ( + # Only start is defined + self.temporary_exempt_start_date + and not self.temporary_exempt_end_date + and self.today >= self.temporary_exempt_start_date + ): + return "exempted" + + # check `extension` + # Transition to alert sr < 0 or stay in alert sr < 0 or sc < 0 and + # thus alert time is defined + elif ( + not ok + and self.alert_start_time + and self.extension_start_time + and self.today <= add_days_delta(self.extension_start_time, grace_delay) + ): + return "extension" + + # check `unsubscribed` + elif (self.sr + self.sc) <= counter_unsubscribe or self.unsubscribed: + return "unsubscribed" + + # check `suspended` + elif ( + not ok + and self.alert_start_time + and self.extension_start_time + and self.today > add_days_delta(self.extension_start_time, grace_delay) + ) or ( + not ok + and self.alert_start_time + and self.today > add_days_delta(self.alert_start_time, alert_delay) + ): + return "suspended" + + # check `alert` + elif (self.sr < 0) or (not ok and self.alert_start_time): + return "alert" + + # check `ok` + elif ok or (not self.alert_start_time and self.sr >= 0): + return "ok" + + def _get_irregular_status(self): + self.ensure_one() + counter_unsubscribe = int( + self.env["ir.config_parameter"] + .sudo() + .get_param("irregular_counter_to_unsubscribe", -3) + ) + alert_delay = int( + self.env["ir.config_parameter"].sudo().get_param("alert_delay", 28) + ) + grace_delay = int( + self.env["ir.config_parameter"].sudo().get_param("default_grace_delay", 10) + ) + ok = self.sr >= 0 + grace_delay = grace_delay + self.time_extension + + # check `holiday` + if ( + self.holiday_start_time + and self.holiday_end_time + and self.today >= self.holiday_start_time + and self.today <= self.holiday_end_time + ): + return "holiday" + + # check `exempted` + # Exempt end date is not required. + elif ( + # Start and end are defined + self.temporary_exempt_start_date + and self.temporary_exempt_end_date + and self.today >= self.temporary_exempt_start_date + and self.today <= self.temporary_exempt_end_date + ) or ( + # Only start is defined + self.temporary_exempt_start_date + and not self.temporary_exempt_end_date + and self.today >= self.temporary_exempt_start_date + ): + return "exempted" + + # check `extension` + # Transition to alert sr < 0 or stay in alert sr < 0 or sc < 0 and + # thus alert time is defined + elif ( + not ok + and self.alert_start_time + and self.extension_start_time + and self.today <= add_days_delta(self.extension_start_time, grace_delay) + ): + return "extension" + + # check `unsubscribed` + elif self.sr <= counter_unsubscribe or self.unsubscribed: + return "unsubscribed" + + # check `suspended` + elif ( + not ok + and self.alert_start_time + and self.extension_start_time + and self.today > add_days_delta(self.extension_start_time, grace_delay) + ) or ( + not ok + and self.alert_start_time + and self.today > add_days_delta(self.alert_start_time, alert_delay) + ): + return "suspended" + # check `alert` + elif (self.sr < 0) or (not ok and self.alert_start_time): + return "alert" + + # check `ok` + elif ok or (not self.alert_start_time and self.sr >= 0): + return "ok" + + def _state_change(self, new_state): + self.ensure_one() + if new_state == "alert": + self.write( + { + "alert_start_time": self.today, + "extension_start_time": False, + "time_extension": 0, + } + ) + if new_state == "ok": + data = {"extension_start_time": False, "time_extension": 0} + data["alert_start_time"] = False + self.write(data) + if new_state == "unsubscribed" or new_state == "resigning": + # Remove worker from task_templates + self.cooperator_id.sudo().write({"subscribed_shift_ids": [(5, 0, 0)]}) + # Remove worker from supercoop in task_templates + task_tpls = self.env["beesdoo.shift.template"].search( + [("super_coop_id", "in", self.cooperator_id.user_ids.ids)] + ) + task_tpls.write({"super_coop_id": False}) + # Remove worker for future tasks (remove also supercoop) + self.env["beesdoo.shift.shift"].sudo().unsubscribe_from_today( + self.cooperator_id, now=fields.Datetime.now() + ) + + def _change_counter(self, data): + """ + Call when a shift state is changed + use data generated by _get_counter_date_state_change + """ + self.sc += data.get("sc", 0) + self.sr += data.get("sr", 0) + self.irregular_absence_counter += data.get("irregular_absence_counter", 0) + self.irregular_absence_date = data.get("irregular_absence_date", False) + + ############################################### + # Irregular Cron implementation # + ############################################### + + def _get_irregular_worker_domain(self, today): + return [ + "&", + "&", + "&", + ("status", "not in", ["unsubscribed", "exempted"]), + ("working_mode", "=", "irregular"), + ("irregular_start_date", "!=", False), + "|", + "|", + ("holiday_start_time", "=", False), + ("holiday_end_time", "=", False), + "|", + ("holiday_start_time", ">", today), + ("holiday_end_time", "<", today), + ] + + def _change_irregular_counter(self): + irregular_penalty = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("beesdoo_worker_status.irregular_penalty") + ) + if irregular_penalty: + if self.sr > 0: + if self.sr >= 1: + self.is_penalised_irregular = False + self.sr -= 1 + elif self.alert_start_time or self.is_penalised_irregular: + self.sr -= 1 + else: + self.sr -= 2 + # Until sr is 1 or above, don't do another penalty. + self.is_penalised_irregular = True + else: + self.sr -= 1 + + ################################## + # Internal Implementation # + ################################## + def _next_countdown_date(self, irregular_start_date, today=False): + """ + Return the next countdown date given irregular_start_date and + today dates. + This does not take holiday and other status into account. + """ + today = today or fields.Date.today() + + delta = (today - irregular_start_date).days + if not delta % self._period: + return today + return add_days_delta(today, self._period - (delta % self._period)) + + def _postpone_alert_start_time(self): + """ + Postpone the alert_start_time based on holiday_end_time or + temporary_exempt_end_date based on status. + + If alert_start_time is not set then nothing changes. + """ + for rec in self: + if ( + rec.status == "holiday" + and rec.alert_start_time + and rec.alert_start_time != rec.holiday_end_time + ): + rec.alert_start_time = rec.holiday_end_time + elif ( + rec.status == "exempted" + and rec.alert_start_time + and rec.alert_start_time != rec.temporary_exempt_end_date + ): + rec.alert_start_time = rec.temporary_exempt_end_date diff --git a/shift_worker_status/models/res_config_settings.py b/shift_worker_status/models/res_config_settings.py new file mode 100644 index 000000000..5ccfccf26 --- /dev/null +++ b/shift_worker_status/models/res_config_settings.py @@ -0,0 +1,13 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + irregular_penalty = fields.Boolean( + string="Penalty for irregular worker with negative counter", + help="""When selected, the irregular worker's counter will decrease + by two when at zero or below, unless they were in alert + before or were already penalized.""", + config_parameter="beesdoo_worker_status.irregular_penalty", + ) diff --git a/shift_worker_status/models/task.py b/shift_worker_status/models/task.py new file mode 100644 index 000000000..f4ce83a78 --- /dev/null +++ b/shift_worker_status/models/task.py @@ -0,0 +1,135 @@ +from odoo import api, fields, models +from odoo.exceptions import UserError, ValidationError +from odoo.tools.translate import _ + + +class Task(models.Model): + _inherit = "beesdoo.shift.shift" + + def _compensation_validation(self, task): + """ + Raise a validation error if the fields is_regular and + is_compensation are not properly set. + """ + if task.is_regular == task.is_compensation or not ( + task.is_regular or task.is_compensation + ): + raise ValidationError( + _("You must choose between Regular Shift or Compensation Shift.") + ) + + @api.constrains("is_regular", "is_compensation") + def _check_compensation(self): + for task in self: + if task.working_mode == "regular": + self._compensation_validation(task) + + @api.constrains("worker_id") + def _check_worker_id(self): + """ + When worker_id changes we need to check whether is_regular + and is_compensation are set correctly. + When worker_id is set to a worker that doesn't need field + is_regular and is_compensation, these two fields are set to + False. + """ + for task in self: + if task.working_mode == "regular": + self._compensation_validation(task) + else: + task.write({"is_regular": False, "is_compensation": False}) + if task.worker_id: + if task.worker_id == task.replaced_id: + raise UserError(_("A worker cannot replace himself.")) + + ################################# + # State Definition # + ################################# + + def _get_selection_status(self): + return [ + ("open", _("Confirmed")), + ("done", _("Attended")), + ("absent_2", _("Absent - 2 compensations")), + ("absent_1", _("Absent - 1 compensation")), + ("absent_0", _("Absent - 0 compensation")), + ("cancel", _("Cancelled")), + ] + + def _get_color_mapping(self, state): + """ + Set of colors: + 0: none, + 1: dark orange, + 2: orange, + 3: yellow, + 4: light blue, + 5: dark purple, + 6: light red (pink), + 7: cyan, + 8: dark blue, + 9: magenta (red), + 10: green, + 11: purple + """ + return { + "open": 0, + "done": 10, + "absent_2": 9, + "absent_1": 2, + "absent_0": 3, + "cancel": 5, + }[state] + + def _get_final_state(self): + return ["done", "absent_2", "absent_1", "absent_0"] + + @api.model + def get_absent_state(self): + return ["absent_2", "absent_1", "absent_0"] + + state = fields.Selection(selection=_get_selection_status) + + ############################################## + # Change counter when state change # + ############################################## + def _get_counter_date_state_change(self, new_state): + data = {} + if self.worker_id.working_mode == "regular": + + if not self.replaced_id: # No replacement case + status = self.worker_id.cooperative_status_ids[0] + else: + status = self.replaced_id.cooperative_status_ids[0] + + if new_state == "done" and not self.is_regular: + # Regular counter is always updated first + if status.sr < 0: + data["sr"] = 1 + elif status.sc < 0: + data["sc"] = 1 + # Bonus shift case + else: + data["sr"] = 1 + + if new_state == "absent_2": + data["sr"] = -1 + data["sc"] = -1 + + if new_state == "absent_1": + data["sr"] = -1 + + elif self.worker_id.working_mode == "irregular": + status = self.worker_id.cooperative_status_ids[0] + if new_state == "done" or new_state == "absent_0": + data["sr"] = 1 + data["irregular_absence_date"] = False + data["irregular_absence_counter"] = ( + 1 if status.irregular_absence_counter < 0 else 0 + ) + if new_state == "absent_2" or new_state == "absent_1": + if new_state == "absent_2": + data["sr"] = -1 + data["irregular_absence_date"] = self.start_time.date() + data["irregular_absence_counter"] = -1 + return data, status diff --git a/shift_worker_status/readme/CONTRIBUTORS.rst b/shift_worker_status/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..5cf09c295 --- /dev/null +++ b/shift_worker_status/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* BEES coop - Cellule IT +* Coop IT Easy SC diff --git a/shift_worker_status/readme/DESCRIPTION.rst b/shift_worker_status/readme/DESCRIPTION.rst new file mode 100644 index 000000000..f7df1c669 --- /dev/null +++ b/shift_worker_status/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Worker status management specific to beescoop. diff --git a/shift_worker_status/readme/HISTORY.rst b/shift_worker_status/readme/HISTORY.rst new file mode 100644 index 000000000..fb6442534 --- /dev/null +++ b/shift_worker_status/readme/HISTORY.rst @@ -0,0 +1,13 @@ +12.0.1.1.0 (2022-06-23) +**Features** + +- Do not apply a penalty to irregular customers twice in a row. Best explained + through an example. + + Imagine the following 'sr' of an irregular worker: + + 0 -> -2 (cron, penalty) -> -1 (work a shift) -> 0 (work another shift) + -> ??? (cron) + + The last step should go to -1 instead of -2. The penalty should not be given + again until sr has reached 1. (`#388 `_) diff --git a/shift_worker_status/tests/__init__.py b/shift_worker_status/tests/__init__.py new file mode 100644 index 000000000..1505d70b0 --- /dev/null +++ b/shift_worker_status/tests/__init__.py @@ -0,0 +1 @@ +from . import test_beesdoo_shift diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py new file mode 100644 index 000000000..ebe3444bb --- /dev/null +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -0,0 +1,333 @@ +# Copyright 2019 - Today Coop IT Easy SC () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from datetime import date, datetime, timedelta + +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestBeesdooShift(TransactionCase): + def setUp(self): + super(TestBeesdooShift, self).setUp() + self.shift_model = self.env["beesdoo.shift.shift"] + self.shift_template_model = self.env["beesdoo.shift.template"] + + self.current_time = datetime.now() + self.user_admin = self.env.ref("base.user_root") + + self.worker_regular_1 = self.env.ref("beesdoo_shift.res_partner_worker_1_demo") + self.worker_regular_2 = self.env.ref("beesdoo_shift.res_partner_worker_3_demo") + self.worker_regular_3 = self.env.ref("beesdoo_shift.res_partner_worker_5_demo") + self.worker_irregular_1 = self.env.ref( + "beesdoo_shift.res_partner_worker_2_demo" + ) + self.worker_irregular_2 = self.env.ref( + "beesdoo_shift.res_partner_worker_4_demo" + ) + + self.task_type_1 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_1_demo") + self.task_type_2 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_2_demo") + self.task_type_3 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_3_demo") + + self.task_template_1 = self.env.ref( + "beesdoo_worker_status.beesdoo_shift_task_template_1_demo" + ) + self.task_template_2 = self.env.ref( + "beesdoo_worker_status.beesdoo_shift_task_template_2_demo" + ) + + self.exempt_reason_1 = self.env.ref("beesdoo_shift.exempt_reason_1_demo") + config = self.env["ir.config_parameter"].sudo() + config.set_param("beesdoo_worker_status.irregular_penalty", True) + + def test_shift_counters(self): + "Test shift counters calculation and cooperative status update" + + status_1 = self.worker_regular_1.cooperative_status_ids + status_2 = self.worker_regular_3.cooperative_status_ids + status_3 = self.worker_irregular_1.cooperative_status_ids + + shift_regular = self.shift_model.create( + { + "task_template_id": self.task_template_1.id, + "task_type_id": self.task_type_1.id, + "worker_id": self.worker_regular_1.id, + "start_time": datetime.now() - timedelta(minutes=50), + "end_time": datetime.now() - timedelta(minutes=40), + "is_regular": True, + "is_compensation": False, + } + ) + future_shift_regular = self.shift_model.create( + { + "task_template_id": self.task_template_2.id, + "task_type_id": self.task_type_2.id, + "worker_id": self.worker_regular_1.id, + "start_time": datetime.now() + timedelta(minutes=20), + "end_time": datetime.now() + timedelta(minutes=30), + "is_regular": True, + "is_compensation": False, + } + ) + shift_irregular = self.shift_model.create( + { + "task_template_id": self.task_template_2.id, + "task_type_id": self.task_type_3.id, + "worker_id": self.worker_irregular_1.id, + "start_time": datetime.now() - timedelta(minutes=15), + "end_time": datetime.now() - timedelta(minutes=10), + } + ) + + # For a regular worker + status_1.sr = 0 + status_1.sc = 0 + self.assertEqual(status_1.status, "ok") + shift_regular.state = "absent_1" + self.assertEqual(status_1.sr, -1) + self.assertEqual(status_1.status, "alert") + shift_regular.state = "done" + self.assertEquals(status_1.sr, 0) + self.assertEquals(status_1.sc, 0) + shift_regular.state = "open" + shift_regular.write({"is_regular": False, "is_compensation": True}) + shift_regular.state = "done" + self.assertEquals(status_1.sr, 1) + self.assertEquals(status_1.sc, 0) + + # Check unsubscribed status + status_1.sr = -1 + status_1.sc = -1 + + # Subscribe him to another future shift + future_shift_regular.worker_id = self.worker_regular_1 + with self.assertRaises(ValidationError) as e: + future_shift_regular.state = "absent_2" + self.assertIn("future", str(e.exception)) + status_1.sr = -2 + status_1.sc = -2 + self.assertEquals(status_1.status, "unsubscribed") + + # Should be unsubscribed from future shift + self.assertFalse(future_shift_regular.worker_id) + + # With replacement worker (self.worker_regular_3) + shift_regular.state = "open" + status_1.sr = 0 + status_1.sc = 0 + status_2.sr = 0 + status_2.sc = 0 + shift_regular.replaced_id = self.worker_regular_3 + shift_regular.state = "absent_2" + self.assertEqual(status_1.sr, 0) + self.assertEqual(status_1.sc, 0) + self.assertEqual(status_2.sr, -1) + self.assertEqual(status_2.sc, -1) + + # For an irregular worker + status_3.sr = 0 + status_3.sc = 0 + self.assertEqual(status_3.status, "ok") + shift_irregular.state = "done" + self.assertEqual(status_3.sr, 1) + shift_irregular.state = "absent_2" + self.assertEqual(status_3.sr, -1) + + def test_shift_no_double_penalty(self): + """Imagine the following 'sr' of an irregular worker: + + 0 -> -2 (cron, penalty) -> -1 (work a shift) -> 0 (work another shift) + -> ??? (cron) + + The last step should go to -1 instead of -2. The penalty should not be + given again until sr has reached 1. + """ + + worker = self.worker_irregular_1 + worker.cooperative_status_ids.sr = 0 + self.assertFalse(worker.cooperative_status_ids.is_penalised_irregular) + worker.cooperative_status_ids._change_irregular_counter() + self.assertEqual(worker.cooperative_status_ids.sr, -2) + self.assertTrue(worker.cooperative_status_ids.is_penalised_irregular) + shift_irregular_1 = self.shift_model.create( + { + "task_template_id": self.task_template_1.id, + "task_type_id": self.task_type_3.id, + "worker_id": worker.id, + "start_time": datetime.now() - timedelta(days=7, minutes=15), + "end_time": datetime.now() - timedelta(days=7, minutes=10), + } + ) + shift_irregular_1.state = "done" + self.assertEqual(worker.cooperative_status_ids.sr, -1) + self.assertTrue(worker.cooperative_status_ids.is_penalised_irregular) + shift_irregular_2 = self.shift_model.create( + { + "task_template_id": self.task_template_2.id, + "task_type_id": self.task_type_3.id, + "worker_id": worker.id, + "start_time": datetime.now() - timedelta(days=6, minutes=15), + "end_time": datetime.now() - timedelta(days=6, minutes=10), + } + ) + shift_irregular_2.state = "done" + self.assertEqual(worker.cooperative_status_ids.sr, 0) + self.assertTrue(worker.cooperative_status_ids.is_penalised_irregular) + worker.cooperative_status_ids._change_irregular_counter() + self.assertEqual(worker.cooperative_status_ids.sr, -1) + self.assertTrue(worker.cooperative_status_ids.is_penalised_irregular) + worker.cooperative_status_ids.sr = 1 + worker.cooperative_status_ids._change_irregular_counter() + self.assertEqual(worker.cooperative_status_ids.sr, 0) + self.assertFalse(worker.cooperative_status_ids.is_penalised_irregular) + worker.cooperative_status_ids._change_irregular_counter() + self.assertEqual(worker.cooperative_status_ids.sr, -2) + self.assertTrue(worker.cooperative_status_ids.is_penalised_irregular) + + def test_shift_config_penalty_disabled(self): + config = self.env["ir.config_parameter"].sudo() + config.set_param("beesdoo_worker_status.irregular_penalty", False) + + worker = self.worker_irregular_1 + worker.cooperative_status_ids.sr = 0 + self.assertFalse(worker.cooperative_status_ids.is_penalised_irregular) + worker.cooperative_status_ids._change_irregular_counter() + self.assertEqual(worker.cooperative_status_ids.sr, -1) + + def test_postponed_alert_start_time_holiday_regular(self): + """ + Check that alert_start_time is correctly postponed when + worker take holiday. + """ + status_id = self.worker_regular_1.cooperative_status_ids + begin_date = date.today() + status_id.today = begin_date + + status_id.sr = -1 + status_id.sc = -1 + first_alert_start_time = begin_date - timedelta(days=1) + status_id.alert_start_time = first_alert_start_time + self.assertEqual(status_id.status, "alert") + + # Set holiday + status_id.write( + { + "holiday_start_time": begin_date + timedelta(days=5), + "holiday_end_time": begin_date + timedelta(days=10), + } + ) + self.assertEqual(status_id.status, "alert") + # Alert start time should no change yet + self.assertEqual(status_id.alert_start_time, first_alert_start_time) + + # Now go in the future during the holiday period + status_id.today = begin_date + timedelta(days=6) + self.assertEqual(status_id.status, "holiday") + # Alert start time should have changed + self.assertEqual( + status_id.alert_start_time, + status_id.holiday_end_time, + ) + + def test_postponed_alert_start_time_holiday_irregular(self): + """ + Check that alert_start_time is correctly postponed when + worker take holiday. + """ + status_id = self.worker_irregular_1.cooperative_status_ids + begin_date = date.today() + status_id.today = begin_date + + status_id.sr = -2 + first_alert_start_time = begin_date - timedelta(days=1) + status_id.alert_start_time = first_alert_start_time + self.assertEqual(status_id.status, "alert") + + # Set holiday + status_id.write( + { + "holiday_start_time": begin_date + timedelta(days=5), + "holiday_end_time": begin_date + timedelta(days=10), + } + ) + # Alert start time should no change yet + self.assertEqual(status_id.alert_start_time, begin_date - timedelta(days=1)) + + # Now go in the future during the holiday period + status_id.today = begin_date + timedelta(days=6) + self.assertEqual(status_id.status, "holiday") + # Alert start time should have changed + self.assertEqual( + status_id.alert_start_time, + status_id.holiday_end_time, + ) + + def test_postponed_alert_start_time_exempted_regular(self): + """ + Check that alert_start_time is correctly postponed when + worker is exempted. + """ + status_id = self.worker_regular_1.cooperative_status_ids + begin_date = date.today() + status_id.today = begin_date + + status_id.sr = -1 + status_id.sc = -1 + first_alert_start_time = begin_date - timedelta(days=1) + status_id.alert_start_time = first_alert_start_time + self.assertEqual(status_id.status, "alert") + + # Set exemption + status_id.write( + { + "temporary_exempt_start_date": begin_date + timedelta(days=5), + "temporary_exempt_end_date": begin_date + timedelta(days=10), + "temporary_exempt_reason_id": self.exempt_reason_1.id, + } + ) + # Alert start time should no change yet + self.assertEqual(status_id.alert_start_time, begin_date - timedelta(days=1)) + + # Now go in the future during the holiday period + status_id.today = begin_date + timedelta(days=6) + self.assertEqual(status_id.status, "exempted") + # Alert start time should have changed + self.assertEqual( + status_id.alert_start_time, + status_id.temporary_exempt_end_date, + ) + + def test_postponed_alert_start_time_exempted_irregular(self): + """ + Check that alert_start_time is correctly postponed when + worker is exempted. + """ + status_id = self.worker_irregular_1.cooperative_status_ids + begin_date = date.today() + status_id.today = begin_date + + status_id.sr = -2 + first_alert_start_time = begin_date - timedelta(days=1) + status_id.alert_start_time = first_alert_start_time + self.assertEqual(status_id.status, "alert") + + # Set exemption + status_id.write( + { + "temporary_exempt_start_date": begin_date + timedelta(days=5), + "temporary_exempt_end_date": begin_date + timedelta(days=10), + "temporary_exempt_reason_id": self.exempt_reason_1.id, + } + ) + # Alert start time should no change yet + self.assertEqual(status_id.alert_start_time, begin_date - timedelta(days=1)) + + # Now go in the future during the holiday period + status_id.today = begin_date + timedelta(days=6) + self.assertEqual(status_id.status, "exempted") + # Alert start time should have changed + self.assertEqual( + status_id.alert_start_time, + status_id.temporary_exempt_end_date, + ) diff --git a/shift_worker_status/views/res_config_settings_view.xml b/shift_worker_status/views/res_config_settings_view.xml new file mode 100644 index 000000000..e82eccd20 --- /dev/null +++ b/shift_worker_status/views/res_config_settings_view.xml @@ -0,0 +1,34 @@ + + + + + + res_config_settings_shift_view_form + res.config.settings + + + + +
+
+ +
+
+
+
+
+
+
+ +
+
From 79e5d254db83837f046c7fae83a72e8da03fab53 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Mon, 19 Dec 2022 17:17:31 +0100 Subject: [PATCH 02/33] [REF] shift_worker_status: beesdoo_shift -> shift Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 2 +- shift_worker_status/demo/tasks.xml | 30 +++++++++---------- .../i18n/beesdoo_worker_status.pot | 4 +-- .../models/cooperative_status.py | 2 +- shift_worker_status/tests/__init__.py | 2 +- .../tests/test_beesdoo_shift.py | 22 +++++++------- .../views/res_config_settings_view.xml | 2 +- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index dbf7a3ef6..67db90bc8 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -9,7 +9,7 @@ "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", "version": "12.0.1.1.0", - "depends": ["beesdoo_shift"], + "depends": ["shift"], "data": [ "data/beesdoo_worker_status_data.xml", "views/res_config_settings_view.xml", diff --git a/shift_worker_status/demo/tasks.xml b/shift_worker_status/demo/tasks.xml index 81209976a..525e5bc8a 100644 --- a/shift_worker_status/demo/tasks.xml +++ b/shift_worker_status/demo/tasks.xml @@ -5,26 +5,26 @@ --> - + A_LUN_7:00-9:30 - - - + + + 7 9.5 2.5 12 - + A_MAR_12:00-14:30 - - - + + + 12 14.5 2.5 @@ -32,15 +32,15 @@ - + A_VEN_7:00-9:30 - - - + + + 7 9.5 2.5 @@ -48,7 +48,7 @@ diff --git a/shift_worker_status/i18n/beesdoo_worker_status.pot b/shift_worker_status/i18n/beesdoo_worker_status.pot index 82b856d01..771a5403a 100644 --- a/shift_worker_status/i18n/beesdoo_worker_status.pot +++ b/shift_worker_status/i18n/beesdoo_worker_status.pot @@ -86,7 +86,7 @@ msgid "Penalty when irregular worker counter goes below zero." msgstr "" #. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_beesdoo_shift_shift__state +#: model:ir.model.fields,field_description:beesdoo_worker_status.field_shift_shift__state msgid "State" msgstr "" @@ -104,7 +104,7 @@ msgid "You must choose between Regular Shift or Compensation Shift." msgstr "" #. module: beesdoo_worker_status -#: model:ir.model,name:beesdoo_worker_status.model_beesdoo_shift_shift +#: model:ir.model,name:beesdoo_worker_status.model_shift_shift msgid "beesdoo.shift.shift" msgstr "" diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index 72fa00a72..6069c6dcf 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -1,6 +1,6 @@ from odoo import api, fields, models -from odoo.addons.beesdoo_shift.models.cooperative_status import add_days_delta +from odoo.addons.shift.models.cooperative_status import add_days_delta class CooperativeStatus(models.Model): diff --git a/shift_worker_status/tests/__init__.py b/shift_worker_status/tests/__init__.py index 1505d70b0..f63e62069 100644 --- a/shift_worker_status/tests/__init__.py +++ b/shift_worker_status/tests/__init__.py @@ -1 +1 @@ -from . import test_beesdoo_shift +from . import test_shift diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index ebe3444bb..a51ec639e 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -16,28 +16,28 @@ def setUp(self): self.current_time = datetime.now() self.user_admin = self.env.ref("base.user_root") - self.worker_regular_1 = self.env.ref("beesdoo_shift.res_partner_worker_1_demo") - self.worker_regular_2 = self.env.ref("beesdoo_shift.res_partner_worker_3_demo") - self.worker_regular_3 = self.env.ref("beesdoo_shift.res_partner_worker_5_demo") + self.worker_regular_1 = self.env.ref("shift.res_partner_worker_1_demo") + self.worker_regular_2 = self.env.ref("shift.res_partner_worker_3_demo") + self.worker_regular_3 = self.env.ref("shift.res_partner_worker_5_demo") self.worker_irregular_1 = self.env.ref( - "beesdoo_shift.res_partner_worker_2_demo" + "shift.res_partner_worker_2_demo" ) self.worker_irregular_2 = self.env.ref( - "beesdoo_shift.res_partner_worker_4_demo" + "shift.res_partner_worker_4_demo" ) - self.task_type_1 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_1_demo") - self.task_type_2 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_2_demo") - self.task_type_3 = self.env.ref("beesdoo_shift.beesdoo_shift_task_type_3_demo") + self.task_type_1 = self.env.ref("shift.shift_task_type_1_demo") + self.task_type_2 = self.env.ref("shift.shift_task_type_2_demo") + self.task_type_3 = self.env.ref("shift.shift_task_type_3_demo") self.task_template_1 = self.env.ref( - "beesdoo_worker_status.beesdoo_shift_task_template_1_demo" + "beesdoo_worker_status.shift_task_template_1_demo" ) self.task_template_2 = self.env.ref( - "beesdoo_worker_status.beesdoo_shift_task_template_2_demo" + "beesdoo_worker_status.shift_task_template_2_demo" ) - self.exempt_reason_1 = self.env.ref("beesdoo_shift.exempt_reason_1_demo") + self.exempt_reason_1 = self.env.ref("shift.exempt_reason_1_demo") config = self.env["ir.config_parameter"].sudo() config.set_param("beesdoo_worker_status.irregular_penalty", True) diff --git a/shift_worker_status/views/res_config_settings_view.xml b/shift_worker_status/views/res_config_settings_view.xml index e82eccd20..ef0025ec9 100644 --- a/shift_worker_status/views/res_config_settings_view.xml +++ b/shift_worker_status/views/res_config_settings_view.xml @@ -8,7 +8,7 @@ Date: Mon, 19 Dec 2022 17:18:10 +0100 Subject: [PATCH 03/33] [REF] shift_worker_status: beesdoo.shift -> shift Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/demo/tasks.xml | 6 +++--- shift_worker_status/i18n/beesdoo_worker_status.pot | 2 +- shift_worker_status/models/cooperative_status.py | 4 ++-- shift_worker_status/models/task.py | 2 +- shift_worker_status/tests/test_beesdoo_shift.py | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/shift_worker_status/demo/tasks.xml b/shift_worker_status/demo/tasks.xml index 525e5bc8a..9d571dc67 100644 --- a/shift_worker_status/demo/tasks.xml +++ b/shift_worker_status/demo/tasks.xml @@ -5,7 +5,7 @@ --> - + A_LUN_7:00-9:30 @@ -20,7 +20,7 @@ /> - + A_MAR_12:00-14:30 @@ -36,7 +36,7 @@ /> - + A_VEN_7:00-9:30 diff --git a/shift_worker_status/i18n/beesdoo_worker_status.pot b/shift_worker_status/i18n/beesdoo_worker_status.pot index 771a5403a..9bf917ac9 100644 --- a/shift_worker_status/i18n/beesdoo_worker_status.pot +++ b/shift_worker_status/i18n/beesdoo_worker_status.pot @@ -105,7 +105,7 @@ msgstr "" #. module: beesdoo_worker_status #: model:ir.model,name:beesdoo_worker_status.model_shift_shift -msgid "beesdoo.shift.shift" +msgid "shift.shift" msgstr "" #. module: beesdoo_worker_status diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index 6069c6dcf..df68d5dc9 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -309,12 +309,12 @@ def _state_change(self, new_state): # Remove worker from task_templates self.cooperator_id.sudo().write({"subscribed_shift_ids": [(5, 0, 0)]}) # Remove worker from supercoop in task_templates - task_tpls = self.env["beesdoo.shift.template"].search( + task_tpls = self.env["shift.template"].search( [("super_coop_id", "in", self.cooperator_id.user_ids.ids)] ) task_tpls.write({"super_coop_id": False}) # Remove worker for future tasks (remove also supercoop) - self.env["beesdoo.shift.shift"].sudo().unsubscribe_from_today( + self.env["shift.shift"].sudo().unsubscribe_from_today( self.cooperator_id, now=fields.Datetime.now() ) diff --git a/shift_worker_status/models/task.py b/shift_worker_status/models/task.py index f4ce83a78..10c9be535 100644 --- a/shift_worker_status/models/task.py +++ b/shift_worker_status/models/task.py @@ -4,7 +4,7 @@ class Task(models.Model): - _inherit = "beesdoo.shift.shift" + _inherit = "shift.shift" def _compensation_validation(self, task): """ diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index a51ec639e..6dbed9716 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -10,8 +10,8 @@ class TestBeesdooShift(TransactionCase): def setUp(self): super(TestBeesdooShift, self).setUp() - self.shift_model = self.env["beesdoo.shift.shift"] - self.shift_template_model = self.env["beesdoo.shift.template"] + self.shift_model = self.env["shift.shift"] + self.shift_template_model = self.env["shift.template"] self.current_time = datetime.now() self.user_admin = self.env.ref("base.user_root") From 98657585655aca8cf86b3e5f419aba2f0af98c96 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Mon, 19 Dec 2022 17:19:23 +0100 Subject: [PATCH 04/33] [REF] shift_worker_status: beesdoo_worker_status -> shift_worker_status Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 2 +- ...eesdoo_worker_status_data.xml => data.xml} | 2 +- .../i18n/beesdoo_worker_status.pot | 74 +++++++++---------- .../models/cooperative_status.py | 2 +- .../models/res_config_settings.py | 2 +- .../tests/test_beesdoo_shift.py | 8 +- 6 files changed, 45 insertions(+), 45 deletions(-) rename shift_worker_status/data/{beesdoo_worker_status_data.xml => data.xml} (73%) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 67db90bc8..6f1b6b960 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -11,7 +11,7 @@ "version": "12.0.1.1.0", "depends": ["shift"], "data": [ - "data/beesdoo_worker_status_data.xml", + "data/data.xml", "views/res_config_settings_view.xml", ], "demo": ["demo/tasks.xml"], diff --git a/shift_worker_status/data/beesdoo_worker_status_data.xml b/shift_worker_status/data/data.xml similarity index 73% rename from shift_worker_status/data/beesdoo_worker_status_data.xml rename to shift_worker_status/data/data.xml index 79a0aff3e..1e8d10903 100644 --- a/shift_worker_status/data/beesdoo_worker_status_data.xml +++ b/shift_worker_status/data/data.xml @@ -2,7 +2,7 @@ - beesdoo_worker_status.irregular_penalty + shift_worker_status.irregular_penalty True diff --git a/shift_worker_status/i18n/beesdoo_worker_status.pot b/shift_worker_status/i18n/beesdoo_worker_status.pot index 9bf917ac9..fa9307d67 100644 --- a/shift_worker_status/i18n/beesdoo_worker_status.pot +++ b/shift_worker_status/i18n/beesdoo_worker_status.pot @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * beesdoo_worker_status +# * shift_worker_status # msgid "" msgstr "" @@ -13,103 +13,103 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:43 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:43 #, python-format msgid "A worker cannot replace himself." msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:55 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:55 #, python-format msgid "Absent - 0 compensation" msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:54 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:54 #, python-format msgid "Absent - 1 compensation" msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:53 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:53 #, python-format msgid "Absent - 2 compensations" msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:52 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:52 #, python-format msgid "Attended" msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:56 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:56 #, python-format msgid "Cancelled" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model,name:beesdoo_worker_status.model_res_config_settings +#. module: shift_worker_status +#: model:ir.model,name:shift_worker_status.model_res_config_settings msgid "Config Settings" msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:51 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:51 #, python-format msgid "Confirmed" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__future_alert_date +#. module: shift_worker_status +#: model:ir.model.fields,field_description:shift_worker_status.field_cooperative_status__future_alert_date msgid "Future Alert Date" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__is_penalised_irregular +#. module: shift_worker_status +#: model:ir.model.fields,field_description:shift_worker_status.field_cooperative_status__is_penalised_irregular msgid "Is Currently Penalised Irregular" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_cooperative_status__next_countdown_date +#. module: shift_worker_status +#: model:ir.model.fields,field_description:shift_worker_status.field_cooperative_status__next_countdown_date msgid "Next Countdown Date" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_res_config_settings__irregular_penalty +#. module: shift_worker_status +#: model:ir.model.fields,field_description:shift_worker_status.field_res_config_settings__irregular_penalty msgid "Penalty for irregular worker with negative counter" msgstr "" -#. module: beesdoo_worker_status -#: model_terms:ir.ui.view,arch_db:beesdoo_worker_status.res_config_settings_shift_view_form +#. module: shift_worker_status +#: model_terms:ir.ui.view,arch_db:shift_worker_status.res_config_settings_shift_view_form msgid "Penalty when irregular worker counter goes below zero." msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,field_description:beesdoo_worker_status.field_shift_shift__state +#. module: shift_worker_status +#: model:ir.model.fields,field_description:shift_worker_status.field_shift_shift__state msgid "State" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model.fields,help:beesdoo_worker_status.field_res_config_settings__irregular_penalty +#. module: shift_worker_status +#: model:ir.model.fields,help:shift_worker_status.field_res_config_settings__irregular_penalty msgid "When selected, the irregular worker's counter will decrease\n" " by two when at zero or below, unless they were in alert\n" " before or were already penalized." msgstr "" -#. module: beesdoo_worker_status -#: code:addons/beesdoo_worker_status/models/task.py:18 +#. module: shift_worker_status +#: code:addons/shift_worker_status/models/task.py:18 #, python-format msgid "You must choose between Regular Shift or Compensation Shift." msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model,name:beesdoo_worker_status.model_shift_shift +#. module: shift_worker_status +#: model:ir.model,name:shift_worker_status.model_shift_shift msgid "shift.shift" msgstr "" -#. module: beesdoo_worker_status -#: model:ir.model,name:beesdoo_worker_status.model_cooperative_status +#. module: shift_worker_status +#: model:ir.model,name:shift_worker_status.model_cooperative_status msgid "cooperative.status" msgstr "" diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index df68d5dc9..4c32ccb3e 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -353,7 +353,7 @@ def _change_irregular_counter(self): irregular_penalty = ( self.env["ir.config_parameter"] .sudo() - .get_param("beesdoo_worker_status.irregular_penalty") + .get_param("shift_worker_status.irregular_penalty") ) if irregular_penalty: if self.sr > 0: diff --git a/shift_worker_status/models/res_config_settings.py b/shift_worker_status/models/res_config_settings.py index 5ccfccf26..ebce980f5 100644 --- a/shift_worker_status/models/res_config_settings.py +++ b/shift_worker_status/models/res_config_settings.py @@ -9,5 +9,5 @@ class ResConfigSettings(models.TransientModel): help="""When selected, the irregular worker's counter will decrease by two when at zero or below, unless they were in alert before or were already penalized.""", - config_parameter="beesdoo_worker_status.irregular_penalty", + config_parameter="shift_worker_status.irregular_penalty", ) diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index 6dbed9716..eb664b24d 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -31,15 +31,15 @@ def setUp(self): self.task_type_3 = self.env.ref("shift.shift_task_type_3_demo") self.task_template_1 = self.env.ref( - "beesdoo_worker_status.shift_task_template_1_demo" + "shift_worker_status.shift_task_template_1_demo" ) self.task_template_2 = self.env.ref( - "beesdoo_worker_status.shift_task_template_2_demo" + "shift_worker_status.shift_task_template_2_demo" ) self.exempt_reason_1 = self.env.ref("shift.exempt_reason_1_demo") config = self.env["ir.config_parameter"].sudo() - config.set_param("beesdoo_worker_status.irregular_penalty", True) + config.set_param("shift_worker_status.irregular_penalty", True) def test_shift_counters(self): "Test shift counters calculation and cooperative status update" @@ -187,7 +187,7 @@ def test_shift_no_double_penalty(self): def test_shift_config_penalty_disabled(self): config = self.env["ir.config_parameter"].sudo() - config.set_param("beesdoo_worker_status.irregular_penalty", False) + config.set_param("shift_worker_status.irregular_penalty", False) worker = self.worker_irregular_1 worker.cooperative_status_ids.sr = 0 From 2ad6e5eb6e347cdea2da608ef1cba17f285f20f9 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Mon, 19 Dec 2022 17:21:03 +0100 Subject: [PATCH 05/33] [FIX] shift_worker_status: Manually remove beesdoo references Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 4 ++-- shift_worker_status/readme/DESCRIPTION.rst | 2 +- shift_worker_status/tests/test_beesdoo_shift.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 6f1b6b960..83db4039b 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -2,9 +2,9 @@ # Elouan Le Bars # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - "name": "BEES coop Worker Status manager", + "name": "Worker Status manager", "summary": """ - Worker status management specific to beescoop.""", + Worker status management.""", "author": "Thibault Francois, Elouan Le Bars, Coop IT Easy SC", "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", diff --git a/shift_worker_status/readme/DESCRIPTION.rst b/shift_worker_status/readme/DESCRIPTION.rst index f7df1c669..086432156 100644 --- a/shift_worker_status/readme/DESCRIPTION.rst +++ b/shift_worker_status/readme/DESCRIPTION.rst @@ -1 +1 @@ -Worker status management specific to beescoop. +Worker status management. diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index eb664b24d..bef9f388f 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -7,9 +7,9 @@ from odoo.tests.common import TransactionCase -class TestBeesdooShift(TransactionCase): +class TestShift(TransactionCase): def setUp(self): - super(TestBeesdooShift, self).setUp() + super(TestShift, self).setUp() self.shift_model = self.env["shift.shift"] self.shift_template_model = self.env["shift.template"] From 34a32b2d93e7246542097d0c94686ef8387ae333 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Mon, 19 Dec 2022 17:22:30 +0100 Subject: [PATCH 06/33] [REF] shift_worker_status: task -> shift_shift Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/models/__init__.py | 2 +- shift_worker_status/models/{task.py => shift_shift.py} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename shift_worker_status/models/{task.py => shift_shift.py} (99%) diff --git a/shift_worker_status/models/__init__.py b/shift_worker_status/models/__init__.py index 065ebc316..a2c75415f 100644 --- a/shift_worker_status/models/__init__.py +++ b/shift_worker_status/models/__init__.py @@ -1,3 +1,3 @@ from . import cooperative_status -from . import task from . import res_config_settings +from . import shift_shift diff --git a/shift_worker_status/models/task.py b/shift_worker_status/models/shift_shift.py similarity index 99% rename from shift_worker_status/models/task.py rename to shift_worker_status/models/shift_shift.py index 10c9be535..0810e8738 100644 --- a/shift_worker_status/models/task.py +++ b/shift_worker_status/models/shift_shift.py @@ -3,7 +3,7 @@ from odoo.tools.translate import _ -class Task(models.Model): +class Shift(models.Model): _inherit = "shift.shift" def _compensation_validation(self, task): From f0f00c5784074c3f96fbc03e31a8cbc5a6271893 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Fri, 16 Dec 2022 16:19:29 +0100 Subject: [PATCH 07/33] [FIX] shift_worker_status: Add OCA to authors Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 83db4039b..4aabcaf33 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -5,7 +5,12 @@ "name": "Worker Status manager", "summary": """ Worker status management.""", - "author": "Thibault Francois, Elouan Le Bars, Coop IT Easy SC", + "author": """ + Thibault Francois, + Elouan Le Bars, + Coop IT Easy SC, + Odoo Community Association (OCA), + """, "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", "version": "12.0.1.1.0", From a7c7c94708da055540c4ccddede86e67f280e8a3 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Fri, 16 Dec 2022 16:58:01 +0100 Subject: [PATCH 08/33] [ADD] shift_worker_status: Pre-init hook Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__init__.py | 1 + shift_worker_status/__manifest__.py | 1 + shift_worker_status/rename_beesdoo.py | 90 +++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 shift_worker_status/rename_beesdoo.py diff --git a/shift_worker_status/__init__.py b/shift_worker_status/__init__.py index 0650744f6..bc538baa8 100644 --- a/shift_worker_status/__init__.py +++ b/shift_worker_status/__init__.py @@ -1 +1,2 @@ from . import models +from .rename_beesdoo import rename_beesdoo diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 4aabcaf33..7b8a4cf69 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -21,4 +21,5 @@ ], "demo": ["demo/tasks.xml"], "license": "AGPL-3", + "pre_init_hook": "rename_beesdoo", } diff --git a/shift_worker_status/rename_beesdoo.py b/shift_worker_status/rename_beesdoo.py new file mode 100644 index 000000000..ba2b7478c --- /dev/null +++ b/shift_worker_status/rename_beesdoo.py @@ -0,0 +1,90 @@ +# Copyright 2022 Coop IT Easy SC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +"""This module was previously beesdoo_worker_status before it was moved to the OCA. +beesdoo_worker_status is presently an empty module that depends on this module. When +this module is installed, it should convert all data from the beesdoo_worker_status +module to be useable by this module. +""" + +import logging + +_logger = logging.getLogger(__name__) + +MODELS_TO_RENAME = {} +XMLIDS_TO_RENAME = [ + ( + "beesdoo_worker_status.beesdoo_shift_task_template_1_demo", + "shift.shift_task_template_1_demo", + ), + ( + "beesdoo_worker_status.beesdoo_shift_task_template_2_demo", + "shift.shift_task_template_2_demo", + ), + ( + "beesdoo_worker_status.beesdoo_shift_task_template_3_demo", + "shift.shift_task_template_3_demo", + ), +] +PARAMETER_KEYS_TO_RENAME = { + "beesdoo_worker_status.irregular_penalty": ( + "shift_worker_status.irregular_penalty" + ), +} +OLD_MODULE_NAME = "beesdoo_worker_status" +NEW_MODULE_NAME = "shift_worker_status" + + +def model_to_table(name): + return name.replace(".", "_") + + +def rename_beesdoo(cr): + cr.execute( + "SELECT id FROM ir_module_module " + "WHERE name=%s and state IN ('installed', 'to upgrade')", + (OLD_MODULE_NAME,), + ) + if not cr.fetchone(): + return + + from openupgradelib import openupgrade + + for origin, new in MODELS_TO_RENAME.items(): + table_origin = model_to_table(origin) + table_new = model_to_table(new) + if openupgrade.table_exists(cr, table_origin) and not openupgrade.table_exists( + cr, table_new + ): + _logger.info("renaming table {} to {}".format(table_origin, table_new)) + openupgrade.rename_tables(cr, [(table_origin, table_new)]) + + _logger.info("renaming model {} to {}".format(origin, new)) + openupgrade.rename_models(cr, [(origin, new)]) + + for origin, new in PARAMETER_KEYS_TO_RENAME.items(): + _logger.info("renaming key {} to {}".format(origin, new)) + openupgrade.logged_query( + cr, + """ + UPDATE ir_config_parameter SET key = %s + WHERE key = %s""", + (new, origin), + ) + + _logger.info("renaming xmlids") + openupgrade.rename_xmlids(cr, XMLIDS_TO_RENAME) + + _logger.info( + "transferring ir_model_data from {} to {}".format( + OLD_MODULE_NAME, NEW_MODULE_NAME + ) + ) + openupgrade.logged_query( + cr, + """ + UPDATE ir_model_data SET module = %s + WHERE module = %s AND name NOT IN + (SELECT name FROM ir_model_data WHERE module = %s)""", + (NEW_MODULE_NAME, OLD_MODULE_NAME, NEW_MODULE_NAME), + ) From 5d4d20dabc9d012af431f3ae92cc31486b068ba3 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Mon, 19 Dec 2022 17:27:29 +0100 Subject: [PATCH 09/33] [FIX] Satisfy pre-commit Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/tests/test_beesdoo_shift.py | 8 ++------ shift_worker_status/views/res_config_settings_view.xml | 5 +---- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index bef9f388f..c5d9539e0 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -19,12 +19,8 @@ def setUp(self): self.worker_regular_1 = self.env.ref("shift.res_partner_worker_1_demo") self.worker_regular_2 = self.env.ref("shift.res_partner_worker_3_demo") self.worker_regular_3 = self.env.ref("shift.res_partner_worker_5_demo") - self.worker_irregular_1 = self.env.ref( - "shift.res_partner_worker_2_demo" - ) - self.worker_irregular_2 = self.env.ref( - "shift.res_partner_worker_4_demo" - ) + self.worker_irregular_1 = self.env.ref("shift.res_partner_worker_2_demo") + self.worker_irregular_2 = self.env.ref("shift.res_partner_worker_4_demo") self.task_type_1 = self.env.ref("shift.shift_task_type_1_demo") self.task_type_2 = self.env.ref("shift.shift_task_type_2_demo") diff --git a/shift_worker_status/views/res_config_settings_view.xml b/shift_worker_status/views/res_config_settings_view.xml index ef0025ec9..36ca02923 100644 --- a/shift_worker_status/views/res_config_settings_view.xml +++ b/shift_worker_status/views/res_config_settings_view.xml @@ -6,10 +6,7 @@ res_config_settings_shift_view_form res.config.settings - + Date: Mon, 16 Jan 2023 10:06:31 +0100 Subject: [PATCH 10/33] [FIX] fix beesdoo renaming scripts * rename many2many tables and their columns. * rename constraints and indexes. --- shift_worker_status/rename_beesdoo.py | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/shift_worker_status/rename_beesdoo.py b/shift_worker_status/rename_beesdoo.py index ba2b7478c..4e2ecffcd 100644 --- a/shift_worker_status/rename_beesdoo.py +++ b/shift_worker_status/rename_beesdoo.py @@ -11,7 +11,6 @@ _logger = logging.getLogger(__name__) -MODELS_TO_RENAME = {} XMLIDS_TO_RENAME = [ ( "beesdoo_worker_status.beesdoo_shift_task_template_1_demo", @@ -35,10 +34,6 @@ NEW_MODULE_NAME = "shift_worker_status" -def model_to_table(name): - return name.replace(".", "_") - - def rename_beesdoo(cr): cr.execute( "SELECT id FROM ir_module_module " @@ -50,18 +45,6 @@ def rename_beesdoo(cr): from openupgradelib import openupgrade - for origin, new in MODELS_TO_RENAME.items(): - table_origin = model_to_table(origin) - table_new = model_to_table(new) - if openupgrade.table_exists(cr, table_origin) and not openupgrade.table_exists( - cr, table_new - ): - _logger.info("renaming table {} to {}".format(table_origin, table_new)) - openupgrade.rename_tables(cr, [(table_origin, table_new)]) - - _logger.info("renaming model {} to {}".format(origin, new)) - openupgrade.rename_models(cr, [(origin, new)]) - for origin, new in PARAMETER_KEYS_TO_RENAME.items(): _logger.info("renaming key {} to {}".format(origin, new)) openupgrade.logged_query( @@ -80,6 +63,8 @@ def rename_beesdoo(cr): OLD_MODULE_NAME, NEW_MODULE_NAME ) ) + # this query comes from openupgrade.update_module_names(), which cannot be + # used directly here because the module with the old name still exists. openupgrade.logged_query( cr, """ From 7ed948c598740aa1f9da85c684978430ddc2777a Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Tue, 7 Mar 2023 11:54:17 +0100 Subject: [PATCH 11/33] [FIX] shift_worker_status: Copy old value from parameter Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__init__.py | 1 + shift_worker_status/__manifest__.py | 1 + shift_worker_status/post_init.py | 36 +++++++++++++++++++++++++++ shift_worker_status/rename_beesdoo.py | 15 ----------- 4 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 shift_worker_status/post_init.py diff --git a/shift_worker_status/__init__.py b/shift_worker_status/__init__.py index bc538baa8..0ca1a9d20 100644 --- a/shift_worker_status/__init__.py +++ b/shift_worker_status/__init__.py @@ -1,2 +1,3 @@ from . import models from .rename_beesdoo import rename_beesdoo +from .post_init import post_init diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 7b8a4cf69..7fe535090 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -22,4 +22,5 @@ "demo": ["demo/tasks.xml"], "license": "AGPL-3", "pre_init_hook": "rename_beesdoo", + "post_init_hook": "post_init", } diff --git a/shift_worker_status/post_init.py b/shift_worker_status/post_init.py new file mode 100644 index 000000000..01247e8dd --- /dev/null +++ b/shift_worker_status/post_init.py @@ -0,0 +1,36 @@ +# Copyright 2022 Coop IT Easy SC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import SUPERUSER_ID, api + +_logger = logging.getLogger(__name__) + +OLD_MODULE_NAME = "beesdoo_worker_status" +NEW_MODULE_NAME = "shift_worker_status" + +PARAMS_TO_RENAME = { + "beesdoo_worker_status.irregular_penalty": "shift_worker_status.irregular_penalty", +} + + +def post_init(cr, registry): + cr.execute( + "SELECT id FROM ir_module_module " + "WHERE name = %s and state IN ('installed', 'to upgrade')", + (OLD_MODULE_NAME,), + ) + if not cr.fetchone(): + return + + env = api.Environment(cr, SUPERUSER_ID, {}) + for old_key, new_key in PARAMS_TO_RENAME.items(): + try: + old_value = env["ir.config_parameter"].get_param(old_key) + except Exception: + _logger.warning("could not find value for '%s'", old_key) + continue + env["ir.config_parameter"].set_param(new_key, old_value) + # Delete old parameter. + env["ir.config_parameter"].search([("key", "=", old_key)]).unlink() diff --git a/shift_worker_status/rename_beesdoo.py b/shift_worker_status/rename_beesdoo.py index 4e2ecffcd..da388f09c 100644 --- a/shift_worker_status/rename_beesdoo.py +++ b/shift_worker_status/rename_beesdoo.py @@ -25,11 +25,6 @@ "shift.shift_task_template_3_demo", ), ] -PARAMETER_KEYS_TO_RENAME = { - "beesdoo_worker_status.irregular_penalty": ( - "shift_worker_status.irregular_penalty" - ), -} OLD_MODULE_NAME = "beesdoo_worker_status" NEW_MODULE_NAME = "shift_worker_status" @@ -45,16 +40,6 @@ def rename_beesdoo(cr): from openupgradelib import openupgrade - for origin, new in PARAMETER_KEYS_TO_RENAME.items(): - _logger.info("renaming key {} to {}".format(origin, new)) - openupgrade.logged_query( - cr, - """ - UPDATE ir_config_parameter SET key = %s - WHERE key = %s""", - (new, origin), - ) - _logger.info("renaming xmlids") openupgrade.rename_xmlids(cr, XMLIDS_TO_RENAME) From 20f2e8c447663bf08bbc6338bd065d66126b2ec9 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Wed, 8 Mar 2023 16:56:45 +0100 Subject: [PATCH 12/33] [FIX] shift: Prefix parameters in code Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/models/cooperative_status.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index 4c32ccb3e..d34948947 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -143,13 +143,13 @@ def _get_regular_status(self): counter_unsubscribe = int( self.env["ir.config_parameter"] .sudo() - .get_param("regular_counter_to_unsubscribe", -4) + .get_param("shift.regular_counter_to_unsubscribe", -4) ) alert_delay = int( - self.env["ir.config_parameter"].sudo().get_param("alert_delay", 28) + self.env["ir.config_parameter"].sudo().get_param("shift.alert_delay", 28) ) grace_delay = int( - self.env["ir.config_parameter"].sudo().get_param("default_grace_delay", 10) + self.env["ir.config_parameter"].sudo().get_param("shift.default_grace_delay", 10) ) ok = self.sr >= 0 and self.sc >= 0 grace_delay = grace_delay + self.time_extension @@ -220,13 +220,13 @@ def _get_irregular_status(self): counter_unsubscribe = int( self.env["ir.config_parameter"] .sudo() - .get_param("irregular_counter_to_unsubscribe", -3) + .get_param("shift.irregular_counter_to_unsubscribe", -3) ) alert_delay = int( - self.env["ir.config_parameter"].sudo().get_param("alert_delay", 28) + self.env["ir.config_parameter"].sudo().get_param("shift.alert_delay", 28) ) grace_delay = int( - self.env["ir.config_parameter"].sudo().get_param("default_grace_delay", 10) + self.env["ir.config_parameter"].sudo().get_param("shift.default_grace_delay", 10) ) ok = self.sr >= 0 grace_delay = grace_delay + self.time_extension From c613121951930e35cdd56408995267380c3cff8e Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Wed, 8 Mar 2023 17:13:02 +0100 Subject: [PATCH 13/33] [IMP] Add logging entry Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/post_init.py | 1 + 1 file changed, 1 insertion(+) diff --git a/shift_worker_status/post_init.py b/shift_worker_status/post_init.py index 01247e8dd..b461a82c5 100644 --- a/shift_worker_status/post_init.py +++ b/shift_worker_status/post_init.py @@ -26,6 +26,7 @@ def post_init(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) for old_key, new_key in PARAMS_TO_RENAME.items(): + _logger.info("renaming %s to %s", old_key, new_key) try: old_value = env["ir.config_parameter"].get_param(old_key) except Exception: From 0dea29e5cf49bfa9ccf0308e279d623306c97ec5 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 09:57:18 +0100 Subject: [PATCH 14/33] [FIX] Actually preserve old param values There are two fixes in this commit: - Use .search() instead of .get_param() for a more robust search of the old value. - Rename all XMLIDs. When they XMLIDs aren't renamed, the values get overridden during init, even though the config_parameter keys were renamed. Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/data/data.xml | 2 +- shift_worker_status/post_init.py | 14 +++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/shift_worker_status/data/data.xml b/shift_worker_status/data/data.xml index 1e8d10903..4a6106819 100644 --- a/shift_worker_status/data/data.xml +++ b/shift_worker_status/data/data.xml @@ -1,7 +1,7 @@ - + shift_worker_status.irregular_penalty True diff --git a/shift_worker_status/post_init.py b/shift_worker_status/post_init.py index b461a82c5..d33813afb 100644 --- a/shift_worker_status/post_init.py +++ b/shift_worker_status/post_init.py @@ -26,12 +26,8 @@ def post_init(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) for old_key, new_key in PARAMS_TO_RENAME.items(): - _logger.info("renaming %s to %s", old_key, new_key) - try: - old_value = env["ir.config_parameter"].get_param(old_key) - except Exception: - _logger.warning("could not find value for '%s'", old_key) - continue - env["ir.config_parameter"].set_param(new_key, old_value) - # Delete old parameter. - env["ir.config_parameter"].search([("key", "=", old_key)]).unlink() + old_param = env["ir.config_parameter"].search([("key", "=", old_key)]) + if old_param: + _logger.info("renaming %s to %s", old_key, new_key) + env["ir.config_parameter"].set_param(new_key, old_param.value) + old_param.unlink() From f7ad64f210ae592371e8f50502d6cf9a44287d0d Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 12:30:52 +0100 Subject: [PATCH 15/33] [FIX] shift_worker_status: Rename file Signed-off-by: Carmen Bianca BAKKER --- .../i18n/{beesdoo_worker_status.pot => shift_worker_status.pot} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename shift_worker_status/i18n/{beesdoo_worker_status.pot => shift_worker_status.pot} (100%) diff --git a/shift_worker_status/i18n/beesdoo_worker_status.pot b/shift_worker_status/i18n/shift_worker_status.pot similarity index 100% rename from shift_worker_status/i18n/beesdoo_worker_status.pot rename to shift_worker_status/i18n/shift_worker_status.pot From 64ca785b56122de2590473427a20f96ec259581f Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 12:31:22 +0100 Subject: [PATCH 16/33] [FIX] shift_worker_status: rename class Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/models/shift_shift.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shift_worker_status/models/shift_shift.py b/shift_worker_status/models/shift_shift.py index 0810e8738..ad5bf474b 100644 --- a/shift_worker_status/models/shift_shift.py +++ b/shift_worker_status/models/shift_shift.py @@ -3,7 +3,7 @@ from odoo.tools.translate import _ -class Shift(models.Model): +class ShiftShift(models.Model): _inherit = "shift.shift" def _compensation_validation(self, task): From 68740b9413ced8b2d95a204a44202b7d8fc222ee Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 12:31:54 +0100 Subject: [PATCH 17/33] [FIX] shift_worker_status: rename test class Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/tests/test_beesdoo_shift.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_beesdoo_shift.py index c5d9539e0..024e24d1a 100644 --- a/shift_worker_status/tests/test_beesdoo_shift.py +++ b/shift_worker_status/tests/test_beesdoo_shift.py @@ -7,9 +7,9 @@ from odoo.tests.common import TransactionCase -class TestShift(TransactionCase): +class TestShiftWorkerStatus(TransactionCase): def setUp(self): - super(TestShift, self).setUp() + super().setUp() self.shift_model = self.env["shift.shift"] self.shift_template_model = self.env["shift.template"] From d3f0df29c9a99806ae43cb6a0c64a913a346865e Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 12:34:30 +0100 Subject: [PATCH 18/33] [FIX] Run pre-commit Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/models/cooperative_status.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index d34948947..145b5782b 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -149,7 +149,9 @@ def _get_regular_status(self): self.env["ir.config_parameter"].sudo().get_param("shift.alert_delay", 28) ) grace_delay = int( - self.env["ir.config_parameter"].sudo().get_param("shift.default_grace_delay", 10) + self.env["ir.config_parameter"] + .sudo() + .get_param("shift.default_grace_delay", 10) ) ok = self.sr >= 0 and self.sc >= 0 grace_delay = grace_delay + self.time_extension @@ -226,7 +228,9 @@ def _get_irregular_status(self): self.env["ir.config_parameter"].sudo().get_param("shift.alert_delay", 28) ) grace_delay = int( - self.env["ir.config_parameter"].sudo().get_param("shift.default_grace_delay", 10) + self.env["ir.config_parameter"] + .sudo() + .get_param("shift.default_grace_delay", 10) ) ok = self.sr >= 0 grace_delay = grace_delay + self.time_extension From 5e757c10ea0652087a358cade8c354a552681b38 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Thu, 9 Mar 2023 12:45:29 +0100 Subject: [PATCH 19/33] [FIX] shift_worker_status: rename test file Signed-off-by: Carmen Bianca BAKKER --- .../tests/{test_beesdoo_shift.py => test_shift.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename shift_worker_status/tests/{test_beesdoo_shift.py => test_shift.py} (100%) diff --git a/shift_worker_status/tests/test_beesdoo_shift.py b/shift_worker_status/tests/test_shift.py similarity index 100% rename from shift_worker_status/tests/test_beesdoo_shift.py rename to shift_worker_status/tests/test_shift.py From 8ac4f91516d2a41825719a5bd45b61bf299f1077 Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Fri, 24 Mar 2023 10:58:23 +0100 Subject: [PATCH 20/33] [FIX] author fields in manifests Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 7fe535090..10a1bc9e9 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -5,12 +5,12 @@ "name": "Worker Status manager", "summary": """ Worker status management.""", - "author": """ - Thibault Francois, - Elouan Le Bars, - Coop IT Easy SC, - Odoo Community Association (OCA), - """, + "author": ( + "Thibault Francois, " + "Elouan Le Bars, " + "Coop IT Easy SC, " + "Odoo Community Association (OCA)" + ), "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", "version": "12.0.1.1.0", From 4cbd98fc5e668e5272732d41f87ae42a4ecee51a Mon Sep 17 00:00:00 2001 From: Carmen Bianca BAKKER Date: Fri, 24 Mar 2023 11:00:40 +0100 Subject: [PATCH 21/33] [UPD] bump versions Signed-off-by: Carmen Bianca BAKKER --- shift_worker_status/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 10a1bc9e9..37800e5c9 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -13,7 +13,7 @@ ), "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", - "version": "12.0.1.1.0", + "version": "12.0.2.0.0", "depends": ["shift"], "data": [ "data/data.xml", From dfe84c33ed2123b1ddf0e69ba26cca8b72fb09a7 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 24 Mar 2023 15:06:22 +0000 Subject: [PATCH 22/33] [UPD] Update shift_worker_status.pot --- .../i18n/shift_worker_status.pot | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/shift_worker_status/i18n/shift_worker_status.pot b/shift_worker_status/i18n/shift_worker_status.pot index fa9307d67..301e71126 100644 --- a/shift_worker_status/i18n/shift_worker_status.pot +++ b/shift_worker_status/i18n/shift_worker_status.pot @@ -14,37 +14,37 @@ msgstr "" "Plural-Forms: \n" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:43 +#: code:addons/shift_worker_status/models/shift_shift.py:43 #, python-format msgid "A worker cannot replace himself." msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:55 +#: code:addons/shift_worker_status/models/shift_shift.py:55 #, python-format msgid "Absent - 0 compensation" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:54 +#: code:addons/shift_worker_status/models/shift_shift.py:54 #, python-format msgid "Absent - 1 compensation" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:53 +#: code:addons/shift_worker_status/models/shift_shift.py:53 #, python-format msgid "Absent - 2 compensations" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:52 +#: code:addons/shift_worker_status/models/shift_shift.py:52 #, python-format msgid "Attended" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:56 +#: code:addons/shift_worker_status/models/shift_shift.py:56 #, python-format msgid "Cancelled" msgstr "" @@ -55,7 +55,7 @@ msgid "Config Settings" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:51 +#: code:addons/shift_worker_status/models/shift_shift.py:51 #, python-format msgid "Confirmed" msgstr "" @@ -98,18 +98,18 @@ msgid "When selected, the irregular worker's counter will decrease\n" msgstr "" #. module: shift_worker_status -#: code:addons/shift_worker_status/models/task.py:18 +#: code:addons/shift_worker_status/models/shift_shift.py:18 #, python-format msgid "You must choose between Regular Shift or Compensation Shift." msgstr "" #. module: shift_worker_status -#: model:ir.model,name:shift_worker_status.model_shift_shift -msgid "shift.shift" +#: model:ir.model,name:shift_worker_status.model_cooperative_status +msgid "cooperative.status" msgstr "" #. module: shift_worker_status -#: model:ir.model,name:shift_worker_status.model_cooperative_status -msgid "cooperative.status" +#: model:ir.model,name:shift_worker_status.model_shift_shift +msgid "shift.shift" msgstr "" From fc4f23499e8c4940a3c8bd1625bc2bfd53d90698 Mon Sep 17 00:00:00 2001 From: Github GRAP Bot Date: Fri, 24 Mar 2023 15:12:42 +0000 Subject: [PATCH 23/33] [UPD] README.rst --- shift_worker_status/README.rst | 77 ++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 shift_worker_status/README.rst diff --git a/shift_worker_status/README.rst b/shift_worker_status/README.rst new file mode 100644 index 000000000..c39f26e9b --- /dev/null +++ b/shift_worker_status/README.rst @@ -0,0 +1,77 @@ +===================== +Worker Status manager +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-beescoop%2FObeesdoo-lightgray.png?logo=github + :target: https://github.com/beescoop/Obeesdoo/tree/12.0/shift_worker_status + :alt: beescoop/Obeesdoo + +|badge1| |badge2| |badge3| + +Worker status management. + +**Table of contents** + +.. contents:: + :local: + +Changelog +========= + +12.0.1.1.0 (2022-06-23) +**Features** + +- Do not apply a penalty to irregular customers twice in a row. Best explained + through an example. + + Imagine the following 'sr' of an irregular worker: + + 0 -> -2 (cron, penalty) -> -1 (work a shift) -> 0 (work another shift) + -> ??? (cron) + + The last step should go to -1 instead of -2. The penalty should not be given + again until sr has reached 1. (`#388 `_) + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Thibault Francois +* Elouan Le Bars +* Coop IT Easy SC + +Contributors +~~~~~~~~~~~~ + +* BEES coop - Cellule IT +* Coop IT Easy SC + +Maintainers +~~~~~~~~~~~ + +This module is part of the `beescoop/Obeesdoo `_ project on GitHub. + +You are welcome to contribute. From ff66f45a90d179f95a64dae7be3e828ee4eaafd9 Mon Sep 17 00:00:00 2001 From: hugues de keyzer Date: Tue, 20 Jun 2023 10:35:53 +0200 Subject: [PATCH 24/33] [FIX] fix penalty setting resetting on update fix shift_worker_status.irregular_penalty config parameter resetting to true when updating the module. --- shift_worker_status/data/data.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/shift_worker_status/data/data.xml b/shift_worker_status/data/data.xml index 4a6106819..c10a2f00b 100644 --- a/shift_worker_status/data/data.xml +++ b/shift_worker_status/data/data.xml @@ -1,7 +1,20 @@ - + + shift_worker_status.irregular_penalty True From 3a27b5ba4148e0b3ce9130dc29e61a5d54f47e32 Mon Sep 17 00:00:00 2001 From: Github GRAP Bot Date: Tue, 20 Jun 2023 09:10:24 +0000 Subject: [PATCH 25/33] shift_worker_status 12.0.2.0.1 --- shift_worker_status/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 37800e5c9..63bcc8cf6 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -13,7 +13,7 @@ ), "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", - "version": "12.0.2.0.0", + "version": "12.0.2.0.1", "depends": ["shift"], "data": [ "data/data.xml", From c0b80361ffd2192e41f21a385ec4eecc754a3181 Mon Sep 17 00:00:00 2001 From: Github GRAP Bot Date: Fri, 1 Nov 2024 10:42:20 +0000 Subject: [PATCH 26/33] [BOT] post-merge updates --- shift_worker_status/README.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/shift_worker_status/README.rst b/shift_worker_status/README.rst index c39f26e9b..f449f44f9 100644 --- a/shift_worker_status/README.rst +++ b/shift_worker_status/README.rst @@ -2,10 +2,13 @@ Worker Status manager ===================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:1264e1a467f997c42caa77a8b8f5428eaed9940ac16bbe707abe2b48ed4c5870 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -17,7 +20,7 @@ Worker Status manager :target: https://github.com/beescoop/Obeesdoo/tree/12.0/shift_worker_status :alt: beescoop/Obeesdoo -|badge1| |badge2| |badge3| +|badge1| |badge2| |badge3| Worker status management. @@ -48,7 +51,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. From 6231499a6d33e38b35d2a1bfa8c4f996d599aefc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Taymans?= Date: Wed, 4 Dec 2024 11:47:20 +0100 Subject: [PATCH 27/33] [MIG] shift_worker_status: migration to 16.0 --- .../odoo/addons/shift_worker_status | 1 + setup/shift_worker_status/setup.py | 6 + shift_worker_status/README.rst | 6 +- shift_worker_status/__manifest__.py | 2 +- shift_worker_status/data/data.xml | 38 +- .../models/cooperative_status.py | 3 +- .../static/description/index.html | 435 ++++++++++++++++++ shift_worker_status/tests/test_shift.py | 10 +- .../views/res_config_settings_view.xml | 46 +- 9 files changed, 493 insertions(+), 54 deletions(-) create mode 120000 setup/shift_worker_status/odoo/addons/shift_worker_status create mode 100644 setup/shift_worker_status/setup.py create mode 100644 shift_worker_status/static/description/index.html diff --git a/setup/shift_worker_status/odoo/addons/shift_worker_status b/setup/shift_worker_status/odoo/addons/shift_worker_status new file mode 120000 index 000000000..42e300498 --- /dev/null +++ b/setup/shift_worker_status/odoo/addons/shift_worker_status @@ -0,0 +1 @@ +../../../../shift_worker_status \ No newline at end of file diff --git a/setup/shift_worker_status/setup.py b/setup/shift_worker_status/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/shift_worker_status/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/shift_worker_status/README.rst b/shift_worker_status/README.rst index f449f44f9..ec2547d63 100644 --- a/shift_worker_status/README.rst +++ b/shift_worker_status/README.rst @@ -17,7 +17,7 @@ Worker Status manager :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-beescoop%2FObeesdoo-lightgray.png?logo=github - :target: https://github.com/beescoop/Obeesdoo/tree/12.0/shift_worker_status + :target: https://github.com/beescoop/Obeesdoo/tree/16.0/shift_worker_status :alt: beescoop/Obeesdoo |badge1| |badge2| |badge3| @@ -52,7 +52,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -75,6 +75,6 @@ Contributors Maintainers ~~~~~~~~~~~ -This module is part of the `beescoop/Obeesdoo `_ project on GitHub. +This module is part of the `beescoop/Obeesdoo `_ project on GitHub. You are welcome to contribute. diff --git a/shift_worker_status/__manifest__.py b/shift_worker_status/__manifest__.py index 63bcc8cf6..bade3c67c 100644 --- a/shift_worker_status/__manifest__.py +++ b/shift_worker_status/__manifest__.py @@ -13,7 +13,7 @@ ), "website": "https://github.com/beescoop/Obeesdoo", "category": "Cooperative management", - "version": "12.0.2.0.1", + "version": "16.0.1.0.0", "depends": ["shift"], "data": [ "data/data.xml", diff --git a/shift_worker_status/data/data.xml b/shift_worker_status/data/data.xml index c10a2f00b..5af4b6bda 100644 --- a/shift_worker_status/data/data.xml +++ b/shift_worker_status/data/data.xml @@ -1,22 +1,20 @@ - - - - - shift_worker_status.irregular_penalty - True - - + + + + shift_worker_status.irregular_penalty + True + diff --git a/shift_worker_status/models/cooperative_status.py b/shift_worker_status/models/cooperative_status.py index 145b5782b..6a7f3a4be 100644 --- a/shift_worker_status/models/cooperative_status.py +++ b/shift_worker_status/models/cooperative_status.py @@ -135,8 +135,9 @@ def _compute_next_countdown_date(self): ##################################### def write(self, vals): - super(CooperativeStatus, self).write(vals) + result = super(CooperativeStatus, self).write(vals) self._postpone_alert_start_time() + return result def _get_regular_status(self): self.ensure_one() diff --git a/shift_worker_status/static/description/index.html b/shift_worker_status/static/description/index.html new file mode 100644 index 000000000..d25387e48 --- /dev/null +++ b/shift_worker_status/static/description/index.html @@ -0,0 +1,435 @@ + + + + + +Worker Status manager + + + +
+

Worker Status manager

+ + +

Beta License: AGPL-3 beescoop/Obeesdoo

+

Worker status management.

+

Table of contents

+ +
+

Changelog

+

12.0.1.1.0 (2022-06-23) +Features

+
    +
  • Do not apply a penalty to irregular customers twice in a row. Best explained +through an example.

    +

    Imagine the following ‘sr’ of an irregular worker:

    +

    0 -> -2 (cron, penalty) -> -1 (work a shift) -> 0 (work another shift) +-> ??? (cron)

    +

    The last step should go to -1 instead of -2. The penalty should not be given +again until sr has reached 1. (#388)

    +
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Thibault Francois
  • +
  • Elouan Le Bars
  • +
  • Coop IT Easy SC
  • +
+
+
+

Contributors

+
    +
  • BEES coop - Cellule IT
  • +
  • Coop IT Easy SC
  • +
+
+
+

Maintainers

+

This module is part of the beescoop/Obeesdoo project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/shift_worker_status/tests/test_shift.py b/shift_worker_status/tests/test_shift.py index 024e24d1a..016144362 100644 --- a/shift_worker_status/tests/test_shift.py +++ b/shift_worker_status/tests/test_shift.py @@ -84,13 +84,13 @@ def test_shift_counters(self): self.assertEqual(status_1.sr, -1) self.assertEqual(status_1.status, "alert") shift_regular.state = "done" - self.assertEquals(status_1.sr, 0) - self.assertEquals(status_1.sc, 0) + self.assertEqual(status_1.sr, 0) + self.assertEqual(status_1.sc, 0) shift_regular.state = "open" shift_regular.write({"is_regular": False, "is_compensation": True}) shift_regular.state = "done" - self.assertEquals(status_1.sr, 1) - self.assertEquals(status_1.sc, 0) + self.assertEqual(status_1.sr, 1) + self.assertEqual(status_1.sc, 0) # Check unsubscribed status status_1.sr = -1 @@ -103,7 +103,7 @@ def test_shift_counters(self): self.assertIn("future", str(e.exception)) status_1.sr = -2 status_1.sc = -2 - self.assertEquals(status_1.status, "unsubscribed") + self.assertEqual(status_1.status, "unsubscribed") # Should be unsubscribed from future shift self.assertFalse(future_shift_regular.worker_id) diff --git a/shift_worker_status/views/res_config_settings_view.xml b/shift_worker_status/views/res_config_settings_view.xml index 36ca02923..20695ee06 100644 --- a/shift_worker_status/views/res_config_settings_view.xml +++ b/shift_worker_status/views/res_config_settings_view.xml @@ -1,31 +1,29 @@ - - - res_config_settings_shift_view_form - res.config.settings - - - - -
-
- -
-
-