2013-10-04 12:18:05 +00:00
wn . pages [ 'setup-wizard' ] . onload = function ( wrapper ) {
2013-10-07 12:52:29 +00:00
$ ( ".navbar:first" ) . toggle ( false ) ;
2013-10-04 12:18:05 +00:00
erpnext . wiz = new wn . wiz . Wizard ( {
parent : wrapper ,
title : wn . _ ( "ERPNext Setup Guide" ) ,
slides : [
// User
{
2013-10-07 12:52:29 +00:00
title : wn . _ ( "The First User: You" ) ,
icon : "icon-user" ,
2013-10-04 12:18:05 +00:00
fields : [
{ "fieldname" : "first_name" , "label" : wn . _ ( "First Name" ) , "fieldtype" : "Data" , reqd : 1 } ,
{ "fieldname" : "last_name" , "label" : wn . _ ( "Last Name" ) , "fieldtype" : "Data" , reqd : 1 } ,
2013-10-07 12:52:29 +00:00
{ fieldtype : "Attach Image" , fieldname : "attach_profile" , label : "Attach Your Profile..." } ,
2013-10-04 12:18:05 +00:00
] ,
help : wn . _ ( 'The first user will become the System Manager (you can change that later).' )
} ,
// Organization
{
title : wn . _ ( "The Organization" ) ,
2013-10-07 12:52:29 +00:00
icon : "icon-building" ,
2013-10-04 12:18:05 +00:00
fields : [
{ fieldname : 'company_name' , label : wn . _ ( 'Company Name' ) , fieldtype : 'Data' , reqd : 1 ,
placeholder : 'e.g. "My Company LLC"' } ,
{ fieldname : 'company_abbr' , label : wn . _ ( 'Company Abbreviation' ) , fieldtype : 'Data' ,
placeholder : 'e.g. "MC"' , reqd : 1 } ,
{ fieldname : 'company_tagline' , label : wn . _ ( 'What does it do?' ) , fieldtype : 'Data' ,
placeholder : 'e.g. "Build tools for builders"' , reqd : 1 } ,
] ,
help : wn . _ ( 'The name of your company for which you are setting up this system.' ) ,
onload : 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 _input ( "company_abbr" ) . val ( abbr . toUpperCase ( ) ) ;
} ) ;
}
} ,
// Country
{
title : wn . _ ( "Country, Timezone and Currency" ) ,
2013-10-07 12:52:29 +00:00
icon : "icon-flag" ,
2013-10-04 12:18:05 +00:00
fields : [
{ fieldname : 'country' , label : wn . _ ( 'Country' ) , reqd : 1 ,
options : "" , fieldtype : 'Select' } ,
{ fieldname : 'currency' , label : wn . _ ( 'Default Currency' ) , reqd : 1 ,
options : "" , fieldtype : 'Select' } ,
{ fieldname : 'timezone' , label : wn . _ ( 'Time Zone' ) , reqd : 1 ,
options : "" , fieldtype : 'Select' } ,
] ,
help : wn . _ ( 'Select your home country and check the timezone and currency.' ) ,
onload : function ( slide , form ) {
wn . call ( {
method : "webnotes.country_info.get_country_timezone_info" ,
callback : function ( data ) {
erpnext . country _info = data . message . country _info ;
erpnext . all _timezones = data . message . all _timezones ;
slide . get _input ( "country" ) . empty ( )
. add _options ( [ "" ] . concat ( keys ( erpnext . country _info ) . sort ( ) ) ) ;
slide . get _input ( "currency" ) . empty ( )
. add _options ( wn . utils . unique ( [ "" ] . concat ( $ . map ( erpnext . country _info ,
function ( opts , country ) { return opts . currency ; } ) ) ) . sort ( ) ) ;
slide . get _input ( "timezone" ) . empty ( )
. add _options ( [ "" ] . concat ( erpnext . 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 || [ ] ;
$timezone . add _options ( timezone _list . sort ( ) ) ;
slide . get _input ( "currency" ) . val ( erpnext . 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 ) ) ;
} ) ;
}
} ,
// Logo
{
2013-10-07 12:52:29 +00:00
icon : "icon-bookmark" ,
2013-10-04 12:18:05 +00:00
title : wn . _ ( "Logo and Letter Heads" ) ,
help : wn . _ ( 'Upload your letter head and logo - you can edit them later.' ) ,
2013-10-07 12:52:29 +00:00
fields : [
{ fieldtype : "Attach Image" , fieldname : "attach_letterhead" , label : "Attach Letterhead..." } ,
{ fieldtype : "Attach Image" , fieldname : "attach_logo" , label : "Attach Logo..." } ,
] ,
// html: '<h4>' + wn._('Upload Logo') + '</h4><div class="upload-area-letter-head"></div><hr>'
// +'<h4>' + wn._('Upload Letter Head') + '</h4><div class="upload-area-logo"></div>',
2013-10-04 12:18:05 +00:00
onload : function ( slide ) {
2013-10-07 12:52:29 +00:00
// wn.upload.make({
// parent: slide.$wrapper.find(".upload-area-letter-head").css({"margin-left": "10px"}),
// on_attach: function(fileobj) {
// console.log(fileobj);
// }
// });
//
// wn.upload.make({
// parent: slide.$wrapper.find(".upload-area-logo").css({"margin-left": "10px"}),
// on_attach: function(fileobj) {
// console.log(fileobj);
// }
// });
2013-10-04 12:18:05 +00:00
}
} ,
// Taxes
{
2013-10-07 12:52:29 +00:00
icon : "icon-money" ,
2013-10-04 12:18:05 +00:00
"title" : wn . _ ( "Add Taxes" ) ,
"help" : wn . _ ( "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." ) ,
"fields" : [
2013-10-07 12:52:29 +00:00
{ fieldtype : "Column Break" , fieldname : "cb_1" , "label" : "Tax Heads" } ,
2013-10-04 12:18:05 +00:00
{ fieldtype : "Data" , fieldname : "tax_1" , label : "Tax 1" , placeholder : "e.g. VAT" } ,
{ fieldtype : "Data" , fieldname : "tax_2" , label : "Tax 2" , placeholder : "e.g. Customs Duty" } ,
{ fieldtype : "Data" , fieldname : "tax_3" , label : "Tax 3" , placeholder : "e.g. Excise" } ,
2013-10-07 12:52:29 +00:00
{ fieldtype : "Column Break" , fieldname : "cb_2" , "label" : "Tax Rates" } ,
{ fieldtype : "Data" , fieldname : "tax_rate_1" , label : "Rate (%)" , placeholder : "e.g. 5" } ,
{ fieldtype : "Data" , fieldname : "tax_rate_2" , label : "Rate (%)" , placeholder : "e.g. 5" } ,
{ fieldtype : "Data" , fieldname : "tax_rate_3" , label : "Rate (%)" , placeholder : "e.g. 5" } ,
2013-10-04 12:18:05 +00:00
] ,
onload : function ( slide ) {
}
2013-10-07 12:52:29 +00:00
} ,
2013-10-04 12:18:05 +00:00
2013-10-07 12:52:29 +00:00
// Items to Sell
{
icon : "icon-barcode" ,
"title" : wn . _ ( "Your Products or Services" ) ,
"help" : wn . _ ( "List your products or services that you sell to your customers." ) ,
"fields" : [
{ fieldtype : "Data" , fieldname : "item_1" , label : "Item 1" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_2" , label : "Item 2" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_3" , label : "Item 3" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_4" , label : "Item 4" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_5" , label : "Item 5" , placeholder : "A Product or Service" } ,
{ fieldtype : "Column Break" , fieldname : "cb_2" , "label" : "Attachments" } ,
{ fieldtype : "Attach" , fieldname : "item_img_1" , label : "Attach Image..." } ,
{ fieldtype : "Attach" , fieldname : "item_img_2" , label : "Attach Image..." } ,
{ fieldtype : "Attach" , fieldname : "item_img_3" , label : "Attach Image..." } ,
{ fieldtype : "Attach" , fieldname : "item_img_4" , label : "Attach Image..." } ,
{ fieldtype : "Attach" , fieldname : "item_img_5" , label : "Attach Image..." } ,
] ,
onload : function ( slide ) {
}
} ,
// Items to Buy
{
icon : "icon-barcode" ,
"title" : wn . _ ( "Products or Services You Buy" ) ,
"help" : wn . _ ( "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." ) ,
"fields" : [
{ fieldtype : "Data" , fieldname : "item_buy_1" , label : "Item 1" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_buy_2" , label : "Item 2" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_buy_3" , label : "Item 3" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_buy_4" , label : "Item 4" , placeholder : "A Product or Service" } ,
{ fieldtype : "Data" , fieldname : "item_buy_5" , label : "Item 5" , placeholder : "A Product or Service" } ,
] ,
onload : function ( slide ) {
}
} ,
// Customers
{
icon : "icon-group" ,
"title" : wn . _ ( "Your Customers" ) ,
"help" : wn . _ ( "List a few of your customers. They could be organizations or individuals." ) ,
"fields" : [
{ fieldtype : "Data" , fieldname : "customer_1" , label : "Customer 1" , placeholder : "Customer Name" } ,
{ fieldtype : "Data" , fieldname : "customer_2" , label : "Customer 2" , placeholder : "Customer Name" } ,
{ fieldtype : "Data" , fieldname : "customer_3" , label : "Customer 3" , placeholder : "Customer Name" } ,
{ fieldtype : "Data" , fieldname : "customer_4" , label : "Customer 4" , placeholder : "Customer Name" } ,
{ fieldtype : "Data" , fieldname : "customer_5" , label : "Customer 5" , placeholder : "Customer Name" } ,
] ,
onload : function ( slide ) {
}
} ,
// Suppliers
{
icon : "icon-group" ,
"title" : wn . _ ( "Your Suppliers" ) ,
"help" : wn . _ ( "List a few of your suppliers. They could be organizations or individuals." ) ,
"fields" : [
{ fieldtype : "Data" , fieldname : "supplier_1" , label : "Supplier 1" , placeholder : "Supplier Name" } ,
{ fieldtype : "Data" , fieldname : "supplier_2" , label : "Supplier 2" , placeholder : "Supplier Name" } ,
{ fieldtype : "Data" , fieldname : "supplier_3" , label : "Supplier 3" , placeholder : "Supplier Name" } ,
{ fieldtype : "Data" , fieldname : "supplier_4" , label : "Supplier 4" , placeholder : "Supplier Name" } ,
{ fieldtype : "Data" , fieldname : "supplier_5" , label : "Supplier 5" , placeholder : "Supplier Name" } ,
] ,
onload : function ( slide ) {
}
}
2013-10-04 12:18:05 +00:00
]
} )
}
wn . pages [ 'setup-wizard' ] . onshow = function ( wrapper ) {
erpnext . wiz . show ( wn . get _route ( ) [ 1 ] || "0" ) ;
}
wn . provide ( "wn.wiz" ) ;
wn . wiz . Wizard = Class . extend ( {
init : function ( opts ) {
$ . extend ( this , opts ) ;
this . slide _dict = { } ;
wn . set _route ( "setup-wizard" , "0" ) ;
} ,
show : function ( id ) {
id = cint ( id ) ;
if ( this . current _slide && this . current _slide . id === id )
return ;
if ( ! this . slide _dict [ id ] ) {
this . slide _dict [ id ] = new wn . wiz . WizardSlide ( $ . extend ( this . slides [ id ] , { wiz : this , id : id } ) ) ;
this . slide _dict [ id ] . make ( ) ;
}
if ( this . current _slide )
this . current _slide . $wrapper . toggle ( false ) ;
this . current _slide = this . slide _dict [ id ] ;
this . current _slide . $wrapper . toggle ( true ) ;
} ,
} ) ;
wn . wiz . WizardSlide = Class . extend ( {
init : function ( opts ) {
$ . extend ( this , opts ) ;
} ,
make : function ( ) {
var me = this ;
2013-10-07 12:52:29 +00:00
this . $wrapper = $ ( repl ( ' < div class = "panel panel-default" style = "margin: 0px 30px;" > \
< div class = "panel-heading" > < div class = "panel-title" > % ( main _title ) s : Step % ( step ) s < / d i v > < / d i v > \
2013-10-04 12:18:05 +00:00
< div class = "panel-body" > \
< div class = "progress" > \
< div class = "progress-bar" style = "width: %(width)s%" > < / d i v > \
< / d i v > \
2013-10-07 12:52:29 +00:00
< h3 > < i class = "%(icon)s text-muted" > < / i > % ( t i t l e ) s < / h 3 > < b r > \
2013-10-04 12:18:05 +00:00
< div class = "row" > \
< div class = "col-sm-6 form" > < / d i v > \
2013-10-07 12:52:29 +00:00
< div class = "col-sm-6 help" > < p class = "text-muted" > % ( help ) s < / p > < / d i v > \
2013-10-04 12:18:05 +00:00
< / d i v > \
< hr > \
< div class = "footer" > < / d i v > \
< / d i v > \
2013-10-07 12:52:29 +00:00
< / d i v > ' , { h e l p : t h i s . h e l p , t i t l e : t h i s . t i t l e , m a i n _ t i t l e : t h i s . w i z . t i t l e , s t e p : t h i s . i d + 1 ,
width : ( flt ( this . id + 1 ) / ( this . wiz . slides . length + 1 ) ) * 100 , icon : this . icon } ) )
2013-10-04 12:18:05 +00:00
. appendTo ( this . wiz . parent ) ;
this . body = this . $wrapper . find ( ".form" ) [ 0 ] ;
if ( this . fields ) {
this . form = new wn . ui . FieldGroup ( {
fields : this . fields ,
2013-10-07 12:52:29 +00:00
body : this . body ,
no _submit _on _enter : true
2013-10-04 12:18:05 +00:00
} ) ;
this . form . make ( ) ;
} else {
$ ( this . body ) . html ( this . html )
}
if ( this . id > 0 ) {
this . $prev = $ ( "<button class='btn btn-default'>Previous</button>" )
. click ( function ( ) { wn . set _route ( "setup-wizard" , me . id - 1 + "" ) ; } )
. appendTo ( this . $wrapper . find ( ".footer" ) )
. css ( { "margin-right" : "5px" } ) ;
}
if ( this . id + 1 < this . wiz . slides . length ) {
this . $next = $ ( "<button class='btn btn-primary'>Next</button>" )
. click ( function ( ) { wn . set _route ( "setup-wizard" , me . id + 1 + "" ) ; } )
. appendTo ( this . $wrapper . find ( ".footer" ) ) ;
} else {
this . $complete = $ ( "<button class='btn btn-primary'>Complete Setup</button>" )
. click ( function ( ) { me . wiz . complete ( ) ; } ) . appendTo ( this . $wrapper . find ( ".footer" ) ) ;
}
if ( this . onload ) {
this . onload ( this ) ;
}
} ,
get _input : function ( fn ) {
return this . form . get _input ( fn ) ;
}
} )