From 37b4d75e4a78690e5cb714f09b1fdad78251cc1f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 9 Nov 2015 16:53:11 +0530 Subject: [PATCH] [re-org] setup wizard in frappe --- erpnext/hooks.py | 5 +- erpnext/public/js/setup_wizard.js | 415 ++++++++++ erpnext/setup/install.py | 3 +- .../page/setup_wizard/fixtures/__init__.py | 0 .../page/setup_wizard/fixtures/operations.py | 167 ---- .../setup/page/setup_wizard/setup_wizard.css | 70 -- .../setup/page/setup_wizard/setup_wizard.js | 710 ------------------ .../setup/page/setup_wizard/setup_wizard.json | 19 - .../setup_wizard/setup_wizard_message.html | 7 - .../page/setup_wizard/setup_wizard_page.html | 21 - .../setup/{page => }/setup_wizard/__init__.py | 0 .../setup_wizard/data/sample_blog_post.html | 0 .../setup_wizard/data/sample_home_page.css | 0 .../setup_wizard/data/sample_home_page.html | 0 .../setup_wizard/default_website.py | 6 +- .../industry_type.py | 0 .../setup_wizard/install_fixtures.py | 2 +- .../{page => }/setup_wizard/sample_data.py | 0 .../{page => }/setup_wizard/setup_wizard.py | 149 +--- .../setup_wizard/test_setup_data.py | 0 .../setup_wizard/test_setup_wizard.py | 6 +- erpnext/setup/utils.py | 4 +- 22 files changed, 465 insertions(+), 1119 deletions(-) create mode 100644 erpnext/public/js/setup_wizard.js delete mode 100644 erpnext/setup/page/setup_wizard/fixtures/__init__.py delete mode 100644 erpnext/setup/page/setup_wizard/fixtures/operations.py delete mode 100644 erpnext/setup/page/setup_wizard/setup_wizard.css delete mode 100644 erpnext/setup/page/setup_wizard/setup_wizard.js delete mode 100644 erpnext/setup/page/setup_wizard/setup_wizard.json delete mode 100644 erpnext/setup/page/setup_wizard/setup_wizard_message.html delete mode 100644 erpnext/setup/page/setup_wizard/setup_wizard_page.html rename erpnext/setup/{page => }/setup_wizard/__init__.py (100%) rename erpnext/setup/{page => }/setup_wizard/data/sample_blog_post.html (100%) rename erpnext/setup/{page => }/setup_wizard/data/sample_home_page.css (100%) rename erpnext/setup/{page => }/setup_wizard/data/sample_home_page.html (100%) rename erpnext/setup/{page => }/setup_wizard/default_website.py (90%) rename erpnext/setup/{page/setup_wizard/fixtures => setup_wizard}/industry_type.py (100%) rename erpnext/setup/{page => }/setup_wizard/install_fixtures.py (99%) rename erpnext/setup/{page => }/setup_wizard/sample_data.py (100%) rename erpnext/setup/{page => }/setup_wizard/setup_wizard.py (85%) rename erpnext/setup/{page => }/setup_wizard/test_setup_data.py (100%) rename erpnext/setup/{page => }/setup_wizard/test_setup_wizard.py (69%) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 6b92117c79..74fcd58b3e 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -41,6 +41,10 @@ app_include_css = "assets/css/erpnext.css" web_include_js = "assets/js/erpnext-web.min.js" web_include_css = "assets/erpnext/css/website.css" +# setup wizard +setup_wizard_requires = "assets/erpnext/js/setup_wizard.js" +setup_wizard_complete = "erpnext.setup.setup_wizard.setup_wizard.setup_complete" + after_install = "erpnext.setup.install.after_install" boot_session = "erpnext.startup.boot.boot_session" @@ -150,6 +154,5 @@ default_mail_footer = """
""" get_translated_dict = { - ("page", "setup-wizard"): "frappe.geo.country_info.get_translated_dict", ("doctype", "Global Defaults"): "frappe.geo.country_info.get_translated_dict" } diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js new file mode 100644 index 0000000000..e877737629 --- /dev/null +++ b/erpnext/public/js/setup_wizard.js @@ -0,0 +1,415 @@ +frappe.provide("erpnext.wiz"); + +frappe.pages['setup-wizard'].on_page_load = function(wrapper) { + if(sys_defaults.company) { + frappe.set_route("desk"); + return; + } +} + +$.extend(erpnext.wiz, { + region: { + title: __("Region"), + icon: "icon-flag", + help: __("Select your Country, Time Zone and Currency"), + fields: [ + { fieldname: "country", label: __("Country"), reqd:1, + fieldtype: "Select" }, + { fieldname: "timezone", label: __("Time Zone"), reqd:1, + fieldtype: "Select" }, + { fieldname: "currency", label: __("Currency"), reqd:1, + fieldtype: "Select" }, + ], + + onload: function(slide) { + frappe.call({ + method:"frappe.geo.country_info.get_country_timezone_info", + callback: function(data) { + erpnext.wiz.region.data = data.message; + erpnext.wiz.region.setup_fields(slide); + erpnext.wiz.region.bind_events(slide); + } + }); + }, + css_class: "single-column", + setup_fields: function(slide) { + var data = erpnext.wiz.region.data; + + slide.get_input("country").empty() + .add_options([""].concat(keys(data.country_info).sort())); + + slide.get_input("currency").empty() + .add_options(frappe.utils.unique([""].concat($.map(data.country_info, + function(opts, country) { return opts.currency; }))).sort()); + + slide.get_input("timezone").empty() + .add_options([""].concat(data.all_timezones)); + + if (data.default_country) { + slide.set_input("country", data.default_country); + } + }, + + bind_events: function(slide) { + slide.get_input("country").on("change", function() { + var country = slide.get_input("country").val(); + var $timezone = slide.get_input("timezone"); + var data = erpnext.wiz.region.data; + + $timezone.empty(); + + // add country specific timezones first + if(country) { + var timezone_list = data.country_info[country].timezones || []; + $timezone.add_options(timezone_list.sort()); + slide.get_field("currency").set_input(data.country_info[country].currency); + slide.get_field("currency").$input.trigger("change"); + } + + // add all timezones at the end, so that user has the option to change it to any timezone + $timezone.add_options([""].concat(data.all_timezones)); + + slide.get_field("timezone").set_input($timezone.val()); + + // temporarily set date format + frappe.boot.sysdefaults.date_format = (data.country_info[country].date_format + || "dd-mm-yyyy"); + }); + + slide.get_input("currency").on("change", function() { + var currency = slide.get_input("currency").val(); + if (!currency) return; + frappe.model.with_doc("Currency", currency, function() { + frappe.provide("locals.:Currency." + currency); + var currency_doc = frappe.model.get_doc("Currency", currency); + var number_format = currency_doc.number_format; + if (number_format==="#.###") { + number_format = "#.###,##"; + } else if (number_format==="#,###") { + number_format = "#,###.##" + } + + frappe.boot.sysdefaults.number_format = number_format; + locals[":Currency"][currency] = $.extend({}, currency_doc); + }); + }); + } + }, + + user: { + title: __("The First User: You"), + icon: "icon-user", + fields: [ + {"fieldname": "first_name", "label": __("First Name"), "fieldtype": "Data", + reqd:1}, + {"fieldname": "last_name", "label": __("Last Name"), "fieldtype": "Data"}, + {"fieldname": "email", "label": __("Email Address"), "fieldtype": "Data", + reqd:1, "description": __("You will use it to Login"), "options":"Email"}, + {"fieldname": "password", "label": __("Password"), "fieldtype": "Password", + reqd:1}, + {fieldtype:"Attach Image", fieldname:"attach_user", + label: __("Attach Your Picture")}, + ], + help: __('The first user will become the System Manager (you can change this later).'), + onload: function(slide) { + if(user!=="Administrator") { + slide.form.fields_dict.password.$wrapper.toggle(false); + 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); + + var user_image = frappe.get_cookie("user_image"); + if(user_image) { + var $attach_user = slide.form.fields_dict.attach_user.$wrapper; + $attach_user.find(".missing-image").toggle(false); + $attach_user.find("img").attr("src", decodeURIComponent(user_image)).toggle(true); + } + + delete slide.form.fields_dict.email; + delete slide.form.fields_dict.password; + } + }, + css_class: "single-column" + }, + + org: { + title: __("The Organization"), + icon: "icon-building", + fields: [ + {fieldname:'company_name', label: __('Company Name'), fieldtype:'Data', reqd:1, + placeholder: __('e.g. "My Company LLC"')}, + {fieldname:'company_abbr', label: __('Company Abbreviation'), fieldtype:'Data', + description: __('Max 5 characters'), placeholder: __('e.g. "MC"'), reqd:1}, + {fieldname:'company_tagline', label: __('What does it do?'), fieldtype:'Data', + placeholder:__('e.g. "Build tools for builders"'), reqd:1}, + {fieldname:'bank_account', label: __('Bank Account'), fieldtype:'Data', + placeholder: __('e.g. "XYZ National Bank"'), reqd:1 }, + {fieldname:'chart_of_accounts', label: __('Chart of Accounts'), + options: "", fieldtype: 'Select'}, + + // TODO remove this + {fieldtype: "Section Break"}, + {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}, + ], + help: __('The name of your company for which you are setting up this system.'), + + onload: function(slide) { + erpnext.wiz.org.load_chart_of_accounts(slide); + erpnext.wiz.org.bind_events(slide); + erpnext.wiz.org.set_fy_dates(slide); + }, + + css_class: "single-column", + + set_fy_dates: function(slide) { + var country = slide.wiz.get_values().country; + + if(country) { + var fy = erpnext.wiz.fiscal_years[country]; + var current_year = moment(new Date()).year(); + var next_year = current_year + 1; + if(!fy) { + fy = ["01-01", "12-31"]; + next_year = current_year; + } + + slide.get_field("fy_start_date").set_input(current_year + "-" + fy[0]); + slide.get_field("fy_end_date").set_input(next_year + "-" + fy[1]); + } + + }, + + load_chart_of_accounts: function(slide) { + var country = slide.wiz.get_values().country; + + if(country) { + frappe.call({ + method: "erpnext.accounts.doctype.account.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(r.message); + + if (r.message.length===1) { + var field = slide.get_field("chart_of_accounts"); + field.set_value(r.message[0]); + field.df.hidden = 1; + field.refresh(); + } + } + } + }) + } + }, + + bind_events: function(slide) { + slide.get_input("company_name").on("change", function() { + var parts = slide.get_input("company_name").val().split(" "); + var abbr = $.map(parts, function(p) { return p ? p.substr(0,1) : null }).join(""); + slide.get_field("company_abbr").set_input(abbr.slice(0, 5).toUpperCase()); + }).val(frappe.boot.sysdefaults.company_name || "").trigger("change"); + + slide.get_input("company_abbr").on("change", function() { + if(slide.get_input("company_abbr").val().length > 5) { + msgprint("Company Abbreviation cannot have more than 5 characters"); + slide.get_field("company_abbr").set_input(""); + } + }); + + // TODO remove this + slide.get_input("fy_start_date").on("change", function() { + 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)); + + }); + } + }, + + branding: { + icon: "icon-bookmark", + title: __("The Brand"), + help: __('Upload your letter head and logo. (you can edit them later).'), + fields: [ + {fieldtype:"Attach Image", fieldname:"attach_letterhead", + label: __("Attach Letterhead"), + description: __("Keep it web friendly 900px (w) by 100px (h)") + }, + {fieldtype: "Column Break"}, + {fieldtype:"Attach Image", fieldname:"attach_logo", + label:__("Attach Logo"), + description: __("100px by 100px")}, + ], + + css_class: "two-column" + }, + + users: { + icon: "icon-money", + "title": __("Add Users"), + "help": __("Add users to your organization, other than yourself"), + "fields": [], + before_load: function(slide) { + slide.fields = []; + for(var i=1; i<5; i++) { + slide.fields = slide.fields.concat([ + {fieldtype:"Section Break"}, + {fieldtype:"Data", fieldname:"user_fullname_"+ i, + label:__("Full Name")}, + {fieldtype:"Data", fieldname:"user_email_" + i, + label:__("Email ID"), placeholder:__("user@example.com"), + options: "Email"}, + {fieldtype:"Column Break"}, + {fieldtype: "Check", fieldname: "user_sales_" + i, + label:__("Sales"), default: 1}, + {fieldtype: "Check", fieldname: "user_purchaser_" + i, + label:__("Purchaser"), default: 1}, + {fieldtype: "Check", fieldname: "user_accountant_" + i, + label:__("Accountant"), default: 1}, + ]); + } + }, + css_class: "two-column" + }, + + taxes: { + icon: "icon-money", + "title": __("Add Taxes"), + "help": __("List your tax heads (e.g. VAT, Customs etc; 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) { + slide.fields = []; + for(var i=1; i<4; i++) { + slide.fields = slide.fields.concat([ + {fieldtype:"Section Break"}, + {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")}, + ]); + } + }, + css_class: "two-column" + }, + + customers: { + icon: "icon-group", + "title": __("Your Customers"), + "help": __("List a few of your customers. They could be organizations or individuals."), + "fields": [], + before_load: function(slide) { + slide.fields = []; + for(var i=1; i<6; i++) { + slide.fields = slide.fields.concat([ + {fieldtype:"Section Break"}, + {fieldtype:"Data", fieldname:"customer_" + i, label:__("Customer") + " " + i, + placeholder:__("Customer Name")}, + {fieldtype:"Column Break"}, + {fieldtype:"Data", fieldname:"customer_contact_" + i, + label:__("Contact Name") + " " + i, placeholder:__("Contact Name")} + ]) + } + slide.fields[1].reqd = 1; + }, + css_class: "two-column" + }, + + suppliers: { + icon: "icon-group", + "title": __("Your Suppliers"), + "help": __("List a few of your suppliers. They could be organizations or individuals."), + "fields": [], + before_load: function(slide) { + slide.fields = []; + for(var i=1; i<6; i++) { + slide.fields = slide.fields.concat([ + {fieldtype:"Section Break"}, + {fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i, + placeholder:__("Supplier Name")}, + {fieldtype:"Column Break"}, + {fieldtype:"Data", fieldname:"supplier_contact_" + i, + label:__("Contact Name") + " " + i, placeholder:__("Contact Name")}, + ]) + } + slide.fields[1].reqd = 1; + }, + css_class: "two-column" + }, + + items: { + icon: "icon-barcode", + "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) { + slide.fields = []; + for(var i=1; i<6; i++) { + slide.fields = slide.fields.concat([ + {fieldtype:"Section Break", show_section_border: true}, + {fieldtype:"Data", fieldname:"item_" + i, label:__("Item") + " " + i, + placeholder:__("A Product or Service")}, + {fieldtype:"Select", label:__("Group"), fieldname:"item_group_" + i, + options:[__("Products"), __("Services"), + __("Raw Material"), __("Consumable"), __("Sub Assemblies")], + "default": __("Products")}, + {fieldtype:"Select", fieldname:"item_uom_" + i, label:__("UOM"), + options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), + __("Hour"), __("Minute")], + "default": __("Unit")}, + {fieldtype: "Check", fieldname: "is_sales_item_" + i, label:__("We sell this Item"), default: 1}, + {fieldtype: "Check", fieldname: "is_purchase_item_" + i, label:__("We buy this Item")}, + {fieldtype:"Column Break"}, + {fieldtype:"Currency", fieldname:"item_price_" + i, label:__("Rate")}, + {fieldtype:"Attach Image", fieldname:"item_img_" + i, label:__("Attach Image")}, + ]) + } + slide.fields[1].reqd = 1; + + // dummy data + slide.fields.push({fieldtype: "Section Break"}); + slide.fields.push({fieldtype: "Check", fieldname: "add_sample_data", + label: __("Add a few sample records"), "default": 1}); + }, + css_class: "two-column" + }, +}); + +// Source: https://en.wikipedia.org/wiki/Fiscal_year +// default 1st Jan - 31st Dec + +erpnext.wiz.fiscal_years = { + "Afghanistan": ["12-20", "12-21"], + "Australia": ["07-01", "06-30"], + "Bangladesh": ["07-01", "06-30"], + "Canada": ["04-01", "03-31"], + "Costa Rica": ["10-01", "09-30"], + "Egypt": ["07-01", "06-30"], + "Hong Kong": ["04-01", "03-31"], + "India": ["04-01", "03-31"], + "Iran": ["06-23", "06-22"], + "Italy": ["07-01", "06-30"], + "Myanmar": ["04-01", "03-31"], + "New Zealand": ["04-01", "03-31"], + "Pakistan": ["07-01", "06-30"], + "Singapore": ["04-01", "03-31"], + "South Africa": ["03-01", "02-28"], + "Thailand": ["10-01", "09-30"], + "United Kingdom": ["04-01", "03-31"], +} + +frappe.wiz.on("before_load", function() { + frappe.wiz.add_slide(erpnext.wiz.user); + frappe.wiz.add_slide(erpnext.wiz.org); + frappe.wiz.add_slide(erpnext.wiz.branding); + frappe.wiz.add_slide(erpnext.wiz.users); + frappe.wiz.add_slide(erpnext.wiz.taxes); + frappe.wiz.add_slide(erpnext.wiz.customers); + frappe.wiz.add_slide(erpnext.wiz.suppliers); + frappe.wiz.add_slide(erpnext.wiz.items); + frappe.wiz.welcome_page = "#welcome-to-erpnext"; +}); diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index a1bcc16b0c..dcb6eb3111 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -11,9 +11,8 @@ default_mail_footer = """
').appendTo(this.parent); - }, - get_message: function(html) { - return $(repl('
\ -
%(html)s
\ -
', {html:html})) - }, - show_working: function() { - this.hide_current_slide(); - frappe.set_route(this.page_name); - this.current_slide = {"$wrapper": this.get_message(this.working_html()).appendTo(this.parent)}; - }, - show_complete: function() { - this.hide_current_slide(); - this.current_slide = {"$wrapper": this.get_message(this.complete_html()).appendTo(this.parent)}; - }, - show: function(id) { - if(!this.welcomed) { - frappe.set_route(this.page_name); - return; - } - id = cint(id); - if(this.current_slide && this.current_slide.id===id) - return; - if(!this.slide_dict[id]) { - this.slide_dict[id] = new erpnext.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.removeClass("hidden"); - }, - hide_current_slide: function() { - if(this.current_slide) { - this.current_slide.$wrapper.addClass("hidden"); - this.current_slide = null; - } - }, - get_values: function() { - var values = {}; - $.each(this.slide_dict, function(id, slide) { - $.extend(values, slide.values) - }) - return values; - } -}); - -erpnext.wiz.WizardSlide = Class.extend({ - init: function(opts) { - $.extend(this, opts); - this.$wrapper = $('') - .appendTo(this.wiz.parent) - .attr("data-slide-id", this.id); - }, - make: function() { - var me = this; - if(this.$body) this.$body.remove(); - - if(this.before_load) { - this.before_load(this); - } - - this.$body = $(frappe.render_template("setup_wizard_page", { - help: __(this.help), - title:__(this.title), - main_title:__(this.wiz.title), - step: this.id + 1, - name: this.name, - css_class: this.css_class || "", - slides_count: this.wiz.slides.length - })).appendTo(this.$wrapper); - - this.body = this.$body.find(".form")[0]; - - if(this.fields) { - this.form = new frappe.ui.FieldGroup({ - fields: this.fields, - body: this.body, - no_submit_on_enter: true - }); - this.form.make(); - } else { - $(this.body).html(this.html); - } - - if(this.id > 0) { - 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.$body.find('.next-btn').removeClass("hide") - .click(function() { - 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 { - this.$complete = this.$body.find('.complete-btn').removeClass("hide") - .click(function() { - me.values = me.form.get_values(); - if(me.values===null) - return; - if(me.validate && !me.validate()) - return; - me.wiz.on_complete(me.wiz); - }) - } - - if(this.onload) { - this.onload(this); - } - - }, - get_input: function(fn) { - return this.form.get_input(fn); - }, - get_field: function(fn) { - return this.form.get_field(fn); - } -}); - -$.extend(erpnext.wiz, { - welcome: { - slide: { - name: "welcome", - title: __("Welcome to ERPNext"), - icon: "icon-world", - help: __("Let's prepare the system for first use."), - - fields: [ - { fieldname: "language", label: __("Select Your Language"), reqd:1, - fieldtype: "Select" }, - ], - - onload: function(slide) { - if (!erpnext.wiz.welcome.data) { - erpnext.wiz.welcome.load_languages(slide); - } else { - erpnext.wiz.welcome.setup_fields(slide); - } - }, - - css_class: "single-column" - }, - - load_languages: function(slide) { - frappe.call({ - method: "erpnext.setup.page.setup_wizard.setup_wizard.load_languages", - callback: function(r) { - erpnext.wiz.welcome.data = r.message; - erpnext.wiz.welcome.setup_fields(slide); - - slide.get_field("language") - .set_input(erpnext.wiz.welcome.data.default_language || "english"); - moment.locale("en"); - } - }); - }, - - setup_fields: function(slide) { - var select = slide.get_field("language"); - select.df.options = erpnext.wiz.welcome.data.languages; - select.refresh(); - erpnext.wiz.welcome.bind_events(slide); - }, - - bind_events: function(slide) { - slide.get_input("language").unbind("change").on("change", function() { - var lang = $(this).val() || "english"; - frappe._messages = {}; - frappe.call({ - method: "erpnext.setup.page.setup_wizard.setup_wizard.load_messages", - args: { - language: lang - }, - callback: function(r) { - // TODO save values! - - // re-render all slides - $.each(slide.wiz.slide_dict, function(key, s) { - s.make(); - }); - - // select is re-made after language change - var select = slide.get_field("language"); - select.set_input(lang); - } - }) - }); - }, - }, - - region: { - slide: { - title: __("Region"), - icon: "icon-flag", - help: __("Select your Country, Time Zone and Currency"), - fields: [ - { fieldname: "country", label: __("Country"), reqd:1, - fieldtype: "Select" }, - { fieldname: "timezone", label: __("Time Zone"), reqd:1, - fieldtype: "Select" }, - { fieldname: "currency", label: __("Currency"), reqd:1, - fieldtype: "Select" }, - ], - - onload: function(slide) { - frappe.call({ - method:"frappe.geo.country_info.get_country_timezone_info", - callback: function(data) { - erpnext.wiz.region.data = data.message; - erpnext.wiz.region.setup_fields(slide); - erpnext.wiz.region.bind_events(slide); - } - }); - }, - - css_class: "single-column" - }, - - setup_fields: function(slide) { - var data = erpnext.wiz.region.data; - - slide.get_input("country").empty() - .add_options([""].concat(keys(data.country_info).sort())); - - slide.get_input("currency").empty() - .add_options(frappe.utils.unique([""].concat($.map(data.country_info, - function(opts, country) { return opts.currency; }))).sort()); - - slide.get_input("timezone").empty() - .add_options([""].concat(data.all_timezones)); - - if (data.default_country) { - slide.set_input("country", data.default_country); - } - }, - - bind_events: function(slide) { - slide.get_input("country").on("change", function() { - var country = slide.get_input("country").val(); - var $timezone = slide.get_input("timezone"); - var data = erpnext.wiz.region.data; - - $timezone.empty(); - - // add country specific timezones first - if(country) { - var timezone_list = data.country_info[country].timezones || []; - $timezone.add_options(timezone_list.sort()); - slide.get_field("currency").set_input(data.country_info[country].currency); - slide.get_field("currency").$input.trigger("change"); - } - - // add all timezones at the end, so that user has the option to change it to any timezone - $timezone.add_options([""].concat(data.all_timezones)); - - slide.get_field("timezone").set_input($timezone.val()); - - // temporarily set date format - frappe.boot.sysdefaults.date_format = (data.country_info[country].date_format - || "dd-mm-yyyy"); - }); - - slide.get_input("currency").on("change", function() { - var currency = slide.get_input("currency").val(); - if (!currency) return; - frappe.model.with_doc("Currency", currency, function() { - frappe.provide("locals.:Currency." + currency); - var currency_doc = frappe.model.get_doc("Currency", currency); - var number_format = currency_doc.number_format; - if (number_format==="#.###") { - number_format = "#.###,##"; - } else if (number_format==="#,###") { - number_format = "#,###.##" - } - - frappe.boot.sysdefaults.number_format = number_format; - locals[":Currency"][currency] = $.extend({}, currency_doc); - }); - }); - } - }, - - user: { - slide: { - title: __("The First User: You"), - icon: "icon-user", - fields: [ - {"fieldname": "first_name", "label": __("First Name"), "fieldtype": "Data", - reqd:1}, - {"fieldname": "last_name", "label": __("Last Name"), "fieldtype": "Data"}, - {"fieldname": "email", "label": __("Email Address"), "fieldtype": "Data", - reqd:1, "description": __("You will use it to Login"), "options":"Email"}, - {"fieldname": "password", "label": __("Password"), "fieldtype": "Password", - reqd:1}, - {fieldtype:"Attach Image", fieldname:"attach_user", - label: __("Attach Your Picture")}, - ], - help: __('The first user will become the System Manager (you can change this later).'), - onload: function(slide) { - if(user!=="Administrator") { - slide.form.fields_dict.password.$wrapper.toggle(false); - 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); - - var user_image = frappe.get_cookie("user_image"); - if(user_image) { - var $attach_user = slide.form.fields_dict.attach_user.$wrapper; - $attach_user.find(".missing-image").toggle(false); - $attach_user.find("img").attr("src", decodeURIComponent(user_image)).toggle(true); - } - - delete slide.form.fields_dict.email; - delete slide.form.fields_dict.password; - } - }, - css_class: "single-column" - }, - }, - - org: { - slide: { - title: __("The Organization"), - icon: "icon-building", - fields: [ - {fieldname:'company_name', label: __('Company Name'), fieldtype:'Data', reqd:1, - placeholder: __('e.g. "My Company LLC"')}, - {fieldname:'company_abbr', label: __('Company Abbreviation'), fieldtype:'Data', - description: __('Max 5 characters'), placeholder: __('e.g. "MC"'), reqd:1}, - {fieldname:'company_tagline', label: __('What does it do?'), fieldtype:'Data', - placeholder:__('e.g. "Build tools for builders"'), reqd:1}, - {fieldname:'bank_account', label: __('Bank Account'), fieldtype:'Data', - placeholder: __('e.g. "XYZ National Bank"'), reqd:1 }, - {fieldname:'chart_of_accounts', label: __('Chart of Accounts'), - options: "", fieldtype: 'Select'}, - - // TODO remove this - {fieldtype: "Section Break"}, - {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}, - ], - help: __('The name of your company for which you are setting up this system.'), - - onload: function(slide) { - erpnext.wiz.org.load_chart_of_accounts(slide); - erpnext.wiz.org.bind_events(slide); - erpnext.wiz.org.set_fy_dates(slide); - }, - - css_class: "single-column" - }, - - set_fy_dates: function(slide) { - var country = slide.wiz.get_values().country; - - if(country) { - var fy = erpnext.wiz.fiscal_years[country]; - var current_year = moment(new Date()).year(); - var next_year = current_year + 1; - if(!fy) { - fy = ["01-01", "12-31"]; - next_year = current_year; - } - - slide.get_field("fy_start_date").set_input(current_year + "-" + fy[0]); - slide.get_field("fy_end_date").set_input(next_year + "-" + fy[1]); - } - - }, - - load_chart_of_accounts: function(slide) { - var country = slide.wiz.get_values().country; - - if(country) { - frappe.call({ - method: "erpnext.accounts.doctype.account.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(r.message); - - if (r.message.length===1) { - var field = slide.get_field("chart_of_accounts"); - field.set_value(r.message[0]); - field.df.hidden = 1; - field.refresh(); - } - } - } - }) - } - }, - - bind_events: function(slide) { - slide.get_input("company_name").on("change", function() { - var parts = slide.get_input("company_name").val().split(" "); - var abbr = $.map(parts, function(p) { return p ? p.substr(0,1) : null }).join(""); - slide.get_field("company_abbr").set_input(abbr.slice(0, 5).toUpperCase()); - }).val(frappe.boot.sysdefaults.company_name || "").trigger("change"); - - slide.get_input("company_abbr").on("change", function() { - if(slide.get_input("company_abbr").val().length > 5) { - msgprint("Company Abbreviation cannot have more than 5 characters"); - slide.get_field("company_abbr").set_input(""); - } - }); - - // TODO remove this - slide.get_input("fy_start_date").on("change", function() { - 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)); - - }); - } - }, - - branding: { - slide: { - icon: "icon-bookmark", - title: __("The Brand"), - help: __('Upload your letter head and logo. (you can edit them later).'), - fields: [ - {fieldtype:"Attach Image", fieldname:"attach_letterhead", - label: __("Attach Letterhead"), - description: __("Keep it web friendly 900px (w) by 100px (h)") - }, - {fieldtype: "Column Break"}, - {fieldtype:"Attach Image", fieldname:"attach_logo", - label:__("Attach Logo"), - description: __("100px by 100px")}, - ], - - css_class: "two-column" - }, - }, - - users: { - slide: { - icon: "icon-money", - "title": __("Add Users"), - "help": __("Add users to your organization, other than yourself"), - "fields": [], - before_load: function(slide) { - slide.fields = []; - for(var i=1; i<5; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Section Break"}, - {fieldtype:"Data", fieldname:"user_fullname_"+ i, - label:__("Full Name")}, - {fieldtype:"Data", fieldname:"user_email_" + i, - label:__("Email ID"), placeholder:__("user@example.com"), - options: "Email"}, - {fieldtype:"Column Break"}, - {fieldtype: "Check", fieldname: "user_sales_" + i, - label:__("Sales"), default: 1}, - {fieldtype: "Check", fieldname: "user_purchaser_" + i, - label:__("Purchaser"), default: 1}, - {fieldtype: "Check", fieldname: "user_accountant_" + i, - label:__("Accountant"), default: 1}, - ]); - } - }, - css_class: "two-column" - }, - }, - - taxes: { - slide: { - icon: "icon-money", - "title": __("Add Taxes"), - "help": __("List your tax heads (e.g. VAT, Customs etc; 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) { - slide.fields = []; - for(var i=1; i<4; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Section Break"}, - {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")}, - ]); - } - }, - css_class: "two-column" - }, - }, - - customers: { - slide: { - icon: "icon-group", - "title": __("Your Customers"), - "help": __("List a few of your customers. They could be organizations or individuals."), - "fields": [], - before_load: function(slide) { - slide.fields = []; - for(var i=1; i<6; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Section Break"}, - {fieldtype:"Data", fieldname:"customer_" + i, label:__("Customer") + " " + i, - placeholder:__("Customer Name")}, - {fieldtype:"Column Break"}, - {fieldtype:"Data", fieldname:"customer_contact_" + i, - label:__("Contact Name") + " " + i, placeholder:__("Contact Name")} - ]) - } - slide.fields[1].reqd = 1; - }, - css_class: "two-column" - }, - }, - - suppliers: { - slide: { - icon: "icon-group", - "title": __("Your Suppliers"), - "help": __("List a few of your suppliers. They could be organizations or individuals."), - "fields": [], - before_load: function(slide) { - slide.fields = []; - for(var i=1; i<6; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Section Break"}, - {fieldtype:"Data", fieldname:"supplier_" + i, label:__("Supplier")+" " + i, - placeholder:__("Supplier Name")}, - {fieldtype:"Column Break"}, - {fieldtype:"Data", fieldname:"supplier_contact_" + i, - label:__("Contact Name") + " " + i, placeholder:__("Contact Name")}, - ]) - } - slide.fields[1].reqd = 1; - }, - css_class: "two-column" - }, - }, - - items: { - slide: { - icon: "icon-barcode", - "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) { - slide.fields = []; - for(var i=1; i<6; i++) { - slide.fields = slide.fields.concat([ - {fieldtype:"Section Break", show_section_border: true}, - {fieldtype:"Data", fieldname:"item_" + i, label:__("Item") + " " + i, - placeholder:__("A Product or Service")}, - {fieldtype:"Select", label:__("Group"), fieldname:"item_group_" + i, - options:[__("Products"), __("Services"), - __("Raw Material"), __("Consumable"), __("Sub Assemblies")], - "default": __("Products")}, - {fieldtype:"Select", fieldname:"item_uom_" + i, label:__("UOM"), - options:[__("Unit"), __("Nos"), __("Box"), __("Pair"), __("Kg"), __("Set"), - __("Hour"), __("Minute")], - "default": __("Unit")}, - {fieldtype: "Check", fieldname: "is_sales_item_" + i, label:__("We sell this Item"), default: 1}, - {fieldtype: "Check", fieldname: "is_purchase_item_" + i, label:__("We buy this Item")}, - {fieldtype:"Column Break"}, - {fieldtype:"Currency", fieldname:"item_price_" + i, label:__("Rate")}, - {fieldtype:"Attach Image", fieldname:"item_img_" + i, label:__("Attach Image")}, - ]) - } - slide.fields[1].reqd = 1; - - // dummy data - slide.fields.push({fieldtype: "Section Break"}); - slide.fields.push({fieldtype: "Check", fieldname: "add_sample_data", - label: __("Add a few sample records"), "default": 1}); - }, - css_class: "two-column" - }, - }, - - working_html: function() { - var msg = $(frappe.render_template("setup_wizard_message", { - image: "/assets/frappe/images/ui/bubble-tea-smile.svg", - title: __("Setting Up"), - message: __('Sit tight while your system is being setup. This may take a few moments.') - })); - msg.find(".setup-wizard-message-image").addClass("animated infinite bounce"); - return msg.html(); - }, - - complete_html: function() { - return frappe.render_template("setup_wizard_message", { - image: "/assets/frappe/images/ui/bubble-tea-happy.svg", - title: __('Setup Complete'), - message: "" - }); - }, - - setup_account: function(wiz) { - var values = wiz.get_values(); - wiz.show_working(); - return frappe.call({ - method: "erpnext.setup.page.setup_wizard.setup_wizard.setup_account", - args: values, - callback: function(r) { - wiz.show_complete(); - localStorage.setItem("session_last_route", "#welcome-to-erpnext"); - setTimeout(function() { - window.location = "/desk"; - }, 2000); - }, - error: function(r) { - - var d = msgprint(__("There were errors.")); - d.custom_onhide = function() { - frappe.set_route(erpnext.wiz.wizard.page_name, erpnext.wiz.wizard.slides.length - 1); - }; - } - }); - }, -}); - -// Source: https://en.wikipedia.org/wiki/Fiscal_year -// default 1st Jan - 31st Dec - -erpnext.wiz.fiscal_years = { - "Afghanistan": ["12-20", "12-21"], - "Australia": ["07-01", "06-30"], - "Bangladesh": ["07-01", "06-30"], - "Canada": ["04-01", "03-31"], - "Costa Rica": ["10-01", "09-30"], - "Egypt": ["07-01", "06-30"], - "Hong Kong": ["04-01", "03-31"], - "India": ["04-01", "03-31"], - "Iran": ["06-23", "06-22"], - "Italy": ["07-01", "06-30"], - "Myanmar": ["04-01", "03-31"], - "New Zealand": ["04-01", "03-31"], - "Pakistan": ["07-01", "06-30"], - "Singapore": ["04-01", "03-31"], - "South Africa": ["03-01", "02-28"], - "Thailand": ["10-01", "09-30"], - "United Kingdom": ["04-01", "03-31"], -} diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.json b/erpnext/setup/page/setup_wizard/setup_wizard.json deleted file mode 100644 index e90c87c77c..0000000000 --- a/erpnext/setup/page/setup_wizard/setup_wizard.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "creation": "2013-10-04 13:49:33.000000", - "docstatus": 0, - "doctype": "Page", - "idx": 1, - "modified": "2013-10-04 13:49:33.000000", - "modified_by": "Administrator", - "module": "Setup", - "name": "setup-wizard", - "owner": "Administrator", - "page_name": "setup-wizard", - "roles": [ - { - "role": "System Manager" - } - ], - "standard": "Yes", - "title": "Setup Wizard" -} \ No newline at end of file diff --git a/erpnext/setup/page/setup_wizard/setup_wizard_message.html b/erpnext/setup/page/setup_wizard/setup_wizard_message.html deleted file mode 100644 index e2f6bbc51d..0000000000 --- a/erpnext/setup/page/setup_wizard/setup_wizard_message.html +++ /dev/null @@ -1,7 +0,0 @@ -
- - -

