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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -10
  3. data/RELEASE_NOTES.md +57 -10
  4. data/assets/fonts/JetBrainsMono-Medium.ttf +0 -0
  5. data/lib/rock_books/cmd_line/command_line_interface.rb +15 -24
  6. data/lib/rock_books/cmd_line/main.rb +1 -9
  7. data/lib/rock_books/documents/book_set.rb +5 -2
  8. data/lib/rock_books/documents/chart_of_accounts.rb +29 -12
  9. data/lib/rock_books/documents/journal.rb +3 -8
  10. data/lib/rock_books/documents/journal_entry.rb +7 -2
  11. data/lib/rock_books/documents/journal_entry_builder.rb +4 -0
  12. data/lib/rock_books/helpers/book_set_loader.rb +3 -3
  13. data/lib/rock_books/reports/balance_sheet.rb +9 -43
  14. data/lib/rock_books/reports/book_set_reporter.rb +138 -106
  15. data/lib/rock_books/reports/data/bs_is_data.rb +61 -0
  16. data/lib/rock_books/reports/data/bs_is_section_data.rb +30 -0
  17. data/lib/rock_books/reports/data/journal_data.rb +38 -0
  18. data/lib/rock_books/reports/data/multidoc_txn_by_account_data.rb +40 -0
  19. data/lib/rock_books/reports/data/multidoc_txn_report_data.rb +39 -0
  20. data/lib/rock_books/reports/data/receipts_report_data.rb +47 -0
  21. data/lib/rock_books/reports/data/tx_one_account_data.rb +37 -0
  22. data/lib/rock_books/reports/helpers/erb_helper.rb +21 -0
  23. data/lib/rock_books/reports/helpers/receipts_hyperlink_converter.rb +59 -0
  24. data/lib/rock_books/reports/helpers/text_report_helper.rb +144 -0
  25. data/lib/rock_books/reports/income_statement.rb +9 -47
  26. data/lib/rock_books/reports/index_html_page.rb +27 -0
  27. data/lib/rock_books/reports/journal_report.rb +82 -0
  28. data/lib/rock_books/reports/multidoc_txn_by_account_report.rb +32 -0
  29. data/lib/rock_books/reports/multidoc_txn_report.rb +25 -0
  30. data/lib/rock_books/reports/receipts_report.rb +6 -55
  31. data/lib/rock_books/reports/templates/html/index.html.erb +158 -0
  32. data/lib/rock_books/reports/templates/html/report_page.html.erb +25 -0
  33. data/lib/rock_books/reports/templates/text/_receipt_section.txt.erb +17 -0
  34. data/lib/rock_books/reports/templates/text/_totals.txt.erb +8 -0
  35. data/lib/rock_books/reports/templates/text/balance_sheet.txt.erb +23 -0
  36. data/lib/rock_books/reports/templates/text/income_statement.txt.erb +23 -0
  37. data/lib/rock_books/reports/templates/text/journal.txt.erb +23 -0
  38. data/lib/rock_books/reports/templates/text/multidoc_txn_by_account_report.txt.erb +31 -0
  39. data/lib/rock_books/reports/templates/text/multidoc_txn_report.txt.erb +25 -0
  40. data/lib/rock_books/reports/templates/text/receipts_report.txt.erb +16 -0
  41. data/lib/rock_books/reports/templates/text/tx_one_account.txt.erb +21 -0
  42. data/lib/rock_books/reports/tx_one_account.rb +10 -45
  43. data/lib/rock_books/types/account.rb +13 -1
  44. data/lib/rock_books/types/account_type.rb +18 -7
  45. data/lib/rock_books/version.rb +2 -1
  46. data/manual.md +13 -16
  47. data/rock_books.gemspec +2 -0
  48. metadata +57 -10
  49. data/lib/rock_books/helpers/html_helper.rb +0 -29
  50. data/lib/rock_books/reports/index.html.erb +0 -156
  51. data/lib/rock_books/reports/multidoc_transaction_report.rb +0 -66
  52. data/lib/rock_books/reports/receipts.html.erb +0 -54
  53. data/lib/rock_books/reports/reporter.rb +0 -118
  54. data/lib/rock_books/reports/transaction_report.rb +0 -105
  55. data/lib/rock_books/reports/tx_by_account.rb +0 -82
