Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/crm/doctype/enquiry/enquiry.js b/crm/doctype/enquiry/enquiry.js
index a8c8ea2..2eddafa 100644
--- a/crm/doctype/enquiry/enquiry.js
+++ b/crm/doctype/enquiry/enquiry.js
@@ -42,15 +42,16 @@
       hide_field(['customer', 'customer_address', 'contact_person', 'customer_name', 'contact_display', 'customer_group']);
     }
   } 
-  
-  if(doc.enquiry_from == 'Lead' && doc.lead) {
-    cur_frm.cscript.lead(doc,cdt,cdn);
-  } 
 
   // setup fetch
   cur_frm.cscript.set_fetch();
 }
 
+cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
+	if(doc.enquiry_from == 'Lead' && doc.lead) {
+	 	cur_frm.cscript.lead(doc,cdt,cdn);
+	}
+}
 
 // fetch
 // ===============================================================
diff --git a/crm/doctype/quotation/quotation.js b/crm/doctype/quotation/quotation.js
index bdf6781..f21df25 100644
--- a/crm/doctype/quotation/quotation.js
+++ b/crm/doctype/quotation/quotation.js
@@ -21,11 +21,6 @@
   //if(!doc.price_list_name && sys_defaults.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
   if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company});
   if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year});
-
-  // load default charges
-  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) cur_frm.cscript.load_taxes(doc, cdt, cdn);
-
-  if(doc.__islocal==1){  cur_frm.cscript.price_list_name(doc, cdt, cdn);}
   
   if(doc.quotation_to) {
     if(doc.quotation_to == 'Customer') {
@@ -37,6 +32,12 @@
   }
 }
 
+cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
+  // load default charges
+  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) 
+    cur_frm.cscript.load_taxes(doc, cdt, cdn);
+}
+
 // hide - unhide fields based on lead or customer..
 // =======================================================================================================================
 cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){
diff --git a/material_management/doctype/purchase_receipt/purchase_receipt.js b/material_management/doctype/purchase_receipt/purchase_receipt.js
index da06321..e060e3c 100644
--- a/material_management/doctype/purchase_receipt/purchase_receipt.js
+++ b/material_management/doctype/purchase_receipt/purchase_receipt.js
@@ -13,10 +13,6 @@
   if (!doc.posting_date) doc.posting_date = dateutil.obj_to_str(new Date());
   if (!doc.transaction_date) doc.transaction_date = dateutil.obj_to_str(new Date());
   if (!doc.status) doc.status = 'Draft';
-
-  if(doc.__islocal){ 
-    cur_frm.cscript.get_default_schedule_date(doc);
-  }  
   
   if(doc.__islocal){
     hide_field(['supplier_name','supplier_address','contact_person','address_display','contact_display','contact_mobile','contact_email']);
@@ -26,6 +22,12 @@
   
 }
 
+cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
+	if(doc.__islocal){ 
+		cur_frm.cscript.get_default_schedule_date(doc);
+	}	
+}
+
 //========================== Refresh ===============================================================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) { 
 
diff --git a/material_management/doctype/stock_ledger/stock_ledger.py b/material_management/doctype/stock_ledger/stock_ledger.py
index a52dae7..e67afa6 100644
--- a/material_management/doctype/stock_ledger/stock_ledger.py
+++ b/material_management/doctype/stock_ledger/stock_ledger.py
@@ -235,3 +235,10 @@
 		sle_obj.validate()
 		sle.save(new = 1)
 		return sle.name
+		
+	def repost(self):
+		"""
+		Repost everything!
+		"""
+		for wh in sql("select name from tabWarehouse"):
+			get_obj('Warehouse', wh[0]).repost_stock()
diff --git a/patches/patch.py b/patches/patch.py
index 768f7cb..f129482 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -1,6 +1,6 @@
 # REMEMBER to update this
 # ========================
-last_patch = 293
+last_patch = 294
 
 #-------------------------------------------
 
