diff --git a/beesdoo_worker_status/__manifest__.py b/beesdoo_worker_status/__manifest__.py index ab7e8e967..dbf7a3ef6 100644 --- a/beesdoo_worker_status/__manifest__.py +++ b/beesdoo_worker_status/__manifest__.py @@ -10,7 +10,10 @@ "category": "Cooperative management", "version": "12.0.1.1.0", "depends": ["beesdoo_shift"], - "data": [], + "data": [ + "data/beesdoo_worker_status_data.xml", + "views/res_config_settings_view.xml", + ], "demo": ["demo/tasks.xml"], "license": "AGPL-3", } diff --git a/beesdoo_worker_status/data/beesdoo_worker_status_data.xml b/beesdoo_worker_status/data/beesdoo_worker_status_data.xml new file mode 100644 index 000000000..79a0aff3e --- /dev/null +++ b/beesdoo_worker_status/data/beesdoo_worker_status_data.xml @@ -0,0 +1,9 @@ + + + + + beesdoo_worker_status.irregular_penalty + True + + + diff --git a/beesdoo_worker_status/models/__init__.py b/beesdoo_worker_status/models/__init__.py index 24504b1d7..065ebc316 100644 --- a/beesdoo_worker_status/models/__init__.py +++ b/beesdoo_worker_status/models/__init__.py @@ -1,2 +1,3 @@ from . import cooperative_status from . import task +from . import res_config_settings diff --git a/beesdoo_worker_status/models/cooperative_status.py b/beesdoo_worker_status/models/cooperative_status.py index 9ab2abda5..72fa00a72 100644 --- a/beesdoo_worker_status/models/cooperative_status.py +++ b/beesdoo_worker_status/models/cooperative_status.py @@ -350,16 +350,24 @@ def _get_irregular_worker_domain(self, today): ] def _change_irregular_counter(self): - 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 + 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 -= 2 - # Until sr is 1 or above, don't do another penalty. - self.is_penalised_irregular = True + self.sr -= 1 ################################## # Internal Implementation # diff --git a/beesdoo_worker_status/models/res_config_settings.py b/beesdoo_worker_status/models/res_config_settings.py new file mode 100644 index 000000000..5ccfccf26 --- /dev/null +++ b/beesdoo_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/beesdoo_worker_status/tests/test_beesdoo_shift.py b/beesdoo_worker_status/tests/test_beesdoo_shift.py index 3783776b4..ebe3444bb 100644 --- a/beesdoo_worker_status/tests/test_beesdoo_shift.py +++ b/beesdoo_worker_status/tests/test_beesdoo_shift.py @@ -38,6 +38,8 @@ def setUp(self): ) 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" @@ -141,6 +143,7 @@ def test_shift_no_double_penalty(self): 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) @@ -182,6 +185,16 @@ def test_shift_no_double_penalty(self): 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 diff --git a/beesdoo_worker_status/views/res_config_settings_view.xml b/beesdoo_worker_status/views/res_config_settings_view.xml new file mode 100644 index 000000000..e82eccd20 --- /dev/null +++ b/beesdoo_worker_status/views/res_config_settings_view.xml @@ -0,0 +1,34 @@ + + + + + + res_config_settings_shift_view_form + res.config.settings + + + + +
+
+ +
+
+
+
+
+
+
+ +
+