associate ccpo user to request review

This commit is contained in:
dandds 2018-09-10 16:42:42 -04:00
parent 041cfe878f
commit d38261f439
6 changed files with 26 additions and 12 deletions

View File

@ -7,6 +7,7 @@ Create Date: 2018-09-06 15:15:40.666840
""" """
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
@ -27,16 +28,19 @@ def upgrade():
sa.Column('phone_mao', sa.String(), nullable=True), sa.Column('phone_mao', sa.String(), nullable=True),
sa.Column('fname_ccpo', sa.String(), nullable=True), sa.Column('fname_ccpo', sa.String(), nullable=True),
sa.Column('lname_ccpo', sa.String(), nullable=True), sa.Column('lname_ccpo', sa.String(), nullable=True),
sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.add_column('request_status_events', sa.Column('request_review_id', sa.Integer(), nullable=True)) op.add_column('request_status_events', sa.Column('request_review_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'request_status_events', 'request_reviews', ['request_review_id'], ['id']) op.create_foreign_key(None, 'request_status_events', 'request_reviews', ['request_review_id'], ['id'])
op.create_foreign_key(None, 'request_reviews', 'users', ['user_id'], ['id'])
# ### end Alembic commands ### # ### end Alembic commands ###
def downgrade(): def downgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(None, 'request_status_events', type_='foreignkey') op.drop_constraint(None, 'request_status_events', type_='foreignkey')
op.drop_constraint(None, 'request_reviews', type_='foreignkey')
op.drop_column('request_status_events', 'request_review_id') op.drop_column('request_status_events', 'request_review_id')
op.drop_table('request_reviews') op.drop_table('request_reviews')
# ### end Alembic commands ### # ### end Alembic commands ###

View File

@ -272,8 +272,8 @@ WHERE requests_with_status.status = :status
return request return request
@classmethod @classmethod
def _add_review(cls, request, review_data): def _add_review(cls, user, request, review_data):
request.latest_status.review = RequestReview(**review_data) request.latest_status.review = RequestReview(reviewer=user, **review_data)
db.session.add(request) db.session.add(request)
db.session.commit() db.session.commit()
@ -281,13 +281,13 @@ WHERE requests_with_status.status = :status
return request return request
@classmethod @classmethod
def accept_for_financial_verification(cls, request, review_data): def accept_for_financial_verification(cls, user, request, review_data):
Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION) Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION)
return Requests._add_review(request, review_data) return Requests._add_review(user, request, review_data)
@classmethod @classmethod
def request_changes(cls, request, review_data): def request_changes(cls, user, request, review_data):
Requests.set_status(request, RequestStatus.CHANGES_REQUESTED) Requests.set_status(request, RequestStatus.CHANGES_REQUESTED)
return Requests._add_review(request, review_data) return Requests._add_review(user, request, review_data)

View File

@ -1,4 +1,4 @@
from sqlalchemy import Column, BigInteger, String from sqlalchemy import Column, BigInteger, String, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base
@ -10,6 +10,9 @@ class RequestReview(Base):
id = Column(BigInteger, primary_key=True) id = Column(BigInteger, primary_key=True)
status = relationship("RequestStatusEvent", back_populates="review") status = relationship("RequestStatusEvent", back_populates="review")
user_id = Column(ForeignKey("users.id"), nullable=False)
reviewer = relationship("User")
comment = Column(String) comment = Column(String)
fname_mao = Column(String) fname_mao = Column(String)
lname_mao = Column(String) lname_mao = Column(String)

View File

@ -60,9 +60,11 @@ def submit_approval(request_id):
form = CCPOReviewForm(http_request.form) form = CCPOReviewForm(http_request.form)
if form.validate(): if form.validate():
if http_request.form.get("approved"): if http_request.form.get("approved"):
Requests.accept_for_financial_verification(request, form.data) Requests.accept_for_financial_verification(
g.current_user, request, form.data
)
else: else:
Requests.request_changes(request, form.data) Requests.request_changes(g.current_user, request, form.data)
return redirect(url_for("requests.requests_index")) return redirect(url_for("requests.requests_index"))
else: else:

View File

@ -184,7 +184,9 @@ def test_set_status_sets_revision():
def test_accept_for_financial_verification(): def test_accept_for_financial_verification():
request = RequestFactory.create() request = RequestFactory.create()
review_data = RequestReviewFactory.dictionary() review_data = RequestReviewFactory.dictionary()
Requests.accept_for_financial_verification(request, review_data) Requests.accept_for_financial_verification(
UserFactory.create(), request, review_data
)
assert request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION assert request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION
current_review = request.latest_status.review current_review = request.latest_status.review
assert current_review.fname_mao == review_data["fname_mao"] assert current_review.fname_mao == review_data["fname_mao"]

View File

@ -78,12 +78,15 @@ def test_annual_spend():
def test_reviews(): def test_reviews():
request = RequestFactory.create() request = RequestFactory.create()
ccpo = UserFactory.from_atat_role("ccpo")
request.status_events = [ request.status_events = [
RequestStatusEventFactory.create( RequestStatusEventFactory.create(
revision=request.latest_revision, review=RequestReviewFactory.create() revision=request.latest_revision,
review=RequestReviewFactory.create(reviewer=ccpo),
), ),
RequestStatusEventFactory.create( RequestStatusEventFactory.create(
revision=request.latest_revision, review=RequestReviewFactory.create() revision=request.latest_revision,
review=RequestReviewFactory.create(reviewer=ccpo),
), ),
RequestStatusEventFactory.create(revision=request.latest_revision), RequestStatusEventFactory.create(revision=request.latest_revision),
] ]