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.
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.