65 lines
1.5 KiB
Ruby
65 lines
1.5 KiB
Ruby
class MoneyMove < ApplicationRecord
|
|
belongs_to :homie
|
|
|
|
def self.create_move(params)
|
|
return false unless valid_money_move?(params)
|
|
|
|
move_from = create_move_from(params) if double_money_move?(params)
|
|
move_to = create_move_to(params)
|
|
|
|
MoneyMove.transaction do
|
|
move_from.save! if move_from.present?
|
|
move_to.save!
|
|
end
|
|
end
|
|
|
|
class << self
|
|
private
|
|
|
|
def valid_money_move?(params)
|
|
params[:amount].present? && params[:to_homie_id].present?
|
|
end
|
|
|
|
def double_money_move?(params)
|
|
params[:from_homie_id].present? && params[:to_homie_id].present?
|
|
end
|
|
|
|
def from_source_name(params)
|
|
if double_money_move?(params)
|
|
Homie.find(params[:from_homie_id]).name
|
|
else
|
|
'External'
|
|
end
|
|
end
|
|
|
|
def old_desc(params)
|
|
if params[:description].present?
|
|
"#{params[:description]} - "
|
|
else
|
|
''
|
|
end
|
|
end
|
|
|
|
def create_move_from(params)
|
|
to_homie_name = Homie.find(params[:to_homie_id]).name
|
|
added_desc = "[To: #{to_homie_name}]"
|
|
new_desc = "#{old_desc(params)}#{added_desc}"
|
|
MoneyMove.new(
|
|
homie_id: params[:from_homie_id],
|
|
amount: -params[:amount].to_d,
|
|
description: new_desc
|
|
)
|
|
end
|
|
|
|
def create_move_to(params)
|
|
added_desc = "[From: #{from_source_name(params)}]"
|
|
new_desc = "#{old_desc(params)}#{added_desc}"
|
|
MoneyMove.new(
|
|
homie_id: params[:to_homie_id],
|
|
amount: params[:amount].to_d,
|
|
description: new_desc
|
|
)
|
|
end
|
|
end
|
|
end
|