Merge pull request #222 from dod-ccpo/create-workspace-auto

Create a workspace automatically if TO is found in EDA
This commit is contained in:
richard-dds 2018-08-31 10:20:49 -04:00 committed by GitHub
commit a85f003cf9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 46 additions and 27 deletions

View File

@ -99,9 +99,6 @@ class Requests(object):
@classmethod @classmethod
def update(cls, request_id, request_delta): def update(cls, request_id, request_delta):
request = Requests._get_with_lock(request_id) request = Requests._get_with_lock(request_id)
if not request:
return
request = Requests._merge_body(request, request_delta) request = Requests._merge_body(request, request_delta)
db.session.add(request) db.session.add(request)
@ -122,7 +119,7 @@ class Requests(object):
) )
except NoResultFound: except NoResultFound:
return raise NotFoundError()
@classmethod @classmethod
def _merge_body(cls, request, request_delta): def _merge_body(cls, request, request_delta):
@ -236,8 +233,6 @@ WHERE requests_with_status.status = :status
@classmethod @classmethod
def update_financial_verification(cls, request_id, financial_data): def update_financial_verification(cls, request_id, financial_data):
request = Requests._get_with_lock(request_id) request = Requests._get_with_lock(request_id)
if not request:
return
request_data = financial_data.copy() request_data = financial_data.copy()
task_order_data = { task_order_data = {
@ -273,12 +268,10 @@ WHERE requests_with_status.status = :status
return request return request
@classmethod @classmethod
def submit_financial_verification(cls, request_id): def submit_financial_verification(cls, request):
request = Requests._get_with_lock(request_id)
if not request:
return
Requests.set_status(request, RequestStatus.PENDING_CCPO_APPROVAL) Requests.set_status(request, RequestStatus.PENDING_CCPO_APPROVAL)
db.session.add(request) db.session.add(request)
db.session.commit() db.session.commit()
return request

View File

@ -17,6 +17,8 @@ class Request(Base):
"RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence" "RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence"
) )
workspace = relationship("Workspace", uselist=False, backref="request")
user_id = Column(ForeignKey("users.id"), nullable=False) user_id = Column(ForeignKey("users.id"), nullable=False)
creator = relationship("User") creator = relationship("User")
@ -35,3 +37,13 @@ class Request(Base):
def annual_spend(self): def annual_spend(self):
monthly = self.body.get("details_of_use", {}).get("estimated_monthly_spend", 0) monthly = self.body.get("details_of_use", {}).get("estimated_monthly_spend", 0)
return monthly * 12 return monthly * 12
@property
def financial_verification(self):
return self.body.get("financial_verification")
@property
def is_financially_verified(self):
if self.task_order:
return self.task_order.verified
return False

View File

@ -35,3 +35,7 @@ class TaskOrder(Base):
attachment_id = Column(ForeignKey("attachments.id")) attachment_id = Column(ForeignKey("attachments.id"))
pdf = relationship("Attachment") pdf = relationship("Attachment")
@property
def verified(self):
return self.source == Source.EDA

View File

@ -43,7 +43,6 @@ class Workspace(Base, TimestampsMixin):
id = Id() id = Id()
name = Column(String, unique=True) name = Column(String, unique=True)
request_id = Column(ForeignKey("requests.id"), nullable=False) request_id = Column(ForeignKey("requests.id"), nullable=False)
request = relationship("Request")
projects = relationship("Project", back_populates="workspace") projects = relationship("Project", back_populates="workspace")
roles = relationship("WorkspaceRole") roles = relationship("WorkspaceRole")

View File

@ -40,15 +40,22 @@ def update_financial_verification(request_id):
) )
updated_request = Requests.update_financial_verification(request_id, form.data) updated_request = Requests.update_financial_verification(request_id, form.data)
if valid: if valid:
Requests.submit_financial_verification(request_id) submitted_request = Requests.submit_financial_verification(updated_request)
new_workspace = Requests.approve_and_create_workspace(updated_request) if submitted_request.is_financially_verified:
return redirect( new_workspace = Requests.approve_and_create_workspace(submitted_request)
url_for( return redirect(
"workspaces.new_project", url_for(
workspace_id=new_workspace.id, "workspaces.new_project",
newWorkspace=True, workspace_id=new_workspace.id,
newWorkspace=True,
)
)
else:
return redirect(
url_for(
"requests.requests_index", pendingFinancialVerification=True
)
) )
)
else: else:
form.reset() form.reset()
@ -59,8 +66,3 @@ def update_financial_verification(request_id):
else: else:
form.reset() form.reset()
return render_template("requests/financial_verification.html", **rerender_args) return render_template("requests/financial_verification.html", **rerender_args)
@requests_bp.route("/requests/financial_verification_submitted")
def financial_verification_submitted():
return render_template("requests/financial_verification_submitted.html")

View File

@ -22,6 +22,7 @@ def map_request(request):
) )
return { return {
"workspace_id": request.workspace.id if request.workspace else None,
"order_id": request.id, "order_id": request.id,
"is_new": is_new, "is_new": is_new,
"status": request.status_displayname, "status": request.status_displayname,

View File

@ -116,7 +116,15 @@
<td></td> <td></td>
{% endif %} {% endif %}
<td>{{ r['annual_usage'] | dollars }}</td> <td>{{ r['annual_usage'] | dollars }}</td>
<td>{{ r['status'] }}</td> <td>
{% if r.status == 'Approved' %}
<a href="{{ url_for('workspaces.workspace_projects', workspace_id=r.workspace_id) }}">
{{ r.status }}
</a>
{% else %}
{{ r.status }}
{% endif %}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@ -128,7 +128,7 @@ class TestPENumberInForm:
response = self.submit_data(client, data, extended=True) response = self.submit_data(client, data, extended=True)
assert response.status_code == 302 assert response.status_code == 302
assert "/projects/new" in response.headers.get("Location") assert "/requests" in response.headers.get("Location")
def test_submit_invalid_extended_financial_form( def test_submit_invalid_extended_financial_form(
self, monkeypatch, user_session, client, extended_financial_verification_data self, monkeypatch, user_session, client, extended_financial_verification_data