fixed conflict
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index e31076e..c3c43e0 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -312,18 +312,14 @@
 		supplier = ''
 		if d.purchase_order and not d.purchase_order in self.po_list:
 			supplier = sql("select supplier from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0]
-			doctype = 'purchase order'
-			doctype_no = cstr(d.purchase_order)
 			if supplier and not cstr(self.doc.supplier) == cstr(supplier):
-				msgprint("Supplier name %s do not match with supplier name	of %s %s." %(self.doc.supplier,doctype,doctype_no))
+				msgprint("Supplier name %s do not match with supplier name	of purhase order: %s." %(self.doc.supplier,cstr(d.purchase_order)))
 				raise Exception , " Validation Error "
 
 		if d.purchase_receipt and not d.purchase_receipt in self.pr_list:
 			supplier = sql("select supplier from `tabPurchase Receipt` where name = '%s'" % d.purchase_receipt)[0][0]
-			doctype = 'purchase receipt'
-			doctype_no = cstr(d.purchase_receipt)
 			if supplier and not cstr(self.doc.supplier) == cstr(supplier):
-				msgprint("Supplier name %s do not match with supplier name	of %s %s." %(self.doc.supplier,doctype,doctype_no))
+				msgprint("Supplier name %s do not match with supplier name	of %s %s." %(self.doc.supplier,cstr(d.purchase_receipt)))
 				raise Exception , " Validation Error "
 
 	# Validate values with reference document
@@ -337,7 +333,7 @@
 	def validate_po_pr(self, d):
 		# check po / pr for qty and rates and currency and conversion rate
 
-		# always import_rate must be equal to import_rate of purchase order
+		# currency, import_rate must be equal to currency, import_rate of purchase order
 		if d.purchase_order and not d.purchase_order in self.po_list:
 			# currency
 			currency = cstr(sql("select currency from `tabPurchase Order` where name = '%s'" % d.purchase_order)[0][0])
@@ -346,7 +342,7 @@
 				raise Exception
 			# import_rate
 			rate = flt(sql('select import_rate from `tabPurchase Order Item` where item_code=%s and parent=%s and name = %s', (d.item_code, d.purchase_order, d.po_detail))[0][0])
-			if abs(rate - flt(d.import_rate)) > 1:
+			if abs(rate - flt(d.import_rate)) > 1 and cint(get_defaults('maintain_same_rate')):
 				msgprint("Import Rate for %s in the Purchase Order is %s. Rate must be same as Purchase Order Rate" % (d.item_code,rate))
 				raise Exception
 									
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.css b/erpnext/accounts/page/accounts_browser/accounts_browser.css
index bbbbb6b..718da36 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.css
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.css
@@ -18,3 +18,12 @@
 	font-weight: bold;
 	text-decoration: underline;
 }
+
+span.balance-area {
+	float: right; 
+	height: 13px;
+}
+
+span.balance-bold {
+	font-weight: bold;
+}
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
index 580fd33..667a37e 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js
@@ -23,7 +23,7 @@
 pscript['onload_Accounts Browser'] = function(wrapper){
 	wrapper.appframe = new wn.ui.AppFrame($(wrapper).find('.appframe-area'));
 	wrapper.appframe.add_button('New Company', function() { newdoc('Company'); }, 'icon-plus');
-	wrapper.appframe.add_button('Refresh', function() {  
+	wrapper.appframe.add_button('Refresh', function() {  	
 			wrapper.$company_select.change();
 		}, 'icon-refresh');
 
@@ -79,7 +79,7 @@
 		this.tree = new wn.ui.Tree({
 			parent: $(wrapper).find('.tree-area'), 
 			label: company,
-			args: {ctype: ctype},
+			args: {ctype: ctype, comp: company},
 			method: 'accounts.page.accounts_browser.accounts_browser.get_children',
 			click: function(link) {
 				if(me.cur_toolbar) 
@@ -92,17 +92,25 @@
 					me.cur_toolbar = link.toolbar;
 					$(me.cur_toolbar).toggle(true);					
 				}
+				
+				// bold
+				$('.balance-bold').removeClass('balance-bold'); // deselect
+				$(link).parent().find('.balance-area:first').addClass('balance-bold'); // select
 			
+			},
+			onrender: function(treenode) {
+				var bal = treenode.data && treenode.data.balance.split(' ') || ['',''];
+				treenode.parent.append('<span class="balance-area"><span style="color: #aaa">'+ bal[0] + '</span> ' 
+					+ bal[1] + '</span>');
 			}
 		});
-		this.tree.rootnode.$a.click();		
+		this.tree.rootnode.$a.click();
 	},
 	make_link_toolbar: function(link) {
 		var data = $(link).data('node-data');
 		if(!data) return;
 
 		link.toolbar = $('<span class="tree-node-toolbar"></span>').insertAfter(link);
-		
 		// edit
 		$('<a href="#!Form/'+encodeURIComponent(this.ctype)+'/'
 			+encodeURIComponent(data.value)+'">Edit</a>').appendTo(link.toolbar);
@@ -235,386 +243,4 @@
 		});
 		d.show();
 	}
