From bfc7c6b10c4dd234f9534e6de5089a4bcbb8cc6b Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 21 Jun 2021 14:42:19 +0530 Subject: [PATCH 1/7] fix: datetime field form validation fix --- frappe/public/js/frappe/form/controls/base_control.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/base_control.js b/frappe/public/js/frappe/form/controls/base_control.js index d6c268a28a..ee40bbe43d 100644 --- a/frappe/public/js/frappe/form/controls/base_control.js +++ b/frappe/public/js/frappe/form/controls/base_control.js @@ -160,7 +160,13 @@ frappe.ui.form.Control = class BaseControl { validate_and_set_in_model(value, e) { var me = this; let force_value_set = (this.doc && this.doc.__run_link_triggers); - let is_value_same = (this.get_model_value() === value); + let model_value = this.get_model_value(); + + if (this.df && this.df.fieldtype == 'Datetime') { + model_value = frappe.datetime.get_datetime_as_string(model_value); + } + + let is_value_same = (model_value === value); if (this.inside_change_event || (!force_value_set && is_value_same)) { return Promise.resolve(); From 75cb917a7beee86d1d22a100f083a77b6f7ba925 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 13 Jul 2021 21:31:03 +0530 Subject: [PATCH 2/7] test: UI test for datetime field form validation --- .../datetime_field_form_validation.js | 18 ++++++++++++++++++ frappe/tests/ui_test_helpers.py | 12 ++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 cypress/integration/datetime_field_form_validation.js diff --git a/cypress/integration/datetime_field_form_validation.js b/cypress/integration/datetime_field_form_validation.js new file mode 100644 index 0000000000..6a6ea4c7af --- /dev/null +++ b/cypress/integration/datetime_field_form_validation.js @@ -0,0 +1,18 @@ +context('Datetime Validation', () => { + before(() => { + cy.login(); + cy.visit('/app/communication'); + cy.window().its('frappe').then(frappe => { + frappe.call("frappe.tests.ui_test_helpers.create_communication_records"); + }); + }); + + it('datetime field form validation', () => { + cy.visit('/app/communication'); + cy.get('a[title="Test Form Communication 1"]').invoke('attr', 'data-name') + .then((name) => { + cy.visit(`/app/communication/${name}`); + cy.get('.indicator-pill').should('contain', 'Open').should('have.class', 'red'); + }) + }); +}); \ No newline at end of file diff --git a/frappe/tests/ui_test_helpers.py b/frappe/tests/ui_test_helpers.py index f56311b2e3..f4a6f474ce 100644 --- a/frappe/tests/ui_test_helpers.py +++ b/frappe/tests/ui_test_helpers.py @@ -60,6 +60,18 @@ def create_todo_records(): "description": "this is fourth todo" }).insert() +@frappe.whitelist() +def create_communication_records(): + if frappe.db.get_all('Communication', {'subject': 'Test Form Communication 1'}): + return + + frappe.get_doc({ + "doctype": "Communication", + "recipients": "test@gmail.com", + "subject": "Test Form Communication 1", + "communication_date": frappe.utils.now_datetime(), + }).insert() + @frappe.whitelist() def setup_workflow(): from frappe.workflow.doctype.workflow.test_workflow import create_todo_workflow From 98f33b59811f2cdcf9b66f1736e5bedfb77735cc Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 13 Jul 2021 21:56:57 +0530 Subject: [PATCH 3/7] fix: sider fix --- cypress/integration/datetime_field_form_validation.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cypress/integration/datetime_field_form_validation.js b/cypress/integration/datetime_field_form_validation.js index 6a6ea4c7af..dff1f0562c 100644 --- a/cypress/integration/datetime_field_form_validation.js +++ b/cypress/integration/datetime_field_form_validation.js @@ -10,9 +10,9 @@ context('Datetime Validation', () => { it('datetime field form validation', () => { cy.visit('/app/communication'); cy.get('a[title="Test Form Communication 1"]').invoke('attr', 'data-name') - .then((name) => { - cy.visit(`/app/communication/${name}`); - cy.get('.indicator-pill').should('contain', 'Open').should('have.class', 'red'); - }) + .then((name) => { + cy.visit(`/app/communication/${name}`); + cy.get('.indicator-pill').should('contain', 'Open').should('have.class', 'red'); + }); }); }); \ No newline at end of file From e3a1f6f1d09c4973a20c6a562697cb850cb3bc03 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Wed, 14 Jul 2021 13:25:17 +0530 Subject: [PATCH 4/7] chore: Added comment --- cypress/integration/datetime_field_form_validation.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cypress/integration/datetime_field_form_validation.js b/cypress/integration/datetime_field_form_validation.js index dff1f0562c..66fdde6863 100644 --- a/cypress/integration/datetime_field_form_validation.js +++ b/cypress/integration/datetime_field_form_validation.js @@ -1,4 +1,4 @@ -context('Datetime Validation', () => { +context('Datetime Field Validation', () => { before(() => { cy.login(); cy.visit('/app/communication'); @@ -7,6 +7,7 @@ context('Datetime Validation', () => { }); }); + // validating datetime field value when value is set from backend and get validated on form load. it('datetime field form validation', () => { cy.visit('/app/communication'); cy.get('a[title="Test Form Communication 1"]').invoke('attr', 'data-name') From d014084ae5f3b2d97a4ae9c3ff7f1f41f9bd7732 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 2 Aug 2021 20:23:44 +0530 Subject: [PATCH 5/7] fix: moved datetime logic to datetime.js --- frappe/public/js/frappe/form/controls/base_control.js | 4 +--- frappe/public/js/frappe/form/controls/datetime.js | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/form/controls/base_control.js b/frappe/public/js/frappe/form/controls/base_control.js index ee40bbe43d..7977458ad7 100644 --- a/frappe/public/js/frappe/form/controls/base_control.js +++ b/frappe/public/js/frappe/form/controls/base_control.js @@ -162,9 +162,7 @@ frappe.ui.form.Control = class BaseControl { let force_value_set = (this.doc && this.doc.__run_link_triggers); let model_value = this.get_model_value(); - if (this.df && this.df.fieldtype == 'Datetime') { - model_value = frappe.datetime.get_datetime_as_string(model_value); - } + model_value = this.parse_model_value && this.parse_model_value(model_value); let is_value_same = (model_value === value); diff --git a/frappe/public/js/frappe/form/controls/datetime.js b/frappe/public/js/frappe/form/controls/datetime.js index 341a933066..7a3cef2304 100644 --- a/frappe/public/js/frappe/form/controls/datetime.js +++ b/frappe/public/js/frappe/form/controls/datetime.js @@ -36,4 +36,8 @@ frappe.ui.form.ControlDatetime = class ControlDatetime extends frappe.ui.form.Co $tp.$secondsText.prev().css('display', 'none'); } } + + parse_model_value(value) { + return frappe.datetime.get_datetime_as_string(value); + } }; From ed99915a7909e0cb53d910409531fbc13a9a1ce7 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 10 Aug 2021 11:20:23 +0530 Subject: [PATCH 6/7] refactor: Refactored code --- frappe/public/js/frappe/form/controls/base_control.js | 6 +----- frappe/public/js/frappe/form/controls/datetime.js | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/form/controls/base_control.js b/frappe/public/js/frappe/form/controls/base_control.js index 7977458ad7..d6c268a28a 100644 --- a/frappe/public/js/frappe/form/controls/base_control.js +++ b/frappe/public/js/frappe/form/controls/base_control.js @@ -160,11 +160,7 @@ frappe.ui.form.Control = class BaseControl { validate_and_set_in_model(value, e) { var me = this; let force_value_set = (this.doc && this.doc.__run_link_triggers); - let model_value = this.get_model_value(); - - model_value = this.parse_model_value && this.parse_model_value(model_value); - - let is_value_same = (model_value === value); + let is_value_same = (this.get_model_value() === value); if (this.inside_change_event || (!force_value_set && is_value_same)) { return Promise.resolve(); diff --git a/frappe/public/js/frappe/form/controls/datetime.js b/frappe/public/js/frappe/form/controls/datetime.js index 7a3cef2304..3fb00a6f26 100644 --- a/frappe/public/js/frappe/form/controls/datetime.js +++ b/frappe/public/js/frappe/form/controls/datetime.js @@ -37,7 +37,8 @@ frappe.ui.form.ControlDatetime = class ControlDatetime extends frappe.ui.form.Co } } - parse_model_value(value) { + get_model_value() { + let value = super.get_model_value() return frappe.datetime.get_datetime_as_string(value); } }; From 9da6fcadc8b1062afd14d4c6943a8f1a2d07e7eb Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 10 Aug 2021 11:31:16 +0530 Subject: [PATCH 7/7] fix: sider fix --- frappe/public/js/frappe/form/controls/datetime.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/datetime.js b/frappe/public/js/frappe/form/controls/datetime.js index 3fb00a6f26..f7a2798a99 100644 --- a/frappe/public/js/frappe/form/controls/datetime.js +++ b/frappe/public/js/frappe/form/controls/datetime.js @@ -38,7 +38,7 @@ frappe.ui.form.ControlDatetime = class ControlDatetime extends frappe.ui.form.Co } get_model_value() { - let value = super.get_model_value() + let value = super.get_model_value(); return frappe.datetime.get_datetime_as_string(value); } };