Skip to content

Commit 90d148b

Browse files
committed
[IMP] l10n_in_hr_payroll_extension: test cases and monetary fields
With This Commit ======================================================== - Added Test Cases for salary component calculations - Modified some fields to make them monetary - Minor changes in views according above changes
1 parent e8623a0 commit 90d148b

File tree

8 files changed

+87
-67
lines changed

8 files changed

+87
-67
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,4 @@ dmypy.json
127127

128128
# Pyre type checker
129129
.pyre/
130+
.vscode

l10n_in_hr_payroll_extension/models/hr_contract.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
class HrContract(models.Model):
55
_inherit = 'hr.contract'
66

7-
l10n_in_basic_salary = fields.Float(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary")
8-
l10n_in_house_rent_allowance = fields.Float(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance")
9-
l10n_in_standard_allowance = fields.Float(string="Standard Allowance", default=4167)
10-
l10n_in_performance_bonus = fields.Float(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus")
11-
l10n_in_leave_travel_allowance = fields.Float(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance")
12-
l10n_in_leave_allowance = fields.Float(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance")
7+
l10n_in_basic_salary = fields.Monetary(string="Basic Salary", help="Basic salary calculated from the wage", compute="_compute_l10n_in_basic_salary", inverse="_inverse_l10n_in_basic_salary", currency_field="currency_id")
8+
l10n_in_house_rent_allowance = fields.Monetary(string="House Rent Allowance", compute="_compute_l10n_in_house_rent_allowance", inverse="_inverse_l10n_in_house_rent_allowance", currency_field="currency_id")
9+
l10n_in_standard_allowance = fields.Monetary(string="Standard Allowance", default=4167, currency_field="currency_id")
10+
l10n_in_performance_bonus = fields.Monetary(string="Performance Bonus", compute="_compute_l10n_in_performance_bonus", inverse="_inverse_l10n_in_performance_bonus", currency_field="currency_id")
11+
l10n_in_leave_travel_allowance = fields.Monetary(string="Leave Travel Allowance", compute="_compute_l10n_in_leave_travel_allowance", inverse="_inverse_l10n_in_leave_travel_allowance", currency_field="currency_id")
12+
l10n_in_leave_allowance = fields.Monetary(string="Leave Allowance", compute="_compute_leave_allowance", inverse="_inverse_leave_allowance", currency_field="currency_id")
1313
l10n_in_leave_days = fields.Float(string="Leave Days", default=1)
14-
l10n_in_gratuity = fields.Float(string="Gratuity", default=0)
15-
l10n_in_supplementary_allowance = fields.Float(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", default=0)
14+
l10n_in_gratuity = fields.Monetary(string="Gratuity", currency_field="currency_id")
15+
l10n_in_supplementary_allowance = fields.Monetary(string="Supplementary Allowance", compute="_compute_l10n_in_supplementary_allowance", inverse="_inverse_l10n_in_supplementary_allowance", currency_field="currency_id")
1616

1717
l10n_in_basic_salary_percent = fields.Float(string="Basic Salary Percentage", help="basic salary percentage of wage", default=50)
1818
l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance Percentage", help="this is the percentage of basic salary", default=50)
@@ -24,14 +24,14 @@ class HrContract(models.Model):
2424
l10n_in_gratuity_percent = fields.Float(string="Gratuity Percentage", compute="_compute_l10n_in_gratuity_percent", inverse="_inverse_l10n_in_gratuity_percent")
2525
l10n_in_supplementary_allowance_percent = fields.Float(string="Supplementary Allowance Percentage")
2626

27-
l10n_in_pf_employee_contribution = fields.Float(related="company_id.l10n_in_pf_employee_contribution", readonly=False)
28-
l10n_in_pf_employer_contribution = fields.Float(related="company_id.l10n_in_pf_employer_contribution", readonly=False)
29-
l10n_in_professional_tax = fields.Float(string="Professional Tax", default=200)
30-
l10n_in_esic_employee_contribution = fields.Float(related="company_id.l10n_in_esic_employee_contribution", readonly=False)
31-
l10n_in_esic_employer_contribution = fields.Float(related="company_id.l10n_in_esic_employer_contribution", readonly=False)
32-
l10n_in_lwf_employee_contribution = fields.Float(related="company_id.l10n_in_lwf_employee_contribution", readonly=False)
33-
l10n_in_lwf_employer_contribution = fields.Float(related="company_id.l10n_in_lwf_employer_contribution", readonly=False)
34-
l10n_in_other_deduction = fields.Float(string="Other Deduction")
27+
l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default=12)
28+
l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default=12)
29+
l10n_in_professional_tax = fields.Monetary(string="Professional Tax", default=200)
30+
l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default=0.75)
31+
l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default=3.25)
32+
l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default=6)
33+
l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default=12)
34+
l10n_in_other_deduction = fields.Monetary(string="Other Deduction", currency_field="currency_id")
3535

