removed time_to_ampm and time_to_hhmm function
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index adc8091..fa08789 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -16,7 +16,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from webnotes.utils import cstr, flt, nowdate, get_defaults
+from webnotes.utils import cstr, flt, nowdate
 from webnotes.model.doc import addchild, Document
 from webnotes.model.wrapper import getlist
 from webnotes.model.code import get_obj
@@ -210,7 +210,7 @@
 				"wip_warehouse"		: "",
 				"fg_warehouse"		: "",
 				"status"			: "Draft",
-				"fiscal_year"		: get_defaults()["fiscal_year"]
+				"fiscal_year"		: webnotes.conn.get_default("fiscal_year")
 			}
 		return bom_dict, item_dict
 		
@@ -239,18 +239,22 @@
 		return self.get_csv()
 
 	def get_raw_materials(self, bom_dict):
-		""" Get raw materials considering sub-assembly items """
+		""" Get raw materials considering sub-assembly items 
+			{
+				"item_code": [qty_required, description, stock_uom]
+			}
+		"""
 		for bom in bom_dict:
 			if self.doc.use_multi_level_bom:
 				# get all raw materials with sub assembly childs					
 				fl_bom_items = sql("""
 					select 
 						item_code,ifnull(sum(qty_consumed_per_unit),0)*%s as qty, 
-						description, stock_uom
+						description, stock_uom, min_order_qty
 					from 
 						( 
 							select distinct fb.name, fb.description, fb.item_code,
-							 	fb.qty_consumed_per_unit, fb.stock_uom 
+							 	fb.qty_consumed_per_unit, fb.stock_uom, it.min_order_qty 
 							from `tabBOM Explosion Item` fb,`tabItem` it 
 							where it.name = fb.item_code 
 							and ifnull(it.is_pro_applicable, 'No') = 'No'
@@ -263,18 +267,21 @@
 				# Get all raw materials considering SA items as raw materials, 
 				# so no childs of SA items
 				fl_bom_items = sql("""
-					select item_code, ifnull(sum(qty_consumed_per_unit), 0) * '%s', 
-						description, stock_uom 
-					from `tabBOM Item` 
-					where parent = '%s' and docstatus < 2 
+					select bom_item.item_code, 
+						ifnull(sum(bom_item.qty_consumed_per_unit), 0) * %s, 
+						bom_item.description, bom_item.stock_uom, item.min_order_qty
+					from `tabBOM Item` bom_item, tabItem item
+					where bom_item.parent = %s and bom_item.docstatus < 2 
+					and bom_item.item_code = item.name
 					group by item_code
-				""" % (flt(bom_dict[bom]), bom))
+				""", (flt(bom_dict[bom]), bom))
 
 			self.make_items_dict(fl_bom_items)
 
 	def make_items_dict(self, item_list):
 		for i in item_list:
-			self.item_dict[i[0]] = [(flt(self.item_dict.get(i[0], [0])[0]) + flt(i[1])), i[2], i[3]]
+			self.item_dict[i[0]] = [(flt(self.item_dict.get(i[0], [0])[0]) + flt(i[1])), 
+				i[2], i[3], i[4]]
 
 
 	def get_csv(self):
@@ -291,4 +298,63 @@
 			if item_qty:
 				item_list.append(['', '', '', '', 'Total', i_qty, o_qty, a_qty])
 
-		return item_list
\ No newline at end of file
+		return item_list
+		
+	def raise_purchase_request(self):
+		def _get_projected_qty(items):
+			item_projected_qty = webnotes.conn.sql("""select item_code, sum(projected_qty) 
+				from `tabBin` where item_code in (%s) group by item_code""" % 
+				(", ".join(["%s"]*len(items)),), tuple(items))
+				
+			return dict(item_projected_qty)
+			
+		item_dict = self.get_raw_materials()
+		item_projected_qty = _get_projected_qty(item_dict.keys())
+		
+		from accounts.utils import get_fiscal_year
+		fiscal_year = get_fiscal_year(nowdate())
+		
+		items_to_be_requested = []
+		for item in item_dict:
+			if flt(item_dict[item][0]) > item_projected_qty[item]:
+				# shortage
+				requested_qty = flt(item_dict[item][0]) - item_projected_qty[item]
+				# comsider minimum order qty
+				requested_qty = requested_qty > flt(item_dict[item][3]) and \
+					requested_qty or flt(item_dict[item][3])
+				items_to_be_requested.append({
+					"item_code": item, 
+					"qty": requested_qty, 
+					"description": item_dict[item][1],
+					"stock_uom": item_dict[item][2]
+				})
+		webnotes.errprint(items_to_be_requested)
+		self.insert_purchase_request(items_to_be_requested, fiscal_year)
+		
+	def insert_purchase_request(self, items, fiscal_year):
+		for item in items:
+			item_wrapper = webnotes.model_wrapper("Item", args.item_code)
+			pr = [
+				{
+					"doctype": "Purchase Request",
+					"naming_series": "IDT",
+					"transaction_date": nowdate(),
+					"status": "Draft",
+					"company": self.doc.company,
+					"fiscal_year": fiscal_year,
+					"requested_by": webnotes.session.user,
+					"remark": "Automatically raised from Production Planning Tool"
+				},
+				{
+					"doctype": "Purchase Request Item",
+					"item_code": item.item_code,
+					"item_name": item_wrapper.doc.item_name,
+					"description": item.description,
+					"uom": item.stock_uom,
+					"item_group": item_wrapper.doc.item_group,
+					"brand": item_wrapper.doc.brand,
+					"qty": item.qty,
+					
+					
+				}
+			]
\ No newline at end of file
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.txt b/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
index dd7acfd..7eb0a2d 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
@@ -2,9 +2,9 @@
  {
   "owner": "jai@webnotestech.com", 
   "docstatus": 0, 
-  "creation": "2012-12-14 10:15:16", 
+  "creation": "2013-01-16 14:48:56", 
   "modified_by": "Administrator", 
-  "modified": "2012-12-14 11:37:40"
+  "modified": "2013-01-16 15:46:26"
  }, 
  {
   "read_only": 1, 
@@ -28,8 +28,10 @@
   "parent": "Production Planning Tool", 
   "read": 1, 
   "create": 1, 
+  "submit": 0, 
   "doctype": "DocPerm", 
   "write": 1, 
+  "report": 0, 
   "parenttype": "DocType", 
   "permlevel": 0, 
   "parentfield": "permissions"
@@ -68,9 +70,9 @@
  {
   "doctype": "DocField", 
   "label": "Company", 
+  "reqd": 1, 
   "fieldname": "company", 
   "fieldtype": "Link", 
-  "reqd": 1, 
   "options": "Company"
  }, 
  {
@@ -155,9 +157,18 @@
   "options": "Simple"
  }, 
  {
+  "description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.", 
+  "default": "1", 
+  "doctype": "DocField", 
+  "label": "Use Multi-Level BOM", 
+  "reqd": 0, 
+  "fieldname": "use_multi_level_bom", 
+  "fieldtype": "Check"
+ }, 
+ {
   "doctype": "DocField", 
   "width": "50%", 
-  "fieldname": "column_break5", 
+  "fieldname": "cb5", 
   "fieldtype": "Column Break"
  }, 
  {
@@ -170,18 +181,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "width": "50%", 
-  "fieldname": "column_break6", 
-  "fieldtype": "Column Break"
- }, 
- {
-  "description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.", 
-  "default": "1", 
-  "doctype": "DocField", 
-  "label": "Use Multi-Level BOM", 
-  "fieldname": "use_multi_level_bom", 
-  "fieldtype": "Check", 
-  "reqd": 0
+  "fieldname": "sb5", 
+  "fieldtype": "Section Break", 
+  "options": "Simple"
  }, 
  {
   "description": "Download a report containing all raw materials with their latest inventory status", 
@@ -191,8 +193,18 @@
   "fieldtype": "Button"
  }, 
  {
-  "role": "System Manager", 
-  "doctype": "DocPerm"
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break6", 
+  "fieldtype": "Column Break"
+ }, 
+ {
+  "description": "Raise Purchase Request automatically for items which are \"Out of Stock\" considering already requested, already ordered qty and minimum order qty", 
+  "doctype": "DocField", 
+  "label": "Raise Purchase Request", 
+  "fieldname": "raise_purchase_request", 
+  "fieldtype": "Button", 
+  "options": "raise_purchase_request"
  }, 
  {
   "role": "Manufacturing User", 
diff --git a/support/doctype/maintenance_visit/maintenance_visit_list.js b/support/doctype/maintenance_visit/maintenance_visit_list.js
index 654f455..6dc5dac 100644
--- a/support/doctype/maintenance_visit/maintenance_visit_list.js
+++ b/support/doctype/maintenance_visit/maintenance_visit_list.js
@@ -13,15 +13,12 @@
 			
 		]);
 		this.stats = this.stats.concat(['completion_status', 'company']);
