From 8067f332ef1d53235f1667bc7700709ab910bce1 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 1 Oct 2024 12:38:34 +0200 Subject: [PATCH] Fix import/export storage locations [SCI-11121] --- ...torage_location_repository_rows_service.rb | 5 ++++ .../storage_locations/export_service.rb | 24 +++++++++++++------ .../storage_locations/import_service.rb | 6 +++-- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/app/services/lists/storage_location_repository_rows_service.rb b/app/services/lists/storage_location_repository_rows_service.rb index 79da5f273..de2eb643b 100644 --- a/app/services/lists/storage_location_repository_rows_service.rb +++ b/app/services/lists/storage_location_repository_rows_service.rb @@ -5,6 +5,7 @@ module Lists def initialize(team, params) @team = team @storage_location_id = params[:storage_location_id] + @storage_location = StorageLocation.find(@storage_location_id) @params = params end @@ -22,6 +23,10 @@ module Lists end end + def paginate_records + @records = @records.page(@params[:page]).per(@params[:per_page]) if @params[:page].present? && !@storage_location.with_grid? + end + def sort_records return unless @params[:order] diff --git a/app/services/storage_locations/export_service.rb b/app/services/storage_locations/export_service.rb index f49646f46..01275dff2 100644 --- a/app/services/storage_locations/export_service.rb +++ b/app/services/storage_locations/export_service.rb @@ -17,10 +17,22 @@ module StorageLocations workbook.add_worksheet(name: 'Box Export') do |sheet| sheet.add_row ['Box position', 'Item ID', 'Item name'] - @storage_location.storage_location_repository_rows.each do |storage_location_item| - row = storage_location_item.repository_row - row_name = row.name if can_read_repository?(@user, row.repository) - sheet.add_row [format_position(storage_location_item), storage_location_item.repository_row_id, row_name] + if @storage_location.with_grid? + x = @storage_location.grid_size[0].to_i + y = @storage_location.grid_size[1].to_i + x.times do |row| + y.times do |col| + repository_row = @storage_location.storage_location_repository_rows.find_by(metadata: { position: [row + 1, col + 1] })&.repository_row + row_name = repository_row.name if repository_row && can_read_repository?(@user, repository_row.repository) + sheet.add_row [format_position([row + 1, col + 1]), repository_row&.code, row_name] + end + end + else + @storage_location.storage_location_repository_rows.each do |storage_location_item| + row = storage_location_item.repository_row + row_name = row.name if can_read_repository?(@user, row.repository) + sheet.add_row [format_position(storage_location_item.metadata['position']), storage_location_item.repository_row.code, row_name] + end end end @@ -29,9 +41,7 @@ module StorageLocations private - def format_position(item) - position = item.metadata['position'] - + def format_position(position) return unless position column_letter = ('A'..'Z').to_a[position[0] - 1] diff --git a/app/services/storage_locations/import_service.rb b/app/services/storage_locations/import_service.rb index 4ef4340fe..a0fc08e00 100644 --- a/app/services/storage_locations/import_service.rb +++ b/app/services/storage_locations/import_service.rb @@ -35,6 +35,8 @@ module StorageLocations unassign_repository_rows! if @storage_location.with_grid? @rows.each do |row| + next if row[:repository_row_id].blank? + if @storage_location.with_grid? && !position_valid?(row[:position]) @error_message = I18n.t('storage_locations.show.import_modal.errors.invalid_position') raise ActiveRecord::RecordInvalid @@ -64,7 +66,7 @@ module StorageLocations row = SpreadsheetParser.parse_row(r, @sheet) { position: convert_position_letter_to_number(row[0]), - repository_row_id: row[1].to_s.gsub('IT', '').to_i + repository_row_id: (row[1].to_s.gsub('IT', '') if row[1].present?) } end end @@ -104,7 +106,7 @@ module StorageLocations return unless position column_letter = position[0] - row_number = position[1] + row_number = position[1..] [column_letter.ord - 64, row_number.to_i] end