fixes in setup

This commit is contained in:
Anand Doshi 2012-04-27 15:30:23 +05:30
parent 44279f87b4
commit 1ed4ef1946
13 changed files with 623 additions and 167 deletions

View File

@ -3622,3 +3622,12 @@ body {
max-width: 260px !important; max-width: 260px !important;
} }
.expiry-info {
margin-top: 40px;
margin-bottom: -40px;
text-align: center;
background-color: rgb(255, 255, 204);
padding: 7px;
z-index: 1;
}

View File

@ -1939,6 +1939,15 @@ body {
max-width: 260px !important; max-width: 260px !important;
} }
.expiry-info {
margin-top: 40px;
margin-bottom: -40px;
text-align: center;
background-color: rgb(255, 255, 204);
padding: 7px;
z-index: 1;
}
/* /*
* erpnext/website/css/website.css * erpnext/website/css/website.css

View File

@ -27,42 +27,6 @@ class DocType:
def __init__(self, d, dl): def __init__(self, d, dl):
self.doc, self.doclist = d, dl self.doc, self.doclist = d, dl
#Default Naming Series
#---------------------------------------------------
def naming_series(self):
ns = [['TDS Payment', 'TDSP'], ['Purchase Invoice', 'BILL'], ['Journal Voucher', 'JV'], ['Sales Invoice', 'INV'], ['Lead', 'Lead'], ['Purchase Request', 'IDT'], ['Opportunity', 'Opportunity'], ['Purchase Order', 'PO'], ['Quotation', 'QTN'], ['Purchase Receipt', 'GRN'], ['Stock Entry', 'STE'], ['Sales Order', 'SO'], ['Delivery Note', 'DN'], ['Employee', 'EMP/']]
for r in ns:
rec = Document('Naming Series')
rec.select_doc_for_series = r[0]
rec.new_series = r[1]
rec_obj = get_obj(doc=rec)
rec_obj.add_series()
# set account details
#-----------------------
def set_account_details(self, args):
"""
Called from gateway after allocation
"""
import json
args = json.loads(args)
self.set_cp_defaults(args['company'], args['industry'], args['time_zone'], args['country'], args['account_name'])
self.create_profile(args['user'], args['first_name'], args['last_name'], args.get('pwd'))
# Domain related updates
try:
from server_tools.gateway_utils import add_domain_map
add_domain_map(args)
except ImportError, e:
pass
# add record in domain_list of Website Settings
account_url = args['url_name'] + '.erpnext.com'
webnotes.conn.set_value('Website Settings', 'Website Settings',
'subdomain', account_url)
# Account Setup # Account Setup
# --------------- # ---------------
def setup_account(self, args): def setup_account(self, args):
@ -117,6 +81,7 @@ class DocType:
# Set # Set
self.set_defaults(def_args) self.set_defaults(def_args)
self.set_cp_defaults(**args)
self.create_feed_and_todo() self.create_feed_and_todo()
@ -204,14 +169,12 @@ class DocType:
# Set Control Panel Defaults # Set Control Panel Defaults
# -------------------------- # --------------------------
def set_cp_defaults(self, cname, industry, timezone, country, acc_name): def set_cp_defaults(self, industry, country, timezone, company_name):
cp = Document('Control Panel','Control Panel') cp = Document('Control Panel','Control Panel')
cp.account_id = acc_name cp.company_name = company_name
cp.company_name = cname
cp.industry = industry cp.industry = industry
cp.time_zone = timezone cp.time_zone = timezone
cp.country = country cp.country = country
cp.client_name = '<div style="padding:4px; font-size:20px;">'+cname+'</div>'
cp.save() cp.save()
# Create Profile # Create Profile
@ -238,25 +201,4 @@ class DocType:
for r in roles_list: for r in roles_list:
d = addchild(pr,'userroles', 'UserRole', 1) d = addchild(pr,'userroles', 'UserRole', 1)
d.role = r d.role = r
d.save(1) d.save(1)
def is_setup_okay(self, args):
"""
Validates if setup has been performed after database allocation
"""
from server_tools.gateway_utils import get_total_users
args = eval(args)
cp_defaults = webnotes.conn.get_value('Control Panel', None, 'account_id')
user_profile = webnotes.conn.get_value('Profile', args['user'], 'name')
from webnotes.utils import cint
total_users = get_total_users()
if (cp_defaults==args['account_name']) and user_profile and \
(total_users==cint(args['total_users'])):
return 'True'

View File

@ -34,7 +34,10 @@ def on_login_post_session(login_manager):
sid!=%s""", \ sid!=%s""", \
(webnotes.session['user'], webnotes.session['sid']), as_list=1) (webnotes.session['user'], webnotes.session['sid']), as_list=1)
if webnotes.session['user'] not in ('Guest', 'demo@webnotestech.com') and webnotes.conn.cur_db_name!='accounts': # check if account is expired
check_if_expired()
if webnotes.session['user'] not in ('Guest', 'demo@webnotestech.com'):
# create feed # create feed
from webnotes.utils import nowtime from webnotes.utils import nowtime
home.make_feed('Login', 'Profile', login_manager.user, login_manager.user, home.make_feed('Login', 'Profile', login_manager.user, login_manager.user,
@ -82,6 +85,11 @@ def boot_session(bootinfo):
tabCompany limit 1""") and 'Yes' or 'No' tabCompany limit 1""") and 'Yes' or 'No'
bootinfo['user_background'] = webnotes.conn.get_value("Profile", webnotes.session['user'], 'background_image') or '' bootinfo['user_background'] = webnotes.conn.get_value("Profile", webnotes.session['user'], 'background_image') or ''
# load subscription info
import conf
if hasattr(conf, 'max_users'): bootinfo['max_users'] = conf.max_users
if hasattr(conf, 'expires_on'): bootinfo['expires_on'] = conf.expires_on
def get_letter_heads(): def get_letter_heads():
@ -90,27 +98,37 @@ def get_letter_heads():
ret = webnotes.conn.sql("""select name, content from `tabLetter Head` ret = webnotes.conn.sql("""select name, content from `tabLetter Head`
where ifnull(disabled,0)=0""") where ifnull(disabled,0)=0""")
return dict(ret) return dict(ret)
def login_as(login_manager): def check_if_expired():
""" """check if account is expired. If expired, do not allow login"""
Login as functionality -- allows signin from signin.erpnext.com import conf
""" # check if expires_on is specified
# login as user if not hasattr(conf, 'expires_on'): return
user = webnotes.form.getvalue('login_as')
if user: # check if expired
if isinstance(webnotes.session, dict): from datetime import datetime, date
webnotes.session['user'] = user expires_on = datetime.strptime(conf.expires_on, '%Y-%m-%d').date()
else: if date.today() <= expires_on: return
webnotes.session = {'user': user}
# if expired, stop user from logging in
login_manager.user = user from webnotes.utils import formatdate
first_name, last_name = webnotes.conn.sql("select first_name, last_name from `tabProfile` where name=%s", user)[0] if 'System Manager' in webnotes.user.roles:
webnotes.response['server_messages'] = """Oops! \
login_manager.user_fullname = (first_name and first_name or "") + (last_name and " " + last_name or "") Your subscription expired on <b>%s</b>.
# alisaing here... so check if the user is disabled Nothing catastrophic.
if not webnotes.conn.sql("select ifnull(enabled,0) from tabProfile where name=%s", user)[0][0]:
# throw execption Just drop in a mail at <b>support@erpnext.com</b> and \
webnotes.msgprint("Authentication Failed", raise_exception=1) we will guide you to get your account re-activated.""" % formatdate(conf.expires_on)
else:
return login_manager webnotes.response['server_messages'] = """Oops! \
Your subscription expired on <b>%s</b>.
Nothing catastrophic.
Just ask your System Manager to drop in a mail at <b>support@erpnext.com</b> and \
we will guide him to get your account re-activated.""" % formatdate(conf.expires_on)
webnotes.response['message'] = 'Account Expired'
raise webnotes.AuthenticationError

View File

@ -16,78 +16,463 @@
// complete my company registration // complete my company registration
// -------------------------------- // --------------------------------
wn.provide('erpnext.complete_setup');
erpnext.complete_setup = function() { $.extend(erpnext.complete_setup, {
var currency_list = ['', 'AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AZN',
'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BRL', 'BSD', 'BTN', 'BYR', show: function() {
'BZD', 'CAD', 'CDF', 'CFA', 'CFP', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CUC', 'CZK', 'DJF', d = erpnext.complete_setup.prepare_dialog();
'DKK', 'DOP', 'DZD', 'EEK', 'EGP', 'ERN', 'ETB', 'EUR', 'EURO', 'FJD', 'FKP', 'FMG', 'GBP', d.show();
'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GQE', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', },
'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF',
'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LTL', 'LVL', 'LYD',
'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR',
'MZM', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NRs', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP',
'PKR', 'PLN', 'PYG', 'QAR', 'RMB', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SCR', 'SDG', 'SDR',
'SEK', 'SGD', 'SHP', 'SOS', 'SRD', 'STD', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TRY',
'TTD', 'TWD', 'TZS', 'UAE', 'UAH', 'UGX', 'USD', 'USh', 'UYU', 'UZS', 'VEB', 'VND', 'VUV',
'WST', 'XAF', 'XCD', 'XDR', 'XOF', 'XPF', 'YEN', 'YER', 'YTL', 'ZAR', 'ZMK', 'ZWR'];
var d = new wn.widgets.Dialog({ prepare_dialog: function() {
title: "Setup",
fields: [ var d = new wn.widgets.Dialog({
{fieldname:'first_name', label:'Your First Name', fieldtype:'Data', reqd: 1}, title: "Setup",
{fieldname:'last_name', label:'Your Last Name', fieldtype:'Data'}, fields: [
{fieldname:'company_name', label:'Company Name', fieldtype:'Data', reqd:1, {fieldname:'first_name', label:'Your First Name', fieldtype:'Data', reqd: 1},
description: 'e.g. "My Company LLC"'}, {fieldname:'last_name', label:'Your Last Name', fieldtype:'Data'},
{fieldname:'company_abbr', label:'Company Abbreviation', fieldtype:'Data', {fieldname:'company_name', label:'Company Name', fieldtype:'Data', reqd:1,
description:'e.g. "MC"',reqd:1}, description: 'e.g. "My Company LLC"'},
{fieldname:'fy_start', label:'Financial Year Start Date', fieldtype:'Select', {fieldname:'company_abbr', label:'Company Abbreviation', fieldtype:'Data',
description:'Your financial year begins on"', reqd:1, description:'e.g. "MC"',reqd:1},
options: ['', '1st Jan', '1st Apr', '1st Jul', '1st Oct'].join('\n')}, {fieldname:'fy_start', label:'Financial Year Start Date', fieldtype:'Select',
{fieldname:'currency', label: 'Default Currency', reqd:1, description:'Your financial year begins on"', reqd:1,
options: currency_list.join('\n'), fieldtype: 'Select'}, options: erpnext.complete_setup.fy_start_list.join('\n')},
{fieldname:'update', label:'Setup',fieldtype:'Button'} {fieldname:'currency', label: 'Default Currency', reqd:1,
] options: erpnext.complete_setup.currency_list.join('\n'), fieldtype: 'Select'},
}) {fieldname:'industry', label: 'Industry', reqd:1,
options: erpnext.complete_setup.industry_list.join('\n'), fieldtype: 'Select'},
// prepare {fieldname:'country', label: 'Country', reqd:1,
if(user != 'Administrator'){ options: erpnext.complete_setup.country_list.join('\n'), fieldtype: 'Select'},
d.no_cancel(); // Hide close image {fieldname:'timezone', label: 'Time Zone', reqd:1,
$('header').toggle(false); // hide toolbar options: "", fieldtype: 'Select'},
} {fieldname:'update', label:'Setup',fieldtype:'Button'},
],
// company name already set
if(wn.control_panel.company_name) {
var inp = d.fields_dict.company_name.input;
inp.value = wn.control_panel.company_name;
inp.disabled = true;
}
// set first name, last name
if(user_fullname) {
u = user_fullname.split(' ');
if(u[0]) {
d.fields_dict.first_name.input.value = u[0];
}
if(u[1]) {
d.fields_dict.last_name.input.value = u[1];
}
}
// setup
d.fields_dict.update.input.onclick = function() {
var data = d.get_values();
if(!data) return;
$(this).set_working();
$c_obj('Setup Control','setup_account',data,function(r, rt){
sys_defaults = r.message;
user_fullname = r.message.user_fullname;
wn.boot.user_info[user].fullname = user_fullname;
d.hide();
$('header').toggle(true);
wn.container.wntoolbar.set_user_name();
}); });
}
if(user != 'Administrator'){
$(d.appframe.$titlebar).find('.close').toggle(false); // Hide close image
$('header').toggle(false); // hide toolbar
}
// on clicking update
d.fields_dict.update.input.onclick = function() {
var data = d.get_values();
if(!data) return;
$(this).set_working();
$c_obj('Setup Control','setup_account',data,function(r, rt){
sys_defaults = r.message;
user_fullname = r.message.user_fullname;
wn.boot.user_info[user].fullname = user_fullname;
d.hide();
$('header').toggle(true);
wn.container.wntoolbar.set_user_name();
});
};
d.fields_dict.country.input.onchange = function() {
var country = d.fields_dict.country.input.value;
var $timezone = $(d.fields_dict.timezone.input);
$timezone.empty();
if(country){
var timezone_list = erpnext.complete_setup.timezone_dict[country];
if(timezone_list.length > 1) {
timezone_list = [""].concat(timezone_list);
}
$timezone.add_options(timezone_list);
}
};
// company name already set
if(wn.control_panel.company_name) {
var inp = d.fields_dict.company_name.input;
inp.value = wn.control_panel.company_name;
inp.disabled = true;
}
// set first name, last name
if(user_fullname) {
u = user_fullname.split(' ');
if(u[0]) {
d.fields_dict.first_name.input.value = u[0];
}
if(u[1]) {
d.fields_dict.last_name.input.value = u[1];
}
}
return d;
},
d.show(); fy_start_list: ['', '1st Jan', '1st Apr', '1st Jul', '1st Oct'],
}
currency_list: ['', 'AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AZN',
'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BRL', 'BSD', 'BTN', 'BYR',
'BZD', 'CAD', 'CDF', 'CFA', 'CFP', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CUC', 'CZK', 'DJF',
'DKK', 'DOP', 'DZD', 'EEK', 'EGP', 'ERN', 'ETB', 'EUR', 'EURO', 'FJD', 'FKP', 'FMG', 'GBP',
'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GQE', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF',
'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF',
'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LTL', 'LVL', 'LYD',
'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR',
'MZM', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NRs', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP',
'PKR', 'PLN', 'PYG', 'QAR', 'RMB', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SCR', 'SDG', 'SDR',
'SEK', 'SGD', 'SHP', 'SOS', 'SRD', 'STD', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TRY',
'TTD', 'TWD', 'TZS', 'UAE', 'UAH', 'UGX', 'USD', 'USh', 'UYU', 'UZS', 'VEB', 'VND', 'VUV',
'WST', 'XAF', 'XCD', 'XDR', 'XOF', 'XPF', 'YEN', 'YER', 'YTL', 'ZAR', 'ZMK', 'ZWR'],
industry_list: ['', 'Aerospace and Defence', 'Agriculture', 'Apparel', 'Automobile',
'Banking', 'Biotechnology', 'Chemical', 'Communications', 'Consulting', 'Customer Service',
'Education', 'Electronics', 'Energy', 'Engineering', 'Entertainment', 'Environmental',
'Finance', 'Food and Beverage', 'Government', 'Healthcare', 'Hospitality',
'Information Technology', 'Insurance', 'Machinery', 'Manufacturing', 'Media',
'Not For Profit', 'Recreation', 'Retail', 'Shipping', 'Technology',
'Telecommunications', 'Transportation', 'Trading', 'Utilities', 'Other'],
country_list: ["", 'Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda',
'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain',
'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia',
'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei Darussalam', 'Bulgaria',
'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde',
'Central African Republic', 'Chad', 'Chile', 'Colombia', 'Comoros', 'Costa Rica',
'Croatia', 'Cuba', 'Cyprus', 'Czech Republic', "C\xc3\xb4te d'Ivoire",
'Democratic Republic of the Congo', 'Denmark', 'Djibouti', 'Dominica',
'Dominican Republic', 'East Timor', 'Ecuador', 'Egypt', 'El Salvador',
'Equatorial Guinea', 'Eritrea', 'Estonia', 'Ethiopia', 'Federated States of Micronesia',
'Fiji', 'Finland', 'France', 'Gabon', 'Georgia', 'Germany', 'Ghana', 'Greece',
'Grenada', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras',
'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Israel', 'Italy',
'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kingdom of the Netherlands',
'Kiribati', 'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia',
'Libya', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Macedonia', 'Madagascar', 'Malawi',
'Malaysia', 'Maldives', 'Mali', 'Malta', 'Marshall Islands', 'Mauritania', 'Mauritius',
'Mexico', 'Moldova', 'Monaco', 'Mongolia', 'Montenegro', 'Morocco', 'Mozambique',
'Myanmar', 'Namibia', 'Nauru', 'Nepal', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria',
'North Korea', 'Norway', 'Oman', 'Pakistan', 'Palau', 'Panama', 'Papua New Guinea',
'Paraguay', "People's Republic of China", 'Peru', 'Philippines', 'Poland', 'Portugal',
'Qatar', 'Republic of Ireland', 'Republic of the Congo', 'Romania', 'Russia', 'Rwanda',
'Saint Kitts and Nevis', 'Saint Lucia', 'Saint Vincent and the Grenadines', 'Samoa',
'San Marino', 'Saudi Arabia', 'Senegal', 'Serbia', 'Seychelles', 'Sierra Leone',
'Singapore', 'Slovakia', 'Slovenia', 'Solomon Islands', 'Somalia', 'South Africa',
'South Korea', 'Spain', 'Sri Lanka', 'Sudan', 'Suriname', 'Swaziland', 'Sweden',
'Switzerland', 'Syria', 'S\xc3\xa3o Tom\xc3\xa9 and Pr\xc3\xadncipe', 'Tajikistan',
'Tanzania', 'Thailand', 'The Gambia', 'Togo', 'Tonga', 'Trinidad and Tobago', 'Tunisia',
'Turkey', 'Turkmenistan', 'Tuvalu', 'Uganda', 'Ukraine', 'United Arab Emirates',
'United Kingdom', 'United States', 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Vatican City',
'Venezuela', 'Vietnam', 'Yemen', 'Zambia', 'Zimbabwe'],
timezone_dict: {
'Afghanistan': ['Asia/Kabul'],
'Albania': ['Europe/Tirane'],
'Algeria': ['Africa/Algiers'],
'Andorra': ['Europe/Andorra'],
'Angola': ['Africa/Luanda'],
'Antigua and Barbuda': ['America/Antigua'],
'Argentina': ['America/Argentina/Buenos_Aires',
'America/Argentina/Cordoba',
'America/Argentina/Jujuy',
'America/Argentina/Tucuman',
'America/Argentina/Catamarca',
'America/Argentina/La_Rioja',
'America/Argentina/San_Juan',
'America/Argentina/Mendoza',
'America/Argentina/Rio_Gallegos',
'America/Argentina/Ushuaia'],
'Armenia': ['Asia/Yerevan'],
'Australia': ['Australia/Lord_Howe',
'Australia/Hobart',
'Australia/Currie',
'Australia/Melbourne',
'Australia/Sydney',
'Australia/Broken_Hill',
'Australia/Brisbane',
'Australia/Lindeman',
'Australia/Adelaide',
'Australia/Darwin',
'Australia/Perth'],
'Austria': ['Europe/Vienna'],
'Azerbaijan': ['Asia/Baku'],
'Bahamas': ['America/Nassau'],
'Bahrain': ['Asia/Bahrain'],
'Bangladesh': ['Asia/Dhaka'],
'Barbados': ['America/Barbados'],
'Belarus': ['Europe/Minsk'],
'Belgium': ['Europe/Brussels'],
'Belize': ['America/Belize'],
'Benin': ['Africa/Porto-Novo'],
'Bhutan': ['Asia/Thimphu'],
'Bolivia': ['America/La_Paz'],
'Bosnia and Herzegovina': ['Europe/Sarajevo'],
'Botswana': ['Africa/Gaborone'],
'Brazil': ['America/Noronha',
'America/Belem',
'America/Fortaleza',
'America/Recife',
'America/Araguaina',
'America/Maceio',
'America/Bahia',
'America/Sao_Paulo',
'America/Campo_Grande',
'America/Cuiaba',
'America/Porto_Velho',
'America/Boa_Vista',
'America/Manaus',
'America/Eirunepe',
'America/Rio_Branco'],
'Brunei Darussalam': ['Asia/Brunei'],
'Bulgaria': ['Europe/Sofia'],
'Burkina Faso': ['Africa/Ouagadougou'],
'Burundi': ['Africa/Bujumbura'],
'Cambodia': ['Asia/Phnom_Penh'],
'Cameroon': ['Africa/Douala'],
'Canada': ['America/St_Johns',
'America/Halifax',
'America/Glace_Bay',
'America/Moncton',
'America/Goose_Bay',
'America/Blanc-Sablon',
'America/Montreal',
'America/Toronto',
'America/Nipigon',
'America/Thunder_Bay',
'America/Pangnirtung',
'America/Iqaluit',
'America/Atikokan',
'America/Rankin_Inlet',
'America/Winnipeg',
'America/Rainy_River',
'America/Cambridge_Bay',
'America/Regina',
'America/Swift_Current',
'America/Edmonton',
'America/Yellowknife',
'America/Inuvik',
'America/Dawson_Creek',
'America/Vancouver',
'America/Whitehorse',
'America/Dawson'],
'Cape Verde': ['Atlantic/Cape_Verde'],
'Central African Republic': ['Africa/Bangui'],
'Chad': ['Africa/Ndjamena'],
'Chile': ['America/Santiago', 'Pacific/Easter'],
'Colombia': ['America/Bogota'],
'Comoros': ['Indian/Comoro'],
'Costa Rica': ['America/Costa_Rica'],
'Croatia': ['Europe/Zagreb'],
'Cuba': ['America/Havana'],
'Cyprus': ['Asia/Nicosia'],
'Czech Republic': ['Europe/Prague'],
"C\xc3\xb4te d'Ivoire": ['Africa/Abidjan'],
'Democratic Republic of the Congo': ['Africa/Kinshasa', 'Africa/Lubumbashi'],
'Denmark': ['Europe/Copenhagen'],
'Djibouti': ['Africa/Djibouti'],
'Dominica': ['America/Dominica'],
'Dominican Republic': ['America/Santo_Domingo'],
'East Timor': ['Asia/Dili'],
'Ecuador': ['America/Guayaquil', 'Pacific/Galapagos'],
'Egypt': ['Africa/Cairo'],
'El Salvador': ['America/El_Salvador'],
'Equatorial Guinea': ['Africa/Malabo'],
'Eritrea': ['Africa/Asmera'],
'Estonia': ['Europe/Tallinn'],
'Ethiopia': ['Africa/Addis_Ababa'],
'Federated States of Micronesia': ['Pacific/Truk',
'Pacific/Ponape',
'Pacific/Kosrae'],
'Fiji': ['Pacific/Fiji'],
'Finland': ['Europe/Helsinki'],
'France': ['Europe/Paris'],
'Gabon': ['Africa/Libreville'],
'Georgia': ['Asia/Tbilisi'],
'Germany': ['Europe/Berlin'],
'Ghana': ['Africa/Accra'],
'Greece': ['Europe/Athens'],
'Grenada': ['America/Grenada'],
'Guatemala': ['America/Guatemala'],
'Guinea': ['Africa/Conakry'],
'Guinea-Bissau': ['Africa/Bissau'],
'Guyana': ['America/Guyana'],
'Haiti': ['America/Guatemala'],
'Honduras': ['America/Tegucigalpa'],
'Hungary': ['Europe/Budapest'],
'Iceland': ['Atlantic/Reykjavik'],
'India': ['Asia/Calcutta'],
'Indonesia': ['Asia/Jakarta',
'Asia/Pontianak',
'Asia/Makassar',
'Asia/Jayapura'],
'Iran': ['Asia/Tehran'],
'Iraq': ['Asia/Baghdad'],
'Israel': ['Asia/Jerusalem'],
'Italy': ['Europe/Rome'],
'Jamaica': ['America/Jamaica'],
'Japan': ['Asia/Tokyo'],
'Jordan': ['Asia/Amman'],
'Kazakhstan': ['Asia/Almaty',
'Asia/Qyzylorda',
'Asia/Aqtobe',
'Asia/Aqtau',
'Asia/Oral'],
'Kenya': ['Africa/Nairobi'],
'Kingdom of the Netherlands': ['Europe/Amsterdam'],
'Kiribati': ['Pacific/Tarawa', 'Pacific/Enderbury', 'Pacific/Kiritimati'],
'Kuwait': ['Asia/Kuwait'],
'Kyrgyzstan': ['Asia/Bishkek'],
'Laos': ['Asia/Vientiane'],
'Latvia': ['Europe/Riga'],
'Lebanon': ['Asia/Beirut'],
'Lesotho': ['Africa/Maseru'],
'Liberia': ['Africa/Monrovia'],
'Libya': ['Africa/Tripoli'],
'Liechtenstein': ['Europe/Vaduz'],
'Lithuania': ['Europe/Vilnius'],
'Luxembourg': ['Europe/Luxembourg'],
'Macedonia': ['Europe/Skopje'],
'Madagascar': ['Indian/Antananarivo'],
'Malawi': ['Africa/Blantyre'],
'Malaysia': ['Asia/Kuala_Lumpur', 'Asia/Kuching'],
'Maldives': ['Indian/Maldives'],
'Mali': ['Africa/Bamako'],
'Malta': ['Europe/Malta'],
'Marshall Islands': ['Pacific/Majuro', 'Pacific/Kwajalein'],
'Mauritania': ['Africa/Nouakchott'],
'Mauritius': ['Indian/Mauritius'],
'Mexico': ['America/Mexico_City',
'America/Cancun',
'America/Merida',
'America/Monterrey',
'America/Mazatlan',
'America/Chihuahua',
'America/Hermosillo',
'America/Tijuana'],
'Moldova': ['Europe/Chisinau'],
'Monaco': ['Europe/Monaco'],
'Mongolia': ['Asia/Ulaanbaatar', 'Asia/Hovd', 'Asia/Choibalsan'],
'Montenegro': ['Europe/Podgorica'],
'Morocco': ['Africa/Casablanca'],
'Mozambique': ['Africa/Maputo'],
'Myanmar': ['Asia/Rangoon'],
'Namibia': ['Africa/Windhoek'],
'Nauru': ['Pacific/Nauru'],
'Nepal': ['Asia/Katmandu'],
'New Zealand': ['Pacific/Auckland', 'Pacific/Chatham'],
'Nicaragua': ['America/Managua'],
'Niger': ['Africa/Niamey'],
'Nigeria': ['Africa/Lagos'],
'North Korea': ['Asia/Pyongyang'],
'Norway': ['Europe/Oslo'],
'Oman': ['Asia/Muscat'],
'Pakistan': ['Asia/Karachi'],
'Palau': ['Pacific/Palau'],
'Panama': ['America/Panama'],
'Papua New Guinea': ['Pacific/Port_Moresby'],
'Paraguay': ['America/Asuncion'],
"People's Republic of China": ['Asia/Shanghai',
'Asia/Harbin',
'Asia/Chongqing',
'Asia/Urumqi',
'Asia/Kashgar'],
'Peru': ['America/Lima'],
'Philippines': ['Asia/Manila'],
'Poland': ['Europe/Warsaw'],
'Portugal': ['Europe/Lisbon', 'Atlantic/Madeira', 'Atlantic/Azores'],
'Qatar': ['Asia/Qatar'],
'Republic of Ireland': ['Europe/Dublin'],
'Republic of the Congo': ['Africa/Brazzaville'],
'Romania': ['Europe/Bucharest'],
'Russia': ['Europe/Kaliningrad',
'Europe/Moscow',
'Europe/Volgograd',
'Europe/Samara',
'Asia/Yekaterinburg',
'Asia/Omsk',
'Asia/Novosibirsk',
'Asia/Krasnoyarsk',
'Asia/Irkutsk',
'Asia/Yakutsk',
'Asia/Vladivostok',
'Asia/Sakhalin',
'Asia/Magadan',
'Asia/Kamchatka',
'Asia/Anadyr'],
'Rwanda': ['Africa/Kigali'],
'Saint Kitts and Nevis': ['America/St_Kitts'],
'Saint Lucia': ['America/St_Lucia'],
'Saint Vincent and the Grenadines': ['America/St_Vincent'],
'Samoa': ['Pacific/Apia'],
'San Marino': ['Europe/San_Marino'],
'Saudi Arabia': ['Asia/Riyadh'],
'Senegal': ['Africa/Dakar'],
'Serbia': ['Europe/Belgrade'],
'Seychelles': ['Indian/Mahe'],
'Sierra Leone': ['Africa/Freetown'],
'Singapore': ['Asia/Singapore'],
'Slovakia': ['Europe/Bratislava'],
'Slovenia': ['Europe/Ljubljana'],
'Solomon Islands': ['Pacific/Guadalcanal'],
'Somalia': ['Africa/Mogadishu'],
'South Africa': ['Africa/Johannesburg'],
'South Korea': ['Asia/Seoul'],
'Spain': ['Europe/Madrid', 'Africa/Ceuta', 'Atlantic/Canary'],
'Sri Lanka': ['Asia/Colombo'],
'Sudan': ['Africa/Khartoum'],
'Suriname': ['America/Paramaribo'],
'Swaziland': ['Africa/Mbabane'],
'Sweden': ['Europe/Stockholm'],
'Switzerland': ['Europe/Zurich'],
'Syria': ['Asia/Damascus'],
'S\xc3\xa3o Tom\xc3\xa9 and Pr\xc3\xadncipe': ['Africa/Sao_Tome'],
'Tajikistan': ['Asia/Dushanbe'],
'Tanzania': ['Africa/Dar_es_Salaam'],
'Thailand': ['Asia/Bangkok'],
'The Gambia': ['Africa/Banjul'],
'Togo': ['Africa/Lome'],
'Tonga': ['Pacific/Tongatapu'],
'Trinidad and Tobago': ['America/Port_of_Spain'],
'Tunisia': ['Africa/Tunis'],
'Turkey': ['Europe/Istanbul'],
'Turkmenistan': ['Asia/Ashgabat'],
'Tuvalu': ['Pacific/Funafuti'],
'Uganda': ['Africa/Kampala'],
'Ukraine': ['Europe/Kiev',
'Europe/Uzhgorod',
'Europe/Zaporozhye',
'Europe/Simferopol'],
'United Arab Emirates': ['Asia/Dubai'],
'United Kingdom': ['Europe/London'],
'United States': ['America/New_York',
'America/Detroit',
'America/Kentucky/Louisville',
'America/Kentucky/Monticello',
'America/Indiana/Indianapolis',
'America/Indiana/Marengo',
'America/Indiana/Knox',
'America/Indiana/Vevay',
'America/Chicago',
'America/Indiana/Vincennes',
'America/Indiana/Petersburg',
'America/Menominee',
'America/North_Dakota/Center',
'America/North_Dakota/New_Salem',
'America/Denver',
'America/Boise',
'America/Shiprock',
'America/Phoenix',
'America/Los_Angeles',
'America/Anchorage',
'America/Juneau',
'America/Yakutat',
'America/Nome',
'America/Adak',
'Pacific/Honolulu'],
'Uruguay': ['America/Montevideo'],
'Uzbekistan': ['Asia/Samarkand', 'Asia/Tashkent'],
'Vanuatu': ['Pacific/Efate'],
'Vatican City': ['Europe/Vatican'],
'Venezuela': ['America/Caracas'],
'Vietnam': ['Asia/Saigon'],
'Yemen': ['Asia/Aden'],
'Zambia': ['Africa/Lusaka'],
'Zimbabwe': ['Africa/Harare']
},
});

View File

@ -53,3 +53,12 @@ body {
min-width: 160px !important; min-width: 160px !important;
max-width: 260px !important; max-width: 260px !important;
} }
.expiry-info {
margin-top: 40px;
margin-bottom: -40px;
text-align: center;
background-color: rgb(255, 255, 204);
padding: 7px;
z-index: 1;
}

View File

@ -48,6 +48,7 @@ erpnext.startup.set_globals = function() {
} }
erpnext.startup.start = function() { erpnext.startup.start = function() {
console.log('Starting up...');
$('#startup_div').html('Starting up...').toggle(true); $('#startup_div').html('Starting up...').toggle(true);
@ -87,9 +88,26 @@ erpnext.startup.start = function() {
// complete registration // complete registration
if(in_list(user_roles,'System Manager') && (wn.boot.setup_complete=='No')) { if(in_list(user_roles,'System Manager') && (wn.boot.setup_complete=='No')) {
wn.require("erpnext/startup/js/complete_setup.js"); wn.require("erpnext/startup/js/complete_setup.js");
erpnext.complete_setup(); erpnext.complete_setup.show();
}
if(wn.boot.expires_on) {
var today = dateutil.str_to_obj(dateutil.get_today());
var expires_on = dateutil.str_to_obj(wn.boot.expires_on);
var diff = dateutil.get_diff(expires_on, today);
if (0 <= diff && diff <= 15) {
var expiry_string = diff==0 ? "today" : repl("in %(diff)s day(s)", { diff: diff });
$('header').append(repl('<div class="expiry-info"> \
Ahem! Your ERPNext subscription will <b>expire %(expiry_string)s</b>. \
Please renew your subscription to continue using ERPNext \
(and remove this annoying banner). \
</div>', { expiry_string: expiry_string }));
} else if (diff < 0) {
$('header').append(repl('<div class="expiry-info"> \
Ahem! This ERPNext subscription <b>has expired</b> and should be deleted. \
</div>', { expiry_string: expiry_string }));
}
} }
} }
erpnext.set_about(); erpnext.set_about();

View File

@ -32,4 +32,15 @@ table.user-perm td, table.user-perm th {
text-align: center; text-align: center;
border-bottom: 1px solid #aaa; border-bottom: 1px solid #aaa;
min-width: 30px; min-width: 30px;
}
.subscription-info-box {
margin: 0px 11px;
background-color: #EEEEEE;
border: 1px solid #DDDBDB;
padding: 5px 3px;
}
.subscription-info {
padding: 0px 10px;
} }

View File

@ -63,6 +63,21 @@ $.extend(wn.pages.users, {
} }
} }
}); });
if(!$('.subscription-info').length && (wn.boot.max_users || wn.boot.expires_on)) {
var $sub_info = $('<div class="subscription-info-box"><div>').insertAfter('.help');
if(wn.boot.max_users) {
$sub_info.append(repl('\
<span class="subscription-info"> \
Max Users: <b>%(max_users)s</b> \
</span>', { max_users: wn.boot.max_users }));
}
if(wn.boot.expires_on) {
$sub_info.append(repl('\
<span class="subscription-info"> \
Expires On: <b>%(expires_on)s</b> \
</span>', { expires_on: dateutil.str_to_user(wn.boot.expires_on) }));
}
}
}, },
render: function(data) { render: function(data) {
if(data.file_list) { if(data.file_list) {
@ -207,6 +222,17 @@ $.extend(wn.pages.users, {
}, },
add_user: function() { add_user: function() {
var me = wn.pages.users; var me = wn.pages.users;
var active_users = $('.user-card:not(.disabled)');
if(wn.boot.max_users && (active_users.length >= wn.boot.max_users)) {
msgprint(repl("Alas! <br />\
You already have <b>%(active_users)s</b> active users, \
which is the maximum number that you are currently allowed to add. <br /><br /> \
So, to add more users, you can:<br /> \
1. <b>Upgrade to the unlimited users plan</b>, or<br /> \
2. <b>Disable one or more of your existing users and try again</b>",
{active_users: active_users.length}));
return;
}
var d = new wn.widgets.Dialog({ var d = new wn.widgets.Dialog({
title: 'Add User', title: 'Add User',
width: 400, width: 400,

View File

@ -103,9 +103,24 @@ def add_user(args):
@webnotes.whitelist() @webnotes.whitelist()
def add_profile(args): def add_profile(args):
from webnotes.utils import validate_email_add, now from webnotes.utils import validate_email_add, now
email = args['user'] email = args['user']
sql = webnotes.conn.sql sql = webnotes.conn.sql
# validate max number of users exceeded or not
import conf
if hasattr(conf, 'max_users'):
active_users = sql("""select count(*) from tabProfile
where ifnull(enabled, 0)=1 and docstatus<2
and name not in ('Administrator', 'Guest')""")[0][0]
if active_users >= conf.max_users:
# same message as in users.js
webnotes.msgprint("""Alas! <br />\
You already have <b>%(active_users)s</b> active users, \
which is the maximum number that you are currently allowed to add. <br /><br /> \
So, to add more users, you can:<br /> \
1. <b>Upgrade to the unlimited users plan</b>, or<br /> \
2. <b>Disable one or more of your existing users and try again</b>""" \
% {'active_users': active_users}, raise_exception=1)
if not email: if not email:
email = webnotes.form_dict.get('user') email = webnotes.form_dict.get('user')

View File

@ -50,8 +50,8 @@ def init():
return True return True
except webnotes.AuthenticationError, e: except webnotes.AuthenticationError, e:
return True return True
except webnotes.UnknownDomainError, e: #except webnotes.UnknownDomainError, e:
print "Location: " + (conf.redirect_404) # print "Location: " + (conf.redirect_404)
except webnotes.SessionStopped, e: except webnotes.SessionStopped, e:
if 'cmd' in webnotes.form_dict: if 'cmd' in webnotes.form_dict:
webnotes.handler.print_json() webnotes.handler.print_json()

View File

@ -2216,11 +2216,18 @@ wn.modules_path='erpnext';$(document).bind('toolbar_setup',function(){$('.brand'
*/ */
var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'} var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'}
wn.provide('wn.modules');$.extend(wn.modules,erpnext.modules);wn.modules['Core']='Setup';erpnext.startup.set_globals=function(){if(inList(user_roles,'System Manager'))is_system_manager=1;} wn.provide('wn.modules');$.extend(wn.modules,erpnext.modules);wn.modules['Core']='Setup';erpnext.startup.set_globals=function(){if(inList(user_roles,'System Manager'))is_system_manager=1;}
erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);} erpnext.startup.start=function(){console.log('Starting up...');$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);}
if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);} if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);}
if(wn.boot.website_settings.title_prefix){wn.title_prefix=wn.boot.website_settings.title_prefix;}}else{wn.boot.profile.allow_modules=wn.boot.profile.allow_modules.concat(['To Do','Knowledge Base','Calendar','Activity','Messages']) if(wn.boot.website_settings.title_prefix){wn.title_prefix=wn.boot.website_settings.title_prefix;}}else{wn.boot.profile.allow_modules=wn.boot.profile.allow_modules.concat(['To Do','Knowledge Base','Calendar','Activity','Messages'])
if(user_roles.indexOf('Accounts Manager')!=-1){wn.boot.profile.allow_modules.push('Dashboard');} if(user_roles.indexOf('Accounts Manager')!=-1){wn.boot.profile.allow_modules.push('Dashboard');}
erpnext.toolbar.setup();erpnext.startup.set_periodic_updates();if(in_list(user_roles,'System Manager')&&(wn.boot.setup_complete=='No')){wn.require("erpnext/startup/js/complete_setup.js");erpnext.complete_setup();}} erpnext.toolbar.setup();erpnext.startup.set_periodic_updates();if(in_list(user_roles,'System Manager')&&(wn.boot.setup_complete=='No')){wn.require("erpnext/startup/js/complete_setup.js");erpnext.complete_setup.show();}
if(wn.boot.expires_on){var today=dateutil.str_to_obj(dateutil.get_today());var expires_on=dateutil.str_to_obj(wn.boot.expires_on);var diff=dateutil.get_diff(expires_on,today);if(0<=diff&&diff<=15){var expiry_string=diff==0?"today":repl("in %(diff)s day(s)",{diff:diff});$('header').append(repl('<div class="expiry-info"> \
Ahem! Your ERPNext subscription will <b>expire %(expiry_string)s</b>. \
Please renew your subscription to continue using ERPNext \
(and remove this annoying banner). \
</div>',{expiry_string:expiry_string}));}else if(diff<0){$('header').append(repl('<div class="expiry-info"> \
Ahem! This ERPNext subscription <b>has expired</b> and should be deleted. \
</div>',{expiry_string:expiry_string}));}}}
erpnext.set_about();$('#startup_div').toggle(false);} erpnext.set_about();$('#startup_div').toggle(false);}
show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);} show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);}
else if(nm=='Accounts Browser') else if(nm=='Accounts Browser')

