Merge pull request #1638 from anandpdoshi/hotfix

Improved Item maker in Setup Wizard. Fixes #1501 and #1601
This commit is contained in:
Pratik Vyas 2014-05-13 17:38:30 +05:30
commit b1f212d653
4 changed files with 48 additions and 74 deletions

View File

@ -1,6 +1,5 @@
execute:import unidecode # new requirement 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.validate_v3_patch
erpnext.patches.v4_0.update_user_properties erpnext.patches.v4_0.update_user_properties
erpnext.patches.v4_0.move_warehouse_user_to_restrictions erpnext.patches.v4_0.move_warehouse_user_to_restrictions

View File

@ -7,8 +7,14 @@
} }
.setup-wizard-wrapper { .setup-wizard-wrapper {
margin: 0px auto; margin: 0px auto;
width: 600px;
} }
@media (min-width: 768px) {
.setup-wizard-wrapper {
width: 720px;
}
}
#page-setup-wizard .panel { #page-setup-wizard .panel {
background-color: #fff; background-color: #fff;
} }

View File

@ -19,7 +19,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
wiz.show_complete(); wiz.show_complete();
setTimeout(function() { setTimeout(function() {
if(user==="Administrator") { if(user==="Administrator") {
msgprint(__("Login with your new User ID") + ":" + values.email); msgprint(__("Login with your new User ID") + ": " + values.email);
setTimeout(function() { setTimeout(function() {
frappe.app.logout(); frappe.app.logout();
}, 2000); }, 2000);
@ -62,7 +62,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
{"fieldname": "language", "label": __("Language"), "fieldtype": "Select", {"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski", options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
"italiano", "nederlands", "português brasileiro", "português", "српски", "தமிழ்", "italiano", "nederlands", "português brasileiro", "português", "српски", "தமிழ்",
"ไทย", "中国(简体", "中國(繁體"], reqd:1}, "ไทย", "中国(简体", "中國(繁體"], reqd:1},
], ],
help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."), help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
onload: function(slide) { onload: function(slide) {
@ -237,12 +237,13 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
{ {
icon: "icon-money", icon: "icon-money",
"title": __("Add Taxes"), "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": [], "fields": [],
before_load: function(slide) { before_load: function(slide) {
for(var i=1; i<4; i++) { for(var i=1; i<4; i++) {
slide.fields = slide.fields.concat([ 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:"Column Break"},
{fieldtype:"Float", fieldname:"tax_rate_" + i, label:__("Rate (%)"), placeholder:__("e.g. 5")}, {fieldtype:"Float", fieldname:"tax_rate_" + i, label:__("Rate (%)"), placeholder:__("e.g. 5")},
{fieldtype:"Section Break"}, {fieldtype:"Section Break"},
@ -264,33 +265,7 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
placeholder:__("Customer Name")}, placeholder:__("Customer Name")},
{fieldtype:"Column Break"}, {fieldtype:"Column Break"},
{fieldtype:"Data", fieldname:"customer_contact_" + i, {fieldtype:"Data", fieldname:"customer_contact_" + i,
label:__("Contact"), placeholder:__("Contact Name")}, label:__("Contact Name") + " " + i, 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")]},
{fieldtype:"Section Break"} {fieldtype:"Section Break"}
]) ])
} }
@ -307,41 +282,42 @@ frappe.pages['setup-wizard'].onload = function(wrapper) {
for(var i=1; i<6; i++) { for(var i=1; i<6; i++) {
slide.fields = slide.fields.concat([ slide.fields = slide.fields.concat([
{fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i, {fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i,
placeholder:"Supplier Name"}, placeholder:__("Supplier Name")},
{fieldtype:"Column Break"}, {fieldtype:"Column Break"},
{fieldtype:"Data", fieldname:"supplier_contact_" + i, {fieldtype:"Data", fieldname:"supplier_contact_" + i,
label:"Contact", placeholder:__("Contact Name")}, label:__("Contact Name") + " " + i, placeholder:__("Contact Name")},
{fieldtype:"Section Break"} {fieldtype:"Section Break"}
]) ])
} }
} }
}, },
// Items to Buy // Items to Sell
{ {
icon: "icon-barcode", icon: "icon-barcode",
"title": __("Products or Services You Buy"), "title": __("Your Products or Services"),
"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."), "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": [], "fields": [],
before_load: function(slide) { before_load: function(slide) {
for(var i=1; i<6; i++) { for(var i=1; i<6; i++) {
slide.fields = slide.fields.concat([ 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")}, 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:"Column Break"},
{fieldtype:"Section Break"}, {fieldtype:"Select", label:"Group", fieldname:"item_group_" + i,
{fieldtype:"Column Break"}, options:[__("Products"), __("Services"),
{fieldtype:"Select", fieldname:"item_buy_group_" + i, label: __("Group"), __("Raw Material"), __("Consumable"), __("Sub Assemblies")]},
options:[__("Raw Material"), __("Consumable"), __("Sub Assemblies"), __("Services"), __("Products")]}, {fieldtype:"Select", fieldname:"item_uom_" + i, label:"UOM",
{fieldtype:"Column Break"}, options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"),
{fieldtype:"Select", fieldname:"item_buy_uom_" + i, label: __("UOM"), __("Hour"), __("Minute")]},
options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), __("Hour"), __("Minute")]}, {fieldtype:"Attach", fieldname:"item_img_" + i, label:__("Attach Image")},
{fieldtype:"Section Break"},
]) ])
} }
} }
}, },
] ]
} }
@ -461,7 +437,7 @@ frappe.wiz.WizardSlide = Class.extend({
</div>\ </div>\
<div class="row">\ <div class="row">\
<div class="col-sm-12">\ <div class="col-sm-12">\
<p class="text-muted">%(help)s</p><br>\ <p>%(help)s</p><br>\
<div class="form"></div>\ <div class="form"></div>\
</div>\ </div>\
</div>\ </div>\
@ -503,6 +479,8 @@ frappe.wiz.WizardSlide = Class.extend({
me.values = me.form.get_values(); me.values = me.form.get_values();
if(me.values===null) if(me.values===null)
return; return;
if(me.validate && !me.validate())
return;
frappe.set_route(me.wiz.page_name, me.id+1 + ""); frappe.set_route(me.wiz.page_name, me.id+1 + "");
}) })
} else { } else {
@ -511,6 +489,8 @@ frappe.wiz.WizardSlide = Class.extend({
me.values = me.form.get_values(); me.values = me.form.get_values();
if(me.values===null) if(me.values===null)
return; return;
if(me.validate && !me.validate())
return;
me.wiz.on_complete(me.wiz); me.wiz.on_complete(me.wiz);
}) })
} }

View File

@ -291,17 +291,28 @@ def create_items(args):
item = args.get("item_" + str(i)) item = args.get("item_" + str(i))
if item: if item:
item_group = args.get("item_group_" + str(i)) 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({ frappe.get_doc({
"doctype":"Item", "doctype":"Item",
"item_code": item, "item_code": item,
"item_name": item, "item_name": item,
"description": 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, "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, "item_group": item_group,
"stock_uom": args.get("item_uom_" + str(i)), "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() }).insert()
if args.get("item_img_" + str(i)): 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 fileurl = save_file(filename, content, "Item", item, decode=True).file_url
frappe.db.set_value("Item", item, "image", fileurl) 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): def create_customers(args):
for i in xrange(1,6): for i in xrange(1,6):
customer = args.get("customer_" + str(i)) customer = args.get("customer_" + str(i))