1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-09 07:25:19 +02:00

Disable edits for certain transaction fields for Plaid transactions

This commit is contained in:
Zach Gollwitzer 2025-05-23 18:26:49 -04:00
parent b912e4c1fa
commit 540d7bb4bd
8 changed files with 30 additions and 36 deletions

View file

@ -56,6 +56,10 @@ class Entry < ApplicationRecord
Balance::TrendCalculator.new(self, entries, balances).trend Balance::TrendCalculator.new(self, entries, balances).trend
end end
def linked?
plaid_id.present?
end
class << self class << self
def search(params) def search(params)
EntrySearch.new(params).build_query(all) EntrySearch.new(params).build_query(all)

View file

@ -103,36 +103,6 @@ class PlaidItem < ApplicationRecord
save! save!
end end
# def auto_match_categories!
# if family.categories.none?
# family.categories.bootstrap!
# end
# alias_matcher = build_category_alias_matcher(family.categories)
# accounts.each do |account|
# matchable_transactions = account.transactions
# .where(category_id: nil)
# .where.not(plaid_category: nil)
# .enrichable(:category_id)
# matchable_transactions.each do |transaction|
# category = alias_matcher.match(transaction.plaid_category_detailed)
# if category.present?
# # Matcher could either return a string or a Category object
# user_category = if category.is_a?(String)
# family.categories.find_or_create_by!(name: category)
# else
# category
# end
# transaction.enrich_attribute(:category_id, user_category.id, source: "plaid")
# end
# end
# end
# end
def supports_product?(product) def supports_product?(product)
supported_products.include?(product) supported_products.include?(product)
end end

View file

@ -21,7 +21,7 @@ class PlaidItem::Syncer
end end
def perform_post_sync def perform_post_sync
plaid_item.auto_match_categories! # no-op
end end
private private

View file

@ -34,6 +34,7 @@
min: options[:min] || -99999999999999, min: options[:min] || -99999999999999,
max: options[:max] || 99999999999999, max: options[:max] || 99999999999999,
step: currency.step, step: currency.step,
disabled: options[:disabled],
data: { data: {
"money-field-target": "amount", "money-field-target": "amount",
"auto-submit-form-target": ("auto" if options[:auto_submit]) "auto-submit-form-target": ("auto" if options[:auto_submit])

View file

@ -16,6 +16,12 @@
<%= entry.currency %> <%= entry.currency %>
</span> </span>
</h3> </h3>
<% if entry.linked? %>
<span title="Linked with Plaid">
<%= icon("refresh-ccw", size: "sm") %>
</span>
<% end %>
</div> </div>
<span class="text-sm text-secondary"> <span class="text-sm text-secondary">

View file

@ -15,20 +15,22 @@
<%= f.date_field :date, <%= f.date_field :date,
label: t(".date_label"), label: t(".date_label"),
max: Date.current, max: Date.current,
disabled: @entry.linked?,
"data-auto-submit-form-target": "auto" %> "data-auto-submit-form-target": "auto" %>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<%= f.select :nature, <%= f.select :nature,
[["Buy", "outflow"], ["Sell", "inflow"]], [["Buy", "outflow"], ["Sell", "inflow"]],
{ container_class: "w-1/3", label: "Type", selected: @entry.amount.negative? ? "inflow" : "outflow" }, { container_class: "w-1/3", label: "Type", selected: @entry.amount.negative? ? "inflow" : "outflow" },
{ data: { "auto-submit-form-target": "auto" } } %> { data: { "auto-submit-form-target": "auto" }, disabled: @entry.linked? } %>
<%= f.fields_for :entryable do |ef| %> <%= f.fields_for :entryable do |ef| %>
<%= ef.number_field :qty, <%= ef.number_field :qty,
label: t(".quantity_label"), label: t(".quantity_label"),
step: "any", step: "any",
value: trade.qty.abs, value: trade.qty.abs,
"data-auto-submit-form-target": "auto" %> "data-auto-submit-form-target": "auto",
disabled: @entry.linked? %>
<% end %> <% end %>
</div> </div>
@ -37,7 +39,9 @@
label: t(".cost_per_share_label"), label: t(".cost_per_share_label"),
disable_currency: true, disable_currency: true,
auto_submit: true, auto_submit: true,
min: 0 %> min: 0,
disabled: @entry.linked?,
disable_currency: @entry.linked? %>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>

View file

@ -15,6 +15,12 @@
<% if entry.transaction.transfer? %> <% if entry.transaction.transfer? %>
<%= icon "arrow-left-right", class: "mt-1" %> <%= icon "arrow-left-right", class: "mt-1" %>
<% end %> <% end %>
<% if entry.linked? %>
<span title="Linked with Plaid">
<%= icon("refresh-ccw", size: "sm") %>
</span>
<% end %>
</div> </div>
<span class="text-sm text-secondary"> <span class="text-sm text-secondary">

View file

@ -18,6 +18,7 @@
<%= f.date_field :date, <%= f.date_field :date,
label: t(".date_label"), label: t(".date_label"),
max: Date.current, max: Date.current,
disabled: @entry.linked?,
"data-auto-submit-form-target": "auto" %> "data-auto-submit-form-target": "auto" %>
<% unless @entry.transaction.transfer? %> <% unless @entry.transaction.transfer? %>
@ -25,13 +26,15 @@
<%= f.select :nature, <%= f.select :nature,
[["Expense", "outflow"], ["Income", "inflow"]], [["Expense", "outflow"], ["Income", "inflow"]],
{ container_class: "w-1/3", label: t(".nature"), selected: @entry.amount.negative? ? "inflow" : "outflow" }, { container_class: "w-1/3", label: t(".nature"), selected: @entry.amount.negative? ? "inflow" : "outflow" },
{ data: { "auto-submit-form-target": "auto" } } %> { data: { "auto-submit-form-target": "auto" }, disabled: @entry.linked? } %>
<%= f.money_field :amount, label: t(".amount"), <%= f.money_field :amount, label: t(".amount"),
container_class: "w-2/3", container_class: "w-2/3",
auto_submit: true, auto_submit: true,
min: 0, min: 0,
value: @entry.amount.abs %> value: @entry.amount.abs,
disabled: @entry.linked?,
disable_currency: @entry.linked? %>
</div> </div>
<%= f.fields_for :entryable do |ef| %> <%= f.fields_for :entryable do |ef| %>