diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 4d0a6652a..027d6971c 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -64,7 +64,7 @@ var RepositoryDatatable = (function(global) { $('#exportRepositoriesButton').addClass('disabled'); $('#copyRepositoryRecords').prop('disabled', true); $('#editRepositoryRecord').prop('disabled', true); - $('#deleteRepositoryRecordsButton').prop('disabled', true); + $('#archiveRepositoryRecordsButton').prop('disabled', true); $('#assignRepositoryRecords').prop('disabled', true); $('#unassignRepositoryRecords').prop('disabled', true); $('#editDeleteCopy').hide(); @@ -75,14 +75,14 @@ var RepositoryDatatable = (function(global) { $('#editRepositoryRecord').prop('disabled', true); } $('#exportRepositoriesButton').removeClass('disabled'); - $('#deleteRepositoryRecordsButton').prop('disabled', false); + $('#archiveRepositoryRecordsButton').prop('disabled', false); $('#copyRepositoryRecords').prop('disabled', false); $('#assignRepositoryRecords').prop('disabled', false); $('#unassignRepositoryRecords').prop('disabled', false); if (rowsSelected.some(r=> rowsLocked.indexOf(r) >= 0)) { // Some selected rows is rowsLocked $('#editRepositoryRecord').prop('disabled', true); - $('#deleteRepositoryRecordsButton').prop('disabled', true); + $('#archiveRepositoryRecordsButton').prop('disabled', true); } $('#editDeleteCopy').show(); } @@ -95,7 +95,7 @@ var RepositoryDatatable = (function(global) { $('.dataTables_length select').prop('disabled', true); $('#addRepositoryRecord').prop('disabled', true); $('#editRepositoryRecord').prop('disabled', true); - $('#deleteRepositoryRecordsButton').prop('disabled', true); + $('#archiveRepositoryRecordsButton').prop('disabled', true); $('#assignRepositoryRecords').prop('disabled', true); $('#unassignRepositoryRecords').prop('disabled', true); $('#repository-columns-dropdown').find('.dropdown-toggle').prop('disabled', true); @@ -727,6 +727,60 @@ var RepositoryDatatable = (function(global) { }); }; + global.onClickArchiveRepositoryRecords = function() { + animateSpinner(); + $.ajax({ + url: $('table' + TABLE_ID).data('archive-records'), + type: 'POST', + dataType: 'json', + data: { selected_rows: rowsSelected }, + success: function(data) { + HelperModule.flashAlertMsg(data.flash, 'success'); + rowsSelected = []; + resetTableView(); + }, + error: function(ev) { + if (ev.status === 403) { + HelperModule.flashAlertMsg( + I18n.t('repositories.js.permission_error'), ev.responseJSON.style + ); + } else if (ev.status === 422) { + HelperModule.flashAlertMsg( + ev.responseJSON.error, 'danger' + ); + animateSpinner(null, false); + } + } + }); + }; + + global.onClickRestoreRepositoryRecords = function() { + animateSpinner(); + $.ajax({ + url: $('table' + TABLE_ID).data('restore-records'), + type: 'POST', + dataType: 'json', + data: { selected_rows: rowsSelected }, + success: function(data) { + HelperModule.flashAlertMsg(data.flash, 'success'); + rowsSelected = []; + resetTableView(); + }, + error: function(ev) { + if (ev.status === 403) { + HelperModule.flashAlertMsg( + I18n.t('repositories.js.permission_error'), ev.responseJSON.style + ); + } else if (ev.status === 422) { + HelperModule.flashAlertMsg( + ev.responseJSON.error, 'danger' + ); + animateSpinner(null, false); + } + } + }); + }; + // Edit record global.onClickEdit = function() { checkAvailableColumns(); diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index 3868590c5..f5675756a 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -21,6 +21,7 @@ class RepositoryRowsController < ApplicationController @all_rows_count = datatable_service.all_count @columns_mappings = datatable_service.mappings @repository_rows = datatable_service.repository_rows + .active .preload(:repository_columns, :created_by, repository_cells: @repository.cell_preload_includes) @@ -177,9 +178,9 @@ class RepositoryRowsController < ApplicationController team: current_team) if service.succeed? - render json: {}, status: :ok + render json: { flash: t('repositories.archive_records.success_flash', repository: @repository.name) }, status: :ok else - render json: { status: service.errors }, status: :unprocessable_entity + render json: { error: service.error_message }, status: :unprocessable_entity end end @@ -190,9 +191,9 @@ class RepositoryRowsController < ApplicationController team: current_team) if service.succeed? - render json: {}, status: :ok + render json: { flash: t('repositories.restore_records.success_flash', repository: @repository.name) }, status: :ok else - render json: { status: service.errors }, status: :unprocessable_entity + render json: { error: service.error_message }, status: :unprocessable_entity end end diff --git a/app/services/repository_actions/archive_rows_base_service.rb b/app/services/repository_actions/archive_rows_base_service.rb index b9a695bc1..83e8047d0 100644 --- a/app/services/repository_actions/archive_rows_base_service.rb +++ b/app/services/repository_actions/archive_rows_base_service.rb @@ -4,7 +4,7 @@ module RepositoryActions class ArchiveRowsBaseService extend Service - attr_reader :errors, :column + attr_reader :errors def initialize(user:, team:, repository:, repository_rows:) @user = user @@ -22,6 +22,10 @@ module RepositoryActions @errors.none? end + def error_message + @errors.values.join(', ') + end + private def scoped_repository_rows(_ids) @@ -38,7 +42,7 @@ module RepositoryActions end.compact end - @errors[:repository_rows] = 'Please provide valid rows' if @repository_rows.blank? + @errors[:repository_rows] = I18n.t('repositories.archive_records.invalid_rows_flash') if @repository_rows.blank? succeed? end diff --git a/app/services/repository_actions/archive_rows_service.rb b/app/services/repository_actions/archive_rows_service.rb index c5f9ffc45..e3da4b152 100644 --- a/app/services/repository_actions/archive_rows_service.rb +++ b/app/services/repository_actions/archive_rows_service.rb @@ -11,7 +11,7 @@ module RepositoryActions log_activity(:archive_inventory_item, row) end rescue ActiveRecord::RecordNotSaved - @errors[:archiving_error] = 'Cannot archive all items' + @errors[:archiving_error] = I18n.t('repositories.archive_records.unsuccess_flash', @repository.name) raise ActiveRecord::Rollback end diff --git a/app/services/repository_actions/restore_rows_service.rb b/app/services/repository_actions/restore_rows_service.rb index c62fcaa2f..016997b3b 100644 --- a/app/services/repository_actions/restore_rows_service.rb +++ b/app/services/repository_actions/restore_rows_service.rb @@ -11,7 +11,7 @@ module RepositoryActions log_activity(:restore_inventory_item, row) end rescue ActiveRecord::RecordNotSaved - @errors[:restoring_error] = 'Cannot restore all items' + @errors[:restoring_error] = I18n.t('repositories.restore_records.unsuccess_flash', @repository.name) raise ActiveRecord::Rollback end diff --git a/app/views/repositories/_repository_table.html.erb b/app/views/repositories/_repository_table.html.erb index 03bc2379d..36d08837b 100644 --- a/app/views/repositories/_repository_table.html.erb +++ b/app/views/repositories/_repository_table.html.erb @@ -8,6 +8,8 @@ data-create-record="<%= repository_repository_rows_path(repository) %>" data-delete-record="<%= repository_delete_records_path(repository) %>" data-copy-records="<%= repository_copy_records_path(repository) %>" + data-archive-records="<%= repository_archive_records_path(repository) %>" + data-restore-records="<%= repository_restore_records_path(repository) %>" data-direct-upload-url="<%= rails_direct_uploads_url %>" data-max-dropdown-length="<%= Constants::MODAL_TEXT_MAX_LENGTH %>" data-repository-columns-ids="<%= repository.repository_columns.pluck(:id) %>" diff --git a/app/views/repositories/_toolbar_buttons.html.erb b/app/views/repositories/_toolbar_buttons.html.erb index 4f5f56308..511cda35c 100644 --- a/app/views/repositories/_toolbar_buttons.html.erb +++ b/app/views/repositories/_toolbar_buttons.html.erb @@ -22,21 +22,23 @@ <% end %> - <% if can_delete_repository_rows?(@repository) %> - - <% end %> <% if can_create_repository_rows?(@repository) %> - <%end%> + <% end %> + + <% if can_delete_repository_rows?(@repository) %> + + <% end %> +