rock_books 0.6.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -10
- data/RELEASE_NOTES.md +57 -10
- data/assets/fonts/JetBrainsMono-Medium.ttf +0 -0
- data/lib/rock_books/cmd_line/command_line_interface.rb +15 -24
- data/lib/rock_books/cmd_line/main.rb +1 -9
- data/lib/rock_books/documents/book_set.rb +5 -2
- data/lib/rock_books/documents/chart_of_accounts.rb +29 -12
- data/lib/rock_books/documents/journal.rb +3 -8
- data/lib/rock_books/documents/journal_entry.rb +7 -2
- data/lib/rock_books/documents/journal_entry_builder.rb +4 -0
- data/lib/rock_books/helpers/book_set_loader.rb +3 -3
- data/lib/rock_books/reports/balance_sheet.rb +9 -43
- data/lib/rock_books/reports/book_set_reporter.rb +138 -106
- data/lib/rock_books/reports/data/bs_is_data.rb +61 -0
- data/lib/rock_books/reports/data/bs_is_section_data.rb +30 -0
- data/lib/rock_books/reports/data/journal_data.rb +38 -0
- data/lib/rock_books/reports/data/multidoc_txn_by_account_data.rb +40 -0
- data/lib/rock_books/reports/data/multidoc_txn_report_data.rb +39 -0
- data/lib/rock_books/reports/data/receipts_report_data.rb +47 -0
- data/lib/rock_books/reports/data/tx_one_account_data.rb +37 -0
- data/lib/rock_books/reports/helpers/erb_helper.rb +21 -0
- data/lib/rock_books/reports/helpers/receipts_hyperlink_converter.rb +59 -0
- data/lib/rock_books/reports/helpers/text_report_helper.rb +144 -0
- data/lib/rock_books/reports/income_statement.rb +9 -47
- data/lib/rock_books/reports/index_html_page.rb +27 -0
- data/lib/rock_books/reports/journal_report.rb +82 -0
- data/lib/rock_books/reports/multidoc_txn_by_account_report.rb +32 -0
- data/lib/rock_books/reports/multidoc_txn_report.rb +25 -0
- data/lib/rock_books/reports/receipts_report.rb +6 -55
- data/lib/rock_books/reports/templates/html/index.html.erb +158 -0
- data/lib/rock_books/reports/templates/html/report_page.html.erb +25 -0
- data/lib/rock_books/reports/templates/text/_receipt_section.txt.erb +17 -0
- data/lib/rock_books/reports/templates/text/_totals.txt.erb +8 -0
- data/lib/rock_books/reports/templates/text/balance_sheet.txt.erb +23 -0
- data/lib/rock_books/reports/templates/text/income_statement.txt.erb +23 -0
- data/lib/rock_books/reports/templates/text/journal.txt.erb +23 -0
- data/lib/rock_books/reports/templates/text/multidoc_txn_by_account_report.txt.erb +31 -0
- data/lib/rock_books/reports/templates/text/multidoc_txn_report.txt.erb +25 -0
- data/lib/rock_books/reports/templates/text/receipts_report.txt.erb +16 -0
- data/lib/rock_books/reports/templates/text/tx_one_account.txt.erb +21 -0
- data/lib/rock_books/reports/tx_one_account.rb +10 -45
- data/lib/rock_books/types/account.rb +13 -1
- data/lib/rock_books/types/account_type.rb +18 -7
- data/lib/rock_books/version.rb +2 -1
- data/manual.md +13 -16
- data/rock_books.gemspec +2 -0
- metadata +57 -10
- data/lib/rock_books/helpers/html_helper.rb +0 -29
- data/lib/rock_books/reports/index.html.erb +0 -156
- data/lib/rock_books/reports/multidoc_transaction_report.rb +0 -66
- data/lib/rock_books/reports/receipts.html.erb +0 -54
- data/lib/rock_books/reports/reporter.rb +0 -118
- data/lib/rock_books/reports/transaction_report.rb +0 -105
- data/lib/rock_books/reports/tx_by_account.rb +0 -82
@@ -1,105 +0,0 @@
|
|
1
|
-
require_relative 'reporter'
|
2
|
-
require_relative 'report_context'
|
3
|
-
|
4
|
-
module RockBooks
|
5
|
-
|
6
|
-
class TransactionReport
|
7
|
-
|
8
|
-
include Reporter
|
9
|
-
|
10
|
-
attr_accessor :journal, :context
|
11
|
-
|
12
|
-
|
13
|
-
def initialize(journal, report_context)
|
14
|
-
@journal = journal
|
15
|
-
@context = report_context
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
def generate_header
|
20
|
-
|
21
|
-
code = journal.account_code
|
22
|
-
name = journal.chart_of_accounts.name_for_code(code)
|
23
|
-
title = "Transactions for Account ##{code} -- #{name}"
|
24
|
-
|
25
|
-
lines = [banner_line]
|
26
|
-
lines << center(context.entity || 'Unspecified Entity')
|
27
|
-
lines << center(journal.title) if journal.title && journal.title.length > 0
|
28
|
-
lines << center(title)
|
29
|
-
lines << banner_line
|
30
|
-
lines << ''
|
31
|
-
lines << ''
|
32
|
-
lines << ''
|
33
|
-
lines.join("\n")
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
def format_entry_first_acct_amount(entry)
|
38
|
-
entry.date.to_s \
|
39
|
-
<< ' ' \
|
40
|
-
<< format_acct_amount(entry.acct_amounts.last) \
|
41
|
-
<< "\n"
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
# Formats an entry like this, with entry description added on additional line(s) if it exists:
|
46
|
-
# 2018-05-21 $120.00 701 Office Supplies
|
47
|
-
def format_entry_no_split(entry)
|
48
|
-
output = format_entry_first_acct_amount(entry)
|
49
|
-
|
50
|
-
if entry.description && entry.description.length > 0
|
51
|
-
output << entry.description
|
52
|
-
end
|
53
|
-
output
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
# Formats an entry like this, with entry description added on additional line(s) if it exists::
|
58
|
-
# 2018-05-21 $120.00 95.00 701 Office Supplies
|
59
|
-
# 25.00 751 Gift to Customer
|
60
|
-
def format_entry_with_split(entry)
|
61
|
-
output = format_entry_first_acct_amount(entry)
|
62
|
-
indent = ' ' * 12
|
63
|
-
|
64
|
-
entry.acct_amounts[1..-1].each do |acct_amount|
|
65
|
-
output << indent << format_acct_amount(acct_amount) << "\n"
|
66
|
-
end
|
67
|
-
|
68
|
-
if entry.description && entry.description.length > 0
|
69
|
-
output << entry.description
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
def format_entry(entry)
|
75
|
-
if entry.acct_amounts.size > 2
|
76
|
-
format_entry_with_split(entry)
|
77
|
-
else
|
78
|
-
format_entry_no_split(entry)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
|
83
|
-
def generate_report(filter = nil)
|
84
|
-
sio = StringIO.new
|
85
|
-
sio << generate_header
|
86
|
-
|
87
|
-
entries = journal.entries
|
88
|
-
if filter
|
89
|
-
entries = entries.select { |entry| filter.(entry) }
|
90
|
-
end
|
91
|
-
|
92
|
-
entries.each do |entry|
|
93
|
-
sio << format_entry(entry) << "\n"
|
94
|
-
end
|
95
|
-
totals = AcctAmount.aggregate_amounts_by_account(JournalEntry.entries_acct_amounts(entries))
|
96
|
-
sio << generate_and_format_totals('Totals', totals)
|
97
|
-
sio.string
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
alias_method :to_s, :generate_report
|
102
|
-
alias_method :call, :generate_report
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require_relative '../documents/chart_of_accounts'
|
2
|
-
require_relative '../documents/journal'
|
3
|
-
require_relative 'reporter'
|
4
|
-
require_relative 'report_context'
|
5
|
-
|
6
|
-
module RockBooks
|
7
|
-
|
8
|
-
class TxByAccount
|
9
|
-
|
10
|
-
include Reporter
|
11
|
-
|
12
|
-
attr_accessor :context
|
13
|
-
|
14
|
-
|
15
|
-
def initialize(report_context)
|
16
|
-
@context = report_context
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
def generate_header
|
21
|
-
lines = [banner_line]
|
22
|
-
lines << center(context.entity || 'Unspecified Entity')
|
23
|
-
lines << center("Transactions by Account")
|
24
|
-
lines << banner_line
|
25
|
-
lines << ''
|
26
|
-
lines << ''
|
27
|
-
lines << ''
|
28
|
-
lines.join("\n")
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
def account_header(account, account_total)
|
33
|
-
total_string = "%.2f" % account_total
|
34
|
-
title = "Total: #{total_string} -- #{account_code_name_type_string(account)}"
|
35
|
-
|
36
|
-
<<~HEREDOC
|
37
|
-
#{banner_line}
|
38
|
-
#{center(title)}
|
39
|
-
#{banner_line}
|
40
|
-
|
41
|
-
HEREDOC
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
def account_total_line(account_code, account_total)
|
46
|
-
account_name = context.chart_of_accounts.name_for_code(account_code)
|
47
|
-
"%.2f Total for account: %s - %s" % [account_total, account_code, account_name]
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
def generate_report
|
52
|
-
output = generate_header
|
53
|
-
|
54
|
-
all_entries = Journal.entries_in_documents(context.journals)
|
55
|
-
|
56
|
-
context.chart_of_accounts.accounts.each do |account|
|
57
|
-
code = account.code
|
58
|
-
account_entries = JournalEntry.entries_containing_account_code(all_entries, code)
|
59
|
-
account_total = JournalEntry.total_for_code(account_entries, code)
|
60
|
-
output << account_header(account, account_total)
|
61
|
-
|
62
|
-
account_entries.each do |entry|
|
63
|
-
output << format_multidoc_entry(entry) << "\n"
|
64
|
-
output << "\n" if entry.description && entry.description.length > 0
|
65
|
-
end
|
66
|
-
output << account_total_line(code, account_total) << "\n"
|
67
|
-
output << "\n\n\n"
|
68
|
-
end
|
69
|
-
|
70
|
-
totals = AcctAmount.aggregate_amounts_by_account(JournalEntry.entries_acct_amounts(all_entries))
|
71
|
-
output << generate_and_format_totals('Totals', totals)
|
72
|
-
|
73
|
-
output
|
74
|
-
end
|
75
|
-
|
76
|
-
alias_method :to_s, :generate_report
|
77
|
-
alias_method :call, :generate_report
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|