mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-10 23:25:31 +08:00
Fix unexisting rows and cell deletion [SCI-10773]
This commit is contained in:
parent
fbf311e25d
commit
68b4df7ec5
5 changed files with 65 additions and 17 deletions
|
@ -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>
|
||||
`;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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.'
|
||||
|
|
Loading…
Add table
Reference in a new issue