From 3682a8d38021fa065950d3fe748eb51217c310ea Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Tue, 11 Jan 2022 12:53:31 -0800 Subject: [PATCH] [IMP] hr_payroll_hibou: add mechanism to lock parameter (don't receive updates) --- hr_payroll_hibou/__manifest__.py | 1 + hr_payroll_hibou/models/hr_salary_rule.py | 7 +++++++ hr_payroll_hibou/models/update.py | 6 ++---- hr_payroll_hibou/tests/common.py | 2 +- hr_payroll_hibou/tests/test_update.py | 22 ++++++++++++++++++---- hr_payroll_hibou/views/payroll_views.xml | 15 +++++++++++++++ hr_payroll_hibou/views/update_views.xml | 3 +-- 7 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 hr_payroll_hibou/views/payroll_views.xml diff --git a/hr_payroll_hibou/__manifest__.py b/hr_payroll_hibou/__manifest__.py index 1e08e3bb..86a1a11a 100644 --- a/hr_payroll_hibou/__manifest__.py +++ b/hr_payroll_hibou/__manifest__.py @@ -20,6 +20,7 @@ Base module for fixing specific qwerks or assumptions in the way Payroll Odoo En 'data': [ 'security/ir.model.access.csv', 'data/cron_data.xml', + 'views/payroll_views.xml', 'views/res_config_settings_views.xml', 'views/update_views.xml', ], diff --git a/hr_payroll_hibou/models/hr_salary_rule.py b/hr_payroll_hibou/models/hr_salary_rule.py index 9ad2234d..0108dba4 100644 --- a/hr_payroll_hibou/models/hr_salary_rule.py +++ b/hr_payroll_hibou/models/hr_salary_rule.py @@ -17,3 +17,10 @@ class HrPayrollStructureType(models.Model): default_schedule_pay = fields.Selection(selection_add=[ ('semi-monthly', 'Semi-monthly'), ]) + + +class HrRuleParameter(models.Model): + _inherit = 'hr.rule.parameter' + + update_locked = fields.Boolean(string='Update Lock', + help='Lock parameter to prevent updating rates from publisher.') diff --git a/hr_payroll_hibou/models/update.py b/hr_payroll_hibou/models/update.py index 60d1b5a0..f4e844ea 100644 --- a/hr_payroll_hibou/models/update.py +++ b/hr_payroll_hibou/models/update.py @@ -29,7 +29,6 @@ class HRPayrollPublisherUpdate(models.Model): 'error': [('readonly', True)]}) result = fields.Text(readonly=True) parameter_codes_retrieved = fields.Text(readonly=True) - parameter_codes_missing = fields.Text(readonly=True) error = fields.Text(readonly=True) @api.model @@ -88,7 +87,7 @@ class HRPayrollPublisherUpdate(models.Model): if code not in parameter_map: parameter_map[code] = parameter_model.search([('code', '=', code)], limit=1) parameter = parameter_map[code] - if not parameter: + if not parameter or parameter.update_locked: continue # watch out for versions of Odoo where this is not datetime.date parameter_version = parameter.parameter_version_ids.filtered(lambda p: p.date_from == date_from) @@ -107,8 +106,7 @@ class HRPayrollPublisherUpdate(models.Model): self.write({ 'state': 'done', 'error': '', - 'parameter_codes_retrieved': '\n'.join(c for c, p in parameter_map.items()), - 'parameter_codes_missing': '\n'.join(c for c, p in parameter_map.items() if not p), + 'parameter_codes_retrieved': '\n'.join('%s%s' % (c, '' if p and not p.update_locked else ' (LOCKED)' if p.update_locked else ' (MISSING)') for c, p in parameter_map.items()), }) except Exception as e: self.set_error_state(str(e)) diff --git a/hr_payroll_hibou/tests/common.py b/hr_payroll_hibou/tests/common.py index f742eb75..8079d9ca 100755 --- a/hr_payroll_hibou/tests/common.py +++ b/hr_payroll_hibou/tests/common.py @@ -110,7 +110,7 @@ class TestPayslip(common.TransactionCase): contract_values[key] = val found = True if not found: - self._logger.warn('cannot locate attribute names "%s" on hr.contract().' % (key, )) + self._logger.warning('cannot locate attribute names "%s" on hr.contract().' % (key, )) self._get_contract_defaults(contract_values) contract = self.contract_model.create(contract_values) diff --git a/hr_payroll_hibou/tests/test_update.py b/hr_payroll_hibou/tests/test_update.py index 588e8667..b9b8260b 100644 --- a/hr_payroll_hibou/tests/test_update.py +++ b/hr_payroll_hibou/tests/test_update.py @@ -35,7 +35,6 @@ class TestUpdate(common.TransactionCase): update.button_send() self.assertEqual(update.state, 'done') self.assertEqual(update.parameter_codes_retrieved, '') - self.assertEqual(update.parameter_codes_missing, '') # Reset to a degree. update = update.with_context(test_payroll_update_result='{"payroll_parameter_values":[["missing_code", "2021-01-01", "5.0"]]}') @@ -45,8 +44,7 @@ class TestUpdate(common.TransactionCase): }) update.button_send() self.assertEqual(update.state, 'done') - self.assertEqual(update.parameter_codes_retrieved, 'missing_code') - self.assertEqual(update.parameter_codes_missing, 'missing_code') + self.assertEqual(update.parameter_codes_retrieved, 'missing_code (MISSING)') # Actually add to a rule. test_parameter = self.env['hr.rule.parameter'].create({ @@ -61,7 +59,6 @@ class TestUpdate(common.TransactionCase): update.button_send() self.assertEqual(update.state, 'done') self.assertEqual(update.parameter_codes_retrieved, 'test_parameter_1') - self.assertEqual(update.parameter_codes_missing, '') self.assertTrue(test_parameter.parameter_version_ids) self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '5.0') self.assertEqual(str(test_parameter.parameter_version_ids.date_from), '2021-01-01') @@ -77,3 +74,20 @@ class TestUpdate(common.TransactionCase): update.button_send() # doesn't make a new one, updates existing... self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '5.0') + + # Test that we can lock the parameter + test_parameter.parameter_version_ids.write({ + 'parameter_value': 'locked', + }) + test_parameter.write({ + 'update_locked': True, + }) + self.assertEqual(test_parameter.parameter_version_ids.parameter_value, 'locked') + update.write({ + 'state': 'draft', + 'result': '', + }) + update.button_send() + # doesn't make a new one, updates existing... + self.assertEqual(test_parameter.parameter_version_ids.parameter_value, 'locked') + self.assertEqual(update.parameter_codes_retrieved, 'test_parameter_1 (LOCKED)') diff --git a/hr_payroll_hibou/views/payroll_views.xml b/hr_payroll_hibou/views/payroll_views.xml new file mode 100644 index 00000000..669a45a5 --- /dev/null +++ b/hr_payroll_hibou/views/payroll_views.xml @@ -0,0 +1,15 @@ + + + + + hr.rule.parameter.form.inherit + hr.rule.parameter + + + + + + + + + \ No newline at end of file diff --git a/hr_payroll_hibou/views/update_views.xml b/hr_payroll_hibou/views/update_views.xml index f17da46a..9a3a1afd 100644 --- a/hr_payroll_hibou/views/update_views.xml +++ b/hr_payroll_hibou/views/update_views.xml @@ -34,8 +34,7 @@ - -

Note missing codes probably means code upgrades are required.

+

Note missing codes probably means code upgrades are required. Locked codes are only locked in this database.