Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/erpnext/buying/DocType Mapper/Purchase Request-Supplier Quotation/Purchase Request-Supplier Quotation.txt b/erpnext/buying/DocType Mapper/Purchase Request-Supplier Quotation/Purchase Request-Supplier Quotation.txt
index 95b13ba..7d1de75 100644
--- a/erpnext/buying/DocType Mapper/Purchase Request-Supplier Quotation/Purchase Request-Supplier Quotation.txt
+++ b/erpnext/buying/DocType Mapper/Purchase Request-Supplier Quotation/Purchase Request-Supplier Quotation.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-08-02 18:36:26',
 		'docstatus': 0,
-		'modified': '2012-08-02 18:37:32',
+		'modified': '2012-08-03 12:34:09',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -83,15 +83,6 @@
 
 	# Field Mapper Detail
 	{
-		'doctype': u'Field Mapper Detail',
-		'from_field': u'uom',
-		'map': u'Yes',
-		'match_id': 1,
-		'to_field': u'stock_uom'
-	},
-
-	# Field Mapper Detail
-	{
 		'checking_operator': u'>=',
 		'doctype': u'Field Mapper Detail',
 		'from_field': u'transaction_date',
@@ -117,7 +108,7 @@
 		'from_table': u'Purchase Request Item',
 		'match_id': 1,
 		'reference_doctype_key': u'prevdoc_doctype',
-		'to_field': u'quotation_details',
+		'to_field': u'quotation_items',
 		'to_table': u'Supplier Quotation Item',
 		'validation_logic': u'docstatus =1'
 	}
diff --git a/erpnext/buying/DocType Mapper/Supplier Quotation-Purchase Order/Supplier Quotation-Purchase Order.txt b/erpnext/buying/DocType Mapper/Supplier Quotation-Purchase Order/Supplier Quotation-Purchase Order.txt
new file mode 100644
index 0000000..a616266
--- /dev/null
+++ b/erpnext/buying/DocType Mapper/Supplier Quotation-Purchase Order/Supplier Quotation-Purchase Order.txt
@@ -0,0 +1,169 @@
+# DocType Mapper, Supplier Quotation-Purchase Order
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2012-08-03 12:33:04',
+		'docstatus': 0,
+		'modified': '2012-08-06 16:45:56',
+		'modified_by': u'Administrator',
+		'owner': u'Administrator'
+	},
+
+	# These values are common for all Table Mapper Detail
+	{
+		'doctype': u'Table Mapper Detail',
+		'name': '__common__',
+		'parent': u'Supplier Quotation-Purchase Order',
+		'parentfield': u'table_mapper_details',
+		'parenttype': u'DocType Mapper',
+		'validation_logic': u'docstatus = 1'
+	},
+
+	# These values are common for all Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'name': '__common__',
+		'parent': u'Supplier Quotation-Purchase Order',
+		'parentfield': u'field_mapper_details',
+		'parenttype': u'DocType Mapper'
+	},
+
+	# These values are common for all DocType Mapper
+	{
+		'doctype': u'DocType Mapper',
+		'from_doctype': u'Supplier Quotation',
+		'module': u'Buying',
+		'name': '__common__',
+		'ref_doc_submitted': 1,
+		'to_doctype': u'Purchase Order'
+	},
+
+	# DocType Mapper, Supplier Quotation-Purchase Order
+	{
+		'doctype': u'DocType Mapper',
+		'name': u'Supplier Quotation-Purchase Order'
+	},
+
+	# Field Mapper Detail
+	{
+		'checking_operator': u'=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'company',
+		'map': u'Yes',
+		'match_id': 0,
+		'to_field': u'company'
+	},
+
+	# Field Mapper Detail
+	{
+		'checking_operator': u'>=',
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'transaction_date',
+		'map': u'No',
+		'match_id': 0,
+		'to_field': u'transaction_date'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'conversion_rate',
+		'map': u'Yes',
+		'match_id': 0,
+		'to_field': u'conversion_rate'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'net_total',
+		'map': u'Yes',
+		'match_id': 0,
+		'to_field': u'net_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'total_tax',
+		'map': u'Yes',
+		'match_id': 0,
+		'to_field': u'total_tax'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'grand_total',
+		'map': u'Yes',
+		'match_id': 0,
+		'to_field': u'grand_total'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'parent',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'supplier_quotation'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'name',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'supplier_quotation_item'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'uom',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'stock_uom'
+	},
+
+	# Field Mapper Detail
+	{
+		'doctype': u'Field Mapper Detail',
+		'from_field': u'eval:flt(1)',
+		'map': u'Yes',
+		'match_id': 1,
+		'to_field': u'conversion_factor'
+	},
+
+	# Table Mapper Detail
+	{
+		'doctype': u'Table Mapper Detail',
+		'from_table': u'Supplier Quotation',
+		'match_id': 0,
+		'reference_key': u'prevdoc_docname',
+		'to_table': u'Purchase Order'
+	},
+
+	# Table Mapper Detail
+	{
+		'doctype': u'Table Mapper Detail',
+		'from_field': u'quotation_details',
+		'from_table': u'Supplier Quotation Item',
+		'match_id': 1,
+		'reference_doctype_key': u'prevdoc_doctype',
+		'to_field': u'po_details',
+		'to_table': u'Purchase Order Item'
+	},
+
+	# Table Mapper Detail
+	{
+		'doctype': u'Table Mapper Detail',
+		'from_field': u'purchase_tax_details',
+		'from_table': u'Purchase Taxes and Charges',
+		'match_id': 2,
+		'to_field': u'purchase_tax_details',
+		'to_table': u'Purchase Taxes and Charges'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 81d5fbf..68dc8c7 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -122,7 +122,6 @@
 
 cur_frm.cscript.dynamic_label = function(doc, cdt, cdn, callback1) {
 	var base_currency = wn.boot.company[doc.company].default_currency || sys_defaults['currency'];
-	
 	if (doc.currency === base_currency) {
 		set_multiple(cdt, cdn, {conversion_rate:1});
 		hide_field(['conversion_rate', 'net_total_import','grand_total_import',
@@ -634,3 +633,7 @@
 		 }
 	}
 }
+
+cur_frm.cscript.toggle_contact_section = function(doc) {
+	doc.supplier ? unhide_field("contact_section") : hide_field("contact_section");
+}
\ No newline at end of file
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index a27f6ff..a1983c3 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -24,15 +24,15 @@
 wn.require('erpnext/setup/doctype/notification_control/notification_control.js');
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
-
-	if(!doc.fiscal_year && doc.__islocal){ //set_default_values(doc);
-		doc.fiscal_year = sys_defaults.fiscal_year;
-	}
-	if(!doc.conversion_rate) doc.conversion_rate = 1;
-	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.is_subcontracted) set_multiple(cdt, cdn, {is_subcontracted:'No'});
+	// set missing values in parent doc
+	set_missing_values(doc, {
+		fiscal_year: sys_defaults.fiscal_year,
+		conversion_rate: 1,
+		currency: sys_defaults.currency,
+		status: "Draft",
+		transaction_date: get_today(),
+		is_subcontracted: "No"
+	});
 }
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
@@ -55,8 +55,7 @@
 	if(doc.docstatus == 1 && doc.status == 'Stopped')
 		cur_frm.add_custom_button('Unstop Purchase Order', cur_frm.cscript['Unstop Purchase Order']);
 	
