mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 13:19:39 +02:00
* Initial entryable models * Update transfer and tests * Update transaction controllers and tests * Update sync process to use new entries model * Get dashboard working again * Update transfers, imports, and accounts to use Account::Entry * Update system tests * Consolidate transaction management into entries controller * Add permitted partial key helper * Move account transactions list to entries controller * Delegate transaction entries search * Move transfer relation to entry * Update bulk transaction management flows to use entries * Remove test code * Test fix attempt * Update demo data script * Consolidate remaining transaction partials to entries * Consolidate valuations controller to entries controller * Lint fix * Remove unused files, additional cleanup * Add back valuation creation * Make migrations fully reversible * Stale routes cleanup * Migrations reversible fix * Move types to entryable concern * Fix search when no entries found * Remove more unused code
91 lines
2.6 KiB
Ruby
91 lines
2.6 KiB
Ruby
class Account::EntriesController < ApplicationController
|
|
layout "with_sidebar"
|
|
|
|
before_action :set_account
|
|
before_action :set_entry, only: %i[ edit update show destroy ]
|
|
|
|
def transactions
|
|
@transaction_entries = @account.entries.account_transactions.reverse_chronological
|
|
end
|
|
|
|
def valuations
|
|
@valuation_entries = @account.entries.account_valuations.reverse_chronological
|
|
end
|
|
|
|
def new
|
|
@entry = @account.entries.build.tap do |entry|
|
|
if params[:entryable_type]
|
|
entry.entryable = Account::Entryable.from_type(params[:entryable_type]).new
|
|
else
|
|
entry.entryable = Account::Valuation.new
|
|
end
|
|
end
|
|
end
|
|
|
|
def create
|
|
@entry = @account.entries.build(entry_params_with_defaults(entry_params))
|
|
|
|
if @entry.save
|
|
@entry.sync_account_later
|
|
redirect_to account_path(@account), notice: t(".success", name: @entry.entryable_name_short.upcase_first)
|
|
else
|
|
# TODO: this is not an ideal way to handle errors and should eventually be improved.
|
|
# See: https://github.com/hotwired/turbo-rails/pull/367
|
|
flash[:error] = @entry.errors.full_messages.to_sentence
|
|
redirect_to account_path(@account)
|
|
end
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
@entry.update! entry_params
|
|
@entry.sync_account_later
|
|
|
|
respond_to do |format|
|
|
format.html { redirect_to account_entry_path(@account, @entry), notice: t(".success") }
|
|
format.turbo_stream { render turbo_stream: turbo_stream.replace(@entry) }
|
|
end
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def destroy
|
|
@entry.destroy!
|
|
@entry.sync_account_later
|
|
redirect_back_or_to account_url(@entry.account), notice: t(".success")
|
|
end
|
|
|
|
private
|
|
|
|
def set_account
|
|
@account = Current.family.accounts.find(params[:account_id])
|
|
end
|
|
|
|
def set_entry
|
|
@entry = @account.entries.find(params[:id])
|
|
end
|
|
|
|
def permitted_entryable_attributes
|
|
entryable_type = @entry ? @entry.entryable_class.to_s : params[:account_entry][:entryable_type]
|
|
|
|
case entryable_type
|
|
when "Account::Transaction"
|
|
[ :id, :notes, :excluded, :category_id, :merchant_id, tag_ids: [] ]
|
|
else
|
|
[ :id ]
|
|
end
|
|
end
|
|
|
|
def entry_params
|
|
params.require(:account_entry)
|
|
.permit(:name, :date, :amount, :currency, :entryable_type, entryable_attributes: permitted_entryable_attributes)
|
|
end
|
|
|
|
# entryable_type is required here because Rails expects both of these params in this exact order (potential upstream bug)
|
|
def entry_params_with_defaults(params)
|
|
params.with_defaults(entryable_type: params[:entryable_type], entryable_attributes: {})
|
|
end
|
|
end
|