diff --git a/crc/models/study.py b/crc/models/study.py index aea002a0..d4599c57 100644 --- a/crc/models/study.py +++ b/crc/models/study.py @@ -44,7 +44,7 @@ class StudyModel(db.Model): class WorkflowMetadata(object): def __init__(self, id, name, display_name, description, spec_version, category_id, state: WorkflowState, status: WorkflowStatus, - total_tasks, completed_tasks): + total_tasks, completed_tasks, display_order): self.id = id self.name = name self.display_name = display_name @@ -55,6 +55,7 @@ class WorkflowMetadata(object): self.status = status self.total_tasks = total_tasks self.completed_tasks = completed_tasks + self.display_order = display_order @classmethod @@ -69,7 +70,9 @@ class WorkflowMetadata(object): state=WorkflowState.optional, status=workflow.status, total_tasks=workflow.total_tasks, - completed_tasks=workflow.completed_tasks) + completed_tasks=workflow.completed_tasks, + display_order=workflow.workflow_spec.display_order + ) return instance @@ -79,7 +82,7 @@ class WorkflowMetadataSchema(ma.Schema): class Meta: model = WorkflowMetadata additional = ["id", "name", "display_name", "description", - "total_tasks", "completed_tasks"] + "total_tasks", "completed_tasks", "display_order"] unknown = INCLUDE @@ -152,4 +155,4 @@ class StudySchema(ma.Schema): @marshmallow.post_load def make_study(self, data, **kwargs): """Can load the basic study data for updates to the database, but categories are write only""" - return Study(**data) \ No newline at end of file + return Study(**data) diff --git a/crc/models/workflow.py b/crc/models/workflow.py index bae655bc..799549ac 100644 --- a/crc/models/workflow.py +++ b/crc/models/workflow.py @@ -27,6 +27,7 @@ class WorkflowSpecModel(db.Model): id = db.Column(db.String, primary_key=True) name = db.Column(db.String) display_name = db.Column(db.String) + display_order = db.Column(db.Integer, nullable=True) description = db.Column(db.Text) primary_process_id = db.Column(db.String) category_id = db.Column(db.Integer, db.ForeignKey('workflow_spec_category.id'), nullable=True) diff --git a/example_data.py b/example_data.py index 9e83c044..434abc31 100644 --- a/example_data.py +++ b/example_data.py @@ -78,80 +78,93 @@ class ExampleDataLoader: name="irb_api_personnel", display_name="IRB API Personnel", description="TBD", - category_id=0) + category_id=0, + display_order=0) self.create_spec(id="irb_api_details", name="irb_api_details", display_name="Protocol Builder Data", description="TBD", - category_id=0) + category_id=0, + display_order=1) # Core Info self.create_spec(id="core_info", name="core_info", display_name="Core Info", description="TBD", - category_id=1) + category_id=1, + display_order=0) self.create_spec(id="core_info_approvals_ids", name="core_info_approvals_ids", display_name="Core Info - Approvals - IDS", description="TBD", - category_id=1) + category_id=1, + display_order=1) self.create_spec(id="core_info_data_security_plan_outside", name="core_info_data_security_plan_outside", display_name="Core Info - Data Security Plan - Outside", description="TBD", - category_id=1) + category_id=1, + display_order=2) # Approvals self.create_spec(id="ids_full_submission", name="ids_full_submission", display_name="Investigative Drug Services (IDS) Full Submission", description="TBD", - category_id=2) + category_id=2, + display_order=0) self.create_spec(id="ids_waiver", name="ids_waiver", display_name="Investigational Drug Service (IDS) Waiver", description="TBD", - category_id=2) + category_id=2, + display_order=1) # Data Security Plan self.create_spec(id="data_security_plan_inside", name="data_security_plan_inside", display_name="Data Security Plan - Inside", description="TBD", - category_id=3) + category_id=3, + display_order=0) self.create_spec(id="data_security_plan_outside", name="data_security_plan_outside", display_name="Data Security Plan - Outside", description="TBD", - category_id=3) + category_id=3, + display_order=1) self.create_spec(id="data_security_plan_generate", name="data_security_plan_generate", display_name="Data Security Plan - Generate", description="TBD", - category_id=3) + category_id=3, + display_order=2) # Finance self.create_spec(id="sponsor_funding_source", name="sponsor_funding_source", display_name="Sponsor Funding Source", description="TBD", - category_id=4) + category_id=4, + display_order=0) self.create_spec(id="finance", name="finance", display_name="Finance Data", description="TBD", - category_id=4) + category_id=4, + display_order=1) # Notifications self.create_spec(id="notifications", name="notifications", display_name="Notifications", description="TBD", - category_id=5) + category_id=5, + display_order=0) - def create_spec(self, id, name, display_name="", description="", filepath=None, master_spec=False, category_id=None): + def create_spec(self, id, name, display_name="", description="", filepath=None, master_spec=False, category_id=None, display_order=None): """Assumes that a directory exists in static/bpmn with the same name as the given id. further assumes that the [id].bpmn is the primary file for the workflow. returns an array of data models to be added to the database.""" @@ -162,7 +175,8 @@ class ExampleDataLoader: display_name=display_name, description=description, is_master_spec=master_spec, - category_id=category_id) + category_id=category_id, + display_order=display_order) db.session.add(spec) db.session.commit() if not filepath: diff --git a/migrations/versions/7be7cecbeea8_.py b/migrations/versions/7be7cecbeea8_.py new file mode 100644 index 00000000..0ef02e66 --- /dev/null +++ b/migrations/versions/7be7cecbeea8_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: 7be7cecbeea8 +Revises: 7c0de7621a1f +Create Date: 2020-04-09 14:23:37.384927 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '7be7cecbeea8' +down_revision = '7c0de7621a1f' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('workflow_spec', sa.Column('display_order', sa.Integer(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('workflow_spec', 'display_order') + # ### end Alembic commands ###