2025-04-14 11:40:34 -04:00
class ValuationsController < ApplicationController
2025-07-03 09:33:07 -04:00
include EntryableResource , StreamExtensions
2025-04-14 11:40:34 -04:00
2025-07-15 18:58:40 -04:00
def confirm_create
@account = Current . family . accounts . find ( params . dig ( :entry , :account_id ) )
@entry = @account . entries . build ( entry_params . merge ( currency : @account . currency ) )
render :confirm_create
end
def confirm_update
@entry = Current . family . entries . find ( params [ :id ] )
@account = @entry . account
@entry . assign_attributes ( entry_params . merge ( currency : @account . currency ) )
render :confirm_update
end
2025-04-14 11:40:34 -04:00
def create
account = Current . family . accounts . find ( params . dig ( :entry , :account_id ) )
2025-07-15 18:58:40 -04:00
result = perform_balance_update ( account , entry_params . merge ( currency : account . currency ) )
2025-04-14 11:40:34 -04:00
2025-07-03 09:33:07 -04:00
if result . success?
@success_message = result . updated? ? " Balance updated " : " No changes made. Account is already up to date. "
2025-04-14 11:40:34 -04:00
respond_to do | format |
2025-07-03 09:33:07 -04:00
format . html { redirect_back_or_to account_path ( account ) , notice : @success_message }
format . turbo_stream { stream_redirect_back_or_to ( account_path ( account ) , notice : @success_message ) }
2025-04-14 11:40:34 -04:00
end
else
2025-07-03 09:33:07 -04:00
@error_message = result . error_message
2025-04-14 11:40:34 -04:00
render :new , status : :unprocessable_entity
end
end
def update
2025-07-15 18:58:40 -04:00
result = perform_balance_update ( @entry . account , entry_params . merge ( currency : @entry . currency , existing_valuation_id : @entry . id ) )
2025-07-03 09:33:07 -04:00
if result . success?
@entry . reload
2025-04-14 11:40:34 -04:00
respond_to do | format |
2025-07-03 09:33:07 -04:00
format . html { redirect_back_or_to account_path ( @entry . account ) , notice : result . updated? ? " Balance updated " : " No changes made. Account is already up to date. " }
2025-04-14 11:40:34 -04:00
format . turbo_stream do
render turbo_stream : [
turbo_stream . replace (
dom_id ( @entry , :header ) ,
partial : " valuations/header " ,
locals : { entry : @entry }
) ,
turbo_stream . replace ( @entry )
]
end
end
else
2025-07-03 09:33:07 -04:00
@error_message = result . error_message
2025-04-14 11:40:34 -04:00
render :show , status : :unprocessable_entity
end
end
private
def entry_params
params . require ( :entry )
2025-07-03 09:33:07 -04:00
. permit ( :date , :amount , :currency , :notes )
2025-04-14 11:40:34 -04:00
end
2025-07-15 18:58:40 -04:00
def perform_balance_update ( account , params )
account . update_balance (
balance : params [ :amount ] ,
date : params [ :date ] ,
currency : params [ :currency ] ,
notes : params [ :notes ] ,
existing_valuation_id : params [ :existing_valuation_id ]
)
end
2025-04-14 11:40:34 -04:00
end