clean up
diff --git a/erpnext/accounts/doctype/subscriptions/subscriptions.py b/erpnext/accounts/doctype/subscriptions/subscriptions.py
index 23bb05d..2fd2fd6 100644
--- a/erpnext/accounts/doctype/subscriptions/subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/subscriptions.py
@@ -3,10 +3,11 @@
# For license information, please see license.txt
from __future__ import unicode_literals
+
import frappe
-from frappe.model.document import Document
-from frappe.utils.data import now, nowdate, getdate, cint, add_days, date_diff, get_last_day, get_first_day, add_to_date
from frappe import _
+from frappe.model.document import Document
+from frappe.utils.data import nowdate, getdate, cint, add_days, date_diff, get_last_day, add_to_date
class Subscriptions(Document):
@@ -67,7 +68,8 @@
"""
return self.get_billing_cycle_data()
- def validate_plans_billing_cycle(self, billing_cycle_data):
+ @staticmethod
+ def validate_plans_billing_cycle(billing_cycle_data):
"""
Makes sure that all `Subscription Plan` in the `Subscription` have the
same billing interval
@@ -112,7 +114,7 @@
elif interval == 'Month':
data['months'] = interval_count
elif interval == 'Year':
- data['years'] == interval_count
+ data['years'] = interval_count
# todo: test week
elif interval == 'Week':
data['days'] = interval_count * 7 - 1
@@ -154,7 +156,8 @@
"""
return not self.period_has_passed(self.trial_period_end) and self.is_new_subscription()
- def period_has_passed(self, end_date):
+ @staticmethod
+ def period_has_passed(end_date):
"""
Returns true if the given `end_date` has passed
"""
@@ -198,7 +201,7 @@
doc = frappe.get_doc('Sales Invoice', current.invoice)
return doc
else:
- frappe.throw(_('Invoice {0} no longer exists'.format(invoice.invoice)))
+ frappe.throw(_('Invoice {0} no longer exists'.format(current.invoice)))
def is_new_subscription(self):
"""
@@ -282,7 +285,8 @@
return invoice
- def get_customer(self, subscriber_name):
+ @staticmethod
+ def get_customer(subscriber_name):
"""
Returns the `Customer` linked to the `Subscriber`
"""
@@ -302,7 +306,7 @@
)
elif plan_items:
- prorate_factor = self.get_proration_factor(self.current_invoice_end, self.current_invoice_start)
+ prorate_factor = get_prorata_factor(self.current_invoice_end, self.current_invoice_start)
item_names = frappe.db.sql(
'select item as item_code, cost * %s as rate from `tabSubscription Plan` where name in %s',
@@ -311,13 +315,6 @@
return item_names
- def get_proration_factor(self, period_end, period_start):
- diff = date_diff(nowdate(), period_start) + 1
- plan_days = date_diff(period_end, period_start) + 1
- prorate_factor = diff/plan_days
-
- return prorate_factor
-
def process(self):
"""
To be called by task periodically. It checks the subscription and takes appropriate action
@@ -379,7 +376,8 @@
else:
self.set_status_grace_period()
- def is_not_outstanding(self, invoice):
+ @staticmethod
+ def is_not_outstanding(invoice):
"""
Return `True` if the given invoice is paid
"""
@@ -394,7 +392,6 @@
return False
else:
return not self.is_not_outstanding(current_invoice)
- return True
def cancel_subscription(self):
"""
@@ -457,6 +454,14 @@
frappe.db.commit()
+def get_prorata_factor(period_end, period_start):
+ diff = date_diff(nowdate(), period_start) + 1
+ plan_days = date_diff(period_end, period_start) + 1
+ prorate_factor = diff/plan_days
+
+ return prorate_factor
+
+
@frappe.whitelist()
def cancel_subscription(name):
"""
diff --git a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
index b2975d7..627ebdd 100644
--- a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
@@ -3,10 +3,11 @@
# See license.txt
from __future__ import unicode_literals
-import frappe
import unittest
-from frappe.utils.data import nowdate, add_days, get_last_day, cint, getdate, add_to_date, get_datetime_str, add_months, date_diff
-from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
+
+import frappe
+from erpnext.accounts.doctype.subscriptions.subscriptions import get_prorata_factor
+from frappe.utils.data import nowdate, add_days, add_to_date, add_months, date_diff
class TestSubscriptions(unittest.TestCase):
@@ -156,7 +157,7 @@
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.start = '2018-01-01'
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(subscription.status, 'Past Due Date')
@@ -179,7 +180,7 @@
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.start = '2018-01-01'
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(subscription.status, 'Past Due Date')
@@ -198,13 +199,13 @@
subscription.days_until_due = 10
subscription.start = add_months(nowdate(), -1)
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(len(subscription.invoices), 1)
self.assertEqual(subscription.status, 'Active')
subscription.delete()
- def test_subcription_is_past_due_doesnt_change_within_grace_period(self):
+ def test_subscription_is_past_due_doesnt_change_within_grace_period(self):
settings = frappe.get_single('Subscription Settings')
grace_period = settings.grace_period
settings.grace_period = 1000
@@ -215,7 +216,7 @@
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.start = '2018-01-01'
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(subscription.status, 'Past Due Date')
@@ -238,20 +239,20 @@
subscription.subscriber = '_Test Customer'
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.save()
- subscription.process() # no changes expected
+ 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
+ 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
+ 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))
@@ -259,7 +260,7 @@
subscription.delete()
- def test_subcription_cancelation(self):
+ def test_subscription_cancelation(self):
subscription = frappe.new_doc('Subscriptions')
subscription.subscriber = '_Test Customer'
subscription.append('plans', {'plan': '_Test Plan Name'})
@@ -270,7 +271,7 @@
subscription.delete()
- def test_subscription_cancelation_invoices(self):
+ def test_subscription_cancellation_invoices(self):
subscription = frappe.new_doc('Subscriptions')
subscription.subscriber = '_Test Customer'
subscription.append('plans', {'plan': '_Test Plan Name'})
@@ -288,16 +289,15 @@
prorate_factor = diff/plan_days
self.assertEqual(
- subscription.get_proration_factor(
- subscription.current_invoice_end,
- subscription.current_invoice_start
- ), prorate_factor)
+ get_prorata_factor(subscription.current_invoice_end, subscription.current_invoice_start),
+ prorate_factor
+ )
self.assertEqual(invoice.grand_total, prorate_factor * 900)
self.assertEqual(subscription.status, 'Canceled')
subscription.delete()
- def test_subscription_cancellation_invoices_with_proration_false(self):
+ def test_subscription_cancellation_invoices_with_prorata_false(self):
settings = frappe.get_single('Subscription Settings')
to_prorate = settings.prorate
settings.prorate = 0
@@ -317,7 +317,7 @@
subscription.delete()
- def test_subscription_cancellation_invoices_with_proration_true(self):
+ def test_subscription_cancellation_invoices_with_prorata_true(self):
settings = frappe.get_single('Subscription Settings')
to_prorate = settings.prorate
settings.prorate = 1
@@ -341,7 +341,7 @@
subscription.delete()
- def test_subcription_cancelation_and_process(self):
+ def test_subcription_cancellation_and_process(self):
settings = frappe.get_single('Subscription Settings')
default_grace_period_action = settings.cancel_after_grace
settings.cancel_after_grace = 1
@@ -386,7 +386,7 @@
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.start = '2018-01-01'
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(subscription.status, 'Past Due Date')
@@ -423,7 +423,7 @@
subscription.append('plans', {'plan': '_Test Plan Name'})
subscription.start = '2018-01-01'
subscription.insert()
- subscription.process() # generate first invoice
+ subscription.process() # generate first invoice
self.assertEqual(subscription.status, 'Past Due Date')