mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-06 12:43:06 +08:00
Merge pull request #7906 from aignatov-bio/ai-sci-11121-fix-import-issues
Fix import/export storage locations [SCI-11121]
This commit is contained in:
commit
1f0d8a1491
3 changed files with 26 additions and 9 deletions
|
@ -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]
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue