From 691f69c7316165c6137e887e20a35f590b62e417 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 30 Apr 2020 11:02:28 +0530 Subject: [PATCH] fix: Consider any kind of exemptions only if tax exemptions are allowed on tax slab (#21474) --- .../income_tax_slab/income_tax_slab.json | 21 ++----- .../salary_component/salary_component.json | 4 +- erpnext/hr/doctype/salary_slip/salary_slip.py | 62 ++++++++++--------- 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/erpnext/hr/doctype/income_tax_slab/income_tax_slab.json b/erpnext/hr/doctype/income_tax_slab/income_tax_slab.json index 6d89b197d2..bc6bc5ed37 100644 --- a/erpnext/hr/doctype/income_tax_slab/income_tax_slab.json +++ b/erpnext/hr/doctype/income_tax_slab/income_tax_slab.json @@ -93,13 +93,15 @@ ], "is_submittable": 1, "links": [], - "modified": "2020-04-24 12:28:36.805904", + "modified": "2020-04-27 20:10:42.755762", "modified_by": "Administrator", "module": "HR", "name": "Income Tax Slab", "owner": "Administrator", "permissions": [ { + "amend": 1, + "cancel": 1, "create": 1, "delete": 1, "email": 1, @@ -109,9 +111,11 @@ "report": 1, "role": "System Manager", "share": 1, + "submit": 1, "write": 1 }, { + "amend": 1, "cancel": 1, "create": 1, "delete": 1, @@ -126,6 +130,7 @@ "write": 1 }, { + "amend": 1, "cancel": 1, "create": 1, "delete": 1, @@ -138,20 +143,6 @@ "share": 1, "submit": 1, "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Administrator", - "share": 1, - "submit": 1, - "write": 1 } ], "sort_field": "modified", diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json index 5487e1dee8..97c46c829e 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.json +++ b/erpnext/hr/doctype/salary_component/salary_component.json @@ -227,7 +227,7 @@ { "default": "0", "depends_on": "eval:doc.type == \"Deduction\" && !doc.variable_based_on_taxable_salary", - "description": "If checked, the full amount will be deducted from taxable income before calculating income tax. Otherwise, it can be exempted via Employee Tax Exemption Declaration.", + "description": "If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.", "fieldname": "exempted_from_income_tax", "fieldtype": "Check", "label": "Exempted from Income Tax" @@ -235,7 +235,7 @@ ], "icon": "fa fa-flag", "links": [], - "modified": "2020-04-24 14:50:28.994054", + "modified": "2020-04-28 15:46:45.252945", "modified_by": "Administrator", "module": "HR", "name": "Salary Component", diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 8a4da7e7d3..fc65fb58ae 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -549,15 +549,16 @@ class SalarySlip(TransactionBase): remaining_sub_periods = get_period_factor(self.employee, self.start_date, self.end_date, self.payroll_frequency, payroll_period)[1] # get taxable_earnings, paid_taxes for previous period - previous_taxable_earnings = self.get_taxable_earnings_for_prev_period(payroll_period.start_date, self.start_date) + previous_taxable_earnings = self.get_taxable_earnings_for_prev_period(payroll_period.start_date, + self.start_date, tax_slab.allow_tax_exemption) previous_total_paid_taxes = self.get_tax_paid_in_period(payroll_period.start_date, self.start_date, tax_component) # get taxable_earnings for current period (all days) - current_taxable_earnings = self.get_taxable_earnings() + current_taxable_earnings = self.get_taxable_earnings(tax_slab.allow_tax_exemption) future_structured_taxable_earnings = current_taxable_earnings.taxable_earnings * (math.ceil(remaining_sub_periods) - 1) # get taxable_earnings, addition_earnings for current actual payment days - current_taxable_earnings_for_payment_days = self.get_taxable_earnings(based_on_payment_days=1) + current_taxable_earnings_for_payment_days = self.get_taxable_earnings(tax_slab.allow_tax_exemption, based_on_payment_days=1) current_structured_taxable_earnings = current_taxable_earnings_for_payment_days.taxable_earnings current_additional_earnings = current_taxable_earnings_for_payment_days.additional_income current_additional_earnings_with_full_tax = current_taxable_earnings_for_payment_days.additional_income_with_full_tax @@ -616,7 +617,7 @@ class SalarySlip(TransactionBase): return income_tax_slab_doc - def get_taxable_earnings_for_prev_period(self, start_date, end_date): + def get_taxable_earnings_for_prev_period(self, start_date, end_date, allow_tax_exemption=False): taxable_earnings = frappe.db.sql(""" select sum(sd.amount) from @@ -636,24 +637,26 @@ class SalarySlip(TransactionBase): }) taxable_earnings = flt(taxable_earnings[0][0]) if taxable_earnings else 0 - exempted_amount = frappe.db.sql(""" - select sum(sd.amount) - from - `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name - where - sd.parentfield='deductions' - and sd.exempted_from_income_tax=1 - and is_flexible_benefit=0 - and ss.docstatus=1 - and ss.employee=%(employee)s - and ss.start_date between %(from_date)s and %(to_date)s - and ss.end_date between %(from_date)s and %(to_date)s - """, { - "employee": self.employee, - "from_date": start_date, - "to_date": end_date - }) - exempted_amount = flt(exempted_amount[0][0]) if exempted_amount else 0 + exempted_amount = 0 + if allow_tax_exemption: + exempted_amount = frappe.db.sql(""" + select sum(sd.amount) + from + `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name + where + sd.parentfield='deductions' + and sd.exempted_from_income_tax=1 + and is_flexible_benefit=0 + and ss.docstatus=1 + and ss.employee=%(employee)s + and ss.start_date between %(from_date)s and %(to_date)s + and ss.end_date between %(from_date)s and %(to_date)s + """, { + "employee": self.employee, + "from_date": start_date, + "to_date": end_date + }) + exempted_amount = flt(exempted_amount[0][0]) if exempted_amount else 0 return taxable_earnings - exempted_amount @@ -681,7 +684,7 @@ class SalarySlip(TransactionBase): return total_tax_paid - def get_taxable_earnings(self, based_on_payment_days=0): + def get_taxable_earnings(self, allow_tax_exemption=False, based_on_payment_days=0): joining_date, relieving_date = frappe.get_cached_value("Employee", self.employee, ["date_of_joining", "relieving_date"]) @@ -715,12 +718,13 @@ class SalarySlip(TransactionBase): else: taxable_earnings += amount - for ded in self.deductions: - if ded.exempted_from_income_tax: - amount = ded.amount - if based_on_payment_days: - amount = self.get_amount_based_on_payment_days(ded, joining_date, relieving_date)[0] - taxable_earnings -= flt(amount) + if allow_tax_exemption: + for ded in self.deductions: + if ded.exempted_from_income_tax: + amount = ded.amount + if based_on_payment_days: + amount = self.get_amount_based_on_payment_days(ded, joining_date, relieving_date)[0] + taxable_earnings -= flt(amount) return frappe._dict({ "taxable_earnings": taxable_earnings,