diff --git a/app/controllers/import/configurations_controller.rb b/app/controllers/import/configurations_controller.rb index ea4513668..f943a0852 100644 --- a/app/controllers/import/configurations_controller.rb +++ b/app/controllers/import/configurations_controller.rb @@ -8,10 +8,15 @@ class Import::ConfigurationsController < ApplicationController def update @import.update!(import_params) - @import.generate_rows_from_csv - @import.reload.sync_mappings - redirect_to import_clean_path(@import), notice: "Import configured successfully." + if params[:refresh_only] + redirect_to import_configuration_path(@import) + else + @import.generate_rows_from_csv + @import.reload.sync_mappings + + redirect_to import_clean_path(@import), notice: t(".success") + end rescue ActiveRecord::RecordInvalid => e message = e.record.errors.full_messages.to_sentence.presence || e.message redirect_back_or_to import_configuration_path(@import), alert: message diff --git a/app/javascript/controllers/import_controller.js b/app/javascript/controllers/import_controller.js index 7c555d3ff..7db06634a 100644 --- a/app/javascript/controllers/import_controller.js +++ b/app/javascript/controllers/import_controller.js @@ -45,6 +45,17 @@ export default class extends Controller { this.#showAmountTypeValueTargets(amountTypeColumnKey); } + refreshForm(event) { + const form = event.target.closest("form"); + const input = document.createElement("input"); + input.type = "hidden"; + input.name = "refresh_only"; + input.value = "true"; + form.appendChild(input); + + form.requestSubmit(); + } + #showAmountTypeValueTargets(amountTypeColumnKey) { const selectableValues = this.#uniqueValuesForColumn(amountTypeColumnKey); diff --git a/app/models/import.rb b/app/models/import.rb index 866e4b05c..cb42a95f4 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -228,7 +228,8 @@ class Import < ApplicationRecord "qty_col_label", "ticker_col_label", "price_col_label", "entity_type_col_label", "notes_col_label", "currency_col_label", "date_format", "signage_convention", "number_format", - "exchange_operating_mic_col_label" + "exchange_operating_mic_col_label", + "rows_to_skip" ) ) end diff --git a/app/views/import/configurations/_transaction_import.html.erb b/app/views/import/configurations/_transaction_import.html.erb index 8e375548e..ea96e0bf0 100644 --- a/app/views/import/configurations/_transaction_import.html.erb +++ b/app/views/import/configurations/_transaction_import.html.erb @@ -11,6 +11,11 @@ import_amount_type_column_key_value: @import.entity_type_col_label } do |form| %> + <%# Row Skip Configuration - must be first to configure before column mapping %> + <%= form.number_field :rows_to_skip, + { label: t(".rows_to_skip_label", default: "Skip first n rows"), min: 0, step: 1 }, + data: { action: "change->import#refreshForm" } %> + <%# Date Configuration %>
<%= form.select :date_col_label, @@ -88,9 +93,6 @@ <% end %> <%# Optional Fields %> - <%= form.number_field :rows_to_skip, - { label: "Skip first n rows", min: 0, step: 1 } %> - <% unless import.account.present? %> <%= form.select :account_col_label, import.csv_headers,