enhancement: ensure subscription is cancelled before attempting to restart
diff --git a/erpnext/accounts/doctype/subscriptions/subscriptions.py b/erpnext/accounts/doctype/subscriptions/subscriptions.py
index ed1d353..6264972 100644
--- a/erpnext/accounts/doctype/subscriptions/subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/subscriptions.py
@@ -410,11 +410,14 @@
 		subscription and the `Subscription` will lose all the history of generated invoices
 		it has.
 		"""
-		self.status = 'Active'
-		self.db_set('start', nowdate())
-		self.update_subscription_period(nowdate())
-		self.invoices = []
-		self.save()
+		if self.status == 'Canceled':
+			self.status = 'Active'
+			self.db_set('start', nowdate())
+			self.update_subscription_period(nowdate())
+			self.invoices = []
+			self.save()
+		else:
+			frappe.throw(_('You cannot restart a Subscription that is not cancelled.'))
 
 
 def process_all():
diff --git a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
index ad1eb21..4452e63 100644
--- a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
@@ -447,3 +447,13 @@
 		settings.cancel_after_grace = default_grace_period_action
 		settings.save()
 		subscription.delete()
+
+	def test_restart_active_subscription(self):
+		subscription = frappe.new_doc('Subscriptions')
+		subscription.subscriber = '_Test Customer'
+		subscription.append('plans', {'plan': '_Test Plan Name'})
+		subscription.save()
+
+		self.assertRaises(frappe.ValidationError, subscription.restart_subscription)
+
+		subscription.delete()