timesheet fix
diff --git a/projects/doctype/timesheet/timesheet.py b/projects/doctype/timesheet/timesheet.py
index c2b296f..4f4d824 100644
--- a/projects/doctype/timesheet/timesheet.py
+++ b/projects/doctype/timesheet/timesheet.py
@@ -8,14 +8,15 @@
 # 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.	If not, see <http://www.gnu.org/licenses/>.
 
 from __future__ import unicode_literals
 import webnotes
+import time, datetime
 
 from webnotes.utils import cint, cstr, getdate, now, nowdate
 from webnotes.model import db_exists
@@ -23,68 +24,71 @@
 from webnotes import msgprint
 
 sql = webnotes.conn.sql
-	
-
 
 class DocType:
-  def __init__(self,doc,doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-  
-  def get_customer_details(self, project_name):
-    cust = sql("select customer, customer_name from `tabProject` where name = %s", project_name)
-    if cust:
-      ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
-      return (ret)
-  
-  def get_task_details(self, task_sub):
-    tsk = sql("select name, project, customer, customer_name from `tabTask` where subject = %s", task_sub)
-    if tsk:
-      ret = {'task_id': tsk and tsk[0][0] or '', 'project_name': tsk and tsk[0][1] or '', 'customer_name': tsk and tsk[0][3] or ''}
-      return ret
-  
-  def validate(self):
-    if getdate(self.doc.timesheet_date) > getdate(nowdate()):
-      msgprint("You can not prepare timesheet for future date")
-      raise Exception
-    
-    chk = sql("select name from `tabTimesheet` where timesheet_date=%s and owner=%s and status!='Cancelled' and name!=%s", (self.doc.timesheet_date, self.doc.owner, self.doc.name))
-    if chk:
-      msgprint("You have already created timesheet "+ cstr(chk and chk[0][0] or '')+" for this date.")
-      raise Exception
+	def __init__(self,doc,doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
+	
+	def get_customer_details(self, project_name):
+		cust = sql("select customer, customer_name from `tabProject` where name = %s", project_name)
+		if cust:
+			ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
+			return (ret)
+	
+	def get_task_details(self, task_sub):
+		tsk = sql("select name, project, customer, customer_name from `tabTask` where subject = %s", task_sub)
+		if tsk:
+			ret = {'task_id': tsk and tsk[0][0] or '', 'project_name': tsk and tsk[0][1] or '', 'customer_name': tsk and tsk[0][3] or ''}
+			return ret
+	
+	def get_time(self, timestr):
+		if len(timestr.split(":"))==2:
+			format = "%H:%M"
+		else:
+			format = "%H:%M:%S"
+			
+		return time.strptime(timestr, format)
+	
+	def validate(self):
+		if getdate(self.doc.timesheet_date) > getdate(nowdate()):
+			msgprint("You can not prepare timesheet for future date")
+			raise Exception
+		
+		chk = sql("select name from `tabTimesheet` where timesheet_date=%s and owner=%s and status!='Cancelled' and name!=%s", (self.doc.timesheet_date, self.doc.owner, self.doc.name))
+		if chk:
+			msgprint("You have already created timesheet "+ cstr(chk and chk[0][0] or '')+" for this date.")
+			raise Exception
 
-    import time
-    for d in getlist(self.doclist, 'timesheet_details'):
-      if d.act_start_time and d.act_end_time:
-        d1 = time.strptime(d.act_start_time, "%H:%M")
-        d2 = time.strptime(d.act_end_time, "%H:%M")
-        
-        if d1 > d2:
-          msgprint("Start time can not be greater than end time. Check for Task Id : "+cstr(d.task_id))
-          raise Exception
-        elif d1 == d2:
-          msgprint("Start time and end time can not be same. Check for Task Id : "+cstr(d.task_id))
-          raise Exception
-  
-  def calculate_total_hr(self):
-    import datetime
-    import time
-    for d in getlist(self.doclist, 'timesheet_details'):
-      x1 = d.act_start_time.split(":")
-      x2 = d.act_end_time.split(":")
-      
-      d1 = datetime.timedelta(minutes=cint(x1[1]), hours=cint(x1[0]))      
-      d2 = datetime.timedelta(minutes=cint(x2[1]), hours=cint(x2[0]))
-      d3 = (d2 - d1).seconds
-      d.act_total_hrs = time.strftime("%H:%M", time.gmtime(d3))
-      sql("update `tabTimesheet Detail` set act_total_hrs = %s where parent=%s and name=%s", (d.act_total_hrs,self.doc.name,d.name))
-  
-  def on_update(self):
-    self.calculate_total_hr()
-    webnotes.conn.set(self.doc, 'status', 'Draft')
-  
-  def on_submit(self):
-    webnotes.conn.set(self.doc, 'status', 'Submitted')
-  
-  def on_cancel(self):
-    webnotes.conn.set(self.doc, 'status', 'Cancelled')
\ No newline at end of file
+		for d in getlist(self.doclist, 'timesheet_details'):
+			if d.act_start_time and d.act_end_time:
+				d1 = self.get_time(d.act_start_time)
+				d2 = self.get_time(d.act_end_time)
+				
+				if d1 > d2:
+					msgprint("Start time can not be greater than end time. Check for Task Id : "+cstr(d.task_id))
+					raise Exception
+				elif d1 == d2:
+					msgprint("Start time and end time can not be same. Check for Task Id : "+cstr(d.task_id))
+					raise Exception
+	
+	def calculate_total_hr(self):
+		for d in getlist(self.doclist, 'timesheet_details'):
+			x1 = d.act_start_time.split(":")
+			x2 = d.act_end_time.split(":")
+			
+			d1 = datetime.timedelta(minutes=cint(x1[1]), hours=cint(x1[0]))			
+			d2 = datetime.timedelta(minutes=cint(x2[1]), hours=cint(x2[0]))
+			d3 = (d2 - d1).seconds
+			d.act_total_hrs = time.strftime("%H:%M:%S", time.gmtime(d3))
+			sql("update `tabTimesheet Detail` set act_total_hrs = %s where parent=%s and name=%s", (d.act_total_hrs,self.doc.name,d.name))
+	
+	def on_update(self):
+		self.calculate_total_hr()
+		webnotes.conn.set(self.doc, 'status', 'Draft')
+	
+	def on_submit(self):
+		webnotes.conn.set(self.doc, 'status', 'Submitted')
+	
+	def on_cancel(self):
+		webnotes.conn.set(self.doc, 'status', 'Cancelled')
\ No newline at end of file