Skip to content

Commit

Permalink
fix: E-commerce issue with Item Variants
Browse files Browse the repository at this point in the history
(cherry picked from commit aaa4d1e)
  • Loading branch information
rohitwaghchaure authored and mergify[bot] committed Mar 21, 2023
1 parent 560df63 commit 53c3fff
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 7 deletions.
24 changes: 23 additions & 1 deletion erpnext/e_commerce/variant_selector/utils.py
@@ -1,5 +1,5 @@
import frappe
from frappe.utils import cint
from frappe.utils import cint, flt

from erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings import (
get_shopping_cart_settings,
Expand Down Expand Up @@ -166,13 +166,35 @@ def get_next_attribute_and_values(item_code, selected_attributes):
else:
product_info = None

product_id = ""
website_warehouse = ""
if exact_match or filtered_items:
if exact_match and len(exact_match) == 1:
product_id = exact_match[0]
elif filtered_items_count == 1:
product_id = list(filtered_items)[0]

if product_id:
website_warehouse = frappe.get_cached_value(
"Website Item", {"item_code": product_id}, "website_warehouse"
)

available_qty = 0.0
if website_warehouse:
available_qty = flt(
frappe.db.get_value(
"Bin", {"item_code": product_id, "warehouse": website_warehouse}, "actual_qty"
)
)

return {
"next_attribute": next_attribute,
"valid_options_for_attributes": valid_options_for_attributes,
"filtered_items_count": filtered_items_count,
"filtered_items": filtered_items if filtered_items_count < 10 else [],
"exact_match": exact_match,
"product_info": product_info,
"available_qty": available_qty,
}


Expand Down
22 changes: 16 additions & 6 deletions erpnext/templates/generators/item/item_configure.js
Expand Up @@ -186,14 +186,14 @@ class ItemConfigure {
this.dialog.$status_area.empty();
}

get_html_for_item_found({ filtered_items_count, filtered_items, exact_match, product_info }) {
get_html_for_item_found({ filtered_items_count, filtered_items, exact_match, product_info, available_qty, settings }) {
const one_item = exact_match.length === 1
? exact_match[0]
: filtered_items_count === 1
? filtered_items[0]
: '';

const item_add_to_cart = one_item ? `
let item_add_to_cart = one_item ? `
<button data-item-code="${one_item}"
class="btn btn-primary btn-add-to-cart w-100"
data-action="btn_add_to_cart"
Expand All @@ -218,6 +218,9 @@ class ItemConfigure {
? '(' + product_info.price.formatted_price_sales_uom + ')'
: ''
}
${available_qty === 0 ? '<span class="text-danger">(' + __('Out of Stock') + ')</span>' : ''}
</div></div>
<a href data-action="btn_clear_values" data-item-code="${one_item}">
${__('Clear Values')}
Expand All @@ -233,6 +236,10 @@ class ItemConfigure {
</div>`;
/* eslint-disable indent */

if (!product_info?.allow_items_not_in_stock && available_qty === 0) {
item_add_to_cart = '';
}

return `
${item_found_status}
${item_add_to_cart}
Expand All @@ -257,12 +264,15 @@ class ItemConfigure {

btn_clear_values() {
this.dialog.fields_list.forEach(f => {
f.df.options = f.df.options.map(option => {
option.disabled = false;
return option;
});
if (f.df?.options) {
f.df.options = f.df.options.map(option => {
option.disabled = false;
return option;
});
}
});
this.dialog.clear();
this.dialog.$status_area.empty();
this.on_attribute_selection();
}

Expand Down

0 comments on commit 53c3fff

Please sign in to comment.