mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Initial commit of hr_payroll_rate for 11.0
This commit is contained in:
1
hr_payroll_rate/__init__.py
Normal file
1
hr_payroll_rate/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
||||||
16
hr_payroll_rate/__manifest__.py
Executable file
16
hr_payroll_rate/__manifest__.py
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
'name': 'Payroll Rates',
|
||||||
|
'description': 'Payroll Rates',
|
||||||
|
'version': '11.0.1.0.0',
|
||||||
|
'website': 'https://hibou.io/',
|
||||||
|
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||||
|
'license': 'AGPL-3',
|
||||||
|
'category': 'Human Resources',
|
||||||
|
'data': [
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
'views/payroll_views.xml',
|
||||||
|
],
|
||||||
|
'depends': [
|
||||||
|
'hr_payroll',
|
||||||
|
],
|
||||||
|
}
|
||||||
1
hr_payroll_rate/models/__init__.py
Normal file
1
hr_payroll_rate/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import payroll
|
||||||
27
hr_payroll_rate/models/payroll.py
Normal file
27
hr_payroll_rate/models/payroll.py
Normal file
@@ -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)
|
||||||
2
hr_payroll_rate/security/ir.model.access.csv
Normal file
2
hr_payroll_rate/security/ir.model.access.csv
Normal file
@@ -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
|
||||||
|
1
hr_payroll_rate/tests/__init__.py
Executable file
1
hr_payroll_rate/tests/__init__.py
Executable file
@@ -0,0 +1 @@
|
|||||||
|
from . import test_payroll_rate
|
||||||
42
hr_payroll_rate/tests/test_payroll_rate.py
Normal file
42
hr_payroll_rate/tests/test_payroll_rate.py
Normal file
@@ -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)
|
||||||
68
hr_payroll_rate/views/payroll_views.xml
Normal file
68
hr_payroll_rate/views/payroll_views.xml
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="payroll_rate_view_tree" model="ir.ui.view">
|
||||||
|
<field name="name">hr.payroll.rate.tree</field>
|
||||||
|
<field name="model">hr.payroll.rate</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Payroll Rates">
|
||||||
|
<field name="code"/>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="rate"/>
|
||||||
|
<field name="date_from"/>
|
||||||
|
<field name="date_to"/>
|
||||||
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="payroll_rate_view_form" model="ir.ui.view">
|
||||||
|
<field name="name">hr.payroll.rate.form</field>
|
||||||
|
<field name="model">hr.payroll.rate</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Payroll Rate">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="active"/>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="code"/>
|
||||||
|
<field name="rate"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="date_from"/>
|
||||||
|
<field name="date_to"/>
|
||||||
|
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="payroll_rate_view_search" model="ir.ui.view">
|
||||||
|
<field name="name">hr.payroll.rate.search</field>
|
||||||
|
<field name="model">hr.payroll.rate</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search string="Payroll Rates">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="code"/>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="payroll_rate_view_action_main" model="ir.actions.act_window">
|
||||||
|
<field name="name">Payroll Rates</field>
|
||||||
|
<field name="res_model">hr.payroll.rate</field>
|
||||||
|
<field name="view_type">form</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p>
|
||||||
|
No rates
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="payroll_rate_menu_main" name="Payroll Rates"
|
||||||
|
action="payroll_rate_view_action_main"
|
||||||
|
sequence="13" parent="hr_payroll.menu_hr_payroll_configuration"/>
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user