diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
index 3c05526..79167ae 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
@@ -73,31 +73,11 @@
 			}
 			if (flag) {
 				this.frm.add_custom_button(__('Create Maintenance Visit'), function () {
-					let items = me.frm.doc.items;
-					let s = me.frm.doc.schedules;
 					let options = "";
-					let dates = "";
-					for (let i in items) {
-						for (let d in s) {
-							if (s[d].item_name == items[i].item_name && s[d].completion_status == "Pending") {
-								options = options + '\n' + items[i].item_name;
-								break;
-							}
-						}
-					}
-					function formatDate(date) {
-						var d = new Date(date),
-							month = '' + (d.getMonth() + 1),
-							day = '' + d.getDate(),
-							year = d.getFullYear();
-
-						if (month.length < 2)
-							month = '0' + month;
-						if (day.length < 2)
-							day = '0' + day;
-
-						return [day, month, year].join('-');
-					}
+					
+					me.frm.call('get_pending_data',{data_type:"items"}).then(r =>{
+						options = r.message
+						
 					var schedule_id = "";
 					var d = new frappe.ui.Dialog({
 						title: __("Enter Visit Details"),
@@ -109,30 +89,23 @@
 							reqd: 1,
 							onchange: function () {
 								let field = d.get_field("scheduled_date");
-								dates = "";
-								for (let i in s) {
-									if (s[i].item_name == this.value && s[i].completion_status == "Pending") {
-										dates = dates + '\n' + formatDate(s[i].scheduled_date);
-									}
-
-								}
-								field.df.options = dates;
-								field.refresh();
+								me.frm.call('get_pending_data',{item_name:this.value,data_type:"date"}).then(r =>{
+									field.df.options = r.message;
+									field.refresh();
+								})
 							}
 						},
 						{
 							label: __('Scheduled Date'),
 							fieldname: 'scheduled_date',
 							fieldtype: 'Select',
-							options: dates,
+							options: "",
 							reqd: 1,
 							onchange: function () {
 								let field = d.get_field('item_name');
-								for (let i in s) {
-									if (s[i].item_name == field.value && formatDate(s[i].scheduled_date) == this.value) {
-										schedule_id = s[i].name;
-									}
-								}
+								me.frm.call('get_pending_data',{item_name:field.value,s_date:this.value,data_type:"id"}).then(r =>{
+									schedule_id = r.message;
+								})
 							}
 						},
 						],
@@ -159,7 +132,7 @@
 						}
 					});
 					d.show();
-
+				});
 				}, __('Create'));
 			}
 		}
@@ -185,35 +158,8 @@
 		var item = frappe.get_doc(cdt, cdn);
 
 		if (item.start_date && item.periodicity) {
-
-			var date_diff = frappe.datetime.get_diff(item.end_date, item.start_date) + 1;
-
-			var days_in_period = {
-				"Weekly": 7,
-				"Monthly": 30,
-				"Quarterly": 91,
-				"Half Yearly": 182,
-				"Yearly": 365
-			}
-
-			var no_of_visits = cint(date_diff / days_in_period[item.periodicity]);
-			if (no_of_visits == 0 || !no_of_visits) {
-
-				let end_date = frappe.datetime.add_days(item.start_date, days_in_period[item.periodicity]);
-				frappe.model.set_value(item.doctype, item.name, "end_date", end_date);
-				date_diff = frappe.datetime.get_diff(item.end_date, item.start_date) + 1;
-				no_of_visits = cint(date_diff / days_in_period[item.periodicity]);
-				frappe.model.set_value(item.doctype, item.name, "no_of_visits", no_of_visits);
-
-			} else if (item.no_of_visits > no_of_visits) {
-				let end_date = frappe.datetime.add_days(item.start_date, item.no_of_visits * days_in_period[item.periodicity]);
-				frappe.model.set_value(item.doctype, item.name, "end_date", end_date);
-
-			} else if (item.no_of_visits < no_of_visits) {
-				let end_date = frappe.datetime.add_days(item.start_date, item.no_of_visits * days_in_period[item.periodicity]);
-				frappe.model.set_value(item.doctype, item.name, "end_date", end_date);
-
-			}
+			me.frm.call('validate_end_date_visits')
+			
 		}
 	},
 });
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
index b89d540..d11bf7e 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import frappe
 
-from frappe.utils import add_days, getdate, cint, cstr
+from frappe.utils import add_days, getdate, cint, cstr, date_diff, formatdate
 
 from frappe import throw, _
 from erpnext.utilities.transaction_base import TransactionBase, delete_events
@@ -36,6 +36,39 @@
 				child.completion_status = "Pending"
 				child.item_ref = d.name
 
+	@frappe.whitelist()
+	def validate_end_date_visits(self):
+		days_in_period = {
+			"Weekly": 7,
+			"Monthly": 30,
+			"Quarterly": 91,
+			"Half Yearly": 182,
+			"Yearly": 365
+		}
+		for i in self.items:
+			
+			if i.periodicity and i.start_date:
+				if not i.end_date:
+					if i.no_of_visits:
+						i.end_date = add_days(i.start_date, i.no_of_visits * days_in_period[i.periodicity])
+					else:
+						i.end_date = add_days(i.start_date, days_in_period[i.periodicity])
+						
+				diff = date_diff(i.end_date, i.start_date) + 1
+				no_of_visits = cint(diff / days_in_period[i.periodicity])
+				
+				if not i.no_of_visits or i.no_of_visits == 0:
+					i.end_date = add_days(i.start_date, days_in_period[i.periodicity])
+					diff = date_diff(i.end_date, i.start_date ) + 1
+					i.no_of_visits = cint(diff / days_in_period[i.periodicity])
+					
+				elif i.no_of_visits > no_of_visits:
+					i.end_date = add_days(i.start_date, i.no_of_visits * days_in_period[i.periodicity])
+
+				elif i.no_of_visits < no_of_visits:
+					i.end_date = add_days(i.start_date, i.no_of_visits * days_in_period[i.periodicity])
+
+
 	def on_submit(self):
 		if not self.get('schedules'):
 			throw(_("Please click on 'Generate Schedule' to get schedule"))
@@ -166,6 +199,7 @@
 					throw(_("Maintenance Schedule {0} exists against {1}").format(chk[0][0], d.sales_order))
 
 	def validate(self):
+		self.validate_end_date_visits()
 		self.validate_maintenance_detail()
 		self.validate_dates_with_periodicity()
 		self.validate_sales_order()
@@ -246,6 +280,30 @@
 	def on_trash(self):
 		delete_events(self.doctype, self.name)
 
+	
+	@frappe.whitelist()
+	def get_pending_data(self,data_type,s_date = None, item_name = None):
+		if data_type == "date":
+			dates = ""
+			for i in self.schedules:
+				if i.item_name == item_name and i.completion_status == "Pending":
+					dates = dates + "\n" + formatdate(i.scheduled_date, "dd-MM-yyyy")
+			return dates
+		elif data_type == "items":
+			items = ""
+			for i in self.items:
+				for s in self.schedules:
+					if i.item_name == s.item_name and s.completion_status == "Pending":
+						items = items + "\n" + i.item_name
+						break
+			return items
+		elif data_type == "id":
+			for s in self.schedules:
+				if s.item_name == item_name and s_date == formatdate(s.scheduled_date,"dd-mm-yyyy"):
+					return s.name
+				
+					
+
 @frappe.whitelist()
 def update_serial_nos(s_id):
 	serial_nos = frappe.db.get_value('Maintenance Schedule Detail', s_id, 'serial_no')
