From 824962c0844e2c5390485ec46ec179358e8767c5 Mon Sep 17 00:00:00 2001 From: zmagod Date: Mon, 23 Apr 2018 11:33:16 +0200 Subject: [PATCH 1/3] propagate assigned repository items in workflow [fixes SCI-2261] --- .../repositories/repository_datatable.js.erb | 52 ++++++++++++++++--- app/controllers/my_modules_controller.rb | 48 ++++++++++++++++- .../_assign_repository_records_modal.html.erb | 37 +++++++++++++ ...unassign_repository_records_modal.html.erb | 36 +++++++++++++ app/views/my_modules/repository.html.erb | 8 +-- app/views/shared/sidebar/_my_modules.html.erb | 6 ++- config/locales/en.yml | 8 ++- config/routes.rb | 6 +++ 8 files changed, 187 insertions(+), 14 deletions(-) create mode 100644 app/views/my_modules/modals/_assign_repository_records_modal.html.erb create mode 100644 app/views/my_modules/modals/_unassign_repository_records_modal.html.erb diff --git a/app/assets/javascripts/repositories/repository_datatable.js.erb b/app/assets/javascripts/repositories/repository_datatable.js.erb index 875f825b2..e1782d3bc 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js.erb +++ b/app/assets/javascripts/repositories/repository_datatable.js.erb @@ -508,19 +508,43 @@ var RepositoryDatatable = (function(global) { }); }; - global.onClickAssignRecords = function() { + global.openAssignRecordsModal = function() { + $.post( + $('#assignRepositoryRecords').data('assign-url-modal'), + { selected_rows: rowsSelected }) + .done( + function(data) { + $(data.html).appendTo('body').promise().done(function() { + $('#assginRepositoryRecordModal').modal('show'); + }); + } + ); + } + + global.hideAssignUnasignModal = function(id) { + $(id).modal('hide').promise().done( + function() { + $(id).remove(); + } + ) + } + + global.submitAssignRepositoryRecord = function(option) { animateSpinner(); $.ajax({ - url: $('#assignRepositoryRecords').data('assign-url'), + url: $('#assginRepositoryRecordModal').data('assign-url'), type: 'POST', dataType: 'json', - data: { selected_rows: rowsSelected }, + data: { selected_rows: rowsSelected, + downstream: (option === 'downstream') }, success: function(data) { + hideAssignUnasignModal('#assginRepositoryRecordModal'); HelperModule.flashAlertMsg(data.flash, 'success'); onClickCancel(); clearRowSelection(); }, error: function(data) { + hideAssignUnasignModal('#assginRepositoryRecordModal'); HelperModule.flashAlertMsg(data.responseJSON.flash, 'danger'); onClickCancel(); clearRowSelection(); @@ -528,19 +552,35 @@ var RepositoryDatatable = (function(global) { }); } - global.onClickUnassignRecords = function() { + global.openUnassignRecordsModal = function() { + $.post( + $('#unassignRepositoryRecords').data('unassign-url'), + { selected_rows: rowsSelected }) + .done( + function(data) { + $(data.html).appendTo('body').promise().done(function() { + $('#unAssginRepositoryRecordModal').modal('show'); + }); + } + ); + } + + global.submitUnassignRepositoryRecord = function(option) { animateSpinner(); $.ajax({ - url: $('#unassignRepositoryRecords').data('unassign-url'), + url: $('#unAssginRepositoryRecordModal').data('unassign-url'), type: 'POST', dataType: 'json', - data: {selected_rows: rowsSelected}, + data: { selected_rows: rowsSelected, + downstream: (option === 'downstream') }, success: function(data) { + hideAssignUnasignModal('#unAssginRepositoryRecordModal'); HelperModule.flashAlertMsg(data.flash, 'success'); onClickCancel(); clearRowSelection(); }, error: function(data) { + hideAssignUnasignModal('#unAssginRepositoryRecordModal'); HelperModule.flashAlertMsg(data.responseJSON.flash, 'danger'); onClickCancel(); clearRowSelection(); diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index 1e10c3c99..6b5d3f327 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -12,10 +12,14 @@ class MyModulesController < ApplicationController assign_samples unassign_samples delete_samples toggle_task_state samples_index archive complete_my_module repository repository_index - assign_repository_records unassign_repository_records) + assign_repository_records unassign_repository_records + unassign_repository_records_modal + assign_repository_records_modal) before_action :load_vars_nested, only: %i(new create) before_action :load_repository, only: %i(assign_repository_records unassign_repository_records + unassign_repository_records_modal + assign_repository_records_modal repository_index) before_action :load_projects_by_teams, only: %i(protocols results activities samples repository archive) @@ -391,6 +395,7 @@ class MyModulesController < ApplicationController def assign_repository_records if params[:selected_rows].present? && params[:repository_id].present? records_names = [] + downstream = ActiveModel::Type::Boolean.new.cast(params[:downstream]) params[:selected_rows].each do |id| record = RepositoryRow.find_by_id(id) @@ -398,11 +403,22 @@ class MyModulesController < ApplicationController record.last_modified_by = current_user record.save records_names << record.name + MyModuleRepositoryRow.create!( my_module: @my_module, repository_row: record, assigned_by: current_user ) + + next unless downstream + @my_module.downstream_modules.each do |my_module| + next if my_module.repository_rows.include?(record) + MyModuleRepositoryRow.create!( + my_module: my_module, + repository_row: record, + assigned_by: current_user + ) + end end if records_names.any? @@ -440,6 +456,7 @@ class MyModulesController < ApplicationController def unassign_repository_records if params[:selected_rows].present? && params[:repository_id].present? records = [] + downstream = ActiveModel::Type::Boolean.new.cast(params[:downstream]) params[:selected_rows].each do |id| record = RepositoryRow.find_by_id(id) @@ -450,6 +467,13 @@ class MyModulesController < ApplicationController end @my_module.repository_rows.destroy(records & @my_module.repository_rows) + + if downstream + @my_module.downstream_modules.each do |my_module| + my_module.repository_rows.destroy(records & my_module.repository_rows) + end + end + if records.any? Activity.create( type_of: :unassign_repository_record, @@ -482,6 +506,28 @@ class MyModulesController < ApplicationController end end + def unassign_repository_records_modal + selected_rows = params[:selected_rows] + modal = render_to_string( + partial: 'my_modules/modals/unassign_repository_records_modal.html.erb', + locals: { my_module: @my_module, + repository: @repository, + selected_rows: selected_rows } + ) + render json: { html: modal }, status: :ok + end + + def assign_repository_records_modal + selected_rows = params[:selected_rows] + modal = render_to_string( + partial: 'my_modules/modals/assign_repository_records_modal.html.erb', + locals: { my_module: @my_module, + repository: @repository, + selected_rows: selected_rows } + ) + render json: { html: modal }, status: :ok + end + # Complete/uncomplete task def toggle_task_state respond_to do |format| diff --git a/app/views/my_modules/modals/_assign_repository_records_modal.html.erb b/app/views/my_modules/modals/_assign_repository_records_modal.html.erb new file mode 100644 index 000000000..e1e0498a2 --- /dev/null +++ b/app/views/my_modules/modals/_assign_repository_records_modal.html.erb @@ -0,0 +1,37 @@ + diff --git a/app/views/my_modules/modals/_unassign_repository_records_modal.html.erb b/app/views/my_modules/modals/_unassign_repository_records_modal.html.erb new file mode 100644 index 000000000..6afee192d --- /dev/null +++ b/app/views/my_modules/modals/_unassign_repository_records_modal.html.erb @@ -0,0 +1,36 @@ +