Multiple fixes related to payment terms (#12115)
This commit is contained in:
@@ -67,7 +67,7 @@
|
|||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 0,
|
"reqd": 0,
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 1,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 1,
|
||||||
@@ -179,8 +179,8 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-11-23 12:39:02.013040",
|
"modified": "2017-12-19 16:20:33.546984",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "nabinhait@gmail.com",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Payment Schedule",
|
"name": "Payment Schedule",
|
||||||
"name_case": "",
|
"name_case": "",
|
||||||
|
|||||||
@@ -192,7 +192,7 @@
|
|||||||
"oldfieldname": "due_date",
|
"oldfieldname": "due_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print_hide": 1,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -3117,7 +3117,7 @@
|
|||||||
"options": "Payment Schedule",
|
"options": "Payment Schedule",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -3914,7 +3914,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2017-12-15 17:49:51.230092",
|
"modified": "2017-12-20 17:49:51.230092",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice",
|
"name": "Purchase Invoice",
|
||||||
|
|||||||
@@ -503,7 +503,7 @@
|
|||||||
"oldfieldname": "due_date",
|
"oldfieldname": "due_date",
|
||||||
"oldfieldtype": "Date",
|
"oldfieldtype": "Date",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"print_hide": 1,
|
"print_hide": 0,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -2864,7 +2864,7 @@
|
|||||||
"options": "Payment Schedule",
|
"options": "Payment Schedule",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -4563,7 +4563,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2017-11-29 17:36:05.216046",
|
"modified": "2017-12-20 17:36:05.216046",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice",
|
"name": "Sales Invoice",
|
||||||
|
|||||||
@@ -193,7 +193,7 @@
|
|||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
"report_hide": 0,
|
"report_hide": 0,
|
||||||
"reqd": 1,
|
"reqd": 0,
|
||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
@@ -1221,7 +1221,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-12-08 12:58:44.137460",
|
"modified": "2017-12-19 12:58:44.137460",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset",
|
"name": "Asset",
|
||||||
|
|||||||
@@ -2552,7 +2552,7 @@
|
|||||||
"options": "Payment Schedule",
|
"options": "Payment Schedule",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -3261,8 +3261,8 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-11-29 14:06:33.636401",
|
"modified": "2017-12-19 14:53:03.986840",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "nabinhait@gmail.com",
|
||||||
"module": "Buying",
|
"module": "Buying",
|
||||||
"name": "Purchase Order",
|
"name": "Purchase Order",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
|||||||
@@ -64,16 +64,14 @@ class AccountsController(TransactionBase):
|
|||||||
def validate_invoice_documents_schedule(self):
|
def validate_invoice_documents_schedule(self):
|
||||||
self.validate_payment_schedule_dates()
|
self.validate_payment_schedule_dates()
|
||||||
self.set_due_date()
|
self.set_due_date()
|
||||||
self.validate_invoice_portion()
|
|
||||||
self.set_payment_schedule()
|
self.set_payment_schedule()
|
||||||
self.validate_payment_schedule_amount()
|
self.validate_payment_schedule_amount()
|
||||||
self.validate_due_date()
|
self.validate_due_date()
|
||||||
self.validate_advance_entries()
|
self.validate_advance_entries()
|
||||||
|
|
||||||
def validate_non_invoice_documents_schedule(self):
|
def validate_non_invoice_documents_schedule(self):
|
||||||
self.validate_payment_schedule_dates()
|
|
||||||
self.validate_invoice_portion()
|
|
||||||
self.set_payment_schedule()
|
self.set_payment_schedule()
|
||||||
|
self.validate_payment_schedule_dates()
|
||||||
self.validate_payment_schedule_amount()
|
self.validate_payment_schedule_amount()
|
||||||
|
|
||||||
def validate_all_documents_schedule(self):
|
def validate_all_documents_schedule(self):
|
||||||
@@ -652,6 +650,8 @@ class AccountsController(TransactionBase):
|
|||||||
date = self.get("due_date")
|
date = self.get("due_date")
|
||||||
due_date = date or posting_date
|
due_date = date or posting_date
|
||||||
grand_total = self.get("rounded_total") or self.grand_total
|
grand_total = self.get("rounded_total") or self.grand_total
|
||||||
|
if self.doctype in ("Sales Invoice", "Purchase Invoice"):
|
||||||
|
grand_total = grand_total - flt(self.write_off_amount)
|
||||||
|
|
||||||
if not self.get("payment_schedule"):
|
if not self.get("payment_schedule"):
|
||||||
if self.get("payment_terms_template"):
|
if self.get("payment_terms_template"):
|
||||||
@@ -663,6 +663,7 @@ class AccountsController(TransactionBase):
|
|||||||
self.append("payment_schedule", data)
|
self.append("payment_schedule", data)
|
||||||
else:
|
else:
|
||||||
for d in self.get("payment_schedule"):
|
for d in self.get("payment_schedule"):
|
||||||
|
if d.invoice_portion:
|
||||||
d.payment_amount = grand_total * flt(d.invoice_portion) / 100
|
d.payment_amount = grand_total * flt(d.invoice_portion) / 100
|
||||||
|
|
||||||
def set_due_date(self):
|
def set_due_date(self):
|
||||||
@@ -673,12 +674,9 @@ class AccountsController(TransactionBase):
|
|||||||
def validate_payment_schedule_dates(self):
|
def validate_payment_schedule_dates(self):
|
||||||
dates = []
|
dates = []
|
||||||
li = []
|
li = []
|
||||||
if self.get('posting_date'):
|
|
||||||
if self.due_date and getdate(self.due_date) < getdate(self.posting_date):
|
|
||||||
frappe.throw(_("Due Date cannot be before posting date"))
|
|
||||||
|
|
||||||
for d in self.get("payment_schedule"):
|
for d in self.get("payment_schedule"):
|
||||||
if self.get('posting_date') and getdate(d.due_date) < getdate(self.posting_date):
|
if self.doctype == "Sales Order" and getdate(d.due_date) < getdate(self.transaction_date):
|
||||||
frappe.throw(_("Row {0}: Due Date cannot be before posting date").format(d.idx))
|
frappe.throw(_("Row {0}: Due Date cannot be before posting date").format(d.idx))
|
||||||
elif d.due_date in dates:
|
elif d.due_date in dates:
|
||||||
li.append('{0} in row {1}'.format(d.due_date, d.idx))
|
li.append('{0} in row {1}'.format(d.due_date, d.idx))
|
||||||
@@ -700,15 +698,6 @@ class AccountsController(TransactionBase):
|
|||||||
if total != grand_total:
|
if total != grand_total:
|
||||||
frappe.throw(_("Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total"))
|
frappe.throw(_("Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total"))
|
||||||
|
|
||||||
def validate_invoice_portion(self):
|
|
||||||
if self.get("payment_schedule"):
|
|
||||||
total_portion = 0
|
|
||||||
for term in self.payment_schedule:
|
|
||||||
total_portion += flt(term.get('invoice_portion', 0))
|
|
||||||
|
|
||||||
if flt(total_portion, 2) != 100.00:
|
|
||||||
frappe.msgprint(_('Combined invoice portion must equal 100%'), indicator='red', raise_exception=1)
|
|
||||||
|
|
||||||
def is_rounded_total_disabled(self):
|
def is_rounded_total_disabled(self):
|
||||||
if self.meta.get_field("disable_rounded_total"):
|
if self.meta.get_field("disable_rounded_total"):
|
||||||
return self.disable_rounded_total
|
return self.disable_rounded_total
|
||||||
|
|||||||
@@ -2266,7 +2266,7 @@
|
|||||||
"options": "Payment Schedule",
|
"options": "Payment Schedule",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -2881,8 +2881,8 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 1,
|
"max_attachments": 1,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2017-11-29 14:10:44.067669",
|
"modified": "2017-12-19 14:52:28.966139",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "nabinhait@gmail.com",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Quotation",
|
"name": "Quotation",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
|||||||
@@ -2445,7 +2445,7 @@
|
|||||||
"options": "Payment Schedule",
|
"options": "Payment Schedule",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"precision": "",
|
"precision": "",
|
||||||
"print_hide": 0,
|
"print_hide": 1,
|
||||||
"print_hide_if_no_value": 0,
|
"print_hide_if_no_value": 0,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"remember_last_selected_value": 0,
|
"remember_last_selected_value": 0,
|
||||||
@@ -3529,8 +3529,8 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-11-29 13:43:33.076893",
|
"modified": "2017-12-19 14:51:52.710612",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "nabinhait@gmail.com",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Sales Order",
|
"name": "Sales Order",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
|||||||
@@ -539,8 +539,8 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-11-13 03:56:09.885801",
|
"modified": "2017-12-19 12:00:49.226226",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "nabinhait@gmail.com",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Delivery Trip",
|
"name": "Delivery Trip",
|
||||||
"name_case": "",
|
"name_case": "",
|
||||||
@@ -565,6 +565,26 @@
|
|||||||
"share": 1,
|
"share": 1,
|
||||||
"submit": 1,
|
"submit": 1,
|
||||||
"write": 1
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"amend": 1,
|
||||||
|
"apply_user_permissions": 0,
|
||||||
|
"cancel": 1,
|
||||||
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"if_owner": 0,
|
||||||
|
"import": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1,
|
||||||
|
"role": "Stock User",
|
||||||
|
"set_user_permissions": 0,
|
||||||
|
"share": 1,
|
||||||
|
"submit": 1,
|
||||||
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"quick_entry": 0,
|
"quick_entry": 0,
|
||||||
|
|||||||
@@ -496,10 +496,10 @@ class TestStockEntry(unittest.TestCase):
|
|||||||
frappe.get_doc("User", "test2@example.com")\
|
frappe.get_doc("User", "test2@example.com")\
|
||||||
.add_roles("Sales User", "Sales Manager", "Stock User", "Stock Manager")
|
.add_roles("Sales User", "Sales Manager", "Stock User", "Stock Manager")
|
||||||
|
|
||||||
frappe.set_user("test@example.com")
|
|
||||||
st1 = frappe.copy_doc(test_records[0])
|
st1 = frappe.copy_doc(test_records[0])
|
||||||
st1.company = "_Test Company 1"
|
st1.company = "_Test Company 1"
|
||||||
set_perpetual_inventory(0, st1.company)
|
set_perpetual_inventory(0, st1.company)
|
||||||
|
frappe.set_user("test@example.com")
|
||||||
st1.get("items")[0].t_warehouse="_Test Warehouse 2 - _TC1"
|
st1.get("items")[0].t_warehouse="_Test Warehouse 2 - _TC1"
|
||||||
self.assertRaises(frappe.PermissionError, st1.insert)
|
self.assertRaises(frappe.PermissionError, st1.insert)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user