diff --git a/erpnext/crm/call_summary/call_summary_utils.py b/erpnext/crm/call_summary/call_summary_utils.py deleted file mode 100644 index 49491d5a4a5..00000000000 --- a/erpnext/crm/call_summary/call_summary_utils.py +++ /dev/null @@ -1,18 +0,0 @@ -import frappe - -@frappe.whitelist() -def get_contact_doc(phone_number): - phone_number = phone_number[-10:] - contacts = frappe.get_all('Contact', or_filters={ - 'phone': ['like', '%{}'.format(phone_number)], - 'mobile_no': ['like', '%{}'.format(phone_number)] - }, fields=['name']) - - if contacts: - return frappe.get_doc(contacts[0].name) - -@frappe.whitelist() -def get_last_communication(phone_number, customer=None): - # find last communication through phone_number - # find last issues, opportunity, lead - pass \ No newline at end of file diff --git a/erpnext/crm/call_summary/exotel_call_handler.py b/erpnext/crm/call_summary/exotel_call_handler.py deleted file mode 100644 index a0c3b7d5eaf..00000000000 --- a/erpnext/crm/call_summary/exotel_call_handler.py +++ /dev/null @@ -1,43 +0,0 @@ -import frappe - -@frappe.whitelist(allow_guest=True) -def handle_request(*args, **kwargs): - # r = frappe.request - - # print(r.args.to_dict(), args, kwargs) - - incoming_phone_number = kwargs.get('CallFrom') - contact = get_contact_doc(incoming_phone_number) - last_communication = get_last_communication(incoming_phone_number, contact) - - data = { - 'contact': contact, - 'call_payload': kwargs, - 'last_communication': last_communication - } - - frappe.publish_realtime('incoming_call', data) - - -def get_contact_doc(phone_number): - phone_number = phone_number[-10:] - number_filter = { - 'phone': ['like', '%{}'.format(phone_number)], - 'mobile_no': ['like', '%{}'.format(phone_number)] - } - contacts = frappe.get_all('Contact', or_filters=number_filter, - fields=['name'], limit=1) - - if contacts: - return frappe.get_doc('Contact', contacts[0].name) - - leads = frappe.get_all('Leads', or_filters=number_filter, - fields=['name'], limit=1) - - if leads: - return frappe.get_doc('Lead', leads[0].name) - - -def get_last_communication(phone_number, contact): - # frappe.get_all('Communication', filter={}) - return {} diff --git a/erpnext/crm/doctype/utils.py b/erpnext/crm/doctype/utils.py new file mode 100644 index 00000000000..3bd92462e3b --- /dev/null +++ b/erpnext/crm/doctype/utils.py @@ -0,0 +1,20 @@ +import frappe + +def get_document_with_phone_number(number): + # finds contacts and leads + number = number[-10:] + number_filter = { + 'phone': ['like', '%{}'.format(number)], + 'mobile_no': ['like', '%{}'.format(number)] + } + contacts = frappe.get_all('Contact', or_filters=number_filter, + fields=['name'], limit=1) + + if contacts: + return frappe.get_doc('Contact', contacts[0].name) + + leads = frappe.get_all('Leads', or_filters=number_filter, + fields=['name'], limit=1) + + if leads: + return frappe.get_doc('Lead', leads[0].name) \ No newline at end of file diff --git a/erpnext/erpnext_integrations/exotel_integration.py b/erpnext/erpnext_integrations/exotel_integration.py new file mode 100644 index 00000000000..f8b605a2d11 --- /dev/null +++ b/erpnext/erpnext_integrations/exotel_integration.py @@ -0,0 +1,41 @@ +import frappe +from erpnext.crm.doctype.utils import get_document_with_phone_number + +@frappe.whitelist(allow_guest=True) +def handle_incoming_call(*args, **kwargs): + incoming_phone_number = kwargs.get('CallFrom') + + contact = get_document_with_phone_number(incoming_phone_number) + last_communication = get_last_communication(incoming_phone_number, contact) + call_log = create_call_log(kwargs) + data = { + 'contact': contact, + 'call_payload': kwargs, + 'last_communication': last_communication, + 'call_log': call_log + } + + frappe.publish_realtime('incoming_call', data) + + +def get_last_communication(phone_number, contact): + # frappe.get_all('Communication', filter={}) + return {} + +def create_call_log(call_payload): + communication = frappe.new_doc('Communication') + communication.subject = frappe._('Call from {}').format(call_payload.get("CallFrom")) + communication.communication_medium = 'Phone' + communication.send_email = 0 + communication.phone_no = call_payload.get("CallFrom") + communication.comment_type = 'Info' + communication.communication_type = 'Communication' + communication.status = 'Open' + communication.sent_or_received = 'Received' + communication.content = 'call_payload' + communication.communication_date = call_payload.get('StartTime') + # communication.sid = call_payload.get('CallSid') + # communication.exophone = call_payload.get('CallTo') + # communication.call_receiver = call_payload.get('DialWhomNumber') + communication.save(ignore_permissions=True) + return communication diff --git a/erpnext/public/js/call_popup/call_summary_dialog.js b/erpnext/public/js/call_popup/call_popup.js similarity index 75% rename from erpnext/public/js/call_popup/call_summary_dialog.js rename to erpnext/public/js/call_popup/call_popup.js index e9823eeeefe..99c2ca38b18 100644 --- a/erpnext/public/js/call_popup/call_summary_dialog.js +++ b/erpnext/public/js/call_popup/call_popup.js @@ -1,4 +1,4 @@ -class CallSummaryDialog { +class CallPopup { constructor({ contact, call_payload, last_communication }) { this.number = call_payload.CallFrom; this.contact = contact; @@ -8,7 +8,6 @@ class CallSummaryDialog { make() { this.dialog = new frappe.ui.Dialog({ - 'title': __(`Incoming call from ${this.contact ? this.contact.name : 'Unknown Number'}`), 'static': true, 'minimizable': true, 'fields': [{ @@ -27,40 +26,21 @@ class CallSummaryDialog { 'fieldtype': 'Small Text', 'label': 'Call Summary', 'fieldname': 'call_communication', - 'default': 'This is not working please helpppp', - "placeholder": __("Select or add new customer") }, { 'fieldtype': 'Button', 'label': 'Submit', 'click': () => { - frappe.xcall() + this.dialog.get_value(); } }] }); + this.set_call_status(); this.make_customer_contact(); this.dialog.show(); this.dialog.get_close_btn().show(); this.dialog.header.find('.indicator').removeClass('hidden').addClass('blue'); } - get_dialog_skeleton() { - return ` -