View File

@ -824,11 +824,18 @@ wn.modules_path='erpnext';$(document).bind('toolbar_setup',function(){$('.brand'
*/ */
var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'} var current_module;var is_system_manager=0;wn.provide('erpnext.startup');erpnext.modules={'Selling':'selling-home','Accounts':'accounts-home','Stock':'stock-home','Buying':'buying-home','Support':'support-home','Projects':'projects-home','Production':'production-home','Website':'website-home','HR':'hr-home','Setup':'Setup','Activity':'activity','To Do':'todo','Calendar':'calendar','Messages':'messages','Knowledge Base':'questions','Dashboard':'dashboard'}
wn.provide('wn.modules');$.extend(wn.modules,erpnext.modules);wn.modules['Core']='Setup';erpnext.startup.set_globals=function(){if(inList(user_roles,'System Manager'))is_system_manager=1;} wn.provide('wn.modules');$.extend(wn.modules,erpnext.modules);wn.modules['Core']='Setup';erpnext.startup.set_globals=function(){if(inList(user_roles,'System Manager'))is_system_manager=1;}
erpnext.startup.start=function(){$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);} erpnext.startup.start=function(){console.log('Starting up...');$('#startup_div').html('Starting up...').toggle(true);erpnext.startup.set_globals();if(wn.boot.user_background){erpnext.set_user_background(wn.boot.user_background);}
if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);} if(user=='Guest'){if(wn.boot.custom_css){set_style(wn.boot.custom_css);}
if(wn.boot.website_settings.title_prefix){wn.title_prefix=wn.boot.website_settings.title_prefix;}}else{wn.boot.profile.allow_modules=wn.boot.profile.allow_modules.concat(['To Do','Knowledge Base','Calendar','Activity','Messages']) if(wn.boot.website_settings.title_prefix){wn.title_prefix=wn.boot.website_settings.title_prefix;}}else{wn.boot.profile.allow_modules=wn.boot.profile.allow_modules.concat(['To Do','Knowledge Base','Calendar','Activity','Messages'])
if(user_roles.indexOf('Accounts Manager')!=-1){wn.boot.profile.allow_modules.push('Dashboard');} if(user_roles.indexOf('Accounts Manager')!=-1){wn.boot.profile.allow_modules.push('Dashboard');}
erpnext.toolbar.setup();erpnext.startup.set_periodic_updates();if(in_list(user_roles,'System Manager')&&(wn.boot.setup_complete=='No')){wn.require("erpnext/startup/js/complete_setup.js");erpnext.complete_setup();}} erpnext.toolbar.setup();erpnext.startup.set_periodic_updates();if(in_list(user_roles,'System Manager')&&(wn.boot.setup_complete=='No')){wn.require("erpnext/startup/js/complete_setup.js");erpnext.complete_setup.show();}
if(wn.boot.expires_on){var today=dateutil.str_to_obj(dateutil.get_today());var expires_on=dateutil.str_to_obj(wn.boot.expires_on);var diff=dateutil.get_diff(expires_on,today);if(0<=diff&&diff<=15){var expiry_string=diff==0?"today":repl("in %(diff)s day(s)",{diff:diff});$('header').append(repl('<div class="expiry-info"> \
Ahem! Your ERPNext subscription will <b>expire %(expiry_string)s</b>. \
Please renew your subscription to continue using ERPNext \
(and remove this annoying banner). \
</div>',{expiry_string:expiry_string}));}else if(diff<0){$('header').append(repl('<div class="expiry-info"> \
Ahem! This ERPNext subscription <b>has expired</b> and should be deleted. \
</div>',{expiry_string:expiry_string}));}}}
erpnext.set_about();$('#startup_div').toggle(false);} erpnext.set_about();$('#startup_div').toggle(false);}
show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);} show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);}
else if(nm=='Accounts Browser') else if(nm=='Accounts Browser')