mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-15 01:43:10 +00:00
Merge branch 'develop' into e-commerce-refactor-develop
This commit is contained in:
@@ -24,7 +24,7 @@ def search_by_term(search_term, warehouse, price_list):
|
||||
["name as item_code", "item_name", "description", "stock_uom", "image as item_image", "is_stock_item"],
|
||||
as_dict=1)
|
||||
|
||||
item_stock_qty = get_stock_availability(item_code, warehouse)
|
||||
item_stock_qty, is_stock_item = get_stock_availability(item_code, warehouse)
|
||||
price_list_rate, currency = frappe.db.get_value('Item Price', {
|
||||
'price_list': price_list,
|
||||
'item_code': item_code
|
||||
@@ -99,7 +99,6 @@ def get_items(start, page_length, price_list, item_group, pos_profile, search_te
|
||||
), {'warehouse': warehouse}, as_dict=1)
|
||||
|
||||
if items_data:
|
||||
items_data = filter_service_items(items_data)
|
||||
items = [d.item_code for d in items_data]
|
||||
item_prices_data = frappe.get_all("Item Price",
|
||||
fields = ["item_code", "price_list_rate", "currency"],
|
||||
@@ -112,7 +111,7 @@ def get_items(start, page_length, price_list, item_group, pos_profile, search_te
|
||||
for item in items_data:
|
||||
item_code = item.item_code
|
||||
item_price = item_prices.get(item_code) or {}
|
||||
item_stock_qty = get_stock_availability(item_code, warehouse)
|
||||
item_stock_qty, is_stock_item = get_stock_availability(item_code, warehouse)
|
||||
|
||||
row = {}
|
||||
row.update(item)
|
||||
@@ -144,14 +143,6 @@ def search_for_serial_or_batch_or_barcode_number(search_value):
|
||||
|
||||
return {}
|
||||
|
||||
def filter_service_items(items):
|
||||
for item in items:
|
||||
if not item['is_stock_item']:
|
||||
if not frappe.db.exists('Product Bundle', item['item_code']):
|
||||
items.remove(item)
|
||||
|
||||
return items
|
||||
|
||||
def get_conditions(search_term):
|
||||
condition = "("
|
||||
condition += """item.name like {search_term}
|
||||
|
||||
@@ -630,18 +630,24 @@ erpnext.PointOfSale.Controller = class {
|
||||
}
|
||||
|
||||
async check_stock_availability(item_row, qty_needed, warehouse) {
|
||||
const available_qty = (await this.get_available_stock(item_row.item_code, warehouse)).message;
|
||||
const resp = (await this.get_available_stock(item_row.item_code, warehouse)).message;
|
||||
const available_qty = resp[0];
|
||||
const is_stock_item = resp[1];
|
||||
|
||||
frappe.dom.unfreeze();
|
||||
const bold_item_code = item_row.item_code.bold();
|
||||
const bold_warehouse = warehouse.bold();
|
||||
const bold_available_qty = available_qty.toString().bold()
|
||||
if (!(available_qty > 0)) {
|
||||
frappe.model.clear_doc(item_row.doctype, item_row.name);
|
||||
frappe.throw({
|
||||
title: __("Not Available"),
|
||||
message: __('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])
|
||||
})
|
||||
if (is_stock_item) {
|
||||
frappe.model.clear_doc(item_row.doctype, item_row.name);
|
||||
frappe.throw({
|
||||
title: __("Not Available"),
|
||||
message: __('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])
|
||||
});
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else if (available_qty < qty_needed) {
|
||||
frappe.throw({
|
||||
message: __('Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2}.', [bold_item_code, bold_warehouse, bold_available_qty]),
|
||||
@@ -675,8 +681,8 @@ erpnext.PointOfSale.Controller = class {
|
||||
},
|
||||
callback(res) {
|
||||
if (!me.item_stock_map[item_code])
|
||||
me.item_stock_map[item_code] = {}
|
||||
me.item_stock_map[item_code][warehouse] = res.message;
|
||||
me.item_stock_map[item_code] = {};
|
||||
me.item_stock_map[item_code][warehouse] = res.message[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -79,14 +79,20 @@ erpnext.PointOfSale.ItemSelector = class {
|
||||
const me = this;
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const { item_image, serial_no, batch_no, barcode, actual_qty, stock_uom, price_list_rate } = item;
|
||||
const indicator_color = actual_qty > 10 ? "green" : actual_qty <= 0 ? "red" : "orange";
|
||||
const precision = flt(price_list_rate, 2) % 1 != 0 ? 2 : 0;
|
||||
|
||||
let indicator_color;
|
||||
let qty_to_display = actual_qty;
|
||||
|
||||
if (Math.round(qty_to_display) > 999) {
|
||||
qty_to_display = Math.round(qty_to_display)/1000;
|
||||
qty_to_display = qty_to_display.toFixed(1) + 'K';
|
||||
if (item.is_stock_item) {
|
||||
indicator_color = (actual_qty > 10 ? "green" : actual_qty <= 0 ? "red" : "orange");
|
||||
|
||||
if (Math.round(qty_to_display) > 999) {
|
||||
qty_to_display = Math.round(qty_to_display)/1000;
|
||||
qty_to_display = qty_to_display.toFixed(1) + 'K';
|
||||
}
|
||||
} else {
|
||||
indicator_color = '';
|
||||
qty_to_display = '';
|
||||
}
|
||||
|
||||
function get_item_image_html() {
|
||||
|
||||
Reference in New Issue
Block a user