mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
IMP l10n_us_hr_payroll Implement generic state income tax exempt and additional fields. Include in PA Tests and State Form section.
This commit is contained in:
@@ -90,7 +90,7 @@
|
||||
<field name="sequence" eval="450"/>
|
||||
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||
<field name="category_id" ref="hr_payroll_category_er_us_suta"/>
|
||||
<field name="name">ER: US PA Pennsylvania State Unemployment (RT-6)</field>
|
||||
<field name="name">ER: US PA Pennsylvania State Unemployment (UC-2)</field>
|
||||
<field name="code">ER_US_PA_SUTA</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, wage_base='us_pa_suta_wage_base', rate='us_pa_suta_rate', state_code='PA')</field>
|
||||
@@ -104,7 +104,7 @@
|
||||
<field name="sequence" eval="195"/>
|
||||
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||
<field name="category_id" ref="hr_payroll_category_ee_us_suta"/>
|
||||
<field name="name">EE: US PA Pennsylvania State Unemployment (RT-6)</field>
|
||||
<field name="name">EE: US PA Pennsylvania State Unemployment (UC-2)</field>
|
||||
<field name="code">EE_US_PA_SUTA</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_unemployment(payslip, categories, worked_days, inputs, rate='us_pa_suta_ee_rate', state_code='PA')</field>
|
||||
@@ -118,7 +118,7 @@
|
||||
<field name="sequence" eval="195"/>
|
||||
<field name="struct_id" ref="hr_payroll_structure"/>
|
||||
<field name="category_id" ref="hr_payroll_category_ee_us_sit"/>
|
||||
<field name="name">EE: US PA Pennsylvania State Income Tax Withholding</field>
|
||||
<field name="name">EE: US PA Pennsylvania State Income Tax Withholding (PA-501)</field>
|
||||
<field name="code">EE_US_PA_SIT</field>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result, _ = general_state_income_withholding(payslip, categories, worked_days, inputs, rate='us_pa_sit_rate', state_code='PA')</field>
|
||||
|
||||
@@ -99,14 +99,12 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
|
||||
Returns SUTA eligible wage and rate.
|
||||
WAGE = GROSS - WAGE_US_941_FIT_EXEMPT
|
||||
|
||||
The Federal Income Tax Filing status (W4) is used for Exemption.
|
||||
|
||||
:return: result, result_rate (wage, percent)
|
||||
"""
|
||||
if not _state_applies(payslip, state_code):
|
||||
return 0.0, 0.0
|
||||
|
||||
if not payslip.contract_id.us_payroll_config_value('fed_941_fit_w4_filing_status'):
|
||||
if payslip.contract_id.us_payroll_config_value('state_income_tax_exempt'):
|
||||
return 0.0, 0.0
|
||||
|
||||
# Determine Wage
|
||||
@@ -116,4 +114,10 @@ def general_state_income_withholding(payslip, categories, worked_days, inputs, w
|
||||
ytd_wage += payslip.contract_id.external_wages
|
||||
|
||||
wage = categories.GROSS - categories.WAGE_US_941_FIT_EXEMPT
|
||||
return _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
||||
result, result_rate = _general_rate(payslip, wage, ytd_wage, wage_base=wage_base, wage_start=wage_start, rate=rate)
|
||||
additional = payslip.contract_id.us_payroll_config_value('state_income_tax_additional_withholding')
|
||||
if additional:
|
||||
tax = result * (result_rate / 100.0)
|
||||
tax -= additional # assumed result_rate is negative and that the 'additional' should increase it.
|
||||
return result, ((tax / result) * 100.0)
|
||||
return result, result_rate
|
||||
|
||||
@@ -15,6 +15,8 @@ class HRContractUSPayrollConfig(models.Model):
|
||||
employee_id = fields.Many2one('hr.employee', string="Employee", required=True)
|
||||
state_id = fields.Many2one('res.country.state', string="Applied State")
|
||||
state_code = fields.Char(related='state_id.code')
|
||||
state_income_tax_exempt = fields.Boolean(string='State Income Tax Exempt')
|
||||
state_income_tax_additional_withholding = fields.Float(string='State Income Tax Additional Withholding')
|
||||
|
||||
fed_940_type = fields.Selection([
|
||||
(FUTA_TYPE_EXEMPT, 'Exempt (0%)'),
|
||||
|
||||
@@ -29,3 +29,15 @@ class TestUsPAPayslip(TestUsPayslip):
|
||||
payslip.compute_sheet()
|
||||
cats = self._getCategories(payslip)
|
||||
self.assertPayrollEqual(cats['EE_US_SIT'], wh)
|
||||
|
||||
# Test Additional
|
||||
contract.us_payroll_config_id.state_income_tax_additional_withholding = 100.0
|
||||
payslip.compute_sheet()
|
||||
cats = self._getCategories(payslip)
|
||||
self.assertPayrollEqual(cats['EE_US_SIT'], wh - 100.0)
|
||||
|
||||
# Test Exempt
|
||||
contract.us_payroll_config_id.state_income_tax_exempt = True
|
||||
payslip.compute_sheet()
|
||||
cats = self._getCategories(payslip)
|
||||
self.assertPayrollEqual(cats.get('EE_US_SIT', 0.0), 0.0)
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
<group name="state_fl_florida" string="FL Florida" attrs="{'invisible':[('state_id', '!=', %(base.state_us_10)s)]}">
|
||||
<p colspan="2"><h3>No additional fields.</h3></p>
|
||||
</group>
|
||||
<group name="state_pa_pennsylvania" string="PA Pennsylvania" attrs="{'invisible':[('state_id', '!=', %(base.state_us_39)s)]}">
|
||||
<field name="state_income_tax_exempt"/>
|
||||
<field name="state_income_tax_additional_withholding"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user