-});
-
-/*
-pscript.make_chart = function(b, wrapper) {
-	pscript.ctype = b;
-	$(wrapper).find('.tree-area').empty()
-	$(wrapper).find('.layout-sidesection').empty()
-  
-  //================== table body======================================  
-  var ac_main_grid = make_table($i('ab_body'),1,2,'100%',['60%','40%'],{border:"0px", padding:"4px",tableLayout: "fixed", borderCollapse: "collapse"});
-  $y($td(ac_main_grid,0,0),{border: "1px solid #dddddd", padding: "8px"});
-  pscript.account_tree = $a($td(ac_main_grid,0,0),'div', '',{minHeight:'400px'});
-  $y($td(ac_main_grid,0,1),{border: "1px solid #DDD"});
-  pscript.la = $a($td(ac_main_grid,0,1),'div');
-  pscript.acc_period_bal = $a($td(ac_main_grid,0,1),'div');
-  
-  //=====================footer area ==================================
-  if (pscript.ctype == 'Account') {
-    var footer = $a($i('ab_body'),'div','',{backgroundColor: "#FFD", padding: "8px", color: "#444", fontSize: "12px", marginTop: "14px"});
-    
-    var help1 = $a(footer,'span');
-    help1.innerHTML = "<strong>Note:</strong> To create accounts for Customers and Suppliers, please create <a href='#!List/Customer'>Customer</a> and <a href='#!List/Supplier'>Supplier</a>"
-      + " Masters. This will ensure that the accounts are linked to your Selling and Buying Processes. The Account Heads for Customer and Supplier will automatically be created."
-  }
-
-  // header and toolbar
-  // ------------------
-  wrapper.appframe.$titlebar.find('.appframe-title').html('Chart of '+pscript.ctype+'s');  
-
-  // select company
-  // --------------
-  var tab = make_table(select_area, 1, 2, null, [], {verticalAlign:'middle', padding: '2px'});
-  $td(tab,0,0).innerHTML = 'Select Company'.bold();
-  var sel = $a($td(tab,0,1),'select','',{width:'160px'});
-
-  // set tree
-  var set_tree = function() {
-    if(pscript.ac_tree) {
-      pscript.ac_tree.body.innerHTML = '';
-    }
-    pscript.make_ac_tree();
-    var cn = sel_val(sel);
-    var n = pscript.ac_tree.addNode(null, cn, null,pscript.ac_tree.std_onclick, pscript.ac_tree.std_onexp);
-    n.rec = {}; 
-    n.rec.name = 'Root Node'; 
-    n.rec.account_name = cn;
-    n.rec.cost_center_name = cn;
-    pscript.set_ac_head('',n.rec);
-    $ds(pscript.ac_head_area);
-  }
-
-  // select company
-  add_sel_options(sel, ['Loading...']);
-  var callback = function(r,rt) {    
-    empty_select(sel); 
-    add_sel_options(sel,r.message.cl,sys_defaults.company);    
-    set_tree();
-    sel.onchange = function() { set_tree(); }
-  }
-  $c_obj('GL Control', 'get_companies', '', callback);
-  
-  pscript.ab_company_sel = sel; 
-
-  pscript.make_ac_head();
-  pscript.make_group_area();
-  pscript.make_ledger_area();
-  pscript.make_new_acc_dialog();
-  pscript.make_new_cost_center_dialog();
-
-}
-
-pscript.make_ac_tree = function() {
-  //var type= sel_val($i('ctype'))
-  var type= pscript.ctype;
-  var tree = new Tree(pscript.account_tree, '90%');
-  pscript.ac_tree = tree;
-
-  // on click
-  tree.std_onclick = function(node) {
-
-    
-    pscript.cur_node = node;
-
-    // show ledger
-    pscript.set_ac_head(node.parent_account, node.rec,type);
-  }
-
-  // on expand
-  tree.std_onexp = function(node) {
-    if(node.expanded_once)return;
-    $ds(node.loading_div);
-    //set_ac_head
-    var callback = function(r,rt) {
-
-      $dh(node.loading_div);
-      var n = tree.allnodes[r.message.parent_acc_name];
-
-      var cl = r.message.cl;
-
-      if(type=='Account'){
-        for(var i=0;i<cl.length;i++) {
-          var imgsrc=null;
-          var has_children = true;
-          if(cl[i].group_or_ledger=='Ledger') {
-            var imgsrc = 'images/lib/icons/page.png';
-            has_children = false;
-          }
-          var t = tree.addNode(n, cl[i].account_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null);
-          t.rec = cl[i];
-          t.parent_account = r.message.parent;
-        }
-      }
-      else{
-        for (var i=0;i<cl.length;i++){
-          var imgsrc=null;
-          var has_children = true;
-          if(cl[i].group_or_ledger=='Ledger') {
-            var imgsrc = 'images/lib/icons/page.png';
-            has_children = false;
-          }
-          var t = tree.addNode(n, cl[i].cost_center_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null);
-          t.rec = cl[i];
-          t.parent_account = r.message.parent;
-        }
-      }
-    }
-
-    if (type=='Account'){
-      var arg = [node.rec.name, node.rec.account_name, sel_val(pscript.ab_company_sel), pscript.ctype];
-    } else{
-        var arg = [node.rec.name, node.rec.cost_center_name,sel_val(pscript.ab_company_sel), pscript.ctype];
-    }
-
-    $c_obj('GL Control','get_cl',arg.join(','),callback);
-  }
-}
-
-pscript.make_ac_head = function() {
-  var div = $a(pscript.la,'div','ac_head');
-  div.main_head = $a(div,'h3','',{padding:'4px', margin:'0px',backgroundColor:'#EEEEEE',borderBottom:'1px solid #AAAAAA'});
-  
-  div.sub_head1 = $a(div,'div');
-  div.sub_head2 = $a(div,'div');
-  
-  div.balance_area = $a(div,'div');
-  $a(div.balance_area,'span','sectionHeading').innerHTML = "Balance:";
-  div.balance = $a(div.balance_area,'span','ac_balance');
-
-  div.sub_head = $btn(div,'Edit',function() { loaddoc(this.dt, this.dn); });
-  pscript.ac_head_area = div;
-}
-
-// Group / Ledger Area - set properties in the right column
-//---------------------------------------------------------
-
-pscript.set_ac_head = function(parent_account, r,type) {  
-  var d = pscript.ac_head_area;  
-  d.main_head.innerHTML = r.account_name;
-  $ds(d.sub_head);
-  $ds(d.balance_area);  
-  
-  var callback = function(r,rt) {
-   dcc = r.message;
-  }
-  $c_obj('GL Control', 'get_company_currency', pscript.ab_company_sel.value, callback);	        
- 
-  if(r.name!='Root Node') {
-    // Account group/ledger area
-    if(type=='Account'){      
-      d.sub_head.dt = 'Account'; d.sub_head.dn = r.name
-
-      d.sub_head1.innerHTML = r.debit_or_credit + ' - ' + r.group_or_ledger;
-      d.sub_head2.innerHTML = 'Group: ' + parent_account;
-      if(r.group_or_ledger=='Ledger') {
-        $ds(pscript.ledger_area);
-        $ds(pscript.gl_rep);
-        $dh(pscript.cc_rep);
-        $dh(pscript.group_area);
-      } else {
-        $dh(pscript.ledger_area);
-        $ds(pscript.group_area);
-        $ds(pscript.acc_add_btn);
-        $dh(pscript.cc_add_btn);
-      }           
-	  
-	  var callback = function(r,rt) {
-	   dcc = r.message;	   
-	  }
-	  $c_obj('GL Control', 'get_company_currency', pscript.ab_company_sel.value, callback);	  	        
-	  
-      d.balance.innerHTML = (dcc)+ ' ' + (r.balance ? fmt_money(r.balance) :'0.00');
-    }
-    //cost center group/ledger area
-    else{
-      $dh(d.balance_area);
-      d.main_head.innerHTML = r.cost_center_name;
-      d.sub_head.dt = 'Cost Center'; d.sub_head.dn = r.name
-
-      d.sub_head1.innerHTML = '' ;
-      d.sub_head2.innerHTML = 'Group: ' + parent_account;
-      if(r.group_or_ledger=='Ledger') {
-        $ds(pscript.ledger_area);
-        $dh(pscript.gl_rep);
-        $ds(pscript.cc_rep);
-        $dh(pscript.group_area);
-      } else {
-        $dh(pscript.ledger_area);
-        $ds(pscript.group_area);
-        $ds(pscript.cc_add_btn);
-        $dh(pscript.acc_add_btn);
-      }
-
-      d.balance.innerHTML ='';
-    }
-  } else {
-    $dh(d.sub_head);
-    $dh(pscript.ledger_area);
-    $dh(pscript.group_area);
-    $dh(d.balance_area);
-    d.sub_head1.innerHTML = '';
-    d.sub_head2.innerHTML = 'Explore tree on your left to see details';
-  }
-  
-  pscript.acc_period_bal.innerHTML = '';
-}
-
-// Group Area
-// ----------
-
-pscript.make_group_area = function(type) {
-  pscript.group_area = $a(pscript.la,'div','ac_ledger');
-
-  // refresh
-   ref_btn = $a(pscript.group_area, 'div', '', {fontSize: '14px',marginBottom: '8px', marginTop: '24px', fontWeight: 'bold'});
-  ref_btn.innerHTML = '<img src="images/lib/icons/page_refresh.gif" style="margin-right: 8px"><span class="link_type">Refresh Tree</span>';
-  ref_btn.onclick= function() {
-    pscript.cur_node.clear_child_nodes();
-    pscript.cur_node.expand();
-  }
-  pscript.group_area.ref_btn = ref_btn;
-
-  // button for acc adding
-  pscript.acc_add_btn = $btn(pscript.group_area, '+ Add a child Account', function(){ pscript.new_acc_dialog.show(); });
-
-  // button for cost center adding
-  pscript.cc_add_btn = $btn(pscript.group_area, '+ Add a child Cost Center', null);
-
-  //showing new cost center dialog
-  pscript.cc_add_btn.onclick = function(){
-
-    // check for cost center name & group or ledger
-    pscript.cc_dialog.widgets['Create'].onclick = function() {
-      if(!pscript.cc_dialog.widgets['New Cost Center Name'].value) {
-        msgprint('Please enter New Cost Center Name'); return;
-      }
-      if(!sel_val(pscript.cc_dialog.widgets['Group or Ledger'])) {
-        msgprint('Please specify cost center is group or ledger'); return;
-      }
-      //args making
-      args = {
-        'cost_center_name' : pscript.cc_dialog.widgets['New Cost Center Name'].value,
-        'parent_cost_center' : pscript.cur_node.rec.name,
-        'group_or_ledger' : sel_val(pscript.cc_dialog.widgets['Group or Ledger']),
-        'company_name' : sel_val(pscript.ab_company_sel),
-        'company_abbr': '',
-        'old_parent':''
-      }
-      
-      //create cost center -- server to gl control
-      $c_obj('GL Control', 'add_cc', docstring(args), function(r,rt) { 
-        pscript.cc_dialog.widgets['New Cost Center Name'].value='';
-        pscript.cc_dialog.hide();
-        pscript.group_area.ref_btn.onclick(); 
-      });
-    }
-    
-    pscript.new_cost_center_dialog.show();
-  }
-
-
-
-
-}
-
-// Ledger Area
-// ----------
-
-pscript.make_ledger_area = function() {
-  pscript.ledger_area = $a(pscript.la,'div','ac_ledger');
-
-  //General ledger report link
-  pscript.gl_rep = $a(pscript.ledger_area, 'div','', {fontSize: '14px',marginBottom: '8px', fontWeight: 'bold'});
-  pscript.gl_rep.innerHTML = '<img src="images/lib/icons/report.png" style="margin-right: 8px"><span class="link_type">Open Ledger</span>';
-  pscript.gl_rep.onclick = function(){ pscript.make_report('gl'); }
-
-}
-
-pscript.make_report = function(flag){
-  if(flag=='gl'){
-    var callback = function(report){
-      report.set_filter('GL Entry', 'Account',pscript.cur_node.rec.name)
-      report.dt.run();
-    }
-    loadreport('GL Entry','General Ledger',callback);
-  }
-}
-
-// New Account
-pscript.make_new_acc_dialog = function() {
-  var d = new Dialog(300,400,'Create A New Account');
-  d.make_body([
-    ['HTML','Heading'],
-    ['Data','New Account Name'],
-    ['Select','Group or Ledger','Specify whether the new account is a Ledger or Group'],
-    ['Select','Account Type','[Optional] Specify the type of this account'],
-    ['Data','Tax Rate','Specify the default tax rate'],
-		['Select','Master Type','Specify the master type of this account'],
-    ['Button','Create']
-  ]);
-
-  add_sel_options(d.widgets['Group or Ledger'], ['Group', 'Ledger'],'Group');
-  add_sel_options(d.widgets['Account Type'], ['', 'Fixed Asset Account','Bank or Cash','Expense Account','Tax','Income Account','Chargeable'], '');
-	add_sel_options(d.widgets['Master Type'], ['NA', 'Supplier','Customer','Employee'],'NA');
-	
-  // hide / show account type
-  d.widgets['Group or Ledger'].onchange = function() {
-    if(sel_val(this)=='Ledger')$ds(d.rows['Account Type']);
-    else $dh(d.rows['Account Type']);
-  }
-
-  // hide / show tax rate
-  d.widgets['Account Type'].onchange = function() {
-    if(sel_val(this)=='Tax' || sel_val(this)=='Chargeable')$ds(d.rows['Tax Rate']);
-    else $dh(d.rows['Tax Rate']);
-  }
-
-  d.onshow = function() {
-    $dh(this.rows['Account Type']);
-    $dh(this.rows['Tax Rate']);
-    this.widgets['Group or Ledger'].selectedIndex = 0;
-    this.widgets['Account Type'].selectedIndex = 0;
-		this.widgets['Master Type'].selectedIndex = 0;
-    d.widgets['New Account Name'].value = '';
-    d.widgets['Tax Rate'].value = '';
-  }
-
-  d.widgets['Create'].onclick = function() {
-    if(!d.widgets['New Account Name'].value) {
-      msgprint('Please enter New Account Name'); return;
-    }
-		if(!sel_val(d.widgets['Master Type'])) {
-      msgprint('Please enter master type of this new account'); return;
-    }
-    args = {
-      'account_name' : d.widgets['New Account Name'].value,
-      'parent_account' : pscript.cur_node.rec.name,
-      'group_or_ledger' : sel_val(d.widgets['Group or Ledger']),
-      'company' : sel_val(pscript.ab_company_sel),
-      'account_type' : sel_val(d.widgets['Account Type']),
-      'tax_rate' : d.widgets['Tax Rate'].value,
-      'master_type': sel_val(d.widgets['Master Type'])
-    }
-    $c_obj('GL Control', 'add_ac', docstring(args), function(r,rt) { d.hide(); pscript.group_area.ref_btn.onclick(); });
-  }
-  pscript.new_acc_dialog = d;
-
-}
-
-// New Cost Center
-pscript.make_new_cost_center_dialog = function(){
-  pscript.cc_dialog = new Dialog(300,400,'Create A New Cost Center');
-  pscript.cc_dialog.make_body([
-    ['HTML','Heading'],
-    ['Data','New Cost Center Name'],
-    ['Select','Group or Ledger','Specify whether the new cost center is a Ledger or Group'],
-    ['Button','Create']
-    ]);
-
-  add_sel_options(pscript.cc_dialog.widgets['Group or Ledger'], ['Group','Ledger'], 'Group');
-
-  pscript.new_cost_center_dialog = pscript.cc_dialog;
-}
-*/
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
index ee4ec55..18c7c76 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.py
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py
@@ -1,4 +1,5 @@
 import webnotes
