diff --git a/hr_payroll_rate/__init__.py b/hr_payroll_rate/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/hr_payroll_rate/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/hr_payroll_rate/__manifest__.py b/hr_payroll_rate/__manifest__.py new file mode 100755 index 00000000..3fa63491 --- /dev/null +++ b/hr_payroll_rate/__manifest__.py @@ -0,0 +1,16 @@ +{ + 'name': 'Payroll Rates', + 'description': 'Payroll Rates', + 'version': '11.0.1.0.0', + 'website': 'https://hibou.io/', + 'author': 'Hibou Corp. ', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'data': [ + 'security/ir.model.access.csv', + 'views/payroll_views.xml', + ], + 'depends': [ + 'hr_payroll', + ], +} diff --git a/hr_payroll_rate/models/__init__.py b/hr_payroll_rate/models/__init__.py new file mode 100644 index 00000000..2fc9ea9f --- /dev/null +++ b/hr_payroll_rate/models/__init__.py @@ -0,0 +1 @@ +from . import payroll diff --git a/hr_payroll_rate/models/payroll.py b/hr_payroll_rate/models/payroll.py new file mode 100644 index 00000000..7bc47ac6 --- /dev/null +++ b/hr_payroll_rate/models/payroll.py @@ -0,0 +1,27 @@ +from odoo import api, fields, models + + +class PayrollRate(models.Model): + _name = 'hr.payroll.rate' + _description = 'Payroll Rate' + + active = fields.Boolean(string='Active', default=True) + name = fields.Char(string='Name') + date_from = fields.Date(string='Date From', required=True) + date_to = fields.Date(string='Date To') + company_id = fields.Many2one('res.company', string='Company', copy=False, + default=lambda self: self.env['res.company']._company_default_get()) + rate = fields.Float(string='Rate', required=True) + code = fields.Char(string='Code', required=True) + + +class Payslip(models.Model): + _inherit = 'hr.payslip' + + def get_rate(self, code): + self.ensure_one() + return self.env['hr.payroll.rate'].search([ + '|', ('date_to', '=', False), ('date_to', '>=', self.date_to), + ('code', '=', code), + ('date_from', '<=', self.date_from), + ], limit=1) diff --git a/hr_payroll_rate/security/ir.model.access.csv b/hr_payroll_rate/security/ir.model.access.csv new file mode 100644 index 00000000..95825fe5 --- /dev/null +++ b/hr_payroll_rate/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_hr_payroll_rate,access_hr_payroll_rate,model_hr_payroll_rate,hr_payroll.group_hr_payroll_manager,1,1,1,1 \ No newline at end of file diff --git a/hr_payroll_rate/tests/__init__.py b/hr_payroll_rate/tests/__init__.py new file mode 100755 index 00000000..817a9058 --- /dev/null +++ b/hr_payroll_rate/tests/__init__.py @@ -0,0 +1 @@ +from . import test_payroll_rate diff --git a/hr_payroll_rate/tests/test_payroll_rate.py b/hr_payroll_rate/tests/test_payroll_rate.py new file mode 100644 index 00000000..ce165bd2 --- /dev/null +++ b/hr_payroll_rate/tests/test_payroll_rate.py @@ -0,0 +1,42 @@ +from odoo.tests import common +from odoo import fields + + +class TestPayrollRate(common.TransactionCase): + + def setUp(self): + super(TestPayrollRate, self).setUp() + self.employee = self.env['hr.employee'].create({ + 'birthday': '1985-03-14', + 'country_id': self.ref('base.us'), + 'department_id': self.ref('hr.dep_rd'), + 'gender': 'male', + 'name': 'Jared' + }) + self.contract = self.env['hr.contract'].create({ + 'name': 'test', + 'employee_id': self.employee.id, + 'type_id': self.ref('hr_contract.hr_contract_type_emp'), + 'struct_id': self.ref('hr_payroll.structure_base'), + 'resource_calendar_id': self.ref('resource.resource_calendar_std'), + 'wage': 21.50, + 'date_start': '2018-01-01', + 'state': 'open', + 'schedule_pay': 'monthly', + }) + self.payslip = self.env['hr.payslip'].create({ + 'employee_id': self.employee.id, + }) + + def test_payslip_timesheet(self): + rate = self.payslip.get_rate('TEST') + self.assertFalse(rate) + test_rate = self.env['hr.payroll.rate'].create({ + 'name': 'Test Rate', + 'code': 'TEST', + 'rate': 1.65, + 'date_from': '2018-01-01', + }) + + rate = self.payslip.get_rate('TEST') + self.assertEqual(rate, test_rate) diff --git a/hr_payroll_rate/views/payroll_views.xml b/hr_payroll_rate/views/payroll_views.xml new file mode 100644 index 00000000..f2e01f73 --- /dev/null +++ b/hr_payroll_rate/views/payroll_views.xml @@ -0,0 +1,68 @@ + + + + hr.payroll.rate.tree + hr.payroll.rate + + + + + + + + + + + + + + hr.payroll.rate.form + hr.payroll.rate + +
+ + + + + + + + + + + + + + + +
+
+
+ + + hr.payroll.rate.search + hr.payroll.rate + + + + + + + + + + Payroll Rates + hr.payroll.rate + form + tree,form + +

+ No rates +

+
+
+ + +
\ No newline at end of file