From 8fe0208fb64c8228245bf1117b4078531a06ce31 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 13 May 2014 16:52:26 +0530 Subject: [PATCH] Improved Item maker in Setup Wizard. Fixes #1501 and #1601 --- erpnext/patches.txt | 1 - .../setup/page/setup_wizard/setup_wizard.css | 8 +- .../setup/page/setup_wizard/setup_wizard.js | 74 +++++++------------ .../setup/page/setup_wizard/setup_wizard.py | 39 ++++------ 4 files changed, 48 insertions(+), 74 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 6f83c02791..f57593807b 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -1,6 +1,5 @@ execute:import unidecode # new requirement -execute:frappe.db.sql("""update `tabPatch Log` set patch=replace(patch, '.4_0.', '.v4_0.')""") #2014-05-12 erpnext.patches.v4_0.validate_v3_patch erpnext.patches.v4_0.update_user_properties erpnext.patches.v4_0.move_warehouse_user_to_restrictions diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.css b/erpnext/setup/page/setup_wizard/setup_wizard.css index 519bc274be..4086089098 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.css +++ b/erpnext/setup/page/setup_wizard/setup_wizard.css @@ -7,8 +7,14 @@ } .setup-wizard-wrapper { margin: 0px auto; - width: 600px; } + +@media (min-width: 768px) { + .setup-wizard-wrapper { + width: 720px; + } +} + #page-setup-wizard .panel { background-color: #fff; } diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.js b/erpnext/setup/page/setup_wizard/setup_wizard.js index 1ad3dd57ea..b991bc4e9e 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.js +++ b/erpnext/setup/page/setup_wizard/setup_wizard.js @@ -19,7 +19,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) { wiz.show_complete(); setTimeout(function() { if(user==="Administrator") { - msgprint(__("Login with your new User ID") + ":" + values.email); + msgprint(__("Login with your new User ID") + ": " + values.email); setTimeout(function() { frappe.app.logout(); }, 2000); @@ -62,7 +62,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) { {"fieldname": "language", "label": __("Language"), "fieldtype": "Select", options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski", "italiano", "nederlands", "português brasileiro", "português", "српски", "தமிழ்", - "ไทย", "中国(简体", "中國(繁體"], reqd:1}, + "ไทย", "中国(简体)", "中國(繁體)"], reqd:1}, ], help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."), onload: function(slide) { @@ -237,12 +237,13 @@ frappe.pages['setup-wizard'].onload = function(wrapper) { { icon: "icon-money", "title": __("Add Taxes"), - "help": __("List your tax heads (e.g. VAT, Excise) (upto 3) and their standard rates. This will create a standard template, you can edit and add more later."), + "help": __("List your tax heads (e.g. VAT, Excise; they should have unique names) and their standard rates. This will create a standard template, which you can edit and add more later."), "fields": [], before_load: function(slide) { for(var i=1; i<4; i++) { slide.fields = slide.fields.concat([ - {fieldtype:"Data", fieldname:"tax_"+ i, label:__("Tax") + " " + i, placeholder:__("e.g. VAT")}, + {fieldtype:"Data", fieldname:"tax_"+ i, label:__("Tax") + " " + i, + placeholder:__("e.g. VAT") + " " + i}, {fieldtype:"Column Break"}, {fieldtype:"Float", fieldname:"tax_rate_" + i, label:__("Rate (%)"), placeholder:__("e.g. 5")}, {fieldtype:"Section Break"}, @@ -264,33 +265,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) { placeholder:__("Customer Name")}, {fieldtype:"Column Break"}, {fieldtype:"Data", fieldname:"customer_contact_" + i, - label:__("Contact"), placeholder:__("Contact Name")}, - {fieldtype:"Section Break"} - ]) - } - } - }, - - // Items to Sell - { - icon: "icon-barcode", - "title": __("Your Products or Services"), - "help": __("List your products or services that you sell to your customers. Make sure to check the Item Group, Unit of Measure and other properties when you start."), - "fields": [], - before_load: function(slide) { - for(var i=1; i<6; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Data", fieldname:"item_" + i, label:__("Item") + " " + i, - placeholder:__("A Product or Service")}, - {fieldtype:"Column Break"}, - {fieldtype:"Attach", fieldname:"item_img_" + i, label:__("Attach Image")}, - {fieldtype:"Section Break"}, - {fieldtype:"Column Break"}, - {fieldtype:"Select", label:"Group", fieldname:"item_group_" + i, - options:[__("Products"), __("Services")]}, - {fieldtype:"Column Break"}, - {fieldtype:"Select", fieldname:"item_uom_" + i, label:"UOM", - options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), __("Hour"), __("Minute")]}, + label:__("Contact Name") + " " + i, placeholder:__("Contact Name")}, {fieldtype:"Section Break"} ]) } @@ -307,41 +282,42 @@ frappe.pages['setup-wizard'].onload = function(wrapper) { for(var i=1; i<6; i++) { slide.fields = slide.fields.concat([ {fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i, - placeholder:"Supplier Name"}, + placeholder:__("Supplier Name")}, {fieldtype:"Column Break"}, {fieldtype:"Data", fieldname:"supplier_contact_" + i, - label:"Contact", placeholder:__("Contact Name")}, + label:__("Contact Name") + " " + i, placeholder:__("Contact Name")}, {fieldtype:"Section Break"} ]) } } }, - // Items to Buy + // Items to Sell { icon: "icon-barcode", - "title": __("Products or Services You Buy"), - "help": __("List a few products or services you buy from your suppliers or vendors. If these are same as your products, then do not add them."), + "title": __("Your Products or Services"), + "help": __("List your products or services that you buy or sell. Make sure to check the Item Group, Unit of Measure and other properties when you start."), "fields": [], before_load: function(slide) { for(var i=1; i<6; i++) { slide.fields = slide.fields.concat([ - {fieldtype:"Data", fieldname:"item_buy_" + i, label: __("Item") + " " + i, + {fieldtype:"Section Break", show_section_border: true}, + {fieldtype:"Data", fieldname:"item_" + i, label:__("Item") + " " + i, placeholder:__("A Product or Service")}, + {fieldtype: "Check", fieldname: "is_sales_item_" + i, label:__("We sell this Item")}, + {fieldtype: "Check", fieldname: "is_purchase_item_" + i, label:__("We buy this Item")}, {fieldtype:"Column Break"}, - {fieldtype:"Section Break"}, - {fieldtype:"Column Break"}, - {fieldtype:"Select", fieldname:"item_buy_group_" + i, label: __("Group"), - options:[__("Raw Material"), __("Consumable"), __("Sub Assemblies"), __("Services"), __("Products")]}, - {fieldtype:"Column Break"}, - {fieldtype:"Select", fieldname:"item_buy_uom_" + i, label: __("UOM"), - options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), __("Hour"), __("Minute")]}, - {fieldtype:"Section Break"}, + {fieldtype:"Select", label:"Group", fieldname:"item_group_" + i, + options:[__("Products"), __("Services"), + __("Raw Material"), __("Consumable"), __("Sub Assemblies")]}, + {fieldtype:"Select", fieldname:"item_uom_" + i, label:"UOM", + options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), + __("Hour"), __("Minute")]}, + {fieldtype:"Attach", fieldname:"item_img_" + i, label:__("Attach Image")}, ]) } } }, - ] } @@ -461,7 +437,7 @@ frappe.wiz.WizardSlide = Class.extend({ \
\
\ -

