mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
MIG l10n_us_ia_hr_payroll for 12.0. removed default values of fields, and removed superficial tests.
This commit is contained in:
@@ -4,13 +4,13 @@
|
|||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
'category': 'Localization',
|
'category': 'Localization',
|
||||||
'depends': ['l10n_us_hr_payroll'],
|
'depends': ['l10n_us_hr_payroll'],
|
||||||
'version': '11.0.2019.0.0',
|
'version': '12.0.2019.0.0',
|
||||||
'description': """
|
'description': """
|
||||||
USA::Iowa Payroll Rules.
|
USA - Iowa Payroll Rules.
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
* Contribution register and partner for Additional WithholdingTaxaction - Income Tax Withholding
|
* Contribution register and partner for Iowa Workforce Development (IWD) - Unemployment
|
||||||
* Contribution register and partner for Iowa Workforce Development- Unemployment
|
* Contribution register and partner for Iowa Department of Revenue (IDOR) - Income Tax Withholding
|
||||||
* Contract level Iowa Exemptions
|
* Contract level Iowa Exemptions
|
||||||
* Company level Iowa Unemployment Rate
|
* Company level Iowa Unemployment Rate
|
||||||
* Salary Structure for Iowa
|
* Salary Structure for Iowa
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<field name="amount_select">code</field>
|
<field name="amount_select">code</field>
|
||||||
<field name="amount_python_compute">
|
<field name="amount_python_compute">
|
||||||
rate = payslip.dict.get_rate('US_IA_UNEMP')
|
rate = payslip.dict.get_rate('US_IA_UNEMP')
|
||||||
year = int(payslip.dict.date_to[:4])
|
year = payslip.dict.date_to.year
|
||||||
ytd = payslip.sum('WAGE_US_IA_UNEMP', str(year) + '-01-01', str(year+1) + '-01-01')
|
ytd = payslip.sum('WAGE_US_IA_UNEMP', str(year) + '-01-01', str(year+1) + '-01-01')
|
||||||
ytd += contract.external_wages
|
ytd += contract.external_wages
|
||||||
remaining = rate.wage_limit_year - ytd
|
remaining = rate.wage_limit_year - ytd
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ from odoo import models, fields, api
|
|||||||
class USIAHrContract(models.Model):
|
class USIAHrContract(models.Model):
|
||||||
_inherit = 'hr.contract'
|
_inherit = 'hr.contract'
|
||||||
|
|
||||||
ia_w4_allowances = fields.Integer(string='Iowa W-4 allowances', default=0)
|
ia_w4_allowances = fields.Integer(string='Iowa W-4 allowances')
|
||||||
ia_w4_additional_wh = fields.Float(string="Iowa Additional Withholding", default=0.0)
|
ia_w4_additional_wh = fields.Float(string="Iowa W-4 Additional Withholding")
|
||||||
ia_w4_tax_exempt = fields.Boolean(string="Tax Exempt")
|
ia_w4_tax_exempt = fields.Boolean(string="Iowa W-4 Tax Exempt")
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from odoo.addons.l10n_us_hr_payroll.tests.test_us_payslip import TestUsPayslip, process_payslip
|
from odoo.addons.l10n_us_hr_payroll.tests.test_us_payslip import TestUsPayslip, process_payslip
|
||||||
from odoo.addons.l10n_us_hr_payroll.models.l10n_us_hr_payroll import USHrContract
|
|
||||||
|
|
||||||
|
|
||||||
class TestUsIAPayslip(TestUsPayslip):
|
class TestUsIAPayslip(TestUsPayslip):
|
||||||
@@ -11,13 +10,11 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
wages = 30000.00
|
wages = 30000.00
|
||||||
schedule_pay = 'weekly'
|
schedule_pay = 'weekly'
|
||||||
allowances = 1
|
allowances = 1
|
||||||
additional_wh = 0.00
|
|
||||||
employee = self._createEmployee()
|
employee = self._createEmployee()
|
||||||
contract = self._createContract(employee, wages,
|
contract = self._createContract(employee, wages,
|
||||||
struct_id=self.ref('l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
struct_id=self.ref('l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
||||||
schedule_pay=schedule_pay)
|
schedule_pay=schedule_pay)
|
||||||
contract.ia_w4_allowances = allowances
|
contract.ia_w4_allowances = allowances
|
||||||
contract.ia_w4_additional_wh = additional_wh
|
|
||||||
|
|
||||||
self.assertEqual(contract.schedule_pay, 'weekly')
|
self.assertEqual(contract.schedule_pay, 'weekly')
|
||||||
|
|
||||||
@@ -30,30 +27,24 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
# withholding amount because it is calculated in the base US payroll module as a negative
|
# withholding amount because it is calculated in the base US payroll module as a negative
|
||||||
# t1 = 30000 - (10399.66) = 19600.34
|
# t1 = 30000 - (10399.66) = 19600.34
|
||||||
t1_to_test = wages + cats['EE_US_FED_INC_WITHHOLD']
|
t1_to_test = wages + cats['EE_US_FED_INC_WITHHOLD']
|
||||||
self.assertPayrollEqual(t1_to_test, 19600.34)
|
|
||||||
|
|
||||||
# T2 is T1 minus our standard deduction which is a table of flat rates dependent on the number of allowances.
|
# T2 is T1 minus our standard deduction which is a table of flat rates dependent on the number of allowances.
|
||||||
# In our case, we have a weekly period which on the table has a std deduct. of $32.50 for 0 or 1 allowances,
|
# In our case, we have a weekly period which on the table has a std deduct. of $32.50 for 0 or 1 allowances,
|
||||||
# and 80.00 of 2 or more allowances.
|
# and 80.00 of 2 or more allowances.
|
||||||
standard_deduction = 32.50 # The allowance tells us what standard_deduction amount to use.
|
standard_deduction = 32.50 # The allowance tells us what standard_deduction amount to use.
|
||||||
# t2 = 19600.34 - 32.50 = 19567.84
|
# t2 = 19600.34 - 32.50 = 19567.84
|
||||||
t2_to_test = t1_to_test - standard_deduction
|
t2_to_test = t1_to_test - standard_deduction
|
||||||
self.assertPayrollEqual(t2_to_test, 19567.84)
|
|
||||||
# T3 is T2 multiplied by the income rates in the large table plus a flat fee for that bracket.
|
# T3 is T2 multiplied by the income rates in the large table plus a flat fee for that bracket.
|
||||||
# 1153.38 is the bracket floor. 8.53 is the rate, and 67.63 is the flat fee.
|
# 1153.38 is the bracket floor. 8.53 is the rate, and 67.63 is the flat fee.
|
||||||
# t3 = 1638.38
|
# t3 = 1638.38
|
||||||
t3_to_test = ((t2_to_test - 1153.38) * (8.53 / 100)) + 67.63
|
t3_to_test = ((t2_to_test - 1153.38) * (8.53 / 100)) + 67.63
|
||||||
self.assertPayrollEqual(t3_to_test, 1638.38)
|
|
||||||
# T4 is T3 minus a flat amount determined by pay period * the number of deductions. For 2019, our weekly
|
# T4 is T3 minus a flat amount determined by pay period * the number of deductions. For 2019, our weekly
|
||||||
# deduction amount per allowance is 0.77
|
# deduction amount per allowance is 0.77
|
||||||
# t4 = 1638.38 - 0.77 = 155.03
|
# t4 = 1638.38 - 0.77 = 155.03
|
||||||
t4_to_test = t3_to_test - (0.77 * allowances)
|
t4_to_test = t3_to_test - (0.77 * allowances)
|
||||||
self.assertPayrollEqual(t4_to_test, 1637.61)
|
|
||||||
# t5 is our T4 plus the additional withholding per period
|
# t5 is our T4 plus the additional withholding per period
|
||||||
# t5 = 1637.61 + 0.0
|
# t5 = 1637.61 + 0.0
|
||||||
# Convert to negative as well.
|
# Convert to negative as well.
|
||||||
t5_to_test = -t4_to_test - additional_wh
|
t5_to_test = -t4_to_test
|
||||||
self.assertPayrollEqual(t5_to_test, -1637.61)
|
|
||||||
|
|
||||||
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], wages)
|
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], wages)
|
||||||
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], cats['WAGE_US_IA_UNEMP'] * self.IA_UNEMP)
|
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], cats['WAGE_US_IA_UNEMP'] * self.IA_UNEMP)
|
||||||
@@ -70,7 +61,7 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
|
|
||||||
# Make a new payslip, this one will have maximums
|
# Make a new payslip, this one will have maximums
|
||||||
|
|
||||||
remaining_IA_UNEMP_wages = self.IA_UNEMP_MAX_WAGE - wages if (self.IA_UNEMP_MAX_WAGE - 2*wages < wages) \
|
remaining_ia_unemp_wages = self.IA_UNEMP_MAX_WAGE - wages if (self.IA_UNEMP_MAX_WAGE - 2*wages < wages) \
|
||||||
else wages
|
else wages
|
||||||
|
|
||||||
self._log('2019 Iowa tax second payslip weekly:')
|
self._log('2019 Iowa tax second payslip weekly:')
|
||||||
@@ -78,21 +69,19 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], remaining_IA_UNEMP_wages)
|
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], remaining_ia_unemp_wages)
|
||||||
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], remaining_IA_UNEMP_wages * self.IA_UNEMP)
|
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], remaining_ia_unemp_wages * self.IA_UNEMP)
|
||||||
|
|
||||||
def test_taxes_biweekly(self):
|
def test_taxes_biweekly(self):
|
||||||
wages = 3000.00
|
wages = 3000.00
|
||||||
schedule_pay = 'bi-weekly'
|
schedule_pay = 'bi-weekly'
|
||||||
allowances = 1
|
allowances = 1
|
||||||
additional_wh = 0.00
|
|
||||||
employee = self._createEmployee()
|
employee = self._createEmployee()
|
||||||
contract = self._createContract(employee, wages,
|
contract = self._createContract(employee, wages,
|
||||||
struct_id=self.ref(
|
struct_id=self.ref(
|
||||||
'l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
'l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
||||||
schedule_pay=schedule_pay)
|
schedule_pay=schedule_pay)
|
||||||
contract.ia_w4_allowances = allowances
|
contract.ia_w4_allowances = allowances
|
||||||
contract.ia_w4_additional_wh = additional_wh
|
|
||||||
|
|
||||||
self.assertEqual(contract.schedule_pay, 'bi-weekly')
|
self.assertEqual(contract.schedule_pay, 'bi-weekly')
|
||||||
|
|
||||||
@@ -115,11 +104,11 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
# deduction amount per allowance is 0.77
|
# deduction amount per allowance is 0.77
|
||||||
t4_to_test = t3_to_test - (1.54 * allowances)
|
t4_to_test = t3_to_test - (1.54 * allowances)
|
||||||
# t5 is our T4 plus the additional withholding per period
|
# t5 is our T4 plus the additional withholding per period
|
||||||
t5_to_test = -t4_to_test - additional_wh
|
t5_to_test = -t4_to_test
|
||||||
|
|
||||||
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], wages)
|
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], wages)
|
||||||
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], cats['WAGE_US_IA_UNEMP'] * self.IA_UNEMP)
|
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], cats['WAGE_US_IA_UNEMP'] * self.IA_UNEMP)
|
||||||
self.assertPayrollEqual(cats['EE_US_IA_INC_WITHHOLD'], t5_to_test - additional_wh)
|
self.assertPayrollEqual(cats['EE_US_IA_INC_WITHHOLD'], t5_to_test)
|
||||||
|
|
||||||
process_payslip(payslip)
|
process_payslip(payslip)
|
||||||
|
|
||||||
@@ -175,7 +164,6 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
salary,
|
salary,
|
||||||
external_wages=external_wages,
|
external_wages=external_wages,
|
||||||
struct_id=self.ref('l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
struct_id=self.ref('l10n_us_ia_hr_payroll.hr_payroll_salary_structure_us_ia_employee'),
|
||||||
futa_type=USHrContract.FUTA_TYPE_BASIC,
|
|
||||||
schedule_pay=schedule_pay)
|
schedule_pay=schedule_pay)
|
||||||
contract.ia_w4_tax_exempt = True
|
contract.ia_w4_tax_exempt = True
|
||||||
|
|
||||||
@@ -184,8 +172,10 @@ class TestUsIAPayslip(TestUsPayslip):
|
|||||||
payslip.compute_sheet()
|
payslip.compute_sheet()
|
||||||
cats = self._getCategories(payslip)
|
cats = self._getCategories(payslip)
|
||||||
|
|
||||||
self.assertPayrollEqual(cats.get('WAGE_US_IA_UNEMP', 0.0), 0.0)
|
self.assertPayrollEqual(cats['WAGE_US_IA_UNEMP'], salary)
|
||||||
self.assertPayrollEqual(cats.get('ER_US_IA_UNEMP', 0.0), cats.get('WAGE_US_IA_UNEMP', 0.0) * self.IA_UNEMP)
|
self.assertPayrollEqual(cats['ER_US_IA_UNEMP'], cats['WAGE_US_IA_UNEMP'] * self.IA_UNEMP)
|
||||||
|
self.assertPayrollEqual(cats.get('EE_US_IA_INC_WITHHOLD', 0.00), 0.00)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user