@@ -33,6 +33,8 @@ Gem::Specification.new do |spec|
33
33
  spec.add_dependency 'amazing_print', '> 0'
34
34
  spec.add_dependency 'os', '> 1.0.0'
35
35
  spec.add_dependency 'pry', '> 0.0.0'
36
+ spec.add_dependency 'prawn', '>= 2.1'
37
+ spec.add_dependency 'tty-progressbar'
36
38
 
37
39
  spec.add_development_dependency "bundler", "~> 2.0"
38
40
  spec.add_development_dependency "rake", ">= 12.3.3"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rock_books
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Bennett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-16 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: prawn
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '2.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: tty-progressbar
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +139,7 @@ files:
111
139
  - README.md
112
140
  - RELEASE_NOTES.md
113
141
  - Rakefile
142
+ - assets/fonts/JetBrainsMono-Medium.ttf
114
143
  - bin/console
115
144
  - bin/setup
116
145
  - exe/rock_books
@@ -130,19 +159,37 @@ files:
130
159
  - lib/rock_books/filters/acct_amount_filters.rb
131
160
  - lib/rock_books/filters/journal_entry_filters.rb
132
161
  - lib/rock_books/helpers/book_set_loader.rb
133
- - lib/rock_books/helpers/html_helper.rb
134
162
  - lib/rock_books/helpers/parse_helper.rb
135
163
  - lib/rock_books/reports/balance_sheet.rb
136
164
  - lib/rock_books/reports/book_set_reporter.rb
165
+ - lib/rock_books/reports/data/bs_is_data.rb
166
+ - lib/rock_books/reports/data/bs_is_section_data.rb
167
+ - lib/rock_books/reports/data/journal_data.rb
168
+ - lib/rock_books/reports/data/multidoc_txn_by_account_data.rb
169
+ - lib/rock_books/reports/data/multidoc_txn_report_data.rb
170
+ - lib/rock_books/reports/data/receipts_report_data.rb
171
+ - lib/rock_books/reports/data/tx_one_account_data.rb
172
+ - lib/rock_books/reports/helpers/erb_helper.rb
173
+ - lib/rock_books/reports/helpers/receipts_hyperlink_converter.rb
174
+ - lib/rock_books/reports/helpers/text_report_helper.rb
137
175
  - lib/rock_books/reports/income_statement.rb
138
- - lib/rock_books/reports/index.html.erb
139
- - lib/rock_books/reports/multidoc_transaction_report.rb
140
- - lib/rock_books/reports/receipts.html.erb
176
+ - lib/rock_books/reports/index_html_page.rb
177
+ - lib/rock_books/reports/journal_report.rb
178
+ - lib/rock_books/reports/multidoc_txn_by_account_report.rb
179
+ - lib/rock_books/reports/multidoc_txn_report.rb
141
180
  - lib/rock_books/reports/receipts_report.rb
142
181
  - lib/rock_books/reports/report_context.rb
