rock_books 0.2.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/LICENSE.txt +201 -21
  4. data/README.md +4 -2
  5. data/RELEASE_NOTES.md +41 -0
  6. data/assets/fonts/JetBrainsMono-Medium.ttf +0 -0
  7. data/lib/rock_books/cmd_line/command_line_interface.rb +24 -13
  8. data/lib/rock_books/cmd_line/main.rb +1 -9
  9. data/lib/rock_books/documents/book_set.rb +5 -131
  10. data/lib/rock_books/documents/chart_of_accounts.rb +69 -37
  11. data/lib/rock_books/documents/journal.rb +47 -46
  12. data/lib/rock_books/documents/journal_entry.rb +7 -2
  13. data/lib/rock_books/documents/journal_entry_builder.rb +4 -0
  14. data/lib/rock_books/helpers/book_set_loader.rb +3 -3
  15. data/lib/rock_books/helpers/html_helper.rb +35 -0
  16. data/lib/rock_books/reports/balance_sheet.rb +8 -42
  17. data/lib/rock_books/reports/book_set_reporter.rb +218 -0
  18. data/lib/rock_books/reports/data/bs_is_data.rb +61 -0
  19. data/lib/rock_books/reports/data/bs_is_section_data.rb +28 -0
  20. data/lib/rock_books/reports/data/journal_data.rb +37 -0
  21. data/lib/rock_books/reports/data/multidoc_txn_by_account_data.rb +40 -0
  22. data/lib/rock_books/reports/data/multidoc_txn_report_data.rb +39 -0
  23. data/lib/rock_books/reports/data/receipts_report_data.rb +47 -0
  24. data/lib/rock_books/reports/data/tx_one_account_data.rb +37 -0
  25. data/lib/rock_books/reports/helpers/erb_helper.rb +26 -0
  26. data/lib/rock_books/reports/helpers/reporter.rb +134 -0
  27. data/lib/rock_books/reports/income_statement.rb +8 -46
  28. data/lib/rock_books/reports/journal_report.rb +72 -0
  29. data/lib/rock_books/reports/multidoc_txn_by_account_report.rb +32 -0
  30. data/lib/rock_books/reports/multidoc_txn_report.rb +25 -0
  31. data/lib/rock_books/reports/receipts_report.rb +5 -41
  32. data/lib/rock_books/reports/report_context.rb +1 -4
  33. data/lib/rock_books/reports/templates/html/index.html.erb +141 -0
  34. data/lib/rock_books/reports/templates/html/report_page.html.erb +12 -0
  35. data/lib/rock_books/reports/templates/text/_receipt_section.txt.erb +17 -0
  36. data/lib/rock_books/reports/templates/text/_totals.txt.erb +8 -0
  37. data/lib/rock_books/reports/templates/text/balance_sheet.txt.erb +21 -0
  38. data/lib/rock_books/reports/templates/text/income_statement.txt.erb +21 -0
  39. data/lib/rock_books/reports/templates/text/journal.txt.erb +20 -0
  40. data/lib/rock_books/reports/templates/text/multidoc_txn_by_account_report.txt.erb +28 -0
  41. data/lib/rock_books/reports/templates/text/multidoc_txn_report.txt.erb +22 -0
  42. data/lib/rock_books/reports/templates/text/receipts_report.txt.erb +13 -0
  43. data/lib/rock_books/reports/templates/text/tx_one_account.txt.erb +18 -0
  44. data/lib/rock_books/reports/tx_one_account.rb +9 -44
  45. data/lib/rock_books/types/account.rb +13 -1
  46. data/lib/rock_books/types/account_type.rb +18 -7
  47. data/lib/rock_books/version.rb +1 -1
  48. data/rock_books.gemspec +5 -3
  49. data/sample_data/minimal/rockbooks-reports/html/ck_hsbc_disb.html +40 -0
  50. data/sample_data/minimal/rockbooks-reports/html/index.html +271 -0
  51. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_accts_rec.html +27 -0
  52. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_bank_fees.html +27 -0
  53. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_books_refs.html +27 -0
  54. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_cc_hsbc_visa.html +74 -0
  55. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_cc_proc.html +27 -0
  56. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_ck_hsbc.html +45 -0
  57. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_conf_fees.html +36 -0
  58. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_cowork_fees.html +42 -0
  59. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_govt_fees.html +27 -0
  60. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_inet_fees.html +27 -0
  61. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_int_exp.html +27 -0
  62. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_loan_to_sh.html +47 -0
  63. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_meals_ent.html +27 -0
  64. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_misc_exp.html +27 -0
  65. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_mktng_exp.html +27 -0
  66. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_own_equity.html +35 -0
  67. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_prof_fees.html +27 -0
  68. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_repair_maint.html +27 -0
  69. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_ret_earn.html +27 -0
  70. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_ship_exp.html +27 -0
  71. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_sls_cons.html +35 -0
  72. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_sw_exp.html +27 -0
  73. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_airfare.html +35 -0
  74. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_autorent.html +27 -0
  75. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_gas_etc.html +27 -0
  76. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_govt.html +27 -0
  77. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_lodging.html +36 -0
  78. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_m_e.html +27 -0
  79. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_m_i.html +27 -0
  80. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_mileage.html +35 -0
  81. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_misc.html +27 -0
  82. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_parking.html +27 -0
  83. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_perdiem_mi.html +35 -0
  84. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_taxi.html +27 -0
  85. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_trainfare.html +27 -0
  86. data/sample_data/minimal/rockbooks-reports/html/single-account/acct_tr_unclass.html +27 -0
  87. data/sample_data/minimal/rockbooks-reports/pdf/all_txns_by_acct.pdf +0 -0
  88. data/sample_data/minimal/rockbooks-reports/pdf/all_txns_by_amount.pdf +0 -0
  89. data/sample_data/minimal/rockbooks-reports/pdf/all_txns_by_date.pdf +0 -0
  90. data/sample_data/minimal/rockbooks-reports/pdf/balance_sheet.pdf +0 -0
  91. data/sample_data/minimal/rockbooks-reports/pdf/ck_hsbc_disb.pdf +0 -0
  92. data/sample_data/minimal/rockbooks-reports/pdf/general.pdf +0 -0
  93. data/sample_data/minimal/rockbooks-reports/pdf/hsbc_visa.pdf +0 -0
  94. data/sample_data/minimal/rockbooks-reports/pdf/income_statement.pdf +0 -0
  95. data/sample_data/minimal/rockbooks-reports/pdf/receipts.pdf +0 -0
  96. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_accts_rec.pdf +0 -0
  97. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_bank_fees.pdf +0 -0
  98. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_books_refs.pdf +0 -0
  99. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_cc_hsbc_visa.pdf +0 -0
  100. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_cc_proc.pdf +0 -0
  101. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_ck_hsbc.pdf +0 -0
  102. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_conf_fees.pdf +0 -0
  103. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_cowork_fees.pdf +0 -0
  104. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_govt_fees.pdf +0 -0
  105. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_inet_fees.pdf +0 -0
  106. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_insurance.pdf +0 -0
  107. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_int_exp.pdf +0 -0
  108. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_loan_to_sh.pdf +0 -0
  109. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_meals_ent.pdf +0 -0
  110. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_misc_exp.pdf +0 -0
  111. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_mktng_exp.pdf +0 -0
  112. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_own_equity.pdf +0 -0
  113. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_paypal.pdf +0 -0
  114. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_prof_fees.pdf +0 -0
  115. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_repair_maint.pdf +0 -0
  116. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_ret_earn.pdf +0 -0
  117. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_ship_exp.pdf +0 -0
  118. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_sls_cons.pdf +0 -0
  119. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_supplies.pdf +0 -0
  120. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_sw_exp.pdf +0 -0
  121. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_airfare.pdf +0 -0
  122. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_autorent.pdf +0 -0
  123. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_gas_etc.pdf +0 -0
  124. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_govt.pdf +0 -0
  125. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_lodging.pdf +0 -0
  126. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_m_e.pdf +0 -0
  127. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_m_i.pdf +0 -0
  128. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_mileage.pdf +0 -0
  129. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_misc.pdf +0 -0
  130. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_parking.pdf +0 -0
  131. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_perdiem_mi.pdf +0 -0
  132. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_taxi.pdf +0 -0
  133. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_trainfare.pdf +0 -0
  134. data/sample_data/minimal/rockbooks-reports/pdf/single-account/acct_tr_unclass.pdf +0 -0
  135. data/sample_data/minimal/rockbooks-reports/txt/ck_hsbc_disb.txt +24 -0
  136. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_accts_rec.txt +11 -0
  137. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_bank_fees.txt +11 -0
  138. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_books_refs.txt +11 -0
  139. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_cc_hsbc_visa.txt +58 -0
  140. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_cc_proc.txt +11 -0
  141. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_ck_hsbc.txt +29 -0
  142. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_conf_fees.txt +20 -0
  143. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_cowork_fees.txt +26 -0
  144. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_govt_fees.txt +11 -0
  145. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_inet_fees.txt +11 -0
  146. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_int_exp.txt +11 -0
  147. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_loan_to_sh.txt +31 -0
  148. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_meals_ent.txt +11 -0
  149. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_misc_exp.txt +11 -0
  150. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_mktng_exp.txt +11 -0
  151. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_own_equity.txt +19 -0
  152. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_prof_fees.txt +11 -0
  153. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_repair_maint.txt +11 -0
  154. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_ret_earn.txt +11 -0
  155. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_ship_exp.txt +11 -0
  156. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_sls_cons.txt +19 -0
  157. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_sw_exp.txt +11 -0
  158. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_airfare.txt +19 -0
  159. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_autorent.txt +11 -0
  160. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_gas_etc.txt +11 -0
  161. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_govt.txt +11 -0
  162. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_lodging.txt +20 -0
  163. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_m_e.txt +11 -0
  164. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_m_i.txt +11 -0
  165. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_mileage.txt +19 -0
  166. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_misc.txt +11 -0
  167. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_parking.txt +11 -0
  168. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_perdiem_mi.txt +19 -0
  169. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_taxi.txt +11 -0
  170. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_trainfare.txt +11 -0
  171. data/sample_data/minimal/rockbooks-reports/txt/single-account/acct_tr_unclass.txt +11 -0
  172. metadata +176 -16
  173. data/lib/rock_books/documents/index.html.erb +0 -156
  174. data/lib/rock_books/documents/receipts.html.erb +0 -54
  175. data/lib/rock_books/reports/multidoc_transaction_report.rb +0 -66
  176. data/lib/rock_books/reports/reporter.rb +0 -118
  177. data/lib/rock_books/reports/transaction_report.rb +0 -103
  178. data/lib/rock_books/reports/tx_by_account.rb +0 -82
