updates to Setup Wizard, set language as first input
diff --git a/erpnext/config/setup.py b/erpnext/config/setup.py
index 5be7e8c..6689dd7 100644
--- a/erpnext/config/setup.py
+++ b/erpnext/config/setup.py
@@ -3,14 +3,14 @@
data = [
{
- "label": _("Tools"),
+ "label": _("Settings"),
"icon": "icon-wrench",
"items": [
{
"type": "doctype",
"name": "Global Defaults",
"label": _("Global Settings"),
- "description": _("Set the Date & Number Formats, Default Currency, Current Fiscal Year, etc."),
+ "description": _("Set Default Values like Company, Currency, Current Fiscal Year, etc."),
"hide_count": True
}
]
@@ -124,7 +124,7 @@
def get_data():
out = list(data)
-
+
for module, label, icon in (
("accounts", _("Accounts"), "icon-money"),
("stock", _("Stock"), "icon-truck"),
@@ -132,7 +132,7 @@
("buying", _("Buying"), "icon-shopping-cart"),
("hr", _("Human Resources"), "icon-group"),
("support", _("Support"), "icon-phone")):
-
+
add_setup_section(out, "erpnext", module, label, icon)
- return out
\ No newline at end of file
+ return out
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.js b/erpnext/setup/doctype/global_defaults/global_defaults.js
index 85d718a..546fbd4 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.js
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.js
@@ -5,12 +5,12 @@
onload: function(doc) {
var me = this;
this.timezone = doc.time_zone;
-
+
frappe.call({
method: "frappe.country_info.get_country_timezone_info",
callback: function(data) {
- erpnext.country_info = data.message.country_info;
- erpnext.all_timezones = data.message.all_timezones;
+ frappe.country_info = data.message.country_info;
+ frappe.all_timezones = data.message.all_timezones;
me.set_timezone_options();
cur_frm.set_value("time_zone", me.timezone);
}
@@ -28,7 +28,7 @@
var timezones = [];
if (this.frm.doc.country) {
- var timezones = (erpnext.country_info[this.frm.doc.country].timezones || []).sort();
+ var timezones = (frappe.country_info[this.frm.doc.country].timezones || []).sort();
}
this.frm.set_value("time_zone", timezones[0]);
@@ -38,10 +38,10 @@
set_timezone_options: function(filtered_options) {
var me = this;
if(!filtered_options) filtered_options = [];
- var remaining_timezones = $.map(erpnext.all_timezones, function(v)
+ var remaining_timezones = $.map(frappe.all_timezones, function(v)
{ return filtered_options.indexOf(v)===-1 ? v : null; });
- this.frm.set_df_property("time_zone", "options",
+ this.frm.set_df_property("time_zone", "options",
(filtered_options.concat([""]).concat(remaining_timezones)).join("\n"));
}
-});
\ No newline at end of file
+});
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.json b/erpnext/setup/doctype/global_defaults/global_defaults.json
index 5a5f21e..6375bab 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.json
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.json
@@ -1,174 +1,395 @@
{
+ "_last_update": null,
+ "_user_tags": null,
+ "allow_attach": null,
"allow_copy": 1,
- "creation": "2013-05-02 17:53:24.000000",
+ "allow_email": null,
+ "allow_import": null,
+ "allow_print": null,
+ "allow_rename": null,
+ "allow_trash": null,
+ "autoname": null,
+ "change_log": null,
+ "client_script": null,
+ "client_script_core": null,
+ "client_string": null,
+ "colour": null,
+ "creation": "2013-05-02 17:53:24",
+ "custom": null,
+ "default_print_format": null,
+ "description": null,
"docstatus": 0,
"doctype": "DocType",
+ "document_type": null,
+ "dt_template": null,
"fields": [
{
- "fieldname": "date_and_number_settings",
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
+ "fieldname": "currency_settings",
"fieldtype": "Section Break",
- "label": "Date and Number Settings",
- "permlevel": 0
- },
- {
- "default": "dd-mm-yyyy",
- "fieldname": "date_format",
- "fieldtype": "Select",
- "label": "Date Format",
- "options": "yyyy-mm-dd\ndd-mm-yyyy\ndd/mm/yyyy\nmm/dd/yyyy\nmm-dd-yyyy",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": 1,
+ "label": "Currency Settings",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
+ "options": null,
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": null,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
- "description": "This is the default number format. For currencies, please set the number format in the currency master.",
- "fieldname": "number_format",
- "fieldtype": "Select",
- "label": "Number Format",
- "options": "\n#,###.##\n#.###,##\n# ###.##\n#,###.###\n#,##,###.##\n#.###\n#,###",
- "permlevel": 0,
- "read_only": 0
- },
- {
- "default": "3",
- "description": "Precision for Float fields (quantities, discounts, percentages etc). Floats will be rounded up to specified decimals. Default = 3",
- "fieldname": "float_precision",
- "fieldtype": "Select",
- "label": "Float Precision",
- "options": "\n2\n3\n4\n5\n6",
- "permlevel": 0,
- "read_only": 0
- },
- {
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
"description": "If disable, 'Rounded Total' field will not be visible in any transaction",
"fieldname": "disable_rounded_total",
"fieldtype": "Check",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": 1,
"label": "Disable Rounded Total",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
+ "options": null,
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
- "fieldname": "currency_settings",
- "fieldtype": "Section Break",
- "label": "Currency Settings",
- "permlevel": 0
- },
- {
+ "allow_on_submit": null,
"default": "INR",
+ "depends_on": null,
+ "description": null,
"fieldname": "default_currency",
"fieldtype": "Link",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": 1,
"label": "Default Currency",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "Currency",
"permlevel": 0,
+ "print_hide": null,
+ "print_width": null,
"read_only": 0,
- "reqd": 1
+ "report_hide": null,
+ "reqd": 1,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
"description": "Do not show any symbol like $ etc next to currencies.",
"fieldname": "hide_currency_symbol",
"fieldtype": "Select",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": 1,
"label": "Hide Currency Symbol",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "\nNo\nYes",
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "company",
"fieldtype": "Section Break",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": 1,
"label": "Company Settings",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
+ "options": null,
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "default_company",
"fieldtype": "Link",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "Default Company",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "Company",
"permlevel": 0,
+ "print_hide": null,
+ "print_width": null,
"read_only": 0,
- "reqd": 0
+ "report_hide": null,
+ "reqd": 0,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "current_fiscal_year",
"fieldtype": "Link",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "Current Fiscal Year",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "Fiscal Year",
"permlevel": 0,
+ "print_hide": null,
+ "print_width": null,
"read_only": 0,
- "reqd": 1
+ "report_hide": null,
+ "reqd": 1,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "system",
"fieldtype": "Section Break",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "System Settings",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
+ "options": null,
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
- "description": "Session Expiry in Hours e.g. 06:00",
- "fieldname": "session_expiry",
- "fieldtype": "Data",
- "label": "Session Expiry",
- "permlevel": 0,
- "read_only": 0
- },
- {
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "country",
"fieldtype": "Select",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "Country",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "link:Country",
- "permlevel": 0
+ "permlevel": 0,
+ "print_hide": null,
+ "print_width": null,
+ "read_only": null,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
+ "description": null,
"fieldname": "sms_sender_name",
"fieldtype": "Data",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "SMS Sender Name",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
+ "options": null,
"permlevel": 0,
- "read_only": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
},
{
- "fieldname": "column_break_3",
- "fieldtype": "Column Break",
- "permlevel": 0,
- "read_only": 0
- },
- {
+ "allow_on_submit": null,
+ "default": null,
+ "depends_on": null,
"description": "For Server Side Print Formats",
"fieldname": "print_style",
"fieldtype": "Select",
+ "hidden": null,
+ "ignore_restrictions": null,
+ "in_filter": null,
+ "in_list_view": null,
"label": "Print Format Style",
+ "no_column": null,
+ "no_copy": null,
+ "oldfieldname": null,
+ "oldfieldtype": null,
"options": "Standard\nClassic\nModern\nSpartan",
"permlevel": 0,
- "read_only": 0
- },
- {
- "fieldname": "time_zone",
- "fieldtype": "Select",
- "label": "Time Zone",
- "permlevel": 0
+ "print_hide": null,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": null,
+ "reqd": null,
+ "search_index": null,
+ "set_only_once": null,
+ "trigger": null,
+ "width": null
}
],
+ "hide_heading": null,
"hide_toolbar": 0,
"icon": "icon-cog",
"idx": 1,
"in_create": 1,
+ "in_dialog": null,
+ "is_submittable": null,
+ "is_transaction_doc": null,
"issingle": 1,
- "modified": "2014-02-19 19:11:58.000000",
+ "istable": null,
+ "max_attachments": null,
+ "menu_index": null,
+ "modified": "2014-04-17 16:58:54.093191",
"modified_by": "Administrator",
"module": "Setup",
"name": "Global Defaults",
+ "name_case": null,
"owner": "Administrator",
+ "parent": null,
+ "parent_node": null,
+ "parentfield": null,
+ "parenttype": null,
"permissions": [
{
"amend": 0,
"cancel": 0,
"create": 1,
+ "delete": null,
+ "email": null,
+ "export": null,
+ "import": null,
+ "match": null,
"permlevel": 0,
+ "print": null,
"read": 1,
"report": 0,
+ "restrict": null,
+ "restricted": null,
"role": "System Manager",
"submit": 0,
"write": 1
}
],
- "read_only": 1
+ "plugin": null,
+ "print_outline": null,
+ "read_only": 1,
+ "read_only_onload": null,
+ "search_fields": null,
+ "section_style": null,
+ "server_code": null,
+ "server_code_compiled": null,
+ "server_code_core": null,
+ "server_code_error": null,
+ "show_in_menu": null,
+ "smallicon": null,
+ "subject": null,
+ "tag_fields": null,
+ "title_field": null,
+ "use_template": null,
+ "version": null
}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.py b/erpnext/setup/doctype/global_defaults/global_defaults.py
index 90861de..a6db2ba 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.py
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.py
@@ -4,9 +4,7 @@
from __future__ import unicode_literals
"""Global Defaults"""
import frappe
-from frappe import _
import frappe.defaults
-from frappe.utils import cint
keydict = {
# "key in defaults": "key in Global Defaults"
@@ -15,11 +13,7 @@
'company': 'default_company',
'currency': 'default_currency',
'hide_currency_symbol':'hide_currency_symbol',
- 'date_format': 'date_format',
- 'number_format': 'number_format',
- 'float_precision': 'float_precision',
'account_url':'account_url',
- 'session_expiry': 'session_expiry',
'disable_rounded_total': 'disable_rounded_total',
}
@@ -29,9 +23,6 @@
def on_update(self):
"""update defaults"""
- self.validate_session_expiry()
- self.set_country_and_timezone()
-
for key in keydict:
frappe.db.set_default(key, self.get(keydict[key], ''))
@@ -53,15 +44,5 @@
# clear cache
frappe.clear_cache()
- def validate_session_expiry(self):
- if self.session_expiry:
- parts = self.session_expiry.split(":")
- if len(parts)!=2 or not (cint(parts[0]) or cint(parts[1])):
- frappe.throw(_("Session Expiry must be in format {0}").format("hh:mm"))
-
- def set_country_and_timezone(self):
- frappe.db.set_default("country", self.country)
- frappe.db.set_default("time_zone", self.time_zone)
-
def get_defaults(self):
return frappe.defaults.get_defaults()
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.css b/erpnext/setup/page/setup_wizard/setup_wizard.css
index 386715f..519bc27 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.css
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.css
@@ -1,7 +1,16 @@
+#page-setup-wizard {
+ position: fixed;
+ top: 0px; bottom: 0px;
+ left: 0px; right: 0px;
+ overflow: auto;
+ padding-top: 60px;
+}
+.setup-wizard-wrapper {
+ margin: 0px auto;
+ width: 600px;
+}
#page-setup-wizard .panel {
background-color: #fff;
- position: fixed; top:0; left: 0; width:100%; height:100%;
- overflow: auto;
}
#page-setup-wizard .panel-body {
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.js b/erpnext/setup/page/setup_wizard/setup_wizard.js
index fbc5d02..9bddf51 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.js
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.js
@@ -1,11 +1,11 @@
-frappe.pages['setup-wizard'].onload = function(wrapper) {
+frappe.pages['setup-wizard'].onload = function(wrapper) {
if(sys_defaults.company) {
frappe.set_route("desktop");
return;
}
$(".navbar:first").toggle(false);
$("body").css({"padding-top":"30px"});
-
+
var wizard_settings = {
page_name: "setup-wizard",
parent: wrapper,
@@ -16,59 +16,87 @@
method: "erpnext.setup.page.setup_wizard.setup_wizard.setup_account",
args: values,
callback: function(r) {
- if(r.exc) {
- var d = msgprint(__("There were errors."));
- d.custom_onhide = function() {
- frappe.set_route(erpnext.wiz.page_name, "0");
+ wiz.show_complete();
+ setTimeout(function() {
+ if(user==="Administrator") {
+ msgprint(__("Login with your new User ID") + ":" + values.email);
+ setTimeout(function() {
+ frappe.app.logout();
+ }, 2000);
+ } else {
+ window.location = "/desk";
}
- } else {
- wiz.show_complete();
- setTimeout(function() {
- if(user==="Administrator") {
- msgprint(__("Login with your new User ID") + ":" + values.email);
- setTimeout(function() {
- frappe.app.logout();
- }, 2000);
- } else {
- window.location = "/desk";
- }
- }, 2000);
+ }, 2000);
+ },
+ error: function(r) {
+ var d = msgprint(__("There were errors."));
+ d.custom_onhide = function() {
+ frappe.set_route(erpnext.wiz.page_name, "0");
}
}
})
},
- title: __("ERPNext Setup Guide"),
+ title: __("Welcome"),
welcome_html: '<h1 class="text-muted text-center"><i class="icon-magic"></i></h1>\
<h2 class="text-center">'+__('ERPNext Setup')+'</h2>\
- <p class="text-center" style="margin: 0px 100px">' +
- __('Welcome to ERPNext. Over the next few minutes we will help you setup your ERPNext account. Try and fill in as much information as you have even if it takes a bit longer. It will save you a lot of time later. Good Luck!') +
+ <p class="text-center" style="margin: 0px 100px">' +
+ __('Welcome to ERPNext. Over the next few minutes we will help you setup your ERPNext account. Try and fill in as much information as you have even if it takes a bit longer. It will save you a lot of time later. Good Luck!') +
'</p>',
working_html: '<h3 class="text-muted text-center"><i class="icon-refresh icon-spin"></i></h3>\
<h2 class="text-center">'+__('Setting up...')+'</h2>\
- <p class="text-center">' +
- __('Sit tight while your system is being setup. This may take a few moments.') +
+ <p class="text-center">' +
+ __('Sit tight while your system is being setup. This may take a few moments.') +
'</p>',
complete_html: '<h1 class="text-muted text-center"><i class="icon-thumbs-up"></i></h1>\
<h2 class="text-center">'+__('Setup Complete!')+'</h2>\
- <p class="text-center">' +
- __('Your setup is complete. Refreshing...') +
+ <p class="text-center">' +
+ __('Your setup is complete. Refreshing...') +
'</p>',
slides: [
// User
{
+ title: __("Select Your Language"),
+ icon: "icon-globe",
+ fields: [
+ {"fieldname": "language", "label": __("Language"), "fieldtype": "Select",
+ options: ["english", "العربية", "deutsch", "ελληνικά", "español", "français", "हिंदी", "hrvatski",
+ "italiano", "nederlands", "português brasileiro", "português", "српски", "தமிழ்",
+ "ไทย", "中国(简体", "中國(繁體"], reqd:1},
+ ],
+ help: __("Welcome to ERPNext. Please select your language to begin the Setup Wizard."),
+ onload: function(slide) {
+ slide.get_input("language").on("change", function() {
+ var lang = $(this).val();
+ frappe.call({
+ method: "erpnext.setup.page.setup_wizard.setup_wizard.load_messages",
+ args: {
+ language: lang
+ },
+ callback: function(r) {
+ // re-render all slides
+ $.each(slide.wiz.slide_dict, function(key, s) {
+ s.make();
+ });
+ slide.get_input("language").val(lang);
+ }
+ })
+ });
+ }
+ },
+ {
title: __("The First User: You"),
icon: "icon-user",
fields: [
- {"fieldname": "first_name", "label": __("First Name"), "fieldtype": "Data",
+ {"fieldname": "first_name", "label": __("First Name"), "fieldtype": "Data",
reqd:1},
- {"fieldname": "last_name", "label": __("Last Name"), "fieldtype": "Data",
+ {"fieldname": "last_name", "label": __("Last Name"), "fieldtype": "Data",
reqd:1},
- {"fieldname": "email", "label": __("Email Id"), "fieldtype": "Data",
+ {"fieldname": "email", "label": __("Email Id"), "fieldtype": "Data",
reqd:1, "description":"Your Login Id", "options":"Email"},
- {"fieldname": "password", "label": __("Password"), "fieldtype": "Password",
+ {"fieldname": "password", "label": __("Password"), "fieldtype": "Password",
reqd:1},
- {fieldtype:"Attach Image", fieldname:"attach_user",
- label:"Attach Your User..."},
+ {fieldtype:"Attach Image", fieldname:"attach_user",
+ label: __("Attach Your Picture")},
],
help: __('The first user will become the System Manager (you can change that later).'),
onload: function(slide) {
@@ -77,28 +105,28 @@
slide.form.fields_dict.email.$wrapper.toggle(false);
slide.form.fields_dict.first_name.set_input(frappe.boot.user.first_name);
slide.form.fields_dict.last_name.set_input(frappe.boot.user.last_name);
-
+
delete slide.form.fields_dict.email;
delete slide.form.fields_dict.password;
}
}
},
-
+
// Organization
{
title: __("The Organization"),
icon: "icon-building",
fields: [
{fieldname:'company_name', label: __('Company Name'), fieldtype:'Data', reqd:1,
- placeholder: 'e.g. "My Company LLC"'},
+ placeholder: __('e.g. "My Company LLC"')},
{fieldname:'company_abbr', label: __('Company Abbreviation'), fieldtype:'Data',
- placeholder:'e.g. "MC"',reqd:1},
- {fieldname:'fy_start_date', label:'Financial Year Start Date', fieldtype:'Date',
- description:'Your financial year begins on', reqd:1},
- {fieldname:'fy_end_date', label:'Financial Year End Date', fieldtype:'Date',
- description:'Your financial year ends on', reqd:1},
+ placeholder: __('e.g. "MC"'),reqd:1},
+ {fieldname:'fy_start_date', label:__('Financial Year Start Date'), fieldtype:'Date',
+ description: __('Your financial year begins on'), reqd:1},
+ {fieldname:'fy_end_date', label:__('Financial Year End Date'), fieldtype:'Date',
+ description: __('Your financial year ends on'), reqd:1},
{fieldname:'company_tagline', label: __('What does it do?'), fieldtype:'Data',
- placeholder:'e.g. "Build tools for builders"', reqd:1},
+ placeholder:__('e.g. "Build tools for builders"'), reqd:1},
],
help: __('The name of your company for which you are setting up this system.'),
onload: function(slide) {
@@ -109,7 +137,7 @@
}).val(frappe.boot.sysdefaults.company_name || "").trigger("change");
slide.get_input("fy_start_date").on("change", function() {
- var year_end_date =
+ var year_end_date =
frappe.datetime.add_days(frappe.datetime.add_months(
frappe.datetime.user_to_obj(slide.get_input("fy_start_date").val()), 12), -1);
slide.get_input("fy_end_date").val(frappe.datetime.obj_to_user(year_end_date));
@@ -117,7 +145,7 @@
});
}
},
-
+
// Country
{
title: __("Country, Timezone and Currency"),
@@ -129,64 +157,64 @@
options: "", fieldtype: 'Select'},
{fieldname:'timezone', label: __('Time Zone'), reqd:1,
options: "", fieldtype: 'Select'},
- {fieldname:'chart_of_accounts', label: __('Chart of Accounts'),
- options: "", fieldtype: 'Select'}
+ // {fieldname:'chart_of_accounts', label: __('Chart of Accounts'),
+ // options: "", fieldtype: 'Select'}
],
help: __('Select your home country and check the timezone and currency.'),
onload: function(slide, form) {
frappe.call({
method:"frappe.country_info.get_country_timezone_info",
callback: function(data) {
- erpnext.country_info = data.message.country_info;
- erpnext.all_timezones = data.message.all_timezones;
+ frappe.country_info = data.message.country_info;
+ frappe.all_timezones = data.message.all_timezones;
slide.get_input("country").empty()
- .add_options([""].concat(keys(erpnext.country_info).sort()));
+ .add_options([""].concat(keys(frappe.country_info).sort()));
slide.get_input("currency").empty()
- .add_options(frappe.utils.unique([""].concat($.map(erpnext.country_info,
+ .add_options(frappe.utils.unique([""].concat($.map(frappe.country_info,
function(opts, country) { return opts.currency; }))).sort());
slide.get_input("timezone").empty()
- .add_options([""].concat(erpnext.all_timezones));
+ .add_options([""].concat(frappe.all_timezones));
}
})
-
+
slide.get_input("country").on("change", function() {
var country = slide.get_input("country").val();
var $timezone = slide.get_input("timezone");
$timezone.empty();
// add country specific timezones first
if(country){
- var timezone_list = erpnext.country_info[country].timezones || [];
+ var timezone_list = frappe.country_info[country].timezones || [];
$timezone.add_options(timezone_list.sort());
- slide.get_input("currency").val(erpnext.country_info[country].currency);
+ slide.get_input("currency").val(frappe.country_info[country].currency);
}
// add all timezones at the end, so that user has the option to change it to any timezone
- $timezone.add_options([""].concat(erpnext.all_timezones));
-
+ $timezone.add_options([""].concat(frappe.all_timezones));
+
// get country specific chart of accounts
- frappe.call({
- method: "erpnext.accounts.doctype.chart_of_accounts.chart_of_accounts.get_charts_for_country",
- args: {"country": country},
- callback: function(r) {
- if(r.message)
- slide.get_input("chart_of_accounts").empty()
- .add_options([""].concat(r.message));
- }
- })
+ // frappe.call({
+ // method: "erpnext.accounts.doctype.chart_of_accounts.chart_of_accounts.get_charts_for_country",
+ // args: {"country": country},
+ // callback: function(r) {
+ // if(r.message)
+ // slide.get_input("chart_of_accounts").empty()
+ // .add_options([""].concat(r.message));
+ // }
+ // })
});
}
},
-
+
// Logo
{
icon: "icon-bookmark",
title: __("Logo and Letter Heads"),
help: __('Upload your letter head and logo - you can edit them later.'),
fields: [
- {fieldtype:"Attach Image", fieldname:"attach_letterhead", label:"Attach Letterhead..."},
- {fieldtype:"Attach Image", fieldname:"attach_logo", label:"Attach Logo..."},
+ {fieldtype:"Attach Image", fieldname:"attach_letterhead", label: __("Attach Letterhead")},
+ {fieldtype:"Attach Image", fieldname:"attach_logo", label:__("Attach Logo")},
],
},
-
+
// Taxes
{
icon: "icon-money",
@@ -202,7 +230,7 @@
"help": __("List a few of your customers. They could be organizations or individuals."),
"fields": [],
},
-
+
// Items to Sell
{
icon: "icon-barcode",
@@ -229,39 +257,39 @@
]
}
-
+
// taxes
for(var i=1; i<4; i++) {
- wizard_settings.slides[4].fields = wizard_settings.slides[4].fields.concat([
- {fieldtype:"Data", fieldname:"tax_"+ i, label:"Tax " + 1, placeholder:"e.g. VAT"},
+ wizard_settings.slides[5].fields = wizard_settings.slides[5].fields.concat([
+ {fieldtype:"Data", fieldname:"tax_"+ i, label:__("Tax") + " " + i, placeholder:__("e.g. VAT")},
{fieldtype:"Column Break"},
- {fieldtype:"Data", fieldname:"tax_rate_i", label:"Rate (%)", placeholder:"e.g. 5"},
+ {fieldtype:"Data", fieldname:"tax_rate_i", label:__("Rate (%)"), placeholder:__("e.g. 5")},
{fieldtype:"Section Break"},
])
}
-
+
// customers
for(var i=1; i<6; i++) {
- wizard_settings.slides[5].fields = wizard_settings.slides[5].fields.concat([
- {fieldtype:"Data", fieldname:"customer_" + i, label:"Customer " + i,
- placeholder:"Customer Name"},
+ wizard_settings.slides[6].fields = wizard_settings.slides[6].fields.concat([
+ {fieldtype:"Data", fieldname:"customer_" + i, label:__("Customer") + " " + i,
+ placeholder:__("Customer Name")},
{fieldtype:"Column Break"},
- {fieldtype:"Data", fieldname:"customer_contact_" + i,
- label:"Contact", placeholder:"Contact Name"},
+ {fieldtype:"Data", fieldname:"customer_contact_" + i,
+ label:__("Contact"), placeholder:__("Contact Name")},
{fieldtype:"Section Break"}
])
}
-
+
// products
for(var i=1; i<6; i++) {
- wizard_settings.slides[6].fields = wizard_settings.slides[6].fields.concat([
- {fieldtype:"Data", fieldname:"item_" + i, label:"Item " + i,
- placeholder:"A Product or Service"},
+ wizard_settings.slides[7].fields = wizard_settings.slides[7].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:"Attach", fieldname:"item_img_" + i, label:__("Attach Image")},
{fieldtype:"Section Break"},
{fieldtype:"Column Break"},
- {fieldtype:"Select", label:"Group", fieldname:"item_group_" + i,
+ {fieldtype:"Select", label:"Group", fieldname:"item_group_" + i,
options:["Products", "Services", "Raw Material", "Sub Assemblies"]},
{fieldtype:"Column Break"},
{fieldtype:"Select", fieldname:"item_uom_" + i, label:"UOM",
@@ -271,32 +299,32 @@
}
for(var i=1; i<6; i++) {
- wizard_settings.slides[7].fields = wizard_settings.slides[7].fields.concat([
- {fieldtype:"Data", fieldname:"supplier_" + i, label:"Supplier " + i,
+ wizard_settings.slides[8].fields = wizard_settings.slides[8].fields.concat([
+ {fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i,
placeholder:"Supplier Name"},
{fieldtype:"Column Break"},
- {fieldtype:"Data", fieldname:"supplier_contact_" + i,
- label:"Contact", placeholder:"Contact Name"},
+ {fieldtype:"Data", fieldname:"supplier_contact_" + i,
+ label:"Contact", placeholder:__("Contact Name")},
{fieldtype:"Section Break"}
])
}
for(var i=1; i<6; i++) {
- wizard_settings.slides[8].fields = wizard_settings.slides[8].fields.concat([
- {fieldtype:"Data", fieldname:"item_buy_" + i, label:"Item " + i,
- placeholder:"A Product or Service"},
+ wizard_settings.slides[9].fields = wizard_settings.slides[9].fields.concat([
+ {fieldtype:"Data", fieldname:"item_buy_" + i, label: __("Item") + " " + i,
+ placeholder:__("A Product or Service")},
{fieldtype:"Column Break"},
{fieldtype:"Section Break"},
{fieldtype:"Column Break"},
- {fieldtype:"Select", fieldname:"item_buy_group_" + i, label: "Group",
+ {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",
+ {fieldtype:"Select", fieldname:"item_buy_uom_" + i, label: __("UOM"),
options:["Unit", "Nos", "Box", "Pair", "Kg", "Set", "Hour", "Minute"]},
{fieldtype:"Section Break"},
])
}
-
+
erpnext.wiz = new frappe.wiz.Wizard(wizard_settings)
}
@@ -310,9 +338,16 @@
frappe.wiz.Wizard = Class.extend({
init: function(opts) {
$.extend(this, opts);
+ this.make();
this.slides = this.slides;
this.slide_dict = {};
- this.show_welcome();
+ //this.show_welcome();
+ this.welcomed = true;
+ frappe.set_route(this.page_name, "0");
+ },
+ make: function() {
+ frappe.ui.set_user_background(null, "#page-setup-wizard");
+ this.parent = $('<div class="setup-wizard-wrapper">').appendTo(this.parent);
},
get_message: function(html) {
return $(repl('<div class="panel panel-default">\
@@ -320,19 +355,19 @@
</div>', {html:html}))
},
show_welcome: function() {
- if(this.$welcome)
+ if(this.$welcome)
return;
var me = this;
- this.$welcome = this.get_message(this.welcome_html +
+ this.$welcome = this.get_message(this.welcome_html +
'<br><p class="text-center"><button class="btn btn-primary">'+__("Start")+'</button></p>')
.appendTo(this.parent);
-
+
this.$welcome.find(".btn").click(function() {
me.$welcome.toggle(false);
me.welcomed = true;
frappe.set_route(me.page_name, "0");
})
-
+
this.current_slide = {"$wrapper": this.$welcome};
},
show_working: function() {
@@ -350,15 +385,15 @@
return;
}
id = cint(id);
- if(this.current_slide && this.current_slide.id===id)
+ if(this.current_slide && this.current_slide.id===id)
return;
if(!this.slide_dict[id]) {
this.slide_dict[id] = new frappe.wiz.WizardSlide($.extend(this.slides[id], {wiz:this, id:id}));
this.slide_dict[id].make();
}
-
+
this.hide_current_slide();
-
+
this.current_slide = this.slide_dict[id];
this.current_slide.$wrapper.toggle(true);
},
@@ -380,40 +415,42 @@
frappe.wiz.WizardSlide = Class.extend({
init: function(opts) {
$.extend(this, opts);
+ this.$wrapper = $("<div>").appendTo(this.wiz.parent);
},
make: function() {
var me = this;
- this.$wrapper = $(repl('<div class="panel panel-default">\
+ if(this.$body) this.$body.remove();
+ this.$body = $(repl('<div class="panel panel-default">\
<div class="panel-heading">\
<div class="panel-title row">\
- <div class="col-sm-8"><h3 style="margin: 0px;">\
+ <div class="col-sm-12"><h3 style="margin: 0px;">\
<i class="%(icon)s text-muted"></i> %(title)s</h3></div>\
- <div class="col-sm-4 text-right"><a class="prev-btn hide btn btn-default">Previous</a> \
- <a class="next-btn hide btn btn-primary">Next</a> \
- <a class="complete-btn hide btn btn-primary"><b>Complete Setup</b></a>\
- </div>\
</div>\
</div>\
<div class="panel-body">\
<div class="progress">\
<div class="progress-bar" style="width: %(width)s%"></div>\
</div>\
- <br>\
<div class="row">\
- <div class="col-sm-8 form"></div>\
- <div class="col-sm-4 help">\
- <p class="text-muted">%(help)s</p>\
+ <div class="col-sm-12">\
+ <p class="text-muted">%(help)s</p><br>\
+ <div class="form"></div>\
</div>\
</div>\
<hr>\
- <div class="footer"></div>\
+ <div class="footer">\
+ <div class="text-right"><a class="prev-btn hide btn btn-default">Previous</a> \
+ <a class="next-btn hide btn btn-primary">'+__("Next")+'</a> \
+ <a class="complete-btn hide btn btn-primary"><b>'+__("Complete Setup")+'</b></a>\
+ </div>\
+ </div>\
</div>\
- </div>', {help:this.help, title:this.title, main_title:this.wiz.title, step: this.id + 1,
+ </div>', {help: __(this.help), title:__(this.title), main_title:__(this.wiz.title), step: this.id + 1,
width: (flt(this.id + 1) / (this.wiz.slides.length+1)) * 100, icon:this.icon}))
- .appendTo(this.wiz.parent);
-
- this.body = this.$wrapper.find(".form")[0];
-
+ .appendTo(this.$wrapper);
+
+ this.body = this.$body.find(".form")[0];
+
if(this.fields) {
this.form = new frappe.ui.FieldGroup({
fields: this.fields,
@@ -424,32 +461,32 @@
} else {
$(this.body).html(this.html)
}
-
+
if(this.id > 0) {
- this.$prev = this.$wrapper.find('.prev-btn').removeClass("hide")
- .click(function() {
- frappe.set_route(me.wiz.page_name, me.id-1 + "");
+ this.$prev = this.$body.find('.prev-btn').removeClass("hide")
+ .click(function() {
+ frappe.set_route(me.wiz.page_name, me.id-1 + "");
})
.css({"margin-right": "10px"});
}
if(this.id+1 < this.wiz.slides.length) {
- this.$next = this.$wrapper.find('.next-btn').removeClass("hide")
- .click(function() {
+ this.$next = this.$body.find('.next-btn').removeClass("hide")
+ .click(function() {
me.values = me.form.get_values();
- if(me.values===null)
+ if(me.values===null)
return;
- frappe.set_route(me.wiz.page_name, me.id+1 + "");
+ frappe.set_route(me.wiz.page_name, me.id+1 + "");
})
} else {
- this.$complete = this.$wrapper.find('.complete-btn').removeClass("hide")
- .click(function() {
+ this.$complete = this.$body.find('.complete-btn').removeClass("hide")
+ .click(function() {
me.values = me.form.get_values();
- if(me.values===null)
+ if(me.values===null)
return;
- me.wiz.on_complete(me.wiz);
+ me.wiz.on_complete(me.wiz);
})
}
-
+
if(this.onload) {
this.onload(this);
}
@@ -458,4 +495,4 @@
get_input: function(fn) {
return this.form.get_input(fn);
}
-})
\ No newline at end of file
+})
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index a2fb7d7..863f6f8 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -2,11 +2,12 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
-import frappe, json, base64
+import frappe, json
-from frappe.utils import cint, cstr, getdate, now, nowdate, get_defaults
-from frappe import _
+from frappe.utils import cstr, getdate
from frappe.utils.file_manager import save_file
+from frappe.translate import set_default_language, get_dict, get_lang_dict
+from frappe.country_info import get_country_info
@frappe.whitelist()
def setup_account(args=None):
@@ -19,27 +20,50 @@
args = json.loads(args)
args = frappe._dict(args)
+ if args.language != "english":
+ set_default_language(args.language)
+
update_user_name(args)
+ frappe.local.message_log = []
+
create_fiscal_year_and_company(args)
+ frappe.local.message_log = []
+
set_defaults(args)
+ frappe.local.message_log = []
+
create_territories()
+ frappe.local.message_log = []
+
create_price_lists(args)
+ frappe.local.message_log = []
+
create_feed_and_todo()
+ frappe.local.message_log = []
+
create_email_digest()
+ frappe.local.message_log = []
+
create_letter_head(args)
+ frappe.local.message_log = []
+
create_taxes(args)
+ frappe.local.message_log = []
+
create_items(args)
+ frappe.local.message_log = []
+
create_customers(args)
+ frappe.local.message_log = []
+
create_suppliers(args)
+ frappe.local.message_log = []
+
frappe.db.set_default('desktop:home_page', 'desktop')
frappe.clear_cache()
frappe.db.commit()
- # suppress msgprints
- frappe.local.message_log = []
-
- return "okay"
def update_user_name(args):
if args.get("email"):
@@ -116,13 +140,23 @@
'current_fiscal_year': args.curr_fiscal_year,
'default_currency': args.get('currency'),
'default_company':args.get('company_name'),
- 'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
- "float_precision": 3,
"country": args.get("country"),
- "time_zone": args.get("time_zone")
})
+
global_defaults.save()
+ system_settings = frappe.get_doc("System Settings", "System Settings")
+ system_settings.update({
+ "language": args.get("language"),
+ "time_zone": args.get("timezone"),
+ "float_precision": 3,
+ 'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
+ 'number_format': get_country_info(args.get("country")).get("number_format", "#,###.##"),
+ })
+
+ system_settings.save()
+
+
accounts_settings = frappe.get_doc("Accounts Settings")
accounts_settings.auto_accounting_for_stock = 1
accounts_settings.save()
@@ -317,7 +351,7 @@
def create_letter_head(args):
if args.get("attach_letterhead"):
- lh = frappe.get_doc({
+ frappe.get_doc({
"doctype":"Letter Head",
"letter_head_name": "Standard",
"is_default": 1
@@ -348,3 +382,13 @@
"parent_territory": root_territory,
"is_group": "No"
}).insert()
+
+@frappe.whitelist()
+def load_messages(language):
+ lang = get_lang_dict()[language]
+ frappe.local.lang = lang
+ m = get_dict("page", "setup-wizard")
+ m.update(get_dict("boot"))
+ frappe.local.response["__messages"] = m
+ return lang
+