Merge pull request #31910 from deepeshgarg007/cash_and_non_trade_discount_fix
fix: Cash and non trade discount calculation
This commit is contained in:
commit
9fd0c25c9f
@ -366,7 +366,7 @@ def update_outstanding_amt(
|
|||||||
if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]:
|
if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]:
|
||||||
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
|
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
|
||||||
|
|
||||||
# Didn't use db_set for optimisation purpose
|
# Didn't use db_set for optimization purpose
|
||||||
ref_doc.outstanding_amount = bal
|
ref_doc.outstanding_amount = bal
|
||||||
frappe.db.set_value(against_voucher_type, against_voucher, "outstanding_amount", bal)
|
frappe.db.set_value(against_voucher_type, against_voucher, "outstanding_amount", bal)
|
||||||
|
|
||||||
|
|||||||
@ -479,9 +479,13 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
|
|||||||
|
|
||||||
is_cash_or_non_trade_discount() {
|
is_cash_or_non_trade_discount() {
|
||||||
this.frm.set_df_property("additional_discount_account", "hidden", 1 - this.frm.doc.is_cash_or_non_trade_discount);
|
this.frm.set_df_property("additional_discount_account", "hidden", 1 - this.frm.doc.is_cash_or_non_trade_discount);
|
||||||
|
this.frm.set_df_property("additional_discount_account", "reqd", this.frm.doc.is_cash_or_non_trade_discount);
|
||||||
|
|
||||||
if (!this.frm.doc.is_cash_or_non_trade_discount) {
|
if (!this.frm.doc.is_cash_or_non_trade_discount) {
|
||||||
this.frm.set_value("additional_discount_account", "");
|
this.frm.set_value("additional_discount_account", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.calculate_taxes_and_totals();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1033,22 +1033,6 @@ class SalesInvoice(SellingController):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.apply_discount_on == "Grand Total" and self.get("is_cash_or_discount_account"):
|
|
||||||
gl_entries.append(
|
|
||||||
self.get_gl_dict(
|
|
||||||
{
|
|
||||||
"account": self.additional_discount_account,
|
|
||||||
"against": self.debit_to,
|
|
||||||
"debit": self.base_discount_amount,
|
|
||||||
"debit_in_account_currency": self.discount_amount,
|
|
||||||
"cost_center": self.cost_center,
|
|
||||||
"project": self.project,
|
|
||||||
},
|
|
||||||
self.currency,
|
|
||||||
item=self,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def make_tax_gl_entries(self, gl_entries):
|
def make_tax_gl_entries(self, gl_entries):
|
||||||
enable_discount_accounting = cint(
|
enable_discount_accounting = cint(
|
||||||
frappe.db.get_single_value("Selling Settings", "enable_discount_accounting")
|
frappe.db.get_single_value("Selling Settings", "enable_discount_accounting")
|
||||||
|
|||||||
@ -1109,17 +1109,17 @@ class AccountsController(TransactionBase):
|
|||||||
frappe.db.get_single_value("Selling Settings", "enable_discount_accounting")
|
frappe.db.get_single_value("Selling Settings", "enable_discount_accounting")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if self.doctype == "Purchase Invoice":
|
||||||
|
dr_or_cr = "credit"
|
||||||
|
rev_dr_cr = "debit"
|
||||||
|
supplier_or_customer = self.supplier
|
||||||
|
|
||||||
|
else:
|
||||||
|
dr_or_cr = "debit"
|
||||||
|
rev_dr_cr = "credit"
|
||||||
|
supplier_or_customer = self.customer
|
||||||
|
|
||||||
if enable_discount_accounting:
|
if enable_discount_accounting:
|
||||||
if self.doctype == "Purchase Invoice":
|
|
||||||
dr_or_cr = "credit"
|
|
||||||
rev_dr_cr = "debit"
|
|
||||||
supplier_or_customer = self.supplier
|
|
||||||
|
|
||||||
else:
|
|
||||||
dr_or_cr = "debit"
|
|
||||||
rev_dr_cr = "credit"
|
|
||||||
supplier_or_customer = self.customer
|
|
||||||
|
|
||||||
for item in self.get("items"):
|
for item in self.get("items"):
|
||||||
if item.get("discount_amount") and item.get("discount_account"):
|
if item.get("discount_amount") and item.get("discount_account"):
|
||||||
discount_amount = item.discount_amount * item.qty
|
discount_amount = item.discount_amount * item.qty
|
||||||
@ -1173,18 +1173,22 @@ class AccountsController(TransactionBase):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.get("discount_amount") and self.get("additional_discount_account"):
|
if (
|
||||||
gl_entries.append(
|
(enable_discount_accounting or self.get("is_cash_or_non_trade_discount"))
|
||||||
self.get_gl_dict(
|
and self.get("additional_discount_account")
|
||||||
{
|
and self.get("discount_amount")
|
||||||
"account": self.additional_discount_account,
|
):
|
||||||
"against": supplier_or_customer,
|
gl_entries.append(
|
||||||
dr_or_cr: self.discount_amount,
|
self.get_gl_dict(
|
||||||
"cost_center": self.cost_center,
|
{
|
||||||
},
|
"account": self.additional_discount_account,
|
||||||
item=self,
|
"against": supplier_or_customer,
|
||||||
)
|
dr_or_cr: self.discount_amount,
|
||||||
|
"cost_center": self.cost_center,
|
||||||
|
},
|
||||||
|
item=self,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield):
|
def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield):
|
||||||
from erpnext.controllers.status_updater import get_allowance_for
|
from erpnext.controllers.status_updater import get_allowance_for
|
||||||
|
|||||||
@ -37,6 +37,11 @@ class calculate_taxes_and_totals(object):
|
|||||||
self.set_discount_amount()
|
self.set_discount_amount()
|
||||||
self.apply_discount_amount()
|
self.apply_discount_amount()
|
||||||
|
|
||||||
|
# Update grand total as per cash and non trade discount
|
||||||
|
if self.doc.apply_discount_on == "Grand Total" and self.doc.get("is_cash_or_non_trade_discount"):
|
||||||
|
self.doc.grand_total -= self.doc.discount_amount
|
||||||
|
self.doc.base_grand_total -= self.doc.base_discount_amount
|
||||||
|
|
||||||
self.calculate_shipping_charges()
|
self.calculate_shipping_charges()
|
||||||
|
|
||||||
if self.doc.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
if self.doc.doctype in ["Sales Invoice", "Purchase Invoice"]:
|
||||||
@ -500,9 +505,6 @@ class calculate_taxes_and_totals(object):
|
|||||||
else:
|
else:
|
||||||
self.doc.grand_total = flt(self.doc.net_total)
|
self.doc.grand_total = flt(self.doc.net_total)
|
||||||
|
|
||||||
if self.doc.apply_discount_on == "Grand Total" and self.doc.get("is_cash_or_non_trade_discount"):
|
|
||||||
self.doc.grand_total -= self.doc.discount_amount
|
|
||||||
|
|
||||||
if self.doc.get("taxes"):
|
if self.doc.get("taxes"):
|
||||||
self.doc.total_taxes_and_charges = flt(
|
self.doc.total_taxes_and_charges = flt(
|
||||||
self.doc.grand_total - self.doc.net_total - flt(self.doc.rounding_adjustment),
|
self.doc.grand_total - self.doc.net_total - flt(self.doc.rounding_adjustment),
|
||||||
@ -597,16 +599,16 @@ class calculate_taxes_and_totals(object):
|
|||||||
if not self.doc.apply_discount_on:
|
if not self.doc.apply_discount_on:
|
||||||
frappe.throw(_("Please select Apply Discount On"))
|
frappe.throw(_("Please select Apply Discount On"))
|
||||||
|
|
||||||
|
self.doc.base_discount_amount = flt(
|
||||||
|
self.doc.discount_amount * self.doc.conversion_rate, self.doc.precision("base_discount_amount")
|
||||||
|
)
|
||||||
|
|
||||||
if self.doc.apply_discount_on == "Grand Total" and self.doc.get(
|
if self.doc.apply_discount_on == "Grand Total" and self.doc.get(
|
||||||
"is_cash_or_non_trade_discount"
|
"is_cash_or_non_trade_discount"
|
||||||
):
|
):
|
||||||
self.discount_amount_applied = True
|
self.discount_amount_applied = True
|
||||||
return
|
return
|
||||||
|
|
||||||
self.doc.base_discount_amount = flt(
|
|
||||||
self.doc.discount_amount * self.doc.conversion_rate, self.doc.precision("base_discount_amount")
|
|
||||||
)
|
|
||||||
|
|
||||||
total_for_discount_amount = self.get_total_for_discount_amount()
|
total_for_discount_amount = self.get_total_for_discount_amount()
|
||||||
taxes = self.doc.get("taxes")
|
taxes = self.doc.get("taxes")
|
||||||
net_total = 0
|
net_total = 0
|
||||||
|
|||||||
@ -39,6 +39,12 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
this._calculate_taxes_and_totals();
|
this._calculate_taxes_and_totals();
|
||||||
this.calculate_discount_amount();
|
this.calculate_discount_amount();
|
||||||
|
|
||||||
|
// # Update grand total as per cash and non trade discount
|
||||||
|
if (this.frm.doc.apply_discount_on == "Grand Total" && this.frm.doc.is_cash_or_non_trade_discount) {
|
||||||
|
this.frm.doc.grand_total -= this.frm.doc.discount_amount;
|
||||||
|
this.frm.doc.base_grand_total -= this.frm.doc.base_discount_amount;
|
||||||
|
}
|
||||||
|
|
||||||
await this.calculate_shipping_charges();
|
await this.calculate_shipping_charges();
|
||||||
|
|
||||||
// Advance calculation applicable to Sales /Purchase Invoice
|
// Advance calculation applicable to Sales /Purchase Invoice
|
||||||
@ -633,6 +639,10 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments {
|
|||||||
this.frm.doc.base_discount_amount = flt(this.frm.doc.discount_amount * this.frm.doc.conversion_rate,
|
this.frm.doc.base_discount_amount = flt(this.frm.doc.discount_amount * this.frm.doc.conversion_rate,
|
||||||
precision("base_discount_amount"));
|
precision("base_discount_amount"));
|
||||||
|
|
||||||
|
if (this.frm.doc.apply_discount_on == "Grand Total" && this.frm.doc.is_cash_or_non_trade_discount) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var total_for_discount_amount = this.get_total_for_discount_amount();
|
var total_for_discount_amount = this.get_total_for_discount_amount();
|
||||||
var net_total = 0;
|
var net_total = 0;
|
||||||
// calculate item amount after Discount Amount
|
// calculate item amount after Discount Amount
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user