From f5f307fc8a4ed96963084e8e18b6687a94a07fd1 Mon Sep 17 00:00:00 2001 From: Henrik Norlin Date: Tue, 1 Nov 2022 22:59:03 +0100 Subject: [PATCH 1/9] [IMP] payroll: depends on base_time_parameter [FIX] payroll: rule_parameter [MIG] payroll: depends on base_time_parameter [FIX] payroll migration --- payroll/__manifest__.py | 9 ++- .../migrations/14.0.6.0.0/pre-migration.py | 59 +++++++++++++++ payroll/models/__init__.py | 1 - payroll/models/base_browsable.py | 15 +++- payroll/models/hr_rule_parameter.py | 74 ------------------- payroll/security/ir.model.access.csv | 8 +- payroll/tests/test_browsable_object.py | 31 +++++++- payroll/views/base_time_parameter_views.xml | 23 ++++++ payroll/views/hr_rule_parameter_views.xml | 70 ------------------ 9 files changed, 135 insertions(+), 155 deletions(-) create mode 100644 payroll/migrations/14.0.6.0.0/pre-migration.py delete mode 100644 payroll/models/hr_rule_parameter.py create mode 100644 payroll/views/base_time_parameter_views.xml delete mode 100644 payroll/views/hr_rule_parameter_views.xml diff --git a/payroll/__manifest__.py b/payroll/__manifest__.py index ef1accf5..2d96befe 100644 --- a/payroll/__manifest__.py +++ b/payroll/__manifest__.py @@ -9,7 +9,12 @@ "summary": "Manage your employee payroll records", "license": "LGPL-3", "author": "Odoo SA, Odoo Community Association (OCA)", - "depends": ["hr_contract", "hr_holidays", "mail"], + "depends": [ + "base_time_parameter", + "hr_contract", + "hr_holidays", + "mail", + ], "data": [ "security/hr_payroll_security.xml", "security/ir.model.access.csv", @@ -18,6 +23,7 @@ "wizard/hr_payroll_contribution_register_report_views.xml", "wizard/hr_payroll_payslips_by_employees_views.xml", "views/menus.xml", + "views/base_time_parameter_views.xml", "views/hr_contract_views.xml", "views/hr_payroll_structure_views.xml", "views/hr_salary_rule_category_views.xml", @@ -27,7 +33,6 @@ "views/hr_payslip_views.xml", "views/hr_payslip_run_views.xml", "views/hr_employee_views.xml", - "views/hr_rule_parameter_views.xml", "views/report_contributionregister.xml", "views/report_payslip.xml", "views/report_payslipdetails.xml", diff --git a/payroll/migrations/14.0.6.0.0/pre-migration.py b/payroll/migrations/14.0.6.0.0/pre-migration.py new file mode 100644 index 00000000..11d46245 --- /dev/null +++ b/payroll/migrations/14.0.6.0.0/pre-migration.py @@ -0,0 +1,59 @@ +from openupgradelib import openupgrade + + +def move_records(env): + """ + hr.rule.parameter -> base.time.parameter + hr.rule.parameter.value -> base.time.parameter.version + (with new id for many2one base.time.parameter) + """ + + payslip_model_id = env["ir.model"].search([("model", "=", "hr.payslip")]).id + + sql_select_parameters = """ + SELECT id, name, code, description, company_id, country_id, 'text' + FROM hr_rule_parameter + """ + env.cr.execute(sql_select_parameters) + parameters = [(p[0], p[1:] + (payslip_model_id,)) for p in env.cr.fetchall()] + + sql_insert_parameters = """ + INSERT INTO base_time_parameter ( + name, code, description, company_id, country_id, type, model_id + ) + VALUES {parameters} + RETURNING id; + """.format( + parameters=", ".join([str(p[1]).replace("None", "null") for p in parameters]), + ) + env.cr.execute(sql_insert_parameters) + new_parameters = env.cr.fetchall() + id_old_new = {} + for i in range(len(parameters)): + id_old_new[parameters[i][0]] = new_parameters[i][0] + + sql_select_versions = """ + SELECT pv.rule_parameter_id, p.company_id, pv.code, pv.date_from, pv.parameter_value + FROM hr_rule_parameter_value pv JOIN hr_rule_parameter p + ON pv.rule_parameter_id = p.id; + """ + env.cr.execute(sql_select_versions) + versions = [ + (id_old_new[v[0]], v[1], v[2], v[3].strftime("%Y-%m-%d"), v[4]) + for v in env.cr.fetchall() + ] + + sql_insert_versions = """ + INSERT INTO base_time_parameter_version ( + parameter_id, company_id, code, date_from, value_text + ) + VALUES {versions} + """.format( + versions=", ".join([str(v) for v in versions]) + ) + env.cr.execute(sql_insert_versions) + + +@openupgrade.migrate() +def migrate(env, version): + move_records(env) diff --git a/payroll/models/__init__.py b/payroll/models/__init__.py index 95e96428..3946bd78 100644 --- a/payroll/models/__init__.py +++ b/payroll/models/__init__.py @@ -14,4 +14,3 @@ from . import hr_payslip_worked_days from . import hr_payslip_run from . import res_config_settings -from . import hr_rule_parameter diff --git a/payroll/models/base_browsable.py b/payroll/models/base_browsable.py index a516e86d..61dd2cac 100644 --- a/payroll/models/base_browsable.py +++ b/payroll/models/base_browsable.py @@ -1,7 +1,11 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. +import logging + from odoo import fields +_logger = logging.getLogger(__name__) + class BaseBrowsableObject(object): def __init__(self, vals_dict): @@ -96,7 +100,12 @@ def sum(self, code, from_date, to_date=None): res = self.env.cr.fetchone() return res and res[0] or 0.0 - def rule_parameter(self, code): - return self.env["hr.rule.parameter"]._get_parameter_from_code( - code, self.dict.date_to + def time_parameter(self, code): + return self.env["base.time.parameter"]._get_value_from_model_code_date( + "hr.payslip", code, self.dict.date_to ) + + # deprecated + def rule_parameter(self, code): + _logger.warning("Salary rule: payslip.rule_parameter -> payslip.time_parameter") + return self.time_parameter(code) diff --git a/payroll/models/hr_rule_parameter.py b/payroll/models/hr_rule_parameter.py deleted file mode 100644 index 28768b20..00000000 --- a/payroll/models/hr_rule_parameter.py +++ /dev/null @@ -1,74 +0,0 @@ -import ast - -from odoo import _, api, fields, models -from odoo.exceptions import UserError - - -class HrSalaryRuleParameterValue(models.Model): - _name = "hr.rule.parameter.value" - _description = "Salary Rule Parameter Value" - _order = "date_from desc" - - rule_parameter_id = fields.Many2one( - "hr.rule.parameter", required=True, ondelete="cascade" - ) - code = fields.Char(related="rule_parameter_id.code", store=True, readonly=True) - date_from = fields.Date(string="Date From", required=True) - parameter_value = fields.Text(help="Python Code") - country_id = fields.Many2one(related="rule_parameter_id.country_id") - company_id = fields.Many2one(related="rule_parameter_id.company_id") - - _sql_constraints = [ - ( - "_unique", - "unique (rule_parameter_id, date_from)", - "Two rules parameters with the same code cannot start the same day", - ), - ] - - -class HrSalaryRuleParameter(models.Model): - _name = "hr.rule.parameter" - _description = "Salary Rule Parameter" - - name = fields.Char(required=True) - code = fields.Char(required=True) - description = fields.Text("Description") - country_id = fields.Many2one( - "res.country", - string="Country", - default=lambda self: self.env.company.country_id, - ) - parameter_version_ids = fields.One2many( - "hr.rule.parameter.value", "rule_parameter_id", string="Versions" - ) - company_id = fields.Many2one( - "res.company", "Company", required=True, default=lambda self: self.env.company - ) - - @api.model - def _get_parameter_from_code(self, code, date=None): - if not date: - date = fields.Date.today() - rule_parameter = self.env["hr.rule.parameter.value"].search( - [ - ("code", "=", code), - ("date_from", "<=", date), - ("company_id", "=", self.env.company.id), - ], - limit=1, - ) - if rule_parameter: - return ast.literal_eval(rule_parameter.parameter_value) - else: - raise UserError( - _("No rule parameter with code '%s' was found for %s ") % (code, date) - ) - - _sql_constraints = [ - ( - "_unique", - "unique (code, company_id)", - "Two rule parameters cannot have the same code.", - ), - ] diff --git a/payroll/security/ir.model.access.csv b/payroll/security/ir.model.access.csv index 62916208..296cb096 100644 --- a/payroll/security/ir.model.access.csv +++ b/payroll/security/ir.model.access.csv @@ -13,8 +13,8 @@ access_hr_salary_rule_user,hr.salary.rule user,model_hr_salary_rule,payroll.grou access_hr_salary_rule_manager,hr.salary.rule manager,model_hr_salary_rule,payroll.group_payroll_manager,1,1,1,1 access_hr_payslip_batch_employees_transient,hr.payslip.employees.batch,model_hr_payslip_employees,hr.group_hr_user,1,1,1,0 access_hr_payslip_lines_contribution_register_transient,payslip.lines.contribution.register,model_payslip_lines_contribution_register,hr.group_hr_user,1,1,1,0 -access_hr_rule_parameter_manager,access_hr_rule_parameter_manager,model_hr_rule_parameter,payroll.group_payroll_manager,1,1,1,1 -access_hr_rule_parameter_user,access_hr_rule_parameter_user,model_hr_rule_parameter,hr.group_hr_user,1,0,0,0 -access_hr_rule_parameter_value_manager,access_hr_rule_parameter_value_manager,model_hr_rule_parameter_value,payroll.group_payroll_manager,1,1,1,1 -access_hr_rule_parameter_value_user,access_hr_rule_parameter_value_user,model_hr_rule_parameter_value,hr.group_hr_user,1,0,0,0 +access_base_time_parameter_manager,access_base_time_parameter_manager,base_time_parameter.model_base_time_parameter,payroll.group_payroll_manager,1,1,1,1 +access_base_time_parameter_user,access_base_time_parameter_user,base_time_parameter.model_base_time_parameter,hr.group_hr_user,1,0,0,0 +access_base_time_parameter_version_manager,access_base_time_parameter_version_manager,base_time_parameter.model_base_time_parameter_version,payroll.group_payroll_manager,1,1,1,1 +access_base_time_parameter_version_user,access_base_time_parameter_version_user,base_time_parameter.model_base_time_parameter_version,hr.group_hr_user,1,0,0,0 access_hr_payslip_change_state,access_hr_payslip_change_state,model_hr_payslip_change_state,base.group_user,1,1,1,0 diff --git a/payroll/tests/test_browsable_object.py b/payroll/tests/test_browsable_object.py index dfb3c92e..9ddf533e 100644 --- a/payroll/tests/test_browsable_object.py +++ b/payroll/tests/test_browsable_object.py @@ -1,6 +1,14 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.addons.payroll.models.hr_payslip import BaseBrowsableObject, BrowsableObject +from datetime import date + +from odoo.tests import Form + +from odoo.addons.payroll.models.hr_payslip import ( + BaseBrowsableObject, + BrowsableObject, + Payslips, +) from .common import TestPayslipBase @@ -70,3 +78,24 @@ def test_update_attribute(self): 350.0, "Updating of attribute using dot ('.') notation succeeded", ) + + def test_payslips_time_parameter(self): + self.env["base.time.parameter"].create( + { + "code": "TEST_CODE", + "type": "text", + "version_ids": [ + (0, 0, {"date_from": date(2022, 1, 1), "value_text": "TEST_VALUE"}) + ], + } + ) + # I create an employee Payslip + frm = Form(self.Payslip) + frm.employee_id = self.richard_emp + richard_payslip = frm.save() + + browsable_payslip = Payslips(self.richard_emp.id, richard_payslip, self.env) + time_value = browsable_payslip.time_parameter("TEST_CODE") + rule_value = browsable_payslip.time_parameter("TEST_CODE") + self.assertEqual(time_value, "TEST_VALUE", "value = TEST_VALUE") + self.assertEqual(rule_value, "TEST_VALUE", "value = TEST_VALUE") diff --git a/payroll/views/base_time_parameter_views.xml b/payroll/views/base_time_parameter_views.xml new file mode 100644 index 00000000..f5bc6ccf --- /dev/null +++ b/payroll/views/base_time_parameter_views.xml @@ -0,0 +1,23 @@ + + + + Salary Rule Time Parameters + base.time.parameter + tree,form + + + + + diff --git a/payroll/views/hr_rule_parameter_views.xml b/payroll/views/hr_rule_parameter_views.xml deleted file mode 100644 index f30f29b0..00000000 --- a/payroll/views/hr_rule_parameter_views.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - hr.rule.parameter.form - hr.rule.parameter - -
- - - - - - - - - - - - - - - -
-
-
- - hr.rule.parameter.tree - hr.rule.parameter - - - - - - - - - - - hr.rule.parameter.search - hr.rule.parameter - - - - - - - - Salary Rule Parameters - hr.rule.parameter - tree,form - - -
From ad31521f3c33192e3c0abdd76ff7b76d107908b4 Mon Sep 17 00:00:00 2001 From: Henrik Norlin Date: Thu, 3 Nov 2022 11:10:12 +0100 Subject: [PATCH 2/9] [ADD] payroll_rule_time_parameter (instead of payroll) depends on base_time_parameter --- payroll/__manifest__.py | 2 - .../migrations/14.0.6.0.0/pre-migration.py | 64 ++++------------- payroll/migrations/move_records.py | 66 ++++++++++++++++++ payroll/security/ir.model.access.csv | 4 -- payroll_rule_time_parameter/__init__.py | 1 + payroll_rule_time_parameter/__manifest__.py | 22 ++++++ payroll_rule_time_parameter/hooks.py | 11 +++ .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 7 ++ .../security/ir.model.access.csv | 5 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes payroll_rule_time_parameter/tests/__init__.py | 1 + .../tests/test_time_parameter.py | 40 +++++++++++ .../views/base_time_parameter_views.xml | 4 +- requirements.txt | 2 + .../odoo/addons/payroll_rule_time_parameter | 1 + setup/payroll_rule_time_parameter/setup.py | 6 ++ 17 files changed, 180 insertions(+), 58 deletions(-) create mode 100644 payroll/migrations/move_records.py create mode 100644 payroll_rule_time_parameter/__init__.py create mode 100644 payroll_rule_time_parameter/__manifest__.py create mode 100644 payroll_rule_time_parameter/hooks.py create mode 100644 payroll_rule_time_parameter/readme/CONTRIBUTORS.rst create mode 100644 payroll_rule_time_parameter/readme/DESCRIPTION.rst create mode 100644 payroll_rule_time_parameter/security/ir.model.access.csv create mode 100644 payroll_rule_time_parameter/static/description/icon.png create mode 100644 payroll_rule_time_parameter/tests/__init__.py create mode 100644 payroll_rule_time_parameter/tests/test_time_parameter.py rename {payroll => payroll_rule_time_parameter}/views/base_time_parameter_views.xml (86%) create mode 100644 requirements.txt create mode 120000 setup/payroll_rule_time_parameter/odoo/addons/payroll_rule_time_parameter create mode 100644 setup/payroll_rule_time_parameter/setup.py diff --git a/payroll/__manifest__.py b/payroll/__manifest__.py index 2d96befe..0602f188 100644 --- a/payroll/__manifest__.py +++ b/payroll/__manifest__.py @@ -10,7 +10,6 @@ "license": "LGPL-3", "author": "Odoo SA, Odoo Community Association (OCA)", "depends": [ - "base_time_parameter", "hr_contract", "hr_holidays", "mail", @@ -23,7 +22,6 @@ "wizard/hr_payroll_contribution_register_report_views.xml", "wizard/hr_payroll_payslips_by_employees_views.xml", "views/menus.xml", - "views/base_time_parameter_views.xml", "views/hr_contract_views.xml", "views/hr_payroll_structure_views.xml", "views/hr_salary_rule_category_views.xml", diff --git a/payroll/migrations/14.0.6.0.0/pre-migration.py b/payroll/migrations/14.0.6.0.0/pre-migration.py index 11d46245..f4d71cf8 100644 --- a/payroll/migrations/14.0.6.0.0/pre-migration.py +++ b/payroll/migrations/14.0.6.0.0/pre-migration.py @@ -1,59 +1,23 @@ from openupgradelib import openupgrade +from odoo.addons.payroll.migrations.move_records import move_records -def move_records(env): - """ - hr.rule.parameter -> base.time.parameter - hr.rule.parameter.value -> base.time.parameter.version - (with new id for many2one base.time.parameter) - """ - payslip_model_id = env["ir.model"].search([("model", "=", "hr.payslip")]).id - - sql_select_parameters = """ - SELECT id, name, code, description, company_id, country_id, 'text' - FROM hr_rule_parameter - """ - env.cr.execute(sql_select_parameters) - parameters = [(p[0], p[1:] + (payslip_model_id,)) for p in env.cr.fetchall()] - - sql_insert_parameters = """ - INSERT INTO base_time_parameter ( - name, code, description, company_id, country_id, type, model_id - ) - VALUES {parameters} - RETURNING id; - """.format( - parameters=", ".join([str(p[1]).replace("None", "null") for p in parameters]), - ) - env.cr.execute(sql_insert_parameters) - new_parameters = env.cr.fetchall() - id_old_new = {} - for i in range(len(parameters)): - id_old_new[parameters[i][0]] = new_parameters[i][0] - - sql_select_versions = """ - SELECT pv.rule_parameter_id, p.company_id, pv.code, pv.date_from, pv.parameter_value - FROM hr_rule_parameter_value pv JOIN hr_rule_parameter p - ON pv.rule_parameter_id = p.id; - """ - env.cr.execute(sql_select_versions) - versions = [ - (id_old_new[v[0]], v[1], v[2], v[3].strftime("%Y-%m-%d"), v[4]) - for v in env.cr.fetchall() - ] - - sql_insert_versions = """ - INSERT INTO base_time_parameter_version ( - parameter_id, company_id, code, date_from, value_text - ) - VALUES {versions} - """.format( - versions=", ".join([str(v) for v in versions]) +def rename_tables(cr): + openupgrade.rename_tables( + cr, + [ + ("hr_rule_parameter", None), + ("hr_rule_parameter_value", None), + ], ) - env.cr.execute(sql_insert_versions) @openupgrade.migrate() def migrate(env, version): - move_records(env) + cr = env.cr + module = env["ir.module.module"].search([("name", "=", "base_time_parameter")]) + if module.exists() and module.state == "installed": + move_records(cr, legacy=False) + else: + rename_tables(cr) diff --git a/payroll/migrations/move_records.py b/payroll/migrations/move_records.py new file mode 100644 index 00000000..d3c079f1 --- /dev/null +++ b/payroll/migrations/move_records.py @@ -0,0 +1,66 @@ +from openupgradelib import openupgrade + +from odoo import SUPERUSER_ID, api + + +@openupgrade.logging() +def move_records(cr, legacy): + """ + hr.rule.parameter -> base.time.parameter + hr.rule.parameter.value -> base.time.parameter.version + (with new id for many2one base.time.parameter) + """ + env = api.Environment(cr, SUPERUSER_ID, {}) + payslip_model_id = env["ir.model"].search([("model", "=", "hr.payslip")]).id + + name = "openupgrade_legacy_14_0_" if legacy else "" + hr_rule_parameter = name + "hr_rule_parameter" + hr_rule_parameter_value = name + "hr_rule_parameter_value" + + sql_select_parameters = """ + SELECT id, name, code, description, company_id, country_id, 'text' + FROM {hr_rule_parameter} + """.format( + hr_rule_parameter=hr_rule_parameter + ) + openupgrade.logged_query(cr, sql_select_parameters) + parameters = [(p[0], p[1:] + (payslip_model_id,)) for p in cr.fetchall()] + + sql_insert_parameters = """ + INSERT INTO base_time_parameter ( + name, code, description, company_id, country_id, type, model_id + ) + VALUES {parameters} + RETURNING id; + """.format( + parameters=", ".join([str(p[1]).replace("None", "null") for p in parameters]), + ) + openupgrade.logged_query(cr, sql_insert_parameters) + new_parameters = cr.fetchall() + id_old_new = {} + for i in range(len(parameters)): + id_old_new[parameters[i][0]] = new_parameters[i][0] + + sql_select_versions = """ + SELECT pv.rule_parameter_id, p.company_id, pv.code, pv.date_from, pv.parameter_value + FROM {hr_rule_parameter_value} pv JOIN {hr_rule_parameter} p + ON pv.rule_parameter_id = p.id; + """.format( + hr_rule_parameter_value=hr_rule_parameter_value, + hr_rule_parameter=hr_rule_parameter, + ) + openupgrade.logged_query(cr, sql_select_versions) + versions = [ + (id_old_new[v[0]], v[1], v[2], v[3].strftime("%Y-%m-%d"), v[4]) + for v in cr.fetchall() + ] + + sql_insert_versions = """ + INSERT INTO base_time_parameter_version ( + parameter_id, company_id, code, date_from, value_text + ) + VALUES {versions} + """.format( + versions=", ".join([str(v) for v in versions]) + ) + openupgrade.logged_query(cr, sql_insert_versions) diff --git a/payroll/security/ir.model.access.csv b/payroll/security/ir.model.access.csv index 296cb096..cf2b5127 100644 --- a/payroll/security/ir.model.access.csv +++ b/payroll/security/ir.model.access.csv @@ -13,8 +13,4 @@ access_hr_salary_rule_user,hr.salary.rule user,model_hr_salary_rule,payroll.grou access_hr_salary_rule_manager,hr.salary.rule manager,model_hr_salary_rule,payroll.group_payroll_manager,1,1,1,1 access_hr_payslip_batch_employees_transient,hr.payslip.employees.batch,model_hr_payslip_employees,hr.group_hr_user,1,1,1,0 access_hr_payslip_lines_contribution_register_transient,payslip.lines.contribution.register,model_payslip_lines_contribution_register,hr.group_hr_user,1,1,1,0 -access_base_time_parameter_manager,access_base_time_parameter_manager,base_time_parameter.model_base_time_parameter,payroll.group_payroll_manager,1,1,1,1 -access_base_time_parameter_user,access_base_time_parameter_user,base_time_parameter.model_base_time_parameter,hr.group_hr_user,1,0,0,0 -access_base_time_parameter_version_manager,access_base_time_parameter_version_manager,base_time_parameter.model_base_time_parameter_version,payroll.group_payroll_manager,1,1,1,1 -access_base_time_parameter_version_user,access_base_time_parameter_version_user,base_time_parameter.model_base_time_parameter_version,hr.group_hr_user,1,0,0,0 access_hr_payslip_change_state,access_hr_payslip_change_state,model_hr_payslip_change_state,base.group_user,1,1,1,0 diff --git a/payroll_rule_time_parameter/__init__.py b/payroll_rule_time_parameter/__init__.py new file mode 100644 index 00000000..8d2116c4 --- /dev/null +++ b/payroll_rule_time_parameter/__init__.py @@ -0,0 +1 @@ +from .hooks import pre_init_hook diff --git a/payroll_rule_time_parameter/__manifest__.py b/payroll_rule_time_parameter/__manifest__.py new file mode 100644 index 00000000..166f5e4d --- /dev/null +++ b/payroll_rule_time_parameter/__manifest__.py @@ -0,0 +1,22 @@ +{ + "name": "Payroll Rule Time Parameter", + "summary": "", + "author": "nimarosa, appstogrow, Odoo Community Association (OCA)", + "category": "Human Resources", + "data": [ + "security/ir.model.access.csv", + "views/base_time_parameter_views.xml", + ], + "depends": [ + "base_time_parameter", + "payroll", + ], + "external_dependencies": { + "python": ["openupgradelib"], + }, + "license": "LGPL-3", + "maintainers": ["appstogrow", "nimarosa"], + "pre_init_hook": "pre_init_hook", + "version": "14.0.1.0.0", + "website": "https://github.com/OCA/payroll", +} diff --git a/payroll_rule_time_parameter/hooks.py b/payroll_rule_time_parameter/hooks.py new file mode 100644 index 00000000..c23f4c90 --- /dev/null +++ b/payroll_rule_time_parameter/hooks.py @@ -0,0 +1,11 @@ +from odoo.addons.payroll.migrations.move_records import move_records + + +def pre_init_hook(cr): + cr.execute( + """ + SELECT count(tablename) FROM pg_tables + WHERE tablename LIKE 'openupgrade_legacy_14_0_hr_rule_parameter%';""" + ) + if cr.fetchone()[0]: + move_records(cr, legacy=True) diff --git a/payroll_rule_time_parameter/readme/CONTRIBUTORS.rst b/payroll_rule_time_parameter/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..cb6d21be --- /dev/null +++ b/payroll_rule_time_parameter/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Henrik Norlin +* Nicolas Rodriguez diff --git a/payroll_rule_time_parameter/readme/DESCRIPTION.rst b/payroll_rule_time_parameter/readme/DESCRIPTION.rst new file mode 100644 index 00000000..81e62d8e --- /dev/null +++ b/payroll_rule_time_parameter/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +This module adds Rule Parameters to payroll configuration menu. + +Use in salary rule python code like this: + +.. code-block:: python + + myvalue = payslip.time_parameter("mycode") diff --git a/payroll_rule_time_parameter/security/ir.model.access.csv b/payroll_rule_time_parameter/security/ir.model.access.csv new file mode 100644 index 00000000..9655d8be --- /dev/null +++ b/payroll_rule_time_parameter/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_base_time_parameter_manager,access_base_time_parameter_manager,base_time_parameter.model_base_time_parameter,payroll.group_payroll_manager,1,1,1,1 +access_base_time_parameter_user,access_base_time_parameter_user,base_time_parameter.model_base_time_parameter,hr.group_hr_user,1,0,0,0 +access_base_time_parameter_version_manager,access_base_time_parameter_version_manager,base_time_parameter.model_base_time_parameter_version,payroll.group_payroll_manager,1,1,1,1 +access_base_time_parameter_version_user,access_base_time_parameter_version_user,base_time_parameter.model_base_time_parameter_version,hr.group_hr_user,1,0,0,0 diff --git a/payroll_rule_time_parameter/static/description/icon.png b/payroll_rule_time_parameter/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/payroll_rule_time_parameter/tests/__init__.py b/payroll_rule_time_parameter/tests/__init__.py new file mode 100644 index 00000000..22bb6314 --- /dev/null +++ b/payroll_rule_time_parameter/tests/__init__.py @@ -0,0 +1 @@ +from . import test_time_parameter diff --git a/payroll_rule_time_parameter/tests/test_time_parameter.py b/payroll_rule_time_parameter/tests/test_time_parameter.py new file mode 100644 index 00000000..537beeb3 --- /dev/null +++ b/payroll_rule_time_parameter/tests/test_time_parameter.py @@ -0,0 +1,40 @@ +from datetime import date + +from odoo.tests.common import TransactionCase + +from odoo.addons.payroll.models.hr_payslip import Payslips + + +class TestTimeParameter(TransactionCase): + def setUp(self): + super().setUp() + + def test_time_parameter(self): + self.env["base.time.parameter"].create( + { + "code": "TEST_CODE", + "type": "text", + "version_ids": [ + (0, 0, {"date_from": date(2022, 1, 1), "value_text": "TEST_VALUE"}) + ], + } + ) + employee = self.env["hr.employee"].create( + { + "name": "Richard", + "gender": "male", + "birthday": "1984-05-01", + "country_id": self.ref("base.be"), + } + ) + payslip = self.env["hr.payslip"].create( + { + "employee_id": employee.id, + } + ) + + browsable_payslip = Payslips(employee.id, payslip, self.env) + time_value = browsable_payslip.time_parameter("TEST_CODE") + rule_value = browsable_payslip.time_parameter("TEST_CODE") + self.assertEqual(time_value, "TEST_VALUE", "value = TEST_VALUE") + self.assertEqual(rule_value, "TEST_VALUE", "value = TEST_VALUE") diff --git a/payroll/views/base_time_parameter_views.xml b/payroll_rule_time_parameter/views/base_time_parameter_views.xml similarity index 86% rename from payroll/views/base_time_parameter_views.xml rename to payroll_rule_time_parameter/views/base_time_parameter_views.xml index f5bc6ccf..37fbad87 100644 --- a/payroll/views/base_time_parameter_views.xml +++ b/payroll_rule_time_parameter/views/base_time_parameter_views.xml @@ -1,7 +1,7 @@ - Salary Rule Time Parameters + Rule Parameters base.time.parameter tree,form diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..180fc497 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# generated from manifests external_dependencies +openupgradelib diff --git a/setup/payroll_rule_time_parameter/odoo/addons/payroll_rule_time_parameter b/setup/payroll_rule_time_parameter/odoo/addons/payroll_rule_time_parameter new file mode 120000 index 00000000..c24fe6ca --- /dev/null +++ b/setup/payroll_rule_time_parameter/odoo/addons/payroll_rule_time_parameter @@ -0,0 +1 @@ +../../../../payroll_rule_time_parameter \ No newline at end of file diff --git a/setup/payroll_rule_time_parameter/setup.py b/setup/payroll_rule_time_parameter/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/payroll_rule_time_parameter/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 4f8fe8057566e96a08d11ba6b69f55c4054dbc7f Mon Sep 17 00:00:00 2001 From: Henrik Norlin Date: Fri, 4 Nov 2022 15:59:46 +0100 Subject: [PATCH 3/9] [IMP] payroll: history --- payroll/readme/HISTORY.rst | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 payroll/readme/HISTORY.rst diff --git a/payroll/readme/HISTORY.rst b/payroll/readme/HISTORY.rst new file mode 100644 index 00000000..80372f5a --- /dev/null +++ b/payroll/readme/HISTORY.rst @@ -0,0 +1,34 @@ +14.0.6.0.0 (2022-11-04) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #87 payroll_rule_time_parameter: remove from payroll +* Removed hr.rule.parameter & hr.rule.parameter.value (see payroll_rule_time_parameter) + +14.0.5.3.0 (2022-09-13) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #67 Merge payslip_cancel and payslip_change_state in base module +* Merged hr_payroll_cancel, adding a setting to enable this feature (by default disabled). +* Merged hr_payroll_change_state (there is no setting to disable this feature). + +14.0.5.0.0 (2022-08-29) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #60 Improve views, add child functionalities, allow compute of name + +14.0.4.0.0 (2022-08-17) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #45 Remove contract_advantage_template model and new module +* Removed hr.contract.advantage.template (moved to payroll_contract_advantages) + +14.0.3.0.0 (2022-08-15) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #47 payslip refactoring + +14.0.2.0.0 (2022-07-07) +~~~~~~~~~~~~~~~~~~~~~~~ + +* #31 major-rule-parameters-function +* Added hr.rule.parameter & hr.rule.parameter.value From fbd82dd38f1f5dc6668f446eabc8a3c735933c8a Mon Sep 17 00:00:00 2001 From: nicolasrsande Date: Tue, 8 Nov 2022 01:38:39 -0300 Subject: [PATCH 4/9] [IMP] payroll: remove parameters code --- payroll/models/base_browsable.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/payroll/models/base_browsable.py b/payroll/models/base_browsable.py index 61dd2cac..58333ce8 100644 --- a/payroll/models/base_browsable.py +++ b/payroll/models/base_browsable.py @@ -99,13 +99,3 @@ def sum(self, code, from_date, to_date=None): ) res = self.env.cr.fetchone() return res and res[0] or 0.0 - - def time_parameter(self, code): - return self.env["base.time.parameter"]._get_value_from_model_code_date( - "hr.payslip", code, self.dict.date_to - ) - - # deprecated - def rule_parameter(self, code): - _logger.warning("Salary rule: payslip.rule_parameter -> payslip.time_parameter") - return self.time_parameter(code) From 92724d4dc40b4f45377fbedbc747b417d9c41ca6 Mon Sep 17 00:00:00 2001 From: nicolasrsande Date: Tue, 8 Nov 2022 01:44:28 -0300 Subject: [PATCH 5/9] [14.0] [IMP] payroll: add localdict pure payslip object and rename payslips browsable object --- payroll/models/hr_payslip.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/payroll/models/hr_payslip.py b/payroll/models/hr_payslip.py index 9e0a6380..910607f7 100644 --- a/payroll/models/hr_payslip.py +++ b/payroll/models/hr_payslip.py @@ -511,7 +511,7 @@ def _get_baselocaldict(self, contracts): line.code: line for line in self.input_line_ids if line.code } localdict = { - "payslip": Payslips(self.employee_id.id, self, self.env), + "payslips": Payslips(self.employee_id.id, self, self.env), "worked_days": WorkedDays(self.employee_id.id, worked_days_dict, self.env), "inputs": InputLine(self.employee_id.id, input_lines_dict, self.env), "payroll": BrowsableObject( @@ -618,7 +618,10 @@ def get_lines_dict(self): ) # set up localdict with current contract and employee values localdict = dict( - baselocaldict, employee=contract.employee_id, contract=contract + baselocaldict, + employee=contract.employee_id, + contract=contract, + payslip=payslip, ) for rule in payslip._get_salary_rules(): localdict = rule._reset_localdict_values(localdict) From dc5e60d32d78bc40a2c59f837deacb119deb41bb Mon Sep 17 00:00:00 2001 From: nicolasrsande Date: Tue, 8 Nov 2022 01:50:35 -0300 Subject: [PATCH 6/9] [14.0] [FIX] payroll_rule_time_parameter: fix tests with new implementation --- payroll_rule_time_parameter/tests/test_time_parameter.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/payroll_rule_time_parameter/tests/test_time_parameter.py b/payroll_rule_time_parameter/tests/test_time_parameter.py index 537beeb3..01e8ada8 100644 --- a/payroll_rule_time_parameter/tests/test_time_parameter.py +++ b/payroll_rule_time_parameter/tests/test_time_parameter.py @@ -2,8 +2,6 @@ from odoo.tests.common import TransactionCase -from odoo.addons.payroll.models.hr_payslip import Payslips - class TestTimeParameter(TransactionCase): def setUp(self): @@ -33,8 +31,7 @@ def test_time_parameter(self): } ) - browsable_payslip = Payslips(employee.id, payslip, self.env) - time_value = browsable_payslip.time_parameter("TEST_CODE") - rule_value = browsable_payslip.time_parameter("TEST_CODE") + time_value = payslip.get_time_parameter("TEST_CODE") + rule_value = payslip.get_time_parameter("TEST_CODE") self.assertEqual(time_value, "TEST_VALUE", "value = TEST_VALUE") self.assertEqual(rule_value, "TEST_VALUE", "value = TEST_VALUE") From 5cae04cb3b8bbc0e058f8c589807833e8b674d7d Mon Sep 17 00:00:00 2001 From: nicolasrsande Date: Tue, 8 Nov 2022 01:55:06 -0300 Subject: [PATCH 7/9] [14.0] [IMP] payroll: remove old tests from payroll module --- payroll/tests/test_browsable_object.py | 30 +------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/payroll/tests/test_browsable_object.py b/payroll/tests/test_browsable_object.py index 9ddf533e..b5c5f174 100644 --- a/payroll/tests/test_browsable_object.py +++ b/payroll/tests/test_browsable_object.py @@ -1,14 +1,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import date -from odoo.tests import Form - -from odoo.addons.payroll.models.hr_payslip import ( - BaseBrowsableObject, - BrowsableObject, - Payslips, -) +from odoo.addons.payroll.models.hr_payslip import BaseBrowsableObject, BrowsableObject from .common import TestPayslipBase @@ -78,24 +71,3 @@ def test_update_attribute(self): 350.0, "Updating of attribute using dot ('.') notation succeeded", ) - - def test_payslips_time_parameter(self): - self.env["base.time.parameter"].create( - { - "code": "TEST_CODE", - "type": "text", - "version_ids": [ - (0, 0, {"date_from": date(2022, 1, 1), "value_text": "TEST_VALUE"}) - ], - } - ) - # I create an employee Payslip - frm = Form(self.Payslip) - frm.employee_id = self.richard_emp - richard_payslip = frm.save() - - browsable_payslip = Payslips(self.richard_emp.id, richard_payslip, self.env) - time_value = browsable_payslip.time_parameter("TEST_CODE") - rule_value = browsable_payslip.time_parameter("TEST_CODE") - self.assertEqual(time_value, "TEST_VALUE", "value = TEST_VALUE") - self.assertEqual(rule_value, "TEST_VALUE", "value = TEST_VALUE") From 3b2c6575daa6b971c2cbbbd93743603c79bfc9a9 Mon Sep 17 00:00:00 2001 From: nicolasrsande Date: Tue, 8 Nov 2022 02:07:57 -0300 Subject: [PATCH 8/9] [14.0] [IMP] payroll: improve comments and documentation of available objects --- payroll/models/hr_salary_rule.py | 6 ++++-- payroll/views/hr_salary_rule_views.xml | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/payroll/models/hr_salary_rule.py b/payroll/models/hr_salary_rule.py index e3cbe78c..34e5e4fb 100644 --- a/payroll/models/hr_salary_rule.py +++ b/payroll/models/hr_salary_rule.py @@ -67,7 +67,8 @@ class HrSalaryRule(models.Model): default=""" # Available variables: #------------------------------- - # payslip: object containing the payslips + # payslip: hr.payslip object + # payslips: object containing payslips (browsable) # employee: hr.employee object # contract: hr.contract object # rules: object containing the rules code (previously computed) @@ -121,7 +122,8 @@ class HrSalaryRule(models.Model): default=""" # Available variables: #------------------------------- - # payslip: object containing the payslips + # payslip: hr.payslip object + # payslips: object containing payslips (browsable) # employee: hr.employee object # contract: hr.contract object # rules: object containing the rules code (previously computed) diff --git a/payroll/views/hr_salary_rule_views.xml b/payroll/views/hr_salary_rule_views.xml index d644a948..6ad04d88 100644 --- a/payroll/views/hr_salary_rule_views.xml +++ b/payroll/views/hr_salary_rule_views.xml @@ -229,19 +229,23 @@
  • payslip: contains current payslip data + >payslip: contains current payslip object data (hr.payslip)
  • employee: contains current employee data + >payslips: contains payslips data (Payslips - Browsable Object)
  • contract: contains current contract data + >employee: contains current employee object data (hr.employee)
  • rules: contains the rule code (previusly computed) + >contract: contains current contract object data (hr.contract) +
  • +
  • + rules: contains the rules code (previusly computed)
  • Date: Tue, 8 Nov 2022 02:37:01 -0300 Subject: [PATCH 9/9] [14.0] [IMP] payroll: change manifest category [14.0] [IMP] payroll: change manifest category [14.0] [IMP] payroll: add migration for new payslip and payslips objects [14.0] [IMP] payroll: add migration for new payslip and payslips objects [14.0] [IMP] payroll: add migration for new payslip and payslips objects --- payroll/__manifest__.py | 2 +- payroll_account/__manifest__.py | 2 +- payroll_contract_advantages/__manifest__.py | 2 +- payroll_hr_public_holidays/__manifest__.py | 2 +- payroll_rule_time_parameter/__manifest__.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/payroll/__manifest__.py b/payroll/__manifest__.py index 0602f188..7b4a7e52 100644 --- a/payroll/__manifest__.py +++ b/payroll/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Payroll", "version": "14.0.5.5.4", - "category": "Human Resources", + "category": "Payroll", "website": "https://github.com/OCA/payroll", "sequence": 38, "summary": "Manage your employee payroll records", diff --git a/payroll_account/__manifest__.py b/payroll_account/__manifest__.py index 882415e0..a53cbd57 100644 --- a/payroll_account/__manifest__.py +++ b/payroll_account/__manifest__.py @@ -2,7 +2,7 @@ { "name": "Payroll Accounting", "version": "14.0.1.3.0", - "category": "Human Resources", + "category": "Payroll", "website": "https://github.com/OCA/payroll", "license": "LGPL-3", "summary": "Manage your payroll to accounting", diff --git a/payroll_contract_advantages/__manifest__.py b/payroll_contract_advantages/__manifest__.py index 0b8b74b9..529f0202 100644 --- a/payroll_contract_advantages/__manifest__.py +++ b/payroll_contract_advantages/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Payroll Contract Advantages", "version": "14.0.2.0.1", - "category": "Human Resources", + "category": "Payroll", "website": "https://github.com/OCA/payroll", "summary": "Allow to define contract advantages for employees.", "license": "LGPL-3", diff --git a/payroll_hr_public_holidays/__manifest__.py b/payroll_hr_public_holidays/__manifest__.py index 0d0ecd13..2f959c74 100644 --- a/payroll_hr_public_holidays/__manifest__.py +++ b/payroll_hr_public_holidays/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Payroll Public Holidays", "version": "14.0.1.0.0", - "category": "Human Resources", + "category": "Payroll", "website": "https://github.com/OCA/payroll", "summary": "Integration between payroll and hr_public_holidays", "license": "AGPL-3", diff --git a/payroll_rule_time_parameter/__manifest__.py b/payroll_rule_time_parameter/__manifest__.py index 166f5e4d..b2791029 100644 --- a/payroll_rule_time_parameter/__manifest__.py +++ b/payroll_rule_time_parameter/__manifest__.py @@ -2,7 +2,7 @@ "name": "Payroll Rule Time Parameter", "summary": "", "author": "nimarosa, appstogrow, Odoo Community Association (OCA)", - "category": "Human Resources", + "category": "Payroll", "data": [ "security/ir.model.access.csv", "views/base_time_parameter_views.xml",