request can update financial verification data
This commit is contained in:
@@ -5,9 +5,11 @@ from sqlalchemy.orm.exc import NoResultFound
|
||||
from sqlalchemy.orm.attributes import flag_modified
|
||||
|
||||
from atst.models.request import Request
|
||||
from atst.models.task_order import TaskOrder, Source as TaskOrderSource
|
||||
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||
from atst.domain.workspaces import Workspaces
|
||||
from atst.database import db
|
||||
from atst.domain.task_orders import TaskOrders
|
||||
|
||||
from .exceptions import NotFoundError
|
||||
|
||||
@@ -107,14 +109,20 @@ class Requests(object):
|
||||
except NoResultFound:
|
||||
return
|
||||
|
||||
request = Requests._merge_body(request, request_delta)
|
||||
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
|
||||
@classmethod
|
||||
def _merge_body(cls, request, request_delta):
|
||||
request.body = deep_merge(request_delta, request.body)
|
||||
|
||||
# Without this, sqlalchemy won't notice the change to request.body,
|
||||
# since it doesn't track dictionary mutations by default.
|
||||
flag_modified(request, "body")
|
||||
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
return request
|
||||
|
||||
return request
|
||||
|
||||
@@ -215,3 +223,25 @@ WHERE requests_with_status.status = :status
|
||||
def completed_count(cls):
|
||||
return Requests.status_count(RequestStatus.APPROVED)
|
||||
|
||||
_TASK_ORDER_DATA = [col.name for col in TaskOrder.__table__.c if col.name != "id"]
|
||||
|
||||
@classmethod
|
||||
def update_financial_verification(cls, request_id, financial_data):
|
||||
request = Requests.get(request_id)
|
||||
|
||||
request_data = financial_data.copy()
|
||||
task_order_data = {k: request_data.pop(k) for (k,v) in financial_data.items() if k in Requests._TASK_ORDER_DATA}
|
||||
|
||||
task_order = None
|
||||
if task_order_data:
|
||||
task_order_data["number"] = request_data.pop("task_order_number")
|
||||
task_order = TaskOrders.create(**task_order_data, source=TaskOrderSource.MANUAL)
|
||||
else:
|
||||
task_order = TaskOrders.get(financial_data["task_order_number"])
|
||||
|
||||
request.task_order = task_order
|
||||
Requests._merge_body(request, {"financial_verification": request_data})
|
||||
|
||||
db.session.add(task_order)
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
|
@@ -2,7 +2,7 @@ from sqlalchemy.orm.exc import NoResultFound
|
||||
from flask import current_app as app
|
||||
|
||||
from atst.database import db
|
||||
from atst.models.task_order import TaskOrder
|
||||
from atst.models.task_order import TaskOrder, Source
|
||||
from .exceptions import NotFoundError
|
||||
|
||||
|
||||
@@ -26,13 +26,14 @@ class TaskOrders(object):
|
||||
def _get_from_eda(cls, order_number):
|
||||
to_data = TaskOrders._client().get_contract(order_number, status="y")
|
||||
if to_data:
|
||||
return TaskOrders.create(to_data["contract_no"])
|
||||
# TODO: we need to determine exactly what we're getting and storing from the EDA client
|
||||
return TaskOrders.create(number=to_data["contract_no"], source=Source.EDA)
|
||||
else:
|
||||
raise NotFoundError("task_order")
|
||||
|
||||
@classmethod
|
||||
def create(cls, order_number):
|
||||
task_order = TaskOrder(number=order_number)
|
||||
def create(cls, **kwargs):
|
||||
task_order = TaskOrder(**kwargs)
|
||||
|
||||
db.session.add(task_order)
|
||||
db.session.commit()
|
||||
|
@@ -20,6 +20,9 @@ class Request(Base):
|
||||
user_id = Column(ForeignKey("users.id"), nullable=False)
|
||||
creator = relationship("User")
|
||||
|
||||
task_order_id = Column(ForeignKey("task_order.id"))
|
||||
task_order = relationship("TaskOrder")
|
||||
|
||||
@property
|
||||
def status(self):
|
||||
return self.status_events[-1].new_status
|
||||
|
@@ -20,7 +20,7 @@ class TaskOrder(Base):
|
||||
__tablename__ = "task_order"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
number = Column(String)
|
||||
number = Column(String, unique=True)
|
||||
source = Column(SQLAEnum(Source))
|
||||
funding_type = Column(SQLAEnum(FundingType))
|
||||
funding_type_other = Column(String)
|
||||
|
Reference in New Issue
Block a user