From a0fa59380ccb8ecfff1ca31a2b3c8fa3fc1f8e47 Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Sun, 7 Jan 2018 07:37:08 -0300 Subject: [PATCH] Upgrade project contracts to latest specs --- app/components/project/modals/contract.coffee | 52 ++++++++++++------- app/models/panda/project.coffee | 5 +- app/templates/project/-contract.emblem | 2 +- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/app/components/project/modals/contract.coffee b/app/components/project/modals/contract.coffee index 53f0a92..0a37430 100644 --- a/app/components/project/modals/contract.coffee +++ b/app/components/project/modals/contract.coffee @@ -22,17 +22,25 @@ export default ModalBase.extend project = @get('model') component = @ project_name = String(project.get('name')).replace(/[\W_]/g, '-') + is_batch_project = project.get('instance_scope') is 'batch' @set 'download_file_name', "PANDA-contract-#{project_name}.json" @set 'contract', DS.PromiseObject.create promise: new Ember.RSVP.Promise (resolve) -> contract = generating_project: project.get('id') + identifier: project.get('identifier') contract_version: 'v1' instance_scope: project.get('instance_scope') - workflow_groups: [] - identifier: project.get('identifier') + workflow_groups: [] workflow_actions: [] - scenarios: [] + scenarios: [] + if instance_type = project.get('workflow_instance_type.name') + contract.instance_type = instance_type + if is_batch_project + contract.batch_size_lower_value = project.get('batch_size_lower_value') + contract.batch_size_upper_value = project.get('batch_size_upper_value') + if reference_date_day_of_week = project.get('reference_date_day_of_week') + contract.reference_date_day_of_week = reference_date_day_of_week project.get('sorted_workflow_groups').forEach (workflow_group) -> workflow_group_object = name: workflow_group.get('name') @@ -41,23 +49,24 @@ export default ModalBase.extend offset_base: workflow_group.get('offset_base.identifier') || null # no undefined scenarios: workflow_group.get('project_scenarios').mapBy('identifier') add_offset_to workflow_group_object, ['offset', 'duration', 'batch_element_threshold'], workflow_group - if project.get('instance_scope') is 'batch' + if is_batch_project add_offset_to workflow_group_object, 'batch_element_threshold', workflow_group contract.workflow_groups.push workflow_group_object project.get('sorted_workflow_action_definitions').forEach (workflow_action_definition) -> workflow_action_definition_object = - identifier: workflow_action_definition.get('identifier') - title: workflow_action_definition.get('title') - extra_info: workflow_action_definition.get('extra_info') - value_type: workflow_action_definition.get('value_type') + identifier: workflow_action_definition.get('identifier') + title: workflow_action_definition.get('title') + position: workflow_action_definition.get('position') + extra_info: workflow_action_definition.get('extra_info') + value_type: workflow_action_definition.get('value_type') value_type_select_options: workflow_action_definition.get('value_type_select_options') - overdue_coulance: workflow_action_definition.get('overdue_coulance') - offset_type: workflow_action_definition.get('offset_type') - workflow_group: workflow_action_definition.get('workflow_group.identifier') || null # no undefined - confirms_workflow_action: workflow_action_definition.get('confirms_workflow_action_definition.identifier') || null # no undefined - completes_group: workflow_action_definition.get('completes_group') - organization: workflow_action_definition.get('organization.identifier') - scenarios: workflow_action_definition.get('project_scenarios').mapBy('identifier') + overdue_coulance: workflow_action_definition.get('overdue_coulance') + offset_type: workflow_action_definition.get('offset_type') + workflow_group: workflow_action_definition.get('workflow_group.identifier') || null # no undefined + confirms_workflow_action: workflow_action_definition.get('confirms_workflow_action_definition.identifier') || null # no undefined + completes_group: workflow_action_definition.get('completes_group') + organization: workflow_action_definition.get('organization.identifier') + scenarios: workflow_action_definition.get('project_scenarios').mapBy('identifier') contract.workflow_actions.push workflow_action_definition_object workflow_action_definition.get('workflow_action_offsets').forEach (workflow_action_offset) -> @@ -66,14 +75,17 @@ export default ModalBase.extend if base_identifier = workflow_action_offset.get('base_workflow_action_definition.identifier') offset_object.base_workflow_action = base_identifier add_offset_to offset_object, 'offset', workflow_action_offset - if project.get('instance_scope') is 'batch' + if is_batch_project add_offset_to offset_object, 'batch_element_threshold', workflow_action_offset workflow_action_definition_object.action_offsets.push offset_object - if workflow_action_definition.get('offset_type') is 'attached' - workflow_action_definition_object.attached_to = - identifier: workflow_action_definition.get('workflow_action_connection.base_workflow_action_definition.identifier') - conditional_value: workflow_action_definition.get('workflow_action_connection.conditional_base_value') + workflow_action_definition.get('workflow_action_connections').forEach (workflow_action_connection) -> + workflow_action_definition_object.action_connections ||= [] + connection_object = + identifier: workflow_action_connection.get('base_workflow_action_definition.identifier') + connection_type: workflow_action_connection.get('connection_type') + conditional_value: workflow_action_connection.get('conditional_base_value') + workflow_action_definition_object.action_connections.push connection_object workflow_action_definition.get('workflow_action_constraints').forEach (workflow_action_constraint) -> workflow_action_definition_object.action_constraints ||= [] diff --git a/app/models/panda/project.coffee b/app/models/panda/project.coffee index d7bc19c..6381db9 100644 --- a/app/models/panda/project.coffee +++ b/app/models/panda/project.coffee @@ -26,8 +26,9 @@ export default DS.Model.extend sorted_workflow_groups: Ember.computed.sort('workflow_groups', 'workflowGroupSort') sorted_workflow_action_definitions: Ember.computed 'workflow_groups.@each.position', 'workflow_action_definitions.@each.position', -> @get('workflow_action_definitions').map((r) -> - base = r.get('workflow_group.position') || 100000 - r.set('absolute_sorter', base + r.get('position')) + base = r.get('workflow_group.position') + base = 100 unless Number.isFinite(base) # more than 100 groups is stupid, more than 200 actions in a group as well + r.set('absolute_sorter', (200 * base) + r.get('position')) r ).sortBy 'absolute_sorter' unassigned_workflow_action_definitions: Ember.computed 'workflow_action_definitions.@each.workflow_group.id', -> diff --git a/app/templates/project/-contract.emblem b/app/templates/project/-contract.emblem index be1e306..1d1e91e 100644 --- a/app/templates/project/-contract.emblem +++ b/app/templates/project/-contract.emblem @@ -3,7 +3,7 @@ and project cloning. In addition to this some other important objectives will be backup and project history logging. if contract.isFulfilled - = format-json value=contract.content top_title='Contract' + = format-json value=contract.content top_title='Contract' nesting_level=1 else .ui.icon.message i.notched.circle.loading.icon