3636
@api.depends("l10n_in_basic_salary_percent", "wage")
3737
def _compute_l10n_in_basic_salary(self):
@@ -76,7 +76,7 @@ def _compute_l10n_in_leave_travel_allowance(self):
7676

7777
def _inverse_l10n_in_leave_travel_allowance(self):
7878
for record in self:
79-
record.l10n_in_leave_travel_allowance_percent = record.l10n_in_leave_days * ((record.l10n_in_leave_allowance * 100) / record.wage if record.wage else 0)
79+
record.l10n_in_leave_travel_allowance_percent = (record.l10n_in_leave_travel_allowance * 100) / record.l10n_in_basic_salary if record.l10n_in_basic_salary else 0
8080

8181
@api.depends('wage', 'l10n_in_leave_allowance_per_day_percent', 'l10n_in_leave_days')
8282
def _compute_leave_allowance(self):

l10n_in_hr_payroll_extension/models/res_company.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,11 @@
44
class ResCompany(models.Model):
55
_inherit = 'res.company'
66

7+
l10n_in_org_tax_details = fields.Boolean(string="Organisation Tax Details")
78
l10n_in_org_pan_number = fields.Char(string="PAN Number")
89
l10n_in_org_tan_number = fields.Char(string="TAN Number")
910
l10n_in_org_tds_circle = fields.Char(string="TDS Circle/AO Code")
10-
l10n_in_org_tax_details = fields.Boolean(string="Organisation Tax Details")
1111

12-
l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund")
1312
l10n_in_employer_identification = fields.Char(string="Employer Identification")
14-
l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution")
15-
l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution")
16-
17-
l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax")
1813
l10n_in_professional_tax_number = fields.Char(string="Professional Tax Number")
19-
20-
l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation")
2114
l10n_in_esic_ip = fields.Char(string="ESIC IP")
22-
l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution")
23-
l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution")
24-
25-
l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund")
26-
l10n_in_lwf_employee_contribution = fields.Float(string="Employee Contribution")
27-
l10n_in_lwf_employer_contribution = fields.Float(string="Employer Contribution")

l10n_in_hr_payroll_extension/models/res_config_settings.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,29 @@
44
class ResConfigSettings(models.TransientModel):
55
_inherit = 'res.config.settings'
66

7+
currency_id = fields.Many2one("res.currency", default=lambda self: self.env.company.currency_id)
8+
9+
l10n_in_org_tax_details = fields.Boolean(related='company_id.l10n_in_org_tax_details', readonly=False)
710
l10n_in_org_pan_number = fields.Char(related='company_id.l10n_in_org_pan_number', readonly=False)
811
l10n_in_org_tan_number = fields.Char(related='company_id.l10n_in_org_tan_number', readonly=False)
912
l10n_in_org_tds_circle = fields.Char(related='company_id.l10n_in_org_tds_circle', readonly=False)
10-
l10n_in_org_tax_details = fields.Boolean(related='company_id.l10n_in_org_tax_details', readonly=False)
1113

12-
l10n_in_is_provident_fund = fields.Boolean(related='company_id.l10n_in_is_provident_fund', readonly=False, default=True)
14+
l10n_in_is_provident_fund = fields.Boolean(string="Employee's Provident Fund", default=True)
1315
l10n_in_employer_identification = fields.Char(related='company_id.l10n_in_employer_identification', readonly=False)
14-
l10n_in_pf_employee_contribution = fields.Float(related='company_id.l10n_in_pf_employee_contribution', readonly=False, default=12)
15-
l10n_in_pf_employer_contribution = fields.Float(related='company_id.l10n_in_pf_employer_contribution', readonly=False, default=12)
16+
default_l10n_in_pf_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=12)
17+
default_l10n_in_pf_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=12)
1618

17-
l10n_in_is_professional_tax = fields.Boolean(related='company_id.l10n_in_is_professional_tax', readonly=False, default=True)
19+
l10n_in_is_professional_tax = fields.Boolean(string="Professional Tax", default=True)
1820
l10n_in_professional_tax_number = fields.Char(related='company_id.l10n_in_professional_tax_number', readonly=False)
1921

