fix bugs: add payment_schedule if payment_terms_schedule specified

This commit is contained in:
tunde 2017-09-11 11:02:57 +01:00
parent 96b8f223fd
commit df3a175974
4 changed files with 30 additions and 18 deletions

View File

@ -85,14 +85,12 @@ class TestPurchaseOrder(unittest.TestCase):
self.assertEquals(len(pi.get("items", [])), 1)
def test_make_purchase_invoice_with_terms(self):
po = create_purchase_order(do_not_submit=True)
po = create_purchase_order(do_not_save=True)
self.assertRaises(frappe.ValidationError, make_purchase_invoice, po.name)
po.update(
{"payment_schedule": get_payment_terms(
"_Test Payment Term Template", po.transaction_date, po.grand_total
)}
{"payment_terms_template": "_Test Payment Term Template"}
)
po.save()
@ -103,14 +101,15 @@ class TestPurchaseOrder(unittest.TestCase):
self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(po.payment_schedule[1].due_date, add_days(po.transaction_date, 30))
pi = make_purchase_invoice(po.name)
pi.save()
self.assertEquals(pi.doctype, "Purchase Invoice")
self.assertEquals(len(pi.get("items", [])), 1)
self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0)
self.assertEqual(pi.payment_schedule[0].due_date.strftime(DATE_FORMAT), po.transaction_date)
self.assertEqual(pi.payment_schedule[0].due_date, po.transaction_date)
self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(pi.payment_schedule[1].due_date.strftime(DATE_FORMAT), add_days(po.transaction_date, 30))
self.assertEqual(pi.payment_schedule[1].due_date, add_days(po.transaction_date, 30))
def test_subcontracting(self):
po = create_purchase_order(item_code="_Test FG Item", is_subcontracted="Yes")

View File

@ -26,7 +26,9 @@ class AccountsController(TransactionBase):
return self.__company_currency
def onload(self):
print("onload called:", self.get("__onload"))
self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
self.set_payment_schedule()
def validate(self):
if self.get("_action") and self._action != "update_after_submit":
@ -51,6 +53,8 @@ class AccountsController(TransactionBase):
self.set_due_date()
self.validate_due_date()
self.validate_advance_entries()
elif self.doctype in ("Quotation", "Purchase Order", "Sales Order"):
self.set_payment_schedule()
if self.meta.get_field("taxes_and_charges"):
self.validate_enabled_taxes_and_charges()
@ -608,13 +612,15 @@ class AccountsController(TransactionBase):
self.remove(item)
def set_payment_schedule(self):
due_date = self.due_date or get_due_date(self.posting_date)
posting_date = self.get("posting_date") or self.get("transaction_date")
date = self.get("due_date")
due_date = date or posting_date
if self.get("payment_terms_template"):
data = get_payment_terms(self.payment_terms_template, self.posting_date, self.grand_total)
if self.get("payment_terms_template") and not self.get("payment_schedule"):
data = get_payment_terms(self.payment_terms_template, posting_date, self.grand_total)
for item in data:
self.append("payment_schedule", item)
else:
elif not self.get("payment_schedule"):
data = dict(due_date=due_date, invoice_portion=100, payment_amount=self.grand_total)
self.append("payment_schedule", data)

View File

@ -123,6 +123,11 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
}
}
if(this.frm.fields_dict["payment_terms_template"]){
console.log("triggered");
this.frm.trigger("payment_terms_template");
}
if(this.frm.fields_dict["taxes"]) {
this["taxes_remove"] = this.calculate_taxes_and_totals;
}

View File

@ -40,16 +40,15 @@ class TestQuotation(unittest.TestCase):
quotation = frappe.copy_doc(test_records[0])
quotation.transaction_date = nowdate()
quotation.valid_till = add_months(quotation.transaction_date, 1)
quotation.insert()
quotation.update(
{"payment_schedule": get_payment_terms(
"_Test Payment Term Template", quotation.transaction_date, quotation.grand_total
)}
{"payment_terms_template": "_Test Payment Term Template"}
)
quotation.insert()
self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name)
quotation.save()
quotation.submit()
self.assertEqual(quotation.payment_schedule[0].payment_amount, 8906.25)
self.assertEqual(quotation.payment_schedule[0].due_date, quotation.transaction_date)
self.assertEqual(quotation.payment_schedule[1].payment_amount, 8906.25)
@ -62,16 +61,19 @@ class TestQuotation(unittest.TestCase):
self.assertEquals(sales_order.get("items")[0].doctype, "Sales Order Item")
self.assertEquals(sales_order.get("items")[0].prevdoc_docname, quotation.name)
self.assertEquals(sales_order.customer, "_Test Customer")
self.assertEqual(sales_order.payment_schedule[0].payment_amount, 8906.25)
self.assertEqual(sales_order.payment_schedule[0].due_date.strftime(DATE_FORMAT), quotation.transaction_date)
self.assertEqual(sales_order.payment_schedule[1].payment_amount, 8906.25)
self.assertEqual(sales_order.payment_schedule[1].due_date.strftime(DATE_FORMAT), add_days(quotation.transaction_date, 30))
sales_order.delivery_date = "2014-01-01"
sales_order.naming_series = "_T-Quotation-"
sales_order.transaction_date = nowdate()
sales_order.insert()
self.assertEqual(sales_order.payment_schedule[0].payment_amount, 8906.25)
self.assertEqual(sales_order.payment_schedule[0].due_date, quotation.transaction_date)
self.assertEqual(sales_order.payment_schedule[1].payment_amount, 8906.25)
self.assertEqual(
sales_order.payment_schedule[1].due_date, add_days(quotation.transaction_date, 30)
)
def test_valid_till(self):
from erpnext.selling.doctype.quotation.quotation import make_sales_order