From ef1c73eeb69e6b3ee56af68f08fa8af1d7f209c1 Mon Sep 17 00:00:00 2001 From: Mac Avenue Date: Sat, 4 Jul 2026 13:29:45 +0300 Subject: [PATCH] fix:valuation rate issue --- .../inter_branch_stock_transfer.js | 36 +++++++++---------- .../inter_branch_stock_transfer.py | 19 ++++++++++ .../inter_branch_stock_transfer_item.json | 2 +- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.js b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.js index 14376a6..6ec1987 100644 --- a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.js +++ b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.js @@ -96,8 +96,8 @@ frappe.ui.form.on('Inter Branch Stock Transfer Item', { frappe.model.set_value(cdt, cdn, 't_warehouse', frm.doc.to_warehouse); } - _fetch_price_list_rate(frm, cdt, cdn, function () { - _fetch_valuation_rate(frm, cdt, cdn); + _fetch_valuation_rate(frm, cdt, cdn, function () { + _fetch_price_list_rate(frm, cdt, cdn); }); }, @@ -219,21 +219,26 @@ function _set_uom_query(frm, cdt, cdn) { }); } -function _fetch_valuation_rate(frm, cdt, cdn) { +function _fetch_valuation_rate(frm, cdt, cdn, callback) { let row = locals[cdt][cdn]; - if (!row.item_code) return; - let warehouse = row.s_warehouse || frm.doc.from_warehouse; - if (!warehouse) return; + let warehouse = row.item_code && (row.s_warehouse || frm.doc.from_warehouse); + if (!warehouse) { + if (callback) callback(); + return; + } frappe.call({ method: 'rmax_custom.rmax_custom.doctype.inter_branch_stock_transfer.inter_branch_stock_transfer.get_item_valuation_rate', args: { item_code: row.item_code, warehouse: warehouse }, callback: function (r) { - if (r.message !== undefined && !flt(locals[cdt][cdn].basic_rate)) { - frappe.model.set_value(cdt, cdn, 'basic_rate', r.message); + if (r.message !== undefined) { frappe.model.set_value(cdt, cdn, 'valuation_rate', r.message); - _recalculate_row_amount(cdt, cdn); + if (!flt(locals[cdt][cdn].basic_rate)) { + frappe.model.set_value(cdt, cdn, 'basic_rate', r.message); + _recalculate_row_amount(cdt, cdn); + } } + if (callback) callback(); } }); } @@ -285,16 +290,11 @@ function _fetch_price_list_rate(frm, cdt, cdn, on_not_found) { return; } frappe.call({ - method: 'frappe.client.get_value', - args: { - doctype: 'Item Price', - filters: { item_code: row.item_code, price_list: frm.doc.price_list }, - fieldname: 'price_list_rate', - }, + method: 'rmax_custom.rmax_custom.doctype.inter_branch_stock_transfer.inter_branch_stock_transfer.get_item_price_rate', + args: { item_code: row.item_code, price_list: frm.doc.price_list }, callback: function (r) { - if (r.message && r.message.price_list_rate) { - frappe.model.set_value(cdt, cdn, 'basic_rate', r.message.price_list_rate); - frappe.model.set_value(cdt, cdn, 'valuation_rate', r.message.price_list_rate); + if (flt(r.message)) { + frappe.model.set_value(cdt, cdn, 'basic_rate', r.message); _recalculate_row_amount(cdt, cdn); } else if (on_not_found) { on_not_found(); diff --git a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.py b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.py index 9ffd163..07928ab 100644 --- a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.py +++ b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer/inter_branch_stock_transfer.py @@ -292,6 +292,7 @@ def _create_delivery_note(self, target_branch: str | None = None): dn.posting_date = self.posting_date dn.posting_time = self.posting_time dn.set_warehouse = self.to_warehouse + dn.selling_price_list = self.price_list dn.custom_ibst = self.name dn.remarks = _("Created from Inter Branch Stock Transfer: {0}").format(self.name) @@ -449,3 +450,21 @@ def get_item_valuation_rate(item_code: str, warehouse: str) -> float: if not rate: rate = flt(frappe.db.get_value("Item", item_code, "valuation_rate")) return rate + + +@frappe.whitelist() +def get_item_price_rate(item_code: str, price_list: str) -> float: + """Return the Item Price rate for item_code under price_list. + + Runs with ignore_permissions since the caller already has access to + the parent IBST doc; avoids the generic frappe.client.get_value call + silently returning nothing for roles without direct Item Price read + access (Branch User / Stock User). + """ + return flt( + frappe.db.get_value( + "Item Price", + {"item_code": item_code, "price_list": price_list, "selling": 1}, + "price_list_rate", + ) + ) diff --git a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer_item/inter_branch_stock_transfer_item.json b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer_item/inter_branch_stock_transfer_item.json index 2f87c54..396daa2 100644 --- a/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer_item/inter_branch_stock_transfer_item.json +++ b/rmax_custom/rmax_custom/doctype/inter_branch_stock_transfer_item/inter_branch_stock_transfer_item.json @@ -127,7 +127,7 @@ "fieldname": "basic_rate", "fieldtype": "Currency", "in_list_view": 1, - "label": "Basic Rate (As per Valuation Method)", + "label": "Rate", "options": "Company:company:default_currency" }, {