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()