rails_finance 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +20 -0
- data/Rakefile +32 -0
- data/app/controllers/finance/admin/assessments_controller.rb +55 -0
- data/app/controllers/finance/admin/base_controller.rb +4 -0
- data/app/controllers/finance/admin/budgets_controller.rb +83 -0
- data/app/controllers/finance/admin/expense_members_controller.rb +59 -0
- data/app/controllers/finance/admin/expenses_controller.rb +71 -0
- data/app/controllers/finance/admin/financial_taxons_controller.rb +67 -0
- data/app/controllers/finance/admin/fund_incomes_controller.rb +59 -0
- data/app/controllers/finance/admin/funds_controller.rb +58 -0
- data/app/controllers/finance/admin/home_controller.rb +8 -0
- data/app/controllers/finance/admin/stocks_controller.rb +60 -0
- data/app/controllers/finance/me/base_controller.rb +4 -0
- data/app/controllers/finance/me/budgets_controller.rb +111 -0
- data/app/controllers/finance/me/expense_members_controller.rb +73 -0
- data/app/controllers/finance/me/expenses_controller.rb +129 -0
- data/app/controllers/finance_controller/me.rb +14 -0
- data/app/models/budget/finance/fund_budget.rb +5 -0
- data/app/models/budget/finance/stock_budget.rb +5 -0
- data/app/models/expense/finance/payable_expense.rb +5 -0
- data/app/models/expense/finance/prepay_expense.rb +5 -0
- data/app/models/finance/application_record.rb +5 -0
- data/app/models/finance/assessment.rb +5 -0
- data/app/models/finance/budget.rb +7 -0
- data/app/models/finance/expense.rb +7 -0
- data/app/models/finance/expense_item.rb +5 -0
- data/app/models/finance/expense_member.rb +6 -0
- data/app/models/finance/ext/financial.rb +24 -0
- data/app/models/finance/ext/member.rb +13 -0
- data/app/models/finance/financial_taxon.rb +7 -0
- data/app/models/finance/fund.rb +6 -0
- data/app/models/finance/fund_income.rb +5 -0
- data/app/models/finance/model/assessment.rb +26 -0
- data/app/models/finance/model/budget/fund_budget.rb +5 -0
- data/app/models/finance/model/budget/stock_budget.rb +10 -0
- data/app/models/finance/model/budget.rb +152 -0
- data/app/models/finance/model/expense/payable_expense.rb +5 -0
- data/app/models/finance/model/expense/prepay_expense.rb +5 -0
- data/app/models/finance/model/expense.rb +168 -0
- data/app/models/finance/model/expense_item.rb +36 -0
- data/app/models/finance/model/expense_member.rb +130 -0
- data/app/models/finance/model/financial_taxon.rb +27 -0
- data/app/models/finance/model/fund.rb +36 -0
- data/app/models/finance/model/fund_income.rb +30 -0
- data/app/models/finance/model/stock.rb +33 -0
- data/app/models/finance/stock.rb +5 -0
- data/app/models/finance.rb +12 -0
- data/app/pdfs/borrow_expense_pdf.rb +70 -0
- data/app/pdfs/payout_expense_pdf.rb +70 -0
- data/app/pdfs/prepay_expense_pdf.rb +70 -0
- data/app/records/borrow_expense_record.rb +10 -0
- data/app/records/prepay_expense_record.rb +16 -0
- data/app/views/admin/_finance_nav.html.erb +14 -0
- data/app/views/admin/_nav_expense.html.erb +4 -0
- data/app/views/finance/admin/assessments/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/assessments/_filter_form.html.erb +9 -0
- data/app/views/finance/admin/assessments/_form.html.erb +2 -0
- data/app/views/finance/admin/assessments/_index_tbody.html.erb +2 -0
- data/app/views/finance/admin/assessments/_index_thead.html.erb +3 -0
- data/app/views/finance/admin/assessments/_index_tr.html.erb +19 -0
- data/app/views/finance/admin/assessments/_new_form.html.erb +4 -0
- data/app/views/finance/admin/assessments/_show_table.html.erb +4 -0
- data/app/views/finance/admin/assessments/index.html.erb +5 -0
- data/app/views/finance/admin/base/_nav.html.erb +3 -0
- data/app/views/finance/admin/budgets/_breadcrumb.html.erb +9 -0
- data/app/views/finance/admin/budgets/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/budgets/_filter_form.html.erb +10 -0
- data/app/views/finance/admin/budgets/_filter_table.html.erb +11 -0
- data/app/views/finance/admin/budgets/_form.html.erb +7 -0
- data/app/views/finance/admin/budgets/_index_tbody.html.erb +13 -0
- data/app/views/finance/admin/budgets/_index_thead.html.erb +6 -0
- data/app/views/finance/admin/budgets/_item_form.html.erb +17 -0
- data/app/views/finance/admin/budgets/_items.html.erb +16 -0
- data/app/views/finance/admin/budgets/_new_form.html.erb +4 -0
- data/app/views/finance/admin/budgets/_show/_breadcrumb.html.erb +6 -0
- data/app/views/finance/admin/budgets/_show_table.html.erb +62 -0
- data/app/views/finance/admin/budgets/index.html.erb +5 -0
- data/app/views/finance/admin/budgets/next.turbo_stream.erb +1 -0
- data/app/views/finance/admin/budgets/show.htmlx.erb +35 -0
- data/app/views/finance/admin/budgets/trigger.js.erb +1 -0
- data/app/views/finance/admin/expense_members/_edit_form.html.erb +3 -0
- data/app/views/finance/admin/expense_members/_form.html.erb +5 -0
- data/app/views/finance/admin/expense_members/_index_tbody.html.erb +53 -0
- data/app/views/finance/admin/expense_members/_index_thead.html.erb +12 -0
- data/app/views/finance/admin/expense_members/index.html.erb +8 -0
- data/app/views/finance/admin/expenses/_breadcrumb.html.erb +9 -0
- data/app/views/finance/admin/expenses/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/expenses/_filter_form.html.erb +10 -0
- data/app/views/finance/admin/expenses/_filter_table.html.erb +11 -0
- data/app/views/finance/admin/expenses/_form.html.erb +12 -0
- data/app/views/finance/admin/expenses/_index_tbody.html.erb +13 -0
- data/app/views/finance/admin/expenses/_index_thead.html.erb +6 -0
- data/app/views/finance/admin/expenses/_item_form.html.erb +18 -0
- data/app/views/finance/admin/expenses/_items.html.erb +20 -0
- data/app/views/finance/admin/expenses/_member_form.html.erb +16 -0
- data/app/views/finance/admin/expenses/_new_form.html.erb +4 -0
- data/app/views/finance/admin/expenses/index.html.erb +5 -0
- data/app/views/finance/admin/expenses/next.turbo_stream.erb +1 -0
- data/app/views/finance/admin/expenses/show.html.erb +121 -0
- data/app/views/finance/admin/expenses/trigger.turbo_stream.erb +1 -0
- data/app/views/finance/admin/financial_taxons/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/financial_taxons/_filter_form.html.erb +10 -0
- data/app/views/finance/admin/financial_taxons/_form.html.erb +5 -0
- data/app/views/finance/admin/financial_taxons/_index_tbody.html.erb +36 -0
- data/app/views/finance/admin/financial_taxons/_index_thead.html.erb +5 -0
- data/app/views/finance/admin/financial_taxons/_index_tr.html.erb +13 -0
- data/app/views/finance/admin/financial_taxons/_new_form.html.erb +4 -0
- data/app/views/finance/admin/financial_taxons/index.html.erb +6 -0
- data/app/views/finance/admin/fund_incomes/_breadcrumb.html.erb +7 -0
- data/app/views/finance/admin/fund_incomes/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/fund_incomes/_filter_form.html.erb +9 -0
- data/app/views/finance/admin/fund_incomes/_form.html.erb +4 -0
- data/app/views/finance/admin/fund_incomes/_index_tbody.html.erb +5 -0
- data/app/views/finance/admin/fund_incomes/_index_thead.html.erb +4 -0
- data/app/views/finance/admin/fund_incomes/_new_form.html.erb +4 -0
- data/app/views/finance/admin/fund_incomes/_show_table.html.erb +12 -0
- data/app/views/finance/admin/fund_incomes/index.html.erb +5 -0
- data/app/views/finance/admin/funds/_edit_form.html.erb +3 -0
- data/app/views/finance/admin/funds/_filter_form.html.erb +9 -0
- data/app/views/finance/admin/funds/_form.html.erb +5 -0
- data/app/views/finance/admin/funds/_index_tbody.html.erb +14 -0
- data/app/views/finance/admin/funds/_index_thead.html.erb +8 -0
- data/app/views/finance/admin/funds/_new_form.html.erb +3 -0
- data/app/views/finance/admin/funds/_show_table.html.erb +16 -0
- data/app/views/finance/admin/funds/index.html.erb +5 -0
- data/app/views/finance/admin/home/index.html.erb +6 -0
- data/app/views/finance/admin/stocks/_breadcrumb.html.erb +7 -0
- data/app/views/finance/admin/stocks/_edit_form.html.erb +4 -0
- data/app/views/finance/admin/stocks/_filter_form.html.erb +9 -0
- data/app/views/finance/admin/stocks/_form.html.erb +4 -0
- data/app/views/finance/admin/stocks/_index_tbody.html.erb +6 -0
- data/app/views/finance/admin/stocks/_index_thead.html.erb +7 -0
- data/app/views/finance/admin/stocks/_new_form.html.erb +4 -0
- data/app/views/finance/admin/stocks/_show_table.html.erb +16 -0
- data/app/views/finance/admin/stocks/index.html.erb +5 -0
- data/app/views/finance/me/budgets/_breadcrumb.html.erb +6 -0
- data/app/views/finance/me/budgets/_filter_form.html.erb +8 -0
- data/app/views/finance/me/budgets/_filter_table.html.erb +11 -0
- data/app/views/finance/me/budgets/_index_tbody.html.erb +23 -0
- data/app/views/finance/me/budgets/_index_thead.html.erb +4 -0
- data/app/views/finance/me/budgets/_items.html.erb +22 -0
- data/app/views/finance/me/budgets/_show/_breadcrumb.html.erb +6 -0
- data/app/views/finance/me/budgets/admin.html.erb +5 -0
- data/app/views/finance/me/budgets/financial_taxons.js.erb +7 -0
- data/app/views/finance/me/budgets/index.html.erb +5 -0
- data/app/views/finance/me/budgets/index.js +45 -0
- data/app/views/finance/me/budgets/submit.turbo_stream.erb +1 -0
- data/app/views/finance/me/budgets/transfer.turbo_stream.erb +1 -0
- data/app/views/finance/me/expense_members/_breadcrumb.html.erb +6 -0
- data/app/views/finance/me/expense_members/_button.html.erb +0 -0
- data/app/views/finance/me/expense_members/_filter_form.html.erb +10 -0
- data/app/views/finance/me/expense_members/_form.html.erb +9 -0
- data/app/views/finance/me/expense_members/_index_tbody.html.erb +8 -0
- data/app/views/finance/me/expense_members/_index_thead.html.erb +7 -0
- data/app/views/finance/me/expense_members/_show_items.html.erb +1 -0
- data/app/views/finance/me/expense_members/admin.html.erb +3 -0
- data/app/views/finance/me/expense_members/index.html.erb +6 -0
- data/app/views/finance/me/expense_members/items.js.erb +1 -0
- data/app/views/finance/me/expense_members/show.html.erb +62 -0
- data/app/views/finance/me/expenses/_breadcrumb.html.erb +7 -0
- data/app/views/finance/me/expenses/_edit_form.html.erb +3 -0
- data/app/views/finance/me/expenses/_filter_form.html.erb +8 -0
- data/app/views/finance/me/expenses/_filter_table.html.erb +11 -0
- data/app/views/finance/me/expenses/_index_tbody.html.erb +16 -0
- data/app/views/finance/me/expenses/_index_thead.html.erb +6 -0
- data/app/views/finance/me/expenses/_index_tr.html.erb +14 -0
- data/app/views/finance/me/expenses/_new_form.html.erb +4 -0
- data/app/views/finance/me/expenses/_show/_breadcrumb.html.erb +6 -0
- data/app/views/finance/me/expenses/_show_table.html.erb +124 -0
- data/app/views/finance/me/expenses/admin.html.erb +5 -0
- data/app/views/finance/me/expenses/confirm.html.erb +27 -0
- data/app/views/finance/me/expenses/financial_taxons.js.erb +44 -0
- data/app/views/finance/me/expenses/index.html.erb +5 -0
- data/app/views/finance/me/expenses/index.js +42 -0
- data/app/views/finance/me/expenses/show.html.erb +3 -0
- data/app/views/me/_finance_nav.html.erb +11 -0
- data/config/locales/en.attributes.yml +6 -0
- data/config/locales/en.controller.yml +21 -0
- data/config/locales/en.enum.yml +18 -0
- data/config/locales/zh.attributes.yml +65 -0
- data/config/locales/zh.controller.yml +57 -0
- data/config/locales/zh.enum.yml +38 -0
- data/config/routes.rb +63 -0
- data/lib/rails_finance/config.rb +11 -0
- data/lib/rails_finance/engine.rb +26 -0
- data/lib/rails_finance/version.rb +3 -0
- data/lib/rails_finance.rb +2 -0
- metadata +259 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
module Finance
|
2
|
+
class Admin::FundsController < Admin::BaseController
|
3
|
+
before_action :set_fund, only: [:show, :edit, :update, :destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
q_params = {}
|
7
|
+
q_params.merge! default_params
|
8
|
+
|
9
|
+
@funds = Fund.default_where(q_params).order(id: :asc).page(params[:page])
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@fund = Fund.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
@fund = Fund.new(fund_params)
|
18
|
+
|
19
|
+
unless @fund.save
|
20
|
+
render :new, locals: { model: @fund }, status: :unprocessable_entity
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def show
|
25
|
+
end
|
26
|
+
|
27
|
+
def edit
|
28
|
+
end
|
29
|
+
|
30
|
+
def update
|
31
|
+
@fund.assign_attributes(fund_params)
|
32
|
+
|
33
|
+
unless @fund.save
|
34
|
+
render :edit, locals: { model: @fund }, status: :unprocessable_entity
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy
|
39
|
+
@fund.destroy
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def set_fund
|
44
|
+
@fund = Fund.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def fund_params
|
48
|
+
p = params.fetch(:fund, {}).permit(
|
49
|
+
:name,
|
50
|
+
:budget_amount,
|
51
|
+
:amount,
|
52
|
+
:note
|
53
|
+
)
|
54
|
+
p.merge! default_form_params
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Finance
|
2
|
+
class Admin::StocksController < Admin::BaseController
|
3
|
+
before_action :set_assessment
|
4
|
+
before_action :set_stock, only: [:show, :edit, :update, :destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@stocks = @assessment.stocks.order(id: :asc).page(params[:page])
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
@stock = @assessment.stocks.build(member: current_member)
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
@stock = @assessment.stocks.build(stock_params)
|
16
|
+
@stock.member = current_member
|
17
|
+
|
18
|
+
unless @stock.save
|
19
|
+
render :new, locals: { model: @stock }, status: :unprocessable_entity
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def show
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
@stock.assign_attributes(stock_params)
|
31
|
+
|
32
|
+
unless @stock.save
|
33
|
+
render :edit, locals: { model: @stock }, status: :unprocessable_entity
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@stock.destroy
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
def set_assessment
|
43
|
+
@assessment = Assessment.find params[:assessment_id]
|
44
|
+
end
|
45
|
+
|
46
|
+
def set_stock
|
47
|
+
@stock = Stock.find(params[:id])
|
48
|
+
end
|
49
|
+
|
50
|
+
def stock_params
|
51
|
+
params.fetch(:stock, {}).permit(
|
52
|
+
:ratio,
|
53
|
+
:amount,
|
54
|
+
:expense_amount,
|
55
|
+
:note
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Finance
|
2
|
+
class Me::BudgetsController < Admin::BudgetsController
|
3
|
+
include FinanceController::Me
|
4
|
+
before_action :set_budget, only: [:show, :edit, :update, :submit, :transfer, :bill, :destroy]
|
5
|
+
before_action :prepare_form
|
6
|
+
# after_action only: [:create, :update, :destroy] do
|
7
|
+
# mark_audits(Purchase, include: [:purchase_items], note: 'record test')
|
8
|
+
# end
|
9
|
+
|
10
|
+
def index
|
11
|
+
q_params = {}
|
12
|
+
q_params.merge! params.permit(:state)
|
13
|
+
|
14
|
+
@budgets = current_member.budgets.default_where(q_params).page(params[:page])
|
15
|
+
end
|
16
|
+
|
17
|
+
def admin
|
18
|
+
q_params = {
|
19
|
+
verifier_id: current_member.id
|
20
|
+
}
|
21
|
+
q_params.merge! params.permit(:state, :id)
|
22
|
+
|
23
|
+
@budgets = Budget.default_where(q_params).page(params[:page])
|
24
|
+
end
|
25
|
+
|
26
|
+
def new
|
27
|
+
@budget = current_member.budgets.build
|
28
|
+
@budget.expense_items.build
|
29
|
+
|
30
|
+
@taxon_options = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def create
|
34
|
+
@budget = current_member.budgets.build(budget_params)
|
35
|
+
|
36
|
+
unless @budget.save
|
37
|
+
render :new, locals: { model: @budget }, status: :unprocessable_entity
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def financial_taxons
|
42
|
+
budget_params.fetch('expense_items_attributes', {}).each do |_, v|
|
43
|
+
v.delete('id')
|
44
|
+
end
|
45
|
+
@budget = current_member.budgets.build(financial_taxon_id: budget_params[:financial_taxon_id])
|
46
|
+
@financial_taxons = @budget.financial_taxon.children.map { |i| [i.name, i.id] }
|
47
|
+
end
|
48
|
+
|
49
|
+
def show
|
50
|
+
end
|
51
|
+
|
52
|
+
def edit
|
53
|
+
@taxon_options = FinancialTaxon.roots.map { |i| [i.name, i.id] }
|
54
|
+
end
|
55
|
+
|
56
|
+
def update
|
57
|
+
@budget.assign_attributes(budget_params)
|
58
|
+
|
59
|
+
unless @budget.save
|
60
|
+
render :edit, locals: { model: @budget }, status: :unprocessable_entity
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def transfer
|
65
|
+
@budget.transfer(params[:type])
|
66
|
+
end
|
67
|
+
|
68
|
+
def submit
|
69
|
+
@budget.state = 'verifying' if @budget.init?
|
70
|
+
@budget.save
|
71
|
+
end
|
72
|
+
|
73
|
+
def bill
|
74
|
+
disposition = params[:disposition] || 'inline'
|
75
|
+
@pdf = PayoutExpensePdf.new(@budget.id)
|
76
|
+
|
77
|
+
respond_to do |format|
|
78
|
+
format.html
|
79
|
+
format.js
|
80
|
+
format.pdf { send_data @pdf.render, filename: 'bill_file', disposition: disposition, type: 'application/pdf' }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def destroy
|
85
|
+
@budget.destroy
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
def set_budget
|
90
|
+
@budget = Budget.find params[:id]
|
91
|
+
end
|
92
|
+
|
93
|
+
def prepare_form
|
94
|
+
q_params = {}
|
95
|
+
q_params.merge! default_params
|
96
|
+
|
97
|
+
@financial_taxons = FinancialTaxon.default_where(q_params)
|
98
|
+
end
|
99
|
+
|
100
|
+
def budget_params
|
101
|
+
params.fetch(:budget, {}).permit(
|
102
|
+
:subject,
|
103
|
+
:amount,
|
104
|
+
:note,
|
105
|
+
:financial_taxon_id,
|
106
|
+
expense_items_attributes: {}
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Finance
|
2
|
+
class Me::ExpenseMembersController < Admin::ExpenseMembersController
|
3
|
+
include FinanceController::Me
|
4
|
+
skip_before_action :set_expense, only: [:index]
|
5
|
+
before_action :set_expense_member, only: [:show, :items, :edit, :update, :bill]
|
6
|
+
|
7
|
+
def index
|
8
|
+
@expense_members = current_member.expense_members.page(params[:page])
|
9
|
+
end
|
10
|
+
|
11
|
+
def admin
|
12
|
+
q_params = {
|
13
|
+
'expense_member.verifier_id': current_member.id
|
14
|
+
}
|
15
|
+
q_params.merge! params.permit(:state, :id)
|
16
|
+
|
17
|
+
@expense_members = ExpenseMember.default_where(q_params).page(params[:page])
|
18
|
+
end
|
19
|
+
|
20
|
+
def show
|
21
|
+
end
|
22
|
+
|
23
|
+
def bill
|
24
|
+
disposition = params[:disposition] || 'inline'
|
25
|
+
if params[:type] == 'borrow'
|
26
|
+
@pdf = BorrowExpensePdf.new(@expense_member.id)
|
27
|
+
elsif params[:type] == 'reimburse'
|
28
|
+
@pdf = PrepayExpensePdf.new(@expense_member.id)
|
29
|
+
end
|
30
|
+
respond_to do |format|
|
31
|
+
format.html
|
32
|
+
format.js
|
33
|
+
format.pdf { send_data @pdf.render, filename: 'bill_file', disposition: disposition, type: 'application/pdf' }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def items
|
38
|
+
disposition = params[:disposition] || 'inline'
|
39
|
+
|
40
|
+
respond_to do |format|
|
41
|
+
format.html
|
42
|
+
format.js
|
43
|
+
format.xlsx { send_data @pdf.render, filename: 'bill_file', disposition: disposition, type: 'application/pdf' }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def edit
|
48
|
+
@payment_methods = current_member.payment_methods
|
49
|
+
end
|
50
|
+
|
51
|
+
def update
|
52
|
+
unless @expense_member.update(expense_member_params)
|
53
|
+
render :edit, locals: { model: @expense_member }, status: :unprocessable_entity
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def set_expense_member
|
59
|
+
@expense_member = ExpenseMember.find(params[:id])
|
60
|
+
end
|
61
|
+
|
62
|
+
def expense_member_params
|
63
|
+
params.fetch(:expense_member, {}).permit(
|
64
|
+
:amount,
|
65
|
+
:advance,
|
66
|
+
:financial_taxon_id,
|
67
|
+
:note,
|
68
|
+
:payment_method_id
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module Finance
|
2
|
+
class Me::ExpensesController < Admin::ExpensesController
|
3
|
+
include FinanceController::Me
|
4
|
+
before_action :set_expense, only: [:show, :edit, :update, :submit, :confirm, :bill, :destroy]
|
5
|
+
before_action :prepare_form
|
6
|
+
# after_action only: [:create, :update, :destroy] do
|
7
|
+
# mark_audits(Purchase, include: [:purchase_items], note: 'record test')
|
8
|
+
# end
|
9
|
+
|
10
|
+
def index
|
11
|
+
q_params = {}
|
12
|
+
q_params.merge! params.permit(:state)
|
13
|
+
|
14
|
+
@expenses = current_member.created_expenses.default_where(q_params).page(params[:page])
|
15
|
+
end
|
16
|
+
|
17
|
+
def admin
|
18
|
+
q_params = {
|
19
|
+
verifier_id: current_member.id
|
20
|
+
}
|
21
|
+
q_params.merge! params.permit(:state, :id)
|
22
|
+
|
23
|
+
@expenses = Expense.default_where(q_params).page(params[:page])
|
24
|
+
end
|
25
|
+
|
26
|
+
def new
|
27
|
+
@expense = current_member.created_expenses.build(type: params[:type])
|
28
|
+
@expense.expense_items.build
|
29
|
+
@expense.expense_members.build(member_id: current_member.id)
|
30
|
+
@taxon_options = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def create
|
34
|
+
@expense = current_member.created_expenses.build(expense_params)
|
35
|
+
|
36
|
+
unless @expense.save
|
37
|
+
render :new, locals: { model: @expense }, status: :unprocessable_entity
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def financial_taxons
|
42
|
+
q = expense_params['expense_items_attributes'].each do |_, v|
|
43
|
+
v.delete('id')
|
44
|
+
end
|
45
|
+
q.fetch('expense_members_attributes', {}).each do |_, v|
|
46
|
+
v.delete('id')
|
47
|
+
end
|
48
|
+
@expense = current_member.created_expenses.build(q)
|
49
|
+
@taxon_options = @expense.financial_taxon.children.map { |i| [i.name, i.id] }
|
50
|
+
end
|
51
|
+
|
52
|
+
def show
|
53
|
+
end
|
54
|
+
|
55
|
+
def edit
|
56
|
+
if @expense.expense_members.count == 0
|
57
|
+
@expense.expense_members.build(member_id: current_member.id)
|
58
|
+
end
|
59
|
+
if current_member.respond_to? :payment_methods
|
60
|
+
@payment_methods = current_member.payment_methods.where(myself: true)
|
61
|
+
else
|
62
|
+
@payment_methods = []
|
63
|
+
end
|
64
|
+
@taxon_options = FinancialTaxon.roots.map { |i| [i.name, i.id] }
|
65
|
+
end
|
66
|
+
|
67
|
+
def update
|
68
|
+
@expense.assign_attributes(expense_params)
|
69
|
+
|
70
|
+
unless @expense.save
|
71
|
+
render :edit, locals: { model: @expense }, status: :unprocessable_entity
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def confirm
|
76
|
+
@payment_methods = Trade::PaymentMethod.where(myself: false)
|
77
|
+
if @expense.type == 'Finance::PrepayExpense'
|
78
|
+
@expense.expense_members.build(member_id: current_member.id, amount: @expense.amount)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def submit
|
83
|
+
@expense.state = 'verifying' if @expense.init?
|
84
|
+
@expense.save
|
85
|
+
end
|
86
|
+
|
87
|
+
def bill
|
88
|
+
disposition = params[:disposition] || 'inline'
|
89
|
+
@pdf = PayoutExpensePdf.new(@expense.id)
|
90
|
+
|
91
|
+
respond_to do |format|
|
92
|
+
format.html
|
93
|
+
format.js
|
94
|
+
format.pdf { send_data @pdf.render, filename: 'bill_file', disposition: disposition, type: 'application/pdf' }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def destroy
|
99
|
+
@expense.destroy
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
def set_expense
|
104
|
+
@expense = Expense.find(params[:id])
|
105
|
+
end
|
106
|
+
|
107
|
+
def prepare_form
|
108
|
+
q_params = {}
|
109
|
+
q_params.merge! default_params
|
110
|
+
|
111
|
+
@financial_taxons = FinancialTaxon.default_where(q_params)
|
112
|
+
end
|
113
|
+
|
114
|
+
def expense_params
|
115
|
+
params.fetch(:expense, {}).permit(
|
116
|
+
:subject,
|
117
|
+
:type,
|
118
|
+
:amount,
|
119
|
+
:note,
|
120
|
+
:proof,
|
121
|
+
:financial_taxon_id,
|
122
|
+
:payment_method_id,
|
123
|
+
expense_members_attributes: {},
|
124
|
+
expense_items_attributes: {}
|
125
|
+
)
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|