@@ -1,5 +1,5 @@
1
- require_relative '../documents/journal'
2
- require_relative 'report_context'
1
+ require_relative 'helpers/erb_helper'
2
+ require_relative 'helpers/reporter'
3
3
 
4
4
  module RockBooks
5
5
 
@@ -7,57 +7,19 @@ module RockBooks
7
7
  class IncomeStatement
8
8
 
9
9
  include Reporter
10
+ include ErbHelper
10
11
 
11
- attr_accessor :context
12
+ attr_reader :data, :context
12
13
 
13
14
 
14
- def initialize(report_context)
15
+ def initialize(report_context, data)
15
16
  @context = report_context
17
+ @data = data
16
18
  end
17
19
 
18
20
 
19
- def start_date
20
- context.chart_of_accounts.start_date
21
+ def generate
22
+ ErbHelper.render_hashes('text/income_statement.txt.erb', data, template_presentation_context)
21
23
  end
22
-
23
-
24
- def end_date
25
- context.chart_of_accounts.end_date
26
- end
27
-
28
-
29
- def generate_header
30
- lines = [banner_line]
31
- lines << center(context.entity || 'Unspecified Entity')
32
- lines << "#{center("Income Statement -- #{start_date} to #{end_date}")}"
33
- lines << banner_line
34
- lines << ''
35
- lines << ''
36
- lines << ''
37
- lines.join("\n")
38
- end
39
-
40
-
41
- def generate_report
42
- filter = RockBooks::JournalEntryFilters.date_in_range(start_date, end_date)
43
- acct_amounts = Journal.acct_amounts_in_documents(context.journals, filter)
44
- totals = AcctAmount.aggregate_amounts_by_account(acct_amounts)
45
- totals.each { |aa| aa[1] = -aa[1] } # income statement shows credits as positive, debits as negative
46
- output = generate_header
47
-
48
- income_output, income_total = generate_account_type_section('Income', totals, :income, true)
49
- expense_output, expense_total = generate_account_type_section('Expenses', totals, :expense, false)
50
-
51
- grand_total = income_total - expense_total
52
-
53
- output << [income_output, expense_output].join("\n\n")
54
- output << "\n#{"%12.2f Net Income" % grand_total}\n============\n"
55
- output
56
- end
57
-
58
- alias_method :to_s, :generate_report
59
- alias_method :call, :generate_report
60
-
61
-
62
24
  end
