fix: reorder updation of end date
diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py
index 8171b3b..092002f 100644
--- a/erpnext/accounts/doctype/subscription/subscription.py
+++ b/erpnext/accounts/doctype/subscription/subscription.py
@@ -542,8 +542,7 @@
 			else:
 				self.set_status_grace_period()
 
-			if getdate() > getdate(self.current_invoice_end):
-				self.update_subscription_period(add_days(self.current_invoice_end, 1))
+			update_subscription = True if getdate() > getdate(self.current_invoice_end) else False
 
 			# Generate invoices periodically even if current invoice are unpaid
 			if self.generate_new_invoices_past_due_date and not self.is_current_invoice_generated() and (self.is_postpaid_to_invoice()
@@ -551,6 +550,9 @@
 				prorate = frappe.db.get_single_value('Subscription Settings', 'prorate')
 				self.generate_invoice(prorate)
 
+			if update_subscription:
+				self.update_subscription_period(add_days(self.current_invoice_end, 1))
+
 	@staticmethod
 	def is_paid(invoice):
 		"""
diff --git a/erpnext/accounts/doctype/subscription/test_subscription.py b/erpnext/accounts/doctype/subscription/test_subscription.py
index e2cf4d5..ec8b257 100644
--- a/erpnext/accounts/doctype/subscription/test_subscription.py
+++ b/erpnext/accounts/doctype/subscription/test_subscription.py
@@ -20,6 +20,43 @@
 
 
 def create_plan():
+
+	if not frappe.db.exists('UOM', {"name": '_Test UOM'}):
+		frappe.get_doc({
+			"doctype": "UOM",
+			"uom_name": "_Test UOM"
+		}).insert()
+
+	if not frappe.db.exists('Item Group', {"name": '_Test Item Group Desktops'}):
+		frappe.get_doc({
+			"doctype": "Item Group",
+			"is_group": 0,
+			"item_group_name": "_Test Item Group Desktops",
+			"parent_item_group": "All Item Groups"
+		}).insert()
+
+	if not frappe.db.exists('Item', {"item_name": '_Test Non Stock Item'}):
+		frappe.get_doc({
+			"description": "_Test Non Stock Item 7",
+			"doctype": "Item",
+			"has_batch_no": 0,
+			"has_serial_no": 0,
+			"inspection_required": 0,
+			"is_stock_item": 0,
+			"is_sub_contracted_item": 0,
+			"item_code": "_Test Non Stock Item",
+			"item_group": "_Test Item Group Desktops",
+			"item_name": "_Test Non Stock Item",
+			"stock_uom": "_Test UOM",
+			"gst_hsn_code": "999800",
+			"item_defaults": [{
+				"company": "_Test Company",
+				"default_warehouse": "Finished Goods - _TC",
+				"expense_account": "Gegenkonto zu Konto 9260 - 9268 - _TC",
+				"income_account": "Kurzfristige Rückstellungen - _TC"
+			}]
+		}).insert()
+
 	if not frappe.db.exists('Subscription Plan', '_Test Plan Name'):
 		plan = frappe.new_doc('Subscription Plan')
 		plan.plan_name = '_Test Plan Name'
@@ -619,7 +656,7 @@
 		# subscription
 
 		subscription.process()
-		self.assertEqual(len(subscription.invoices), 2)
+		self.assertEqual(len(subscription.invoices), 1)
 
 	def test_subscription_without_generate_invoice_past_due(self):
 		subscription = frappe.new_doc('Subscription')