55 lines
1.3 KiB
Ruby
55 lines
1.3 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 create_move_from(params)
|
|
to_homie_name = Homie.find(params[:to_homie_id]).name
|
|
new_desc = "[#{to_homie_name}] #{params[:description]}".lstrip
|
|
MoneyMove.new(
|
|
homie_id: params[:from_homie_id],
|
|
amount: -params[:amount].to_d,
|
|
description: new_desc
|
|
)
|
|
end
|
|
|
|
def create_move_to(params)
|
|
new_desc = "[#{from_source_name(params)}] #{params[:description]}".lstrip
|
|
MoneyMove.new(
|
|
homie_id: params[:to_homie_id],
|
|
amount: params[:amount].to_d,
|
|
description: new_desc
|
|
)
|
|
end
|
|
end
|
|
end
|