fixed asynchronus issue in purchase cycle
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js
index bfcf0a4..b4fe62e 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -33,6 +33,21 @@
 		}
 		
 		cur_frm.cscript.is_opening(doc);
+	},
+	onload_post_render: function(doc, dt, dn) {	
+		var me = this;	
+		var callback1 = function(doc, dt, dn) {
+			var callback2 = function(doc, dt, dn) {
+				if(doc.__islocal && doc.supplier) cur_frm.cscript.supplier(doc, dt, dn);			
+			}
+			me.update_item_details(doc, dt, dn, callback2);
+		}
+		
+		// TODO: improve this
+		if(this.frm.doc.__islocal && this.frm.fields_dict.price_list_name 
+				&& this.frm.doc.price_list_name) {
+			this.price_list_name(callback1);
+		}
 	}
 });
 
@@ -46,16 +61,6 @@
 	if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
 }
 
-cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
-	var callback = function(doc, dt, dn) {
-		if(doc.__islocal && doc.supplier) cur_frm.cscript.supplier(doc,dt,dn);
-	}
-
-	// defined in purchase_common.js
-	cur_frm.cscript.update_item_details(doc, dt, dn, callback);
-	
-}
-
 cur_frm.cscript.supplier = function(doc,dt,dn) {
 	var callback = function(r,rt) {
 			var doc = locals[cur_frm.doctype][cur_frm.docname];		
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index b3f62d5..b8346d3 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -51,15 +51,9 @@
 		
 		if(this.frm.fields_dict.currency)
 			this.set_dynamic_labels();
-		
-		// TODO: improve this
-		if(this.frm.doc.__islocal && this.frm.fields_dict.price_list_name 
-				&& this.frm.doc.price_list_name && this.frm.doc.price_list_currency) {
-			this.price_list_name();
-		}
 	},
 	
-	price_list_name: function() {
+	price_list_name: function(callback_fn) {
 		this.frm.toggle_reqd(["price_list_currency", "plc_conversion_rate"],
 			!!(this.frm.doc.price_list_name));
 		
@@ -77,6 +71,8 @@
 					callback: function(r) {
 						if(!r.exc) {
 							me.price_list_currency();
+							if (callback_fn) callback_fn(me.frm.doc, me.frm.doc.doctype, 
+									me.frm.doc.name);
 						}
 					}
 				});
@@ -89,6 +85,7 @@
 	item_code: function(doc, cdt, cdn) {
 		var me = this;
 		var item = locals[cdt][cdn];
+		
 		if(item.item_code) {
 			this.frm.call({
 				method: "buying.utils.get_item_details",
@@ -141,11 +138,11 @@
 	
 	price_list_currency: function() {
 		this.set_dynamic_labels();
-		
+				
 		if(this.frm.doc.price_list_currency === this.get_company_currency())
 			this.frm.set_value("plc_conversion_rate", 1.0);
 		else if(this.frm.doc.price_list_currency === this.frm.doc.currency)
-			this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate || 1.0);
+			this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate || 1.0);		
 	},
 	
 	set_dynamic_labels: function(doc, dt, dn) {
diff --git a/buying/doctype/purchase_order/purchase_order.js b/buying/doctype/purchase_order/purchase_order.js
index cf1db14..4bcd828 100644
--- a/buying/doctype/purchase_order/purchase_order.js
+++ b/buying/doctype/purchase_order/purchase_order.js
@@ -40,12 +40,22 @@
 			
 	},
 	
-	onload_post_render: function(doc, dt, dn) {
-		var callback = function(doc, dt, dn) {
-			if(doc.__islocal) cur_frm.cscript.get_default_schedule_date(doc);
+	onload_post_render: function(doc, dt, dn) {	
+		var me = this;	
+		var callback1 = function(doc, dt, dn) {
+			var callback2 = function(doc, dt, dn) {
+				if(doc.__islocal) cur_frm.cscript.get_default_schedule_date(doc);				
+			}
+			me.update_item_details(doc, dt, dn, callback2);
 		}
-		this.update_item_details(doc, dt, dn, callback);
+		
+		// TODO: improve this
+		if(this.frm.doc.__islocal && this.frm.fields_dict.price_list_name 
+				&& this.frm.doc.price_list_name) {
+			this.price_list_name(callback1);
+		}
 	}
+	
 });
 
 var new_cscript = new erpnext.buying.PurchaseOrderController({frm: cur_frm});
@@ -53,7 +63,7 @@
 // for backward compatibility: combine new and previous states
 $.extend(cur_frm.cscript, new_cscript);
 
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
+cur_frm.cscript.onload = function(doc, cdt, cdn) {	
 	// set missing values in parent doc
 	set_missing_values(doc, {
 		fiscal_year: sys_defaults.fiscal_year,
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.js b/buying/doctype/supplier_quotation/supplier_quotation.js
index 6cb764e..36f9be8 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -27,12 +27,25 @@
 	refresh: function() {
 		this._super();
 		
-		cur_frm.cscript.load_taxes(this.frm.doc);
 
 		if (this.frm.doc.docstatus === 1) {
 			cur_frm.add_custom_button("Make Purchase Order", cur_frm.cscript.make_purchase_order);
 		}
+	},
+	
+	onload_post_render: function(doc, dt, dn) {	
+		var me = this;
+		var callback = function(doc, dt, dn) {
+			cur_frm.cscript.load_taxes(me.frm.doc);
+		}
+		
+		// TODO: improve this
+		if(this.frm.doc.__islocal && this.frm.fields_dict.price_list_name 
+				&& this.frm.doc.price_list_name) {
+			this.price_list_name(callback);
+		}
 	}
+	
 });
 
 var new_cscript = new erpnext.buying.SupplierQuotationController({frm: cur_frm});
diff --git a/stock/doctype/item/item.txt b/stock/doctype/item/item.txt
index 6b1a60f..1a48368 100644
--- a/stock/doctype/item/item.txt
+++ b/stock/doctype/item/item.txt
@@ -1,8 +1,8 @@
 [
  {
-  "creation": "2013-02-20 13:26:14", 
+  "creation": "2013-02-21 14:54:43", 
   "docstatus": 0, 
-  "modified": "2013-02-20 18:14:06", 
+  "modified": "2013-02-28 10:43:02", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -28,13 +28,14 @@
   "permlevel": 0
  }, 
  {
-  "amend": 0, 
   "doctype": "DocPerm", 
   "name": "__common__", 
   "parent": "Item", 
   "parentfield": "permissions", 
   "parenttype": "DocType", 
+  "permlevel": 0, 
   "read": 1, 
+  "report": 1, 
   "submit": 0
  }, 
  {
@@ -596,7 +597,6 @@
   "label": "Price Lists and Rates"
  }, 
  {
-  "depends_on": "eval:doc.is_sales_item==\"Yes\"", 
   "description": "Create a price list from Price List master and enter standard ref rates against each of them. On selection of a price list in Quotation, Sales Order or Delivery Note, corresponding ref rate will be fetched for this item.", 
   "doctype": "DocField", 
   "fieldname": "ref_rate_details", 
@@ -813,75 +813,26 @@
   "label": "Website Description"
  }, 
  {
-  "cancel": 0, 
-  "create": 0, 
-  "doctype": "DocPerm", 
-  "permlevel": 1, 
-  "report": 0, 
-  "role": "Material Manager", 
-  "write": 0
- }, 
- {
-  "cancel": 0, 
-  "create": 0, 
-  "doctype": "DocPerm", 
-  "permlevel": 0, 
-  "report": 1, 
-  "role": "Material Manager", 
-  "write": 0
- }, 
- {
-  "cancel": 0, 
-  "create": 0, 
-  "doctype": "DocPerm", 
-  "permlevel": 1, 
-  "report": 0, 
-  "role": "Material User", 
-  "write": 0
- }, 
- {
-  "cancel": 0, 
-  "create": 0, 
-  "doctype": "DocPerm", 
-  "permlevel": 0, 
-  "report": 1, 
-  "role": "Material User", 
-  "write": 0
- }, 
- {
   "cancel": 1, 
   "create": 1, 
   "doctype": "DocPerm", 
-  "permlevel": 0, 
-  "report": 1, 
   "role": "Material Master Manager", 
   "write": 1
  }, 
  {
+  "amend": 0, 
   "cancel": 0, 
   "create": 0, 
   "doctype": "DocPerm", 
-  "permlevel": 1, 
-  "report": 0, 
-  "role": "Material Master Manager", 
+  "role": "Material Manager", 
   "write": 0
  }, 
  {
-  "cancel": 1, 
-  "create": 1, 
-  "doctype": "DocPerm", 
-  "permlevel": 0, 
-  "report": 1, 
-  "role": "System Manager", 
-  "write": 1
- }, 
- {
+  "amend": 0, 
   "cancel": 0, 
   "create": 0, 
   "doctype": "DocPerm", 
-  "permlevel": 1, 
-  "report": 0, 
-  "role": "System Manager", 
+  "role": "Material User", 
   "write": 0
  }
 ]
\ No newline at end of file
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.js b/stock/doctype/purchase_receipt/purchase_receipt.js
index df2825b..c7d2e50 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -37,6 +37,18 @@
 		if(wn.boot.control_panel.country == 'India') {
 			unhide_field(['challan_no', 'challan_date']);
 		}
+	}, 
+	onload_post_render: function(doc, dt, dn) {	
+		var me = this;
+		var callback = function(doc, dt, dn) {
+			me.update_item_details(doc, dt, dn, function(r,rt) { });
+		}
+		
+		// TODO: improve this
+		if(this.frm.doc.__islocal && this.frm.fields_dict.price_list_name 
+				&& this.frm.doc.price_list_name) {
+			this.price_list_name(callback);
+		}
 	}
 });
 
@@ -45,7 +57,6 @@
 // for backward compatibility: combine new and previous states
 $.extend(cur_frm.cscript, new_cscript);
 
-//========================== On Load ================================================================
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
 	if(!doc.fiscal_year && doc.__islocal){ wn.model.set_default_values(doc);}
 	if (!doc.posting_date) doc.posting_date = dateutil.obj_to_str(new Date());
@@ -53,15 +64,6 @@
 	if (!doc.status) doc.status = 'Draft';
 }
 
-cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
-	var callback = function(doc, dt, dn) {
-		// defined in purchase_common.js
-		cur_frm.cscript.update_item_details(doc, dt, dn, function(r,rt) { });	
-	}
-	cur_frm.cscript.dynamic_label(doc, dt, dn, callback);
-}
-
-//Supplier
 cur_frm.cscript.supplier = function(doc,dt,dn) {
 	if (doc.supplier) {
 		get_server_fields('get_default_supplier_address',