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
@@ -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