1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-05 13:35:21 +02:00

CSV Imports Overhaul (Transactions, Trades, Accounts, and Mint import support) (#1209)

* Remove stale 1.0 import logic and model

* Fresh start

* Checkpoint before removing nav

* First working prototype

* Add trade, account, and mint import flows

* Basic working version with tests

* System tests for each import type

* Clean up mappings flow

* Clean up PR, refactor stale code, tests

* Add back row validations

* Row validations

* Fix import job test

* Fix import navigation

* Fix mint import configuration form

* Currency preset for new accounts
This commit is contained in:
Zach Gollwitzer 2024-10-01 10:47:59 -04:00 committed by GitHub
parent 23786b444a
commit 398b246965
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
103 changed files with 2420 additions and 1689 deletions

View file

@ -90,8 +90,42 @@
22
],
"note": ""
},
{
"warning_type": "Dynamic Render Path",
"warning_code": 15,
"fingerprint": "fb6f7abeabc405d6882ffd41dbe8016403ef39307a5c6b4cd7b18adfaf0c24bf",
"check_name": "Render",
"message": "Render path contains parameter value",
"file": "app/views/import/configurations/show.html.erb",
"line": 13,
"link": "https://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
"code": "render(partial => permitted_import_configuration_path(Current.family.imports.find(params[:import_id])), { :locals => ({ :import => Current.family.imports.find(params[:import_id]) }) })",
"render_path": [
{
"type": "controller",
"class": "Import::ConfigurationsController",
"method": "show",
"line": 7,
"file": "app/controllers/import/configurations_controller.rb",
"rendered": {
"name": "import/configurations/show",
"file": "app/views/import/configurations/show.html.erb"
}
}
],
"location": {
"type": "template",
"template": "import/configurations/show"
},
"user_input": "params[:import_id]",
"confidence": "Weak",
"cwe_id": [
22
],
"note": ""
}
],
"updated": "2024-09-09 14:56:48 -0400",
"updated": "2024-09-28 13:27:09 -0400",
"brakeman_version": "6.2.1"
}

View file

@ -1,3 +1,4 @@
require "pagy/extras/overflow"
require "pagy/extras/array"
Pagy::DEFAULT[:overflow] = :last_page

View file