@@ -1167,3 +1167,10 @@
 	elif patch_no == 293:
 		sql("delete from tabDocField where parent='Account' and fieldname='address'")
 		reload_doc('accounts', 'doctype', 'account')
+	elif patch_no == 294:
+		# new account profile fix
+		ul = sql("select name from tabProfile where ifnull(name,'') not in ('Administrator', 'Guest', '')")
+		# if one user and one user has no roles
+		if len(ul)==1 and not sql("select parent from tabUserRole where role='System Manager' and parent=%s", ul[0][0]):
+			get_obj('Setup Control').add_roles(Document('Profile', ul[0][0]))
+		
diff --git a/setup/doctype/sales_person/sales_person.py b/setup/doctype/sales_person/sales_person.py
index f085376..04a40bd 100644
--- a/setup/doctype/sales_person/sales_person.py
+++ b/setup/doctype/sales_person/sales_person.py
@@ -6,6 +6,7 @@
 from webnotes.model.code import get_obj
 from webnotes import session, form, is_testing, msgprint, errprint
 
+
 sql = webnotes.conn.sql
 convert_to_lists = webnotes.conn.convert_to_lists
 	
@@ -36,7 +37,7 @@
 
 
   def validate(self): 
-
+	from webnotes.utils import flt
     for d in getlist(self.doclist, 'target_details'):
       if not flt(d.target_qty) and not flt(d.target_amount):
         msgprint("Either target qty or target amount is mandatory.")
diff --git a/setup/doctype/setup_control/setup_control.py b/setup/doctype/setup_control/setup_control.py
index 9712860..dee01b2 100644
--- a/setup/doctype/setup_control/setup_control.py
+++ b/setup/doctype/setup_control/setup_control.py
@@ -18,160 +18,164 @@
 
 
 class DocType:
