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:
commit
a85f003cf9
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -40,8 +40,9 @@ 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:
|
||||||
|
new_workspace = Requests.approve_and_create_workspace(submitted_request)
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"workspaces.new_project",
|
"workspaces.new_project",
|
||||||
@ -49,6 +50,12 @@ def update_financial_verification(request_id):
|
|||||||
newWorkspace=True,
|
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")
|
|
||||||
|
@ -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,
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user