Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/budget_distribution/budget_distribution.py b/accounts/doctype/budget_distribution/budget_distribution.py
index f2fff5a..00d11f9 100644
--- a/accounts/doctype/budget_distribution/budget_distribution.py
+++ b/accounts/doctype/budget_distribution/budget_distribution.py
@@ -8,11 +8,11 @@
 # 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.	If not, see <http://www.gnu.org/licenses/>.
 
 from __future__ import unicode_literals
 import webnotes
@@ -20,26 +20,26 @@
 from webnotes.utils import flt
 from webnotes.model.doc import addchild
 from webnotes.model.bean import getlist
-from webnotes import msgprint
+from webnotes import msgprint, _
 
 class DocType:
-  def __init__(self,doc,doclist=[]):
-    self.doc,self.doclist = doc,doclist
-    
-  def get_months(self):
-    month_list = ['January','February','March','April','May','June','July','August','September',
+	def __init__(self,doc,doclist=[]):
+		self.doc,self.doclist = doc,doclist
+		
+	def get_months(self):
+		month_list = ['January','February','March','April','May','June','July','August','September',
 		'October','November','December']
-    idx =1
-    for m in month_list:
-      mnth = addchild(self.doc, 'budget_distribution_details',
-        'Budget Distribution Detail', self.doclist)
-      mnth.month = m or ''
-      mnth.idx = idx
-      idx += 1
-      
-  def validate(self):
-    total = 0
-    for d in getlist(self.doclist,'budget_distribution_details'):
-      total = flt(total) + flt(d.percentage_allocation)
-    if total != 100:
-      msgprint("Percentage Allocation should be equal to 100%%. Currently it is %s%%" % total, raise_exception=1)
+		idx =1
+		for m in month_list:
+			mnth = addchild(self.doc, 'budget_distribution_details',
+				'Budget Distribution Detail', self.doclist)
+			mnth.month = m or ''
+			mnth.idx = idx
+			idx += 1
+			
+	def validate(self):
+		total = sum([flt(d.percentage_allocation, 2) for d in self.doclist.get(
+			{"parentfield": "budget_distribution_details"})])
+			
+		if total != 100.0:
+			msgprint(_("Percentage Allocation should be equal to ") + "100%", raise_exception=1)
\ No newline at end of file
diff --git a/accounts/doctype/cost_center/cost_center.js b/accounts/doctype/cost_center/cost_center.js
index ed60cc0..96af1cf 100644
--- a/accounts/doctype/cost_center/cost_center.js
+++ b/accounts/doctype/cost_center/cost_center.js
@@ -14,6 +14,40 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+wn.provide("erpnext.accounts");
+erpnext.accounts.CostCenterController = wn.ui.form.Controller.extend({
+	onload: function() {
+		this.setup_queries();
+	},
+	
+	setup_queries: function() {
+		var me = this;
+		if(this.frm.fields_dict["budget_details"].grid.get_field("account")) {
+			this.frm.set_query("account", "budget_details", function() {
+				return {
+					filters:[
+						['Account', 'company', '=', me.frm.doc.company],
+						['Account', 'is_pl_account', '=', 'Yes'],
+						['Account', 'debit_or_credit', '=', 'Debit'],
+						['Account', 'group_or_ledger', '!=', 'Group'],
+					]
+				}
+			});
+		}
+		
+		this.frm.set_query("parent_cost_center", function() {
+			return {
+				filters:[			
+					['Cost Center', 'group_or_ledger', '=', 'Group'],
+					['Cost Center', 'company', '=', me.frm.doc.company],
+				]
+			}
+		});
+	}
+});
+
+$.extend(cur_frm.cscript, new erpnext.accounts.CostCenterController({frm: cur_frm}));
+
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	var intro_txt = '';
 	cur_frm.toggle_display('cost_center_name', doc.__islocal);
@@ -33,39 +67,12 @@
 		function() { wn.set_route("Accounts Browser", "Cost Center"); }, 'icon-sitemap')
 }
 