-	if(doc.supplier) $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(true);
-	else $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(false);
+	cur_frm.cscript.toggle_contact_section(doc);
 }
 
 cur_frm.cscript.supplier = function(doc,dt,dn) {
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 40b7281..d84d06e 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -86,7 +86,7 @@
 		if self.doc.indent_no:
 			get_obj('DocType Mapper','Purchase Request-Purchase Order').dt_map('Purchase Request','Purchase Order',self.doc.indent_no, self.doc, self.doclist, "[['Purchase Request','Purchase Order'],['Purchase Request Item', 'Purchase Order Item']]")
 			pcomm = get_obj('Purchase Common')
-			for d in getlist(self.doclist, 'po_details'):			
+			for d in getlist(self.doclist, 'po_details'):
 				if d.item_code and not d.purchase_rate:
 					last_purchase_details, last_purchase_date = pcomm.get_last_purchase_details(d.item_code, self.doc.name)
 					if last_purchase_details:
@@ -99,6 +99,19 @@
 						d.import_rate = d.purchase_rate / conversion_rate						
 					else:
 						d.purchase_ref_rate = d.discount_rate = d.purchase_rate = d.import_ref_rate = d.import_rate = 0.0
+						
+	def get_supplier_quotation_items(self):
+		if self.doc.supplier_quotation:
+			get_obj("DocType Mapper", "Supplier Quotation-Purchase Order").dt_map("Supplier Quotation",
+				"Purchase Order", self.doc.supplier_quotation, self.doc, self.doclist,
+				"""[['Supplier Quotation', 'Purchase Order'],
+				['Supplier Quotation Item', 'Purchase Order Item'],
+				['Purchase Taxes and Charges', 'Purchase Taxes and Charges']]""")
+			self.get_default_schedule_date()
+			for d in getlist(self.doclist, 'po_details'):
+				if d.prevdoc_detail_docname and not d.schedule_date:
+					d.schedule_date = webnotes.conn.get_value("Purchase Request Item",
+							d.prevdoc_detail_docname, "schedule_date")
 	
 	def get_tc_details(self):
 		"""get terms & conditions"""
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.txt b/erpnext/buying/doctype/purchase_order/purchase_order.txt
index 318ebda..d5e8df5 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.txt
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-07-02 14:44:19',
 		'docstatus': 0,
-		'modified': '2012-08-02 13:43:50',
+		'modified': '2012-08-06 17:14:19',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -464,9 +464,35 @@
 		'fieldtype': u'Button',
 		'hidden': 0,
 		'label': u'Get Items',
+		'no_copy': 0,
 		'oldfieldtype': u'Button',
 		'options': u'get_indent_details',
-		'permlevel': 0
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'description': u'You can make a purchase order from multiple Supplier Quotations. Select Supplier Quotations one by one and click on the button below.',
+		'doctype': u'DocField',
+		'fieldname': u'supplier_quotation',
+		'fieldtype': u'Link',
+		'label': u'Select Supplier Quotation',
+		'no_copy': 1,
+		'options': u'Supplier Quotation',
+		'permlevel': 0,
+		'print_hide': 1
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'get_supplier_quotation_items',
+		'fieldtype': u'Button',
+		'label': u'Get Items',
+		'options': u'get_supplier_quotation_items',
+		'permlevel': 0,
+		'print_hide': 1
 	},
 
 	# DocField
