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,70 @@
|
|
1
|
+
require 'prawn'
|
2
|
+
class PrepayExpensePdf
|
3
|
+
include Prawn::View
|
4
|
+
include PdfTextHelper
|
5
|
+
include PdfTableHelper
|
6
|
+
|
7
|
+
attr_reader :document, :expense_member
|
8
|
+
|
9
|
+
def initialize(expense_member_id = nil)
|
10
|
+
@document = RailsDataPdf.new
|
11
|
+
@expense_member = ExpenseMember.find expense_member_id
|
12
|
+
write_content
|
13
|
+
end
|
14
|
+
|
15
|
+
def render
|
16
|
+
@document.render
|
17
|
+
end
|
18
|
+
|
19
|
+
def write_content
|
20
|
+
stroke do
|
21
|
+
dash [8, 4]
|
22
|
+
horizontal_line -36, (margin_box.width + 36), at: (160.mm - 36)
|
23
|
+
horizontal_line -36, (margin_box.width + 36), at: (99.mm - 36)
|
24
|
+
end
|
25
|
+
write_header
|
26
|
+
write_table_header
|
27
|
+
write_content_table
|
28
|
+
write_table_footer
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_header
|
32
|
+
undash
|
33
|
+
text "<u>费 用 报 销 单</u>", header_style.merge(inline_format: true)
|
34
|
+
move_down 10
|
35
|
+
end
|
36
|
+
|
37
|
+
def write_table_header
|
38
|
+
grid_table(
|
39
|
+
[
|
40
|
+
["单位:#{expense_member.member.office.company_name}", { rowspan: 2, content: expense_member.created_at.to_date.strftime('%Y 年 %m 月 %d 日') }],
|
41
|
+
["部门:#{expense_member.member.department.full_name}"]
|
42
|
+
]
|
43
|
+
)
|
44
|
+
move_down 10
|
45
|
+
end
|
46
|
+
|
47
|
+
def write_content_table
|
48
|
+
content_table(
|
49
|
+
[
|
50
|
+
['摘要', { colspan: 3, content: expense_member.expense.subject }],
|
51
|
+
[ { content: '费用说明' }, { colspan: 3, content: expense_member.details }],
|
52
|
+
[ { content: '金额' }, { content: "¥#{expense_member.amount}" }, { colspan: 2, content: expense_member.amount_cn }],
|
53
|
+
[ '附单据张数', expense_member.expense.invoices_count, '领款人签章', '' ]
|
54
|
+
]
|
55
|
+
) do
|
56
|
+
row(0).style PdfTableHelper::NORMAL_TD
|
57
|
+
row(1).style PdfTableHelper::NORMAL_TD.merge height: 90
|
58
|
+
row(2..-1).style PdfTableHelper::NORMAL_TD
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def write_table_footer
|
63
|
+
footer_table(
|
64
|
+
[
|
65
|
+
['审批人', '审核', '出纳', "报销人:#{expense_member.member.name}"]
|
66
|
+
]
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module PrepayExpenseRecord
|
2
|
+
extend RailsData::Record
|
3
|
+
|
4
|
+
config do
|
5
|
+
object ->(params){ ExpenseMember.default_where(params).take }
|
6
|
+
column :department, field: ->(o){ o.member.department.full_name }
|
7
|
+
column :company, field: ->(o){ o.member.office.company_name }
|
8
|
+
column :create_at, field: ->(o){ o.created_at.to_s }
|
9
|
+
column :subject, field: ->(o){ o.subject }
|
10
|
+
column :note, field: ->(o){ o.note }
|
11
|
+
column :amount_cn, field: ->(o) { o.amount_cn }
|
12
|
+
column :amount, field: ->(o) { o.amount }
|
13
|
+
column :invoices_count, field: ->(o) { o.invoices_count }
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="<%= active_helper(modules: 'finance/admin', active: 'menu ex-accordion is-active', item: 'menu ex-accordion') %>" data-controller="menu">
|
2
|
+
<%= content_tag :div, class: 'menu-list' do %>
|
3
|
+
<%= link_to t('finance.admin.funds.index.title'), { controller: 'finance/admin/funds' }, class: active_helper(controllers: ['funds', 'fund_budgets', 'fund_incomes', 'fund_expenses'], active: 'is-active') %>
|
4
|
+
<%= link_to t('finance.admin.assessments.index.title'), { controller: 'finance/admin/assessments' }, class: active_helper(controllers: ['assessments', 'stocks'], active: 'is-active') %>
|
5
|
+
<%= link_to t('finance.admin.budgets.index.title'), { controller: 'finance/admin/budgets' }, class: active_helper(controllers: 'budgets', active: 'is-active') %>
|
6
|
+
<%= link_to t('finance.admin.expenses.index.title'), { controller: 'finance/admin/expenses' }, class: active_helper(controllers: 'expenses', active: 'is-active') %>
|
7
|
+
<%= link_to t('finance.admin.financial_taxons.index.title'), { controller: 'finance/admin/financial_taxons' }, class: active_helper(controllers: 'financial_taxons', active: 'is-active') -%>
|
8
|
+
<% end %>
|
9
|
+
<a class="menu-label" data-action="menu#toggle">
|
10
|
+
<i class="fas fa-money-bill"></i>
|
11
|
+
<span><%= t('finance.admin.title') %></span>
|
12
|
+
<i class="fas dropdown"></i>
|
13
|
+
</a>
|
14
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= form_with theme: 'search', model: Finance::Assessment.new do |f| %>
|
2
|
+
<div class="field-body">
|
3
|
+
<%= f.text_field :name %>
|
4
|
+
<div class="field is-narrow">
|
5
|
+
<%= f.submit %>
|
6
|
+
<%= link_to t('.clear'), filter_params(except: [:name]), class: 'button is-light' %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<tr id="tr_<%= model.id %>" data-controller="show" data-action="mouseenter->show#show mouseleave->show#hide">
|
2
|
+
<%= yield %>
|
3
|
+
<td>
|
4
|
+
<span data-show-target="item" style="visibility: hidden">
|
5
|
+
<%= link_to({ controller: 'stocks', assessment_id: model.id }, aria: { label: t('finance.admin.stocks.index.title') }, class: 'button is-small is-rounded is-light') do %>
|
6
|
+
<i class="fas fa-cubes"></i>
|
7
|
+
<% end %>
|
8
|
+
<%= link_to({ action: 'show', id: model.id }, data: { turbo_frame: 'modal' }, aria: { label: t('.show') }, class: 'button is-small is-rounded is-light') do %>
|
9
|
+
<i class="fas fa-info"></i>
|
10
|
+
<% end %>
|
11
|
+
<%= link_to({ action: 'edit', id: model.id }, data: { turbo_frame: 'modal' }, aria: { label: t('.edit') }, class: 'button is-small is-rounded is-light') do %>
|
12
|
+
<i class="fas fa-pencil-alt"></i>
|
13
|
+
<% end %>
|
14
|
+
<%= button_to({ action: 'destroy', id: model.id }, method: :delete, data: { confirm: t('.confirm') }, aria: { label: t('.destroy') }, class: 'button is-small is-rounded is-light') do %>
|
15
|
+
<i class="fas fa-trash-alt"></i>
|
16
|
+
<% end %>
|
17
|
+
</span>
|
18
|
+
</td>
|
19
|
+
</tr>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="breadcrumb has-succeeds-separator">
|
2
|
+
<ul>
|
3
|
+
<% if params[:fund_id] %>
|
4
|
+
<li><%= link_to t('finance.admin.funds.index.title'), { controller: 'funds' } %></li>
|
5
|
+
<li><%= link_to @fund.name, { controller: 'funds', action: 'show', id: @fund.id } %></li>
|
6
|
+
<% end %>
|
7
|
+
<li class="is-active"><%= t('.title') %></li>
|
8
|
+
</ul>
|
9
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= form_with theme: 'search', model: Finance::Budget.new do |f| %>
|
2
|
+
<div class="field-body">
|
3
|
+
<%= f.text_field 'subject-like' %>
|
4
|
+
<%= f.number_field :amount %>
|
5
|
+
<div class="field is-narrow">
|
6
|
+
<%= f.submit %>
|
7
|
+
<%= link_to t('.clear'), filter_params(except: [:amount, 'subject-like', :fund_id]), class: 'button is-light' %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<table class="as-search">
|
2
|
+
<tr>
|
3
|
+
<th><%= Finance::Budget.human_attribute_name(:state) %></th>
|
4
|
+
<td>
|
5
|
+
<%= link_to t('.all'), filter_params(except: [:state]), class: active_params(state: '', active: 'button is-info', item: 'button is-light') %>
|
6
|
+
<% Finance::Budget.states.keys.each do |state| %>
|
7
|
+
<%= link_to Finance::Budget.enum_i18n(:state, state), filter_params(state: state), class: active_params(state: state, active: 'button is-info', item: 'button is-light') %>
|
8
|
+
<% end %>
|
9
|
+
</td>
|
10
|
+
</tr>
|
11
|
+
</table>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= render 'error_messages', target: f.object %>
|
2
|
+
<%= f.text_field :subject, required: true %>
|
3
|
+
<%= f.collection_select(:financial_taxon_id, @financial_taxons, :id, :name, { include_blank: true }) %>
|
4
|
+
<%= f.fields :expense_items, wrap: { all: nil, input: 'field is-narrow' }, on: { label: false, placeholder: true } do |ef| %>
|
5
|
+
<%= render partial: 'item_form', locals: { ef: ef } %>
|
6
|
+
<% end %>
|
7
|
+
<%= f.text_area :note %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<td><%= model.subject %></td>
|
2
|
+
<td><%= model.member.name %></td>
|
3
|
+
<td><%= model.amount %></td>
|
4
|
+
<td class="tags">
|
5
|
+
<span class="tag"><%= model.state_i18n %></span>
|
6
|
+
<% if model.can_operate?(current_member) %>
|
7
|
+
<div class="buttons has-addons">
|
8
|
+
<%= link_to 'Approve', new_admin_verification_path('Budget', model.id), class: 'button is-primary' %>
|
9
|
+
<%= link_to Budget.enum_i18n(:state, 'rejected'), new_admin_verification_path('Budget', model.id, state: 'rejected'), class: 'button is-danger' %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
</td>
|
13
|
+
<td><time data-controller="time"><%= model.created_at.to_s(:rfc822) %></time></td>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<th><%= Finance::Budget.human_attribute_name(:subject) %></th>
|
2
|
+
<th><%= Finance::Budget.human_attribute_name(:member_id) %></th>
|
3
|
+
<th><%= Finance::Budget.human_attribute_name(:amount) %></th>
|
4
|
+
<th><%= Finance::Budget.human_attribute_name(:state) %></th>
|
5
|
+
<th><%= Finance::Budget.human_attribute_name(:created_at) %></th>
|
6
|
+
<th></th>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="field is-horizontal" data-controller="budget field" data-field-index-value="<%= ef.index %>">
|
2
|
+
<% if ef.index == 0 %>
|
3
|
+
<%= ef.options[:parent_builder].label :expense_items %>
|
4
|
+
<% else %>
|
5
|
+
<label class="field-label is-normal"></label>
|
6
|
+
<% end %>
|
7
|
+
<div class="field-body">
|
8
|
+
<%= ef.text_field :note %>
|
9
|
+
<%= ef.number_field :quantity, step: 1, data: { action: 'budget#updateQuantity' } %>
|
10
|
+
<%= ef.number_field :price, step: 0.01, data: { action: 'budget#updatePrice' } %>
|
11
|
+
<%= ef.number_field :budget_amount, step: 0.01, data: { action: 'budget#updateBudgetAmount' } %>
|
12
|
+
<div class="field has-addons is-flex">
|
13
|
+
<i class="fas fa-plus" data-action="click->field#add" style="cursor: pointer"></i>
|
14
|
+
<i class="fas fa-minus" data-action="click->field#add" style="cursor: pointer"></i>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<table class="table is-fullwidth is-borderless">
|
2
|
+
<tr>
|
3
|
+
<th><%= Finance::ExpenseItem.human_attribute_name(:note) %></th>
|
4
|
+
<th><%= Finance::ExpenseItem.human_attribute_name(:budget_amount) %></th>
|
5
|
+
<th><%= Finance::ExpenseItem.human_attribute_name(:amount) %></th>
|
6
|
+
<th></th>
|
7
|
+
</tr>
|
8
|
+
<% expense_items.each do |item| %>
|
9
|
+
<tr>
|
10
|
+
<td><%= item.note %></td>
|
11
|
+
<td><%= item.budget_amount %></td>
|
12
|
+
<td><%= item.amount %></td>
|
13
|
+
<td></td>
|
14
|
+
</tr>
|
15
|
+
<% end %>
|
16
|
+
</table>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<tr>
|
2
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:subject) %></td>
|
3
|
+
<td>
|
4
|
+
<%= @budget.subject %>
|
5
|
+
</td>
|
6
|
+
</tr>
|
7
|
+
<tr>
|
8
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:state) %></td>
|
9
|
+
<td>
|
10
|
+
<span class="ui label"><%= @budget.state_i18n %></span>
|
11
|
+
</td>
|
12
|
+
</tr>
|
13
|
+
<tr>
|
14
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:expense_items) %></td>
|
15
|
+
<td class="positive">
|
16
|
+
<%= render partial: 'items', locals: { expense_items: @budget.expense_items } %>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
<tr>
|
20
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:amount) %></td>
|
21
|
+
<td>
|
22
|
+
<%= @budget.amount %>
|
23
|
+
</td>
|
24
|
+
</tr>
|
25
|
+
<tr>
|
26
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:note) %></td>
|
27
|
+
<td>
|
28
|
+
<%= @budget.note %>
|
29
|
+
</td>
|
30
|
+
</tr>
|
31
|
+
<tr>
|
32
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:checks) %></td>
|
33
|
+
<td>
|
34
|
+
<table class="table is-fullwidth is-borderless">
|
35
|
+
<% @budget.all_verifications.each do |verification| %>
|
36
|
+
<tr>
|
37
|
+
<td><%= Finance::Budget.enum_i18n(:state, verification.state) %></td>
|
38
|
+
<td><%= verification.note %></td>
|
39
|
+
<td><%= verification.member&.name %></td>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</table>
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<tr>
|
46
|
+
<td class="has-text-right"><%= Finance::Budget.human_attribute_name(:items) %></td>
|
47
|
+
<td>
|
48
|
+
<%= link_to 'items', direct_data_list_table_lists_path('BudgetItemExport', expense_id: @budget.id, format: 'xlsx') %>
|
49
|
+
</td>
|
50
|
+
</tr>
|
51
|
+
<tr>
|
52
|
+
<td>
|
53
|
+
</td>
|
54
|
+
<td>
|
55
|
+
<% if @budget.init? %>
|
56
|
+
<%= link_to t('finance.me.budgets.submit.title'), { action: 'submit', id: @budget.id }, method: :patch, data: { confirm: t('.confirm') }, class: 'button is-small' %>
|
57
|
+
<% end %>
|
58
|
+
<% Expense.types.each do |_, type| %>
|
59
|
+
<%= link_to "Transfer to #{Finance::Budget.enum_i18n(:type, type.to_s)}", { action: 'transfer', id: @budget.id, type: type }, method: :patch, class: 'button is-small' %>
|
60
|
+
<% end %>
|
61
|
+
</td>
|
62
|
+
</tr>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'visit' %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<%= render 'nav_expense' %>
|
2
|
+
<turbo-frame id="modal">
|
3
|
+
<table class="ui attached basic large table">
|
4
|
+
<tbody>
|
5
|
+
<tr>
|
6
|
+
<td class="six wide has-text-right"><%= Finance::Expense.human_attribute_name(:subject) %></td>
|
7
|
+
<td><%= @budget.subject %></td>
|
8
|
+
</tr>
|
9
|
+
<tr>
|
10
|
+
<td class="has-text-right"><%= Finance::Expense.human_attribute_name(:checks) %></td>
|
11
|
+
<td>
|
12
|
+
<table class="ui very basic table">
|
13
|
+
<% @budget.verifications.each do |check| %>
|
14
|
+
<tr>
|
15
|
+
<td><%= Finance::Expense.enum_i18n(:state, check.state) %></td>
|
16
|
+
<td><%= check.comment %></td>
|
17
|
+
<td><%= check.member.name %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</table>
|
21
|
+
</td>
|
22
|
+
</tr>
|
23
|
+
<tr>
|
24
|
+
<td class="has-text-right"><%= Finance::Expense.human_attribute_name(:amount) %></td>
|
25
|
+
<td><%= @budget.amount %></td>
|
26
|
+
</tr>
|
27
|
+
<tr>
|
28
|
+
<td class="has-text-right"><%= Finance::Expense.human_attribute_name(:expense_items) %></td>
|
29
|
+
<td>
|
30
|
+
<%= render partial: 'finance/admin/expenses/items', locals: { expense_items: @budget.expense_items } %>
|
31
|
+
</td>
|
32
|
+
</tr>
|
33
|
+
</tbody>
|
34
|
+
</table>
|
35
|
+
</turbo-frame>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'visit' %>
|