diff --git a/hr_payroll_hibou/__manifest__.py b/hr_payroll_hibou/__manifest__.py index 0ada7294..1e08e3bb 100644 --- a/hr_payroll_hibou/__manifest__.py +++ b/hr_payroll_hibou/__manifest__.py @@ -19,7 +19,9 @@ 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/res_config_settings_views.xml', + 'views/update_views.xml', ], 'demo': [ ], diff --git a/hr_payroll_hibou/data/cron_data.xml b/hr_payroll_hibou/data/cron_data.xml new file mode 100644 index 00000000..fa61d759 --- /dev/null +++ b/hr_payroll_hibou/data/cron_data.xml @@ -0,0 +1,19 @@ + + + + + + + Payroll Update: download latest parameter values/rates. + + code + model.cron_payroll_update() + 1 + weeks + -1 + + + + + + diff --git a/hr_payroll_hibou/models/update.py b/hr_payroll_hibou/models/update.py index 62c938d9..60d1b5a0 100644 --- a/hr_payroll_hibou/models/update.py +++ b/hr_payroll_hibou/models/update.py @@ -1,4 +1,5 @@ # Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + import requests import json @@ -14,11 +15,12 @@ class HRPayrollPublisherUpdate(models.Model): def _default_request_modules(self): request_modules = self.env.context.get('default_request_modules') if not request_modules: - request_modules = '\n'.join(self.env['publisher_warranty.contract'].hibou_payroll_modules_installed()) + request_modules = '\n'.join(self.env['publisher_warranty.contract'].hibou_payroll_modules_to_update()) return request_modules state = fields.Selection([ ('draft', 'Draft'), + ('result', 'Result'), ('done', 'Done'), ('error', 'Error'), ], default='draft') @@ -28,7 +30,15 @@ class HRPayrollPublisherUpdate(models.Model): result = fields.Text(readonly=True) parameter_codes_retrieved = fields.Text(readonly=True) parameter_codes_missing = fields.Text(readonly=True) - error = fields.Text() + error = fields.Text(readonly=True) + + @api.model + def cron_payroll_update(self): + update = self.create({}) + if update.request_modules: + update.button_send() + else: + update.unlink() def button_send(self): self.ensure_one() @@ -52,6 +62,13 @@ class HRPayrollPublisherUpdate(models.Model): 'error': message, }) + def set_result(self, result): + self.write({ + 'state': 'result', + 'result': result, + 'error': False, + }) + def button_process_result(self): self.ensure_one() if not self.result: @@ -90,7 +107,7 @@ class HRPayrollPublisherUpdate(models.Model): self.write({ 'state': 'done', 'error': '', - 'parameter_codes_retrieved': '\n'.join(c for c, p in parameter_map.items() if p), + '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), }) except Exception as e: @@ -119,13 +136,15 @@ class PublisherWarrantyContract(models.AbstractModel): raise UserError('Hibou Professional Subscription Missing, please setup your subscription.') if self.env.context.get('test_payroll_update_result'): - update_request.result = self.env.context.get('dummy_payroll_update_result') + update_request.set_result(self.env.context.get('test_payroll_update_result')) return - # TODO REMOVE - raise Exception('TESTS') try: - update_request.result = self._hibou_payroll_update(update_request.request_modules) + res = self._hibou_payroll_update(update_request.request_modules) + if res.get('error'): + update_request.set_error_state(str(res.get('error'))) + else: + update_request.set_result(json.dumps(res)) except Exception as e: update_request.set_error_state(str(e)) diff --git a/hr_payroll_hibou/tests/test_update.py b/hr_payroll_hibou/tests/test_update.py index 0a2d22e4..588e8667 100644 --- a/hr_payroll_hibou/tests/test_update.py +++ b/hr_payroll_hibou/tests/test_update.py @@ -23,7 +23,8 @@ class TestUpdate(common.TransactionCase): self.param_model.set_param('database.hibou_professional_expiration_date', fields.Date.to_string(yesterday)) update = self.env['hr.payroll.publisher.update']\ - .with_context(test_payroll_update_result='{"payroll_parameter_values":[]}').create({ + .with_context(test_payroll_update_result='{"payroll_parameter_values":[]}')\ + .create({ 'request_modules': 'test', }) self.assertEqual(update.state, 'draft') @@ -33,3 +34,46 @@ class TestUpdate(common.TransactionCase): self.param_model.set_param('database.hibou_professional_expiration_date', fields.Date.to_string(tomorrow)) 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"]]}') + update.write({ + 'state': 'draft', + 'result': '', + }) + update.button_send() + self.assertEqual(update.state, 'done') + self.assertEqual(update.parameter_codes_retrieved, 'missing_code') + self.assertEqual(update.parameter_codes_missing, 'missing_code') + + # Actually add to a rule. + test_parameter = self.env['hr.rule.parameter'].create({ + 'code': 'test_parameter_1', + 'name': 'Test Parameter 1', + }) + update = update.with_context(test_payroll_update_result='{"payroll_parameter_values":[["test_parameter_1", "2021-01-01", "5.0"]]}') + update.write({ + 'state': 'draft', + 'result': '', + }) + 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') + + test_parameter.parameter_version_ids.write({ + 'parameter_value': '', + }) + self.assertEqual(test_parameter.parameter_version_ids.parameter_value, '') + 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, '5.0') diff --git a/hr_payroll_hibou/views/update_views.xml b/hr_payroll_hibou/views/update_views.xml new file mode 100644 index 00000000..f17da46a --- /dev/null +++ b/hr_payroll_hibou/views/update_views.xml @@ -0,0 +1,64 @@ + + + + + hr.payroll.publisher.update.tree + hr.payroll.publisher.update + + + + + + + + + + + + hr.payroll.publisher.update.form + hr.payroll.publisher.update + + + + + + + + + + + + + + + + + + + Note missing codes probably means code upgrades are required. + + + + + + + + + + + + Payroll Updates + hr.payroll.publisher.update + tree,form + + + No Updates + + + + + + + \ No newline at end of file
Note missing codes probably means code upgrades are required.
+ No Updates +