{%= title %}

- -

{%= message %}

-
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard_page.html b/erpnext/setup/page/setup_wizard/setup_wizard_page.html deleted file mode 100644 index 00673174ce..0000000000 --- a/erpnext/setup/page/setup_wizard/setup_wizard_page.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
- {% for (var i=0; i < slides_count; i++) { %} - - {% } %} -
-

{%= title %}

-
-
- {% if (help) { %}

{%= help %}

{% } %} -
-
-
- -
diff --git a/erpnext/setup/page/setup_wizard/__init__.py b/erpnext/setup/setup_wizard/__init__.py similarity index 100% rename from erpnext/setup/page/setup_wizard/__init__.py rename to erpnext/setup/setup_wizard/__init__.py diff --git a/erpnext/setup/page/setup_wizard/data/sample_blog_post.html b/erpnext/setup/setup_wizard/data/sample_blog_post.html similarity index 100% rename from erpnext/setup/page/setup_wizard/data/sample_blog_post.html rename to erpnext/setup/setup_wizard/data/sample_blog_post.html diff --git a/erpnext/setup/page/setup_wizard/data/sample_home_page.css b/erpnext/setup/setup_wizard/data/sample_home_page.css similarity index 100% rename from erpnext/setup/page/setup_wizard/data/sample_home_page.css rename to erpnext/setup/setup_wizard/data/sample_home_page.css diff --git a/erpnext/setup/page/setup_wizard/data/sample_home_page.html b/erpnext/setup/setup_wizard/data/sample_home_page.html similarity index 100% rename from erpnext/setup/page/setup_wizard/data/sample_home_page.html rename to erpnext/setup/setup_wizard/data/sample_home_page.html diff --git a/erpnext/setup/page/setup_wizard/default_website.py b/erpnext/setup/setup_wizard/default_website.py similarity index 90% rename from erpnext/setup/page/setup_wizard/default_website.py rename to erpnext/setup/setup_wizard/default_website.py index dbe35403a8..e8d4eb4338 100644 --- a/erpnext/setup/page/setup_wizard/default_website.py +++ b/erpnext/setup/setup_wizard/default_website.py @@ -26,8 +26,8 @@ class website_maker(object): '

