Precision issue in tax calculation
This commit is contained in:
parent
5e893ef8fd
commit
0a35effe49
@ -273,10 +273,10 @@ class PurchaseInvoice(BuyingController):
|
|||||||
def make_gl_entries(self):
|
def make_gl_entries(self):
|
||||||
auto_accounting_for_stock = \
|
auto_accounting_for_stock = \
|
||||||
cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
|
cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
|
||||||
|
|
||||||
stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
|
stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
|
||||||
expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
|
expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
|
||||||
|
|
||||||
gl_entries = []
|
gl_entries = []
|
||||||
|
|
||||||
# parent's gl entry
|
# parent's gl entry
|
||||||
@ -329,32 +329,31 @@ class PurchaseInvoice(BuyingController):
|
|||||||
"cost_center": item.cost_center
|
"cost_center": item.cost_center
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
if auto_accounting_for_stock and item.item_code in stock_items and item.item_tax_amount:
|
if auto_accounting_for_stock and item.item_code in stock_items and item.item_tax_amount:
|
||||||
# Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt
|
# Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt
|
||||||
negative_expense_booked_in_pi = None
|
negative_expense_booked_in_pi = None
|
||||||
if item.purchase_receipt:
|
if item.purchase_receipt:
|
||||||
negative_expense_booked_in_pi = frappe.db.sql("""select name from `tabGL Entry`
|
negative_expense_booked_in_pi = frappe.db.sql("""select name from `tabGL Entry`
|
||||||
where voucher_type='Purchase Receipt' and voucher_no=%s and account=%s""",
|
where voucher_type='Purchase Receipt' and voucher_no=%s and account=%s""",
|
||||||
(item.purchase_receipt, expenses_included_in_valuation))
|
(item.purchase_receipt, expenses_included_in_valuation))
|
||||||
|
|
||||||
if not negative_expense_booked_in_pi:
|
if not negative_expense_booked_in_pi:
|
||||||
gl_entries.append(
|
gl_entries.append(
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": stock_received_but_not_billed,
|
"account": stock_received_but_not_billed,
|
||||||
"against": self.credit_to,
|
"against": self.credit_to,
|
||||||
"debit": flt(item.item_tax_amount),
|
"debit": flt(item.item_tax_amount, self.precision("item_tax_amount", item)),
|
||||||
"remarks": self.remarks or "Accounting Entry for Stock"
|
"remarks": self.remarks or "Accounting Entry for Stock"
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
negative_expense_to_be_booked += flt(item.item_tax_amount)
|
|
||||||
|
|
||||||
|
negative_expense_to_be_booked += flt(item.item_tax_amount, self.precision("item_tax_amount", item))
|
||||||
|
|
||||||
if negative_expense_to_be_booked and valuation_tax:
|
if negative_expense_to_be_booked and valuation_tax:
|
||||||
# credit valuation tax amount in "Expenses Included In Valuation"
|
# credit valuation tax amount in "Expenses Included In Valuation"
|
||||||
# this will balance out valuation amount included in cost of goods sold
|
# this will balance out valuation amount included in cost of goods sold
|
||||||
|
|
||||||
total_valuation_amount = sum(valuation_tax.values())
|
total_valuation_amount = sum(valuation_tax.values())
|
||||||
amount_including_divisional_loss = negative_expense_to_be_booked
|
amount_including_divisional_loss = negative_expense_to_be_booked
|
||||||
i = 1
|
i = 1
|
||||||
@ -364,7 +363,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
else:
|
else:
|
||||||
applicable_amount = negative_expense_to_be_booked * (amount / total_valuation_amount)
|
applicable_amount = negative_expense_to_be_booked * (amount / total_valuation_amount)
|
||||||
amount_including_divisional_loss -= applicable_amount
|
amount_including_divisional_loss -= applicable_amount
|
||||||
|
|
||||||
gl_entries.append(
|
gl_entries.append(
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": expenses_included_in_valuation,
|
"account": expenses_included_in_valuation,
|
||||||
@ -374,7 +373,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
"remarks": self.remarks or "Accounting Entry for Stock"
|
"remarks": self.remarks or "Accounting Entry for Stock"
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
# writeoff account includes petty difference in the invoice amount
|
# writeoff account includes petty difference in the invoice amount
|
||||||
|
|||||||
@ -209,7 +209,7 @@ class AccountsController(TransactionBase):
|
|||||||
|
|
||||||
def calculate_taxes(self):
|
def calculate_taxes(self):
|
||||||
# maintain actual tax rate based on idx
|
# maintain actual tax rate based on idx
|
||||||
actual_tax_dict = dict([[tax.idx, tax.rate] for tax in self.tax_doclist
|
actual_tax_dict = dict([[tax.idx, flt(tax.rate, self.precision("tax_amount", tax))] for tax in self.tax_doclist
|
||||||
if tax.charge_type == "Actual"])
|
if tax.charge_type == "Actual"])
|
||||||
|
|
||||||
for n, item in enumerate(self.item_doclist):
|
for n, item in enumerate(self.item_doclist):
|
||||||
|
|||||||
@ -647,7 +647,7 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
|
|||||||
// maintain actual tax rate based on idx
|
// maintain actual tax rate based on idx
|
||||||
$.each(this.frm.tax_doclist, function(i, tax) {
|
$.each(this.frm.tax_doclist, function(i, tax) {
|
||||||
if (tax.charge_type == "Actual") {
|
if (tax.charge_type == "Actual") {
|
||||||
actual_tax_dict[tax.idx] = flt(tax.rate);
|
actual_tax_dict[tax.idx] = flt(tax.rate, precision("tax_amount", tax));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user