Merge pull request #2193 from anandpdoshi/anand-september-15
Recurring fix, cherry-picked nabin's address template fix
This commit is contained in:
commit
93c2adb2cd
@ -169,15 +169,13 @@ class Account(Document):
|
|||||||
|
|
||||||
def validate_due_date(self, posting_date, due_date):
|
def validate_due_date(self, posting_date, due_date):
|
||||||
credit_days = (self.credit_days or frappe.db.get_value("Company", self.company, "credit_days"))
|
credit_days = (self.credit_days or frappe.db.get_value("Company", self.company, "credit_days"))
|
||||||
if credit_days is None:
|
|
||||||
return
|
|
||||||
|
|
||||||
posting_date, due_date = getdate(posting_date), getdate(due_date)
|
posting_date, due_date = getdate(posting_date), getdate(due_date)
|
||||||
diff = (due_date - posting_date).days
|
diff = (due_date - posting_date).days
|
||||||
|
|
||||||
if diff < 0:
|
if diff < 0:
|
||||||
frappe.throw(_("Due Date cannot be before Posting Date"))
|
frappe.throw(_("Due Date cannot be before Posting Date"))
|
||||||
elif diff > credit_days:
|
|
||||||
|
elif credit_days is not None and diff > credit_days:
|
||||||
is_credit_controller = frappe.db.get_value("Accounts Settings", None,
|
is_credit_controller = frappe.db.get_value("Accounts Settings", None,
|
||||||
"credit_controller") in frappe.user.get_roles()
|
"credit_controller") in frappe.user.get_roles()
|
||||||
|
|
||||||
|
@ -71,7 +71,9 @@ class SalesInvoice(SellingController):
|
|||||||
self.is_opening = 'No'
|
self.is_opening = 'No'
|
||||||
|
|
||||||
self.set_aging_date()
|
self.set_aging_date()
|
||||||
|
|
||||||
frappe.get_doc("Account", self.debit_to).validate_due_date(self.posting_date, self.due_date)
|
frappe.get_doc("Account", self.debit_to).validate_due_date(self.posting_date, self.due_date)
|
||||||
|
|
||||||
self.set_against_income_account()
|
self.set_against_income_account()
|
||||||
self.validate_c_form()
|
self.validate_c_form()
|
||||||
self.validate_time_logs_are_submitted()
|
self.validate_time_logs_are_submitted()
|
||||||
@ -147,6 +149,10 @@ class SalesInvoice(SellingController):
|
|||||||
validate_recurring_document(self)
|
validate_recurring_document(self)
|
||||||
convert_to_recurring(self, "RECINV.#####", self.posting_date)
|
convert_to_recurring(self, "RECINV.#####", self.posting_date)
|
||||||
|
|
||||||
|
def before_recurring(self):
|
||||||
|
self.aging_date = None
|
||||||
|
self.due_date = None
|
||||||
|
|
||||||
def get_portal_page(self):
|
def get_portal_page(self):
|
||||||
return "invoice" if self.docstatus==1 else None
|
return "invoice" if self.docstatus==1 else None
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@ def manage_recurring_documents(doctype, next_date=None, commit=True):
|
|||||||
% (doctype, date_field, '%s', '%s'), (next_date, recurring_id)):
|
% (doctype, date_field, '%s', '%s'), (next_date, recurring_id)):
|
||||||
try:
|
try:
|
||||||
ref_wrapper = frappe.get_doc(doctype, ref_document)
|
ref_wrapper = frappe.get_doc(doctype, ref_document)
|
||||||
|
if hasattr(ref_wrapper, "before_recurring"):
|
||||||
|
ref_wrapper.before_recurring()
|
||||||
|
|
||||||
new_document_wrapper = make_new_document(ref_wrapper, date_field, next_date)
|
new_document_wrapper = make_new_document(ref_wrapper, date_field, next_date)
|
||||||
send_notification(new_document_wrapper)
|
send_notification(new_document_wrapper)
|
||||||
if commit:
|
if commit:
|
||||||
|
@ -8,15 +8,15 @@ from frappe import _
|
|||||||
|
|
||||||
class AddressTemplate(Document):
|
class AddressTemplate(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
defaults = frappe.db.get_values("Address Template",
|
self.defaults = frappe.db.get_values("Address Template", {"is_default":1, "name":("!=", self.name)})
|
||||||
{"is_default":1, "name":("!=", self.name)})
|
|
||||||
if not self.is_default:
|
if not self.is_default:
|
||||||
if not defaults:
|
if not self.defaults:
|
||||||
self.is_default = 1
|
self.is_default = 1
|
||||||
frappe.msgprint(_("Setting this Address Template as default as there is no other default"))
|
frappe.msgprint(_("Setting this Address Template as default as there is no other default"))
|
||||||
else:
|
|
||||||
if defaults:
|
def on_update(self):
|
||||||
for d in defaults:
|
if self.is_default and self.defaults:
|
||||||
|
for d in self.defaults:
|
||||||
frappe.db.set_value("Address Template", d[0], "is_default", 0)
|
frappe.db.set_value("Address Template", d[0], "is_default", 0)
|
||||||
|
|
||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
|
@ -20,3 +20,8 @@ class TestAddressTemplate(unittest.TestCase):
|
|||||||
b.save()
|
b.save()
|
||||||
|
|
||||||
self.assertEqual(frappe.db.get_value("Address Template", "India", "is_default"), 0)
|
self.assertEqual(frappe.db.get_value("Address Template", "India", "is_default"), 0)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
a = frappe.get_doc("Address Template", "India")
|
||||||
|
a.is_default = 1
|
||||||
|
a.save()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user