@@ -477,7 +503,8 @@
 		'fieldtype': u'Section Break',
 		'label': u'Taxes',
 		'oldfieldtype': u'Section Break',
-		'permlevel': 0
+		'permlevel': 0,
+		'print_hide': 0
 	},
 
 	# DocField
diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.txt b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.txt
index 73a6f01..cecf963 100755
--- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.txt
+++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-05-15 12:14:38',
 		'docstatus': 0,
-		'modified': '2012-06-29 13:05:33',
+		'modified': '2012-08-06 15:55:11',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -335,7 +335,7 @@
 		'fieldtype': u'Date',
 		'hidden': 1,
 		'in_filter': 1,
-		'label': u'Purchase Requisition Date',
+		'label': u'Purchase Request Date',
 		'oldfieldname': u'prevdoc_date',
 		'oldfieldtype': u'Date',
 		'permlevel': 1,
@@ -351,7 +351,7 @@
 		'fieldtype': u'Data',
 		'hidden': 1,
 		'in_filter': 1,
-		'label': u'Purchase Requisition Detail No',
+		'label': u'Purchase Request Detail No',
 		'no_copy': 0,
 		'oldfieldname': u'prevdoc_detail_docname',
 		'oldfieldtype': u'Data',
@@ -363,6 +363,30 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'supplier_quotation',
+		'fieldtype': u'Link',
+		'hidden': 1,
+		'in_filter': 0,
+		'label': u'Supplier Quotation',
+		'options': u'Supplier Quotation',
+		'permlevel': 1,
+		'search_index': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'supplier_quotation_item',
+		'fieldtype': u'Link',
+		'hidden': 1,
+		'label': u'Supplier Quotation Item',
+		'options': u'Supplier Quotation Item',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'brand',
 		'fieldtype': u'Link',
 		'hidden': 1,
diff --git a/erpnext/buying/doctype/purchase_request/purchase_request.js b/erpnext/buying/doctype/purchase_request/purchase_request.js
index c29434d..733da52 100644
--- a/erpnext/buying/doctype/purchase_request/purchase_request.js
+++ b/erpnext/buying/doctype/purchase_request/purchase_request.js
@@ -51,10 +51,11 @@
 
 	if(doc.docstatus == 1 && doc.status != 'Stopped'){
 		if(doc.per_ordered < 100) {
-			cur_frm.add_custom_button('Make Purchase Order', cur_frm.cscript['Make Purchase Order'])
-			cur_frm.add_custom_button('Stop Purchase Request', cur_frm.cscript['Stop Purchase Request'])
+			cur_frm.add_custom_button('Make Purchase Order', cur_frm.cscript['Make Purchase Order']);
+			cur_frm.add_custom_button('Stop Purchase Request', cur_frm.cscript['Stop Purchase Request']);
 		}
 		cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
+		cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation);
 	}
  
 	if(doc.docstatus == 1 && doc.status == 'Stopped')
@@ -124,3 +125,15 @@
 		});
 	}
 }
+
+cur_frm.cscript.make_supplier_quotation = function() {
+	var new_sq_name = createLocal("Supplier Quotation");
+	$c("dt_map", {
+		"docs": compress_doclist([locals['Supplier Quotation'][new_sq_name]]),
+		"from_doctype": cur_frm.doc.doctype,
+		"to_doctype": "Supplier Quotation",
+		"from_docname": cur_frm.doc.name,
+		"from_to_list": JSON.stringify([['Purchase Request', 'Supplier Quotation'],
+			['Purchase Request Item', 'Supplier Quotation Item']]),
+	}, function(r, rt) { loaddoc("Supplier Quotation", new_sq_name) });
+}
\ No newline at end of file
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index 4d2673c..430d1ee 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -47,13 +47,17 @@
 	}
 }
 
