fix: Change call log fieldname and some cleanups
diff --git a/erpnext/communication/doctype/call_log/call_log.json b/erpnext/communication/doctype/call_log/call_log.json
index fe87ae9..bb42875 100644
--- a/erpnext/communication/doctype/call_log/call_log.json
+++ b/erpnext/communication/doctype/call_log/call_log.json
@@ -1,71 +1,71 @@
 {
- "autoname": "field:call_id",
+ "autoname": "field:id",
  "creation": "2019-06-05 12:07:02.634534",
  "doctype": "DocType",
  "engine": "InnoDB",
  "field_order": [
-  "call_id",
-  "call_from",
+  "id",
+  "from",
   "column_break_3",
-  "received_by",
+  "to",
   "section_break_5",
-  "call_status",
-  "call_duration",
-  "call_summary"
+  "status",
+  "duration",
+  "summary"
  ],
  "fields": [
   {
-   "fieldname": "call_id",
-   "fieldtype": "Data",
-   "label": "Call ID",
-   "read_only": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "call_from",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Call From",
-   "read_only": 1
-  },
-  {
    "fieldname": "column_break_3",
    "fieldtype": "Column Break"
   },
   {
-   "fieldname": "received_by",
-   "fieldtype": "Data",
-   "label": "Received By",
-   "read_only": 1
-  },
-  {
    "fieldname": "section_break_5",
    "fieldtype": "Section Break"
   },
   {
-   "fieldname": "call_status",
+   "fieldname": "id",
+   "fieldtype": "Data",
+   "label": "ID",
+   "read_only": 1,
+   "unique": 1
+  },
+  {
+   "fieldname": "from",
+   "fieldtype": "Data",
+   "in_list_view": 1,
+   "label": "From",
+   "read_only": 1
+  },
+  {
+   "fieldname": "to",
+   "fieldtype": "Data",
+   "label": "To",
+   "read_only": 1
+  },
+  {
+   "fieldname": "status",
    "fieldtype": "Select",
    "in_list_view": 1,
-   "label": "Call Status",
+   "label": "Status",
    "options": "Ringing\nIn Progress\nCompleted\nMissed",
    "read_only": 1
   },
   {
    "description": "Call Duration in seconds",
-   "fieldname": "call_duration",
+   "fieldname": "duration",
    "fieldtype": "Int",
    "in_list_view": 1,
-   "label": "Call Duration",
+   "label": "Duration",
    "read_only": 1
   },
   {
-   "fieldname": "call_summary",
+   "fieldname": "summary",
    "fieldtype": "Data",
-   "label": "Call Summary",
+   "label": "Summary",
    "read_only": 1
   }
  ],
- "modified": "2019-06-06 07:41:26.208109",
+ "modified": "2019-06-07 09:49:07.623814",
  "modified_by": "Administrator",
  "module": "Communication",
  "name": "Call Log",
@@ -86,6 +86,6 @@
  ],
  "sort_field": "modified",
  "sort_order": "ASC",
- "title_field": "call_from",
+ "title_field": "from",
  "track_changes": 1
 }
\ No newline at end of file
diff --git a/erpnext/crm/doctype/utils.py b/erpnext/crm/doctype/utils.py
index 75562dd..5781e39 100644
--- a/erpnext/crm/doctype/utils.py
+++ b/erpnext/crm/doctype/utils.py
@@ -78,17 +78,17 @@
 		call_log.call_summary += '<br>' + content
 	call_log.save(ignore_permissions=True)
 
