mirror of
https://github.com/we-promise/sure.git
synced 2026-04-20 04:24:06 +00:00
Add stale SimpleFin account detection and improve unlink cleanup (#574)
* Add stale account detection and handling in SimpleFin setup - Introduced UI for managing stale accounts during SimpleFin setup. - Added logic to detect accounts no longer provided by SimpleFin. - Implemented actions to delete, move transactions, or skip stale accounts. - Updated `simplefin_items_controller` with stale account processing and handling. - Enhanced tests to validate stale account scenarios, including detection, deletion, moving transactions, and skipping. * Update SimpleFin to SimpleFIN in locale file Signed-off-by: Juan José Mata <jjmata@jjmata.com> * Silly changes break things ... Signed-off-by: Juan José Mata <jjmata@jjmata.com> * Refactor stale account processing and UI handling - Moved `target_account.sync_later` to execute after commit for proper recalculation of balances. - Added additional safeguard in JavaScript to check for `moveRadioTarget` before updating target visibility. * More silly capitalization changes * Enhance stale account action handling in SimpleFIN setup - Introduced `permitted_stale_account_actions` to validate and permit nested `stale_account_actions` parameters. - Updated `complete_account_setup` to use the new method for safer processing. - Corrected capitalization in SimpleFIN update success and error messages. * Add error tracking and UI feedback for stale account actions - Updated `process_stale_account_actions` to track errors for delete and move actions. - Enhanced UI to display success and error messages for stale account processing. - Implemented destruction of conflicting transfers during account move to maintain data integrity. * Refactor transfer destruction and improve SimpleFIN account setup messages - Updated `simplefin_items_controller` to use `find_each(&:destroy!)` for transfer deletions, ensuring callbacks are invoked. - Enhanced localization for success messages in account creation to handle singular and plural cases. --------- Signed-off-by: Juan José Mata <jjmata@jjmata.com> Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com> Co-authored-by: Juan José Mata <jjmata@jjmata.com>
This commit is contained in:
65
app/views/simplefin_items/_stale_account_row.html.erb
Normal file
65
app/views/simplefin_items/_stale_account_row.html.erb
Normal file
@@ -0,0 +1,65 @@
|
||||
<% account = simplefin_account.current_account %>
|
||||
<% transaction_count = account&.entries&.where(entryable_type: "Transaction")&.count || 0 %>
|
||||
|
||||
<div class="rounded-lg p-4 border border-warning/50 bg-warning/5 mb-4"
|
||||
data-controller="stale-account-action"
|
||||
data-stale-account-action-account-id-value="<%= simplefin_account.id %>">
|
||||
<div class="flex items-start justify-between mb-4">
|
||||
<div>
|
||||
<h3 class="font-medium text-primary">
|
||||
<%= simplefin_account.name %>
|
||||
<% if simplefin_account.org_data.present? && simplefin_account.org_data['name'].present? %>
|
||||
<span class="text-secondary">• <%= simplefin_account.org_data["name"] %></span>
|
||||
<% end %>
|
||||
</h3>
|
||||
<p class="text-sm text-secondary">
|
||||
<%= number_to_currency(simplefin_account.current_balance || 0, unit: simplefin_account.currency || "USD") %>
|
||||
<span class="mx-1">•</span>
|
||||
<%= t("simplefin_items.setup_accounts.stale_accounts.transaction_count", count: transaction_count) %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<fieldset class="space-y-3">
|
||||
<legend class="text-sm text-secondary mb-2">
|
||||
<%= t("simplefin_items.setup_accounts.stale_accounts.action_prompt") %>
|
||||
</legend>
|
||||
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<%= radio_button_tag "stale_account_actions[#{simplefin_account.id}][action]",
|
||||
"delete",
|
||||
false,
|
||||
class: "form-radio accent-primary",
|
||||
data: { action: "change->stale-account-action#updateTargetVisibility" } %>
|
||||
<span class="text-sm text-primary"><%= t("simplefin_items.setup_accounts.stale_accounts.action_delete") %></span>
|
||||
</label>
|
||||
|
||||
<% if target_accounts&.any? %>
|
||||
<div class="flex flex-col gap-2">
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<%= radio_button_tag "stale_account_actions[#{simplefin_account.id}][action]",
|
||||
"move",
|
||||
false,
|
||||
class: "form-radio accent-primary",
|
||||
data: { action: "change->stale-account-action#updateTargetVisibility",
|
||||
stale_account_action_target: "moveRadio" } %>
|
||||
<span class="text-sm text-primary"><%= t("simplefin_items.setup_accounts.stale_accounts.action_move") %></span>
|
||||
</label>
|
||||
<%= select_tag "stale_account_actions[#{simplefin_account.id}][target_account_id]",
|
||||
options_from_collection_for_select(target_accounts, :id, :name),
|
||||
class: "appearance-none bg-container border border-primary rounded-md px-2 py-1 text-sm text-primary focus:border-primary focus:ring-1 focus:ring-primary focus:outline-none ml-6 max-w-[200px] truncate disabled:opacity-50 disabled:cursor-not-allowed",
|
||||
disabled: true,
|
||||
data: { stale_account_action_target: "targetSelect" } %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<label class="flex items-center gap-2 cursor-pointer">
|
||||
<%= radio_button_tag "stale_account_actions[#{simplefin_account.id}][action]",
|
||||
"skip",
|
||||
true,
|
||||
class: "form-radio accent-primary",
|
||||
data: { action: "change->stale-account-action#updateTargetVisibility" } %>
|
||||
<span class="text-sm text-primary"><%= t("simplefin_items.setup_accounts.stale_accounts.action_skip") %></span>
|
||||
</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
@@ -99,6 +99,29 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if @stale_simplefin_accounts&.any? %>
|
||||
<!-- Stale Accounts Section -->
|
||||
<div class="border-t border-primary mt-6 pt-6">
|
||||
<div class="bg-warning/10 border border-warning rounded-lg p-4 mb-4">
|
||||
<div class="flex items-start gap-3">
|
||||
<%= icon "alert-triangle", size: "sm", class: "text-warning mt-0.5 flex-shrink-0" %>
|
||||
<div>
|
||||
<p class="text-sm text-primary font-medium mb-1">
|
||||
<%= t("simplefin_items.setup_accounts.stale_accounts.title") %>
|
||||
</p>
|
||||
<p class="text-xs text-secondary">
|
||||
<%= t("simplefin_items.setup_accounts.stale_accounts.description") %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% @stale_simplefin_accounts.each do |simplefin_account| %>
|
||||
<%= render "stale_account_row", simplefin_account: simplefin_account, target_accounts: @target_accounts %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-3">
|
||||
|
||||
Reference in New Issue
Block a user