143
- - lib/rock_books/reports/reporter.rb
144
- - lib/rock_books/reports/transaction_report.rb
145
- - lib/rock_books/reports/tx_by_account.rb
182
+ - lib/rock_books/reports/templates/html/index.html.erb
183
+ - lib/rock_books/reports/templates/html/report_page.html.erb
184
+ - lib/rock_books/reports/templates/text/_receipt_section.txt.erb
185
+ - lib/rock_books/reports/templates/text/_totals.txt.erb
186
+ - lib/rock_books/reports/templates/text/balance_sheet.txt.erb
187
+ - lib/rock_books/reports/templates/text/income_statement.txt.erb
188
+ - lib/rock_books/reports/templates/text/journal.txt.erb
189
+ - lib/rock_books/reports/templates/text/multidoc_txn_by_account_report.txt.erb
190
+ - lib/rock_books/reports/templates/text/multidoc_txn_report.txt.erb
191
+ - lib/rock_books/reports/templates/text/receipts_report.txt.erb
192
+ - lib/rock_books/reports/templates/text/tx_one_account.txt.erb
146
193
  - lib/rock_books/reports/tx_one_account.rb
147
194
  - lib/rock_books/types/account.rb
148
195
  - lib/rock_books/types/account_type.rb
@@ -431,7 +478,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
431
478
  - !ruby/object:Gem::Version
432
479
  version: '0'
433
480
  requirements: []
434
- rubygems_version: 3.1.4
481
+ rubygems_version: 3.2.3
435
482
  signing_key:
436
483
  specification_version: 4
437
484
  summary: Very basic accounting package.
