Cleaning properly previous versions
This commit is contained in:
parent
a302208890
commit
b4e127b3b7
|
@ -299,11 +299,12 @@ class ApprovalService(object):
|
|||
pending approvals and create a new approval for the latest version
|
||||
of the workflow."""
|
||||
|
||||
# Find any existing approvals for this workflow and approver.
|
||||
latest_approval_request = db.session.query(ApprovalModel). \
|
||||
# Find any existing approvals for this workflow.
|
||||
latest_approval_requests = db.session.query(ApprovalModel). \
|
||||
filter(ApprovalModel.workflow_id == workflow_id). \
|
||||
filter(ApprovalModel.approver_uid == approver_uid). \
|
||||
order_by(desc(ApprovalModel.version)).first()
|
||||
order_by(desc(ApprovalModel.version))
|
||||
|
||||
latest_approver_request = latest_approval_requests.filter(ApprovalModel.approver_uid == approver_uid).first()
|
||||
|
||||
# Construct as hash of the latest files to see if things have changed since
|
||||
# the last approval.
|
||||
|
@ -318,16 +319,20 @@ class ApprovalService(object):
|
|||
# If an existing approval request exists and no changes were made, do nothing.
|
||||
# If there is an existing approval request for a previous version of the workflow
|
||||
# then add a new request, and cancel any waiting/pending requests.
|
||||
if latest_approval_request:
|
||||
request_file_ids = list(file.file_data_id for file in latest_approval_request.approval_files)
|
||||
if latest_approver_request:
|
||||
request_file_ids = list(file.file_data_id for file in latest_approver_request.approval_files)
|
||||
current_data_file_ids.sort()
|
||||
request_file_ids.sort()
|
||||
other_approver = latest_approval_requests.filter(ApprovalModel.approver_uid != approver_uid).first()
|
||||
if current_data_file_ids == request_file_ids:
|
||||
return # This approval already exists.
|
||||
return # This approval already exists or we're updating other approver.
|
||||
else:
|
||||
latest_approval_request.status = ApprovalStatus.CANCELED.value
|
||||
db.session.add(latest_approval_request)
|
||||
version = latest_approval_request.version + 1
|
||||
for approval_request in latest_approval_requests:
|
||||
if (approval_request.version == latest_approver_request.version and
|
||||
approval_request.status != ApprovalStatus.CANCELED.value):
|
||||
approval_request.status = ApprovalStatus.CANCELED.value
|
||||
db.session.add(approval_request)
|
||||
version = latest_approver_request.version + 1
|
||||
else:
|
||||
version = 1
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from tests.base_test import BaseTest
|
||||
from crc import db
|
||||
from crc.models.approval import ApprovalModel
|
||||
from crc.services.approval_service import ApprovalService
|
||||
from crc.services.approval_service import ApprovalService, ApprovalStatus
|
||||
from crc.services.file_service import FileService
|
||||
from crc.services.workflow_processor import WorkflowProcessor
|
||||
|
||||
|
@ -83,6 +83,34 @@ class TestApprovalsService(BaseTest):
|
|||
|
||||
self.assertEqual(len(records), 2)
|
||||
|
||||
def test_new_approval_cancels_all_previous_approvals(self):
|
||||
self.create_reference_document()
|
||||
workflow = self.create_workflow("empty_workflow")
|
||||
FileService.add_workflow_file(workflow_id=workflow.id,
|
||||
name="anything.png", content_type="text",
|
||||
binary_data=b'5678', irb_doc_code="UVACompl_PRCAppr" )
|
||||
ApprovalService.add_approval(study_id=workflow.study_id, workflow_id=workflow.id, approver_uid="dhf8r")
|
||||
ApprovalService.add_approval(study_id=workflow.study_id, workflow_id=workflow.id, approver_uid="lb3dp")
|
||||
|
||||
current_count = ApprovalModel.query.count()
|
||||
self.assertTrue(current_count, 2)
|
||||
|
||||
FileService.add_workflow_file(workflow_id=workflow.id,
|
||||
name="borderline.png", content_type="text",
|
||||
binary_data=b'906090', irb_doc_code="AD_CoCAppr" )
|
||||
|
||||
ApprovalService.add_approval(study_id=workflow.study_id, workflow_id=workflow.id, approver_uid="dhf8r")
|
||||
|
||||
current_count = ApprovalModel.query.count()
|
||||
canceled_count = ApprovalModel.query.filter(ApprovalModel.status == ApprovalStatus.CANCELED.value)
|
||||
self.assertTrue(current_count, 2)
|
||||
self.assertTrue(current_count, 3)
|
||||
|
||||
ApprovalService.add_approval(study_id=workflow.study_id, workflow_id=workflow.id, approver_uid="lb3dp")
|
||||
|
||||
current_count = ApprovalModel.query.count()
|
||||
self.assertTrue(current_count, 4)
|
||||
|
||||
def test_new_approval_sends_proper_emails(self):
|
||||
self.assertEqual(1, 1)
|
||||
|
||||
|
|
Loading…
Reference in New Issue