2024-08-09 20:11:27 -04:00
|
|
|
class Account::EntryBuilder
|
|
|
|
include ActiveModel::Model
|
|
|
|
|
2024-08-23 10:06:24 -04:00
|
|
|
TYPES = %w[income expense buy sell interest transfer_in transfer_out].freeze
|
2024-08-09 20:11:27 -04:00
|
|
|
|
|
|
|
attr_accessor :type, :date, :qty, :ticker, :price, :amount, :currency, :account, :transfer_account_id
|
|
|
|
|
|
|
|
validates :type, inclusion: { in: TYPES }
|
|
|
|
|
|
|
|
def save
|
|
|
|
if valid?
|
|
|
|
create_builder.save
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def create_builder
|
|
|
|
case type
|
|
|
|
when "buy", "sell"
|
|
|
|
create_trade_builder
|
|
|
|
else
|
|
|
|
create_transaction_builder
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_trade_builder
|
|
|
|
Account::TradeBuilder.new \
|
|
|
|
type: type,
|
|
|
|
date: date,
|
|
|
|
qty: qty,
|
|
|
|
ticker: ticker,
|
|
|
|
price: price,
|
|
|
|
account: account
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_transaction_builder
|
|
|
|
Account::TransactionBuilder.new \
|
|
|
|
type: type,
|
|
|
|
date: date,
|
|
|
|
amount: amount,
|
|
|
|
account: account,
|
|
|
|
transfer_account_id: transfer_account_id
|
|
|
|
end
|
|
|
|
end
|