'+_("This is an example website auto-generated from ERPNext")+"

"+\ '

Login

', "description": self.company + ":" + (self.tagline or ""), - "css": frappe.get_template("setup/page/setup_wizard/data/sample_home_page.css").render(), - "main_section": frappe.get_template("setup/page/setup_wizard/data/sample_home_page.html").render({ + "css": frappe.get_template("setup/setup_wizard/data/sample_home_page.css").render(), + "main_section": frappe.get_template("setup/setup_wizard/data/sample_home_page.html").render({ "company": self.company, "tagline": (self.tagline or "") }) }).insert() @@ -80,7 +80,7 @@ class website_maker(object): "blogger": blogger.name, "blog_category": blog_category.name, "blog_intro": "My First Blog", - "content": frappe.get_template("setup/page/setup_wizard/data/sample_blog_post.html").render(), + "content": frappe.get_template("setup/setup_wizard/data/sample_blog_post.html").render(), }).insert() def test(): diff --git a/erpnext/setup/page/setup_wizard/fixtures/industry_type.py b/erpnext/setup/setup_wizard/industry_type.py similarity index 100% rename from erpnext/setup/page/setup_wizard/fixtures/industry_type.py rename to erpnext/setup/setup_wizard/industry_type.py diff --git a/erpnext/setup/page/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py similarity index 99% rename from erpnext/setup/page/setup_wizard/install_fixtures.py rename to erpnext/setup/setup_wizard/install_fixtures.py index ba48a29875..d3d0cb4555 100644 --- a/erpnext/setup/page/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -177,7 +177,7 @@ def install(country=None): {'doctype': "Print Heading", 'print_heading': _("Debit Note")} ] - from erpnext.setup.page.setup_wizard.fixtures.industry_type import get_industry_types + from erpnext.setup.setup_wizard.industry_type import get_industry_types records += [{"doctype":"Industry Type", "industry": d} for d in get_industry_types()] # records += [{"doctype":"Operation", "operation": d} for d in get_operations()] diff --git a/erpnext/setup/page/setup_wizard/sample_data.py b/erpnext/setup/setup_wizard/sample_data.py similarity index 100% rename from erpnext/setup/page/setup_wizard/sample_data.py rename to erpnext/setup/setup_wizard/sample_data.py diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py similarity index 85% rename from erpnext/setup/page/setup_wizard/setup_wizard.py rename to erpnext/setup/setup_wizard/setup_wizard.py index 86c4625be2..90856cade9 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -2,122 +2,60 @@ # License: GNU General Public License v3. See license.txt from __future__ import unicode_literals -import frappe, json, copy +import frappe, copy -from frappe.utils import cstr, flt, getdate, strip +from frappe.utils import cstr, flt, getdate from frappe import _ from frappe.utils.file_manager import save_file -from frappe.translate import (set_default_language, get_dict, - get_lang_dict, send_translations, get_language_from_code) +from frappe.translate import set_default_language from frappe.geo.country_info import get_country_info -from frappe.utils.nestedset import get_root_of from .default_website import website_maker import install_fixtures from .sample_data import make_sample_data from erpnext.accounts.utils import FiscalYearError from erpnext.accounts.doctype.account.account import RootNotEditable -@frappe.whitelist() -def setup_account(args=None): - try: - if frappe.db.sql("select name from tabCompany"): - frappe.throw(_("Setup Already Complete!!")) +def setup_complete(args=None): + if frappe.db.sql("select name from tabCompany"): + frappe.throw(_("Setup Already Complete!!")) - args = process_args(args) + if args.language and args.language != "english": + set_default_language(args.language) - if args.language and args.language != "english": - set_default_language(args.language) + frappe.clear_cache() - frappe.clear_cache() + install_fixtures.install(args.get("country")) - install_fixtures.install(args.get("country")) + update_user_name(args) + create_fiscal_year_and_company(args) + create_users(args) + set_defaults(args) + create_territories() + create_price_lists(args) + create_feed_and_todo() + create_email_digest() + create_letter_head(args) + create_taxes(args) + create_items(args) + create_customers(args) + create_suppliers(args) + frappe.local.message_log = [] - update_user_name(args) - frappe.local.message_log = [] + website_maker(args.company_name.strip(), args.company_tagline, args.name) + create_logo(args) - create_fiscal_year_and_company(args) - frappe.local.message_log = [] + frappe.db.commit() + login_as_first_user(args) + frappe.db.commit() + frappe.clear_cache() - create_users(args) - frappe.local.message_log = [] + if args.get("add_sample_data"): + try: + make_sample_data() + frappe.clear_cache() + except FiscalYearError: + pass - 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') - - website_maker(args.company_name.strip(), args.company_tagline, args.name) - create_logo(args) - - frappe.db.commit() - - login_as_first_user(args) - - frappe.db.commit() - - frappe.clear_cache() - - if args.get("add_sample_data"): - try: - make_sample_data() - frappe.clear_cache() - except FiscalYearError: - pass - - except: - if args: - traceback = frappe.get_traceback() - for hook in frappe.get_hooks("setup_wizard_exception"): - frappe.get_attr(hook)(traceback, args) - - raise - - else: - for hook in frappe.get_hooks("setup_wizard_success"): - frappe.get_attr(hook)(args) - - -def process_args(args): - if not args: - args = frappe.local.form_dict - if isinstance(args, basestring): - args = json.loads(args) - - args = frappe._dict(args) - - # strip the whitespace - for key, value in args.items(): - if isinstance(value, basestring): - args[key] = strip(value) - - return args def update_user_name(args): if args.get("email"): @@ -583,18 +521,3 @@ def create_users(args): emp.flags.ignore_mandatory = True emp.insert(ignore_permissions = True) -@frappe.whitelist() -def load_messages(language): - frappe.clear_cache() - set_default_language(language) - m = get_dict("page", "setup-wizard") - m.update(get_dict("boot")) - send_translations(m) - return frappe.local.lang - -@frappe.whitelist() -def load_languages(): - return { - "default_language": get_language_from_code(frappe.local.lang), - "languages": sorted(get_lang_dict().keys()) - } diff --git a/erpnext/setup/page/setup_wizard/test_setup_data.py b/erpnext/setup/setup_wizard/test_setup_data.py similarity index 100% rename from erpnext/setup/page/setup_wizard/test_setup_data.py rename to erpnext/setup/setup_wizard/test_setup_data.py diff --git a/erpnext/setup/page/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py similarity index 69% rename from erpnext/setup/page/setup_wizard/test_setup_wizard.py rename to erpnext/setup/setup_wizard/test_setup_wizard.py index acc2459e3a..d5dd6588cc 100644 --- a/erpnext/setup/page/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -4,12 +4,12 @@ from __future__ import unicode_literals import frappe -from erpnext.setup.page.setup_wizard.test_setup_data import args -from erpnext.setup.page.setup_wizard.setup_wizard import setup_account +from frappe.desk.page.setup_wizard.test_setup_data import args +from frappe.desk.page.setup_wizard.setup_wizard import setup_complete import frappe.utils.scheduler if __name__=="__main__": frappe.connect() frappe.local.form_dict = frappe._dict(args) - setup_account() + setup_complete() frappe.utils.scheduler.disable_scheduler() diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index cb642f9778..5b8dd044c8 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -32,9 +32,9 @@ def get_ancestors_of(doctype, name): def before_tests(): frappe.clear_cache() # complete setup if missing - from erpnext.setup.page.setup_wizard.setup_wizard import setup_account + from frappe.desk.page.setup_wizard.setup_wizard import setup_complete if not frappe.get_list("Company"): - setup_account({ + setup_complete({ "currency" :"USD", "first_name" :"Test", "last_name" :"User",