Task Notification donw, reminder left
diff --git a/erpnext/projects/doctype/project_control/project_control.py b/erpnext/projects/doctype/project_control/project_control.py
index 82cb1c7..2702ff9 100644
--- a/erpnext/projects/doctype/project_control/project_control.py
+++ b/erpnext/projects/doctype/project_control/project_control.py
@@ -18,99 +18,99 @@
 
 
 class DocType:
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d,dl
-  
-  def get_projects(self, arg):
-    # project list
-    pl=[]
-    status={}
-    if arg == 'Open':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Open' order by creation desc limit 20")]
-      for p1 in pl:
-        status[p1] = 'Open'
-    elif arg == 'Completed':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Completed' order by creation desc limit 20")]
-      for p2 in pl:
-        status[p2] = 'Completed'
-    elif arg == 'Cancelled':
-      pl = [p[0] for p in sql("select name from `tabProject` where status = 'Cancelled' order by creation desc limit 20")]
-      for p3 in pl:
-        status[p3] = 'Cancelled'
-    else:
-      #pl = [p[0] for p in sql("select name from `tabProject` order by creation desc limit 20")]
-      pl1 = sql("select name, status from `tabProject` order by creation desc limit 20", as_dict=1)
-      for p4 in pl1:
-        status[p4['name']] = p4['status']
-        pl.append(p4['name'])
-    
-    # milestones in the next 7 days for active projects
-    ml = convert_to_lists(sql("select t1.milestone_date, t1.milestone, t1.parent from `tabProject Milestone` t1, tabProject t2 where t1.parent = t2.name and t2.status='Open' and DATEDIFF(t1.milestone_date, CURDATE()) BETWEEN 0 AND 7 ORDER BY t1.milestone_date ASC"))
+	def __init__(self,d,dl):		
+		self.doc, self.doclist = d,dl
+	
+	def get_projects(self, arg):
+	# project list
+		pl=[]
+		status={}
+		if arg == 'Open':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Open' order by creation desc limit 20")]
+			for p1 in pl:
+				status[p1] = 'Open'
+		elif arg == 'Completed':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Completed' order by creation desc limit 20")]
+			for p2 in pl:
+				status[p2] = 'Completed'
+		elif arg == 'Cancelled':
+			pl = [p[0] for p in sql("select name from `tabProject` where status = 'Cancelled' order by creation desc limit 20")]
+			for p3 in pl:
+				status[p3] = 'Cancelled'
+		else:
+			#pl = [p[0] for p in sql("select name from `tabProject` order by creation desc limit 20")]
+			pl1 = sql("select name, status from `tabProject` order by creation desc limit 20", as_dict=1)
+			for p4 in pl1:
+				status[p4['name']] = p4['status']
+				pl.append(p4['name'])
+		
+		# milestones in the next 7 days for active projects
+		ml = convert_to_lists(sql("select t1.milestone_date, t1.milestone, t1.parent from `tabProject Milestone` t1, tabProject t2 where t1.parent = t2.name and t2.status='Open' and DATEDIFF(t1.milestone_date, CURDATE()) BETWEEN 0 AND 7 ORDER BY t1.milestone_date ASC"))
 
-    # percent of activity completed per project
-    comp = {}
-    n_tasks = {}
-    
-    for p in pl:
-      t1 = sql('select count(*) from tabTicket where project=%s and docstatus!=2', p)[0][0]
-      n_tasks[p] = t1 or 0
-      if t1:
-        t2 = sql('select count(*) from tabTicket where project=%s and docstatus!=2 and status="Closed"', p)[0][0]
-        comp[p] = cint(flt(t2)*100/t1)
-    
-    return {'pl':pl, 'ml':ml, 'comp':comp, 'n_tasks':n_tasks, 'status':status}
-    
-  def get_resources(self):
-    ret = {}
+		# percent of activity completed per project
+		comp = {}
+		n_tasks = {}
+		
+		for p in pl:
+			t1 = sql('select count(*) from tabTicket where project=%s and docstatus!=2', p)[0][0]
+			n_tasks[p] = t1 or 0
+			if t1:
+				t2 = sql('select count(*) from tabTicket where project=%s and docstatus!=2 and status="Closed"', p)[0][0]
+				comp[p] = cint(flt(t2)*100/t1)
+		
+		return {'pl':pl, 'ml':ml, 'comp':comp, 'n_tasks':n_tasks, 'status':status}
+		
+	def get_resources(self):
+		ret = {}
 
