Merge pull request #27348 from deepeshgarg007/advance_tds_allocation_gl
fix (refactor): Tax Withholding for Advances using Payment Entry against suppliers
This commit is contained in:
@@ -145,11 +145,6 @@ class AccountsController(TransactionBase):
|
||||
self.validate_party()
|
||||
self.validate_currency()
|
||||
|
||||
if self.doctype == 'Purchase Invoice':
|
||||
self.calculate_paid_amount()
|
||||
# apply tax withholding only if checked and applicable
|
||||
self.set_tax_withholding()
|
||||
|
||||
if self.doctype in ['Purchase Invoice', 'Sales Invoice']:
|
||||
pos_check_field = "is_pos" if self.doctype=="Sales Invoice" else "is_paid"
|
||||
if cint(self.allocate_advances_automatically) and not cint(self.get(pos_check_field)):
|
||||
@@ -164,6 +159,11 @@ class AccountsController(TransactionBase):
|
||||
|
||||
self.set_inter_company_account()
|
||||
|
||||
if self.doctype == 'Purchase Invoice':
|
||||
self.calculate_paid_amount()
|
||||
# apply tax withholding only if checked and applicable
|
||||
self.set_tax_withholding()
|
||||
|
||||
validate_regional(self)
|
||||
|
||||
if self.doctype != 'Material Request':
|
||||
@@ -524,7 +524,8 @@ class AccountsController(TransactionBase):
|
||||
'is_opening': self.get("is_opening") or "No",
|
||||
'party_type': None,
|
||||
'party': None,
|
||||
'project': self.get("project")
|
||||
'project': self.get("project"),
|
||||
'post_net_value': args.get('post_net_value')
|
||||
})
|
||||
|
||||
accounting_dimensions = get_accounting_dimensions()
|
||||
@@ -805,7 +806,6 @@ class AccountsController(TransactionBase):
|
||||
from erpnext.accounts.utils import unlink_ref_doc_from_payment_entries
|
||||
|
||||
if self.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
||||
self.update_allocated_advance_taxes_on_cancel()
|
||||
if frappe.db.get_single_value('Accounts Settings', 'unlink_payment_on_cancellation_of_invoice'):
|
||||
unlink_ref_doc_from_payment_entries(self)
|
||||
|
||||
@@ -853,29 +853,6 @@ class AccountsController(TransactionBase):
|
||||
|
||||
return tax_map
|
||||
|
||||
def update_allocated_advance_taxes_on_cancel(self):
|
||||
if self.get('advances'):
|
||||
tax_accounts = [d.account_head for d in self.get('taxes')]
|
||||
allocated_tax_map = frappe._dict(frappe.get_all('GL Entry', fields=['account', 'sum(credit - debit)'],
|
||||
filters={'voucher_no': self.name, 'account': ('in', tax_accounts)},
|
||||
group_by='account', as_list=1))
|
||||
|
||||
tax_map = self.get_tax_map()
|
||||
|
||||
for pe in self.get('advances'):
|
||||
if pe.reference_type == 'Payment Entry':
|
||||
pe = frappe.get_doc('Payment Entry', pe.reference_name)
|
||||
for tax in pe.get('taxes'):
|
||||
allocated_amount = tax_map.get(tax.account_head) - allocated_tax_map.get(tax.account_head)
|
||||
if allocated_amount > tax.tax_amount:
|
||||
allocated_amount = tax.tax_amount
|
||||
|
||||
if allocated_amount:
|
||||
frappe.db.set_value('Advance Taxes and Charges', tax.name, 'allocated_amount',
|
||||
tax.allocated_amount - allocated_amount)
|
||||
tax_map[tax.account_head] -= allocated_amount
|
||||
allocated_tax_map[tax.account_head] -= allocated_amount
|
||||
|
||||
def get_amount_and_base_amount(self, item, enable_discount_accounting):
|
||||
amount = item.net_amount
|
||||
base_amount = item.base_net_amount
|
||||
@@ -959,55 +936,6 @@ class AccountsController(TransactionBase):
|
||||
}, item=self)
|
||||
)
|
||||
|
||||
def allocate_advance_taxes(self, gl_entries):
|
||||
tax_map = self.get_tax_map()
|
||||
for pe in self.get("advances"):
|
||||
if pe.reference_type == "Payment Entry" and \
|
||||
frappe.db.get_value('Payment Entry', pe.reference_name, 'advance_tax_account'):
|
||||
pe = frappe.get_doc("Payment Entry", pe.reference_name)
|
||||
for tax in pe.get("taxes"):
|
||||
account_currency = get_account_currency(tax.account_head)
|
||||
|
||||
if self.doctype == "Purchase Invoice":
|
||||
dr_or_cr = "debit" if tax.add_deduct_tax == "Add" else "credit"
|
||||
rev_dr_cr = "credit" if tax.add_deduct_tax == "Add" else "debit"
|
||||
else:
|
||||
dr_or_cr = "credit" if tax.add_deduct_tax == "Add" else "debit"
|
||||
rev_dr_cr = "debit" if tax.add_deduct_tax == "Add" else "credit"
|
||||
|
||||
party = self.supplier if self.doctype == "Purchase Invoice" else self.customer
|
||||
unallocated_amount = tax.tax_amount - tax.allocated_amount
|
||||
if tax_map.get(tax.account_head):
|
||||
amount = tax_map.get(tax.account_head)
|
||||
if amount < unallocated_amount:
|
||||
unallocated_amount = amount
|
||||
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": tax.account_head,
|
||||
"against": party,
|
||||
dr_or_cr: unallocated_amount,
|
||||
dr_or_cr + "_in_account_currency": unallocated_amount
|
||||
if account_currency==self.company_currency
|
||||
else unallocated_amount,
|
||||
"cost_center": tax.cost_center
|
||||
}, account_currency, item=tax))
|
||||
|
||||
gl_entries.append(
|
||||
self.get_gl_dict({
|
||||
"account": pe.advance_tax_account,
|
||||
"against": party,
|
||||
rev_dr_cr: unallocated_amount,
|
||||
rev_dr_cr + "_in_account_currency": unallocated_amount
|
||||
if account_currency==self.company_currency
|
||||
else unallocated_amount,
|
||||
"cost_center": tax.cost_center
|
||||
}, account_currency, item=tax))
|
||||
|
||||
frappe.db.set_value("Advance Taxes and Charges", tax.name, "allocated_amount",
|
||||
tax.allocated_amount + unallocated_amount)
|
||||
|
||||
tax_map[tax.account_head] -= unallocated_amount
|
||||
|
||||
def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield):
|
||||
from erpnext.controllers.status_updater import get_allowance_for
|
||||
|
||||
Reference in New Issue
Block a user