Fix import/export storage locations [SCI-11121]

This commit is contained in:
Anton 2024-10-01 12:38:34 +02:00
parent 85f0b28e6d
commit 8067f332ef
3 changed files with 26 additions and 9 deletions

View file

@ -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]

View file

@ -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]

View file

@ -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