-    # resource list
-    rl = sql("select distinct allocated_to, assignee_email from tabTicket")
+		# resource list
+		rl = sql("select distinct allocated_to, assignee_email from tabTicket")
 
-    # get open & closed tickets
-    for r in rl:
-      if r[0]:
-        ret[r[1]] = {}
-        ret[r[1]]['id'] = r[0]
-        ret[r[1]]['Total'] = sql("select count(*) from tabTicket where allocated_to=%s and docstatus!=2", r[0])[0][0]
-        ret[r[1]]['Closed'] = sql("select count(*) from tabTicket where allocated_to=%s and status='Closed' and docstatus!=2", r[0])[0][0]
-        ret[r[1]]['percent'] = cint(flt(ret[r[1]]['Closed']) * 100 / ret[r[1]]['Total'])
+		# get open & closed tickets
+		for r in rl:
+			if r[0]:
+				ret[r[1]] = {}
+				ret[r[1]]['id'] = r[0]
+				ret[r[1]]['Total'] = sql("select count(*) from tabTicket where allocated_to=%s and docstatus!=2", r[0])[0][0]
+				ret[r[1]]['Closed'] = sql("select count(*) from tabTicket where allocated_to=%s and status='Closed' and docstatus!=2", r[0])[0][0]
+				ret[r[1]]['percent'] = cint(flt(ret[r[1]]['Closed']) * 100 / ret[r[1]]['Total'])
 
-    return ret
+		return ret
 
-  # --------------------------------------------------------------
-  # for Gantt Chart
+	# --------------------------------------------------------------
+	# for Gantt Chart
 
-  def get_init_data(self, arg=''):
-    pl = [p[0] for p in sql('select name from tabProject where docstatus != 2')]
-    rl = [p[0] for p in sql('select distinct allocated_to from tabTicket where docstatus != 2 and ifnull(allocated_to,"") != ""')]
-    return {'pl':pl, 'rl':rl}
+	def get_init_data(self, arg=''):
+		pl = [p[0] for p in sql('select name from tabProject where docstatus != 2')]
+		rl = [p[0] for p in sql('select distinct allocated_to from tabTicket where docstatus != 2 and ifnull(allocated_to,"") != ""')]
+		return {'pl':pl, 'rl':rl}
 
-  def get_tasks(self, arg):
-    start_date, end_date, project, resource = arg.split('~~~')
+	def get_tasks(self, arg):
+		start_date, end_date, project, resource = arg.split('~~~')
 
-    cl = ''
-    if project and project != 'All':
-      cl = " and ifnull(project,'') = '%s'" % project
+		cl = ''
+		if project and project != 'All':
+			cl = " and ifnull(project,'') = '%s'" % project
 
-    if resource and resource != 'All':
-      cl = " and ifnull(allocated_to,'') = '%s'" % resource
+		if resource and resource != 'All':
+			cl = " and ifnull(allocated_to,'') = '%s'" % resource
 
