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)
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()
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)
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")
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
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
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'))
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
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)