Merge branch 'develop' into exotel-fixes
diff --git a/erpnext/erpnext_integrations/exotel_integration.py b/erpnext/erpnext_integrations/exotel_integration.py
index 1f5df67..82bcb8d 100644
--- a/erpnext/erpnext_integrations/exotel_integration.py
+++ b/erpnext/erpnext_integrations/exotel_integration.py
@@ -37,11 +37,26 @@
@frappe.whitelist(allow_guest=True)
def handle_missed_call(**kwargs):
- update_call_log(kwargs, "Missed")
+ status = ""
+ call_type = kwargs.get("CallType")
+ dial_call_status = kwargs.get("DialCallStatus")
+
+ if call_type == "incomplete" and dial_call_status == "no-answer":
+ status = "No Answer"
+ elif call_type == "client-hangup" and dial_call_status == "canceled":
+ status = "Canceled"
+ elif call_type == "incomplete" and dial_call_status == "failed":
+ status = "Failed"
+
+ update_call_log(kwargs, status)
def update_call_log(call_payload, status="Ringing", call_log=None):
call_log = call_log or get_call_log(call_payload)
+
+ # for a new sid, call_log and get_call_log will be empty so create a new log
+ if not call_log:
+ call_log = create_call_log(call_payload)
if call_log:
call_log.status = status
call_log.to = call_payload.get("DialWhomNumber")
diff --git a/erpnext/hr/doctype/employee/employee.json b/erpnext/hr/doctype/employee/employee.json
index d592a9c..8a12f3b 100644
--- a/erpnext/hr/doctype/employee/employee.json
+++ b/erpnext/hr/doctype/employee/employee.json
@@ -4,7 +4,7 @@
"allow_import": 1,
"allow_rename": 1,
"autoname": "naming_series:",
- "creation": "2013-03-07 09:04:18",
+ "creation": "2022-02-21 11:54:09.632218",
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
@@ -813,11 +813,12 @@
"idx": 24,
"image_field": "image",
"links": [],
- "modified": "2021-06-17 11:31:37.730760",
+ "modified": "2022-03-22 13:44:37.088519",
"modified_by": "Administrator",
"module": "HR",
"name": "Employee",
"name_case": "Title Case",
+ "naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [
{
@@ -857,7 +858,9 @@
],
"search_fields": "employee_name",
"show_name_in_global_search": 1,
+ "show_title_field_in_link": 1,
"sort_field": "modified",
"sort_order": "DESC",
+ "states": [],
"title_field": "employee_name"
}
\ No newline at end of file
diff --git a/erpnext/public/js/call_popup/call_popup.js b/erpnext/public/js/call_popup/call_popup.js
index c954f12..2dbe999 100644
--- a/erpnext/public/js/call_popup/call_popup.js
+++ b/erpnext/public/js/call_popup/call_popup.js
@@ -141,6 +141,14 @@
'fieldtype': 'Section Break',
'hide_border': 1,
}, {
+ 'fieldname': 'call_type',
+ 'label': 'Call Type',
+ 'fieldtype': 'Link',
+ 'options': 'Telephony Call Type',
+ }, {
+ 'fieldtype': 'Section Break',
+ 'hide_border': 1,
+ }, {
'fieldtype': 'Small Text',
'label': __('Call Summary'),
'fieldname': 'call_summary',
@@ -149,10 +157,12 @@
'label': __('Save'),
'click': () => {
const call_summary = this.call_details.get_value('call_summary');
+ const call_type = this.call_details.get_value('call_type');
if (!call_summary) return;
- frappe.xcall('erpnext.telephony.doctype.call_log.call_log.add_call_summary', {
+ frappe.xcall('erpnext.telephony.doctype.call_log.call_log.add_call_summary_and_call_type', {
'call_log': this.call_log.name,
'summary': call_summary,
+ 'call_type': call_type,
}).then(() => {
this.close_modal();
frappe.show_alert({
diff --git a/erpnext/telephony/doctype/call_log/call_log.json b/erpnext/telephony/doctype/call_log/call_log.json
index 1d6c39e..cd749e8 100644
--- a/erpnext/telephony/doctype/call_log/call_log.json
+++ b/erpnext/telephony/doctype/call_log/call_log.json
@@ -1,7 +1,7 @@
{
"actions": [],
"autoname": "field:id",
- "creation": "2019-06-05 12:07:02.634534",
+ "creation": "2022-02-21 11:54:58.414784",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
@@ -9,6 +9,8 @@
"id",
"from",
"to",
+ "call_received_by",
+ "employee_user_id",
"medium",
"start_time",
"end_time",
@@ -20,6 +22,7 @@
"recording_url",
"recording_html",
"section_break_11",
+ "type_of_call",
"summary",
"section_break_19",
"links"
@@ -103,7 +106,8 @@
},
{
"fieldname": "summary",
- "fieldtype": "Small Text"
+ "fieldtype": "Small Text",
+ "label": "Summary"
},
{
"fieldname": "section_break_11",
@@ -134,15 +138,34 @@
"fieldname": "call_details_section",
"fieldtype": "Section Break",
"label": "Call Details"
+ },
+ {
+ "fieldname": "employee_user_id",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Employee User Id"
+ },
+ {
+ "fieldname": "type_of_call",
+ "fieldtype": "Data",
+ "label": "Type Of Call"
+ },
+ {
+ "depends_on": "to",
+ "fieldname": "call_received_by",
+ "fieldtype": "Data",
+ "label": "Call Received By",
+ "read_only": 1
}
],
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2021-02-08 14:23:28.744844",
+ "modified": "2022-02-25 14:37:48.575230",
"modified_by": "Administrator",
"module": "Telephony",
"name": "Call Log",
+ "naming_rule": "By fieldname",
"owner": "Administrator",
"permissions": [
{
@@ -164,6 +187,7 @@
],
"sort_field": "creation",
"sort_order": "DESC",
+ "states": [],
"title_field": "from",
"track_changes": 1,
"track_views": 1
diff --git a/erpnext/telephony/doctype/call_log/call_log.py b/erpnext/telephony/doctype/call_log/call_log.py
index 1c88883..21fa9c9 100644
--- a/erpnext/telephony/doctype/call_log/call_log.py
+++ b/erpnext/telephony/doctype/call_log/call_log.py
@@ -32,6 +32,15 @@
if lead:
self.add_link(link_type="Lead", link_name=lead)
+ # Add Employee Name
+ if self.is_incoming_call():
+ # Taking the last 10 digits of the number
+ employee_number = strip_number(self.get("to"))
+ employee = get_employees_with_number(self.get("to"))
+
+ self.call_received_by = employee[0].get("name")
+ self.employee_user_id = employee[0].get("user_id")
+
def after_insert(self):
self.trigger_call_popup()
@@ -65,7 +74,8 @@
def trigger_call_popup(self):
if self.is_incoming_call():
scheduled_employees = get_scheduled_employees_for_popup(self.medium)
- employee_emails = get_employees_with_number(self.to)
+ employees = get_employees_with_number(self.to)
+ employee_emails = [employee.get("user_id") for employee in employees]
# check if employees with matched number are scheduled to receive popup
emails = set(scheduled_employees).intersection(employee_emails)
@@ -86,9 +96,19 @@
frappe.publish_realtime("show_call_popup", self, user=email)
+def get_employee_name(emp):
+ employee_name = ""
+ for name in ["first_name", "middle_name", "last_name"]:
+ if emp.get(name):
+ employee_name += (" " if employee_name else "") + emp.get(name)
+ return employee_name
+
+
@frappe.whitelist()
-def add_call_summary(call_log, summary):
+def add_call_summary_and_call_type(call_log, summary, call_type):
doc = frappe.get_doc("Call Log", call_log)
+ doc.type_of_call = call_type
+ doc.save()
doc.add_comment("Comment", frappe.bold(_("Call Summary")) + "<br><br>" + summary)
@@ -97,20 +117,19 @@
if not number:
return []
- employee_emails = frappe.cache().hget("employees_with_number", number)
- if employee_emails:
- return employee_emails
+ employee_doc_name_and_emails = frappe.cache().hget("employees_with_number", number)
+ if employee_doc_name_and_emails:
+ return employee_doc_name_and_emails
- employees = frappe.get_all(
+ employee_doc_name_and_emails = frappe.get_all(
"Employee",
filters={"cell_number": ["like", "%{}%".format(number)], "user_id": ["!=", ""]},
- fields=["user_id"],
+ fields=["name", "user_id"],
)
- employee_emails = [employee.user_id for employee in employees]
- frappe.cache().hset("employees_with_number", number, employee_emails)
+ frappe.cache().hset("employees_with_number", number, employee_doc_name_and_emails)
- return employee_emails
+ return employee_doc_name_and_emails
def link_existing_conversations(doc, state):
diff --git a/erpnext/telephony/doctype/telephony_call_type/__init__.py b/erpnext/telephony/doctype/telephony_call_type/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/telephony/doctype/telephony_call_type/__init__.py
diff --git a/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js
new file mode 100644
index 0000000..efba2b8
--- /dev/null
+++ b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('Telephony Call Type', {
+ // refresh: function(frm) {
+
+ // }
+});
diff --git a/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.json b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.json
new file mode 100644
index 0000000..603709e
--- /dev/null
+++ b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.json
@@ -0,0 +1,58 @@
+{
+ "actions": [],
+ "allow_rename": 1,
+ "autoname": "field:call_type",
+ "creation": "2022-02-25 16:13:37.321312",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "call_type",
+ "amended_from"
+ ],
+ "fields": [
+ {
+ "fieldname": "call_type",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "label": "Call Type",
+ "reqd": 1,
+ "unique": 1
+ },
+ {
+ "fieldname": "amended_from",
+ "fieldtype": "Link",
+ "label": "Amended From",
+ "no_copy": 1,
+ "options": "Telephony Call Type",
+ "print_hide": 1,
+ "read_only": 1
+ }
+ ],
+ "index_web_pages_for_search": 1,
+ "is_submittable": 1,
+ "links": [],
+ "modified": "2022-02-25 16:14:07.087461",
+ "modified_by": "Administrator",
+ "module": "Telephony",
+ "name": "Telephony Call Type",
+ "naming_rule": "By fieldname",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
+ "write": 1
+ }
+ ],
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "states": []
+}
\ No newline at end of file
diff --git a/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.py b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.py
new file mode 100644
index 0000000..944ffef
--- /dev/null
+++ b/erpnext/telephony/doctype/telephony_call_type/telephony_call_type.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+# import frappe
+from frappe.model.document import Document
+
+
+class TelephonyCallType(Document):
+ pass
diff --git a/erpnext/telephony/doctype/telephony_call_type/test_telephony_call_type.py b/erpnext/telephony/doctype/telephony_call_type/test_telephony_call_type.py
new file mode 100644
index 0000000..b3c19c3
--- /dev/null
+++ b/erpnext/telephony/doctype/telephony_call_type/test_telephony_call_type.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+
+# import frappe
+import unittest
+
+
+class TestTelephonyCallType(unittest.TestCase):
+ pass