63
25
  end
@@ -0,0 +1,72 @@
1
+ require_relative 'data/journal_data'
2
+ require_relative 'helpers/erb_helper'
3
+ require_relative 'helpers/reporter'
4
+
5
+ module RockBooks
6
+
7
+ class JournalReport
8
+
9
+ include Reporter
10
+ include ErbHelper
11
+
12
+ attr_accessor :context, :report_data
13
+
14
+
15
+ def initialize(report_data, report_context, filter = nil)
16
+ @report_data = report_data
17
+ @context = report_context
18
+ end
19
+
20
+
21
+ def generate
22
+ presentation_context = template_presentation_context.merge(fn_format_entry: method(:format_entry))
23
+ ErbHelper.render_hashes('text/journal.txt.erb', report_data, presentation_context)
24
+ end
25
+
26
+
27
+ private def format_entry_first_acct_amount(entry)
28
+ entry.date.to_s \
29
+ + ' ' \
30
+ + format_acct_amount(entry.acct_amounts.last) \
31
+ + "\n"
32
+ end
33
+
34
+
35
+ # Formats an entry like this, with entry description added on additional line(s) if it exists:
36
+ # 2018-05-21 $120.00 701 Office Supplies
37
+ private def format_entry_no_split(entry)
38
+ output = format_entry_first_acct_amount(entry)
39
+
40
+ if entry.description && entry.description.length > 0
41
+ output += entry.description
42
+ end
43
+ output
44
+ end
45
+
46
+
47
+ # Formats an entry like this, with entry description added on additional line(s) if it exists::
48
+ # 2018-05-21 $120.00 95.00 701 Office Supplies
49
+ # 25.00 751 Gift to Customer
50
+ private def format_entry_with_split(entry)
51
+ output = format_entry_first_acct_amount(entry)
52
+ indent = ' ' * 12
53
+
54
+ entry.acct_amounts[1..-1].each do |acct_amount|
55
+ output << indent << format_acct_amount(acct_amount) << "\n"
56
+ end
57
+
58
+ if entry.description && entry.description.length > 0
59
+ output << entry.description
60
+ end
61
+ end
62
+
63
+
64
+ private def format_entry(entry)
65
+ if entry.acct_amounts.size > 2
66
+ format_entry_with_split(entry)
67
+ else
68
+ format_entry_no_split(entry)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../documents/chart_of_accounts'
2
+ require_relative 'helpers/erb_helper'
3
+ require_relative 'helpers/reporter'
4
+ require_relative 'report_context'
5
+ require_relative 'data/multidoc_txn_by_account_data'
6
+
7
+ module RockBooks
8
+
9
+ class MultidocTransactionByAccountReport
10
+
11
+ include Reporter
12
+ include ErbHelper
13
+
14
+ attr_reader :context, :data
15
+
16
+
17
+ def initialize(data, report_context)
18
+ @data = data
19
+ @context = report_context
20
+ end
21
+
22
+ def account_total_line(account_code, account_total)
23
+ account_name = context.chart_of_accounts.name_for_code(account_code)
24
+ sprintf("%.2f Total for account: %s - %s", account_total, account_code, account_name)
25
+ end
26
+
27
+ def generate
28
+ presentation_context = template_presentation_context.merge({ fn_account_total_line: method(:account_total_line) })
29
+ ErbHelper.render_hashes('text/multidoc_txn_by_account_report.txt.erb', data, presentation_context)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'data/multidoc_txn_report_data'
2
+ require_relative '../documents/journal'
3
+ require_relative 'helpers/erb_helper'
4
+ require_relative 'helpers/reporter'
5
+ require_relative 'report_context'
6
+
7
+ module RockBooks
8
+
9
+ class MultidocTransactionReport
10
+
11
+ include Reporter
12
+ include ErbHelper
13
+
14
+ attr_reader :context, :data
15
+
16
+ def initialize(report_data, report_context)
17
+ @data = report_data
18
+ @context = report_context
19
+ end
20
+
21
+ def generate
22
+ ErbHelper.render_hashes('text/multidoc_txn_report.txt.erb', data, template_presentation_context)
23
+ end
24
+ end
25
+ end
@@ -6,52 +6,16 @@ class ReceiptsReport
6
6
 
