mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 05:09:38 +02:00
46 lines
952 B
Ruby
46 lines
952 B
Ruby
|
class Account::EntryBuilder
|
||
|
include ActiveModel::Model
|
||
|
|
||
|
TYPES = %w[ income expense buy sell interest transfer_in transfer_out ].freeze
|
||
|
|
||
|
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
|