+from webnotes.utils import get_defaults, cstr
 
 @webnotes.whitelist()
 def get_companies():
@@ -7,25 +8,41 @@
 @webnotes.whitelist()
 def get_children():
 	args = webnotes.form_dict
-	ctype = args['ctype']
-	company_field = ctype=='Account' and 'company' or 'company_name'
+	ctype, company = args['ctype'], args['comp']
 	
+	company_field = ctype=='Account' and 'company' or 'company_name'
+
 	# root
-	if args['parent'] in get_companies():
-		return webnotes.conn.sql("""select 
+	if args['parent'] == company:
+		acc = webnotes.conn.sql(""" select 
 			name as value, if(group_or_ledger='Group', 1, 0) as expandable
 			from `tab%s`
 			where ifnull(parent_%s,'') = ''
-			and %s = %s
-			and docstatus<2 
+			and %s = %s	and docstatus<2 
 			order by name""" % (ctype, ctype.lower().replace(' ','_'), company_field, '%s'),
 				args['parent'], as_dict=1)
+	else:	
+		# other
+		acc = webnotes.conn.sql("""select 
+			name as value, if(group_or_ledger='Group', 1, 0) as expandable
+	 		from `tab%s` 
+			where ifnull(parent_%s,'') = %s
+			and docstatus<2 
+			order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'),
+				args['parent'], as_dict=1)
+				
+	if ctype == 'Account':
+		currency = webnotes.conn.sql("select default_currency from `tabCompany` where name = %s", company)[0][0]
+		for each in acc:
+			bal = webnotes.conn.sql("select balance from `tabAccount Balance` \
+				where account = %s and period = %s", (each.get('value'), get_defaults('fiscal_year')))[0][0]
+			each['balance'] = currency + ' ' + cstr(bal)
+		
+	return acc
 	