7
7
  include Reporter
8
8
 
9
- attr_reader :context, :missing, :existing
9
+ attr_reader :context, :data
10
10
 
11
-
12
- def initialize(report_context, missing, existing)
11
+ def initialize(report_context, data)
13
12
  @context = report_context
14
- @missing = missing
15
- @existing = existing
16
- end
17
-
18
-
19
- def generate_header
20
- lines = [banner_line]
21
- lines << center(context.entity || 'Unspecified Entity')
22
- lines << "#{center("Receipts Report")}"
23
- lines << banner_line
24
- lines << ''
25
- lines << ''
26
- lines << ''
27
- lines.join("\n")
28
- end
29
-
30
-
31
- def receipt_info_line(info)
32
- "%-16.16s %s\n" % [info[:journal], info[:receipt]]
13
+ @data = data
33
14
  end
34
15
 
35
16
 
36
- def column_headings
37
- format_string = "%-16.16s %s\n"
38
- (format_string % ['Journal', 'Receipt Filespec']) << (format_string % %w(------- ----------------)) << "\n"
17
+ def generate
18
+ ErbHelper.render_hashes('text/receipts_report.txt.erb', data, template_presentation_context)
39
19
  end
40
-
41
-
42
- def generate_report
43
- output = generate_header
44
-
45
- output << "Missing Receipts:\n\n" << column_headings
46
- missing.each { |info| output << receipt_info_line(info) }
47
-
48
- output << "\n\n\nExisting Receipts:\n\n" << column_headings
49
- existing.each { |info| output << receipt_info_line(info) }
50
-
51
- output
52
- end
53
-
54
- alias_method :to_s, :generate_report
55
- alias_method :call, :generate_report
56
20
  end
