change name of request relationship to legacy task order
This commit is contained in:
parent
2f515d7b47
commit
e509c34cdd
@ -0,0 +1,32 @@
|
|||||||
|
"""change request foreign key to task order
|
||||||
|
|
||||||
|
Revision ID: 1c1394e496a7
|
||||||
|
Revises: 3dc8b7961bd1
|
||||||
|
Create Date: 2018-12-12 14:39:25.325640
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import postgresql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '1c1394e496a7'
|
||||||
|
down_revision = '3dc8b7961bd1'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.alter_column("requests", "task_order_id", new_column_name="legacy_task_order_id")
|
||||||
|
op.drop_constraint('requests_task_order_id_fkey', 'requests', type_='foreignkey')
|
||||||
|
op.create_foreign_key("requests_legacy_task_order_fkey", 'requests', 'legacy_task_orders', ['legacy_task_order_id'], ['id'])
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.alter_column("requests", "legacy_task_order_id", new_column_name="task_order_id")
|
||||||
|
op.drop_constraint("requests_legacy_task_order_fkey" 'requests', type_='foreignkey')
|
||||||
|
op.create_foreign_key('requests_task_order_id_fkey', 'requests', 'legacy_task_orders', ['task_order_id'], ['id'])
|
||||||
|
# ### end Alembic commands ###
|
@ -203,8 +203,8 @@ class Reports:
|
|||||||
if workspace.name in REPORT_FIXTURE_MAP:
|
if workspace.name in REPORT_FIXTURE_MAP:
|
||||||
budget = REPORT_FIXTURE_MAP[workspace.name]["budget"]
|
budget = REPORT_FIXTURE_MAP[workspace.name]["budget"]
|
||||||
spent = _sum_monthly_spend(REPORT_FIXTURE_MAP[workspace.name]["monthly"])
|
spent = _sum_monthly_spend(REPORT_FIXTURE_MAP[workspace.name]["monthly"])
|
||||||
elif workspace.request and workspace.request.task_order:
|
elif workspace.request and workspace.request.legacy_task_order:
|
||||||
ws_to = workspace.request.task_order
|
ws_to = workspace.request.legacy_task_order
|
||||||
budget = ws_to.budget
|
budget = ws_to.budget
|
||||||
# spent will be derived from CSP data
|
# spent will be derived from CSP data
|
||||||
spent = 0
|
spent = 0
|
||||||
|
@ -187,10 +187,12 @@ class Requests(object):
|
|||||||
return Requests.status_count(RequestStatus.APPROVED)
|
return Requests.status_count(RequestStatus.APPROVED)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_financial_verification(cls, request_id, financial_data, task_order=None):
|
def update_financial_verification(
|
||||||
|
cls, request_id, financial_data, legacy_task_order=None
|
||||||
|
):
|
||||||
request = RequestsQuery.get_with_lock(request_id)
|
request = RequestsQuery.get_with_lock(request_id)
|
||||||
if task_order:
|
if legacy_task_order:
|
||||||
request.task_order = task_order
|
request.legacy_task_order = legacy_task_order
|
||||||
|
|
||||||
request = Requests._update(request, {"financial_verification": financial_data})
|
request = Requests._update(request, {"financial_verification": financial_data})
|
||||||
return request
|
return request
|
||||||
|
@ -15,16 +15,16 @@ class TaskOrders(object):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, order_number):
|
def get(cls, order_number):
|
||||||
try:
|
try:
|
||||||
task_order = (
|
legacy_task_order = (
|
||||||
db.session.query(LegacyTaskOrder).filter_by(number=order_number).one()
|
db.session.query(LegacyTaskOrder).filter_by(number=order_number).one()
|
||||||
)
|
)
|
||||||
except NoResultFound:
|
except NoResultFound:
|
||||||
if TaskOrders._client():
|
if TaskOrders._client():
|
||||||
task_order = TaskOrders.get_from_eda(order_number)
|
legacy_task_order = TaskOrders.get_from_eda(order_number)
|
||||||
else:
|
else:
|
||||||
raise NotFoundError("task_order")
|
raise NotFoundError("legacy_task_order")
|
||||||
|
|
||||||
return task_order
|
return legacy_task_order
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_from_eda(cls, order_number):
|
def get_from_eda(cls, order_number):
|
||||||
@ -36,25 +36,27 @@ class TaskOrders(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise NotFoundError("task_order")
|
raise NotFoundError("legacy_task_order")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, source=Source.MANUAL, **kwargs):
|
def create(cls, source=Source.MANUAL, **kwargs):
|
||||||
to_data = {k: v for k, v in kwargs.items() if v not in ["", None]}
|
to_data = {k: v for k, v in kwargs.items() if v not in ["", None]}
|
||||||
task_order = LegacyTaskOrder(source=source, **to_data)
|
legacy_task_order = LegacyTaskOrder(source=source, **to_data)
|
||||||
|
|
||||||
db.session.add(task_order)
|
db.session.add(legacy_task_order)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return task_order
|
return legacy_task_order
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _client(cls):
|
def _client(cls):
|
||||||
return app.eda_client
|
return app.eda_client
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update(cls, task_order, dct):
|
def update(cls, legacy_task_order, dct):
|
||||||
updated = update_obj(task_order, dct, ignore_vals=lambda v: v in ["", None])
|
updated = update_obj(
|
||||||
|
legacy_task_order, dct, ignore_vals=lambda v: v in ["", None]
|
||||||
|
)
|
||||||
db.session.add(updated)
|
db.session.add(updated)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return updated
|
return updated
|
||||||
|
@ -46,10 +46,10 @@ def mixedContentToJson(value):
|
|||||||
"""
|
"""
|
||||||
if (
|
if (
|
||||||
isinstance(value, dict)
|
isinstance(value, dict)
|
||||||
and "task_order" in value
|
and "legacy_task_order" in value
|
||||||
and hasattr(value["task_order"]["pdf"], "filename")
|
and hasattr(value["legacy_task_order"]["pdf"], "filename")
|
||||||
):
|
):
|
||||||
value["task_order"]["pdf"] = value["task_order"]["pdf"].filename
|
value["legacy_task_order"]["pdf"] = value["legacy_task_order"]["pdf"].filename
|
||||||
return app.jinja_env.filters["tojson"](value)
|
return app.jinja_env.filters["tojson"](value)
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,13 +34,13 @@ def coerce_choice(val):
|
|||||||
class TaskOrderForm(CacheableForm):
|
class TaskOrderForm(CacheableForm):
|
||||||
def do_validate_number(self):
|
def do_validate_number(self):
|
||||||
for field in self:
|
for field in self:
|
||||||
if field.name != "task_order-number":
|
if field.name != "legacy_task_order-number":
|
||||||
field.validators.insert(0, Optional())
|
field.validators.insert(0, Optional())
|
||||||
|
|
||||||
valid = super().validate()
|
valid = super().validate()
|
||||||
|
|
||||||
for field in self:
|
for field in self:
|
||||||
if field.name != "task_order-number":
|
if field.name != "legacy_task_order-number":
|
||||||
field.validators.pop(0)
|
field.validators.pop(0)
|
||||||
|
|
||||||
return valid
|
return valid
|
||||||
@ -176,25 +176,25 @@ class RequestFinancialVerificationForm(CacheableForm):
|
|||||||
|
|
||||||
class FinancialVerificationForm(CacheableForm):
|
class FinancialVerificationForm(CacheableForm):
|
||||||
|
|
||||||
task_order = FormField(TaskOrderForm)
|
legacy_task_order = FormField(TaskOrderForm)
|
||||||
request = FormField(RequestFinancialVerificationForm)
|
request = FormField(RequestFinancialVerificationForm)
|
||||||
|
|
||||||
def validate(self, *args, **kwargs):
|
def validate(self, *args, **kwargs):
|
||||||
if not kwargs.get("is_extended", True):
|
if not kwargs.get("is_extended", True):
|
||||||
return self.do_validate_request()
|
return self.do_validate_request()
|
||||||
|
|
||||||
if self.task_order.funding_type.data == "OTHER":
|
if self.legacy_task_order.funding_type.data == "OTHER":
|
||||||
self.task_order.funding_type_other.validators.append(InputRequired())
|
self.legacy_task_order.funding_type_other.validators.append(InputRequired())
|
||||||
|
|
||||||
to_pdf_validators = None
|
to_pdf_validators = None
|
||||||
if kwargs.get("has_attachment"):
|
if kwargs.get("has_attachment"):
|
||||||
to_pdf_validators = list(self.task_order.pdf.validators)
|
to_pdf_validators = list(self.legacy_task_order.pdf.validators)
|
||||||
self.task_order.pdf.validators = []
|
self.legacy_task_order.pdf.validators = []
|
||||||
|
|
||||||
valid = super().validate()
|
valid = super().validate()
|
||||||
|
|
||||||
if to_pdf_validators:
|
if to_pdf_validators:
|
||||||
self.task_order.pdf.validators = to_pdf_validators
|
self.legacy_task_order.pdf.validators = to_pdf_validators
|
||||||
|
|
||||||
return valid
|
return valid
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ class FinancialVerificationForm(CacheableForm):
|
|||||||
validator by wtforms.
|
validator by wtforms.
|
||||||
"""
|
"""
|
||||||
request_valid = self.request.validate(self)
|
request_valid = self.request.validate(self)
|
||||||
task_order_valid = self.task_order.do_validate_number()
|
task_order_valid = self.legacy_task_order.do_validate_number()
|
||||||
return request_valid and task_order_valid
|
return request_valid and task_order_valid
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
@ -216,11 +216,11 @@ class FinancialVerificationForm(CacheableForm):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def has_pdf_upload(self):
|
def has_pdf_upload(self):
|
||||||
return isinstance(self.task_order.pdf.data, FileStorage)
|
return isinstance(self.legacy_task_order.pdf.data, FileStorage)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_missing_task_order_number(self):
|
def is_missing_task_order_number(self):
|
||||||
return "number" in self.errors.get("task_order", {})
|
return "number" in self.errors.get("legacy_task_order", {})
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_only_missing_task_order_number(self):
|
def is_only_missing_task_order_number(self):
|
||||||
|
@ -39,8 +39,8 @@ class Request(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
|||||||
user_id = Column(ForeignKey("users.id"), nullable=False)
|
user_id = Column(ForeignKey("users.id"), nullable=False)
|
||||||
creator = relationship("User", backref="owned_requests")
|
creator = relationship("User", backref="owned_requests")
|
||||||
|
|
||||||
task_order_id = Column(ForeignKey("legacy_task_orders.id"))
|
legacy_task_order_id = Column(ForeignKey("legacy_task_orders.id"))
|
||||||
task_order = relationship("LegacyTaskOrder")
|
legacy_task_order = relationship("LegacyTaskOrder")
|
||||||
|
|
||||||
revisions = relationship(
|
revisions = relationship(
|
||||||
"RequestRevision", back_populates="request", order_by="RequestRevision.sequence"
|
"RequestRevision", back_populates="request", order_by="RequestRevision.sequence"
|
||||||
@ -141,8 +141,8 @@ class Request(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def is_financially_verified(self):
|
def is_financially_verified(self):
|
||||||
if self.task_order:
|
if self.legacy_task_order:
|
||||||
return self.task_order.verified
|
return self.legacy_task_order.verified
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -209,7 +209,7 @@ class Request(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
|||||||
self.is_pending_ccpo_approval
|
self.is_pending_ccpo_approval
|
||||||
or self.is_pending_financial_verification_changes
|
or self.is_pending_financial_verification_changes
|
||||||
or self.is_approved
|
or self.is_approved
|
||||||
) and self.task_order
|
) and self.legacy_task_order
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def displayname(self):
|
def displayname(self):
|
||||||
@ -233,8 +233,8 @@ class Request(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
|||||||
@property
|
@property
|
||||||
def has_manual_task_order(self):
|
def has_manual_task_order(self):
|
||||||
return (
|
return (
|
||||||
self.task_order.source == TaskOrderSource.MANUAL
|
self.legacy_task_order.source == TaskOrderSource.MANUAL
|
||||||
if self.task_order is not None
|
if self.legacy_task_order is not None
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ class Workspace(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
|
|||||||
return len(self.users)
|
return len(self.users)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def task_order(self):
|
def legacy_task_order(self):
|
||||||
return self.request.task_order
|
return self.request.legacy_task_order
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def members(self):
|
def members(self):
|
||||||
|
@ -22,7 +22,7 @@ def map_ccpo_authorizing(user):
|
|||||||
def render_approval(request, form=None, internal_comment_form=None):
|
def render_approval(request, form=None, internal_comment_form=None):
|
||||||
data = request.body
|
data = request.body
|
||||||
if request.has_financial_data:
|
if request.has_financial_data:
|
||||||
data["task_order"] = request.task_order.to_dictionary()
|
data["legacy_task_order"] = request.legacy_task_order.to_dictionary()
|
||||||
|
|
||||||
if not form:
|
if not form:
|
||||||
mo_data = map_ccpo_authorizing(g.current_user)
|
mo_data = map_ccpo_authorizing(g.current_user)
|
||||||
@ -69,8 +69,8 @@ def submit_approval(request_id):
|
|||||||
@requests_bp.route("/requests/task_order_download/<string:request_id>", methods=["GET"])
|
@requests_bp.route("/requests/task_order_download/<string:request_id>", methods=["GET"])
|
||||||
def task_order_pdf_download(request_id):
|
def task_order_pdf_download(request_id):
|
||||||
request = Requests.get(g.current_user, request_id)
|
request = Requests.get(g.current_user, request_id)
|
||||||
if request.task_order and request.task_order.pdf:
|
if request.legacy_task_order and request.legacy_task_order.pdf:
|
||||||
pdf = request.task_order.pdf
|
pdf = request.legacy_task_order.pdf
|
||||||
generator = app.uploader.download_stream(pdf.object_name)
|
generator = app.uploader.download_stream(pdf.object_name)
|
||||||
return Response(
|
return Response(
|
||||||
generator,
|
generator,
|
||||||
@ -81,7 +81,7 @@ def task_order_pdf_download(request_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise NotFoundError("task_order pdf")
|
raise NotFoundError("legacy_task_order pdf")
|
||||||
|
|
||||||
|
|
||||||
@requests_bp.route("/requests/internal_comments/<string:request_id>", methods=["POST"])
|
@requests_bp.route("/requests/internal_comments/<string:request_id>", methods=["POST"])
|
||||||
|
@ -23,7 +23,7 @@ def fv_extended(_http_request):
|
|||||||
class FinancialVerification(object):
|
class FinancialVerification(object):
|
||||||
def __init__(self, request):
|
def __init__(self, request):
|
||||||
self.request = request.latest_revision
|
self.request = request.latest_revision
|
||||||
self.task_order = request.task_order
|
self.legacy_task_order = request.legacy_task_order
|
||||||
|
|
||||||
|
|
||||||
class FinancialVerificationBase(object):
|
class FinancialVerificationBase(object):
|
||||||
@ -33,14 +33,16 @@ class FinancialVerificationBase(object):
|
|||||||
form = FinancialVerificationForm(obj=fv, formdata=_formdata)
|
form = FinancialVerificationForm(obj=fv, formdata=_formdata)
|
||||||
|
|
||||||
if not form.has_pdf_upload:
|
if not form.has_pdf_upload:
|
||||||
if isinstance(form.task_order.pdf.data, Attachment):
|
if isinstance(form.legacy_task_order.pdf.data, Attachment):
|
||||||
form.task_order.pdf.data = form.task_order.pdf.data.filename
|
form.legacy_task_order.pdf.data = (
|
||||||
|
form.legacy_task_order.pdf.data.filename
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
attachment = Attachment.get_for_resource(
|
attachment = Attachment.get_for_resource(
|
||||||
"task_order", self.request.id
|
"legacy_task_order", self.request.id
|
||||||
)
|
)
|
||||||
form.task_order.pdf.data = attachment.filename
|
form.legacy_task_order.pdf.data = attachment.filename
|
||||||
except NotFoundError:
|
except NotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -50,38 +52,40 @@ class FinancialVerificationBase(object):
|
|||||||
attachment = None
|
attachment = None
|
||||||
if is_extended:
|
if is_extended:
|
||||||
attachment = None
|
attachment = None
|
||||||
if isinstance(form.task_order.pdf.data, FileStorage):
|
if isinstance(form.legacy_task_order.pdf.data, FileStorage):
|
||||||
Attachment.delete_for_resource("task_order", self.request.id)
|
Attachment.delete_for_resource("legacy_task_order", self.request.id)
|
||||||
attachment = Attachment.attach(
|
attachment = Attachment.attach(
|
||||||
form.task_order.pdf.data, "task_order", self.request.id
|
form.legacy_task_order.pdf.data,
|
||||||
|
"legacy_task_order",
|
||||||
|
self.request.id,
|
||||||
)
|
)
|
||||||
elif isinstance(form.task_order.pdf.data, str):
|
elif isinstance(form.legacy_task_order.pdf.data, str):
|
||||||
try:
|
try:
|
||||||
attachment = Attachment.get_for_resource(
|
attachment = Attachment.get_for_resource(
|
||||||
"task_order", self.request.id
|
"legacy_task_order", self.request.id
|
||||||
)
|
)
|
||||||
except NotFoundError:
|
except NotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if attachment:
|
if attachment:
|
||||||
form.task_order.pdf.data = attachment.filename
|
form.legacy_task_order.pdf.data = attachment.filename
|
||||||
|
|
||||||
return attachment
|
return attachment
|
||||||
|
|
||||||
def _try_create_task_order(self, form, attachment, is_extended):
|
def _try_create_task_order(self, form, attachment, is_extended):
|
||||||
task_order_number = form.task_order.number.data
|
task_order_number = form.legacy_task_order.number.data
|
||||||
if not task_order_number:
|
if not task_order_number:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
task_order_data = form.task_order.data
|
task_order_data = form.legacy_task_order.data
|
||||||
|
|
||||||
if attachment:
|
if attachment:
|
||||||
task_order_data["pdf"] = attachment
|
task_order_data["pdf"] = attachment
|
||||||
|
|
||||||
try:
|
try:
|
||||||
task_order = TaskOrders.get(task_order_number)
|
legacy_task_order = TaskOrders.get(task_order_number)
|
||||||
task_order = TaskOrders.update(task_order, task_order_data)
|
legacy_task_order = TaskOrders.update(legacy_task_order, task_order_data)
|
||||||
return task_order
|
return legacy_task_order
|
||||||
except NotFoundError:
|
except NotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -142,14 +146,16 @@ class UpdateFinancialVerification(FinancialVerificationBase):
|
|||||||
should_submit = False
|
should_submit = False
|
||||||
|
|
||||||
if not self.is_extended and not self.task_order_validator.validate(
|
if not self.is_extended and not self.task_order_validator.validate(
|
||||||
form.task_order.number
|
form.legacy_task_order.number
|
||||||
):
|
):
|
||||||
should_submit = False
|
should_submit = False
|
||||||
|
|
||||||
if should_update:
|
if should_update:
|
||||||
task_order = self._try_create_task_order(form, attachment, self.is_extended)
|
legacy_task_order = self._try_create_task_order(
|
||||||
|
form, attachment, self.is_extended
|
||||||
|
)
|
||||||
updated_request = Requests.update_financial_verification(
|
updated_request = Requests.update_financial_verification(
|
||||||
self.request.id, form.request.data, task_order=task_order
|
self.request.id, form.request.data, legacy_task_order=legacy_task_order
|
||||||
)
|
)
|
||||||
if should_submit:
|
if should_submit:
|
||||||
return Requests.submit_financial_verification(updated_request)
|
return Requests.submit_financial_verification(updated_request)
|
||||||
@ -177,9 +183,11 @@ class SaveFinancialVerificationDraft(FinancialVerificationBase):
|
|||||||
def execute(self):
|
def execute(self):
|
||||||
form = self._get_form(self.request, self.is_extended, self.fv_data)
|
form = self._get_form(self.request, self.is_extended, self.fv_data)
|
||||||
attachment = self._process_attachment(self.is_extended, form)
|
attachment = self._process_attachment(self.is_extended, form)
|
||||||
task_order = self._try_create_task_order(form, attachment, self.is_extended)
|
legacy_task_order = self._try_create_task_order(
|
||||||
|
form, attachment, self.is_extended
|
||||||
|
)
|
||||||
updated_request = Requests.update_financial_verification(
|
updated_request = Requests.update_financial_verification(
|
||||||
self.request.id, form.request.data, task_order=task_order
|
self.request.id, form.request.data, legacy_task_order=legacy_task_order
|
||||||
)
|
)
|
||||||
|
|
||||||
return updated_request
|
return updated_request
|
||||||
@ -237,7 +245,7 @@ def update_financial_verification(request_id):
|
|||||||
extended=is_extended,
|
extended=is_extended,
|
||||||
)
|
)
|
||||||
|
|
||||||
if updated_request.task_order.verified:
|
if updated_request.legacy_task_order.verified:
|
||||||
workspace = Requests.auto_approve_and_create_workspace(updated_request)
|
workspace = Requests.auto_approve_and_create_workspace(updated_request)
|
||||||
flash("new_workspace")
|
flash("new_workspace")
|
||||||
return redirect(url_for("workspaces.new_project", workspace_id=workspace.id))
|
return redirect(url_for("workspaces.new_project", workspace_id=workspace.id))
|
||||||
|
@ -146,7 +146,7 @@ def view_request_details(request_id=None):
|
|||||||
|
|
||||||
data = request.body
|
data = request.body
|
||||||
if request.has_financial_data:
|
if request.has_financial_data:
|
||||||
data["task_order"] = request.task_order.to_dictionary()
|
data["legacy_task_order"] = request.legacy_task_order.to_dictionary()
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"requests/details.html",
|
"requests/details.html",
|
||||||
|
@ -58,7 +58,7 @@ def workspace_reports(workspace_id):
|
|||||||
prev_month = current_month - timedelta(days=28)
|
prev_month = current_month - timedelta(days=28)
|
||||||
two_months_ago = prev_month - timedelta(days=28)
|
two_months_ago = prev_month - timedelta(days=28)
|
||||||
|
|
||||||
expiration_date = workspace.request.task_order.expiration_date
|
expiration_date = workspace.request.legacy_task_order.expiration_date
|
||||||
if expiration_date:
|
if expiration_date:
|
||||||
remaining_difference = expiration_date - today
|
remaining_difference = expiration_date - today
|
||||||
remaining_days = remaining_difference.days
|
remaining_days = remaining_difference.days
|
||||||
@ -71,7 +71,7 @@ def workspace_reports(workspace_id):
|
|||||||
workspace_totals=Reports.workspace_totals(workspace),
|
workspace_totals=Reports.workspace_totals(workspace),
|
||||||
monthly_totals=Reports.monthly_totals(workspace),
|
monthly_totals=Reports.monthly_totals(workspace),
|
||||||
jedi_request=workspace.request,
|
jedi_request=workspace.request,
|
||||||
task_order=workspace.request.task_order,
|
legacy_task_order=workspace.request.legacy_task_order,
|
||||||
current_month=current_month,
|
current_month=current_month,
|
||||||
prev_month=prev_month,
|
prev_month=prev_month,
|
||||||
two_months_ago=two_months_ago,
|
two_months_ago=two_months_ago,
|
||||||
|
@ -34,7 +34,7 @@ export default {
|
|||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
showTaskOrderUpload: function() {
|
showTaskOrderUpload: function() {
|
||||||
return !this.initialData.task_order.pdf || this.shouldForceShowTaskOrder
|
return !this.initialData.legacy_task_order.pdf || this.shouldForceShowTaskOrder
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ def create_demo_workspace(name, data):
|
|||||||
return
|
return
|
||||||
|
|
||||||
request = RequestFactory.build(creator=workspace_owner)
|
request = RequestFactory.build(creator=workspace_owner)
|
||||||
request.task_order = LegacyTaskOrderFactory.build()
|
request.legacy_task_order = LegacyTaskOrderFactory.build()
|
||||||
request = Requests.update(
|
request = Requests.update(
|
||||||
request.id, {"financial_verification": RequestFactory.mock_financial_data()}
|
request.id, {"financial_verification": RequestFactory.mock_financial_data()}
|
||||||
)
|
)
|
||||||
|
@ -102,7 +102,7 @@ def seed_db():
|
|||||||
requests.append(request)
|
requests.append(request)
|
||||||
|
|
||||||
request = requests[0]
|
request = requests[0]
|
||||||
request.task_order = LegacyTaskOrderFactory.build()
|
request.legacy_task_order = LegacyTaskOrderFactory.build()
|
||||||
request = Requests.update(
|
request = Requests.update(
|
||||||
request.id, {"financial_verification": RequestFactory.mock_financial_data()}
|
request.id, {"financial_verification": RequestFactory.mock_financial_data()}
|
||||||
)
|
)
|
||||||
|
@ -154,7 +154,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{% if jedi_request.task_order.pdf %}
|
{% if jedi_request.legacy_task_order.pdf %}
|
||||||
<a href="{{ url_for("requests.task_order_pdf_download", request_id=request_id)}}" download>
|
<a href="{{ url_for("requests.task_order_pdf_download", request_id=request_id)}}" download>
|
||||||
Download the Task Order PDF
|
Download the Task Order PDF
|
||||||
</a>
|
</a>
|
||||||
@ -164,29 +164,29 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
{{ DefinitionReviewField("Task Order Information Source", "task_order", "source", filter="getOptionLabel", filter_args=[task_order_sources]) }}
|
{{ DefinitionReviewField("Task Order Information Source", "legacy_task_order", "source", filter="getOptionLabel", filter_args=[task_order_sources]) }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("Task Order Number", "task_order", "number") }}
|
{{ DefinitionReviewField("Task Order Number", "legacy_task_order", "number") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("What is the source of funding?", "task_order", "funding_type", filter="getOptionLabel", filter_args=[funding_types]) }}
|
{{ DefinitionReviewField("What is the source of funding?", "legacy_task_order", "funding_type", filter="getOptionLabel", filter_args=[funding_types]) }}
|
||||||
|
|
||||||
{% if data["task_order"] and data["task_order"]["funding_type"].value == "OTHER" %}
|
{% if data["legacy_task_order"] and data["legacy_task_order"]["funding_type"].value == "OTHER" %}
|
||||||
{{ DefinitionReviewField("If other, please specify", "task_order", "funding_type_other") }}
|
{{ DefinitionReviewField("If other, please specify", "legacy_task_order", "funding_type_other") }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ DefinitionReviewField("Task Order Expiration Date", "task_order", "expiration_date") }}
|
{{ DefinitionReviewField("Task Order Expiration Date", "legacy_task_order", "expiration_date") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 0001</dt> - <dd>Unclassified IaaS and PaaS Amount</dd></dl>", "task_order", "clin_0001", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 0001</dt> - <dd>Unclassified IaaS and PaaS Amount</dd></dl>", "legacy_task_order", "clin_0001", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 0003</dt> - <dd>Unclassified Cloud Support Package</dd></dl>", "task_order", "clin_0003", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 0003</dt> - <dd>Unclassified Cloud Support Package</dd></dl>", "legacy_task_order", "clin_0003", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 1001</dt> - <dd>Unclassified IaaS and PaaS Amount <br> OPTION PERIOD 1</dd></dl>", "task_order", "clin_1001", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 1001</dt> - <dd>Unclassified IaaS and PaaS Amount <br> OPTION PERIOD 1</dd></dl>", "legacy_task_order", "clin_1001", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 1003</dt> - <dd>Unclassified Cloud Support Package <br> OPTION PERIOD 1</dd></dl>", "task_order", "clin_1003", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 1003</dt> - <dd>Unclassified Cloud Support Package <br> OPTION PERIOD 1</dd></dl>", "legacy_task_order", "clin_1003", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 2001</dt> - <dd>Unclassified IaaS and PaaS Amount <br> OPTION PERIOD 2</dd></dl>", "task_order", "clin_2001", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 2001</dt> - <dd>Unclassified IaaS and PaaS Amount <br> OPTION PERIOD 2</dd></dl>", "legacy_task_order", "clin_2001", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("<dl><dt>CLIN 2003</dt> - <dd>Unclassified Cloud Support Package <br> OPTION PERIOD 2</dd></dl>", "task_order", "clin_2003", filter="dollars") }}
|
{{ DefinitionReviewField("<dl><dt>CLIN 2003</dt> - <dd>Unclassified Cloud Support Package <br> OPTION PERIOD 2</dd></dl>", "legacy_task_order", "clin_2003", filter="dollars") }}
|
||||||
|
|
||||||
{{ DefinitionReviewField("Unique Item Identifier (UII)s related to your application(s) if you already have them", "financial_verification", "uii_ids", filter="renderList") }}
|
{{ DefinitionReviewField("Unique Item Identifier (UII)s related to your application(s) if you already have them", "financial_verification", "uii_ids", filter="renderList") }}
|
||||||
|
|
||||||
|
@ -71,55 +71,55 @@
|
|||||||
|
|
||||||
{% if extended %}
|
{% if extended %}
|
||||||
<fieldset class="form__sub-fields form__sub-fields--warning">
|
<fieldset class="form__sub-fields form__sub-fields--warning">
|
||||||
{{ OptionsInput(f.task_order.funding_type) }}
|
{{ OptionsInput(f.legacy_task_order.funding_type) }}
|
||||||
|
|
||||||
<template v-if="funding_type == 'OTHER'" v-cloak>
|
<template v-if="funding_type == 'OTHER'" v-cloak>
|
||||||
{{ TextInput(f.task_order.funding_type_other) }}
|
{{ TextInput(f.legacy_task_order.funding_type_other) }}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
{{ DateInput(f.task_order.expiration_date, placeholder='MM / DD / YYYY', validation='date', tooltip='Please enter the expiration date for the task order only and do not include options that you may choose to exercise in the future.') }}
|
{{ DateInput(f.legacy_task_order.expiration_date, placeholder='MM / DD / YYYY', validation='date', tooltip='Please enter the expiration date for the task order only and do not include options that you may choose to exercise in the future.') }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_0001,
|
f.legacy_task_order.clin_0001,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_0003,
|
f.legacy_task_order.clin_0003,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_1001,
|
f.legacy_task_order.clin_1001,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_1003,
|
f.legacy_task_order.clin_1003,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_2001,
|
f.legacy_task_order.clin_2001,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.clin_2003,
|
f.legacy_task_order.clin_2003,
|
||||||
validation='dollars'
|
validation='dollars'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
<template v-if="showTaskOrderUpload">
|
<template v-if="showTaskOrderUpload">
|
||||||
<div class="usa-input {% if f.task_order.pdf.errors %} usa-input--error {% endif %}">
|
<div class="usa-input {% if f.legacy_task_order.pdf.errors %} usa-input--error {% endif %}">
|
||||||
{{ f.task_order.pdf.label }}
|
{{ f.legacy_task_order.pdf.label }}
|
||||||
{{ f.task_order.pdf }}
|
{{ f.legacy_task_order.pdf }}
|
||||||
{% for error in f.task_order.pdf.errors %}
|
{% for error in f.legacy_task_order.pdf.errors %}
|
||||||
<span class="usa-input__message">{{error}}</span>
|
<span class="usa-input__message">{{error}}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<p>Uploaded {{ f.task_order.pdf.data }}.</p>
|
<p>Uploaded {{ f.legacy_task_order.pdf.data }}.</p>
|
||||||
<div>
|
<div>
|
||||||
<button v-on:click="forceShowTaskOrderUpload($event)">Change</button>
|
<button v-on:click="forceShowTaskOrderUpload($event)">Change</button>
|
||||||
</div>
|
</div>
|
||||||
@ -128,7 +128,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ TextInput(
|
{{ TextInput(
|
||||||
f.task_order.number,
|
f.legacy_task_order.number,
|
||||||
placeholder="e.g.: 1234567899C0001",
|
placeholder="e.g.: 1234567899C0001",
|
||||||
tooltip="A Contracting Officer will likely be the best source for this number.",
|
tooltip="A Contracting Officer will likely be the best source for this number.",
|
||||||
validation="requiredField"
|
validation="requiredField"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<a class='icon-link icon-link--large' href="/workspaces/{{ workspace.id }}/projects">{{ workspace.name }}</a><br>
|
<a class='icon-link icon-link--large' href="/workspaces/{{ workspace.id }}/projects">{{ workspace.name }}</a><br>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
#{{ workspace.task_order.number }}
|
#{{ workspace.legacy_task_order.number }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span class="label">{{ workspace.user_count }}</span><span class='h6'>Users</span>
|
<span class="label">{{ workspace.user_count }}</span><span class='h6'>Users</span>
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
<h2 class='to-summary__heading'>Task Order</h2>
|
<h2 class='to-summary__heading'>Task Order</h2>
|
||||||
<dl class='to-summary__to-number'>
|
<dl class='to-summary__to-number'>
|
||||||
<dt class='usa-sr-only'>Task Order Number</dt>
|
<dt class='usa-sr-only'>Task Order Number</dt>
|
||||||
<dd>{{ task_order.number }}</dd>
|
<dd>{{ legacy_task_order.number }}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ def extended_financial_verification_data(pdf_upload):
|
|||||||
"clin_1003": "7000",
|
"clin_1003": "7000",
|
||||||
"clin_2001": "30000",
|
"clin_2001": "30000",
|
||||||
"clin_2003": "7000",
|
"clin_2003": "7000",
|
||||||
"task_order": pdf_upload,
|
"legacy_task_order": pdf_upload,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@ CLIN_NUMS = ["0001", "0003", "1001", "1003", "2001", "2003"]
|
|||||||
|
|
||||||
|
|
||||||
def test_workspace_totals():
|
def test_workspace_totals():
|
||||||
task_order = LegacyTaskOrderFactory.create()
|
legacy_task_order = LegacyTaskOrderFactory.create()
|
||||||
|
|
||||||
for num in CLIN_NUMS:
|
for num in CLIN_NUMS:
|
||||||
setattr(task_order, "clin_{}".format(num), 200)
|
setattr(legacy_task_order, "clin_{}".format(num), 200)
|
||||||
|
|
||||||
request = RequestFactory.create(task_order=task_order)
|
request = RequestFactory.create(legacy_task_order=legacy_task_order)
|
||||||
workspace = WorkspaceFactory.create(request=request)
|
workspace = WorkspaceFactory.create(request=request)
|
||||||
report = Reports.workspace_totals(workspace)
|
report = Reports.workspace_totals(workspace)
|
||||||
total = 200 * len(CLIN_NUMS)
|
total = 200 * len(CLIN_NUMS)
|
||||||
|
@ -122,8 +122,8 @@ class RequestFactory(Base):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _adjust_kwargs(cls, **kwargs):
|
def _adjust_kwargs(cls, **kwargs):
|
||||||
if kwargs.pop("with_task_order", False) and "task_order" not in kwargs:
|
if kwargs.pop("with_task_order", False) and "legacy_task_order" not in kwargs:
|
||||||
kwargs["task_order"] = LegacyTaskOrderFactory.build()
|
kwargs["legacy_task_order"] = LegacyTaskOrderFactory.build()
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -20,17 +20,17 @@ def test_suggest_pe_id(input_, expected):
|
|||||||
|
|
||||||
|
|
||||||
def test_funding_type_other_not_required_if_funding_type_is_not_other():
|
def test_funding_type_other_not_required_if_funding_type_is_not_other():
|
||||||
form_data = ImmutableMultiDict({"task_order-funding_type": "PROC"})
|
form_data = ImmutableMultiDict({"legacy_task_order-funding_type": "PROC"})
|
||||||
form = FinancialVerificationForm(form_data)
|
form = FinancialVerificationForm(form_data)
|
||||||
form.validate()
|
form.validate()
|
||||||
assert "funding_type_other" not in form.errors
|
assert "funding_type_other" not in form.errors
|
||||||
|
|
||||||
|
|
||||||
def test_funding_type_other_required_if_funding_type_is_other():
|
def test_funding_type_other_required_if_funding_type_is_other():
|
||||||
form_data = ImmutableMultiDict({"task_order-funding_type": "OTHER"})
|
form_data = ImmutableMultiDict({"legacy_task_order-funding_type": "OTHER"})
|
||||||
form = FinancialVerificationForm(form_data)
|
form = FinancialVerificationForm(form_data)
|
||||||
form.validate()
|
form.validate()
|
||||||
assert "funding_type_other" in form.errors["task_order"]
|
assert "funding_type_other" in form.errors["legacy_task_order"]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@ -85,8 +85,8 @@ def test_ba_code_validation(input_, expected):
|
|||||||
def test_can_submit_zero_for_clin():
|
def test_can_submit_zero_for_clin():
|
||||||
form_first = FinancialVerificationForm()
|
form_first = FinancialVerificationForm()
|
||||||
form_first.validate()
|
form_first.validate()
|
||||||
assert "clin_0001" in form_first.errors["task_order"]
|
assert "clin_0001" in form_first.errors["legacy_task_order"]
|
||||||
form_data = ImmutableMultiDict([("task_order-clin_0001", "0")])
|
form_data = ImmutableMultiDict([("legacy_task_order-clin_0001", "0")])
|
||||||
form_second = FinancialVerificationForm(form_data)
|
form_second = FinancialVerificationForm(form_data)
|
||||||
form_second.validate()
|
form_second.validate()
|
||||||
assert "clin_0001" not in form_second.errors["task_order"]
|
assert "clin_0001" not in form_second.errors["legacy_task_order"]
|
||||||
|
@ -9,7 +9,7 @@ def test_as_dictionary():
|
|||||||
|
|
||||||
|
|
||||||
def test_budget():
|
def test_budget():
|
||||||
task_order = LegacyTaskOrderFactory.create(
|
legacy_task_order = LegacyTaskOrderFactory.create(
|
||||||
clin_0001=500,
|
clin_0001=500,
|
||||||
clin_0003=200,
|
clin_0003=200,
|
||||||
clin_1001=None,
|
clin_1001=None,
|
||||||
@ -17,4 +17,4 @@ def test_budget():
|
|||||||
clin_2001=None,
|
clin_2001=None,
|
||||||
clin_2003=None,
|
clin_2003=None,
|
||||||
)
|
)
|
||||||
assert task_order.budget == 700
|
assert legacy_task_order.budget == 700
|
||||||
|
@ -10,9 +10,11 @@ def test_can_show_financial_data(client, user_session):
|
|||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
user_session(user)
|
user_session(user)
|
||||||
|
|
||||||
task_order = LegacyTaskOrderFactory.create()
|
legacy_task_order = LegacyTaskOrderFactory.create()
|
||||||
request = RequestFactory.create_with_status(
|
request = RequestFactory.create_with_status(
|
||||||
status=RequestStatus.PENDING_CCPO_APPROVAL, task_order=task_order, creator=user
|
status=RequestStatus.PENDING_CCPO_APPROVAL,
|
||||||
|
legacy_task_order=legacy_task_order,
|
||||||
|
creator=user,
|
||||||
)
|
)
|
||||||
response = client.get(
|
response = client.get(
|
||||||
url_for("requests.view_request_details", request_id=request.id)
|
url_for("requests.view_request_details", request_id=request.id)
|
||||||
|
@ -46,10 +46,12 @@ def test_non_ccpo_cannot_view_approval(user_session, client):
|
|||||||
|
|
||||||
|
|
||||||
def prepare_request_pending_approval(creator, pdf_attachment=None):
|
def prepare_request_pending_approval(creator, pdf_attachment=None):
|
||||||
task_order = LegacyTaskOrderFactory.create(number="abc123", pdf=pdf_attachment)
|
legacy_task_order = LegacyTaskOrderFactory.create(
|
||||||
|
number="abc123", pdf=pdf_attachment
|
||||||
|
)
|
||||||
return RequestFactory.create_with_status(
|
return RequestFactory.create_with_status(
|
||||||
status=RequestStatus.PENDING_CCPO_APPROVAL,
|
status=RequestStatus.PENDING_CCPO_APPROVAL,
|
||||||
task_order=task_order,
|
legacy_task_order=legacy_task_order,
|
||||||
creator=creator,
|
creator=creator,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -86,8 +88,8 @@ def test_task_order_download(app, client, user_session, pdf_upload):
|
|||||||
user_session(user)
|
user_session(user)
|
||||||
|
|
||||||
attachment = Attachment.attach(pdf_upload)
|
attachment = Attachment.attach(pdf_upload)
|
||||||
task_order = LegacyTaskOrderFactory.create(number="abc123", pdf=attachment)
|
legacy_task_order = LegacyTaskOrderFactory.create(number="abc123", pdf=attachment)
|
||||||
request = RequestFactory.create(task_order=task_order, creator=user)
|
request = RequestFactory.create(legacy_task_order=legacy_task_order, creator=user)
|
||||||
|
|
||||||
# ensure that real data for pdf upload has been flushed to disk
|
# ensure that real data for pdf upload has been flushed to disk
|
||||||
pdf_upload.seek(0)
|
pdf_upload.seek(0)
|
||||||
|
@ -26,7 +26,7 @@ from atst.domain.requests.query import RequestsQuery
|
|||||||
def fv_data():
|
def fv_data():
|
||||||
return {
|
return {
|
||||||
"request-pe_id": "123",
|
"request-pe_id": "123",
|
||||||
"task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
"legacy_task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
||||||
"request-fname_co": "Contracting",
|
"request-fname_co": "Contracting",
|
||||||
"request-lname_co": "Officer",
|
"request-lname_co": "Officer",
|
||||||
"request-email_co": "jane@mail.mil",
|
"request-email_co": "jane@mail.mil",
|
||||||
@ -44,16 +44,18 @@ def fv_data():
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def e_fv_data(pdf_upload):
|
def e_fv_data(pdf_upload):
|
||||||
return {
|
return {
|
||||||
"task_order-funding_type": "RDTE",
|
"legacy_task_order-funding_type": "RDTE",
|
||||||
"task_order-funding_type_other": "other",
|
"legacy_task_order-funding_type_other": "other",
|
||||||
"task_order-expiration_date": "1/1/{}".format(datetime.date.today().year + 1),
|
"legacy_task_order-expiration_date": "1/1/{}".format(
|
||||||
"task_order-clin_0001": "50000",
|
datetime.date.today().year + 1
|
||||||
"task_order-clin_0003": "13000",
|
),
|
||||||
"task_order-clin_1001": "30000",
|
"legacy_task_order-clin_0001": "50000",
|
||||||
"task_order-clin_1003": "7000",
|
"legacy_task_order-clin_0003": "13000",
|
||||||
"task_order-clin_2001": "30000",
|
"legacy_task_order-clin_1001": "30000",
|
||||||
"task_order-clin_2003": "7000",
|
"legacy_task_order-clin_1003": "7000",
|
||||||
"task_order-pdf": pdf_upload,
|
"legacy_task_order-clin_2001": "30000",
|
||||||
|
"legacy_task_order-clin_2003": "7000",
|
||||||
|
"legacy_task_order-pdf": pdf_upload,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -97,7 +99,7 @@ def test_update_fv_re_enter_pe_number(fv_data):
|
|||||||
def test_update_fv_invalid_task_order_number(fv_data):
|
def test_update_fv_invalid_task_order_number(fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {**fv_data, "task_order-number": MANUAL_TO_NUMBER}
|
data = {**fv_data, "legacy_task_order-number": MANUAL_TO_NUMBER}
|
||||||
update_fv = UpdateFinancialVerification(
|
update_fv = UpdateFinancialVerification(
|
||||||
TrueValidator,
|
TrueValidator,
|
||||||
TaskOrderNumberValidator(),
|
TaskOrderNumberValidator(),
|
||||||
@ -139,7 +141,7 @@ def test_update_fv_extended(fv_data, e_fv_data):
|
|||||||
def test_update_fv_extended_does_not_validate_task_order(fv_data, e_fv_data):
|
def test_update_fv_extended_does_not_validate_task_order(fv_data, e_fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {**fv_data, **e_fv_data, "task_order-number": "abc123"}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-number": "abc123"}
|
||||||
update_fv = UpdateFinancialVerification(
|
update_fv = UpdateFinancialVerification(
|
||||||
TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True
|
TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True
|
||||||
)
|
)
|
||||||
@ -197,7 +199,7 @@ def test_save_draft_allows_invalid_data():
|
|||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {
|
data = {
|
||||||
"task_order-number": MANUAL_TO_NUMBER,
|
"legacy_task_order-number": MANUAL_TO_NUMBER,
|
||||||
"request-pe_id": "123",
|
"request-pe_id": "123",
|
||||||
"request-ba_code": "a",
|
"request-ba_code": "a",
|
||||||
}
|
}
|
||||||
@ -229,44 +231,44 @@ def test_save_draft_and_then_submit():
|
|||||||
def test_updated_request_has_pdf(fv_data, e_fv_data):
|
def test_updated_request_has_pdf(fv_data, e_fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {**fv_data, **e_fv_data, "task_order-number": MANUAL_TO_NUMBER}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-number": MANUAL_TO_NUMBER}
|
||||||
updated_request = UpdateFinancialVerification(
|
updated_request = UpdateFinancialVerification(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
assert updated_request.task_order.pdf
|
assert updated_request.legacy_task_order.pdf
|
||||||
|
|
||||||
|
|
||||||
def test_can_save_draft_with_just_pdf(e_fv_data):
|
def test_can_save_draft_with_just_pdf(e_fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {"task_order-pdf": e_fv_data["task_order-pdf"]}
|
data = {"legacy_task_order-pdf": e_fv_data["legacy_task_order-pdf"]}
|
||||||
SaveFinancialVerificationDraft(
|
SaveFinancialVerificationDraft(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
||||||
assert form.task_order.pdf
|
assert form.legacy_task_order.pdf
|
||||||
|
|
||||||
|
|
||||||
def test_task_order_info_present_in_extended_form(fv_data, e_fv_data):
|
def test_task_order_info_present_in_extended_form(fv_data, e_fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {
|
data = {
|
||||||
"task_order-clin_0001": "1",
|
"legacy_task_order-clin_0001": "1",
|
||||||
"task_order-number": fv_data["task_order-number"],
|
"legacy_task_order-number": fv_data["legacy_task_order-number"],
|
||||||
}
|
}
|
||||||
SaveFinancialVerificationDraft(
|
SaveFinancialVerificationDraft(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
||||||
assert form.task_order.clin_0001.data
|
assert form.legacy_task_order.clin_0001.data
|
||||||
|
|
||||||
|
|
||||||
def test_update_ignores_empty_values(fv_data, e_fv_data):
|
def test_update_ignores_empty_values(fv_data, e_fv_data):
|
||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {**fv_data, **e_fv_data, "task_order-funding_type": ""}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-funding_type": ""}
|
||||||
SaveFinancialVerificationDraft(
|
SaveFinancialVerificationDraft(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
@ -276,14 +278,14 @@ def test_can_save_draft_with_funding_type(fv_data, e_fv_data):
|
|||||||
request = RequestFactory.create()
|
request = RequestFactory.create()
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
data = {
|
data = {
|
||||||
"task_order-number": fv_data["task_order-number"],
|
"legacy_task_order-number": fv_data["legacy_task_order-number"],
|
||||||
"task_order-funding_type": e_fv_data["task_order-funding_type"],
|
"legacy_task_order-funding_type": e_fv_data["legacy_task_order-funding_type"],
|
||||||
}
|
}
|
||||||
updated_request = SaveFinancialVerificationDraft(
|
updated_request = SaveFinancialVerificationDraft(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
assert updated_request.task_order.funding_type
|
assert updated_request.legacy_task_order.funding_type
|
||||||
|
|
||||||
|
|
||||||
def test_update_fv_route(client, user_session, fv_data):
|
def test_update_fv_route(client, user_session, fv_data):
|
||||||
@ -331,7 +333,7 @@ def test_manual_task_order_triggers_extended_form(
|
|||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
|
|
||||||
data = {**fv_data, **e_fv_data, "task_order-number": MANUAL_TO_NUMBER}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-number": MANUAL_TO_NUMBER}
|
||||||
|
|
||||||
UpdateFinancialVerification(
|
UpdateFinancialVerification(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
@ -352,7 +354,7 @@ def test_manual_to_does_not_trigger_approval(client, user_session, fv_data, e_fv
|
|||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
**e_fv_data,
|
**e_fv_data,
|
||||||
"task_order-number": MANUAL_TO_NUMBER,
|
"legacy_task_order-number": MANUAL_TO_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
user_session(user)
|
user_session(user)
|
||||||
@ -374,7 +376,7 @@ def test_eda_task_order_does_trigger_approval(client, user_session, fv_data, e_f
|
|||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
**e_fv_data,
|
**e_fv_data,
|
||||||
"task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
"legacy_task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
user_session(user)
|
user_session(user)
|
||||||
@ -396,7 +398,7 @@ def test_attachment_on_non_extended_form(client, user_session, fv_data, e_fv_dat
|
|||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
**e_fv_data,
|
**e_fv_data,
|
||||||
"task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
"legacy_task_order-number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
user_session(user)
|
user_session(user)
|
||||||
@ -420,7 +422,7 @@ def test_task_order_number_persists_in_form(fv_data, e_fv_data):
|
|||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
"task_order-number": MANUAL_TO_NUMBER,
|
"legacy_task_order-number": MANUAL_TO_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +434,7 @@ def test_task_order_number_persists_in_form(fv_data, e_fv_data):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
||||||
assert form.task_order.number.data == MANUAL_TO_NUMBER
|
assert form.legacy_task_order.number.data == MANUAL_TO_NUMBER
|
||||||
|
|
||||||
|
|
||||||
def test_can_submit_once_to_details_are_entered(fv_data, e_fv_data):
|
def test_can_submit_once_to_details_are_entered(fv_data, e_fv_data):
|
||||||
@ -440,7 +442,7 @@ def test_can_submit_once_to_details_are_entered(fv_data, e_fv_data):
|
|||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
"task_order-number": MANUAL_TO_NUMBER,
|
"legacy_task_order-number": MANUAL_TO_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +456,7 @@ def test_can_submit_once_to_details_are_entered(fv_data, e_fv_data):
|
|||||||
data = {
|
data = {
|
||||||
**fv_data,
|
**fv_data,
|
||||||
**e_fv_data,
|
**e_fv_data,
|
||||||
"task_order-number": MANUAL_TO_NUMBER,
|
"legacy_task_order-number": MANUAL_TO_NUMBER,
|
||||||
"request-pe_id": "0101228N",
|
"request-pe_id": "0101228N",
|
||||||
}
|
}
|
||||||
assert UpdateFinancialVerification(
|
assert UpdateFinancialVerification(
|
||||||
@ -466,7 +468,7 @@ def test_existing_task_order_with_pdf(fv_data, e_fv_data, client, user_session):
|
|||||||
# Use finver route to create initial TO #1, complete with PDF
|
# Use finver route to create initial TO #1, complete with PDF
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
data = {**fv_data, **e_fv_data, "task_order-number": MANUAL_TO_NUMBER}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-number": MANUAL_TO_NUMBER}
|
||||||
UpdateFinancialVerification(
|
UpdateFinancialVerification(
|
||||||
TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True
|
TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
@ -474,7 +476,7 @@ def test_existing_task_order_with_pdf(fv_data, e_fv_data, client, user_session):
|
|||||||
# Save draft on a new finver form, but with same number as TO #1
|
# Save draft on a new finver form, but with same number as TO #1
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
data = {"task_order-number": MANUAL_TO_NUMBER}
|
data = {"legacy_task_order-number": MANUAL_TO_NUMBER}
|
||||||
SaveFinancialVerificationDraft(
|
SaveFinancialVerificationDraft(
|
||||||
TrueValidator,
|
TrueValidator,
|
||||||
TaskOrderNumberValidator(),
|
TaskOrderNumberValidator(),
|
||||||
@ -497,19 +499,19 @@ def test_existing_task_order_with_pdf(fv_data, e_fv_data, client, user_session):
|
|||||||
def test_pdf_clearing(fv_data, e_fv_data, pdf_upload, pdf_upload2):
|
def test_pdf_clearing(fv_data, e_fv_data, pdf_upload, pdf_upload2):
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
request = RequestFactory.create(creator=user)
|
request = RequestFactory.create(creator=user)
|
||||||
data = {**fv_data, **e_fv_data, "task_order-pdf": pdf_upload}
|
data = {**fv_data, **e_fv_data, "legacy_task_order-pdf": pdf_upload}
|
||||||
|
|
||||||
SaveFinancialVerificationDraft(
|
SaveFinancialVerificationDraft(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
data = {**data, "task_order-pdf": pdf_upload2}
|
data = {**data, "legacy_task_order-pdf": pdf_upload2}
|
||||||
UpdateFinancialVerification(
|
UpdateFinancialVerification(
|
||||||
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
||||||
assert form.task_order.pdf.data == pdf_upload2.filename
|
assert form.legacy_task_order.pdf.data == pdf_upload2.filename
|
||||||
|
|
||||||
|
|
||||||
# TODO: This test manages an edge case for our current non-unique handling of
|
# TODO: This test manages an edge case for our current non-unique handling of
|
||||||
@ -523,10 +525,12 @@ def test_always_derives_pdf_filename(fv_data, e_fv_data, pdf_upload):
|
|||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
request_one = RequestFactory.create(creator=user)
|
request_one = RequestFactory.create(creator=user)
|
||||||
attachment = Attachment.attach(
|
attachment = Attachment.attach(
|
||||||
pdf_upload, resource="task_order", resource_id=request_one.id
|
pdf_upload, resource="legacy_task_order", resource_id=request_one.id
|
||||||
|
)
|
||||||
|
legacy_task_order = LegacyTaskOrderFactory.create(pdf=attachment)
|
||||||
|
request_two = RequestFactory.create(
|
||||||
|
creator=user, legacy_task_order=legacy_task_order
|
||||||
)
|
)
|
||||||
task_order = LegacyTaskOrderFactory.create(pdf=attachment)
|
|
||||||
request_two = RequestFactory.create(creator=user, task_order=task_order)
|
|
||||||
|
|
||||||
form_one = GetFinancialVerificationForm(
|
form_one = GetFinancialVerificationForm(
|
||||||
user, request_one, is_extended=True
|
user, request_one, is_extended=True
|
||||||
@ -535,5 +539,5 @@ def test_always_derives_pdf_filename(fv_data, e_fv_data, pdf_upload):
|
|||||||
user, request_two, is_extended=True
|
user, request_two, is_extended=True
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
assert form_one.task_order.pdf.data == attachment.filename
|
assert form_one.legacy_task_order.pdf.data == attachment.filename
|
||||||
assert form_two.task_order.pdf.data == attachment.filename
|
assert form_two.legacy_task_order.pdf.data == attachment.filename
|
||||||
|
Loading…
x
Reference in New Issue
Block a user