Files
sure/app/views/snaptrade_items/select_existing_account.html.erb
LPW a83f70425f Add SnapTrade brokerage integration with full trade history support (#737)
* Introduce SnapTrade integration with models, migrations, views, and activity processing logic.

* Refactor SnapTrade activities processing: improve activity fetching flow, handle pending states, and update UI elements for enhanced user feedback.

* Update Brakeman ignore file to include intentional redirect for SnapTrade OAuth portal.

* Refactor SnapTrade models, views, and processing logic: add currency extraction helper, improve pending state handling, optimize migration checks, and enhance user feedback in UI.

* Remove encryption for SnapTrade `snaptrade_user_id`, as it is an identifier, not a secret.

* Introduce `SnaptradeConnectionCleanupJob` to asynchronously handle SnapTrade connection cleanup and improve i18n for SnapTrade item status messages.

* Update SnapTrade encryption: make `snaptrade_user_secret` non-deterministic to enhance security.

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: luckyPipewrench <luckypipewrench@proton.me>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-22 20:52:49 +01:00

68 lines
3.3 KiB
Plaintext

<% content_for :title, t("snaptrade_items.select_existing_account.title", default: "Link to SnapTrade Account") %>
<%= render DS::Dialog.new do |dialog| %>
<% dialog.with_header(title: t("snaptrade_items.select_existing_account.header", default: "Link Existing Account")) do %>
<div class="flex items-center gap-2">
<%= icon "link", class: "text-primary" %>
<span class="text-primary"><%= t("snaptrade_items.select_existing_account.subtitle", default: "Select a SnapTrade account to link to") %> <%= @account.name %></span>
</div>
<% end %>
<% dialog.with_body do %>
<% if @snaptrade_accounts.blank? %>
<div class="text-center py-8">
<%= icon "alert-circle", class: "text-warning mx-auto mb-4", size: "lg" %>
<p class="text-secondary"><%= t("snaptrade_items.select_existing_account.no_accounts", default: "No unlinked SnapTrade accounts available.") %></p>
<p class="text-sm text-secondary mt-2"><%= t("snaptrade_items.select_existing_account.connect_hint", default: "You may need to connect a brokerage first.") %></p>
<%= link_to t("snaptrade_items.select_existing_account.settings_link", default: "Go to Provider Settings"), settings_providers_path, class: "btn btn--primary btn--sm mt-4" %>
</div>
<% else %>
<div class="space-y-4">
<div class="bg-surface border border-primary p-4 rounded-lg mb-4">
<p class="text-sm text-primary">
<strong><%= t("snaptrade_items.select_existing_account.linking_to", default: "Linking to account:") %></strong>
<%= @account.name %>
</p>
</div>
<% @snaptrade_accounts.each do |snaptrade_account| %>
<%= form_with url: link_existing_account_snaptrade_items_path,
method: :post,
local: true,
class: "border border-primary rounded-lg p-4 hover:bg-surface transition-colors" do |form| %>
<%= hidden_field_tag :account_id, @account.id %>
<%= hidden_field_tag :snaptrade_account_id, snaptrade_account.id %>
<div class="flex items-center justify-between">
<div>
<h4 class="font-medium text-primary"><%= snaptrade_account.name %></h4>
<p class="text-sm text-secondary">
<% if snaptrade_account.brokerage_name.present? %>
<%= snaptrade_account.brokerage_name %> •
<% end %>
<%= t("snaptrade_items.select_existing_account.balance_label", default: "Balance:") %>
<%= number_to_currency(snaptrade_account.current_balance || 0, unit: Money::Currency.new(snaptrade_account.currency || "USD").symbol) %>
</p>
</div>
<%= render DS::Button.new(
text: t("snaptrade_items.select_existing_account.link_button", default: "Link"),
variant: "primary",
size: "sm",
type: "submit"
) %>
</div>
<% end %>
<% end %>
</div>
<div class="mt-6">
<%= render DS::Link.new(
text: t("snaptrade_items.select_existing_account.cancel_button", default: "Cancel"),
variant: "secondary",
href: account_path(@account)
) %>
</div>
<% end %>
<% end %>
<% end %>