diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.js index 8fac32d95ef..b470051b51d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.js @@ -1,7 +1,7 @@ QUnit.module('Purchase Invoice'); QUnit.test("test purchase invoice", function(assert) { - assert.expect(6); + assert.expect(9); let done = assert.async(); frappe.run_serially([ () => { @@ -39,6 +39,33 @@ QUnit.test("test purchase invoice", function(assert) { assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty"); }, + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user'); + }, + () => frappe.timeout(1), + () => frappe.tests.click_button('Close'), + () => frappe.timeout(0.5), + () => frappe.tests.set_form_values(cur_frm, [{'payment_terms_schedule': ''}]), + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user'); + }, + () => frappe.timeout(1), + () => frappe.tests.click_button('Close'), + () => frappe.timeout(0.5), + () => frappe.tests.set_form_values(cur_frm, [{'payment_schedule': []}]), + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(!cur_dialog, 'Message is not shown'); + }, + () => cur_frm.save(), () => frappe.tests.click_button('Submit'), () => frappe.tests.click_button('Yes'), () => frappe.timeout(1), diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.js index 0c92c3739ad..1c052bd3fc9 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.js @@ -1,7 +1,7 @@ QUnit.module('Sales Invoice'); QUnit.test("test sales Invoice", function(assert) { - assert.expect(6); + assert.expect(9); let done = assert.async(); frappe.run_serially([ () => { @@ -38,6 +38,33 @@ QUnit.test("test sales Invoice", function(assert) { assert.ok(cur_frm.doc.payment_schedule.length > 0, "Payment Term Schedule is not empty"); }, + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user'); + }, + () => frappe.timeout(1), + () => frappe.tests.click_button('Close'), + () => frappe.timeout(0.5), + () => frappe.tests.set_form_values(cur_frm, [{'payment_terms_schedule': ''}]), + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(cur_dialog && cur_dialog.is_visible, 'Message is displayed to user'); + }, + () => frappe.timeout(1), + () => frappe.tests.click_button('Close'), + () => frappe.timeout(0.5), + () => frappe.tests.set_form_values(cur_frm, [{'payment_schedule': []}]), + () => { + let date = cur_frm.doc.due_date; + frappe.tests.set_control('due_date', frappe.datetime.add_days(date, 1)); + frappe.timeout(0.5); + assert.ok(!cur_dialog, 'Message is not shown'); + }, + () => cur_frm.save(), () => frappe.tests.click_button('Submit'), () => frappe.tests.click_button('Yes'), () => frappe.timeout(0.3), diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 503f1526ede..b7ad8669826 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -228,7 +228,6 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ erpnext.hide_company(); this.set_dynamic_labels(); this.setup_sms(); - }, apply_default_taxes: function() { @@ -535,6 +534,32 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ } }, + due_date: function() { + // due_date is to be changed, payment terms template and/or payment schedule must + // be removed as due_date is automatically changed based on payment terms + if (this.frm.doc.due_date) { + if (this.frm.doc.payment_terms_template || this.frm.doc.payment_schedule.length) { + var message1 = ""; + var message2 = ""; + var final_message = "Please clear the "; + + if (this.frm.doc.payment_terms_template) { + message1 = "selected Payment Terms Template"; + final_message = final_message + message1; + } + + if (this.frm.doc.payment_schedule.length) { + message2 = "Payment Schedule Table"; + if (message1.length !== 0) message2 = " and " + message2; + final_message = final_message + message2; + } + + frappe.msgprint(final_message); + } + + } + }, + recalculate_terms: function() { const doc = this.frm.doc; @@ -542,7 +567,6 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ this.payment_terms_template(); } else if (doc.payment_schedule) { const me = this; - doc.payment_schedule.forEach( function(term) { if (term.payment_term) {