From 5e8cf6a2210d2e2cce103fb002dd1b2b91540be7 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 31 May 2024 21:07:21 +0200 Subject: [PATCH] Add preview step and success step [SCI-9851] --- Gemfile.lock | 9 +- .../repositories/modals/import/container.vue | 30 +++- .../modals/import/mapping_step.vue | 5 +- .../modals/import/mapping_step_table_row.vue | 1 - .../modals/import/preview_step.vue | 147 ++++++++++++++++++ .../modals/import/success_step.vue | 53 +++++++ .../modals/import/upload_step.vue | 5 +- app/serializers/repository_cell_serializer.rb | 6 +- app/serializers/repository_row_serializer.rb | 3 +- app/serializers/repository_serializer.rb | 2 +- .../import_repository/import_records.rb | 2 +- .../repository_import_parser/importer.rb | 4 +- config/locales/en.yml | 21 +++ 13 files changed, 272 insertions(+), 16 deletions(-) create mode 100644 app/javascript/vue/repositories/modals/import/preview_step.vue create mode 100644 app/javascript/vue/repositories/modals/import/success_step.vue diff --git a/Gemfile.lock b/Gemfile.lock index e998b8757..f191313f0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -227,6 +227,11 @@ GEM mail case_transform (0.2) activesupport + caxlsx (4.0.0) + htmlentities (~> 4.3, >= 4.3.4) + marcel (~> 1.0) + nokogiri (~> 1.10, >= 1.10.4) + rubyzip (>= 1.3.0, < 3) cgi (0.4.1) childprocess (4.1.0) chunky_png (1.4.0) @@ -353,6 +358,7 @@ GEM nokogiri (~> 1.0) hashdiff (1.0.1) hashie (5.0.0) + htmlentities (4.3.4) http (5.1.1) addressable (~> 2.8) http-cookie (~> 1.0) @@ -731,13 +737,13 @@ GEM unf_ext (0.0.8.2) unicode-display_width (2.4.2) uniform_notifier (1.16.0) + uri (0.13.0) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) validate_url (1.0.15) activemodel (>= 3.0.0) public_suffix - uri (0.13.0) version_gem (1.1.3) view_component (3.9.0) activesupport (>= 5.2.0, < 8.0) @@ -795,6 +801,7 @@ DEPENDENCIES capybara capybara-email caracal! + caxlsx cssbundling-rails cucumber-rails database_cleaner diff --git a/app/javascript/vue/repositories/modals/import/container.vue b/app/javascript/vue/repositories/modals/import/container.vue index dd183e58f..5265dcf83 100644 --- a/app/javascript/vue/repositories/modals/import/container.vue +++ b/app/javascript/vue/repositories/modals/import/container.vue @@ -6,20 +6,31 @@ :uploading="uploading" @uploadFile="uploadFile" @generatePreview="generatePreview" + @changeStep="changeStep" + @importRows="importRecords" /> diff --git a/app/javascript/vue/repositories/modals/import/success_step.vue b/app/javascript/vue/repositories/modals/import/success_step.vue new file mode 100644 index 000000000..008288ee0 --- /dev/null +++ b/app/javascript/vue/repositories/modals/import/success_step.vue @@ -0,0 +1,53 @@ + + + diff --git a/app/javascript/vue/repositories/modals/import/upload_step.vue b/app/javascript/vue/repositories/modals/import/upload_step.vue index 808c4018b..8c410d9bf 100644 --- a/app/javascript/vue/repositories/modals/import/upload_step.vue +++ b/app/javascript/vue/repositories/modals/import/upload_step.vue @@ -91,7 +91,7 @@ import modalMixin from '../../../shared/modal_mixin'; export default { name: 'UploadStep', - emits: ['step:next', 'info:hide'], + emits: ['uploadFile'], components: { DragAndDropUpload }, @@ -123,6 +123,9 @@ export default { }, uploadFile(file) { this.$emit('uploadFile', file); + }, + handleError(error) { + this.error = error; } } }; diff --git a/app/serializers/repository_cell_serializer.rb b/app/serializers/repository_cell_serializer.rb index e18c7f9c3..701292e1a 100644 --- a/app/serializers/repository_cell_serializer.rb +++ b/app/serializers/repository_cell_serializer.rb @@ -3,7 +3,7 @@ class RepositoryCellSerializer < ActiveModel::Serializer include Rails.application.routes.url_helpers - attributes :id, :value, :changes + attributes :id, :value, :changes, :repository_column_id, :formatted_value def changes object.value.changes @@ -12,4 +12,8 @@ class RepositoryCellSerializer < ActiveModel::Serializer def value object.value end + + def formatted_value + object.value.formatted + end end diff --git a/app/serializers/repository_row_serializer.rb b/app/serializers/repository_row_serializer.rb index 6b9122295..7d244482e 100644 --- a/app/serializers/repository_row_serializer.rb +++ b/app/serializers/repository_row_serializer.rb @@ -4,5 +4,6 @@ class RepositoryRowSerializer < ActiveModel::Serializer include Rails.application.routes.url_helpers attributes :id, :name, :code - has_many :repository_cells + + has_many :repository_cells, serializer: RepositoryCellSerializer end diff --git a/app/serializers/repository_serializer.rb b/app/serializers/repository_serializer.rb index a5f38b982..60a56c7fd 100644 --- a/app/serializers/repository_serializer.rb +++ b/app/serializers/repository_serializer.rb @@ -3,7 +3,7 @@ class RepositorySerializer < ActiveModel::Serializer include Rails.application.routes.url_helpers - attributes :urls, :id, :team_id, :repository_columns + attributes :urls, :id, :team_id, :repository_columns, :name def repository_columns object.repository_columns.pluck(:id, :name, :data_type) diff --git a/app/services/import_repository/import_records.rb b/app/services/import_repository/import_records.rb index d9cdb963d..4090b943b 100644 --- a/app/services/import_repository/import_records.rb +++ b/app/services/import_repository/import_records.rb @@ -10,7 +10,7 @@ module ImportRepository def import!(can_edit_existing_items, should_overwrite_with_empty_cells, preview) status = run_import_actions(can_edit_existing_items, should_overwrite_with_empty_cells, preview) - @temp_file.destroy + #@temp_file.destroy status end diff --git a/app/utilities/repository_import_parser/importer.rb b/app/utilities/repository_import_parser/importer.rb index b53ffcadb..24bdbace8 100644 --- a/app/utilities/repository_import_parser/importer.rb +++ b/app/utilities/repository_import_parser/importer.rb @@ -166,9 +166,9 @@ module RepositoryImportParser imported_rows, each_serializer: RepositoryRowSerializer, include: [:repository_cells] - ).as_json[:included] + ).as_json - { status: :ok, nr_of_added: @new_rows_added, total_nr: @total_new_rows, changes: changes } + { status: :ok, nr_of_added: @new_rows_added, total_nr: @total_new_rows, changes: changes, import_date: I18n.l(Date.today, format: :full_date) } end def import_batch_to_database(full_row_import_batch, can_edit_existing_items, should_overwrite_with_empty_cells, preview) diff --git a/config/locales/en.yml b/config/locales/en.yml index e1a134ee6..15677907a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2264,6 +2264,27 @@ en: scinoteColumns: 'SciNote columns' status: 'Status' 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.' + updated_items: 'Updated
items' + new_items: 'New
items' + unchanged_items: 'Unchanged
items' + duplicated_items: 'Duplicated
items' + invalid_items: 'Invalid
items' + invalid_cells: 'Invalid
cells' + code: 'Code' + name: 'Name' + status: 'Status' + cancel: 'Cancel import' + confirm: 'Confirm' + step4: + title: 'Success report' + subtitle: '%{inventory} was successfully updated.' + import_date: 'Import date:' + imported_file: 'Imported file:' + download_report: 'Download success report' + close: 'Close' info_sidebar: title: 'Guide for updating the inventory' elements: