diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index ead4b4f..6818ba9 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -56,7 +56,7 @@
 
 	def validate_warehouse(self):
 		from erpnext.stock.utils import validate_warehouse_company
-		
+
 		for w in [self.fg_warehouse, self.wip_warehouse]:
 			validate_warehouse_company(w, self.company)
 
@@ -124,7 +124,7 @@
 	def update_production_order_qty(self):
 		"""Update **Manufactured Qty** and **Material Transferred for Qty** in Production Order
 			based on Stock Entry"""
-		
+
 		for purpose, fieldname in (("Manufacture", "produced_qty"),
 			("Material Transfer for Manufacture", "material_transferred_for_manufacturing")):
 			qty = flt(frappe.db.sql("""select sum(fg_completed_qty)
@@ -174,7 +174,7 @@
 
 		self.set('operations', [])
 
-		operations = frappe.db.sql("""select operation, description, workstation,
+		operations = frappe.db.sql("""select operation, description, workstation, idx,
 			hour_rate, time_in_mins, operating_cost as "planned_operating_cost", "Pending" as status
 			from `tabBOM Operation` where parent = %s order by idx""", self.bom_no, as_dict=1)
 
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py
index eb6cfab..db00754 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py
@@ -5,7 +5,7 @@
 from __future__ import unicode_literals
 import unittest
 import frappe
-from frappe.utils import flt, get_datetime, cstr, time_diff_in_hours
+from frappe.utils import flt, get_datetime, time_diff_in_hours
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry, make_time_log
 from erpnext.stock.doctype.stock_entry import test_stock_entry
@@ -15,14 +15,14 @@
 	def check_planned_qty(self):
 		set_perpetual_inventory(0)
 
-		planned0 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item", 
+		planned0 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
 			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty") or 0
 
 		pro_order = make_prod_order_test_record()
-		
-		planned1 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item", 
+
+		planned1 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
 			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty")
-			
+
 		self.assertEqual(planned1, planned0 + 10)
 
 		# add raw materials to stores
@@ -44,10 +44,10 @@
 		s.submit()
 
 		self.assertEqual(frappe.db.get_value("Production Order", pro_order.name, "produced_qty"), 4)
-		
-		planned2 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item", 
+
+		planned2 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
 			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty")
-			
+
 		self.assertEqual(planned2, planned0 + 6)
 
 		return pro_order
@@ -67,18 +67,18 @@
 		self.assertRaises(StockOverProductionError, s.submit)
 
 	def test_make_time_log(self):
-		prod_order = make_prod_order_test_record(item="_Test FG Item 2", 
+		prod_order = make_prod_order_test_record(item="_Test FG Item 2",
 			planned_start_date="2014-11-25 00:00:00", qty=1, do_not_save=True)
 
 		prod_order.set_production_order_operations()
 		prod_order.insert()
 		prod_order.submit()
-		
+
 		d = prod_order.operations[0]
 
 		d.completed_qty = flt(d.completed_qty)
 
-		time_log = make_time_log(prod_order.name, cstr(d.idx) + ". " + d.operation, \
+		time_log = make_time_log(prod_order.name, d.operation, \
 			d.planned_start_time, d.planned_end_time, prod_order.qty - d.completed_qty,
 			operation_id=d.name)
 
@@ -100,9 +100,9 @@
 		self.assertEqual(prod_order.operations[0].status, "Completed")
 		self.assertEqual(prod_order.operations[0].completed_qty, prod_order.qty)
 
-		self.assertEqual(get_datetime(prod_order.operations[0].actual_start_time), 
+		self.assertEqual(get_datetime(prod_order.operations[0].actual_start_time),
 			get_datetime(time_log.from_time))
-		self.assertEqual(get_datetime(prod_order.operations[0].actual_end_time), 
+		self.assertEqual(get_datetime(prod_order.operations[0].actual_end_time),
 			get_datetime(time_log.to_time))
 
 		self.assertEqual(prod_order.operations[0].actual_operation_time, 60)
@@ -128,10 +128,10 @@
 
 def make_prod_order_test_record(**args):
 	args = frappe._dict(args)
-	
+
 	pro_order = frappe.new_doc("Production Order")
 	pro_order.production_item = args.production_item or args.item or args.item_code or "_Test FG Item"
-	pro_order.bom_no = frappe.db.get_value("BOM", {"item": pro_order.production_item, 
+	pro_order.bom_no = frappe.db.get_value("BOM", {"item": pro_order.production_item,
 		"is_active": 1, "is_default": 1})
 	pro_order.qty = args.qty or 10
 	pro_order.wip_warehouse = args.wip_warehouse or "_Test Warehouse - _TC"
@@ -146,5 +146,5 @@
 		if not args.do_not_submit:
 			pro_order.submit()
 	return pro_order
-	
+
 test_records = frappe.get_test_records('Production Order')
