diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index b0dfb586..799fd024 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -50,9 +50,10 @@ class ShowTaskOrderWorkflow: self.user = user self.screen = screen self.task_order_id = task_order_id - self.portfolio_id = portfolio_id - self._section = TASK_ORDER_SECTIONS[screen - 1] self._task_order = None + self.portfolio_id = portfolio_id + self._portfolio = None + self._section = TASK_ORDER_SECTIONS[screen - 1] self._form = None @property @@ -64,9 +65,13 @@ class ShowTaskOrderWorkflow: @property def portfolio(self): - if self.task_order: - return self.task_order.portfolio - return Portfolios.get(self.user, self.portfolio_id) + if not self._portfolio: + if self.task_order: + self._portfolio = self.task_order.portfolio + elif self.portfolio_id: + self._portfolio = Portfolios.get(self.user, self.portfolio_id) + + return self._portfolio @property def form(self): @@ -97,17 +102,13 @@ class ShowTaskOrderWorkflow: else: self._form = self._section[form_type]() - if self.pf_attributes_read_only() and self.screen == 1: + if self.pf_attributes_read_only and self.screen == 1: self._form = task_order_form.AppInfoWithExistingPortfolioForm( obj=self.task_order ) return self._form - @form.setter - def form(self, value): - self._form = value - @property def template(self): return self._section["template"] @@ -126,19 +127,19 @@ class ShowTaskOrderWorkflow: @property def is_complete(self): - if self.task_order: - if TaskOrders.all_sections_complete(self.task_order): - return True + if self.task_order and TaskOrders.all_sections_complete(self.task_order): + return True else: return False + @property def pf_attributes_read_only(self): - if self.task_order: - if self.task_order.portfolio.num_task_orders > 1: - return True + if self.task_order and self.portfolio.num_task_orders > 1: + return True elif self.portfolio_id: return True - return False + else: + return False class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): @@ -152,17 +153,27 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): self.portfolio_id = portfolio_id self._task_order = None self._section = TASK_ORDER_SECTIONS[screen - 1] - form_type = ( - "unclassified_form" - if "unclassified_form" in self._section and not app.config.get("CLASSIFIED") - else "form" - ) - self._form = self._section[form_type](self.form_data, obj=self.task_order) + self._form = None @property def form(self): - if self.pf_attributes_read_only() and self.screen == 1: - return task_order_form.AppInfoWithExistingPortfolioForm(self.form_data) + if not self._form: + form_type = ( + "unclassified_form" + if "unclassified_form" in self._section + and not app.config.get("CLASSIFIED") + else "form" + ) + + if self.pf_attributes_read_only and self.screen == 1: + self._form = task_order_form.AppInfoWithExistingPortfolioForm( + self.form_data + ) + else: + self._form = self._section[form_type]( + self.form_data, obj=self.task_order + ) + return self._form @property @@ -247,7 +258,7 @@ def new(screen, task_order_id=None, portfolio_id=None): if not TaskOrders.all_sections_complete(workflow.task_order): flash("task_order_draft") - if workflow.pf_attributes_read_only(): + if workflow.pf_attributes_read_only: template_args["portfolio"] = workflow.portfolio url_args = {"screen": screen} diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index c99e3be4..fe4ec09e 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -65,7 +65,7 @@ def serialize_dates(data): def test_new_to_can_edit_pf_attributes_screen_1(): portfolio = PortfolioFactory.create() workflow = ShowTaskOrderWorkflow(user=portfolio.owner) - assert not workflow.pf_attributes_read_only() + assert not workflow.pf_attributes_read_only def test_new_pf_can_edit_pf_attributes_on_back_navigation(): @@ -74,7 +74,7 @@ def test_new_pf_can_edit_pf_attributes_on_back_navigation(): pf_workflow = ShowTaskOrderWorkflow( user=pf_task_order.creator, task_order_id=pf_task_order.id ) - assert not pf_workflow.pf_attributes_read_only() + assert not pf_workflow.pf_attributes_read_only def test_to_on_pf_cannot_edit_pf_attributes(): @@ -83,14 +83,14 @@ def test_to_on_pf_cannot_edit_pf_attributes(): workflow = ShowTaskOrderWorkflow(user=portfolio.owner, portfolio_id=portfolio.id) assert portfolio.num_task_orders == 1 - assert workflow.pf_attributes_read_only() + assert workflow.pf_attributes_read_only second_task_order = TaskOrderFactory(portfolio=portfolio) second_workflow = ShowTaskOrderWorkflow( user=portfolio.owner, task_order_id=second_task_order.id ) assert portfolio.num_task_orders > 1 - assert second_workflow.pf_attributes_read_only() + assert second_workflow.pf_attributes_read_only # TODO: this test will need to be more complicated when we add validation to