old_contents: # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  # License: GNU General Public License v3. See license.txt
  
  from __future__ import unicode_literals
  import frappe
  import json
  from frappe import _
  
  from frappe.model.document import Document
  from frappe.utils import now
  from frappe.utils.user import is_website_user
  
  sender_field = "raised_by"
  
  class Issue(Document):
  	def get_feed(self):
  		return "{0}: {1}".format(_(self.status), self.subject)
  
  	def validate(self):
  		self.update_status()
  		self.set_lead_contact(self.raised_by)
  
  		if self.status == "Closed":
  			from frappe.desk.form.assign_to import clear
  			clear(self.doctype, self.name)
  
  	def set_lead_contact(self, email_id):
  		import email.utils
  		email_id = email.utils.parseaddr(email_id)
  		if email_id:
  			if not self.lead:
  				self.lead = frappe.db.get_value("Lead", {"email_id": email_id})
  			if not self.contact:
  				values = frappe.db.get_value("Contact",
  					{"email_id": email_id}, ("name", "customer"))
  
  				if values:
  					self.contact, self.customer = values
  
  
  			if not self.company:
  				self.company = frappe.db.get_value("Lead", self.lead, "company") or \
  					frappe.db.get_default("company")
  
  	def update_status(self):
  		status = frappe.db.get_value("Issue", self.name, "status")
  		if self.status!="Open" and status =="Open" and not self.first_responded_on:
  			self.first_responded_on = now()
  		if self.status=="Closed" and status !="Closed":
  			self.resolution_date = now()
  		if self.status=="Open" and status !="Open":
  			# if no date, it should be set as None and not a blank string "", as per mysql strict config
  			self.resolution_date = None
  
  def get_list_context(context=None):
  	return {
  		"title": _("My Issues"),
  		"get_list": get_issue_list
  	}
  
  def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
  	from frappe.templates.pages.list import get_list
  	user = frappe.session.user
  	ignore_permissions = False
  	if is_website_user():
  		if not filters: filters = []
  		filters.append(("Issue", "raised_by", "=", user))
  		ignore_permissions = True
  
  	return get_list(doctype, txt, filters, limit_start, limit_page_length, ignore_permissions=ignore_permissions)
  
  @frappe.whitelist()
  def set_status(name, status):
  	st = frappe.get_doc("Issue", name)
  	st.status = status
  	st.save()
  
  def auto_close_tickets():
  	frappe.db.sql("""update `tabIssue` set status = 'Closed'
  		where status = 'Replied'
  		and date_sub(curdate(),interval 15 Day) > modified""")
  
  @frappe.whitelist()
  def set_multiple_status(names, status):
  	names = json.loads(names)
  	for name in names:
  		set_status(name, status)
  
new_contents: # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  # License: GNU General Public License v3. See license.txt
  
  from __future__ import unicode_literals
  import frappe
  import json
  from frappe import _
  
  from frappe.model.document import Document
  from frappe.utils import now
  from frappe.utils.user import is_website_user
  
  sender_field = "raised_by"
  
  class Issue(Document):
  	def get_feed(self):
  		return "{0}: {1}".format(_(self.status), self.subject)
  
  	def validate(self):
  		self.update_status()
  		self.set_lead_contact(self.raised_by)
  
  		if self.status == "Closed":
  			from frappe.desk.form.assign_to import clear
  			clear(self.doctype, self.name)
  
  	def set_lead_contact(self, email_id):
  		import email.utils
  		email_id = email.utils.parseaddr(email_id)[1]
  		if email_id:
  			if not self.lead:
  				self.lead = frappe.db.get_value("Lead", {"email_id": email_id})
  			if not self.contact:
  				values = frappe.db.get_value("Contact",
  					{"email_id": email_id}, ("name", "customer"))
  
  				if values:
  					self.contact, self.customer = values
  
  
  			if not self.company:
  				self.company = frappe.db.get_value("Lead", self.lead, "company") or \
  					frappe.db.get_default("company")
  
  	def update_status(self):
  		status = frappe.db.get_value("Issue", self.name, "status")
  		if self.status!="Open" and status =="Open" and not self.first_responded_on:
  			self.first_responded_on = now()
  		if self.status=="Closed" and status !="Closed":
  			self.resolution_date = now()
  		if self.status=="Open" and status !="Open":
  			# if no date, it should be set as None and not a blank string "", as per mysql strict config
  			self.resolution_date = None
  
  def get_list_context(context=None):
  	return {
  		"title": _("My Issues"),
  		"get_list": get_issue_list
  	}
  
  def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
  	from frappe.templates.pages.list import get_list
  	user = frappe.session.user
  	ignore_permissions = False
  	if is_website_user():
  		if not filters: filters = []
  		filters.append(("Issue", "raised_by", "=", user))
  		ignore_permissions = True
  
  	return get_list(doctype, txt, filters, limit_start, limit_page_length, ignore_permissions=ignore_permissions)
  
  @frappe.whitelist()
  def set_status(name, status):
  	st = frappe.get_doc("Issue", name)
  	st.status = status
  	st.save()
  
  def auto_close_tickets():
  	frappe.db.sql("""update `tabIssue` set status = 'Closed'
  		where status = 'Replied'
  		and date_sub(curdate(),interval 15 Day) > modified""")
  
  @frappe.whitelist()
  def set_multiple_status(names, status):
  	names = json.loads(names)
  	for name in names:
  		set_status(name, status)
  
subject: set contact and customer in issue