20-
l10n_in_is_esic = fields.Boolean(related='company_id.l10n_in_is_esic', readonly=False, default=True)
22+
l10n_in_is_esic = fields.Boolean(string="Employee's State Insurance Corporation", default=True)
2123
l10n_in_esic_ip = fields.Char(related='company_id.l10n_in_esic_ip', readonly=False)
22-
l10n_in_esic_employee_contribution = fields.Float(related='company_id.l10n_in_esic_employee_contribution', readonly=False, default=0.75)
23-
l10n_in_esic_employer_contribution = fields.Float(related='company_id.l10n_in_esic_employer_contribution', readonly=False, default=3.25)
24+
default_l10n_in_esic_employee_contribution = fields.Float(string="Employee Contribution", default_model="hr.contract", default=0.75)
25+
default_l10n_in_esic_employer_contribution = fields.Float(string="Employer Contribution", default_model="hr.contract", default=3.25)
2426

25-
l10n_in_is_lwf = fields.Boolean(related='company_id.l10n_in_is_lwf', readonly=False, default=True)
26-
l10n_in_lwf_employee_contribution = fields.Float(related='company_id.l10n_in_lwf_employee_contribution', readonly=False, default=6)
27-
l10n_in_lwf_employer_contribution = fields.Float(related='company_id.l10n_in_lwf_employer_contribution', readonly=False, default=12)
27+
l10n_in_is_lwf = fields.Boolean(string="Labour Welfare Fund", default=True)
28+
default_l10n_in_lwf_employee_contribution = fields.Monetary(string="Employee Contribution", currency_field="currency_id", default_model="hr.contract", default=6)
29+
default_l10n_in_lwf_employer_contribution = fields.Monetary(string="Employer Contribution", currency_field="currency_id", default_model="hr.contract", default=12)
2830

2931
default_l10n_in_basic_salary_percent = fields.Float(string="Basic Salary", help="You can define the % of the salary from company cost to compute the basic salary based on your wages (Including D4).", default_model="hr.contract", default=50)
3032
default_l10n_in_house_rent_allowance_percent = fields.Float(string="House Rent Allowance", help="You can define 50% for metro city and 40% for non-metro city.", default_model="hr.contract", default=50)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import test_hr_contract
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from odoo.tests.common import TransactionCase
2+
from odoo.tests import tagged
3+
4+
5+
@tagged('post_install', '-at_install')
6+
class TestHrContract(TransactionCase):
7+
@classmethod
8+
def setUpClass(cls):
9+
super(TestHrContract, cls).setUpClass()
10+
11+
cls.contract = cls.env['hr.contract'].create({
12+
'name': "Test Contract",
13+
'wage': 100000,
14+
'l10n_in_basic_salary_percent': 50,
15+
'l10n_in_house_rent_allowance_percent': 50,
16+
'l10n_in_standard_allowance': 4167,
17+
'l10n_in_performance_bonus_percent': 20,
18+
'l10n_in_leave_travel_allowance_percent': 20,
19+
'l10n_in_gratuity': 250,
20+
})
21+
22+
def test_salary_component_amounts(self):
23+
self.assertEqual(self.contract.l10n_in_basic_salary, 50000, "50% of 100000 should be 50000")
24+
self.assertEqual(self.contract.l10n_in_house_rent_allowance, 25000, "50% of 50000(Basic Salary) should be 25000")
25+
self.assertEqual(self.contract.l10n_in_standard_allowance_percent, 4.167, "4167 is a 4.17% of 100000(Wage)")
26+
self.assertEqual(self.contract.l10n_in_performance_bonus, 10000, "20% of 50000(Basic Salary) should be 10000")
27+
self.assertEqual(self.contract.l10n_in_leave_travel_allowance, 10000, "20% of 50000(Basic Salary) should be 10000")
28+
self.assertEqual(self.contract.l10n_in_gratuity_percent, 0.50, "250 is a 0.50% of 50000(Basic Salary)")
29+
self.assertEqual(self.contract.l10n_in_supplementary_allowance, 583, "supplementary should be remaining amount from wage")

l10n_in_hr_payroll_extension/views/hr_contract_views.xml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,47 +15,47 @@
1515
<label for="l10n_in_basic_salary" />
1616
<div class="o_row mw-80" name="l10n_in_basic_salary">
1717
<field name="l10n_in_basic_salary"/>
18-
<div> / month</div>
18+
<div> / month</div>
1919
<field name="l10n_in_basic_salary_percent" groups="base.group_no_one"/>
2020
<div groups="base.group_no_one">%</div>
2121
</div>
2222

2323
<label for="l10n_in_house_rent_allowance" />
2424
<div class="o_row mw-80" name="l10n_in_house_rent_allowance">
2525
<field name="l10n_in_house_rent_allowance"/>
26-
<div class="mb-2"> / month</div>
26+
<div class="mb-2"> / month</div>
2727
<field name="l10n_in_house_rent_allowance_percent" groups="base.group_no_one"/>
2828
<div groups="base.group_no_one">%</div>
2929
</div>
3030

