mirror of
https://github.com/we-promise/sure.git
synced 2026-04-10 15:54:48 +00:00
* feat: improve QIF import date format selection - Added a reusable date format auto-detection method. - Show a live preview of the first parsed date that updates client-side as the user changes the dropdown selection, via a new qif-date-format Stimulus controller. - Show an error alert and disable the submit button when no supported date format can parse the file's dates. * A few polishing fixes: - Missing return on redirects Stale REASONABLE_DATE_RANGE constant. - Replaced the frozen constant with a class method Bare inline rescue — Replaced Date.strptime(s, fmt) rescue nil with an explicit begin/rescue catching. - save!(validate: false) in controller — Changed to update_column(:column_mappings, ...) in qif_category_selections_controller.rb:22, matching the pattern used in detect_and_set_qif_date_format!. - Unescaped JSON in HTML attribute — Replaced the raw <div> with tag.div ... do block in show.html.erb:16, letting Rails properly escape the data attribute value. * fix: address review feedback for QIF date format feature - Add missing `return` after redirect for non-QIF imports - Pass date_format to parse_opening_balance in will_adjust_opening_anchor? - Return empty array when no usable date sample exists for format preview - Add sr-only label to date format select for accessibility - Consolidate duplicate try_parse_date/parse_qif_date into single method - Remove misleading ambiguity scoring comment from detect_date_format - Skip redundant sync_mappings when date format already triggered a sync Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Use %{product_name} interpolation in locale strings --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
58 lines
1.7 KiB
Ruby
58 lines
1.7 KiB
Ruby
class Import::ConfigurationsController < ApplicationController
|
|
layout "imports"
|
|
|
|
before_action :set_import
|
|
|
|
def show
|
|
# PDF imports are auto-configured from AI extraction, skip to clean step
|
|
redirect_to import_clean_path(@import) and return if @import.is_a?(PdfImport)
|
|
redirect_to import_qif_category_selection_path(@import) and return if @import.is_a?(QifImport)
|
|
end
|
|
|
|
def update
|
|
if params[:refresh_only]
|
|
@import.update!(rows_to_skip: params.dig(:import, :rows_to_skip).to_i)
|
|
redirect_to import_configuration_path(@import)
|
|
else
|
|
@import.update!(import_params)
|
|
@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
|
|
end
|
|
|
|
private
|
|
def set_import
|
|
@import = Current.family.imports.find(params[:import_id])
|
|
end
|
|
|
|
def import_params
|
|
params.fetch(:import, {}).permit(
|
|
:date_col_label,
|
|
:amount_col_label,
|
|
:name_col_label,
|
|
:category_col_label,
|
|
:tags_col_label,
|
|
:account_col_label,
|
|
:qty_col_label,
|
|
:ticker_col_label,
|
|
:exchange_operating_mic_col_label,
|
|
:price_col_label,
|
|
:entity_type_col_label,
|
|
:notes_col_label,
|
|
:currency_col_label,
|
|
:date_format,
|
|
:number_format,
|
|
:signage_convention,
|
|
:amount_type_strategy,
|
|
:amount_type_identifier_value,
|
|
:amount_type_inflow_value,
|
|
:rows_to_skip
|
|
)
|
|
end
|
|
end
|