70 lines
1.7 KiB
Ruby
70 lines
1.7 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 params[:from_homie_id].present?
|
|
move_to = create_move_to(params) if params[:to_homie_id].present?
|
|
|
|
MoneyMove.transaction do
|
|
move_from.save! if move_from.present?
|
|
move_to.save! if move_to.present?
|
|
end
|
|
|
|
true
|
|
end
|
|
|
|
def self.create_settle_record(homie_id, amount)
|
|
new_desc = "Settled on #{DateTime.now.utc}"
|
|
settle_record = MoneyMove.new(
|
|
homie_id: homie_id,
|
|
amount: amount,
|
|
description: new_desc
|
|
)
|
|
settle_record.save
|
|
end
|
|
|
|
class << self
|
|
private
|
|
|
|
def valid_money_move?(params)
|
|
params[:amount].present? && (params[:to_homie_id].present? || params[:from_homie_id].present?)
|
|
end
|
|
|
|
def from_source_name(params)
|
|
if params[:from_homie_id].present?
|
|
Homie.find(params[:from_homie_id]).name
|
|
else
|
|
'External'
|
|
end
|
|
end
|
|
|
|
def to_source_name(params)
|
|
if params[:to_homie_id].present?
|
|
Homie.find(params[:to_homie_id]).name
|
|
else
|
|
'External'
|
|
end
|
|
end
|
|
|
|
def create_move_from(params)
|
|
new_desc = "[#{to_source_name(params)}] #{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
|