-  def __init__(self, d, dl):
-    self.doc, self.doclist = d, dl
-  
-  #Default Naming Series
-  #---------------------------------------------------
-  def naming_series(self):
-    ns = [['TDS Payment', 'TDSP'], ['Payable Voucher', 'BILL'], ['Journal Voucher', 'JV'], ['Receivable Voucher', 'INV'], ['Lead', 'Lead'], ['Indent', 'IDT'], ['Enquiry', 'Enquiry'], ['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()
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+	
+	#Default Naming Series
+	#---------------------------------------------------
+	def naming_series(self):
+		ns = [['TDS Payment', 'TDSP'], ['Payable Voucher', 'BILL'], ['Journal Voucher', 'JV'], ['Receivable Voucher', 'INV'], ['Lead', 'Lead'], ['Indent', 'IDT'], ['Enquiry', 'Enquiry'], ['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):
-    args = eval(args)
-    
-    self.set_cp_defaults(args['company_name'], args['industry'], args['time_zone'], args['country'], args['account_name'])
-    self.create_profile(args['user'], args['first_name'], args['last_name'])  
-    self.update_client_control()
-    
-  
-  # Account Setup
-  # ---------------
-  def setup_account(self, args):
-    company_name, comp_abbr, fy_start, currency = eval(args)
-    curr_fiscal_year,fy_start_date = self.get_fy_details(fy_start)
-    self.currency = currency
-    
-    # Fiscal Year
-    master_dict = {'Fiscal Year':{'year':curr_fiscal_year,
-                                  'year_start_date':fy_start_date}}
-    self.create_records(master_dict)
-    
-    # Company
-    master_dict = {'Company':{'company_name':company_name,
-                              'abbr':comp_abbr                              
-                              }}
-    self.create_records(master_dict)
-    
-    def_args = {'current_fiscal_year':curr_fiscal_year,
-                'default_currency': currency,
-                'default_company':company_name,
-                'default_valuation_method':'FIFO',
-                'date_format':'dd-mm-yyyy',
-                'default_currency_format':'Lacs',
-                'so_required':'No',
-                'dn_required':'No',
-                'po_required':'No',
-                'pr_required':'No',
-                'emp_created_by':'Naming Series',
-                'cust_master_name':'Customer Name', 
-                'supp_master_name':'Supplier Name'}
+	# set account details
+	#-----------------------
+	def set_account_details(self, args):
+		args = eval(args)
+		
+		self.set_cp_defaults(args['company_name'], args['industry'], args['time_zone'], args['country'], args['account_name'])
+		self.create_profile(args['user'], args['first_name'], args['last_name'])	
+		self.update_client_control()
+		
+	
+	# Account Setup
+	# ---------------
+	def setup_account(self, args):
+		company_name, comp_abbr, fy_start, currency = eval(args)
+		curr_fiscal_year,fy_start_date = self.get_fy_details(fy_start)
+		self.currency = currency
+		
+		# Fiscal Year
+		master_dict = {'Fiscal Year':{'year':curr_fiscal_year,
+																	'year_start_date':fy_start_date}}
+		self.create_records(master_dict)
+		
+		# Company
+		master_dict = {'Company':{'company_name':company_name,
+															'abbr':comp_abbr															
+															}}
+		self.create_records(master_dict)
+		
+		def_args = {'current_fiscal_year':curr_fiscal_year,
+								'default_currency': currency,
+								'default_company':company_name,
+								'default_valuation_method':'FIFO',
+								'date_format':'dd-mm-yyyy',
+								'default_currency_format':'Lacs',
+								'so_required':'No',
+								'dn_required':'No',
+								'po_required':'No',
+								'pr_required':'No',
+								'emp_created_by':'Naming Series',
+								'cust_master_name':'Customer Name', 
+								'supp_master_name':'Supplier Name'}
 
-    # Set 
-    self.set_defaults(def_args)
+		# Set 
+		self.set_defaults(def_args)
 
-    # Set Registration Complete
-    set_default('registration_complete','1')
+		# Set Registration Complete
+		set_default('registration_complete','1')
 
-    import webnotes.utils
-    return webnotes.utils.get_defaults()
+		import webnotes.utils
+		return webnotes.utils.get_defaults()
 
-    
-  # Get Fiscal year Details
-  # ------------------------
-  def get_fy_details(self, fy_start):
-    st = {'1st Jan':'01-01','1st Apr':'04-01','1st Jul':'07-01', '1st Oct': '10-01'}
-    curr_year = getdate(nowdate()).year
-    if cint(getdate(nowdate()).month) < cint((st[fy_start].split('-'))[0]):
-      curr_year = getdate(nowdate()).year - 1
-    stdt = cstr(curr_year)+'-'+cstr(st[fy_start])
-    #eddt = sql("select DATE_FORMAT(DATE_SUB(DATE_ADD('%s', INTERVAL 1 YEAR), INTERVAL 1 DAY),'%%d-%%m-%%Y')" % (stdt.split('-')[2]+ '-' + stdt.split('-')[1] + '-' + stdt.split('-')[0]))
-    if(fy_start == '1st Jan'):
-      fy = cstr(getdate(nowdate()).year)
-    else:
-      fy = cstr(curr_year) + '-' + cstr(curr_year+1)
-    return fy,stdt
+		
+	# Get Fiscal year Details
+	# ------------------------
+	def get_fy_details(self, fy_start):
+		st = {'1st Jan':'01-01','1st Apr':'04-01','1st Jul':'07-01', '1st Oct': '10-01'}
+		curr_year = getdate(nowdate()).year
+		if cint(getdate(nowdate()).month) < cint((st[fy_start].split('-'))[0]):
+			curr_year = getdate(nowdate()).year - 1
+		stdt = cstr(curr_year)+'-'+cstr(st[fy_start])
+		#eddt = sql("select DATE_FORMAT(DATE_SUB(DATE_ADD('%s', INTERVAL 1 YEAR), INTERVAL 1 DAY),'%%d-%%m-%%Y')" % (stdt.split('-')[2]+ '-' + stdt.split('-')[1] + '-' + stdt.split('-')[0]))
+		if(fy_start == '1st Jan'):
+			fy = cstr(getdate(nowdate()).year)
+		else:
+			fy = cstr(curr_year) + '-' + cstr(curr_year+1)
+		return fy,stdt
 
 
-  # Create Company and Fiscal Year
-  # ------------------------------- 
-  def create_records(self, master_dict):
-    for d in master_dict.keys():
-      rec = Document(d)
-      for fn in master_dict[d].keys():
-        rec.fields[fn] = master_dict[d][fn]
-      # add blank fields
-      for fn in rec.fields:
-        if fn not in master_dict[d].keys()+['name','owner','doctype']:
-          rec.fields[fn] = ''
-      rec_obj = get_obj(doc=rec)
-      rec_obj.doc.save(1)
-      if hasattr(rec_obj, 'on_update'):
-        rec_obj.on_update()
+	# Create Company and Fiscal Year
+	# ------------------------------- 
+	def create_records(self, master_dict):
+		for d in master_dict.keys():
+			rec = Document(d)
+			for fn in master_dict[d].keys():
+				rec.fields[fn] = master_dict[d][fn]
+			# add blank fields
+			for fn in rec.fields:
+				if fn not in master_dict[d].keys()+['name','owner','doctype']:
+					rec.fields[fn] = ''
+			rec_obj = get_obj(doc=rec)
+			rec_obj.doc.save(1)
+			if hasattr(rec_obj, 'on_update'):
+				rec_obj.on_update()
 
 
-  # Set System Defaults
-  # --------------------
-  def set_defaults(self, def_args):
-    ma_obj = get_obj('Manage Account','Manage Account')
-    for d in def_args.keys():
-      ma_obj.doc.fields[d] = def_args[d]
-    ma_obj.doc.save()
-    ma_obj.update_cp()
+	# Set System Defaults
+	# --------------------
+	def set_defaults(self, def_args):
+		ma_obj = get_obj('Manage Account','Manage Account')
+		for d in def_args.keys():
+			ma_obj.doc.fields[d] = def_args[d]
+		ma_obj.doc.save()
+		ma_obj.update_cp()
 
 
-  # Set Control Panel Defaults
-  # --------------------------
-  def set_cp_defaults(self, cname, industry, timezone, country, acc_name):
-    cp = Document('Control Panel','Control Panel')
-    cp.account_id = acc_name
-    cp.company_name = cname
-    cp.industry = industry
-    cp.time_zone = timezone
-    cp.country = country
-    cp.client_name = '<div style="padding:4px; font-size:20px;">'+cname+'</div>'
-    cp.save()
-      
-  # Create Profile
-  # --------------
-  def create_profile(self, user_email, user_fname, user_lname):
-    roles_list = ['System Manager','Sales Manager','Sales User','Purchase Manager','Purchase User','Material Manager','Material User','Accounts Manager','Accounts User','HR Manager','HR User','Production Manager','Production User','Sales Master Manager','Purchase Master Manager','Material Master Manager','Quality Manager','Maintenance User','Maintenance Manager']
-    pr = Document('Profile')
-    pr.first_name = user_fname
-    pr.last_name = user_lname
-    pr.email = user_email
-    pr.enabled = 1
-    pr.save(1)
-    for r in roles_list:
-      d = addchild(pr, 'userroles', 'UserRole', 1)
-      d.role = r
-      d.save()
-    # Add roles to Administrator profile
-    pr_obj = get_obj('Profile','Administrator')
-    for r in roles_list:
-      d = addchild(pr_obj.doc,'userroles', 'UserRole', 1)
-      d.role = r
-      d.save()
-  
-  # Update WN ERP Client Control
-  # -----------------------------
-  def update_client_control(self):
-    cl = Document('WN ERP Client Control','WN ERP Client Control')
-    cl.account_start_date = nowdate()
-    cl.total_users = 1
-    cl.is_trial_account = 1
-    cl.save()
+	# Set Control Panel Defaults
+	# --------------------------
+	def set_cp_defaults(self, cname, industry, timezone, country, acc_name):
+		cp = Document('Control Panel','Control Panel')
+		cp.account_id = acc_name
+		cp.company_name = cname
+		cp.industry = industry
+		cp.time_zone = timezone
+		cp.country = country
+		cp.client_name = '<div style="padding:4px; font-size:20px;">'+cname+'</div>'
+		cp.save()
+			
+	# Create Profile
+	# --------------
+	def create_profile(self, user_email, user_fname, user_lname):
+		pr = Document('Profile')
+		pr.first_name = user_fname
+		pr.last_name = user_lname
+		pr.email = user_email
+		pr.enabled = 1
+		pr.save(1)
+		self.add_roles(pr)
+	
+	def add_roles(self, pr):
+		roles_list = ['System Manager','Sales Manager','Sales User','Purchase Manager','Purchase User','Material Manager','Material User','Accounts Manager','Accounts User','HR Manager','HR User','Production Manager','Production User','Sales Master Manager','Purchase Master Manager','Material Master Manager','Quality Manager','Maintenance User','Maintenance Manager']
+		for r in roles_list:
+			d = addchild(pr, 'userroles', 'UserRole', 1)
+			d.role = r
+			d.save(1)
 
-  # Sync DB
-  # -------
-  def sync_db(arg=''):
-    import webnotes.model.db_schema
-    sql("delete from `tabDocType Update Register`")
-    webnotes.model.db_schema.sync_all()
\ No newline at end of file
+		# Add roles to Administrator profile
+		pr_obj = get_obj('Profile','Administrator')
+		for r in roles_list:
+			d = addchild(pr_obj.doc,'userroles', 'UserRole', 1)
+			d.role = r
+			d.save(1)
+	
+	# Update WN ERP Client Control
+	# -----------------------------
+	def update_client_control(self):
+		cl = Document('WN ERP Client Control','WN ERP Client Control')
+		cl.account_start_date = nowdate()
+		cl.total_users = 1
+		cl.is_trial_account = 1
+		cl.save()
+
+	# Sync DB
+	# -------
+	def sync_db(arg=''):
+		import webnotes.model.db_schema
+		sql("delete from `tabDocType Update Register`")
+		webnotes.model.db_schema.sync_all()
\ No newline at end of file
diff --git a/srm/doctype/indent/indent.js b/srm/doctype/indent/indent.js
index a2e1614..8d7ffb1 100644
--- a/srm/doctype/indent/indent.js
+++ b/srm/doctype/indent/indent.js
@@ -9,10 +9,13 @@
   if (!doc.transaction_date) doc.transaction_date = dateutil.obj_to_str(new Date())
   if (!doc.status) doc.status = 'Draft';
   
+}
+
+cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
   // second call
   if(doc.__islocal){ 
     cur_frm.cscript.get_item_defaults(doc);
-  }
+  }	
 }
 
 cur_frm.cscript.get_item_defaults = function(doc) {
diff --git a/srm/doctype/purchase_order/purchase_order.js b/srm/doctype/purchase_order/purchase_order.js
index cbc0d3a..5714126 100644
--- a/srm/doctype/purchase_order/purchase_order.js
+++ b/srm/doctype/purchase_order/purchase_order.js
@@ -15,16 +15,18 @@
   if(!doc.currency) doc.currency = sys_defaults.currency;
   if(!doc.status) set_multiple(cdt,cdn,{status:'Draft'});
   if(!doc.transaction_date) set_multiple(cdt,cdn,{transaction_date:get_today()});
-    
-  if(doc.__islocal){ 
-    cur_frm.cscript.get_default_schedule_date(doc);
-  }
   
   if(doc.__islocal){
     hide_field(['supplier_name','supplier_address','contact_person','address_display','contact_display','contact_mobile','contact_email']);
   }
 }
 
+cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
+  if(doc.__islocal){ 
+    cur_frm.cscript.get_default_schedule_date(doc);
+  }	
+}
+
 // ================================== Refresh ==========================================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {