moneymanager 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39450e9d5be4a772dec12a2db8fb9d0067ead553
4
- data.tar.gz: 0db1716715290873ac2c5a903ef24a0ca9cef7ef
3
+ metadata.gz: d12b2140748dad9d3d6eda4bdc9bb3000932eeba
4
+ data.tar.gz: 59f8c42433720e5875a1098a40a49b2a2572323a
5
5
  SHA512:
6
- metadata.gz: 79a578a780c6c0f523665c2b4da019912cc45588fc9ccaf76abb58e56a146a8998f2d8247b3165c91fc172ef0d19460b844eaf6a1e7faf3298b3f9b6289a9451
7
- data.tar.gz: 0c3112832a722691da332cd101b5fbe39a721551b2e9135984f39cae1451444f1c21f45f9735eac9b7b889317df84e7beebfe2927d7f924668270704915f47cb
6
+ metadata.gz: 57ae82ff42ba946498532d090b752293eaf5134e3a63afb986de516a7df120df2a92516ec3ce481a36f7823047c7249320863880f451b991f4ee89f8d0a2b0af
7
+ data.tar.gz: 489c85decc4ae67e7d2ec5314681a2088a1e6ce0fc8f84e43339fa885b35036305050e872b064f9ccb9bf6ddacd19c3a24262755f23a993e19f85081a17ccc63
data/README.md CHANGED
@@ -17,7 +17,7 @@ I ended up writing my own tool instead of using MoneyWiz et simila is that all t
17
17
 
18
18
  * The database is just a plain, non-encrypted file.
19
19
  * There are no fancy charts.
20
- * The `print/review/tag` taks are _monthly_ based. If you have undreds of transaction per month using this tool can be tedious.
20
+ * The filter is _monthly_ based. If you have undreds of transaction per month this tool can be tedious.
21
21
  *
22
22
 
23
23
  ## Usage
@@ -117,61 +117,59 @@ Assign a tag to each (or not) transaction. To generate hierarchy of tags, use a
117
117
 
118
118
  ## Reporting
119
119
 
120
- #### Global Incomes/Expenses
120
+ #### Total
121
121
 
122
122
  $ mm report --month 8
123
123
 
124
124
  $ mm report --month 8
125
- Which type of report? (Use arrow keys, press Enter to select)
126
- Global Incomes/Expenses
127
- All categories
128
- One category
125
+ Which type of report? (Use arrow keys, press Enter to select)
126
+ Total (Incomes)
127
+ Total (Expenses)
128
+ All Incomes
129
+ All Expenses
130
+ Specific Tag
129
131
 
130
132
 
131
- +---------+-----------+
132
- | Summary |
133
- +---------+-----------+
134
- | Income | 1234.0 € |
135
- | Expense | -5678.0 € |
136
- | Delta | 9999.0 € |
137
- +---------+-----------+
133
+ Which type of report? Total (Incomes)
134
+ +-----------+
135
+ | 99999.0 € |
136
+ +-----------+
138
137
 
139
- #### Global Incomes/Expenses
138
+ #### All Incomes/Expenses
140
139
 
141
140
 
142
141
  $ mm report
143
142
  Which type of report? (Use arrow keys, press Enter to select)
144
- Global Incomes/Expenses
145
- All categories
146
- One category
143
+ Total (Incomes)
144
+ Total (Expenses)
145
+ All Incomes
146
+ All Expenses
147
+ Specific Tag
147
148
 
149
+
148
150
 
149
- +------------+----------+
150
- | Incomes |
151
- +------------+----------+
152
- | Salary | 999.0 € |
153
- | Investment | 999.0 € |
154
- | Rent | 999.0 € |
155
- +------------+----------+
156
- +-------------------+-----------+
157
- | Expenses |
158
- +-------------------+-----------+
159
- | Heating | -99.0 € |
160
- | Mortage | -99.0 € |
161
- | Car/Gasoline | -99.0 € |
162
- | Car/Insurace | -9999.0 € |
163
- | Car/Tire | -999.0 € |
164
- +-------------------+-----------+
151
+ Which type of report? All Incomes
152
+ +--------------+----------+
153
+ | Kindergeld | 999.0 € |
154
+ | Rimborsi | 998.0 € |
155
+ | Stipendio | 8998.0 € |
156
+ | Stockoptions | 9999.0 € |
157
+ | Unknown | 888.0 € |
158
+ +--------------+----------+
159
+ | 9999999.0 € |
160
+ +--------------+----------+
165
161
 