-cur_frm.cscript.toggle_contact_section = function(doc) {
-	console.log(doc.supplier);
-	doc.supplier ? unhide_field("contact_section") : hide_field("contact_section");
-}
-
-cur_frm.cscript.make_purchase_order = function(doc, dt, dn) {
-	
+cur_frm.cscript.make_purchase_order = function() {
+	var new_po_name = createLocal("Purchase Order");
+	$c("dt_map", {
+		"docs": compress_doclist([locals['Purchase Order'][new_po_name]]),
+		"from_doctype": cur_frm.doc.doctype,
+		"to_doctype": "Purchase Order",
+		"from_docname": cur_frm.doc.name,
+		"from_to_list": JSON.stringify([['Supplier Quotation', 'Purchase Order'],
+			['Supplier Quotation Item', 'Purchase Order Item'],
+			['Purchase Taxes and Charges', 'Purchase Taxes and Charges']]),
+	}, function(r, rt) { loaddoc("Purchase Order", new_po_name) });
 }
 
 cur_frm.cscript.supplier = function(doc, dt, dn) {
@@ -65,6 +69,10 @@
 	}
 }
 
+cur_frm.cscript.uom = function(doc, cdt, cdn) {
+	// no need to trigger updation of stock uom, as this field doesn't exist in supplier quotation
+}
+
 cur_frm.fields_dict['quotation_items'].grid.get_field('project_name').get_query = 
 	function(doc, cdt, cdn) {
 		return "select `tabProject`.name from `tabProject` \
@@ -82,7 +90,6 @@
 		order by `tabPurchase Request`.`name` desc limit 50";
 }
 
-
 cur_frm.cscript.supplier_address = function(doc, dt, dn) {
 	if (doc.supplier) {
 		get_server_fields("get_supplier_address", JSON.stringify({supplier: doc.supplier,
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
index f52e428..f5b9335 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -21,7 +21,7 @@
 class DocType(TransactionBase):
 	def __init__(self, doc, doclist=None):
 		self.doc, self.doclist = doc, doclist or []
-		self.tname, self.fname = "Supplier Quotation Item", "quotation_item"
+		self.tname, self.fname = "Supplier Quotation Item", "quotation_items"
 
 	def autoname(self):
 		"""autoname based on naming series value"""
@@ -66,7 +66,8 @@
 				self.doc, self.doclist, """[['Purchase Request', 'Supplier Quotation'],
 				['Purchase Request Item', 'Supplier Quotation Item']]""")
 			
-			for d in getlist(self.doclist, "quotation_details"):
+			from webnotes.model.doclist import getlist
+			for d in getlist(self.doclist, self.fname):
 				if d.item_code and not d.purchase_rate:
 					d.purchase_ref_rate = d.discount_rate = d.purchase_rate = 0.0
 					d.import_ref_rate = d.import_rate = 0.0
@@ -74,9 +75,6 @@
 	def get_purchase_tax_details(self):
 		self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)
 
-	def get_uom_details(self, args=None):
-		return get_obj('Purchase Common').get_uom_details(args)
-
 	def validate_fiscal_year(self):
 		get_obj(dt = 'Purchase Common').validate_fiscal_year( \
 			self.doc.fiscal_year, self.doc.transaction_date, 'Quotation Date')
diff --git a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.txt b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.txt
index 1ee10ae..895c8fc 100644
--- a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.txt
+++ b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-08-01 20:07:22',
 		'docstatus': 0,
-		'modified': '2012-08-02 16:00:52',
+		'modified': '2012-08-03 12:34:33',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -245,38 +245,6 @@
 	{
 		'colour': u'White:FFF',
 		'doctype': u'DocField',
-		'fieldname': u'conversion_factor',
-		'fieldtype': u'Currency',
-		'hidden': 0,
-		'label': u'UOM Conversion Factor',
-		'oldfieldname': u'conversion_factor',
-		'oldfieldtype': u'Currency',
-		'permlevel': 0,
-		'print_hide': 1,
-		'reqd': 1,
-		'trigger': u'Client',
-		'width': u'100px'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'stock_uom',
-		'fieldtype': u'Data',
-		'hidden': 0,
-		'label': u'Stock UOM',
-		'oldfieldname': u'stock_uom',
-		'oldfieldtype': u'Data',
-		'permlevel': 1,
-		'print_hide': 1,
-		'reqd': 1,
-		'width': u'100px'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
 		'fieldname': u'prevdoc_doctype',
 		'fieldtype': u'Data',
 		'hidden': 1,