2022-03-14 16:00:53 -04:00
|
|
|
from SpiffWorkflow.exceptions import WorkflowTaskExecException
|
|
|
|
|
2021-04-08 13:42:17 -04:00
|
|
|
from crc import session
|
|
|
|
from crc.api.common import ApiError
|
2022-04-19 14:56:34 -04:00
|
|
|
from crc.models.file import FileModel
|
2021-04-08 13:42:17 -04:00
|
|
|
from crc.scripts.script import Script
|
2021-07-06 13:10:20 -04:00
|
|
|
from crc.services.document_service import DocumentService
|
2022-02-02 12:59:56 -05:00
|
|
|
from crc.services.user_file_service import UserFileService
|
2021-04-08 13:42:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
class DeleteFile(Script):
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def process_document_deletion(doc_code, workflow_id, task):
|
2021-07-06 13:10:20 -04:00
|
|
|
if DocumentService.is_allowed_document(doc_code):
|
2022-04-19 14:56:34 -04:00
|
|
|
result = session.query(FileModel).filter(
|
|
|
|
FileModel.workflow_id == workflow_id, FileModel.irb_doc_code == doc_code).all()
|
|
|
|
if isinstance(result, list) and len(result) > 0 and isinstance(result[0], FileModel):
|
2021-04-08 13:42:17 -04:00
|
|
|
for file in result:
|
2022-04-15 11:45:13 -04:00
|
|
|
UserFileService().delete_file(file.id)
|
2021-04-08 13:42:17 -04:00
|
|
|
else:
|
2022-03-14 16:00:53 -04:00
|
|
|
raise WorkflowTaskExecException(task, f'delete_file() failed. No document of type {doc_code}'
|
|
|
|
f' was found for this workflow.')
|
|
|
|
|
2021-04-08 13:42:17 -04:00
|
|
|
else:
|
2022-03-14 16:00:53 -04:00
|
|
|
raise WorkflowTaskExecException(task, f'delete_file() failed. {doc_code} is not valid document code.')
|
2021-04-08 13:42:17 -04:00
|
|
|
|
|
|
|
def get_codes(self, task, args, kwargs):
|
|
|
|
if 'code' in kwargs:
|
|
|
|
if isinstance(kwargs['code'], list):
|
|
|
|
codes = kwargs['code']
|
|
|
|
else:
|
|
|
|
codes = [kwargs['code']]
|
|
|
|
else:
|
|
|
|
codes = []
|
|
|
|
for arg in args:
|
|
|
|
if isinstance(arg, list):
|
|
|
|
codes.extend(arg)
|
|
|
|
else:
|
|
|
|
codes.append(arg)
|
|
|
|
|
|
|
|
if codes is None or len(codes) == 0:
|
2022-03-14 16:00:53 -04:00
|
|
|
raise WorkflowTaskExecException(task, f'delete_file() failed. Please provide a document code.')
|
|
|
|
|
2021-04-08 13:42:17 -04:00
|
|
|
return codes
|
|
|
|
|
|
|
|
def get_description(self):
|
|
|
|
return """Delete an IRB document from a workflow"""
|
|
|
|
|
|
|
|
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
|
|
|
|
doc_codes = self.get_codes(task, args, kwargs)
|
|
|
|
for code in doc_codes:
|
2022-04-19 14:56:34 -04:00
|
|
|
result = session.query(FileModel).filter(
|
|
|
|
FileModel.workflow_id == workflow_id, FileModel.irb_doc_code == code).all()
|
2021-04-08 13:42:17 -04:00
|
|
|
if not result:
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
def do_task(self, task, study_id, workflow_id, *args, **kwargs):
|
|
|
|
doc_codes = self.get_codes(task, args, kwargs)
|
|
|
|
for doc_code in doc_codes:
|
|
|
|
self.process_document_deletion(doc_code, workflow_id, task)
|