-    tl = sql("""
-      select subject, allocated_to, project, exp_start_date, exp_end_date, priority, status, name
-      from tabTicket 
-      where 
-        ((exp_start_date between '%(st)s' and '%(end)s') or 
-        (exp_end_date between '%(st)s' and '%(end)s') or 
-        (exp_start_date < '%(st)s' and exp_end_date > '%(end)s')) %(cond)s order by exp_start_date limit 100""" % {'st': start_date, 'end': end_date, 'cond':cl})
+		tl = sql("""
+			select subject, allocated_to, project, exp_start_date, exp_end_date, priority, status, name
+			from tabTicket 
+			where 
+				((exp_start_date between '%(st)s' and '%(end)s') or 
+				(exp_end_date between '%(st)s' and '%(end)s') or 
+				(exp_start_date < '%(st)s' and exp_end_date > '%(end)s')) %(cond)s order by exp_start_date limit 100""" % {'st': start_date, 'end': end_date, 'cond':cl})
 
-    return convert_to_lists(tl)
-  
-  def declare_proj_completed(self, arg):
-    chk = sql("select name from `tabTicket` where project=%s and status='Open'", arg)
-    if chk:
-      chk_lst = [x[0] for x in chk]
-      msgprint("Task(s) "+','.join(chk_lst)+" has staus 'Open'. Please submit all tasks against this project before closing the project.")
-      return cstr('false')
-    else:
-      sql("update `tabProject` set status = 'Completed' where name = %s", arg)
-      return cstr('true')
\ No newline at end of file
+		return convert_to_lists(tl)
+	
+	def declare_proj_completed(self, arg):
+		chk = sql("select name from `tabTicket` where project=%s and status='Open'", arg)
+		if chk:
+			chk_lst = [x[0] for x in chk]
+			msgprint("Task(s) "+','.join(chk_lst)+" has staus 'Open'. Please submit all tasks against this project before closing the project.")
+			return cstr('false')
+		else:
+			sql("update `tabProject` set status = 'Completed' where name = %s", arg)
+			return cstr('true')
diff --git a/erpnext/projects/doctype/ticket/ticket.py b/erpnext/projects/doctype/ticket/ticket.py
index 6d53d6a..250c439 100644
--- a/erpnext/projects/doctype/ticket/ticket.py
+++ b/erpnext/projects/doctype/ticket/ticket.py
@@ -2,7 +2,7 @@
 import webnotes
 
 from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.util.email_lib import sendmail
+from webnotes.utils.email_lib import sendmail
 from webnotes.model import db_exists
 from webnotes.model.doc import Document, addchild, removechild, getchildren, make_autoname, SuperDocType
 from webnotes.model.doclist import getlist, copy_doclist
@@ -70,22 +70,27 @@
 	#--------------------------------------------	 
 	
 	def on_update(self):
-		if (self.doc.status =='Open') and (self.doc.task_email_notify==1):
-			if (self.doc.allocated_to == self.doc.allocated_to_old):
-				return			 		
-			else:
-				self.doc.allocated_to_old = self.doc.allocated_to
-				msg2="""A task %s has been assigned to you by %s on %s<br/><br/>Project: %s <br/><br/> \
-				Review Date: %s<br/><br/>Closing Date: %s <br/><br/>Details: %s""" \
-				%(self.doc.name, self.doc.senders_name, self.doc.opening_date, \
-				self.doc.project, self.doc.review_date, self.doc.closing_date, self.doc.description)
+		if self.doc.status =='Open' and self.doc.allocated_to:
+			if self.doc.task_email_notify==1:
+				if (self.doc.allocated_to == self.doc.allocated_to_old):
+					return			 		
+				else:
+					self.doc.allocated_to_old = self.doc.allocated_to
+					msg2="""This is an auto generated email.<br/>A task %s has been assigned to you by %s on %s<br/><br/>\
+					Project: %s <br/><br/>Review Date: %s<br/><br/>Closing Date: %s <br/><br/>Details: %s <br/><br/>""" \
+					%(self.doc.name, self.doc.senders_name, self.doc.opening_date, \
+					self.doc.project, self.doc.review_date, self.doc.closing_date, self.doc.description)
+					sendmail(self.doc.allocated_to, sender='automail@webnotestech.com', msg=msg2,send_now=1,\
+					subject='A task has been assigned')
+					self.doc.sent_reminder=0
+			if self.doc.exp_start_date:
+				sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
 				self.add_calendar_event()