-//Account filtering for cost center
-cur_frm.fields_dict['budget_details'].grid.get_field('account').get_query = function(doc) {
-	var mydoc = locals[this.doctype][this.docname];
-	return{
-		filters:[
-			['Account', 'company', '=', doc.company],
-			['Account', 'is_pl_account', '=', 'Yes'],
-			['Account', 'debit_or_credit', '=', 'Debit'],
-			['Account', 'group_or_ledger', '!=', 'Group'],
-			['Account', 'group_or_ledger', 'is not', 'NULL']
-		]
-	}
-}
-
-cur_frm.fields_dict['parent_cost_center'].get_query = function(doc){
-	return{
-		filters:[			
-			['Cost Center', 'group_or_ledger', '=', 'Group'],
-			['Cost Center', 'company', '=', doc.company],
-			['Cost Center', 'company', 'is not', 'NULL']
-		]
-	}
-}
-
-//parent cost center
 cur_frm.cscript.parent_cost_center = function(doc,cdt,cdn){
 	if(!doc.company){
 		alert('Please enter company name first');
 	}
 }
 
-// Hide/unhide group or ledger
-// -----------------------------------------
 cur_frm.cscript.hide_unhide_group_ledger = function(doc) {
 	if (cstr(doc.group_or_ledger) == 'Group') {
 		cur_frm.add_custom_button('Convert to Ledger', 
@@ -76,8 +83,6 @@
 	}
 }
 
-// Convert group to ledger
-// -----------------------------------------
 cur_frm.cscript.convert_to_ledger = function(doc, cdt, cdn) {
 	$c_obj(cur_frm.get_doclist(),'convert_group_to_ledger','',function(r,rt) {
 		if(r.message == 1) {
@@ -86,8 +91,6 @@
 	});
 }
 
-// Convert ledger to group
-// -----------------------------------------
 cur_frm.cscript.convert_to_group = function(doc, cdt, cdn) {
 	$c_obj(cur_frm.get_doclist(),'convert_ledger_to_group','',function(r,rt) {
 		if(r.message == 1) {
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 4a4a3f2..52a4316 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -90,11 +90,11 @@
 		return ret
 		
 	def set_supplier_defaults(self):
-		self.doc.fields.update(self.get_cust())
+		self.doc.fields.update(self.get_supplier())
 		self.doc.fields.update(self.get_credit_to())
 		super(DocType, self).set_supplier_defaults()
 		
-	def get_cust(self):
+	def get_supplier(self):
 		ret = {}
 		if self.doc.credit_to:
 			acc = webnotes.conn.get_value('Account',self.doc.credit_to,['master_name', 'credit_days'])
diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py
index a44ceba..47c28f5 100644
--- a/controllers/buying_controller.py
+++ b/controllers/buying_controller.py
@@ -47,17 +47,12 @@
 		
 		# set contact and address details for supplier, if they are not mentioned
 		if self.doc.supplier and not (self.doc.contact_person and self.doc.supplier_address):
-			for fieldname, val in self.get_default_address_and_contact("supplier").items():
+			for fieldname, val in self.get_supplier_defaults().items():
 				if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
 					self.doc.fields[fieldname] = val
 
 		self.set_missing_item_details(get_item_details)
 
-	def set_supplier_defaults(self):
-		for fieldname, val in self.get_default_address_and_contact("supplier").items():
-			if self.meta.get_field(fieldname):
-				self.doc.fields[fieldname] = val
-						
 	def get_purchase_tax_details(self):
 		self.doclist = self.doc.clear_table(self.doclist, "purchase_tax_details")
 		self.set_taxes("purchase_tax_details", "purchase_other_charges")
diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py
index 1dfb746..b4091b9 100644
--- a/manufacturing/doctype/bom/bom.py
+++ b/manufacturing/doctype/bom/bom.py
@@ -101,9 +101,10 @@
 		""" Get raw material details like uom, desc and rate"""
 		if not args:
 			args = webnotes.form_dict.get('args')
-			
-		import json
-		args = json.loads(args)
+		
+		if isinstance(args, basestring):
+			import json
+			args = json.loads(args)
 				
 		item = self.get_item_det(args['item_code'])
 		self.validate_rm_item(item)
diff --git a/patches/july_2013/p10_change_partner_user_to_website_user.py b/patches/july_2013/p10_change_partner_user_to_website_user.py
new file mode 100644
index 0000000..50bc671
--- /dev/null
+++ b/patches/july_2013/p10_change_partner_user_to_website_user.py
@@ -0,0 +1,9 @@
+import webnotes
+
+def execute():
+	webnotes.conn.sql("""update `tabProfile` set user_type="Website User" where user_type="Partner" """)
+	webnotes.conn.sql("""update `tabProfile` set user_type="System User" where ifnull(user_type, "")="" """)
+	
+	webnotes.conn.sql("""update `tabProfile` set user_type='System User'
+		where user_type='Website User' and exists (select name from `tabUserRole`
+			where parent=`tabProfile`.name)""")
\ No newline at end of file
diff --git a/patches/march_2013/p09_unset_user_type_partner.py b/patches/march_2013/p09_unset_user_type_partner.py
deleted file mode 100644
index cc5cdce..0000000
--- a/patches/march_2013/p09_unset_user_type_partner.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import webnotes
-
-def execute():
-	webnotes.conn.sql("""update `tabProfile` set user_type='System User'
-		where user_type='Partner' and exists (select name from `tabUserRole`
-			where parent=`tabProfile`.name)""")
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index d622cd6..9b6bb0f 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -194,7 +194,6 @@
 	"execute:webnotes.reload_doc('website', 'doctype', 'web_page') #2013-03-25",
 	"execute:webnotes.reload_doc('setup', 'doctype', 'sales_partner') #2013-06-25",
 	"execute:webnotes.conn.set_value('Email Settings', None, 'send_print_in_body_and_attachment', 1)",
-	"patches.march_2013.p09_unset_user_type_partner",
 	"patches.march_2013.p10_set_fiscal_year_for_stock",
 	"patches.march_2013.p10_update_against_expense_account",
 	"patches.march_2013.p11_update_attach_files",
@@ -262,4 +261,5 @@
 	"execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Spartan') # 2013-07-22",
 	"patches.july_2013.p08_custom_print_format_net_total_export",
 	"patches.july_2013.p09_remove_website_pyc",
+	"patches.july_2013.p10_change_partner_user_to_website_user",
 ]
\ No newline at end of file
diff --git a/startup/event_handlers.py b/startup/event_handlers.py
index 3f14542..d19f9e6 100644
--- a/startup/event_handlers.py
+++ b/startup/event_handlers.py
@@ -30,7 +30,7 @@
 			login_manager.user=='Administrator' and '#8CA2B3' or '#1B750D')
 		webnotes.conn.commit()
 		
-	if webnotes.conn.get_value("Profile", webnotes.session.user, "user_type") == "Partner":
+	if webnotes.conn.get_value("Profile", webnotes.session.user, "user_type") == "Website User":
 		from website.helpers.cart import set_cart_count
 		set_cart_count()
 		
diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py
index e980236..4acfdf4 100644
--- a/utilities/transaction_base.py
+++ b/utilities/transaction_base.py
@@ -94,8 +94,10 @@
 			webnotes.conn.get_value("Customer Group", self.doc.customer_group, "default_price_list") or \
 			self.doc.price_list
 			
-		self.doc.fields.update(customer_defaults)
-		
+		for fieldname, val in customer_defaults.items():
+			if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
+				self.doc.fields[fieldname] = val
+			
 		if self.meta.get_field("sales_team"):
 			self.set_sales_team_for_customer()
 			
@@ -121,7 +123,21 @@
 			
 			# add child
 			self.doclist.append(sales_person)
-	
+			
+	def get_supplier_defaults(self):
+		out = self.get_default_address_and_contact("supplier")
+
+		supplier = webnotes.doc("Supplier", self.doc.supplier)
+		out["supplier_name"] = supplier.supplier_name
+		out["currency"] = supplier.default_currency
+		
+		return out
+		
+	def set_supplier_defaults(self):
+		for fieldname, val in self.get_supplier_defaults().items():
+			if not self.doc.fields.get(fieldname) and self.meta.get_field(fieldname):
+				self.doc.fields[fieldname] = val
+				
 	def get_lead_defaults(self):
 		out = self.get_default_address_and_contact("lead")