166
162
 
167
- #### Report for one Tag
163
+ #### One tag grouped by month
168
164
 
169
165
 
170
166
  $ mm report
171
167
  Which type of report? (Use arrow keys, press Enter to select)
172
- Global Incomes/Expenses
173
- All categories
174
- One category
168
+ Total (Incomes)
169
+ Total (Expenses)
170
+ All Incomes
171
+ All Expenses
172
+ ‣ Specific Tag
175
173
 
176
174
  Select a tag. (Use arrow keys, press Enter to select)
177
175
  ‣ Heating
@@ -180,20 +178,25 @@ Assign a tag to each (or not) transaction. To generate hierarchy of tags, use a
180
178
  Car/Insurance
181
179
  Car/Tire
182
180
 
183
- +-----------------+---------+
184
- | Expenses |
185
- +-----------------+---------+
186
- | Heating | -99.0 € |
187
- +-----------------+---------+
181
+ Select a tag. Kita
182
+ +---+---------+
183
+ | 8 | -99.0 € |
184
+ | 9 | -99.0 € |
185
+ +---+---------+
186
+ | -198.0 € |
187
+ +---+---------+
188
188
 
189
189
 
190
190
 
191
191
 
192
- ## Next release
192
+ ## To do
193
193
 
194
- * Report for nested tags ( Car/Gasoline, Car/Insurance etc)
195
- * Multiple tags
196
- * Report for one tag splitted by month
194
+ * [ ] Report for nested tags ( Car/Gasoline, Car/Insurance etc)
195
+ * [ ] Multiple tags
196
+ * [x] Report for one tag splitted by month
197
+ * [ ] Add a backup options
198
+ * [ ] Manage multiple banck account
199
+ * [ ] Exclude account transfer from the list of expenses/incomes
197
200
 
198
201
  ## Contributing
199
202
 
data/exe/mm CHANGED
@@ -67,54 +67,32 @@ command :report do |c|
67
67
 
68
68
  prompt = TTY::Prompt.new
69
69
  command = prompt.select('Which type of report?') do |menu|
70
- menu.choice 'Global Incomes/Expenses', :global
71
- menu.choice 'All categories', :all
72
- menu.choice 'Specific Tag', :one
70
+ menu.choice 'Total (Incomes)', :global_incomes
71
+ menu.choice 'Total (Expenses)', :global_expenses
72
+ menu.choice 'All Incomes', :all_incomes
73
+ menu.choice 'All Expenses', :all_expenses
74
+ menu.choice 'Specific Tag', :one_tag
73
75
  end
74
-
76
+ report = Report.new
75
77
  case command
76
- when :global
77
- print_global_report(entries)
78
- when :all
79
- print_all_categories_report(entries)
80
- when :one
78
+ when :global_incomes
79
+ report.print_total_report(entries, true)
80
+ when :global_expenses
81
+ report.print_total_report(entries, false)
82
+ when :all_incomes
83
+ report.print_group_by_categories_report(entries, true)
84
+ when :all_expenses
85
+ report.print_group_by_categories_report(entries, false)
86
+ when :one_tag
81
87
  archiver = Moneymanager::Archiver.new
82
88
  tags = archiver.tags.sort!
83
89
  tag = prompt.select('Select a tag.', tags, per_page: 30)
84
- print_one_category_report(entries, tag)
90
+ report.print_group_by_month_report(entries,tag)
85
91
  end
86
92
  end
87
93
  end
88
94
 
89
- def print_global_report(entries)
90
- expenses = entries.reject(&:income?).map(&:amount).reduce(:+)
91
- incomes = entries.reject(&:expense?).map(&:amount).reduce(:+)
92
- Layout.print_summary(incomes, expenses)
93
- end
94
-
95
- def print_all_categories_report(entries)
96
- expenses = entries.reject(&:income?).each_with_object(Hash.new(0)) do |current, sum|
97
- tag = current.tag ||= 'Unknown'
98
- sum[tag] += current.amount
99
- end
100
- incomes = entries.reject(&:expense?).each_with_object(Hash.new(0)) do |current, sum|
101
- tag = current.tag ||= 'Unknown'
102
- sum[tag] += current.amount
103
- end
104
-
105
- incomes = incomes.map { |x, v| [x, v] }
106
- Layout.print_summary_per_category('Incomes', incomes)
107
-
108
- expenses = expenses.map { |x, v| [x, v] }
109
- Layout.print_summary_per_category('Expenses', expenses)
110
- end
111
95
 
