fix: Tax calculation for Recurring additional salary (#24206)
* fix: Tax calculation for Recurring additional salary * fix: conflicts
This commit is contained in:
parent
96eb147bb6
commit
adfdc71844
@ -110,11 +110,11 @@ class AdditionalSalary(Document):
|
|||||||
no_of_days = date_diff(getdate(end_date), getdate(start_date)) + 1
|
no_of_days = date_diff(getdate(end_date), getdate(start_date)) + 1
|
||||||
return amount_per_day * no_of_days
|
return amount_per_day * no_of_days
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def get_additional_salaries(employee, start_date, end_date, component_type):
|
def get_additional_salaries(employee, start_date, end_date, component_type):
|
||||||
additional_salary_list = frappe.db.sql("""
|
additional_salary_list = frappe.db.sql("""
|
||||||
select name, salary_component as component, type, amount,
|
select name, salary_component as component, type, amount, overwrite_salary_structure_amount as overwrite,
|
||||||
overwrite_salary_structure_amount as overwrite,
|
deduct_full_tax_on_selected_payroll_date, is_recurring
|
||||||
deduct_full_tax_on_selected_payroll_date
|
|
||||||
from `tabAdditional Salary`
|
from `tabAdditional Salary`
|
||||||
where employee=%(employee)s
|
where employee=%(employee)s
|
||||||
and docstatus = 1
|
and docstatus = 1
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
"year_to_date",
|
"year_to_date",
|
||||||
"section_break_5",
|
"section_break_5",
|
||||||
"additional_salary",
|
"additional_salary",
|
||||||
|
"is_recurring_additional_salary",
|
||||||
"statistical_component",
|
"statistical_component",
|
||||||
"depends_on_payment_days",
|
"depends_on_payment_days",
|
||||||
"exempted_from_income_tax",
|
"exempted_from_income_tax",
|
||||||
@ -235,11 +236,19 @@
|
|||||||
"label": "Year To Date",
|
"label": "Year To Date",
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='earnings' && doc.additional_salary",
|
||||||
|
"fieldname": "is_recurring_additional_salary",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Is Recurring Additional Salary",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-01-14 13:39:15.847158",
|
"modified": "2021-03-14 13:39:15.847158",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Payroll",
|
"module": "Payroll",
|
||||||
"name": "Salary Detail",
|
"name": "Salary Detail",
|
||||||
|
@ -7,12 +7,12 @@ import datetime, math
|
|||||||
|
|
||||||
from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff, money_in_words, formatdate, get_first_day
|
from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff, money_in_words, formatdate, get_first_day
|
||||||
from frappe.model.naming import make_autoname
|
from frappe.model.naming import make_autoname
|
||||||
|
from frappe.utils.background_jobs import enqueue
|
||||||
|
|
||||||
from frappe import msgprint, _
|
from frappe import msgprint, _
|
||||||
from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates
|
from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates
|
||||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||||
from erpnext.utilities.transaction_base import TransactionBase
|
from erpnext.utilities.transaction_base import TransactionBase
|
||||||
from frappe.utils.background_jobs import enqueue
|
|
||||||
from erpnext.payroll.doctype.additional_salary.additional_salary import get_additional_salaries
|
from erpnext.payroll.doctype.additional_salary.additional_salary import get_additional_salaries
|
||||||
from erpnext.payroll.doctype.payroll_period.payroll_period import get_period_factor, get_payroll_period
|
from erpnext.payroll.doctype.payroll_period.payroll_period import get_period_factor, get_payroll_period
|
||||||
from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import get_benefit_component_amount
|
from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import get_benefit_component_amount
|
||||||
@ -616,7 +616,8 @@ class SalarySlip(TransactionBase):
|
|||||||
get_salary_component_data(additional_salary.component),
|
get_salary_component_data(additional_salary.component),
|
||||||
additional_salary.amount,
|
additional_salary.amount,
|
||||||
component_type,
|
component_type,
|
||||||
additional_salary
|
additional_salary,
|
||||||
|
is_recurring = additional_salary.is_recurring
|
||||||
)
|
)
|
||||||
|
|
||||||
def add_tax_components(self, payroll_period):
|
def add_tax_components(self, payroll_period):
|
||||||
@ -637,7 +638,7 @@ class SalarySlip(TransactionBase):
|
|||||||
tax_row = get_salary_component_data(d)
|
tax_row = get_salary_component_data(d)
|
||||||
self.update_component_row(tax_row, tax_amount, "deductions")
|
self.update_component_row(tax_row, tax_amount, "deductions")
|
||||||
|
|
||||||
def update_component_row(self, component_data, amount, component_type, additional_salary=None):
|
def update_component_row(self, component_data, amount, component_type, additional_salary=None, is_recurring = 0):
|
||||||
component_row = None
|
component_row = None
|
||||||
for d in self.get(component_type):
|
for d in self.get(component_type):
|
||||||
if d.salary_component != component_data.salary_component:
|
if d.salary_component != component_data.salary_component:
|
||||||
@ -678,6 +679,7 @@ class SalarySlip(TransactionBase):
|
|||||||
component_row.set('abbr', abbr)
|
component_row.set('abbr', abbr)
|
||||||
|
|
||||||
if additional_salary:
|
if additional_salary:
|
||||||
|
component_row.is_recurring_additional_salary = is_recurring
|
||||||
component_row.default_amount = 0
|
component_row.default_amount = 0
|
||||||
component_row.additional_amount = amount
|
component_row.additional_amount = amount
|
||||||
component_row.additional_salary = additional_salary.name
|
component_row.additional_salary = additional_salary.name
|
||||||
@ -711,6 +713,7 @@ class SalarySlip(TransactionBase):
|
|||||||
# get remaining numbers of sub-period (period for which one salary is processed)
|
# get remaining numbers of sub-period (period for which one salary is processed)
|
||||||
remaining_sub_periods = get_period_factor(self.employee,
|
remaining_sub_periods = get_period_factor(self.employee,
|
||||||
self.start_date, self.end_date, self.payroll_frequency, payroll_period)[1]
|
self.start_date, self.end_date, self.payroll_frequency, payroll_period)[1]
|
||||||
|
|
||||||
# get taxable_earnings, paid_taxes for previous period
|
# get taxable_earnings, paid_taxes for previous period
|
||||||
previous_taxable_earnings = self.get_taxable_earnings_for_prev_period(payroll_period.start_date,
|
previous_taxable_earnings = self.get_taxable_earnings_for_prev_period(payroll_period.start_date,
|
||||||
self.start_date, tax_slab.allow_tax_exemption)
|
self.start_date, tax_slab.allow_tax_exemption)
|
||||||
@ -870,8 +873,16 @@ class SalarySlip(TransactionBase):
|
|||||||
|
|
||||||
if earning.is_tax_applicable:
|
if earning.is_tax_applicable:
|
||||||
if additional_amount:
|
if additional_amount:
|
||||||
|
if not earning.is_recurring_additional_salary:
|
||||||
taxable_earnings += (amount - additional_amount)
|
taxable_earnings += (amount - additional_amount)
|
||||||
additional_income += additional_amount
|
additional_income += additional_amount
|
||||||
|
else:
|
||||||
|
to_date = frappe.db.get_value("Additional Salary", earning.additional_salary, 'to_date')
|
||||||
|
period = (getdate(to_date).month - getdate(self.start_date).month) + 1
|
||||||
|
if period > 0:
|
||||||
|
taxable_earnings += (amount - additional_amount) * period
|
||||||
|
additional_income += additional_amount * period
|
||||||
|
|
||||||
if earning.deduct_full_tax_on_selected_payroll_date:
|
if earning.deduct_full_tax_on_selected_payroll_date:
|
||||||
additional_income_with_full_tax += additional_amount
|
additional_income_with_full_tax += additional_amount
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user