diff --git a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.js b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.js
index 131a5e439dc..6302d260e0a 100644
--- a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.js
+++ b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.js
@@ -25,9 +25,9 @@ frappe.ui.form.on("E Commerce Settings", {
}
frappe.model.with_doctype("Item", () => {
- const item_meta = frappe.get_meta('Item');
+ const web_item_meta = frappe.get_meta('Website Item');
- const valid_fields = item_meta.fields.filter(
+ const valid_fields = web_item_meta.fields.filter(
df => ["Link", "Table MultiSelect"].includes(df.fieldtype) && !df.hidden
).map(df => ({ label: df.label, value: df.fieldname }));
diff --git a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
index 67b4a3d7f82..d5fb9697f89 100644
--- a/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
+++ b/erpnext/e_commerce/doctype/e_commerce_settings/e_commerce_settings.json
@@ -91,7 +91,7 @@
"depends_on": "enable_field_filters",
"fieldname": "filter_fields",
"fieldtype": "Table",
- "label": "Item Fields",
+ "label": "Website Item Fields",
"options": "Website Filter Field"
},
{
@@ -370,7 +370,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2021-08-31 12:23:06.187619",
+ "modified": "2021-09-02 14:02:44.785824",
"modified_by": "Administrator",
"module": "E-commerce",
"name": "E Commerce Settings",
diff --git a/erpnext/e_commerce/doctype/website_item/website_item.json b/erpnext/e_commerce/doctype/website_item/website_item.json
index c33cb51ea3c..245042addb8 100644
--- a/erpnext/e_commerce/doctype/website_item/website_item.json
+++ b/erpnext/e_commerce/doctype/website_item/website_item.json
@@ -29,11 +29,14 @@
"column_break_13",
"slideshow",
"thumbnail",
+ "stock_information_section",
+ "website_warehouse",
+ "column_break_24",
+ "on_backorder",
"section_break_17",
"short_description",
"web_long_description",
"column_break_27",
- "website_warehouse",
"website_specifications",
"copy_from_item_group",
"display_additional_information_section",
@@ -326,13 +329,29 @@
"fieldtype": "Table",
"label": "Recommended/Similar Items",
"options": "Recommended Items"
+ },
+ {
+ "fieldname": "stock_information_section",
+ "fieldtype": "Section Break",
+ "label": "Stock Information"
+ },
+ {
+ "fieldname": "column_break_24",
+ "fieldtype": "Column Break"
+ },
+ {
+ "default": "0",
+ "description": "Indicate that Item is available on backorder and not usually pre-stocked",
+ "fieldname": "on_backorder",
+ "fieldtype": "Check",
+ "label": "On Backorder"
}
],
"has_web_view": 1,
"image_field": "image",
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2021-07-12 21:00:04.065803",
+ "modified": "2021-09-02 13:08:41.942726",
"modified_by": "Administrator",
"module": "E-commerce",
"name": "Website Item",
diff --git a/erpnext/e_commerce/product_data_engine/query.py b/erpnext/e_commerce/product_data_engine/query.py
index 0ac90906e5d..fefb5b33bfa 100644
--- a/erpnext/e_commerce/product_data_engine/query.py
+++ b/erpnext/e_commerce/product_data_engine/query.py
@@ -26,9 +26,11 @@ class ProductQuery:
self.or_filters = []
self.filters = [["published", "=", 1]]
- self.fields = ['web_item_name', 'name', 'item_name', 'item_code', 'website_image',
- 'variant_of', 'has_variants', 'item_group', 'image', 'web_long_description',
- 'short_description', 'route', 'website_warehouse', 'ranking']
+ self.fields = [
+ "web_item_name", "name", "item_name", "item_code", "website_image",
+ "variant_of", "has_variants", "item_group", "image", "web_long_description",
+ "short_description", "route", "website_warehouse", "ranking", "on_backorder"
+ ]
def query(self, attributes=None, fields=None, search_term=None, start=0, item_group=None):
"""
@@ -239,6 +241,9 @@ class ProductQuery:
warehouse = item.get("website_warehouse")
is_stock_item = frappe.get_cached_value("Item", item.item_code, "is_stock_item")
+ if item.get("on_backorder"):
+ return
+
if not is_stock_item:
if warehouse:
# product bundle case
diff --git a/erpnext/e_commerce/product_ui/grid.js b/erpnext/e_commerce/product_ui/grid.js
index 51a13b0e0bb..9eb1d45d5f5 100644
--- a/erpnext/e_commerce/product_ui/grid.js
+++ b/erpnext/e_commerce/product_ui/grid.js
@@ -142,9 +142,22 @@ erpnext.ProductGrid = class {
}
get_stock_availability(item, settings) {
- if (settings.show_stock_availability && !item.has_variants && !item.in_stock) {
- return `${ __("Out of stock") }`;
+ if (settings.show_stock_availability && !item.has_variants) {
+ if (item.on_backorder) {
+ return `
+
+ ${ __("Available on backorder") }
+
+ `;
+ } else if (!item.in_stock) {
+ return `
+
+ ${ __("Out of stock") }
+
+ `;
+ }
}
+
return ``;
}
@@ -168,7 +181,7 @@ erpnext.ProductGrid = class {
- ${ __('Add to Cart') }
+ ${ settings.enable_checkout ? __('Add to Cart') : __('Add to Quote') }
@@ -177,7 +190,7 @@ erpnext.ProductGrid = class {
w-100 mt-4 go-to-cart-grid
${ item.in_cart ? '' : 'hidden' }"
data-item-code="${ item.item_code }">
- ${ __('Go to Cart') }
+ ${ settings.enable_checkout ? __('Go to Cart') : __('Go to Quote') }
`;
diff --git a/erpnext/e_commerce/product_ui/list.js b/erpnext/e_commerce/product_ui/list.js
index 7056a1af8c3..691cd4d9de1 100644
--- a/erpnext/e_commerce/product_ui/list.js
+++ b/erpnext/e_commerce/product_ui/list.js
@@ -125,11 +125,20 @@ erpnext.ProductList = class {
}
get_stock_availability(item, settings) {
- if (settings.show_stock_availability && !item.has_variants && !item.in_stock) {
- return `
-
- ${ __("Out of stock") }
- `;
+ if (settings.show_stock_availability && !item.has_variants) {
+ if (item.on_backorder) {
+ return `
+
+
+ ${ __("Available on backorder") }
+
+ `;
+ } else if (!item.in_stock) {
+ return `
+
+ ${ __("Out of stock") }
+ `;
+ }
}
return ``;
}
@@ -169,7 +178,7 @@ erpnext.ProductList = class {
- ${ __('Add to Cart') }
+ ${ settings.enable_checkout ? __('Add to Cart') : __('Add to Quote') }