@ -1,111 +1,66 @@
---
en:
import:
cleans:
show:
description: Edit your data in the table below. Red cells are invalid.
title: Clean your data
configurations:
show:
description: Select the columns that correspond to each field in your CSV.
title: Configure your import
confirms:
show:
account_mapping_description: Assign all of your imported file's accounts to
Maybe's existing accounts. You can also add new accounts or leave them
uncategorized.
account_mapping_title: Assign your accounts
account_type_mapping_description: Assign all of your imported file's account
types to Maybe's
account_type_mapping_title: Assign your account types
category_mapping_description: Assign all of your imported file's categories
to Maybe's existing categories. You can also add new categories or leave
them uncategorized.
category_mapping_title: Assign your categories
tag_mapping_description: Assign all of your imported file's tags to Maybe's
existing tags. You can also add new tags or leave them uncategorized.
tag_mapping_title: Assign your tags
uploads:
show:
description: Paste or upload your CSV file below.
instructions_1: Below is an example CSV with columns available for import.
instructions_2: Your CSV must have a header row
instructions_3: You may name your columns anything you like. You will map
them at a later step.
instructions_4: Columns marked with an asterisk (*) are required data.
title: Import your data
imports:
clean:
clean_and_edit: Clean and edit your data
clean_description: Edit your transactions in the table below. Click on any cell
to change the date, name, category, or amount.
clean_import: Clean import
invalid_csv: Please load a CSV first
configure:
configure_description: Select the columns that match the necessary data fields,
so that the columns in your CSV can be correctly mapped with our format.
configure_subtitle: Setup your CSV file
configure_title: Configure import
confirm_accept: Change mappings
confirm_body: Changing your mappings may erase any edits you have made to the
CSV so far.
confirm_title: Are you sure?
invalid_csv: Please load a CSV first
next: Next
optional: "(optional) No column selected"
confirm:
confirm_description: Preview your transactions below and check to see if there
are any changes that are required.
confirm_subtitle: Confirm your transactions
confirm_title: Confirm import
invalid_data: You have invalid data, please fix before continuing
create:
import_created: Import created
csv_paste:
confirm_accept: Yep, start over!
confirm_body: This will reset your import. Any changes you have made to the
CSV will be erased.
confirm_title: Are you sure?
instructions: Your CSV should have the following columns and formats for the
best import experience.
next: Next
requirement1: Dates must be in ISO 8601 format (YYYY-MM-DD)
requirement2: Negative transaction is an "outflow" (expense), positive is an
"inflow" (income)
requirement3: Can have 0 or more tags separated by |
csv_upload:
allowed_filetypes: Only CSV files are allowed.
confirm_accept: Yep, start over!
confirm_body: This will reset your import. Any changes you have made to the
CSV will be erased.
confirm_title: Are you sure?
instructions: The csv file must be in the format below. You can also reuse and
next: Next
destroy:
import_destroyed: Import destroyed
edit:
description_text: Importing transactions can only be done for one account at
a time. You will need to go through this process again for other accounts.
edit_title: Edit import
header_text: Select the account your transactions will belong to
empty:
message: No imports to show
new: New Import
form:
account: Account
col_sep: CSV column separator
col_sep_char:
'44': Comma (,)
'59': Semicolon (;)
next: Next
select_account: Select account
select_col_sep: Select CSV column separator
message: No imports yet.
new: New import
import:
complete: Complete
completed_on: Completed on %{datetime}
delete: Delete
edit: Edit
failed: Failed
in_progress: In progress
label: 'Import for: %{account}'
started_on: Started on %{datetime}
label: "%{type}: %{datetime}"
uploading: Processing rows
view: View
index:
imports: Imports
new: New import
title: Imports
load:
description: Create a spreadsheet or upload an exported CSV from your financial
institution.
load_title: Load import
subtitle: Import your transactions
load_csv:
import_loaded: Import CSV loaded
new:
description_text: Importing transactions can only be done for one account at
a time. You will need to go through this process again for other accounts.
header_text: Select the account your transactions will belong to
publish:
import_published: Import has started in the background
invalid_data: Your import is invalid
type_selector:
description: You can manually import transactions from CSVs or other financial
apps like Mint.
import_from_csv: New import from CSV
import_from_mint: Import from Mint
description: You can manually import various types of data via CSV or use one
of our import templates like Mint.
import_accounts: Import accounts
import_mint: Import from Mint
import_portfolio: Import investments
import_transactions: Import transactions
resume_latest_import: Resume latest import
soon: Soon
resume: Resume latest import
sources: Sources
update:
import_updated: Import updated
update_mappings:
column_mappings_saved: Column mappings saved
upload_csv:
import_loaded: CSV File loaded
title: New CSV Import
ready:
description: Here's a summary of the new items that will be added to your account
once you publish this import.
title: Confirm your import data

View file

@ -8,6 +8,7 @@ en:
assets: Assets
debts: Debts
greeting: Welcome back, %{name}
import: Import
income: Income
investing: Investing (coming soon...)
net_worth: Net Worth

View file

@ -21,23 +21,6 @@ Rails.application.routes.draw do
end
end
resources :imports, except: :show do
member do
get "load"
patch "load" => "imports#load_csv"
patch "upload" => "imports#upload_csv"
get "configure"
patch "configure" => "imports#update_mappings"
get "clean"
patch "clean" => "imports#update_csv"
get "confirm"
patch "confirm" => "imports#publish"
end
end
resources :tags, except: %i[show destroy] do
resources :deletions, only: %i[new create], module: :tag
end
@ -56,6 +39,18 @@ Rails.application.routes.draw do
resources :transfers, only: %i[new create destroy]
end
resources :imports, only: %i[index new show create destroy] do
post :publish, on: :member
resource :upload, only: %i[show update], module: :import
resource :configuration, only: %i[show update], module: :import
resource :clean, only: :show, module: :import
resource :confirm, only: :show, module: :import
resources :rows, only: %i[show update], module: :import
resources :mappings, only: :update, module: :import
end
resources :accounts do
collection do
get :summary