Skip to content

Commit

Permalink
[ADD] config to disable penalty
Browse files Browse the repository at this point in the history
  • Loading branch information
victor-champonnois authored and carmenbianca committed Dec 16, 2022
1 parent 6b1c897 commit 67e7957
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 10 deletions.
5 changes: 4 additions & 1 deletion beesdoo_worker_status/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
}
9 changes: 9 additions & 0 deletions beesdoo_worker_status/data/beesdoo_worker_status_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" ?>
<odoo>
<data noupdate="1">
<record id="config_irregular_penalty" model="ir.config_parameter">
<field name="key">beesdoo_worker_status.irregular_penalty</field>
<field name="value">True</field>
</record>
</data>
</odoo>
1 change: 1 addition & 0 deletions beesdoo_worker_status/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from . import cooperative_status
from . import task
from . import res_config_settings
26 changes: 17 additions & 9 deletions beesdoo_worker_status/models/cooperative_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 #
Expand Down
13 changes: 13 additions & 0 deletions beesdoo_worker_status/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -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",
)
13 changes: 13 additions & 0 deletions beesdoo_worker_status/tests/test_beesdoo_shift.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
34 changes: 34 additions & 0 deletions beesdoo_worker_status/views/res_config_settings_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>

<record id="res_config_settings_shift_view_form" model="ir.ui.view">
<field name="name">res_config_settings_shift_view_form</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="50" />
<field
name="inherit_id"
ref="beesdoo_shift.res_config_settings_shift_view_form"
/>
<field name="arch" type="xml">
<xpath
expr="//div[@id='shift_settings_block']/div[hasclass('o_settings_container')]"
position="inside"
>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="irregular_penalty" />
</div>
<div class="o_setting_right_pane">
<label for="irregular_penalty" />
<div class="text-muted">
Penalty when irregular worker counter goes below zero.
</div>
</div>
</div>
</xpath>
</field>
</record>

</data>
</odoo>

0 comments on commit 67e7957

Please sign in to comment.