57
21
  end
@@ -1,9 +1,6 @@
1
1
  module RockBooks
2
2
 
3
- class ReportContext < Struct.new(
4
- :chart_of_accounts,
5
- :journals,
6
- :page_width)
3
+ class ReportContext < Struct.new(:chart_of_accounts, :journals, :page_width)
7
4
 
8
5
  def entity
9
6
  chart_of_accounts.entity
@@ -0,0 +1,141 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+
5
+ <meta charset="utf-8">
6
+
7
+ <!--Bootstrap:-->
8
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
9
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
10
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
11
+
12
+ <style>
13
+ body {
14
+ padding: 36px;
15
+ background-color: #88c1f7;
16
+ color: #01182d;
17
+ }
18
+
19
+ h2 {
20
+ margin-top: 32px;
21
+ margin-bottom: 12px;
22
+ }
23
+
24
+ .this_page_style {
25
+ background-color: #88c1f7;
26
+ color: #01182d;
27
+ border: 0px;
28
+ }
29
+ </style>
30
+ </head>
31
+
32
+ <body>
33
+
34
+ <h1><%= chart_of_accounts.entity %></h1>
35
+ <p class="muted">Reports Generated at <%= DateTime.now.strftime('%Y-%m-%d %H:%M:%S') %> by RockBooks version <%=RockBooks::VERSION %></p>
36
+
37
+ <h2>Financial Statements</h2>
38
+ <div id="financial-statements">
39
+ <a href='balance_sheet.html' class="btn btn-primary">Balance Sheet</a>
40
+ <a href='income_statement.html' class="btn btn-primary">Income Statement</a>
41
+ </div>
42
+
43
+
44
+ <h2>Supporting Documents</h2>
45
+ <div id="supporting-documents" style="display: inline ">
46
+ <%
47
+ subdir_link = ->(name, caption) do
48
+ dir_name = File.expand_path(File.join(Dir.pwd, name))
49
+ if Dir.exist?(dir_name)
50
+ %Q{<a href=#{dir_name} class="btn btn-primary">#{caption}</a>}
51
+ end
52
+ end
53
+ %>
54
+ <%= subdir_link.('invoices', 'Invoices') %>
55
+ <%= subdir_link.('receipts', 'Receipts') %>
56
+ <%= subdir_link.('statements', 'Statements') %>
57
+ <%= subdir_link.('worksheets', 'Worksheets') %>
58
+ </div>
59
+
60
+
61
+ <h2>All Transactions Reports</h2>
62
+ <div id="all-transactions">
63
+ <a href="all_txns_by_acct.html" class="btn btn-primary">By Account</a>
64
+ <a href="all_txns_by_amount.html" class="btn btn-primary">By Amount</a>
65
+ <a href="all_txns_by_date.html" class="btn btn-primary">By Date</a>
66
+ </div>
67
+
68
+ <% collapsible_heading = ->(caption, href) do %Q{
69
+ <br /><br />
70
+ <div class="collapsible-heading">
71
+ <div class="container-fluid">
72
+ <div class="row">
73
+
74
+ <div class="col-sm2" style="margin-right: 12px;">
75
+ <a class="btn btn-primary" data-toggle="collapse" href="#{href}" role="button" aria-expanded="false" aria-controls="collapseExample">
76
+ +/-
77
+ </a>
78
+ </div>
79
+
80
+ <div class="col-sm10">
81
+ <h2 style="margin: 0px;">#{caption}</h2>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ } end %>
87
+
88
+ <%= collapsible_heading.('Journal Reports', '#journal-reports') %>
89
+
90
+ <div class="collapse" id="journal-reports">
91
+ <div class="card card-body this_page_style">
92
+ <ul>
93
+ <% journals.each do |journal|
94
+ filespec = journal.short_name + '.html' %>
95
+ <li><a href="<%= filespec %>" class="this_page_style"><%= journal.title %></a></li>
96
+ <% end %>
97
+ </ul>
98
+ </div>
99
+ </div>
100
+
101
+ <%= collapsible_heading.('Individual Accounts', '#individual-accounts') %>
102
+
103
+ <div class="collapse" id="individual-accounts">
104
+ <div class="card card-body this_page_style">
105
+ <ul>
106
+ <%
107
+ chart_of_accounts.accounts.each do |account|
108
+ filespec = File.join('single-account', "acct_#{account.code}.html")
109
+ caption = "#{account.name} (#{account.code})"
110
+ %>
111
+ <li><a href="<%= filespec %>" class="this_page_style"><%= caption %></a></li>
112
+ <% end %>
113
+ </ul>
114
+ </div>
115
+ </div>
116
+
117
+ <%= collapsible_heading.('Other', '#other') %>
118
+
119
+ <div class="collapse" id="other">
120
+ <div class="card card-body this_page_style">
121
+ <ul>
122
+ <% if run_options.do_receipts %>
123
+ <li><a href="receipts.html" class="this_page_style">Missing and Existing Receipts</a></li>
124
+ <% end %>
125
+ </ul>
126
+ </div>
127
+ </div>
128
+
129
+ <%= collapsible_heading.('Reports in PDF and Text Formats', '#other-formats') %>
130
+
131
+ <div class="collapse" id="other-formats">
132
+ <div class="card card-body this_page_style">
133
+ <ul>
134
+ <li><a href="../pdf" class="this_page_style">PDF Format</a></li>
135
+ <li><a href="../txt" class="this_page_style">Text Format</a></li>
136
+ </ul>
137
+ </div>
138
+ </div>
139
+
140
+ </body>
141
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title></title>
5
+ <meta name="generator" content="RockBooks Accounting"/>
6
+ </head>
7
+ <body>
8
+ <pre>
9
+ <%= report_body %>
10
+ </pre>
11
+ </body>
12
+ </html>
@@ -0,0 +1,17 @@
1
+ <% receipt_info_line = ->(info) { sprintf("%-16.16s %s", info[:journal], info[:receipt]) } -%>
2
+ <% format_heading_line = ->(str1, str2) { sprintf("%-16.16s %s", str1, str2) } -%>
3
+
4
+
5
+
6
+ <%= name %> Receipts:
7
+
8
+ <%= format_heading_line.('Journal', 'Receipt Filespec') %>
9
+ <%= format_heading_line.('-------', '----------------') %>
10
+
11
+ <% if list.empty? -%>
12
+ [None]
13
+ <% else -%>
14
+ <% list.each do |receipt| -%>
15
+ <%= receipt_info_line.(receipt) %>
16
+ <% end -%>
17
+ <% end -%>