예제 #1
0
	def before_insert(self):
		"""Add lead(third party person) links to the document.
		"""
		lead_number = self.get('from') if self.is_incoming_call() else self.get('to')
		lead_number = strip_number(lead_number)

		contact = get_contact_with_phone_number(strip_number(lead_number))
		if contact:
			self.add_link(link_type='Contact', link_name=contact)

		lead = get_lead_with_phone_number(lead_number)
		if lead:
			self.add_link(link_type='Lead', link_name=lead)
예제 #2
0
	def before_insert(self):
		"""Add lead(third party person) links to the document."""
		lead_number = self.get("from") if self.is_incoming_call() else self.get("to")
		lead_number = strip_number(lead_number)

		contact = get_contact_with_phone_number(strip_number(lead_number))
		if contact:
			self.add_link(link_type="Contact", link_name=contact)

		lead = get_lead_with_phone_number(lead_number)
		if lead:
			self.add_link(link_type="Lead", link_name=lead)

		# Add Employee Name
		if self.is_incoming_call():
			self.update_received_by()
예제 #3
0
def set_caller_information(doc, state):
	'''Called from hooks on creation of Lead or Contact'''
	if doc.doctype not in ['Lead', 'Contact']: return

	numbers = [doc.get('phone'), doc.get('mobile_no')]
	# contact for Contact and lead for Lead
	fieldname = doc.doctype.lower()

	# contact_name or lead_name
	display_name_field = '{}_name'.format(fieldname)

	# Contact now has all the nos saved in child table
	if doc.doctype == 'Contact':
		numbers = [d.phone for d in doc.phone_nos]

	for number in numbers:
		number = strip_number(number)
		if not number: continue

		filters = frappe._dict({
			'from': ['like', '%{}'.format(number)],
			fieldname: ''
		})

		logs = frappe.get_all('Call Log', filters=filters)

		for log in logs:
			frappe.db.set_value('Call Log', log.name, {
				fieldname: doc.name,
				display_name_field: doc.get_title()
			}, update_modified=False)
예제 #4
0
    def before_insert(self):
        number = strip_number(self.get('from'))
        self.contact = get_contact_with_phone_number(number)
        self.lead = get_lead_with_phone_number(number)

        contact = frappe.get_doc("Contact", self.contact)
        self.customer = contact.get_link_for("Customer")
예제 #5
0
def get_employees_with_number(number):
	number = strip_number(number)
	if not number: return []

	employee_emails = frappe.cache().hget('employees_with_number', number)
	if employee_emails: return employee_emails

	employees = frappe.get_all('Employee', filters={
		'cell_number': ['like', '%{}%'.format(number)],
		'user_id': ['!=', '']
	}, fields=['user_id'])

	employee_emails = [employee.user_id for employee in employees]
	frappe.cache().hset('employees_with_number', number, employee_emails)

	return employee_emails
예제 #6
0
def get_employees_with_number(number):
	number = strip_number(number)
	if not number:
		return []

	employee_doc_name_and_emails = frappe.cache().hget("employees_with_number", number)
	if employee_doc_name_and_emails:
		return employee_doc_name_and_emails

	employee_doc_name_and_emails = frappe.get_all(
		"Employee",
		filters={"cell_number": ["like", f"%{number}%"], "user_id": ["!=", ""]},
		fields=["name", "user_id"],
	)

	frappe.cache().hset("employees_with_number", number, employee_doc_name_and_emails)

	return employee_doc_name_and_emails
예제 #7
0
def link_existing_conversations(doc, state):
    """
    Called from hooks on creation of Contact or Lead to link all the existing conversations.
    """
    if doc.doctype != 'Contact':
        return
    try:
        numbers = [d.phone for d in doc.phone_nos]

        for number in numbers:
            number = strip_number(number)
            if not number:
                continue
            logs = frappe.db.sql_list("""
				SELECT cl.name FROM `tabCall Log` cl
				LEFT JOIN `tabDynamic Link` dl
				ON cl.name = dl.parent
				WHERE (cl.`from` like %(phone_number)s or cl.`to` like %(phone_number)s)
				GROUP BY cl.name
				HAVING SUM(
					CASE
						WHEN dl.link_doctype = %(doctype)s AND dl.link_name = %(docname)s
						THEN 1
						ELSE 0
					END
				)=0
			""", dict(
                phone_number='%{}'.format(number),
                docname=doc.name,
                doctype=doc.doctype
            )
            )

            for log in logs:
                call_log = frappe.get_doc('Call Log', log)
                call_log.add_link(link_type=doc.doctype, link_name=doc.name)
                call_log.save()
            frappe.db.commit()
    except Exception:
        frappe.log_error(title=_('Error during caller information update'))
예제 #8
0
def get_employees_with_number(number):
    number = strip_number(number)
    if not number:
        return []

    employee_emails = frappe.cache().hget("employees_with_number", number)
    if employee_emails:
        return employee_emails

    employees = frappe.get_all(
        "Employee",
        filters={
            "cell_number": ["like", "%{}%".format(number)],
            "user_id": ["!=", ""]
        },
        fields=["user_id"],
    )

    employee_emails = [employee.user_id for employee in employees]
    frappe.cache().hset("employees_with_number", number, employee_emails)

    return employee_emails
예제 #9
0
	def before_insert(self):
		number = strip_number(self.get('from'))
		self.contact = get_contact_with_phone_number(number)
		self.lead = get_lead_with_phone_number(number)