chore: Added Interactions Report and behaviour fixes

- Youtube Interactions Report with Chart and Summary
- Statistics change in doc on refresh and get updated in db as well
diff --git a/erpnext/utilities/doctype/video/video.js b/erpnext/utilities/doctype/video/video.js
index 4dd4e67..c2994ec 100644
--- a/erpnext/utilities/doctype/video/video.js
+++ b/erpnext/utilities/doctype/video/video.js
@@ -21,17 +21,10 @@
 		var youtube_id = frm.doc.url.match(expression)[1];
 
 		frappe.call({
-			method: "erpnext.utilities.doctype.video.video.update_video_stats",
+			method: "erpnext.utilities.doctype.video.video.get_video_stats",
 			args: {
+				docname: frm.doc.name,
 				youtube_id: youtube_id
-			},
-			callback: (r) => {
-				var result = r.message;
-				var fields = ['like_count', 'view_count', 'dislike_count', 'comment_count'];
-				fields.forEach((field) => {
-					frm.doc[field] = result[field];
-				})
-				frm.refresh_fields();
 			}
 		});
 	}
diff --git a/erpnext/utilities/doctype/video/video.py b/erpnext/utilities/doctype/video/video.py
index 263884a..bea7904 100644
--- a/erpnext/utilities/doctype/video/video.py
+++ b/erpnext/utilities/doctype/video/video.py
@@ -5,24 +5,43 @@
 from __future__ import unicode_literals
 import frappe
 from frappe.model.document import Document
+from six import string_types
 from pyyoutube import Api
 
 class Video(Document):
 	pass
 
 @frappe.whitelist()
-def update_video_stats(youtube_id):
-	'''
+def get_video_stats(docname, youtube_id, update=True):
+	'''Returns/Sets video statistics
+	:param docname: Name of Video
 	:param youtube_id: Unique ID from URL
+	:param update: Updates db stats value if True, else returns statistics
 	'''
+	if isinstance(update, string_types):
+		update = json.loads(update)
+
 	api_key = frappe.db.get_single_value("Video Settings", "api_key")
 	api = Api(api_key=api_key)
 
 	video = api.get_video_by_id(video_id=youtube_id)
 	video_stats = video.items[0].to_dict().get('statistics')
-	return {
+	stats = {
 		'like_count' : video_stats.get('likeCount'),
 		'view_count' : video_stats.get('viewCount'),
 		'dislike_count' : video_stats.get('dislikeCount'),
 		'comment_count' : video_stats.get('commentCount')
-	}
\ No newline at end of file
+	}
+
+	if not update:
+		return stats
+
+	frappe.db.sql("""
+		UPDATE `tabVideo`
+		SET
+			like_count  = %(like_count)s,
+			view_count = %(view_count)s,
+			dislike_count = %(dislike_count)s,
+			comment_count = %(comment_count)s
+		WHERE name = {0}""".format(frappe.db.escape(docname)), stats)
+	frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/utilities/report/youtube_interactions/youtube_interactions.js b/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
index f194cca..6e3e4e6 100644
--- a/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
+++ b/erpnext/utilities/report/youtube_interactions/youtube_interactions.js
@@ -4,6 +4,17 @@
 
 frappe.query_reports["YouTube Interactions"] = {
 	"filters": [
-
+		{
+			fieldname: "from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.add_months(frappe.datetime.now_date(), -12),
+		},
+		{
+			fieldname:"to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+			default: frappe.datetime.now_date(),
+		}
 	]
 };
diff --git a/erpnext/utilities/report/youtube_interactions/youtube_interactions.py b/erpnext/utilities/report/youtube_interactions/youtube_interactions.py
index 169d071..3516a35 100644
--- a/erpnext/utilities/report/youtube_interactions/youtube_interactions.py
+++ b/erpnext/utilities/report/youtube_interactions/youtube_interactions.py
@@ -4,11 +4,16 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
+from frappe.utils import flt
 
 def execute(filters=None):
+	if not frappe.db.get_single_value("Video Settings", "enable_youtube_tracking") or not filters:
+		return [], []
+
 	columns = get_columns()
-	data = get_data()
-	return columns, data
+	data = get_data(filters)
+	chart_data, summary = get_chart_summary_data(data)
+	return columns, data, None, chart_data, summary
 
 def get_columns():
 	return [
@@ -22,25 +27,25 @@
 			"label": _("Title"),
 			"fieldname": "title",
 			"fieldtype": "Data",
-			"width": 100
+			"width": 200
 		},
 		{
-			"label": _("Provider"),
-			"fieldname": "provider",
-			"fieldtype": "Data",
+			"label": _("Duration"),
+			"fieldname": "duration",
+			"fieldtype": "Duration",
 			"width": 100
 		},
 		{
 			"label": _("Views"),
 			"fieldname": "view_count",
 			"fieldtype": "Float",
-			"width": 100
+			"width": 200
 		},
 		{
 			"label": _("Likes"),
 			"fieldname": "like_count",
 			"fieldtype": "Float",
-			"width": 100
+			"width": 200
 		},
 		{
 			"label": _("Dislikes"),
@@ -49,24 +54,60 @@
 			"width": 100
 		},
 		{
-			"label": _("Views"),
-			"fieldname": "view_count",
+			"label": _("Comments"),
+			"fieldname": "comment_count",
 			"fieldtype": "Float",
 			"width": 100
-		},
-		{
-			"label": _("Like:Dislike Ratio"),
-			"fieldname": "ratio",
-			"fieldtype": "Data",
-			"width": 100
 		}
 	]
 
-def get_data():
+def get_data(filters):
 	return frappe.db.sql("""
 		SELECT
-			publish_date, title, provider,
+			publish_date, title, provider, duration,
 			view_count, like_count, dislike_count, comment_count
 		FROM `tabVideo`
 		WHERE view_count is not null
-		ORDER BY view_count desc""")
\ No newline at end of file
+			and publish_date between %(from_date)s and %(to_date)s
+		ORDER BY view_count desc""", filters, as_dict=1)
+
+def get_chart_summary_data(data):
+	labels, likes, views = [], [], []
+	total_views = 0
+
+	for row in data:
+		labels.append(row.get('title'))
+		likes.append(row.get('like_count'))
+		views.append(row.get('view_count'))
+		total_views += flt(row.get('view_count'))
+
+
+	chart_data = {
+		"data" : {
+			"labels" : labels,
+			"datasets" : [
+				{
+					"name" : "Likes",
+					"values" : likes
+				},
+				{
+					"name" : "Views",
+					"values" : views
+				}
+			]
+		},
+		"type": "bar",
+		"barOptions": {
+			"stacked": 1
+		},
+	}
+
+	summary = [
+		{
+			"value": total_views,
+			"indicator": "Blue",
+			"label": "Total Views",
+			"datatype": "Float",
+		}
+	]
+	return chart_data, summary
\ No newline at end of file