feat(finance): show sum of ordergroup balances #54
3 changed files with 63 additions and 1 deletions
|
@ -11,7 +11,10 @@ class Finance::OrdergroupsController < Finance::BaseController
|
||||||
@ordergroups = Ordergroup.undeleted.order(sort)
|
@ordergroups = Ordergroup.undeleted.order(sort)
|
||||||
@ordergroups = @ordergroups.include_transaction_class_sum
|
@ordergroups = @ordergroups.include_transaction_class_sum
|
||||||
@ordergroups = @ordergroups.where('groups.name LIKE ?', "%#{params[:query]}%") unless params[:query].nil?
|
@ordergroups = @ordergroups.where('groups.name LIKE ?', "%#{params[:query]}%") unless params[:query].nil?
|
||||||
|
|
||||||
@ordergroups = @ordergroups.page(params[:page]).per(@per_page)
|
@ordergroups = @ordergroups.page(params[:page]).per(@per_page)
|
||||||
|
|
||||||
|
@total_balances = FinancialTransactionClass.sorted.each_with_object({}) do |c, tmp|
|
||||||
|
tmp[c.id] = c.financial_transactions.reduce(0) { | sum, t | sum + t.amount }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,3 +22,12 @@
|
||||||
%td
|
%td
|
||||||
= link_to t('.new_transaction'), new_finance_ordergroup_transaction_path(ordergroup), class: 'btn btn-mini'
|
= link_to t('.new_transaction'), new_finance_ordergroup_transaction_path(ordergroup), class: 'btn btn-mini'
|
||||||
= link_to t('.account_statement'), finance_ordergroup_transactions_path(ordergroup), class: 'btn btn-mini'
|
= link_to t('.account_statement'), finance_ordergroup_transactions_path(ordergroup), class: 'btn btn-mini'
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th= t 'Total'
|
||||||
|
%th
|
||||||
|
- FinancialTransactionClass.sorted.each do |c|
|
||||||
|
- name = FinancialTransactionClass.has_multiple_classes ? c.display : heading_helper(Ordergroup, :account_balance)
|
||||||
|
%th.numeric= format_currency @total_balances[c.id]
|
||||||
|
%th.numeric
|
||||||
|
= format_currency @total_balances.values.reduce(:+)
|
50
spec/controllers/finance/ordergroups_controller_spec.rb
Normal file
50
spec/controllers/finance/ordergroups_controller_spec.rb
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Finance::OrdergroupsController do
|
||||||
|
let(:user) { create(:user, :role_finance, :role_orders, :ordergroup) }
|
||||||
|
let(:fin_trans_type1) { create(:financial_transaction_type) }
|
||||||
|
let(:fin_trans_type2) { create(:financial_transaction_type) }
|
||||||
|
let(:fin_trans1) do
|
||||||
|
create(:financial_transaction,
|
||||||
|
user: user,
|
||||||
|
ordergroup: user.ordergroup,
|
||||||
|
financial_transaction_type: fin_trans_type1)
|
||||||
|
end
|
||||||
|
let(:fin_trans2) do
|
||||||
|
create(:financial_transaction,
|
||||||
|
user: user,
|
||||||
|
ordergroup: user.ordergroup,
|
||||||
|
financial_transaction_type: fin_trans_type1)
|
||||||
|
end
|
||||||
|
let(:fin_trans3) do
|
||||||
|
create(:financial_transaction,
|
||||||
|
user: user,
|
||||||
|
ordergroup: user.ordergroup,
|
||||||
|
financial_transaction_type: fin_trans_type2)
|
||||||
|
end
|
||||||
|
|
||||||
|
before { login user }
|
||||||
|
|
||||||
|
describe 'GET index' do
|
||||||
|
before do
|
||||||
|
fin_trans1
|
||||||
|
fin_trans2
|
||||||
|
fin_trans3
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders index page' do
|
||||||
|
get_with_defaults :index
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
expect(response).to render_template('finance/ordergroups/index')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'calculates total balance sums correctly' do
|
||||||
|
get_with_defaults :index
|
||||||
|
expect(assigns(:total_balances).size).to eq(2)
|
||||||
|
expect(assigns(:total_balances)[fin_trans_type1.id]).to eq(fin_trans1.amount + fin_trans2.amount)
|
||||||
|
expect(assigns(:total_balances)[fin_trans_type2.id]).to eq(fin_trans3.amount)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue