Code for reordering Workflow Spec Categories
Still need to work on edge cases where you try to move past top or bottom of list Still need to work on tests
This commit is contained in:
parent
f2201a3cef
commit
070a9c9350
|
@ -343,7 +343,18 @@ def delete_workflow_spec_category(cat_id):
|
|||
|
||||
|
||||
def reorder_workflow_spec_category(cat_id, direction):
|
||||
pass
|
||||
if direction not in ('up', 'down'):
|
||||
raise ApiError(code='bad_direction',
|
||||
message='The direction must be `up` or `down`.')
|
||||
category = session.query(WorkflowSpecCategoryModel).\
|
||||
filter(WorkflowSpecCategoryModel.id == cat_id).first()
|
||||
if category:
|
||||
ordered_categories = WorkflowService.reorder_workflow_spec_category(category, direction)
|
||||
schema = WorkflowSpecCategoryModelSchema(many=True)
|
||||
return schema.dump(ordered_categories)
|
||||
else:
|
||||
return ApiError(code='bad_category_id',
|
||||
message=f'The category id {cat_id} did not return a Workflow Spec Category. Make sure it is a valid ID.')
|
||||
|
||||
|
||||
def lookup(workflow_id, task_spec_name, field_id, query=None, value=None, limit=10):
|
||||
|
|
|
@ -30,7 +30,7 @@ from crc.models.file import LookupDataModel, FileModel, File, FileSchema
|
|||
from crc.models.study import StudyModel
|
||||
from crc.models.task_event import TaskEventModel
|
||||
from crc.models.user import UserModel, UserModelSchema
|
||||
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecModel, WorkflowSpecModelSchema
|
||||
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecModel, WorkflowSpecCategoryModel
|
||||
from crc.services.data_store_service import DataStoreBase
|
||||
|
||||
from crc.services.document_service import DocumentService
|
||||
|
@ -933,6 +933,8 @@ class WorkflowService(object):
|
|||
@staticmethod
|
||||
def reorder_workflow_spec(spec, direction):
|
||||
category_id = spec.category_id
|
||||
# Direction is either `up` or `down`
|
||||
# This is checked in api.workflow.reorder_workflow_spec
|
||||
if direction == 'up':
|
||||
neighbor = session.query(WorkflowSpecModel). \
|
||||
filter(WorkflowSpecModel.category_id == category_id). \
|
||||
|
@ -954,3 +956,26 @@ class WorkflowService(object):
|
|||
filter(WorkflowSpecModel.category_id == category_id). \
|
||||
order_by(WorkflowSpecModel.display_order).all()
|
||||
return ordered_specs
|
||||
|
||||
@staticmethod
|
||||
def reorder_workflow_spec_category(category, direction):
|
||||
# Direction is either `up` or `down`
|
||||
# This is checked in api.workflow.reorder_workflow_spec_category
|
||||
if direction == 'up':
|
||||
neighbor = session.query(WorkflowSpecCategoryModel).\
|
||||
filter(WorkflowSpecCategoryModel.display_order == category.display_order - 1).\
|
||||
first()
|
||||
neighbor.display_order += 1
|
||||
category.display_order -= 1
|
||||
if direction == 'down':
|
||||
neighbor = session.query(WorkflowSpecCategoryModel).\
|
||||
filter(WorkflowSpecCategoryModel.display_order == category.display_order + 1).\
|
||||
first()
|
||||
neighbor.display_order -= 1
|
||||
category.display_order += 1
|
||||
session.add(neighbor)
|
||||
session.add(category)
|
||||
session.commit()
|
||||
ordered_categories = session.query(WorkflowSpecCategoryModel).\
|
||||
order_by(WorkflowSpecCategoryModel.display_order).all()
|
||||
return ordered_categories
|
||||
|
|
Loading…
Reference in New Issue