From 5861c7bd4229603e60e9da820d01ede05bc86ff4 Mon Sep 17 00:00:00 2001 From: Montana Date: Wed, 9 Jan 2019 14:40:46 -0500 Subject: [PATCH 1/6] Ensure otherText is set as it is typed --- templates/components/multi_checkbox_input.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/components/multi_checkbox_input.html b/templates/components/multi_checkbox_input.html index ec8f666a..99235e21 100644 --- a/templates/components/multi_checkbox_input.html +++ b/templates/components/multi_checkbox_input.html @@ -39,7 +39,7 @@
- +
{% endif %} From a032800ed1ee8bab668774b7ee0ff8200cc083b1 Mon Sep 17 00:00:00 2001 From: Montana Date: Wed, 9 Jan 2019 14:45:37 -0500 Subject: [PATCH 2/6] Only persist otherText if the page has not been submitted --- js/components/multi_checkbox_input.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/components/multi_checkbox_input.js b/js/components/multi_checkbox_input.js index 6ab3e050..c5fc86e1 100644 --- a/js/components/multi_checkbox_input.js +++ b/js/components/multi_checkbox_input.js @@ -30,7 +30,7 @@ export default { showValid: !showError && this.initialValue.length > 0, validationError: this.initialErrors.join(' '), otherChecked: this.initialValue.includes("other") ? true : this.otherChecked, - otherText: this.initialOtherValue, + otherText: this.initialValue.includes("other") ? this.initialOtherValue : '', selections: this.initialValue } }, @@ -46,7 +46,6 @@ export default { }, otherToggle: function() { this.otherChecked = !this.otherChecked - this.otherText = '' }, } } From e53e00397cdbb953e2349c7e786769e3f0c2c2c4 Mon Sep 17 00:00:00 2001 From: Montana Date: Thu, 10 Jan 2019 11:00:42 -0500 Subject: [PATCH 3/6] Only save other text to DB if other is checked --- atst/routes/task_orders/new.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 4e777e41..5cc7a5a3 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -62,6 +62,21 @@ class ShowTaskOrderWorkflow: return self._task_order + @property + def task_order_formdata(self): + task_order_dict = self.task_order.to_dictionary() + for field in task_order_dict: + if task_order_dict[field] is None: + task_order_dict[field] = "" + + # don't save other text in DB unless "other" is checked + if 'other' not in task_order_dict['complexity']: + task_order_dict['complexity_other'] = "" + if 'other' not in task_order_dict['dev_team']: + task_order_dict['dev_team_other'] = "" + + return task_order_dict + @property def form(self): form_type = ( From 3765bbea121375f01e7801268156f764cdc93ef5 Mon Sep 17 00:00:00 2001 From: Montana Date: Thu, 10 Jan 2019 13:47:01 -0500 Subject: [PATCH 4/6] Allow users to update TO information after it has been saved in the DB --- atst/routes/task_orders/new.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 5cc7a5a3..1a7ae25a 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -70,10 +70,10 @@ class ShowTaskOrderWorkflow: task_order_dict[field] = "" # don't save other text in DB unless "other" is checked - if 'other' not in task_order_dict['complexity']: - task_order_dict['complexity_other'] = "" - if 'other' not in task_order_dict['dev_team']: - task_order_dict['dev_team_other'] = "" + if "other" not in task_order_dict["complexity"]: + task_order_dict["complexity_other"] = "" + if "other" not in task_order_dict["dev_team"]: + task_order_dict["dev_team_other"] = "" return task_order_dict @@ -133,18 +133,28 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): if self.task_order: return self.task_order.portfolio + @property + def task_order_form_data(self): + to_data = self.form.data.copy() + if "portfolio_name" in to_data: + new_name = self.form.data["portfolio_name"] + old_name = self.task_order.to_dictionary()["portfolio_name"] + if not new_name is old_name: + Portfolios.update(self.task_order.portfolio, {"name": new_name}) + to_data.pop("portfolio_name") + + return to_data + def validate(self): return self.form.validate() def _update_task_order(self): if self.task_order: - TaskOrders.update(self.user, self.task_order, **self.form.data) + TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) else: - ws = Portfolios.create(self.user, self.form.portfolio_name.data) - to_data = self.form.data.copy() - to_data.pop("portfolio_name") - self._task_order = TaskOrders.create(self.user, ws) - TaskOrders.update(self.user, self.task_order, **to_data) + pf = Portfolios.create(self.user, self.form.portfolio_name.data) + self._task_order = TaskOrders.create(portfolio=pf, creator=self.user) + TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) OFFICER_INVITATIONS = [ { @@ -192,10 +202,10 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): officer = TaskOrders.add_officer( self.user, self.task_order, officer_type["role"], officer_data ) - ws_officer_member = PortfolioRoles.get(self.portfolio.id, officer.id) + pf_officer_member = PortfolioRoles.get(self.portfolio.id, officer.id) invite_service = InvitationService( self.user, - ws_officer_member, + pf_officer_member, officer_data["email"], subject=officer_type["subject"], email_template=officer_type["template"], From 804ddc4db503bc065398d00c8b90972c76ca5c35 Mon Sep 17 00:00:00 2001 From: Montana Date: Fri, 11 Jan 2019 12:27:24 -0500 Subject: [PATCH 5/6] Allow user to rename task order and do no push othertext to DB --- atst/routes/task_orders/new.py | 30 +++++++------------ .../routes/task_orders/test_new_task_order.py | 12 ++++++++ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 1a7ae25a..8835e7c5 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -62,21 +62,6 @@ class ShowTaskOrderWorkflow: return self._task_order - @property - def task_order_formdata(self): - task_order_dict = self.task_order.to_dictionary() - for field in task_order_dict: - if task_order_dict[field] is None: - task_order_dict[field] = "" - - # don't save other text in DB unless "other" is checked - if "other" not in task_order_dict["complexity"]: - task_order_dict["complexity_other"] = "" - if "other" not in task_order_dict["dev_team"]: - task_order_dict["dev_team_other"] = "" - - return task_order_dict - @property def form(self): form_type = ( @@ -137,12 +122,14 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): def task_order_form_data(self): to_data = self.form.data.copy() if "portfolio_name" in to_data: - new_name = self.form.data["portfolio_name"] - old_name = self.task_order.to_dictionary()["portfolio_name"] - if not new_name is old_name: - Portfolios.update(self.task_order.portfolio, {"name": new_name}) to_data.pop("portfolio_name") + # don't save other text in DB unless "other" is checked + if "complexity" in to_data and "other" not in to_data["complexity"]: + to_data["complexity_other"] = "" + if "dev_team" in to_data and "other" not in to_data["dev_team"]: + to_data["dev_team_other"] = "" + return to_data def validate(self): @@ -150,6 +137,11 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): def _update_task_order(self): if self.task_order: + if "portfolio_name" in self.form.data: + new_name = self.form.data["portfolio_name"] + old_name = self.task_order.to_dictionary()["portfolio_name"] + if not new_name is old_name: + Portfolios.update(self.task_order.portfolio, {"name": new_name}) TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) else: pf = Portfolios.create(self.user, self.form.portfolio_name.data) diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index d1ab2e81..77ed8dc5 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -162,6 +162,18 @@ def test_update_task_order_with_existing_task_order(task_order): assert workflow.task_order.start_date.strftime("%m/%d/%Y") == to_data["start_date"] +def test_other_text_not_saved_if_other_not_checked(task_order): + to_data = { + **TaskOrderFactory.dictionary(), + "complexity": ["conus", "other"], + "complexity_other": "quite complex", + } + workflow = UpdateTaskOrderWorkflow( + task_order.creator, to_data, task_order_id=task_order.id + ) + workflow.update() + + def test_invite_officers_to_task_order(task_order, queue): to_data = { **TaskOrderFactory.dictionary(), From 676c68a2439ca4225e064b5dca3e732674acb793 Mon Sep 17 00:00:00 2001 From: Montana Date: Mon, 14 Jan 2019 11:46:27 -0500 Subject: [PATCH 6/6] fix test, minor python tweaks --- atst/routes/task_orders/new.py | 8 ++++---- tests/routes/task_orders/test_new_task_order.py | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 8835e7c5..fba36ac7 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -126,9 +126,9 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): # don't save other text in DB unless "other" is checked if "complexity" in to_data and "other" not in to_data["complexity"]: - to_data["complexity_other"] = "" + to_data["complexity_other"] = None if "dev_team" in to_data and "other" not in to_data["dev_team"]: - to_data["dev_team_other"] = "" + to_data["dev_team_other"] = None return to_data @@ -139,8 +139,8 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): if self.task_order: if "portfolio_name" in self.form.data: new_name = self.form.data["portfolio_name"] - old_name = self.task_order.to_dictionary()["portfolio_name"] - if not new_name is old_name: + old_name = self.task_order.portfolio_name + if not new_name == old_name: Portfolios.update(self.task_order.portfolio, {"name": new_name}) TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) else: diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index 77ed8dc5..672bace0 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -165,13 +165,14 @@ def test_update_task_order_with_existing_task_order(task_order): def test_other_text_not_saved_if_other_not_checked(task_order): to_data = { **TaskOrderFactory.dictionary(), - "complexity": ["conus", "other"], + "complexity": ["conus"], "complexity_other": "quite complex", } workflow = UpdateTaskOrderWorkflow( task_order.creator, to_data, task_order_id=task_order.id ) workflow.update() + assert not workflow.task_order.complexity_other def test_invite_officers_to_task_order(task_order, queue):