2019-06-20 22:47:39 +02:00
|
|
|
class MoneyMove < ApplicationRecord
|
2020-05-18 11:35:34 +02:00
|
|
|
belongs_to :homie
|
|
|
|
|
|
2020-05-20 13:38:01 +02:00
|
|
|
def self.create_move(params)
|
|
|
|
|
return false unless valid_money_move?(params)
|
2020-05-18 11:35:34 +02:00
|
|
|
|
2020-05-20 13:38:01 +02:00
|
|
|
move_from = create_move_from(params) if double_money_move?(params)
|
|
|
|
|
move_to = create_move_to(params)
|
2020-05-18 11:35:34 +02:00
|
|
|
|
2020-05-20 13:38:01 +02:00
|
|
|
MoneyMove.transaction do
|
|
|
|
|
move_from.save! if move_from.present?
|
2020-05-18 11:35:34 +02:00
|
|
|
move_to.save!
|
|
|
|
|
end
|
|
|
|
|
end
|
2020-05-20 13:38:01 +02:00
|
|
|
|
|
|
|
|
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
|
2020-05-20 16:05:18 +02:00
|
|
|
new_desc = "[#{to_homie_name}] #{params[:description]}".lstrip
|
2020-05-20 13:38:01 +02:00
|
|
|
MoneyMove.new(
|
|
|
|
|
homie_id: params[:from_homie_id],
|
|
|
|
|
amount: -params[:amount].to_d,
|
|
|
|
|
description: new_desc
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def create_move_to(params)
|
2020-05-20 16:05:18 +02:00
|
|
|
new_desc = "[#{from_source_name(params)}] #{params[:description]}".lstrip
|
2020-05-20 13:38:01 +02:00
|
|
|
MoneyMove.new(
|
|
|
|
|
homie_id: params[:to_homie_id],
|
|
|
|
|
amount: params[:amount].to_d,
|
|
|
|
|
description: new_desc
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-06-20 22:47:39 +02:00
|
|
|
end
|