fix: create past invoices
diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py
index 092002f..01a5363 100644
--- a/erpnext/accounts/doctype/subscription/subscription.py
+++ b/erpnext/accounts/doctype/subscription/subscription.py
@@ -33,7 +33,7 @@
 		# update start just before the subscription doc is created
 		self.update_subscription_period(self.start_date)
 
-	def update_subscription_period(self, date=None):
+	def update_subscription_period(self, date=None, return_date=False):
 		"""
 		Subscription period is the period to be billed. This method updates the
 		beginning of the billing period and end of the billing period.
@@ -41,28 +41,41 @@
 		The beginning of the billing period is represented in the doctype as
 		`current_invoice_start` and the end of the billing period is represented
 		as `current_invoice_end`.
-		"""
-		self.set_current_invoice_start(date)
-		self.set_current_invoice_end()
 
-	def set_current_invoice_start(self, date=None):
+		If return_date is True, it wont update the start and end dates.
+		This is implemented to get the dates to check if is_current_invoice_generated
 		"""
-		This sets the date of the beginning of the current billing period.
+		_current_invoice_start = self.get_current_invoice_start(date)
+		_current_invoice_end = self.get_current_invoice_end(_current_invoice_start)
+
+		if return_date:
+			return _current_invoice_start, _current_invoice_end
+
+		self.current_invoice_start = _current_invoice_start
+		self.current_invoice_end = _current_invoice_end
+
+	def get_current_invoice_start(self, date=None):
+		"""
+		This returns the date of the beginning of the current billing period.
 		If the `date` parameter is not given , it will be automatically set as today's
 		date.
 		"""
-		if self.is_new_subscription() and self.trial_period_end and getdate(self.trial_period_end) > getdate(self.start_date):
-			self.current_invoice_start = add_days(self.trial_period_end, 1)
-		elif self.trial_period_start and self.is_trialling():
-			self.current_invoice_start = self.trial_period_start
-		elif date:
-			self.current_invoice_start = date
-		else:
-			self.current_invoice_start = nowdate()
+		_current_invoice_start = None
 
-	def set_current_invoice_end(self):
+		if self.is_new_subscription() and self.trial_period_end and getdate(self.trial_period_end) > getdate(self.start_date):
+			_current_invoice_start = add_days(self.trial_period_end, 1)
+		elif self.trial_period_start and self.is_trialling():
+			_current_invoice_start = self.trial_period_start
+		elif date:
+			_current_invoice_start = date
+		else:
+			_current_invoice_start = nowdate()
+
+		return _current_invoice_start
+
+	def get_current_invoice_end(self, date=None):
 		"""
-		This sets the date of the end of the current billing period.
+		This returns the date of the end of the current billing period.
 
 		If the subscription is in trial period, it will be set as the end of the
 		trial period.
@@ -71,44 +84,47 @@
 		current billing period where `x` is the billing interval from the
 		`Subscription Plan` in the `Subscription`.
 		"""
-		if self.is_trialling() and getdate(self.current_invoice_start) < getdate(self.trial_period_end):
-			self.current_invoice_end = self.trial_period_end
+		_current_invoice_end = None
+
+		if self.is_trialling() and getdate(date) < getdate(self.trial_period_end):
+			_current_invoice_end = self.trial_period_end
 		else:
 			billing_cycle_info = self.get_billing_cycle_data()
 			if billing_cycle_info:
-				if self.is_new_subscription() and getdate(self.start_date) < getdate(self.current_invoice_start):
-					self.current_invoice_end = add_to_date(self.start_date, **billing_cycle_info)
+				if self.is_new_subscription() and getdate(self.start_date) < getdate(date):
+					_current_invoice_end = add_to_date(self.start_date, **billing_cycle_info)
 
 					# For cases where trial period is for an entire billing interval
-					if getdate(self.current_invoice_end) < getdate(self.current_invoice_start):
-						self.current_invoice_end = add_to_date(self.current_invoice_start, **billing_cycle_info)
+					if getdate(self.current_invoice_end) < getdate(date):
+						_current_invoice_end = add_to_date(date, **billing_cycle_info)
 				else:
-					self.current_invoice_end = add_to_date(self.current_invoice_start, **billing_cycle_info)
+					_current_invoice_end = add_to_date(date, **billing_cycle_info)
 			else:
-				self.current_invoice_end = get_last_day(self.current_invoice_start)
+				_current_invoice_end = get_last_day(date)
 
 			if self.follow_calendar_months:
 				billing_info = self.get_billing_cycle_and_interval()
 				billing_interval_count = billing_info[0]['billing_interval_count']
 				calendar_months = get_calendar_months(billing_interval_count)
 				calendar_month = 0
-				current_invoice_end_month = getdate(self.current_invoice_end).month
-				current_invoice_end_year = getdate(self.current_invoice_end).year
+				current_invoice_end_month = getdate(_current_invoice_end).month
+				current_invoice_end_year = getdate(_current_invoice_end).year
 
 				for month in calendar_months:
 					if month <= current_invoice_end_month:
 						calendar_month = month
 
 				if cint(calendar_month - billing_interval_count) <= 0 and \
-					getdate(self.current_invoice_start).month != 1:
+					getdate(date).month != 1:
 					calendar_month = 12
 					current_invoice_end_year -= 1
 
-				self.current_invoice_end = get_last_day(cstr(current_invoice_end_year) + '-' \
-					+ cstr(calendar_month) + '-01')
+				_current_invoice_end = get_last_day(cstr(current_invoice_end_year) + '-' + cstr(calendar_month) + '-01')
 
-			if self.end_date and getdate(self.current_invoice_end) > getdate(self.end_date):
-				self.current_invoice_end = self.end_date
+			if self.end_date and getdate(_current_invoice_end) > getdate(self.end_date):
+				_current_invoice_end = self.end_date
+
+		return _current_invoice_end
 
 	@staticmethod
 	def validate_plans_billing_cycle(billing_cycle_data):
@@ -488,8 +504,9 @@
 
 	def is_current_invoice_generated(self):
 		invoice = self.get_current_invoice()
+		_current_start_date, _current_end_date = self.update_subscription_period(date=add_days(self.current_invoice_end, 1), return_date=True)
 
-		if invoice and getdate(self.current_invoice_start) <= getdate(invoice.posting_date) <= getdate(self.current_invoice_end):
+		if invoice and getdate(_current_start_date) <= getdate(invoice.posting_date) <= getdate(_current_end_date):
 			return True
 
 		return False
diff --git a/erpnext/accounts/doctype/subscription/test_subscription.py b/erpnext/accounts/doctype/subscription/test_subscription.py
index a01363b..0f7a0a8 100644
--- a/erpnext/accounts/doctype/subscription/test_subscription.py
+++ b/erpnext/accounts/doctype/subscription/test_subscription.py
@@ -619,7 +619,7 @@
 		# subscription
 
 		subscription.process()
-		self.assertEqual(len(subscription.invoices), 1)
+		self.assertEqual(len(subscription.invoices), 2)
 
 	def test_subscription_without_generate_invoice_past_due(self):
 		subscription = frappe.new_doc('Subscription')