-				sendmail(self.doc.allocated_to, sender='automail@webnotestech.com',subject='A task has been assigned',\
-				parts=[['text/plain',msg2]])
-				self.doc.sent_reminder=0
-		pass
-	#Function to be called from server inside scheduler ... set reminder/events			
-	#validate before sending for approval
+			else:
+				msgprint("An Expeted start date has not been set for this task.Please set a, 'Expected Start date'\
+				to add an event to allocated persons calender.You can save a task without this also.")
+			pass	
+	
 	def validate_for_pending_review(self):
 		if not self.doc.allocated_to:
 			msgprint("Please enter allocated_to.")
@@ -163,10 +168,13 @@
 		self.validate_for_closed()
 		self.doc.closing_date = nowdate()
 		set(self.doc, 'status', 'Closed')
+		self.remove_event_from_calender()
 		set(self.doc, 'docstatus', 1)
 		self.doc.save()
 		return cstr('true')
-	
+	def remove_event_from_calender():
+		sql("delete from tabEvent where ref_type='Task' and ref_name=%s", self.doc.name)
+		self.doc.save()
 	def cancel_task(self):
 		chk = sql("select distinct t1.name from `tabTimesheet` t1, `tabTimesheet Detail` t2 where t2.parent = t1.name and t2.task_id = %s and t1.status!='Cancelled'", self.doc.name)
 		if chk:
@@ -178,22 +186,17 @@
 			set(self.doc, 'docstatus', 2)
 		self.doc.save()
 		return cstr('true')
-	# def delete_event_from_calender(self): Add later
+
 	
 	def add_calendar_event(self):
 		in_calendar_of = self.doc.allocated_to
 		event = Document('Event')
 		event.owner = in_calendar_of
 		event.description ='' 
-		#'Task:%s <br/> By:%s <br/> Project:%s <br/>Details:%s' \
-		#%(self.doc.name,self.doc.senders_name,self.doc.project,self.doc.details)
-		event.event_date = self.doc.exp_start_date
-		event.event_hour = self.doc.exp_total_hrs and exp_total_hrs or ''
+		event.event_date = self.doc.exp_start_date and self.doc.exp_start_date or ''
+		event.event_hour = '10:00'
 		event.event_type = 'Private'
 		event.ref_type = 'Task'
 		event.ref_name = self.doc.name
 		event.save(1)
 
-		
-	def on_cancel(self):
-		self.cancel_task()
diff --git a/erpnext/projects/doctype/ticket/ticket.txt b/erpnext/projects/doctype/ticket/ticket.txt
index 17c0f2d..4d18953 100644
--- a/erpnext/projects/doctype/ticket/ticket.txt
+++ b/erpnext/projects/doctype/ticket/ticket.txt
@@ -5,14 +5,14 @@
 	{
 		'creation': '2011-01-28 17:52:35',
 		'docstatus': 0,
-		'modified': '2011-12-21 17:22:20',
+		'modified': '2011-12-22 14:31:07',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
-		'_last_update': '1324465350',
+		'_last_update': '1324468340',
 		'allow_trash': 1,
 		'autoname': 'TIC/.####',
 		'colour': 'White:FFF',
@@ -26,7 +26,7 @@
 		'show_in_menu': 0,
 		'subject': '%(subject)s',
 		'tag_fields': 'status',
-		'version': 248
+		'version': 250
 	},
 
 	# These values are common for all DocField
@@ -256,6 +256,7 @@
 		'fieldtype': 'Link',
 		'hidden': 1,
 		'label': 'Allocated To Old',
+		'no_copy': 1,
 		'permlevel': 0
 	},
 
@@ -288,6 +289,17 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'sent_reminder',
+		'fieldtype': 'Date',
+		'hidden': 1,
+		'label': 'Sent Reminder',
+		'no_copy': 1,
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'senders_name',
 		'fieldtype': 'Data',
 		'in_filter': 1,