mirror of
https://github.com/we-promise/sure.git
synced 2026-04-08 14:54:49 +00:00
* 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>
68 lines
3.3 KiB
Plaintext
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 %>
|