mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[IMP] hr_payroll_hibou: finish tests, add UI for payroll updates
This commit is contained in:
@@ -19,7 +19,9 @@ 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',
|
||||||
'views/res_config_settings_views.xml',
|
'views/res_config_settings_views.xml',
|
||||||
|
'views/update_views.xml',
|
||||||
],
|
],
|
||||||
'demo': [
|
'demo': [
|
||||||
],
|
],
|
||||||
|
|||||||
19
hr_payroll_hibou/data/cron_data.xml
Normal file
19
hr_payroll_hibou/data/cron_data.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<data noupdate="1">
|
||||||
|
<!-- Cron jobs -->
|
||||||
|
<record model="ir.cron" id="payroll_publisher_update_cron">
|
||||||
|
<field name="name">Payroll Update: download latest parameter values/rates.</field>
|
||||||
|
<field name="model_id" ref="hr_payroll_hibou.model_hr_payroll_publisher_update"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model.cron_payroll_update()</field>
|
||||||
|
<field name="interval_number">1</field>
|
||||||
|
<field name="interval_type">weeks</field>
|
||||||
|
<field name="numbercall">-1</field>
|
||||||
|
<field name="nextcall" eval="(datetime.now() + timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||||
|
<field name="doall" eval="False"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
|
||||||
@@ -14,11 +15,12 @@ class HRPayrollPublisherUpdate(models.Model):
|
|||||||
def _default_request_modules(self):
|
def _default_request_modules(self):
|
||||||
request_modules = self.env.context.get('default_request_modules')
|
request_modules = self.env.context.get('default_request_modules')
|
||||||
if not 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
|
return request_modules
|
||||||
|
|
||||||
state = fields.Selection([
|
state = fields.Selection([
|
||||||
('draft', 'Draft'),
|
('draft', 'Draft'),
|
||||||
|
('result', 'Result'),
|
||||||
('done', 'Done'),
|
('done', 'Done'),
|
||||||
('error', 'Error'),
|
('error', 'Error'),
|
||||||
], default='draft')
|
], default='draft')
|
||||||
@@ -28,7 +30,15 @@ class HRPayrollPublisherUpdate(models.Model):
|
|||||||
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)
|
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):
|
def button_send(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
@@ -52,6 +62,13 @@ class HRPayrollPublisherUpdate(models.Model):
|
|||||||
'error': message,
|
'error': message,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def set_result(self, result):
|
||||||
|
self.write({
|
||||||
|
'state': 'result',
|
||||||
|
'result': result,
|
||||||
|
'error': False,
|
||||||
|
})
|
||||||
|
|
||||||
def button_process_result(self):
|
def button_process_result(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if not self.result:
|
if not self.result:
|
||||||
@@ -90,7 +107,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() 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),
|
'parameter_codes_missing': '\n'.join(c for c, p in parameter_map.items() if not p),
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -119,13 +136,15 @@ class PublisherWarrantyContract(models.AbstractModel):
|
|||||||
raise UserError('Hibou Professional Subscription Missing, please setup your subscription.')
|
raise UserError('Hibou Professional Subscription Missing, please setup your subscription.')
|
||||||
|
|
||||||
if self.env.context.get('test_payroll_update_result'):
|
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
|
return
|
||||||
|
|
||||||
# TODO REMOVE
|
|
||||||
raise Exception('TESTS')
|
|
||||||
try:
|
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:
|
except Exception as e:
|
||||||
update_request.set_error_state(str(e))
|
update_request.set_error_state(str(e))
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ class TestUpdate(common.TransactionCase):
|
|||||||
self.param_model.set_param('database.hibou_professional_expiration_date', fields.Date.to_string(yesterday))
|
self.param_model.set_param('database.hibou_professional_expiration_date', fields.Date.to_string(yesterday))
|
||||||
|
|
||||||
update = self.env['hr.payroll.publisher.update']\
|
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',
|
'request_modules': 'test',
|
||||||
})
|
})
|
||||||
self.assertEqual(update.state, 'draft')
|
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))
|
self.param_model.set_param('database.hibou_professional_expiration_date', fields.Date.to_string(tomorrow))
|
||||||
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_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')
|
||||||
|
|||||||
64
hr_payroll_hibou/views/update_views.xml
Normal file
64
hr_payroll_hibou/views/update_views.xml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="hr_payroll_publisher_update_tree" model="ir.ui.view">
|
||||||
|
<field name="name">hr.payroll.publisher.update.tree</field>
|
||||||
|
<field name="model">hr.payroll.publisher.update</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Payroll Updates">
|
||||||
|
<field name="create_date"/>
|
||||||
|
<field name="write_date"/>
|
||||||
|
<field name="request_modules"/>
|
||||||
|
<field name="state"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="hr_payroll_publisher_update_form" model="ir.ui.view">
|
||||||
|
<field name="name">hr.payroll.publisher.update.form</field>
|
||||||
|
<field name="model">hr.payroll.publisher.update</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Payroll Udate">
|
||||||
|
<header>
|
||||||
|
<button name="button_send" type="object" string="Send" attrs="{'invisible': [('state', 'not in', ('draft', 'error'))]}" />
|
||||||
|
<button name="button_process_result" type="object" string="Process Results" attrs="{'invisible': [('state', 'not in', ('result', 'error'))]}" />
|
||||||
|
<field name="state" widget="statusbar" statusbar_visible="draft,result,done" />
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<group name="general" string="General">
|
||||||
|
<field name="create_date" />
|
||||||
|
<field name="write_date" />
|
||||||
|
<field name="request_modules" widget="text" />
|
||||||
|
<field name="error" attrs="{'invisible': [('error', '=', False)]}" />
|
||||||
|
</group>
|
||||||
|
<group name="parameter_codes" string="Parameter Codes">
|
||||||
|
<field name="parameter_codes_retrieved" />
|
||||||
|
<field name="parameter_codes_missing" />
|
||||||
|
<p colspan="2">Note missing codes probably means code upgrades are required.</p>
|
||||||
|
</group>
|
||||||
|
<group name="result" string="Result" groups="base.group_no_one" colspan="4">
|
||||||
|
<field name="result" nolabel="1" colspan="4" />
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_payroll_updates" model="ir.actions.act_window">
|
||||||
|
<field name="name">Payroll Updates</field>
|
||||||
|
<field name="res_model">hr.payroll.publisher.update</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p>
|
||||||
|
No Updates
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_hr_payroll_configuration_updates" name="Payroll Updates"
|
||||||
|
action="action_payroll_updates"
|
||||||
|
sequence="20" parent="hr_work_entry_contract_enterprise.menu_hr_payroll_configuration"/>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user