fix: batch based item price not working (#43172)
This commit is contained in:
@@ -1512,6 +1512,31 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
}
|
||||
}
|
||||
|
||||
batch_no(frm, cdt, cdn) {
|
||||
let row = locals[cdt][cdn];
|
||||
if (row.use_serial_batch_fields && row.batch_no) {
|
||||
var params = this._get_args(row);
|
||||
params.batch_no = row.batch_no;
|
||||
params.uom = row.uom;
|
||||
|
||||
frappe.call({
|
||||
method: "erpnext.stock.get_item_details.get_batch_based_item_price",
|
||||
args: {
|
||||
params: params,
|
||||
item_code: row.item_code,
|
||||
},
|
||||
callback: function(r) {
|
||||
if (!r.exc && r.message) {
|
||||
row.price_list_rate = r.message;
|
||||
row.rate = r.message;
|
||||
refresh_field("rate", row.name, row.parentfield);
|
||||
refresh_field("price_list_rate", row.name, row.parentfield);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
toggle_item_grid_columns(company_currency) {
|
||||
const me = this;
|
||||
// toggle columns
|
||||
|
||||
@@ -10,7 +10,7 @@ from frappe.model import child_table_fields, default_fields
|
||||
from frappe.model.meta import get_field_precision
|
||||
from frappe.model.utils import get_fetch_values
|
||||
from frappe.query_builder.functions import IfNull, Sum
|
||||
from frappe.utils import add_days, add_months, cint, cstr, flt, getdate
|
||||
from frappe.utils import add_days, add_months, cint, cstr, flt, getdate, parse_json
|
||||
|
||||
from erpnext import get_company_currency
|
||||
from erpnext.accounts.doctype.pricing_rule.pricing_rule import (
|
||||
@@ -902,7 +902,7 @@ def insert_item_price(args):
|
||||
)
|
||||
|
||||
|
||||
def get_item_price(args, item_code, ignore_party=False) -> list[dict]:
|
||||
def get_item_price(args, item_code, ignore_party=False, force_batch_no=False) -> list[dict]:
|
||||
"""
|
||||
Get name, price_list_rate from Item Price based on conditions
|
||||
Check if the desired qty is within the increment of the packing list.
|
||||
@@ -919,7 +919,6 @@ def get_item_price(args, item_code, ignore_party=False) -> list[dict]:
|
||||
(ip.item_code == item_code)
|
||||
& (ip.price_list == args.get("price_list"))
|
||||
& (IfNull(ip.uom, "").isin(["", args.get("uom")]))
|
||||
& (IfNull(ip.batch_no, "").isin(["", args.get("batch_no")]))
|
||||
)
|
||||
.orderby(ip.valid_from, order=frappe.qb.desc)
|
||||
.orderby(IfNull(ip.batch_no, ""), order=frappe.qb.desc)
|
||||
@@ -927,6 +926,11 @@ def get_item_price(args, item_code, ignore_party=False) -> list[dict]:
|
||||
.limit(1)
|
||||
)
|
||||
|
||||
if force_batch_no:
|
||||
query = query.where(ip.batch_no == args.get("batch_no"))
|
||||
else:
|
||||
query = query.where(IfNull(ip.batch_no, "").isin(["", args.get("batch_no")]))
|
||||
|
||||
if not ignore_party:
|
||||
if args.get("customer"):
|
||||
query = query.where(ip.customer == args.get("customer"))
|
||||
@@ -944,6 +948,21 @@ def get_item_price(args, item_code, ignore_party=False) -> list[dict]:
|
||||
return query.run(as_dict=True)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_batch_based_item_price(params, item_code) -> float:
|
||||
if isinstance(params, str):
|
||||
params = parse_json(params)
|
||||
|
||||
item_price = get_item_price(params, item_code, force_batch_no=True)
|
||||
if not item_price:
|
||||
item_price = get_item_price(params, item_code, ignore_party=True, force_batch_no=True)
|
||||
|
||||
if item_price and item_price[0].uom == params.get("uom"):
|
||||
return item_price[0].price_list_rate
|
||||
|
||||
return 0.0
|
||||
|
||||
|
||||
def get_price_list_rate_for(args, item_code):
|
||||
"""
|
||||
:param customer: link to Customer DocType
|
||||
|
||||
Reference in New Issue
Block a user