%(help)s


\ +

%(help)s


\
\
\
\ @@ -503,6 +479,8 @@ frappe.wiz.WizardSlide = Class.extend({ me.values = me.form.get_values(); if(me.values===null) return; + if(me.validate && !me.validate()) + return; frappe.set_route(me.wiz.page_name, me.id+1 + ""); }) } else { @@ -511,6 +489,8 @@ frappe.wiz.WizardSlide = Class.extend({ me.values = me.form.get_values(); if(me.values===null) return; + if(me.validate && !me.validate()) + return; me.wiz.on_complete(me.wiz); }) } diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py index 4b55f5bf87..95401b74ff 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/setup_wizard.py @@ -291,17 +291,28 @@ def create_items(args): item = args.get("item_" + str(i)) if item: item_group = args.get("item_group_" + str(i)) + is_sales_item = args.get("is_sales_item_" + str(i)) + is_purchase_item = args.get("is_purchase_item_" + str(i)) + is_stock_item = item_group!=_("Services") + default_warehouse = "" + if is_stock_item: + if is_sales_item: + default_warehouse = _("Finished Goods") + " - " + args.get("company_abbr") + else: + default_warehouse = _("Stores") + " - " + args.get("company_abbr") + frappe.get_doc({ "doctype":"Item", "item_code": item, "item_name": item, "description": item, - "is_sales_item": "Yes", + "is_sales_item": "Yes" if is_sales_item else "No", + "is_purchase_item": "Yes" if is_purchase_item else "No", "show_in_website": 1, - "is_stock_item": item_group!=_("Services") and "Yes" or "No", + "is_stock_item": is_stock_item and "Yes" or "No", "item_group": item_group, "stock_uom": args.get("item_uom_" + str(i)), - "default_warehouse": item_group!=_("Service") and (_("Finished Goods") + " - " + args.get("company_abbr")) or "" + "default_warehouse": default_warehouse }).insert() if args.get("item_img_" + str(i)): @@ -309,28 +320,6 @@ def create_items(args): fileurl = save_file(filename, content, "Item", item, decode=True).file_url frappe.db.set_value("Item", item, "image", fileurl) - for i in xrange(1,6): - item = args.get("item_buy_" + str(i)) - if item: - item_group = args.get("item_buy_group_" + str(i)) - frappe.get_doc({ - "doctype":"Item", - "item_code": item, - "item_name": item, - "description": item, - "is_sales_item": "No", - "is_stock_item": item_group!=_("Services") and "Yes" or "No", - "item_group": item_group, - "stock_uom": args.get("item_buy_uom_" + str(i)), - "default_warehouse": item_group!=_("Services") and (_("Stores") + " - " + args.get("company_abbr")) or "" - }).insert() - - if args.get("item_img_" + str(i)): - filename, filetype, content = args.get("item_img_" + str(i)).split(",") - fileurl = save_file(filename, content, "Item", item, decode=True).file_url - frappe.db.set_value("Item", item, "image", fileurl) - - def create_customers(args): for i in xrange(1,6): customer = args.get("customer_" + str(i))