Merge branch 'implement-new-logic-for-ledger-update' into 'master'
Change MoneyMove model See merge request saburly/gangsta/roraccounting!2
This commit was merged in pull request #2.
This commit is contained in:
@@ -4,19 +4,20 @@ class MoneyMovesController < ApplicationController
|
||||
end
|
||||
|
||||
def create
|
||||
money_move = MoneyMove.create_move(money_move_params)
|
||||
if money_move.save
|
||||
json_response(money_move)
|
||||
else
|
||||
error_response(:bad_request)
|
||||
end
|
||||
money_move = MoneyMove.create_move(money_move_params)
|
||||
|
||||
if money_move
|
||||
json_response(money_move)
|
||||
else
|
||||
error_response(:bad_request)
|
||||
end
|
||||
end
|
||||
|
||||
def money_move_params
|
||||
def money_move_params
|
||||
params.require(:money_move).permit(
|
||||
:description,
|
||||
:amount,
|
||||
:from_homie_id,
|
||||
:description,
|
||||
:amount,
|
||||
:from_homie_id,
|
||||
:to_homie_id
|
||||
)
|
||||
end
|
||||
|
||||
@@ -1,25 +1,54 @@
|
||||
class MoneyMove < ApplicationRecord
|
||||
belongs_to :homie
|
||||
|
||||
def create_move(params)
|
||||
common_params = { description: params[:description] }
|
||||
def self.create_move(params)
|
||||
return false unless valid_money_move?(params)
|
||||
|
||||
move_from = MoneyMove.new(
|
||||
common_params + {
|
||||
homie_id: params[:from_homie_id],
|
||||
amount: -BigDecimal.new(params[:amount])
|
||||
}
|
||||
)
|
||||
move_to = MoneyMove.new(
|
||||
common_params + {
|
||||
homie_id: params[:from_homie_id],
|
||||
amount: BigDecimal.new(params[:amount])
|
||||
}
|
||||
)
|
||||
move_from = create_move_from(params) if double_money_move?(params)
|
||||
move_to = create_move_to(params)
|
||||
|
||||
MoneyMove.transaction do
|
||||
move_from.save!
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user