Fix unexisting rows and cell deletion [SCI-10773]

This commit is contained in:
Anton 2024-06-13 14:41:31 +02:00
parent fbf311e25d
commit 68b4df7ec5
5 changed files with 65 additions and 17 deletions

View file

@ -132,6 +132,7 @@ export default {
columns.push({
field: 'import_status',
headerName: this.i18n.t('repositories.import_records.steps.step3.status'),
cellRenderer: this.statusRenderer,
pinned: 'right'
});
@ -154,6 +155,37 @@ export default {
methods: {
filterRows(status) {
return this.params.preview.data.filter((r) => r.attributes.import_status === status);
},
statusRenderer(params) {
const { import_status: importStatus, import_message: importMessage } = params.data;
let message = '';
let color = '';
let icon = '';
if (importStatus === 'created' || importStatus === 'updated') {
message = this.i18n.t(`repositories.import_records.steps.step3.status_message.${importStatus}`);
color = 'text-sn-alert-green';
icon = 'check';
} else if (importStatus === 'unchanged' || importStatus === 'archived') {
message = this.i18n.t(`repositories.import_records.steps.step3.status_message.${importStatus}`);
icon = 'hamburger';
} else if (importStatus === 'duplicated' || importStatus === 'invalid') {
message = this.i18n.t(`repositories.import_records.steps.step3.status_message.${importStatus}`);
color = 'text-sn-alert-passion';
icon = 'close';
}
if (importMessage) {
message = importMessage;
}
return `
<div class="flex items-center ${color} gap-2.5">
<i class="sn-icon sn-icon-${icon} "></i>
<span>${message}</span>
</div>
`;
}
}
};

View file

@ -3,7 +3,7 @@
class RepositoryCell < ApplicationRecord
include ReminderRepositoryCellJoinable
attr_accessor :importing
attr_accessor :importing, :to_destroy
belongs_to :repository_row, touch: true
belongs_to :repository_column

View file

@ -10,10 +10,10 @@ class RepositoryCellImportSerializer < ActiveModel::Serializer
end
def value
object.value
object.value if !object.to_destroy
end
def formatted_value
object.value.formatted
object.value.formatted if !object.to_destroy
end
end

View file

@ -84,11 +84,26 @@ module RepositoryImportParser
@header_skipped = true
next
end
@total_new_rows += 1
incoming_row = SpreadsheetParser.parse_row(row, @sheet, date_format: @user.settings['date_format'])
next if incoming_row.compact.blank?
@total_new_rows += 1
if @id_index
existing_row = RepositoryRow.includes(repository_cells: :value)
.find_by(id: incoming_row[@id_index].to_s.gsub(RepositoryRow::ID_PREFIX, ''))
id = incoming_row[@id_index].to_s.gsub(RepositoryRow::ID_PREFIX, '')
if id.present?
existing_row = @repository.repository_rows.includes(repository_cells: :value).find_by(id: id)
existing_row ||= @repository.repository_rows.new(
id: SecureRandom.uuid,
created_by: @user,
last_modified_by: @user,
import_status: 'invalid',
import_message: I18n.t('repositories.import_records.steps.step3.status_message.not_exist', id: id.to_i)
)
end
end
if existing_row.present?
@ -96,9 +111,6 @@ module RepositoryImportParser
existing_row.import_status = 'unchanged'
elsif existing_row.archived
existing_row.import_status = 'archived'
elsif existing_row.repository_id != @repository.id
existing_row.import_status = 'invalid'
existing_row.import_message = 'Item belongs to another repository'
elsif duplicate_ids.include?(existing_row.id)
existing_row.import_status = 'duplicated'
end
@ -111,10 +123,6 @@ module RepositoryImportParser
checked_rows << import_row(existing_row, incoming_row)
end
<<<<<<< HEAD
p checked_rows
=======
>>>>>>> b344c5772 (Fix repository import mapping and preview [SCI-10773])
changes = ActiveModelSerializers::SerializableResource.new(
checked_rows.compact,
each_serializer: RepositoryRowImportSerializer,
@ -144,7 +152,7 @@ module RepositoryImportParser
if @preview
repository_row.validate
repository_row.id ||= SecureRandom.uuid # ID required for preview with serializer
repository_row.id = SecureRandom.uuid unless repository_row.id.present? # ID required for preview with serializer
else
repository_row.save!
end
@ -197,7 +205,7 @@ module RepositoryImportParser
else
'unchanged'
end
repository_row.import_message = @errors.join(',') if @errors.present?
repository_row.import_message = @errors.join(',').downcase if @errors.present?
repository_row
rescue ActiveRecord::RecordInvalid
raise ActiveRecord::Rollback
@ -208,7 +216,7 @@ module RepositoryImportParser
return unless repository_cell.present? && @should_overwrite_with_empty_cells
if @preview
repository_cell = nil
repository_cell.to_destroy = true
@updated = true
else
repository_cell.value.destroy!

View file

@ -2272,7 +2272,7 @@ en:
exampleData: 'Example data'
step3:
title: 'Import preview'
subtitle: 'This is a preview of items you are importing/updating to the %{inventory}. The import can still be canceled.'
subtitle: 'This preview shows changes to the %{inventory} inventory resulting from this import. Values that will be updated are marked in green and any errors in red. Status of import provides further details, and the item import can still be canceled at this stage.'
updated_items: 'Updated'
new_items: 'New'
unchanged_items: 'Unchanged'
@ -2284,6 +2284,14 @@ en:
status: 'Status'
cancel: 'Cancel import'
confirm: 'Confirm'
status_message:
created: 'new item'
updated: 'updated'
unchanged: 'unchanged'
not_exist: "item ID IT%{id} doesn't exist in this inventory"
archived: 'archived'
invalid: 'invalid item'
duplicated: 'item ID has duplicates in the imported file'
step4:
title: 'Success report'
subtitle: '%{inventory} was successfully updated.'