[IMP] hr_payroll_hibou: add mechanism to lock parameter (don't receive updates)

This commit is contained in:
Jared Kipe
2022-01-11 12:53:31 -08:00
parent bba5eca251
commit 3682a8d380
7 changed files with 45 additions and 11 deletions

View File

@@ -20,6 +20,7 @@ Base module for fixing specific qwerks or assumptions in the way Payroll Odoo En
'data': [ 'data': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'data/cron_data.xml', 'data/cron_data.xml',
'views/payroll_views.xml',
'views/res_config_settings_views.xml', 'views/res_config_settings_views.xml',
'views/update_views.xml', 'views/update_views.xml',
], ],

View File

@@ -17,3 +17,10 @@ class HrPayrollStructureType(models.Model):
default_schedule_pay = fields.Selection(selection_add=[ default_schedule_pay = fields.Selection(selection_add=[
('semi-monthly', 'Semi-monthly'), ('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.')

View File

@@ -29,7 +29,6 @@ class HRPayrollPublisherUpdate(models.Model):
'error': [('readonly', True)]}) 'error': [('readonly', True)]})
result = fields.Text(readonly=True) result = fields.Text(readonly=True)
parameter_codes_retrieved = fields.Text(readonly=True) parameter_codes_retrieved = fields.Text(readonly=True)
parameter_codes_missing = fields.Text(readonly=True)
error = fields.Text(readonly=True) error = fields.Text(readonly=True)
@api.model @api.model
@@ -88,7 +87,7 @@ class HRPayrollPublisherUpdate(models.Model):
if code not in parameter_map: if code not in parameter_map:
parameter_map[code] = parameter_model.search([('code', '=', code)], limit=1) parameter_map[code] = parameter_model.search([('code', '=', code)], limit=1)
parameter = parameter_map[code] parameter = parameter_map[code]
if not parameter: if not parameter or parameter.update_locked:
continue continue
# watch out for versions of Odoo where this is not datetime.date # 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) parameter_version = parameter.parameter_version_ids.filtered(lambda p: p.date_from == date_from)
@@ -107,8 +106,7 @@ class HRPayrollPublisherUpdate(models.Model):
self.write({ self.write({
'state': 'done', 'state': 'done',
'error': '', 'error': '',
'parameter_codes_retrieved': '\n'.join(c for c, p in parameter_map.items()), '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()),
'parameter_codes_missing': '\n'.join(c for c, p in parameter_map.items() if not p),
}) })
except Exception as e: except Exception as e:
self.set_error_state(str(e)) self.set_error_state(str(e))

View File

@@ -110,7 +110,7 @@ class TestPayslip(common.TransactionCase):
contract_values[key] = val contract_values[key] = val
found = True found = True
if not found: 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) self._get_contract_defaults(contract_values)
contract = self.contract_model.create(contract_values) contract = self.contract_model.create(contract_values)

View File

@@ -35,7 +35,6 @@ class TestUpdate(common.TransactionCase):
update.button_send() update.button_send()
self.assertEqual(update.state, 'done') self.assertEqual(update.state, 'done')
self.assertEqual(update.parameter_codes_retrieved, '') self.assertEqual(update.parameter_codes_retrieved, '')
self.assertEqual(update.parameter_codes_missing, '')
# Reset to a degree. # Reset to a degree.
update = update.with_context(test_payroll_update_result='{"payroll_parameter_values":[["missing_code", "2021-01-01", "5.0"]]}') 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() update.button_send()
self.assertEqual(update.state, 'done') self.assertEqual(update.state, 'done')
self.assertEqual(update.parameter_codes_retrieved, 'missing_code') self.assertEqual(update.parameter_codes_retrieved, 'missing_code (MISSING)')
self.assertEqual(update.parameter_codes_missing, 'missing_code')
# Actually add to a rule. # Actually add to a rule.
test_parameter = self.env['hr.rule.parameter'].create({ test_parameter = self.env['hr.rule.parameter'].create({
@@ -61,7 +59,6 @@ class TestUpdate(common.TransactionCase):
update.button_send() update.button_send()
self.assertEqual(update.state, 'done') self.assertEqual(update.state, 'done')
self.assertEqual(update.parameter_codes_retrieved, 'test_parameter_1') self.assertEqual(update.parameter_codes_retrieved, 'test_parameter_1')
self.assertEqual(update.parameter_codes_missing, '')
self.assertTrue(test_parameter.parameter_version_ids) self.assertTrue(test_parameter.parameter_version_ids)
self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '5.0') self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '5.0')
self.assertEqual(str(test_parameter.parameter_version_ids.date_from), '2021-01-01') self.assertEqual(str(test_parameter.parameter_version_ids.date_from), '2021-01-01')
@@ -77,3 +74,20 @@ class TestUpdate(common.TransactionCase):
update.button_send() update.button_send()
# doesn't make a new one, updates existing... # doesn't make a new one, updates existing...
self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '5.0') 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)')

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="hr_rule_parameter_view_form_inherit" model="ir.ui.view">
<field name="name">hr.rule.parameter.form.inherit</field>
<field name="model">hr.rule.parameter</field>
<field name="inherit_id" ref="hr_payroll.hr_rule_parameter_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='code']" position="after">
<field name="update_locked" />
</xpath>
</field>
</record>
</odoo>

View File

@@ -34,8 +34,7 @@
</group> </group>
<group name="parameter_codes" string="Parameter Codes"> <group name="parameter_codes" string="Parameter Codes">
<field name="parameter_codes_retrieved" /> <field name="parameter_codes_retrieved" />
<field name="parameter_codes_missing" /> <p colspan="2">Note missing codes probably means code upgrades are required. Locked codes are only locked in this database.</p>
<p colspan="2">Note missing codes probably means code upgrades are required.</p>
</group> </group>
<group name="result" string="Result" groups="base.group_no_one" colspan="4"> <group name="result" string="Result" groups="base.group_no_one" colspan="4">
<field name="result" nolabel="1" colspan="4" /> <field name="result" nolabel="1" colspan="4" />