3131
<label for="l10n_in_standard_allowance" />
3232
<div class="o_row mw-80" name="l10n_in_standard_allowance">
3333
<field name="l10n_in_standard_allowance"/>
34-
<div class="mb-2"> / month</div>
34+
<div class="mb-2"> / month</div>
3535
<field name="l10n_in_standard_allowance_percent" groups="base.group_no_one"/>
3636
<div groups="base.group_no_one">%</div>
3737
</div>
3838

3939
<label for="l10n_in_performance_bonus" />
4040
<div class="o_row mw-80" name="l10n_in_performance_bonus">
4141
<field name="l10n_in_performance_bonus"/>
42-
<div class="mb-2"> / month</div>
42+
<div class="mb-2"> / month</div>
4343
<field name="l10n_in_performance_bonus_percent" groups="base.group_no_one"/>
4444
<div groups="base.group_no_one">%</div>
4545
</div>
4646

4747
<label for="l10n_in_leave_travel_allowance" />
4848
<div class="o_row mw-80" name="l10n_in_leave_travel_allowance">
4949
<field name="l10n_in_leave_travel_allowance"/>
50-
<div class="mb-2"> / month</div>
50+
<div class="mb-2"> / month</div>
5151
<field name="l10n_in_leave_travel_allowance_percent" groups="base.group_no_one"/>
5252
<div groups="base.group_no_one">%</div>
5353
</div>
5454

5555
<label for="l10n_in_leave_allowance" />
5656
<div class="o_row mw-80" name="l10n_in_leave_allowance">
5757
<field name="l10n_in_leave_allowance"/>
58-
<div class="mb-2"> / month</div>
58+
<div class="mb-2"> / month</div>
5959
<field name="l10n_in_leave_allowance_percent" groups="base.group_no_one"/>
6060
<div groups="base.group_no_one">%</div>
6161
</div>
@@ -69,15 +69,15 @@
6969
<label for="l10n_in_gratuity" />
7070
<div class="o_row mw-80" name="l10n_in_gratuity">
7171
<field name="l10n_in_gratuity"/>
72-
<div class="mb-2"> / month</div>
72+
<div class="mb-2"> / month</div>
7373
<field name="l10n_in_gratuity_percent" groups="base.group_no_one"/>
7474
<div groups="base.group_no_one">%</div>
7575
</div>
7676

7777
<label for="l10n_in_supplementary_allowance" />
7878
<div class="o_row mw-80" name="l10n_in_supplementary_allowance">
7979
<field name="l10n_in_supplementary_allowance"/>
80-
<div class="mb-2"> / month</div>
80+
<div class="mb-2"> / month</div>
8181
<field name="l10n_in_supplementary_allowance_percent" groups="base.group_no_one"/>
8282
<div groups="base.group_no_one">%</div>
8383
</div>
@@ -106,7 +106,7 @@
106106
<label for="l10n_in_professional_tax"/>
107107
<div class="o_row mw-60" name="l10n_in_professional_tax">
108108
<field name="l10n_in_professional_tax"/>
109-
<div class="mb-2"> / month</div>
109+
<div class="mb-2"> / month</div>
110110
</div>
111111

112112
<label for="l10n_in_esic_employee_contribution" string="ESIC Employee Contribution" />
@@ -124,19 +124,19 @@
124124
<label for="l10n_in_lwf_employee_contribution" string="LWF Employee Contribution" />
125125
<div class="o_row mw-60" name="l10n_in_lwf_employee_contribution">
126126
<field name="l10n_in_lwf_employee_contribution"/>
127-
<div class="mb-2"> / month</div>
127+
<div class="mb-2"> / month</div>
128128
</div>
129129

130130
<label for="l10n_in_lwf_employer_contribution" string="LWF Employer Contribution" />
131131
<div class="o_row mw-60" name="l10n_in_lwf_employer_contribution">
132132
<field name="l10n_in_lwf_employer_contribution"/>
133-
<div class="mb-2"> / month</div>
133+
<div class="mb-2"> / month</div>
134134
</div>
135135

136136
<label for="l10n_in_other_deduction" />
137137
<div class="o_row mw-60" name="l10n_in_other_deduction">
138138
<field name="l10n_in_other_deduction"/>
139-
<div class="mb-2"> / month</div>
139+
<div class="mb-2"> / month</div>
140140
</div>
141141
</group>
142142
</div>

0 commit comments

Comments
 (0)