From a07c43fd6816ea42026bc09b815034c32b3a3fd9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 21 Mar 2017 17:48:34 +0100 Subject: [PATCH] [feature] ability to have variants based on manufacturer --- erpnext/controllers/item_variant.py | 59 ++++++++++--- .../img/stock/select-mfg-for-variant.png | Bin 0 -> 56116 bytes .../assets/img/stock/set-variant-by-mfg.png | Bin 0 -> 19549 bytes .../manual/en/stock/item/item-variants.md | 33 ++++++- erpnext/public/css/erpnext.css | 1 - .../doctype/sales_order/sales_order.js | 4 +- erpnext/stock/doctype/item/item.js | 82 ++++++++++++++++-- erpnext/stock/doctype/item/item.json | 39 ++++++++- erpnext/stock/doctype/item/item.py | 6 +- erpnext/stock/doctype/item/test_item.py | 66 ++++++++++---- erpnext/support/doctype/issue/issue.py | 2 +- 11 files changed, 244 insertions(+), 48 deletions(-) create mode 100644 erpnext/docs/assets/img/stock/select-mfg-for-variant.png create mode 100644 erpnext/docs/assets/img/stock/set-variant-by-mfg.png diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py index f8c9c0a841..53421b71bc 100644 --- a/erpnext/controllers/item_variant.py +++ b/erpnext/controllers/item_variant.py @@ -12,19 +12,42 @@ class InvalidItemAttributeValueError(frappe.ValidationError): pass class ItemTemplateCannotHaveStock(frappe.ValidationError): pass @frappe.whitelist() -def get_variant(template, args, variant=None): - """Validates Attributes and their Values, then looks for an exactly matching Item Variant +def get_variant(template, args=None, variant=None, manufacturer=None, + manufacturer_part_no=None): + """Validates Attributes and their Values, then looks for an exactly + matching Item Variant :param item: Template Item :param args: A dictionary with "Attribute" as key and "Attribute Value" as value """ - if isinstance(args, basestring): - args = json.loads(args) + item_template = frappe.get_doc('Item', template) - if not args: - frappe.throw(_("Please specify at least one attribute in the Attributes table")) + if item_template.variant_based_on=='Manufacturer' and manufacturer: + return make_variant_based_on_manufacturer(item_template, manufacturer, + manufacturer_part_no) + else: + if isinstance(args, basestring): + args = json.loads(args) - return find_variant(template, args, variant) + if not args: + frappe.throw(_("Please specify at least one attribute in the Attributes table")) + return find_variant(template, args, variant) + +def make_variant_based_on_manufacturer(template, manufacturer, manufacturer_part_no): + '''Make and return a new variant based on manufacturer and + manufacturer part no''' + from frappe.model.naming import append_number_if_name_exists + + variant = frappe.new_doc('Item') + + copy_attributes_to_variant(template, variant) + + variant.manufacturer = manufacturer + variant.manufacturer_part_no = manufacturer_part_no + + variant.item_code = append_number_if_name_exists('Item', template.name) + + return variant def validate_item_variant_attributes(item, args=None): if isinstance(item, basestring): @@ -131,6 +154,7 @@ def create_variant(item, args): template = frappe.get_doc("Item", item) variant = frappe.new_doc("Item") + variant.variant_based_on = 'Item Attribute' variant_attributes = [] for d in template.attributes: @@ -147,17 +171,28 @@ def create_variant(item, args): def copy_attributes_to_variant(item, variant): from frappe.model import no_value_fields + + # copy non no-copy fields + + exclude_fields = ["item_code", "item_name", "show_in_website"] + + if item.variant_based_on=='Manufacturer': + # don't copy manufacturer values if based on part no + exclude_fields += ['manufacturer', 'manufacturer_part_no'] + for field in item.meta.fields: if field.fieldtype not in no_value_fields and (not field.no_copy)\ - and field.fieldname not in ("item_code", "item_name", "show_in_website"): + and field.fieldname not in exclude_fields: if variant.get(field.fieldname) != item.get(field.fieldname): variant.set(field.fieldname, item.get(field.fieldname)) variant.variant_of = item.name variant.has_variants = 0 - if variant.attributes: - variant.description += "\n" - for d in variant.attributes: - variant.description += "

" + d.attribute + ": " + cstr(d.attribute_value) + "

" + + if item.variant_based_on=='Item Attribute': + if variant.attributes: + variant.description += "\n" + for d in variant.attributes: + variant.description += "

" + d.attribute + ": " + cstr(d.attribute_value) + "

" def make_variant_item_code(template_item_code, variant): """Uses template's item code and abbreviations to make variant's item code""" diff --git a/erpnext/docs/assets/img/stock/select-mfg-for-variant.png b/erpnext/docs/assets/img/stock/select-mfg-for-variant.png new file mode 100644 index 0000000000000000000000000000000000000000..4da1d6ce9ea0bc9059f9cd458357bfcdfab3d6c4 GIT binary patch literal 56116 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 On selecting 'Has Variants' a table shall appear. Specify the variant attributes for the Item in the table. -In case the attribute has Numeric Values, you can specify the range and increment values here. +In case the attribute has Numeric Values, you can specify the range and increment values here. Valid Attributes @@ -22,3 +35,17 @@ To create 'Item Variants' against a 'Template' select 'Make Variants' Make Variants To learn more about setting Attributes Master check [Item Attributes]({{docs_base_url}}/user/manual/en/stock/setup/item-attribute.html) + +### Variants Based on Manufacturers + +To setup variants based on Manufactueres, in your Item template, set "Variants Based On" as "Manufacturers" + +Setup Item Variant by Manufacturer + +When you make a new Variant, the system will prompt you to select a Manufacturer. You can also optionally put in a Manufacturer Part Number + +Setup Item Variant by Manufacturer + +The naming of the variant will be the name (ID) of the template Item with a number suffix. e.g. "ITEM000" will have variant "ITEM000-1" \ No newline at end of file diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css index 697c078289..a51472feaa 100644 --- a/erpnext/public/css/erpnext.css +++ b/erpnext/public/css/erpnext.css @@ -327,4 +327,3 @@ body[data-route="pos"] .btn-more { body[data-route="pos"] .collapse-btn { cursor: pointer; } - diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 891f37cb28..f149baf16b 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -177,11 +177,11 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( fields: [ {fieldtype:'Read Only', fieldname:'item_code', label: __('Item Code'), in_list_view:1}, - {fieldtype:'Link', fieldname:'bom', options: 'BOM', + {fieldtype:'Link', fieldname:'bom', options: 'BOM', reqd: 1, label: __('Select BOM'), in_list_view:1, get_query: function(doc) { return {filters: {item: doc.item_code}}; }}, - {fieldtype:'Float', fieldname:'pending_qty', + {fieldtype:'Float', fieldname:'pending_qty', reqd: 1, label: __('Qty'), in_list_view:1}, ], get_data: function() { diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 7068c9972b..4920721739 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -261,6 +261,45 @@ $.extend(erpnext.item, { make_variant: function(frm) { var fields = [] + if(frm.doc.variant_based_on==="Item Attribute") { + erpnext.item.show_modal_for_item_attribute_selection(frm); + } else { + erpnext.item.show_modal_for_manufacturers(frm); + } + }, + + show_modal_for_manufacturers: function(frm) { + var dialog = new frappe.ui.Dialog({ + fields: [ + {fieldtype:'Link', options:'Manufacturer', + reqd:1, label:'Manufacturer'}, + {fieldtype:'Data', label:'Manufacturer Part Number', + fieldname: 'manufacturer_part_no'}, + ] + }); + + dialog.set_primary_action(__('Make'), function() { + var data = dialog.get_values(); + if(!data) return; + + // call the server to make the variant + data.template = frm.doc.name; + frappe.call({ + method:"erpnext.controllers.item_variant.get_variant", + args: data, + callback: function(r) { + var doclist = frappe.model.sync(r.message); + console.log(doclist); + dialog.hide(); + frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + } + }); + }) + + dialog.show(); + }, + + show_modal_for_item_attribute_selection: function(frm) { for(var i=0;i< frm.doc.attributes.length;i++){ var fieldtype, desc; var row = frm.doc.attributes[i]; @@ -371,13 +410,42 @@ $.extend(erpnext.item, { }) }); }, - toggle_attributes: function(frm) { - frm.toggle_display("attributes", frm.doc.has_variants || frm.doc.variant_of); - frm.fields_dict.attributes.grid.toggle_reqd("attribute_value", frm.doc.variant_of ? 1 : 0); - frm.fields_dict.attributes.grid.set_column_disp("attribute_value", frm.doc.variant_of ? 1 : 0); - frm.toggle_enable("attributes", !frm.doc.variant_of); - frm.fields_dict.attributes.grid.toggle_enable("attribute", !frm.doc.variant_of); - frm.fields_dict.attributes.grid.toggle_enable("attribute_value", !frm.doc.variant_of); + toggle_attributes: function(frm) { + if((frm.doc.has_variants || frm.doc.variant_of) + && frm.doc.variant_based_on==='Item Attribute') { + frm.toggle_display("attributes", true); + + var grid = frm.fields_dict.attributes.grid; + + if(frm.doc.variant_of) { + // variant + + // value column is displayed but not editable + grid.set_column_disp("attribute_value", true); + grid.toggle_enable("attribute_value", false); + + grid.toggle_enable("attribute", false); + + // can't change attributes since they are + // saved when the variant was created + frm.toggle_enable("attributes", false); + } else { + // template - values not required! + + // make the grid editable + frm.toggle_enable("attributes", true); + + // value column is hidden + grid.set_column_disp("attribute_value", false); + + // enable the grid so you can add more attributes + grid.toggle_enable("attribute", true); + } + + } else { + // nothing to do with attributes, hide it + frm.toggle_display("attributes", false); + } } }); diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 4a5094e34b..db327cc23f 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, "autoname": "field:item_code", @@ -1218,7 +1219,39 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "", + "default": "Item Attribute", + "depends_on": "has_variants", + "fieldname": "variant_based_on", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Variant Based On", + "length": 0, + "no_copy": 0, + "options": "Item Attribute\nManufacturer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.has_variants && doc.variant_based_on==='Item Attribute'", "fieldname": "attributes", "fieldtype": "Table", "hidden": 1, @@ -2792,6 +2825,7 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-tag", @@ -2799,12 +2833,11 @@ "image_field": "image", "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2017-02-20 13:26:45.446617", + "modified": "2017-03-21 21:03:10.715674", "modified_by": "Administrator", "module": "Stock", "name": "Item", diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 0f0205bae1..4d0c3ac881 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -643,7 +643,7 @@ class Item(WebsiteGenerator): .format(self.stock_uom, template_uom)) def validate_attributes(self): - if self.has_variants or self.variant_of: + if (self.has_variants or self.variant_of) and self.variant_based_on=='Item Attribute': attributes = [] if not self.attributes: frappe.throw(_("Attribute table is mandatory")) @@ -654,7 +654,7 @@ class Item(WebsiteGenerator): attributes.append(d.attribute) def validate_variant_attributes(self): - if self.variant_of: + if self.variant_of and self.variant_based_on=='Item Attribute': args = {} for d in self.attributes: if not d.attribute_value: @@ -675,7 +675,7 @@ def get_timeline_data(doctype, name): from `tabStock Ledger Entry` where item_code=%s and posting_date > date_sub(curdate(), interval 1 year) group by posting_date''', name)) - + for date, count in items.iteritems(): timestamp = get_timestamp(date) out.update({ timestamp: count }) diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 15a11186e7..2a8e4344af 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -7,7 +7,7 @@ import frappe from frappe.test_runner import make_test_records from erpnext.controllers.item_variant import (create_variant, ItemVariantExistsError, - InvalidItemAttributeValueError) + InvalidItemAttributeValueError, get_variant) from frappe.model.rename_doc import rename_doc from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry @@ -167,31 +167,66 @@ class TestItem(unittest.TestCase): variant.item_name = "_Test Numeric Variant Large 1.1m" self.assertRaises(InvalidItemAttributeValueError, variant.save) - variant = create_variant("_Test Numeric Template Item", + variant = create_variant("_Test Numeric Template Item", {"Test Size": "Large", "Test Item Length": 1.5}) self.assertEquals(variant.item_code, "_Test Numeric Template Item-L-1.5") variant.item_code = "_Test Numeric Variant-L-1.5" variant.item_name = "_Test Numeric Variant Large 1.5m" variant.save() - - def test_item_merging(self): + + def test_item_merging(self): create_item("Test Item for Merging 1") create_item("Test Item for Merging 2") - - make_stock_entry(item_code="Test Item for Merging 1", target="_Test Warehouse - _TC", + + make_stock_entry(item_code="Test Item for Merging 1", target="_Test Warehouse - _TC", qty=1, rate=100) - make_stock_entry(item_code="Test Item for Merging 2", target="_Test Warehouse 1 - _TC", + make_stock_entry(item_code="Test Item for Merging 2", target="_Test Warehouse 1 - _TC", qty=1, rate=100) - + rename_doc("Item", "Test Item for Merging 1", "Test Item for Merging 2", merge=True) - + self.assertFalse(frappe.db.exists("Item", "Test Item for Merging 1")) - - self.assertTrue(frappe.db.get_value("Bin", + + self.assertTrue(frappe.db.get_value("Bin", {"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse - _TC"})) - - self.assertTrue(frappe.db.get_value("Bin", - {"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse 1 - _TC"})) + + self.assertTrue(frappe.db.get_value("Bin", + {"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse 1 - _TC"})) + + def test_item_variant_by_manufacturer(self): + if frappe.db.exists('Item', '_Test Variant Mfg'): + frappe.delete_doc('Item', '_Test Variant Mfg') + if frappe.db.exists('Item', '_Test Variant Mfg-1'): + frappe.delete_doc('Item', '_Test Variant Mfg-1') + if frappe.db.exists('Manufacturer', 'MSG1'): + frappe.delete_doc('Manufacturer', 'MSG1') + + template = frappe.get_doc(dict( + doctype='Item', + item_code='_Test Variant Mfg', + has_variant=1, + item_group='Products', + variant_based_on='Manufacturer' + )).insert() + + manufacturer = frappe.get_doc(dict( + doctype='Manufacturer', + short_name='MSG1' + )).insert() + + variant = get_variant(template.name, manufacturer=manufacturer.name) + self.assertEquals(variant.item_code, '_Test Variant Mfg-1') + self.assertEquals(variant.description, '_Test Variant Mfg') + self.assertEquals(variant.manufacturer, 'MSG1') + variant.insert() + + variant = get_variant(template.name, manufacturer=manufacturer.name, + manufacturer_part_no='007') + self.assertEquals(variant.item_code, '_Test Variant Mfg-2') + self.assertEquals(variant.description, '_Test Variant Mfg') + self.assertEquals(variant.manufacturer, 'MSG1') + self.assertEquals(variant.manufacturer_part_no, '007') + def make_item_variant(): if not frappe.db.exists("Item", "_Test Variant Item-S"): @@ -215,6 +250,5 @@ def create_item(item_code, is_stock_item=None): item.item_name = item_code item.description = item_code item.item_group = "All Item Groups" - item.is_stock_item = is_stock_item or 1 + item.is_stock_item = is_stock_item or 1 item.save() - \ No newline at end of file diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index a1f80770e2..8a0be85214 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -63,7 +63,7 @@ def get_list_context(context=None): 'no_breadcrumbs': True } -def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20): +def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by=None): from frappe.www.list import get_list user = frappe.session.user ignore_permissions = False