fix: Allow variant attributes to be optional
This commit is contained in:
parent
8ca3df7aac
commit
cb03bb1c00
@ -124,16 +124,8 @@ def find_variant(template, args, variant_item_code=None):
|
||||
|
||||
conditions = " or ".join(conditions)
|
||||
|
||||
# use approximate match and shortlist possible variant matches
|
||||
# it is approximate because we are matching using OR condition
|
||||
# and it need not be exact match at this stage
|
||||
# this uses a simpler query instead of using multiple exists conditions
|
||||
possible_variants = frappe.db.sql_list("""select name from `tabItem` item
|
||||
where variant_of=%s and exists (
|
||||
select name from `tabItem Variant Attribute` iv_attribute
|
||||
where iv_attribute.parent=item.name
|
||||
and ({conditions}) and parent != %s
|
||||
)""".format(conditions=conditions), (template, cstr(variant_item_code)))
|
||||
from erpnext.portal.product_configurator.utils import get_item_codes_by_attributes
|
||||
possible_variants = [i for i in get_item_codes_by_attributes(args, template) if i != variant_item_code]
|
||||
|
||||
for variant in possible_variants:
|
||||
variant = frappe.get_doc("Item", variant)
|
||||
|
@ -102,6 +102,9 @@ def get_item_codes_by_attributes(attribute_filters, template_item_code=None):
|
||||
for attribute, values in attribute_filters.items():
|
||||
attribute_values = values
|
||||
|
||||
if isinstance(attribute_values, frappe.string_types):
|
||||
attribute_values = [attribute_values]
|
||||
|
||||
if not attribute_values: continue
|
||||
|
||||
wheres = []
|
||||
|
@ -390,15 +390,6 @@ frappe.ui.form.ItemQuickEntryForm = frappe.ui.form.QuickEntryForm.extend({
|
||||
}
|
||||
})
|
||||
|
||||
if (mandatory.length) {
|
||||
frappe.msgprint({
|
||||
title: __('Missing Values Required'),
|
||||
message: __('Following fields have missing values:') + '<br><br><ul><li>' + mandatory.join('<li>') + '</ul>',
|
||||
indicator: 'orange'
|
||||
});
|
||||
return {};
|
||||
}
|
||||
|
||||
if (this.is_manufacturer) {
|
||||
$.each(this.manufacturer_fields, function(index, field) {
|
||||
attribute[field.fieldname] = me.dialog.fields_dict[field.fieldname].input.value;
|
||||
|
@ -585,7 +585,7 @@ $.extend(erpnext.item, {
|
||||
"label": row.attribute,
|
||||
"fieldname": row.attribute,
|
||||
"fieldtype": fieldtype,
|
||||
"reqd": 1,
|
||||
"reqd": 0,
|
||||
"description": desc
|
||||
})
|
||||
}
|
||||
@ -600,6 +600,7 @@ $.extend(erpnext.item, {
|
||||
if(!args) return;
|
||||
frappe.call({
|
||||
method:"erpnext.controllers.item_variant.get_variant",
|
||||
btn: d.get_primary_btn(),
|
||||
args: {
|
||||
"template": frm.doc.name,
|
||||
"args": d.get_values()
|
||||
|
@ -800,10 +800,12 @@ class Item(WebsiteGenerator):
|
||||
|
||||
def validate_variant_attributes(self):
|
||||
if self.is_new() and self.variant_of and self.variant_based_on == 'Item Attribute':
|
||||
# remove attributes with no attribute_value set
|
||||
self.attributes = [d for d in self.attributes if cstr(d.attribute_value).strip()]
|
||||
|
||||
args = {}
|
||||
for d in self.attributes:
|
||||
if cstr(d.attribute_value).strip() == '':
|
||||
frappe.throw(_("Please specify Attribute Value for attribute {0}").format(d.attribute))
|
||||
for i, d in enumerate(self.attributes):
|
||||
d.idx = i + 1
|
||||
args[d.attribute] = d.attribute_value
|
||||
|
||||
variant = get_variant(self.variant_of, args, self.name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user