112
- def print_one_category_report(entries, tag)
113
- entries = entries.select do |entry|
114
- entry.tag == tag
115
- end
116
- print_all_categories_report(entries)
117
- end
118
96
 
119
97
  def get_entries(month)
120
98
  archiver = Moneymanager::Archiver.new
@@ -28,28 +28,25 @@ class Layout
28
28
  amount < 0 ? s.red : s.green
29
29
  end
30
30
 
31
- def self.print_summary(income, expenses)
32
- delta = income + expenses
31
+ def self.print_single_value(total)
33
32
  table = Terminal::Table.new do |t|
34
- t << ['Income', formatted_amount(income)]
35
- t << ['Expense', formatted_amount(expenses)]
36
- t << ['Delta', formatted_amount(delta)]
33
+ t << [formatted_amount(total)]
37
34
  end
38
- table.align_column(1, :right)
39
- table.title = 'Summary'
35
+ table.align_column(0, :right)
40
36
  puts table
41
37
  end
42
38
 
43
- def self.print_summary_per_category(title, rows)
39
+ def self.print_generic_rows(rows)
44
40
  return unless rows.count > 0
45
- rows = rows.sort! { |r1, r2| r1.first <=> r2.first }
46
- rows = rows.map do |row|
47
- row[-1] = formatted_amount(row.last)
48
- row
49
- end
50
- table = Terminal::Table.new rows: rows
51
- table.align_column(1, :right)
52
- table.title = title
41
+ sum = rows.reduce(0) { | tot, row | tot + row.last }
42
+ table = Terminal::Table.new
43
+ rows = rows.each { |row|
44
+ table.add_row [
45
+ { :value => row[0], :alignment => :left},
46
+ { :value => formatted_amount(row.last), :alignment => :right }]
47
+ }
48
+ table.add_separator
49
+ table.add_row [{ :value => formatted_amount(sum), :colspan => 2, :alignment => :right }]
53
50
 
54
51
  puts table
55
52
  end
@@ -0,0 +1,35 @@
1
+ class Report
2
+
3
+ def print_total_report(entries, onlyIncome)
4
+ total = 0
5
+ if (onlyIncome)
6
+ total = entries.reject(&:expense?).map(&:amount).reduce(:+)
7
+ else
8
+ total = entries.reject(&:income?).map(&:amount).reduce(:+)
9
+ end
10
+ Layout.print_single_value(total)
11
+ end
12
+
13
+ def print_group_by_categories_report(entries, onlyIncome)
14
+
15
+ entries = entries.select { |entry|
16
+ entry.income? == onlyIncome
17
+ }.each_with_object(Hash.new(0)) { |current, sum|
18
+ tag = current.tag ||= 'Unknown'
19
+ sum[tag] += current.amount
20
+ }.map { |x, v|
21
+ [x, v]
22
+ }.sort! { |r1, r2| r1.first <=> r2.first }
23
+ Layout.print_generic_rows(entries)
24
+ end
25
+
26
+ def print_group_by_month_report(entries, tag)
27
+ entries = entries.select { |entry|
28
+ entry.tag == tag
29
+ }.each_with_object(Hash.new(0)) { | current, sum |
30
+ month = current.date.month
31
+ sum[month] += current.amount
32
+ }
33
+ Layout.print_generic_rows(entries)
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module Moneymanager
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
data/lib/moneymanager.rb CHANGED
@@ -8,3 +8,4 @@ require 'moneymanager/parser'
8
8
  require 'moneymanager/entry'
9
9
  require 'moneymanager/tagger'
10
10
  require 'moneymanager/reviewer'
11
+ require 'moneymanager/report'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneymanager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ignazioc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2017-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -132,6 +132,7 @@ files:
132
132
  - lib/moneymanager/entry.rb
133
133
  - lib/moneymanager/layout.rb
134
134
  - lib/moneymanager/parser.rb
135
+ - lib/moneymanager/report.rb
135
136
  - lib/moneymanager/reviewer.rb
136
137
  - lib/moneymanager/tagger.rb
137
138
  - lib/moneymanager/version.rb