Merge pull request #24754 from rohitwaghchaure/fixed-repost-item-valuation-patch
fix: reposting patch
diff --git a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
index 342f21b..03c3eb0 100644
--- a/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
+++ b/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py
@@ -22,9 +22,10 @@
'allow_account_creation_against_child_company'])
if parent_company and (not allow_account_creation_against_child_company):
- frappe.throw(_("""{0} is a child company. Please import accounts against parent company
- or enable {1} in company master""").format(frappe.bold(company),
- frappe.bold('Allow Account Creation Against Child Company')), title='Wrong Company')
+ msg = _("{} is a child company. ").format(frappe.bold(company))
+ msg += _("Please import accounts against parent company or enable {} in company master.").format(
+ frappe.bold('Allow Account Creation Against Child Company'))
+ frappe.throw(msg, title=_('Wrong Company'))
if frappe.db.get_all('GL Entry', {"company": company}, "name", limit=1):
return False
@@ -74,7 +75,9 @@
if as_dict:
data.append({frappe.scrub(header): row[index] for index, header in enumerate(headers)})
else:
- if not row[1]: row[1] = row[0]
+ if not row[1]:
+ row[1] = row[0]
+ row[3] = row[2]
data.append(row)
# convert csv data
@@ -96,7 +99,9 @@
if as_dict:
data.append({frappe.scrub(header): row[index] for index, header in enumerate(headers)})
else:
- if not row[1]: row[1] = row[0]
+ if not row[1]:
+ row[1] = row[0]
+ row[3] = row[2]
data.append(row)
return data
@@ -147,7 +152,13 @@
from frappe import _
for row in data:
- account_name, parent_account = row[0:2]
+ account_name, parent_account, account_number, parent_account_number = row[0:4]
+ if account_number:
+ account_name = "{} - {}".format(account_number, account_name)
+ if parent_account_number:
+ parent_account_number = cstr(parent_account_number).strip()
+ parent_account = "{} - {}".format(parent_account_number, parent_account)
+
if parent_account == account_name == child:
return [parent_account]
elif account_name == child:
@@ -159,20 +170,23 @@
charts_map, paths = {}, []
- line_no = 3
+ line_no = 2
error_messages = []
for i in data:
- account_name, dummy, account_number, is_group, account_type, root_type = i
+ account_name, parent_account, account_number, parent_account_number, is_group, account_type, root_type = i
if not account_name:
error_messages.append("Row {0}: Please enter Account Name".format(line_no))
+ if account_number:
+ account_number = cstr(account_number).strip()
+ account_name = "{} - {}".format(account_number, account_name)
+
charts_map[account_name] = {}
if cint(is_group) == 1: charts_map[account_name]["is_group"] = is_group
if account_type: charts_map[account_name]["account_type"] = account_type
if root_type: charts_map[account_name]["root_type"] = root_type
- if account_number: charts_map[account_name]["account_number"] = account_number
path = return_parent(data, account_name)[::-1]
paths.append(path) # List of path is created
line_no += 1
@@ -221,7 +235,7 @@
def get_template(template_type):
- fields = ["Account Name", "Parent Account", "Account Number", "Is Group", "Account Type", "Root Type"]
+ fields = ["Account Name", "Parent Account", "Account Number", "Parent Account Number", "Is Group", "Account Type", "Root Type"]
writer = UnicodeWriter()
writer.writerow(fields)
@@ -241,23 +255,23 @@
def get_sample_template(writer):
template = [
- ["Application Of Funds(Assets)", "", "", 1, "", "Asset"],
- ["Sources Of Funds(Liabilities)", "", "", 1, "", "Liability"],
- ["Equity", "", "", 1, "", "Equity"],
- ["Expenses", "", "", 1, "", "Expense"],
- ["Income", "", "", 1, "", "Income"],
- ["Bank Accounts", "Application Of Funds(Assets)", "", 1, "Bank", "Asset"],
- ["Cash In Hand", "Application Of Funds(Assets)", "", 1, "Cash", "Asset"],
- ["Stock Assets", "Application Of Funds(Assets)", "", 1, "Stock", "Asset"],
- ["Cost Of Goods Sold", "Expenses", "", 0, "Cost of Goods Sold", "Expense"],
- ["Asset Depreciation", "Expenses", "", 0, "Depreciation", "Expense"],
- ["Fixed Assets", "Application Of Funds(Assets)", "", 0, "Fixed Asset", "Asset"],
- ["Accounts Payable", "Sources Of Funds(Liabilities)", "", 0, "Payable", "Liability"],
- ["Accounts Receivable", "Application Of Funds(Assets)", "", 1, "Receivable", "Asset"],
- ["Stock Expenses", "Expenses", "", 0, "Stock Adjustment", "Expense"],
- ["Sample Bank", "Bank Accounts", "", 0, "Bank", "Asset"],
- ["Cash", "Cash In Hand", "", 0, "Cash", "Asset"],
- ["Stores", "Stock Assets", "", 0, "Stock", "Asset"],
+ ["Application Of Funds(Assets)", "", "", "", 1, "", "Asset"],
+ ["Sources Of Funds(Liabilities)", "", "", "", 1, "", "Liability"],
+ ["Equity", "", "", "", 1, "", "Equity"],
+ ["Expenses", "", "", "", 1, "", "Expense"],
+ ["Income", "", "", "", 1, "", "Income"],
+ ["Bank Accounts", "Application Of Funds(Assets)", "", "", 1, "Bank", "Asset"],
+ ["Cash In Hand", "Application Of Funds(Assets)", "", "", 1, "Cash", "Asset"],
+ ["Stock Assets", "Application Of Funds(Assets)", "", "", 1, "Stock", "Asset"],
+ ["Cost Of Goods Sold", "Expenses", "", "", 0, "Cost of Goods Sold", "Expense"],
+ ["Asset Depreciation", "Expenses", "", "", 0, "Depreciation", "Expense"],
+ ["Fixed Assets", "Application Of Funds(Assets)", "", "", 0, "Fixed Asset", "Asset"],
+ ["Accounts Payable", "Sources Of Funds(Liabilities)", "", "", 0, "Payable", "Liability"],
+ ["Accounts Receivable", "Application Of Funds(Assets)", "", "", 1, "Receivable", "Asset"],
+ ["Stock Expenses", "Expenses", "", "", 0, "Stock Adjustment", "Expense"],
+ ["Sample Bank", "Bank Accounts", "", "", 0, "Bank", "Asset"],
+ ["Cash", "Cash In Hand", "", "", 0, "Cash", "Asset"],
+ ["Stores", "Stock Assets", "", "", 0, "Stock", "Asset"],
]
for row in template:
diff --git a/erpnext/selling/page/point_of_sale/pos_controller.js b/erpnext/selling/page/point_of_sale/pos_controller.js
index 338a3cc..74b4bb0 100644
--- a/erpnext/selling/page/point_of_sale/pos_controller.js
+++ b/erpnext/selling/page/point_of_sale/pos_controller.js
@@ -498,10 +498,11 @@
async on_cart_update(args) {
frappe.dom.freeze();
+ let item_row = undefined;
try {
let { field, value, item } = args;
const { item_code, batch_no, serial_no, uom } = item;
- let item_row = this.get_item_from_frm(item_code, batch_no, uom);
+ item_row = this.get_item_from_frm(item_code, batch_no, uom);
const item_selected_from_selector = field === 'qty' && value === "+1"
@@ -553,10 +554,12 @@
this.check_serial_batch_selection_needed(item_row) && this.edit_item_details_of(item_row);
this.update_cart_html(item_row);
}
+
} catch (error) {
console.log(error);
} finally {
frappe.dom.unfreeze();
+ return item_row;
}
}
diff --git a/erpnext/selling/page/point_of_sale/pos_item_cart.js b/erpnext/selling/page/point_of_sale/pos_item_cart.js
index 044e803..9ab9eef 100644
--- a/erpnext/selling/page/point_of_sale/pos_item_cart.js
+++ b/erpnext/selling/page/point_of_sale/pos_item_cart.js
@@ -472,7 +472,8 @@
if (!frm) frm = this.events.get_frm();
this.render_net_total(frm.doc.net_total);
- this.render_grand_total(frm.doc.grand_total);
+ const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? frm.doc.grand_total : frm.doc.rounded_total;
+ this.render_grand_total(grand_total);
const taxes = frm.doc.taxes.map(t => {
return {
diff --git a/erpnext/selling/page/point_of_sale/pos_item_selector.js b/erpnext/selling/page/point_of_sale/pos_item_selector.js
index 7c116e9..e0d5b73 100644
--- a/erpnext/selling/page/point_of_sale/pos_item_selector.js
+++ b/erpnext/selling/page/point_of_sale/pos_item_selector.js
@@ -152,6 +152,10 @@
this.item_group_field.toggle_label(false);
}
+ set_search_value(value) {
+ $(this.search_field.$input[0]).val(value).trigger("input");
+ }
+
bind_events() {
const me = this;
window.onScan = onScan;
@@ -159,7 +163,7 @@
onScan: (sScancode) => {
if (this.search_field && this.$component.is(':visible')) {
this.search_field.set_focus();
- $(this.search_field.$input[0]).val(sScancode).trigger("input");
+ this.set_search_value(sScancode);
this.barcode_scanned = true;
}
}
@@ -178,6 +182,7 @@
uom = uom === "undefined" ? undefined : uom;
me.events.item_selected({ field: 'qty', value: "+1", item: { item_code, batch_no, serial_no, uom }});
+ me.set_search_value('');
});
this.search_field.$input.on('input', (e) => {
diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js
index bcbac3b..22a279d 100644
--- a/erpnext/selling/page/point_of_sale/pos_payment.js
+++ b/erpnext/selling/page/point_of_sale/pos_payment.js
@@ -223,7 +223,8 @@
if (success) {
title = __("Payment Received");
- if (amount >= doc.grand_total) {
+ const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+ if (amount >= grand_total) {
frappe.dom.unfreeze();
message = __("Payment of {0} received successfully.", [format_currency(amount, doc.currency, 0)]);
this.events.submit_invoice();
@@ -243,7 +244,8 @@
auto_set_remaining_amount() {
const doc = this.events.get_frm().doc;
- const remaining_amount = doc.grand_total - doc.paid_amount;
+ const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+ const remaining_amount = grand_total - doc.paid_amount;
const current_value = this.selected_mode ? this.selected_mode.get_value() : undefined;
if (!current_value && remaining_amount > 0 && this.selected_mode) {
this.selected_mode.set_value(remaining_amount);
@@ -389,7 +391,7 @@
}
attach_cash_shortcuts(doc) {
- const grand_total = doc.grand_total;
+ const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
const currency = doc.currency;
const shortcuts = this.get_cash_shortcuts(flt(grand_total));
@@ -499,7 +501,8 @@
update_totals_section(doc) {
if (!doc) doc = this.events.get_frm().doc;
const paid_amount = doc.paid_amount;
- const remaining = doc.grand_total - doc.paid_amount;
+ const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;
+ const remaining = grand_total - doc.paid_amount;
const change = doc.change_amount || remaining <= 0 ? -1 * remaining : undefined;
const currency = doc.currency;
const label = change ? __('Change') : __('To Be Paid');
@@ -507,7 +510,7 @@
this.$totals.html(
`<div class="col">
<div class="total-label">Grand Total</div>
- <div class="value">${format_currency(doc.grand_total, currency)}</div>
+ <div class="value">${format_currency(grand_total, currency)}</div>
</div>
<div class="seperator-y"></div>
<div class="col">