-		//this.show_hide_check_column();
 	},
 	
 	prepare_data: function(data) {
 		this._super(data);
 		data.mntc_date = wn.datetime.str_to_user(data.mntc_date);
-		data.mntc_time = wn.datetime.time_to_ampm(data.mntc_time);
-		data.date_time = "on " + data.mntc_date + " at " + 
-			data.mntc_time[0] + ":" + data.mntc_time[1] + " " + data.mntc_time[2];
+		data.date_time = "on " + data.mntc_date + " at " + data.mntc_time;
 		data.customer_name = data.customer_name + " " + data.date_time;
 		data.completion_status = data.completion_status + 
 			(data.maintenance_type ? " [" + data.maintenance_type + "]": "");
diff --git a/utilities/page/calendar/calendar.js b/utilities/page/calendar/calendar.js
index d62dc68..5e59f1f 100644
--- a/utilities/page/calendar/calendar.js
+++ b/utilities/page/calendar/calendar.js
@@ -94,13 +94,11 @@
 		d.onshow = function() {
 			// heading
 			var c = me.selected_date;
-			var tmp = time_to_ampm(this.ev.event_hour);
-			tmp = tmp[0]+':'+tmp[1]+' '+tmp[2];
 			
 			this.widgets['Heading'].innerHTML = 
 				'<div style="text-align: center; padding:4px; font-size: 14px">'
 				+ erpnext.calendar.weekdays[c.getDay()] + ', ' + c.getDate() + ' ' + month_list_full[c.getMonth()] + ' ' + c.getFullYear() 
-				+ ' - <b>'+tmp+'</b></div>';
+				+ ' - <b>'+this.ev.event_hour+'</b></div>';
 			
 			// set
 			this.widgets['Description'].value = cstr(this.ev.description);
@@ -175,7 +173,7 @@
 	ev = locals['Event'][ev];
 	
 	ev.event_date = dateutil.obj_to_str(this.selected_date);
-	ev.event_hour = this.selected_hour+':00';
+	ev.event_hour = this.selected_hour+':00:00';
 	ev.event_type = 'Private';
 
 	this.show_event(ev);
@@ -447,8 +445,7 @@
  		for(var j=0;j<2;j++) {
  			var cell = r.insertCell(j);
 			if(j==0) {
-				var tmp = time_to_ampm((i)+':00');
-				cell.innerHTML = tmp[0]+':'+tmp[1]+' '+tmp[2];
+				cell.innerHTML = i+':00:00';
 				$w(cell, '10%');
 			} else {
 				cell.viewunit = new Calendar.DayViewUnit(cell);
@@ -510,9 +507,7 @@
  		for(var j=0;j<8;j++) {
  			var cell = r.insertCell(j);
 			if(j==0) {
-				var tmp = time_to_ampm(i+':00');
-				cell.innerHTML = tmp[0]+':'+tmp[1]+' '+tmp[2];
-
+				cell.innerHTML = i+':00:00';
 				$w(cell, '10%');
 			} else {
 				cell.viewunit = new Calendar.WeekViewUnit(cell);