@@ -1,29 +0,0 @@
1
- module RockBooks
2
- module HtmlHelper
3
-
4
- module_function
5
-
6
- def self.convert_receipts_to_hyperlinks(html_text)
7
- html_lines = html_text.split("\n")
8
- replacements_made = false
9
-
10
- html_lines.each_with_index do |line, index|
11
- matches = /Receipt:\s*(.*?)</.match(line)
12
- if matches
13
- receipt_filespec = matches[1]
14
- line_with_hyperlink = line.gsub( \
15
- /Receipt:\s*#{receipt_filespec}/, \
16
- %Q{Receipt: <a href="../../../receipts/#{receipt_filespec}">#{receipt_filespec}</a>})
17
- html_lines[index] = line_with_hyperlink
18
- replacements_made = true
19
- end
20
- end
21
-
22
- if replacements_made
23
- html_text = html_lines.join("\n")
24
- end
25
-
26
- [html_text, replacements_made]
27
- end
28
- end
29
- end
@@ -1,156 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
-
4
- <html>
5
-
6
- <head>
7
-
8
- <!--Bootstrap:-->
9
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
10
-
11
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
12
- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
13
-
14
- <style>
15
- body {
16
- padding: 18px;
17
- background-color: #e7f7cd;
18
- color: darkgreen;
19
- }
20
-
21
- h2 {
22
- margin-top: 32px;
23
- margin-bottom: 12px;
24
- }
25
-
26
- .this_page_style {
27
- background-color: #e7f7cd;
28
- color: darkgreen;
29
- border: 0px;
30
- }
31
-
32
-
33
-
34
- </style>
35
-
36
- </head>
37
-
38
- <body>
39
-
40
- <h1><%= chart_of_accounts.entity %></h1>
41
- <p class="muted">Reports Generated at <%= DateTime.now.strftime('%Y-%m-%d %H:%M:%S') %> by RockBooks version <%=RockBooks::VERSION %></p>
42
-
43
-
44
- <h2>Financial Statements</h2>
45
- <div id="financial-statements">
46
- <a href='balance_sheet.html' class="btn btn-success">Balance Sheet</a>
47
- <a href='income_statement.html' class="btn btn-success">Income Statement</a>
48
- </div>
49
-
50
-
51
- <h2>Supporting Documents</h2>
52
- <div id="supporting-documents" style="display: inline ">
53
- <%
54
- subdir_link = ->(name, caption) do
55
- dir_name = File.expand_path(File.join(Dir.pwd, name))
56
- if Dir.exist?(dir_name)
57
- %Q{<a href=#{dir_name} class="btn btn-success">#{caption}</a>}
58
- end
59
- end
60
- %>
61
- <%= subdir_link.('invoices', 'Invoices') %>
62
- <%= subdir_link.('receipts', 'Receipts') %>
63
- <%= subdir_link.('statements', 'Statements') %>
64
- <%= subdir_link.('worksheets', 'Worksheets') %>
65
- </div>
66
-
67
-
68
- <h2>All Transactions Reports</h2>
69
- <div id="all-transactions">
70
- <a href="all_txns_by_acct.html" class="btn btn-success">By Account</a>
71
- <a href="all_txns_by_amount.html" class="btn btn-success">By Amount</a>
72
- <a href="all_txns_by_date.html" class="btn btn-success">By Date</a>
73
- </div>
74
-
75
- <% collapsible_heading = ->(caption, href) do
76
- %Q{<br /><br />
77
- <div class="collapsible-heading">
78
- <div class="container-fluid">
79
- <div class="row">
80
-
81
- <div class="col-sm2" style="margin-right: 12px;">
82
- <a class="btn btn-success" data-toggle="collapse" href="#{href}" role="button" aria-expanded="false" aria-controls="collapseExample">
83
- +/-
84
- </a>
85
- </div>
86
-
87
- <div class="col-sm10">
88
- <h2 style="margin: 0px;">#{caption}</h2>
89
- </div>
90
- </div>
91
- </div>
92
- </div>
93
- }
94
- end
95
- %>
96
-
97
- <%= collapsible_heading.('Journal Reports', '#journal-reports') %>
98
-
99
- </div>
100
- <div class="collapse" id="journal-reports">
101
- <div class="card card-body this_page_style">
102
- <ul>
103
- <% journals.each do |journal|
104
- filespec = journal.short_name + '.html'
105
- caption = "#{journal.title} -- #{journal.short_name} -- #{journal.account_code}"%>
106
- <li><a href="<%= filespec %>" class="this_page_style" target="_blank"><%= caption %></a></li>
107
- <% end %>
108
- </ul>
109
- </div>
110
- </div>
111
-
112
-
113
- <%= collapsible_heading.('Individual Accounts', '#individual-accounts') %>
114
-
115
- <div class="collapse" id="individual-accounts">
116
- <div class="card card-body this_page_style">
117
- <ul>
118
-
119
- <%
120
- chart_of_accounts.accounts.each do |account|
121
- filespec = File.join('single-account', "acct_#{account.code}.html")
122
- caption = "#{account.name} (#{account.code})"
123
- %>
124
- <li><a href="<%= filespec %>" class="this_page_style"><%= caption %></a></li>
125
- <% end %>
126
- </ul>
127
- </div>
128
- </div>
129
- </div>
130
-
131
-
132
- <%= collapsible_heading.('Other', '#other') %>
133
-
134
- <div class="collapse" id="other">
135
- <div class="card card-body this_page_style">
136
- <ul>
137
- <% if run_options.do_receipts %>
138
- <li><a href="receipts.html" class="this_page_style">Missing and Existing Receipts</a></li>
139
- <% end %>
140
- </ul>
141
- </div>
142
- </div>
143
-
144
- <%= collapsible_heading.('Reports in PDF and Text Formats', '#other-formats') %>
145
-
146
- <div class="collapse" id="other-formats">
147
- <div class="card card-body this_page_style">
148
- <ul>
149
- <li><a href="../pdf" class="this_page_style" target="_blank">PDF Format</a></li>
150
- <li><a href="../txt" class="this_page_style" target="_blank">Text Format</a></li>
151
- </ul>
152
- </div>
153
- </div>
154
-
155
- </body>
156
- </html>
@@ -1,66 +0,0 @@
1
- require_relative '../documents/journal'
2
- require_relative 'reporter'
3
- require_relative 'report_context'
4
-
5
- module RockBooks
6
-
7
- class MultidocTransactionReport
8
-
9
- include Reporter
10
-
11
- attr_accessor :context
12
-
13
- SORT_BY_VALID_OPTIONS = %i(date_and_account amount)
14
-
15
- def initialize(report_context)
16
- @context = report_context
17
- end
18
-
19
-
20
- def generate_header(sort_by)
21
- lines = [banner_line]
22
- lines << center(context.entity || 'Unspecified Entity')
23
- lines << center('Multi Document Transaction Report')
24
- lines << center('Sorted by Amount Descending') if sort_by == :amount
25
- lines << ''
26
- lines << center('Source Documents:')
27
- lines << ''
28
- context.journals.each do |document|
29
- short_name = SHORT_NAME_FORMAT_STRING % document.short_name
30
- lines << center("#{short_name} -- #{document.title}")
31
- end
32
- lines << banner_line
33
- lines << ''
34
- lines << ' Date Document Amount Account'
35
- lines << ' ---- -------- ------ -------'
36
- lines.join("\n") << "\n\n"
37
- end
38
-
39
-
40
- def generate_report(filter = nil, sort_by = :date_and_account)
41
- unless SORT_BY_VALID_OPTIONS.include?(sort_by)
42
- raise Error.new("sort_by option '#{sort_by}' not in valid choices of #{SORT_BY_VALID_OPTIONS}.")
43
- end
44
-
45
- entries = Journal.entries_in_documents(context.journals, filter)
46
-
47
- if sort_by == :amount
48
- JournalEntry.sort_entries_by_amount_descending!(entries)
49
- end
50
-
51
- sio = StringIO.new
52
- sio << generate_header(sort_by)
53
- entries.each { |entry| sio << format_multidoc_entry(entry) << "\n" }
54
-
55
- totals = AcctAmount.aggregate_amounts_by_account(JournalEntry.entries_acct_amounts(entries))
56
- sio << generate_and_format_totals('Totals', totals)
57
-
58
- sio << "\n"
59
- sio.string
60
- end
61
-
62
-
63
- alias_method :to_s, :generate_report
64
- alias_method :call, :generate_report
65
- end
66
- end
@@ -1,54 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <body>
4
-
5
- <h1><%= chart_of_accounts.entity %> -- Receipts</h1>
6
- <p>Reports Generated at <%= DateTime.now.strftime('%Y-%m-%d_%H-%M-%S') %> by RockBooks version <%=RockBooks::VERSION %></p>
7
- <br />
8
-
9
- <% receipts.each %>
10
- <h2>Financial Statements</h2>
11
- <ul>
12
- <li><a href='balance_sheet.html'>Balance Sheet</a></li>
13
- <li><a href='income_statement.html'>Income Statement</a></li>
14
- </ul>
15
-
16
- <h2>All Transactions</h2>
17
- <ul>
18
- <li><a href="all_txns_by_acct.html">By Account</a></li>
19
- <li><a href="all_txns_by_amount.html">By Amount</a></li>
20
- <li><a href="all_txns_by_date.html">By Date</a></li>
21
- </ul>
22
-
23
- <h2>Journals</h2>
24
- <ul>
25
- <% journals.each do |journal|
26
- filespec = journal.short_name + '.html'
27
- caption = "#{journal.title} -- #{journal.short_name} -- #{journal.account_code}"
28
- %>
29
- <li><a href="<%= filespec %>"><%= caption %></a></li>
30
- <% end %>
31
- </ul>
32
-
33
- <h2>Individual Accounts</h2>
34
- <ul>
35
-
36
- <%
37
- chart_of_accounts.accounts.each do |account|
38
- filespec = File.join('single-account', "acct_#{account.code}.html")
39
- caption = "#{account.name} (#{account.code})"
40
- %>
41
- <li><a href="<%= filespec %>"><%= caption %></a></li>
42
- <% end %>
43
- </ul>
44
-
45
-
46
- <h2>Receipts</h2>
47
- <ul>
48
- <% if run_options.do_receipts %>
49
- <li><a href="receipts.html">Missing and Existing Receipts</a></li>
50
- <% end %>
51
- </ul>
52
-
53
- </body>
54
- </html>
@@ -1,118 +0,0 @@
1
- require_relative '../documents/journal_entry'
2
-
3
- module RockBooks
4
- module Reporter
5
-
6
- module_function
7
-
8
- SHORT_NAME_MAX_LENGTH = 16
9
-
10
- SHORT_NAME_FORMAT_STRING = "%#{SHORT_NAME_MAX_LENGTH}.#{SHORT_NAME_MAX_LENGTH}s"
11
-
12
-
13
- def page_width
14
- context.page_width || 80
15
- end
16
-
17
-
18
- def format_account_code(code)
19
- "%*.*s" % [max_account_code_length, max_account_code_length, code]
20
- end
21
-
22
-
23
- def account_code_name_type_string(account)
24
- "#{account.code} -- #{account.name} (#{account.type.to_s.capitalize})"
25
- end
26
-
27
-
28
- def format_amount(amount)
29
- "%9.2f" % amount
30
- end
31
-
32
-
33
- # e.g. " 117.70 tr.mileage Travel - Mileage Allowance"
34
- def format_acct_amount(acct_amount)
35
- "%s %s %s" % [
36
- format_amount(acct_amount.amount),
37
- format_account_code(acct_amount.code),
38
- context.chart_of_accounts.name_for_code(acct_amount.code)
39
- ]
40
- end
41
-
42
-
43
- def banner_line
44
- @banner_line ||= '-' * page_width
45
- end
46
-
47
-
48
- def center(string)
49
- indent = (page_width - string.length) / 2
50
- indent = 0 if indent < 0
51
- (' ' * indent) + string
52
- end
53
-
54
-
55
- def max_account_code_length
56
- @max_account_code_length ||= context.chart_of_accounts.max_account_code_length
57
- end
58
-
59
-
60
- def generate_and_format_totals(section_caption, totals)
61
- output = section_caption
62
- output << "\n#{'-' * section_caption.length}\n\n"
63
- format_string = "%12.2f %-#{context.chart_of_accounts.max_account_code_length}s %s\n"
64
- totals.keys.sort.each do |account_code|
65
- account_name = context.chart_of_accounts.name_for_code(account_code)
66
- account_total = totals[account_code]
67
- output << format_string % [account_total, account_code, account_name]
68
- end
69
-
70
- output << "------------\n"
71
- output << "%12.2f\n" % totals.values.sum.round(2)
72
- output
73
- end
74
-
75
-
76
- def generate_account_type_section(section_caption, totals, section_type, need_to_reverse_sign)
77
- account_codes_this_section = context.chart_of_accounts.account_codes_of_type(section_type)
78
-
79
- totals_this_section = totals.select do |account_code, _amount|
80
- account_codes_this_section.include?(account_code)
81
- end
82
-
83
- if need_to_reverse_sign
84
- totals_this_section.each { |code, amount| totals_this_section[code] = -amount }
85
- end
86
-
87
- section_total_amount = totals_this_section.map { |aa| aa.last }.sum
88
-
89
- output = generate_and_format_totals(section_caption, totals_this_section)
90
- [ output, section_total_amount ]
91
- end
92
-
93
-
94
- def format_multidoc_entry(entry)
95
- acct_amounts = entry.acct_amounts
96
-
97
- # "2017-10-29 hsbc_visa":
98
- output = entry.date.to_s << ' ' << (SHORT_NAME_FORMAT_STRING % entry.doc_short_name) << ' '
99
-
100
- indent = ' ' * output.length
101
-
102
- output << format_acct_amount(acct_amounts.first) << "\n"
103
-
104
- acct_amounts[1..-1].each do |acct_amount|
105
- output << indent << format_acct_amount(acct_amount) << "\n"
106
- end
107
-
108
- if entry.description && entry.description.length > 0
109
- output << entry.description
110
- end
111
-
112
- output
113
- end
114
-
115
- end
116
- end
117
-
118
-