enhancement: do nothing if `cancel_sbscription` is called for cancelled subscription
diff --git a/erpnext/accounts/doctype/subscriptions/subscriptions.py b/erpnext/accounts/doctype/subscriptions/subscriptions.py
index 6264972..7796daa 100644
--- a/erpnext/accounts/doctype/subscriptions/subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/subscriptions.py
@@ -396,13 +396,14 @@
 		This sets the subscription as cancelled. It will stop invoices from being generated
 		but it will not affect already created invoices.
 		"""
-		to_generate_invoice = True if self.status == 'Active' else False
-		to_prorate = frappe.db.get_single_value('Subscription Settings', 'prorate')
-		self.status = 'Canceled'
-		self.cancelation_date = nowdate()
-		if to_generate_invoice:
-			self.generate_invoice(prorate=to_prorate)
-		self.save()
+		if self.status != 'Canceled':
+			to_generate_invoice = True if self.status == 'Active' else False
+			to_prorate = frappe.db.get_single_value('Subscription Settings', 'prorate')
+			self.status = 'Canceled'
+			self.cancelation_date = nowdate()
+			if to_generate_invoice:
+				self.generate_invoice(prorate=to_prorate)
+			self.save()
 
 	def restart_subscription(self):
 		"""