DD-254 domain class and method for checking if DD-254 is complete

This commit is contained in:
dandds 2019-02-18 09:20:23 -05:00
parent bfcee47db6
commit ad05c448cd
4 changed files with 46 additions and 1 deletions

View File

@ -4,6 +4,7 @@ from flask import current_app as app
from atst.database import db
from atst.models.task_order import TaskOrder
from atst.models.permissions import Permissions
from atst.models.dd_254 import DD254
from atst.domain.portfolios import Portfolios
from atst.domain.authz import Authorization
from .exceptions import NotFoundError
@ -171,3 +172,15 @@ class TaskOrders(object):
raise TaskOrderError(
"{} is not an officer role on task orders".format(officer_type)
)
class DD254s:
# TODO: standin implementation until we have a real download,
# sign, and verify process for the DD 254 PDF
@classmethod
def complete(cls, dd254):
for col in DD254.__table__.columns:
if getattr(dd254, col.name) is None:
return False
return True

View File

@ -213,3 +213,12 @@ TEAM_EXPERIENCE = [
PERIOD_OF_PERFORMANCE_LENGTH = [
(str(x + 1), translate_duration(x + 1)) for x in range(24)
]
REQUIRED_DISTRIBUTIONS = [
("contractor", "Contractor"),
("subcontractor", "Subcontractor"),
("cognizant_so", "Cognizant Security Office for Prime and Subcontractor"),
("overseas", "U.S. Activity Responsible for Overseas Security Administration"),
("administrative_ko", "Administrative Contracting Officer"),
("other", "Other as necessary"),
]

View File

@ -1,6 +1,6 @@
import pytest
from atst.domain.task_orders import TaskOrders, TaskOrderError
from atst.domain.task_orders import TaskOrders, TaskOrderError, DD254s
from atst.domain.exceptions import UnauthorizedError
from atst.models.attachment import Attachment
@ -9,6 +9,7 @@ from tests.factories import (
UserFactory,
PortfolioRoleFactory,
PortfolioFactory,
DD254Factory,
)
@ -113,3 +114,11 @@ def test_task_order_access():
"add_officer",
[task_order, "contracting_officer", rando.to_dictionary()],
)
def test_dd254_complete():
finished = DD254Factory.create()
unfinished = DD254Factory.create(certifying_official=None)
assert DD254s.complete(finished)
assert not DD254s.complete(unfinished)

View File

@ -24,6 +24,7 @@ from atst.domain.roles import Roles, PORTFOLIO_ROLES
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
from atst.models.environment_role import EnvironmentRole
from atst.models.invitation import Invitation, Status as InvitationStatus
from atst.models.dd_254 import DD254
from atst.domain.invitations import Invitations
@ -427,3 +428,16 @@ class TaskOrderFactory(Base):
so_email = factory.Faker("email")
so_phone_number = factory.LazyFunction(random_phone_number)
so_dod_id = factory.LazyFunction(random_dod_id)
class DD254Factory(Base):
class Meta:
model = DD254
certifying_official = factory.Faker("name")
co_title = factory.Faker("job")
co_address = factory.Faker("address")
co_phone = factory.LazyFunction(random_phone_number)
required_distribution = factory.LazyFunction(
lambda: [random_choice(data.REQUIRED_DISTRIBUTIONS)]
)