-def get_employee_emails_for_popup():
+def get_employee_emails_for_popup(communication_medium):
 	employee_emails = []
 	now_time = frappe.utils.nowtime()
 	weekday = frappe.utils.get_weekday()
 
 	available_employee_groups = frappe.db.sql("""SELECT `parent`, `employee_group`
 		FROM `tabCommunication Medium Timeslot`
-		WHERE `day_of_week` = %s AND
-		%s BETWEEN `from_time` AND `to_time`
-	""", (weekday, now_time), as_dict=1)
-
+		WHERE `day_of_week` = %s
+		AND `parent` = %s
+		AND %s BETWEEN `from_time` AND `to_time`
+	""", (weekday, communication_medium, now_time), as_dict=1)
 	for group in available_employee_groups:
 		employee_emails += [e.user_id for e in frappe.get_doc('Employee Group', group.employee_group).employee_list]
 
diff --git a/erpnext/erpnext_integrations/exotel_integration.py b/erpnext/erpnext_integrations/exotel_integration.py
index 57cba78..bace40f 100644
--- a/erpnext/erpnext_integrations/exotel_integration.py
+++ b/erpnext/erpnext_integrations/exotel_integration.py
@@ -3,6 +3,8 @@
 import requests
 
 # api/method/erpnext.erpnext_integrations.exotel_integration.handle_incoming_call
+# api/method/erpnext.erpnext_integrations.exotel_integration.handle_end_call
+# api/method/erpnext.erpnext_integrations.exotel_integration.handle_missed_call
 
 @frappe.whitelist(allow_guest=True)
 def handle_incoming_call(*args, **kwargs):
@@ -18,41 +20,43 @@
 
 	call_log = get_call_log(kwargs)
 
-	employee_emails = get_employee_emails_for_popup()
+	employee_emails = get_employee_emails_for_popup(kwargs.get('To'))
 	for email in employee_emails:
 		frappe.publish_realtime('show_call_popup', call_log, user=email)
 
 @frappe.whitelist(allow_guest=True)
 def handle_end_call(*args, **kwargs):
-	update_call_log(kwargs, 'Completed')
-	frappe.publish_realtime('call_disconnected', kwargs.get('CallSid'))
+	call_log = update_call_log(kwargs, 'Completed')
+	frappe.publish_realtime('call_disconnected', call_log)
 
 @frappe.whitelist(allow_guest=True)
 def handle_missed_call(*args, **kwargs):
-	update_call_log(kwargs, 'Missed')
-	frappe.publish_realtime('call_disconnected', kwargs.get('CallSid'))
+	call_log = update_call_log(kwargs, 'Missed')
+	frappe.publish_realtime('call_disconnected', call_log)
 
 def update_call_log(call_payload, status):
 	call_log = get_call_log(call_payload, False)
 	if call_log:
-		call_log.call_status = status
-		call_log.call_duration = call_payload.get('DialCallDuration') or 0
+		call_log.status = status
+		call_log.duration = call_payload.get('DialCallDuration') or 0
 		call_log.save(ignore_permissions=True)
 		frappe.db.commit()
+		return call_log
 
 
 def get_call_log(call_payload, create_new_if_not_found=True):
 	call_log = frappe.get_all('Call Log', {
-		'call_id': call_payload.get('CallSid'),
+		'id': call_payload.get('CallSid'),
 	}, limit=1)
 
 	if call_log:
 		return frappe.get_doc('Call Log', call_log[0].name)
 	elif create_new_if_not_found:
 		call_log = frappe.new_doc('Call Log')
-		call_log.call_id = call_payload.get('CallSid')
-		call_log.call_from = call_payload.get('CallFrom')
+		call_log.id = call_payload.get('CallSid')
+		call_log.to = call_payload.get('To')
 		call_log.status = 'Ringing'
+		setattr(call_log, 'from', call_payload.get('CallFrom'))
 		call_log.save(ignore_permissions=True)
 		frappe.db.commit()
 		return call_log
diff --git a/erpnext/public/js/call_popup/call_popup.js b/erpnext/public/js/call_popup/call_popup.js
index c8c4e8b..501299c 100644
--- a/erpnext/public/js/call_popup/call_popup.js
+++ b/erpnext/public/js/call_popup/call_popup.js
@@ -1,6 +1,6 @@
 class CallPopup {
 	constructor(call_log) {
-		this.caller_number = call_log.call_from;
+		this.caller_number = call_log.from;
 		this.call_log = call_log;
 		this.make();
 	}
@@ -21,17 +21,11 @@
 				'fieldname': 'last_communication',
 				'read_only': true
 			}, {
-				'fieldname': 'last_communication_link',
-				'fieldtype': 'HTML',
-			}, {
 				'fieldtype': 'Small Text',
 				'label': "Last Issue",
 				'fieldname': 'last_issue',
 				'read_only': true
 			}, {
-				'fieldname': 'last_issue_link',
-				'fieldtype': 'HTML',
-			}, {
 				'fieldtype': 'Column Break',
 			}, {
 				'fieldtype': 'Small Text',
@@ -44,26 +38,23 @@
 					const values = this.dialog.get_values();
 					if (!values.call_summary) return
 					frappe.xcall('erpnext.crm.doctype.utils.add_call_summary', {
-						'docname': this.call_log.call_id,
+						'docname': this.call_log.id,
 						'summary': values.call_summary,
 					}).then(() => {
 						this.dialog.set_value('call_summary', '');
 					});
 				}
 			}],
-			on_minimize_toggle: () => {
-				this.set_call_status();
-			}
 		});
 		this.set_call_status();
 		this.make_caller_info_section();
 		this.dialog.get_close_btn().show();
 		this.dialog.$body.addClass('call-popup');
 		this.dialog.set_secondary_action(() => {
-			clearInterval(this.updater);
 			delete erpnext.call_popup;
 			this.dialog.hide();
 		});
+		frappe.utils.play_sound("incoming_call");
 		this.dialog.show();
 	}
 
@@ -112,7 +103,7 @@
 
 	set_call_status(call_status) {
 		let title = '';
-		call_status = call_status || this.call_log.call_status;
+		call_status = call_status || this.call_log.status;
 		if (['Ringing'].includes(call_status) || !call_status) {
 			title = __('Incoming call from {0}',
 				[this.contact ? `${this.contact.first_name || ''} ${this.contact.last_name || ''}` : this.caller_number]);
@@ -120,7 +111,7 @@
 		} else if (call_status === 'In Progress') {
 			title = __('Call Connected');
 			this.set_indicator('yellow');
-		} else if (call_status === 'missed') {
+		} else if (call_status === 'Missed') {
 			this.set_indicator('red');
 			title = __('Call Missed');
 		} else if (['Completed', 'Disconnected'].includes(call_status)) {
@@ -137,9 +128,10 @@
 		this.call_log = call_log;
 		this.set_call_status();
 	}
-	disconnect_call() {
-		this.set_call_status('Disconnected');
-		clearInterval(this.updater);
+
+	call_disconnected(call_log) {
+		frappe.utils.play_sound("call_disconnect");
+		this.update_call_log(call_log);
 	}
 
 	make_last_interaction_section() {
@@ -147,12 +139,14 @@
 			'number': this.caller_number,
 			'reference_doc': this.contact
 		}).then(data => {
+			const comm_field = this.dialog.fields_dict["last_communication"];
 			if (data.last_communication) {
 				const comm = data.last_communication;
 				// this.dialog.set_df_property('last_interaction', 'hidden', false);
-				const comm_field = this.dialog.fields_dict["last_communication"];
 				comm_field.set_value(comm.content);
 				comm_field.$wrapper.append(frappe.utils.get_form_link('Communication', comm.name));
+			} else {
+				comm_field.$wrapper.hide();
 			}
 
 			if (data.last_issue) {
@@ -176,9 +170,9 @@
 			erpnext.call_popup.dialog.show();
 		}
 	});
-	frappe.realtime.on('call_disconnected', id => {
-		if (erpnext.call_popup && erpnext.call_popup.call_log.call_id === id) {
-			erpnext.call_popup.disconnect_call();
+	frappe.realtime.on('call_disconnected', call_log => {
+		if (erpnext.call_popup && erpnext.call_popup.call_log.id === call_log.id) {
+			erpnext.call_popup.call_disconnected(call_log);
 		}
 	});
 });