-	# other
-	return webnotes.conn.sql("""select 
-		name as value, if(group_or_ledger='Group', 1, 0) as expandable
-	 	from `tab%s` 
-		where ifnull(parent_%s,'') = %s
-		and docstatus<2 
-		order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'),
-			args['parent'], as_dict=1)
\ No newline at end of file
+
+@webnotes.whitelist()		
+def get_account_balance():
+	args = webnotes.form_dict
+	acc = args['acc']
+	return 'Rs. 100'
\ No newline at end of file
diff --git a/erpnext/patches/may_2012/same_purchase_rate_patch.py b/erpnext/patches/may_2012/same_purchase_rate_patch.py
new file mode 100644
index 0000000..6cca178
--- /dev/null
+++ b/erpnext/patches/may_2012/same_purchase_rate_patch.py
@@ -0,0 +1,8 @@
+def execute():
+	import webnotes
+	from webnotes.model.code import get_obj
+	gd = get_obj('Global Defaults')
+	gd.doc.maintain_same_rate = 1
+	gd.doc.save()
+	gd.on_update()
+	
\ No newline at end of file
diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py
index 4ae8feb..34e384c 100644
--- a/erpnext/patches/patch_list.py
+++ b/erpnext/patches/patch_list.py
@@ -382,5 +382,10 @@
 		'patch_file': 'clear_session_cache',
 		'description': 'clears session cache as shifting to json format'
 	},
-
-]
+	{
+		'patch_module': 'patches.may_2012',
+		'patch_file': 'same_purchase_rate_patch',
+		'description': 'Main same rate throughout pur cycle: in global defaults, by default set true'
+	},
+	
+]
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sms_center/sms_center.py b/erpnext/selling/doctype/sms_center/sms_center.py
index e2d9b3a..579f1a8 100644
--- a/erpnext/selling/doctype/sms_center/sms_center.py
+++ b/erpnext/selling/doctype/sms_center/sms_center.py
@@ -47,7 +47,6 @@
     if self.doc.send_to == 'All Sales Partner Contact':
       where_clause = self.doc.sales_partner and " and ifnull(is_sales_partner, 0) = 1 and sales_aprtner = '%s'" % self.doc.sales_partner or " and ifnull(is_sales_partner, 0) = 1"
     if self.doc.send_to in ['All Contact', 'All Customer Contact', 'All Supplier Contact', 'All Sales Partner Contact']:
-      msgprint("select CONCAT(ifnull(first_name,''),'',ifnull(last_name,'')), mobile_no from `tabContact` where ifnull(mobile_no,'')!='' and docstatus != 2 %s" % where_clause)
       rec = sql("select CONCAT(ifnull(first_name,''),'',ifnull(last_name,'')), mobile_no from `tabContact` where ifnull(mobile_no,'')!='' and docstatus != 2 %s" % where_clause)
     elif self.doc.send_to == 'All Lead (Open)':
       rec = sql("select lead_name, mobile_no from tabLead where ifnull(mobile_no,'')!='' and docstatus != 2 and status = 'Open'")
diff --git a/erpnext/selling/page/selling_home/selling_home.html b/erpnext/selling/page/selling_home/selling_home.html
index 2b3414e..05f9858 100644
--- a/erpnext/selling/page/selling_home/selling_home.html
+++ b/erpnext/selling/page/selling_home/selling_home.html
@@ -78,6 +78,11 @@
 							title = "Sales campaigns"
 							href="#!List/Campaign">Campaign</a>
 					</div>
+					<div class="section-item">
+						<a class="section-link" 
+							title = "Send mass SMS to your conatacts, leads and employees"
+							href="#!Form/SMS Center/SMS Center">SMS Center</a>
+					</div>
 				</div>
 			</div>
 			<div class="section">
@@ -93,7 +98,7 @@
 							title = "Analyze Sales and Purchase trends and slice them based on item, customer, groups etc"
 							href="#!Report/Profile/Trend Analyzer">Trend Analyzer</a>
 					</div>
-					<!--><div class="section-item">
+					<!--<div class="section-item">
 						<a class="section-link" 
 							title = "sales trends"
 							href="#!Sales Dashboard">Sales Dashboard</a>
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.py b/erpnext/setup/doctype/global_defaults/global_defaults.py
index 0427640..9d30885 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.py
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.py
@@ -35,7 +35,8 @@
 	'date_format': 'date_format',
 	'currency_format':'default_currency_format',
 	'account_url':'account_url',
-	'allow_negative_stock' : 'allow_negative_stock'
+	'allow_negative_stock' : 'allow_negative_stock',
+	'maintain_same_rate' : 'maintain_same_rate'
 }
 
 class DocType:
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.txt b/erpnext/setup/doctype/global_defaults/global_defaults.txt
index 5355c10..d1175b7 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.txt
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-18 17:00:50',
+		'creation': '2012-04-20 14:02:53',
 		'docstatus': 0,
-		'modified': '2012-04-19 17:24:45',
+		'modified': '2012-05-22 14:11:21',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -224,8 +224,8 @@
 		'fieldtype': u'Select',
 		'label': u'Default Valuation Method',
 		'options': u'FIFO\nMoving Average'
-	},	
-	
+	},
+
 	# DocField
 	{
 		'colour': u'White:FFF',
@@ -511,6 +511,14 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'maintain_same_rate',
+		'fieldtype': u'Check',
+		'label': u'Maintain same rate throughout purchase cycle'
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'hr',
 		'fieldtype': u'Section Break',
 		'label': u'HR',
@@ -543,4 +551,4 @@
 		'fieldtype': u'Data',
 		'label': u'SMS Sender Name'
 	}
-]
+]
\ No newline at end of file
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index a2946f5..f4a72fd 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -35,20 +35,18 @@
 		elif self.doc.sales_partner:
 			self.doc.name = self.doc.sales_partner + '-' + self.doc.address_type
 			
-		# filter out bad characters in name
-		#self.doc.name = self.doc.name.replace('&','and').replace('.','').replace("'",'').replace('"','').replace(',','').replace('`','')
 
-#----------------------
-# Call to Validate
-#----------------------
 	def validate(self):
+		self.validate_for_whom()
 		self.validate_primary_address()
 		self.validate_shipping_address()
 
-#----------------------
-# Validate that there can only be one primary address for particular customer, supplier
-#----------------------
+	def validate_for_whom(self):
+		if not (self.doc.customer or self.doc.supplier or self.doc.sales_partner):
+			msgprint("Please enter value in atleast one of customer, supplier and sales partner field", raise_exception=1)
+	
 	def validate_primary_address(self):
+		"""Validate that there can only be one primary address for particular customer, supplier"""
 		sql = webnotes.conn.sql
 		if self.doc.is_primary_address == 1:
 			if self.doc.customer: 
@@ -69,10 +67,8 @@
 					self.doc.is_primary_address = 1
 
 				
-#----------------------
-# Validate that there can only be one shipping address for particular customer, supplier
-#----------------------
 	def validate_shipping_address(self):
+		"""Validate that there can only be one shipping address for particular customer, supplier"""
 		sql = webnotes.conn.sql
 		if self.doc.is_shipping_address == 1:
 			if self.doc.customer: 
diff --git a/erpnext/utilities/doctype/sms_control/sms_control.py b/erpnext/utilities/doctype/sms_control/sms_control.py
index f19ccf1..42a38fd 100644
--- a/erpnext/utilities/doctype/sms_control/sms_control.py
+++ b/erpnext/utilities/doctype/sms_control/sms_control.py
@@ -69,14 +69,6 @@
 		return validated_receiver_list
 
 
-	# Connect Gateway
-	# =========================================================
-	def connect_gateway(self):
-		"login to gateway"
-		from webnotes.utils.webservice import FrameworkServer
-		fw = FrameworkServer('www.erpnext.com', '/', '__system@webnotestech.com', 'password', https=1)
-		return fw
-
 	def get_sender_name(self):
 		"returns name as SMS sender"
 		sender_name = webnotes.conn.get_value('Global Defaults', None, 'sms_sender_name') or 'ERPNXT'
@@ -117,8 +109,7 @@
 		if get_value('SMS Settings', None, 'sms_gateway_url'):
 			ret = self.send_via_personalized_gateway(arg)
 			msgprint(ret)
-		else:
-			ret = self.send_via_erpnext_gateway(arg)
+
 
 	# Send sms via personalized gateway
 	# ==========================================================
@@ -135,30 +126,6 @@
 
 		return resp
 
-	# Send sms via ERPNext gateway
-	# ==========================================================
-	def send_via_erpnext_gateway(self, arg):
-		fw = self.connect_gateway()
-		ret = fw.run_method(method = 'erpnext_utils.sms_control.send_sms', args = arg)
-
-		if ret.get('exc'):
-			msgprint(ret['exc'])
-			raise Exception
-		elif ret['message']:
-			sms_sent = cint(ret['message']['sms_sent'])
-			sms_bal = cint(ret['message']['sms_balance'])
-			self.create_sms_log(arg, ret['message']['sms_sent'])
-
-			if not sms_sent:
-				if sms_bal < len(arg['receiver_list']):
-					msgprint("You do not have enough SMS balance. Current SMS Balance: " + cstr(sms_bal) + "\nYou can send mail to sales@erpnext.com to buy additional sms packages")
-					raise Exception
-				else:
-					msgprint("Message sent failed. May be numbers are invalid or some other issues.")
-			else:
-				msgprint(cstr(sms_sent) + " message sucessfully sent!\nCurrent SMS Balance: " + cstr(cint(ret['message']['sms_balance']) - cint(ret['message']['sms_sent'])))
-
-
 	# Send Request
 	# =========================================================
 	def send_request(self, gateway_url, args):
@@ -182,8 +149,6 @@
 			api_url += '?'
 		return server, api_url
 
-		
-
 
 	# Create SMS Log
 	# =========================================================
@@ -195,20 +160,4 @@
 		sl.message = arg['message']
 		sl.no_of_requested_sms = len(arg['receiver_list'])
 		sl.no_of_sent_sms = sent_sms
-		sl.save(new=1)
-
-	# Get SMS Balance
-	# =========================================================
-	def get_sms_balance(self):
-		arg = { 'account_name'	: webnotes.conn.get_value('Control Panel',None,'account_id') }
-		if get_value('SMS Settings', None, 'sms_gateway_url'):
-			ret = {}
-		else:
-			fw = self.connect_gateway()
-			ret = fw.run_method(mothod = 'erpnext_utils.sms_control.get_sms_balance', args = arg)
-
-		if ret.get('exc'):
-			msgprint(ret['exc'])
-			raise Exception
-		else:
-			msgprint("Current SMS Balance: " + cstr(ret['message']) + "\nYou can send mail to sales@erpnext.com to buy sms packages")
+		sl.save(new=1)
\ No newline at end of file