more tests and quick fix
diff --git a/erpnext/accounts/doctype/subscriptions/subscriptions.py b/erpnext/accounts/doctype/subscriptions/subscriptions.py
index e47b7ea..123cd32 100644
--- a/erpnext/accounts/doctype/subscriptions/subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/subscriptions.py
@@ -234,7 +234,7 @@
# process_for_unpaid()
def process_for_active(self):
- if nowdate() > self.current_invoice_end and not self.has_outstanding_invoice():
+ if getdate(nowdate()) > getdate(self.current_invoice_end) and not self.has_outstanding_invoice():
self.generate_invoice()
if self.current_invoice_is_past_due():
diff --git a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
index 01d05d2..a3413c7 100644
--- a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
@@ -211,5 +211,61 @@
subscription.delete()
+ def test_subcription_is_past_due_doesnt_change_within_grace_period(self):
+ settings = frappe.get_single('Subscription Settings')
+ grace_period = settings.grace_period
+ settings.grace_period = 1000
+ settings.save()
+
+ subscription = frappe.new_doc('Subscriptions')
+ subscription.subscriber = '_Test Customer'
+ subscription.append('plans', {'plan': '_Test Plan Name'})
+ subscription.insert()
+ subscription.set_current_invoice_start('2018-01-01')
+ subscription.set_current_invoice_end()
+ subscription.process() # generate first invoice
+
+ self.assertEqual(subscription.status, 'Past Due Date')
+
+ subscription.process()
+ # Grace period is 1000 days so status should remain as Past Due Date
+ self.assertEqual(subscription.status, 'Past Due Date')
+
+ subscription.process()
+ self.assertEqual(subscription.status, 'Past Due Date')
+
+ subscription.process()
+ self.assertEqual(subscription.status, 'Past Due Date')
+
+ settings.grace_period = grace_period
+ settings.save()
+ subscription.delete()
+
+ def test_subscription_remains_active_during_invoice_period(self):
+ subscription = frappe.new_doc('Subscriptions')
+ subscription.subscriber = '_Test Customer'
+ subscription.append('plans', {'plan': '_Test Plan Name'})
+ subscription.save()
+ subscription.process() # no changes expected
+
+ self.assertEqual(subscription.status, 'Active')
+ self.assertEqual(subscription.current_invoice_start, nowdate())
+ self.assertEqual(subscription.current_invoice_end, add_to_date(nowdate(), months=1, days=-1))
+ self.assertEqual(len(subscription.invoices), 0)
+
+ subscription.process() # no changes expected still
+ self.assertEqual(subscription.status, 'Active')
+ self.assertEqual(subscription.current_invoice_start, nowdate())
+ self.assertEqual(subscription.current_invoice_end, add_to_date(nowdate(), months=1, days=-1))
+ self.assertEqual(len(subscription.invoices), 0)
+
+ subscription.process() # no changes expected yet still
+ self.assertEqual(subscription.status, 'Active')
+ self.assertEqual(subscription.current_invoice_start, nowdate())
+ self.assertEqual(subscription.current_invoice_end, add_to_date(nowdate(), months=1, days=-1))
+ self.assertEqual(len(subscription.invoices), 0)
+
+ subscription.delete()
+
def test_subscription_creation_with_multiple_plans(self):
pass