mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-05 13:35:21 +02:00
Feature: Add the ability to "revert" a CSV import (#1814)
* Allow reverting imports * Fix tests * Add currency column to all imports * Don't auto-enrich demo account
This commit is contained in:
parent
60925bd16c
commit
536c82f2aa
17 changed files with 125 additions and 6 deletions
|
@ -4,6 +4,7 @@
|
|||
<%= form.select :entity_type_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Entity Type" } %>
|
||||
<%= form.select :name_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Name (optional)" } %>
|
||||
<%= form.select :amount_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Balance" } %>
|
||||
<%= form.select :currency_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Currency" } %>
|
||||
|
||||
<%= form.submit "Apply configuration", class: "w-full btn btn--primary", disabled: import.complete? %>
|
||||
<% end %>
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
<%= form.select :signage_convention, [["Incomes are negative", "inflows_negative"], ["Incomes are positive", "inflows_positive"]], { label: true }, disabled: import.complete? %>
|
||||
</div>
|
||||
|
||||
<%= form.select :currency_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Currency" }, disabled: import.complete? %>
|
||||
|
||||
<%= form.select :account_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Account (optional)" }, disabled: import.complete? %>
|
||||
<%= form.select :name_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Name (optional)" }, disabled: import.complete? %>
|
||||
<%= form.select :category_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Category (optional)" }, disabled: import.complete? %>
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
<%= form.select :signage_convention, [["Buys are positive qty", "inflows_positive"], ["Buys are negative qty", "inflows_negative"]], label: true %>
|
||||
</div>
|
||||
|
||||
<%= form.select :currency_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Currency" } %>
|
||||
|
||||
<%= form.select :ticker_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Ticker" } %>
|
||||
<%= form.select :price_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Price" } %>
|
||||
<%= form.select :account_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Account (optional)" } %>
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
<%= form.select :signage_convention, [["Incomes are positive", "inflows_positive"], ["Incomes are negative", "inflows_negative"]], label: true %>
|
||||
</div>
|
||||
|
||||
<%= form.select :currency_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Currency" } %>
|
||||
|
||||
<%= form.select :account_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Account (optional)" } %>
|
||||
<%= form.select :name_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Name (optional)" } %>
|
||||
<%= form.select :category_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Category (optional)" } %>
|
||||
|
|
|
@ -17,6 +17,14 @@
|
|||
<span class="px-1 py text-xs rounded-full bg-red-500/5 text-red-500 border border-alpha-black-50">
|
||||
<%= t(".failed") %>
|
||||
</span>
|
||||
<% elsif import.reverting? %>
|
||||
<span class="px-1 py text-xs rounded-full bg-orange-500/5 text-orange-500 border border-alpha-black-50">
|
||||
<%= t(".reverting") %>
|
||||
</span>
|
||||
<% elsif import.revert_failed? %>
|
||||
<span class="px-1 py text-xs rounded-full bg-red-500/5 text-red-500 border border-alpha-black-50">
|
||||
<%= t(".revert_failed") %>
|
||||
</span>
|
||||
<% elsif import.complete? %>
|
||||
<span class="px-1 py text-xs rounded-full bg-green-500/5 text-green-500 border border-alpha-black-50">
|
||||
<%= t(".complete") %>
|
||||
|
@ -33,7 +41,16 @@
|
|||
<span><%= t(".view") %></span>
|
||||
<% end %>
|
||||
|
||||
<% unless import.complete? %>
|
||||
<% if import.complete? || import.revert_failed? %>
|
||||
<%= button_to revert_import_path(import),
|
||||
method: :put,
|
||||
class: "block w-full py-2 px-3 space-x-2 text-orange-600 hover:bg-orange-50 flex items-center rounded-lg",
|
||||
data: { turbo_confirm: true } do %>
|
||||
<%= lucide_icon "rotate-ccw", class: "w-5 h-5" %>
|
||||
|
||||
<span>Revert</span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= button_to import_path(import),
|
||||
method: :delete,
|
||||
class: "block w-full py-2 px-3 space-x-2 text-red-600 hover:bg-red-50 flex items-center rounded-lg",
|
||||
|
|
18
app/views/imports/_revert_failure.html.erb
Normal file
18
app/views/imports/_revert_failure.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
|||
<%# locals: (import:) %>
|
||||
|
||||
<div class="h-full flex flex-col justify-center items-center">
|
||||
<div class="space-y-6 max-w-sm">
|
||||
<div class="mx-auto bg-red-500/5 h-8 w-8 rounded-full flex items-center justify-center">
|
||||
<%= lucide_icon "alert-octagon", class: "w-5 h-5 text-red-500" %>
|
||||
</div>
|
||||
|
||||
<div class="text-center space-y-2">
|
||||
<h1 class="font-medium text-gray-900 text-center text-3xl">Reverting import failed</h1>
|
||||
<p class="text-sm text-gray-500">Please try again or contact support.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<%= button_to "Try again", revert_import_path(import), class: "btn btn--primary text-center w-full" %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -10,6 +10,8 @@
|
|||
<%= render "imports/success", import: @import %>
|
||||
<% elsif @import.failed? %>
|
||||
<%= render "imports/failure", import: @import %>
|
||||
<% elsif @import.revert_failed? %>
|
||||
<%= render "imports/revert_failure", import: @import %>
|
||||
<% else %>
|
||||
<%= render "imports/ready", import: @import %>
|
||||
<% end %>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue