treasurer 0.10.1 → 0.10.6
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/Gemfile +1 -1
- data/VERSION +1 -1
- data/lib/treasurer/account_choices.rb +54 -25
- data/lib/treasurer/accounts.rb +5 -2
- data/lib/treasurer/commands.rb +8 -1
- data/lib/treasurer/report.rb +14 -5
- data/treasurer.gemspec +18 -30
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5ac67d0251cca1bbb93ed85a8334a66d0446701d3baa2b73b368df2b9cd93ca
|
4
|
+
data.tar.gz: bc15a7c7e792864a5f7e104d5eb44e9fbc09ee9769977cceba1ffc2c95bb6440
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99de9f6f92158ea3f1a98121c98a831d518f2d3d43515dd6962658880d6c8e53a86b512270955bcb643877142ffd2a1d0914f058dd35f95ba935009e8d7be75b
|
7
|
+
data.tar.gz: 8d9a12e8c6b193554a8dc43b2573236f32baf3c4956037875196929b7dc485f49c85106d1e8fc7ff709f8d151a03efecf28d1137807d361ce4f950de5b221ecf
|
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.10.
|
1
|
+
0.10.6
|
@@ -34,8 +34,10 @@ class CodeRunner::Budget
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
DATABASES={}
|
38
|
+
|
37
39
|
def self.sqlitedb(folder)
|
38
|
-
SQLite3::Database.new folder + "/treasurer.db"
|
40
|
+
DATABASES[folder] ||= SQLite3::Database.new folder + "/treasurer.db"
|
39
41
|
end
|
40
42
|
|
41
43
|
def sqlitedb
|
@@ -142,7 +144,7 @@ class CodeRunner::Budget
|
|
142
144
|
'WHERE signature = ?',
|
143
145
|
signature.inspect
|
144
146
|
)
|
145
|
-
pp "RRRRROOO", rows
|
147
|
+
#pp "RRRRROOO", rows
|
146
148
|
if rows.size == 1
|
147
149
|
return {
|
148
150
|
external_account: eval(rows[0][0]),
|
@@ -159,26 +161,43 @@ class CodeRunner::Budget
|
|
159
161
|
def get_new_choices
|
160
162
|
ext_account = nil
|
161
163
|
chosen = false
|
164
|
+
transactions = runner.component_run_list.values.sort_by{|r| r.date}
|
165
|
+
idx = transactions.index(self)
|
166
|
+
ff = Proc.new{|float| float ? sprintf("%8.2f", float) : " "*8}
|
167
|
+
format = Proc.new{|runs| runs.map{|r|
|
168
|
+
#begin
|
169
|
+
sprintf("%70s %s %8s %8s %8s %-12s", r.description[0,70], r.date.to_s, ff.call(r.deposit), ff.call(r.withdrawal), ff.call(r.balance), r.account)
|
170
|
+
#rescue
|
171
|
+
#p r
|
172
|
+
#p r.data_line
|
173
|
+
#exit
|
174
|
+
#end
|
175
|
+
}.join("\n")}
|
176
|
+
format_choices = Proc.new{|chs| chs.map{|k,v| Terminal::LIGHT_GREEN + k + ":" + Terminal.default_colour + v}.join(" ")}
|
162
177
|
Dir.chdir(@runner.root_folder) do
|
163
178
|
sym = nil
|
179
|
+
print_transactions = Proc.new do
|
180
|
+
puts format.call(transactions.slice([idx-30, 0].max, 30))
|
181
|
+
puts Terminal::LIGHT_GREEN + format.call([transactions[idx]]) + "<-----" + Terminal.default_colour
|
182
|
+
sz = transactions.size
|
183
|
+
puts format.call(transactions.slice([idx+1, sz-1].min, 10))
|
184
|
+
end
|
164
185
|
while not chosen
|
165
186
|
Hash.phoenix('external_accounts.rb') do |account_hash|
|
166
187
|
#account_hash.each{|k,v| v[:name] = v[:name].to_sym} #Fixes an earlier bug
|
167
188
|
#choices = account_arr.size.times.map{|i| [i,account_arr[i][:name]]}
|
168
189
|
choices = account_hash.map{|k,v| [v[:sym], k]}.to_h
|
190
|
+
choices["-"] = "Transfer"
|
169
191
|
puts Terminal.default_colour
|
192
|
+
print_transactions.call
|
193
|
+
#format = Proc.new{|runs| runs.map{|r| r.signature.map{|d| d.to_s}.join(",")}.join("\n")}
|
170
194
|
puts
|
171
|
-
puts
|
172
|
-
puts signature.inspect
|
173
|
-
puts "-" * data_line.size
|
174
|
-
puts
|
175
|
-
puts "Account: " + account
|
195
|
+
puts format_choices.call(choices)
|
176
196
|
puts
|
177
|
-
puts
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
puts "To start again for this transaction, type z"
|
197
|
+
puts "Please choose from the above external accounts for this transaction." +
|
198
|
+
"If you wish to add a new account type 0. To quit type q. " +
|
199
|
+
"To start again for this transaction, type z. To mark it as transfer between" +
|
200
|
+
"two non-external accounts, press -."
|
182
201
|
while not chosen
|
183
202
|
require 'io/console'
|
184
203
|
choice = STDIN.getch
|
@@ -202,6 +221,10 @@ class CodeRunner::Budget
|
|
202
221
|
elsif choice == "z"
|
203
222
|
chosen = false
|
204
223
|
break
|
224
|
+
elsif choice == "-"
|
225
|
+
ext_account = "Transfer"
|
226
|
+
chosen = "Transfer"
|
227
|
+
break
|
205
228
|
elsif not choices.keys.include? choice
|
206
229
|
puts "Error: this symbol does not correspond to an account"
|
207
230
|
else
|
@@ -212,21 +235,25 @@ class CodeRunner::Budget
|
|
212
235
|
#choices_hash[data_line] = {external_account: chosen}
|
213
236
|
#end
|
214
237
|
end
|
215
|
-
ext_account = chosen
|
216
238
|
next if not chosen
|
239
|
+
if ext_account and chosen
|
240
|
+
break
|
241
|
+
end
|
242
|
+
ext_account = chosen
|
217
243
|
chosen = false
|
218
244
|
Hash.phoenix('external_accounts.rb') do |account_hash|
|
219
245
|
#choices = account_arr.size.times.map{|i| [i,account_arr[i][:name]]}
|
220
246
|
sub_accounts = account_hash[ext_account][:sub_accounts]
|
221
247
|
sub_accounts.each{|k,v| v[:name] = v[:name].to_sym} #Fixes an earlier bug
|
222
248
|
choices = sub_accounts.map{|k,v| [v[:sym], k]}.to_h
|
223
|
-
puts "-" * data_line.size
|
249
|
+
#puts "-" * data_line.size
|
250
|
+
print_transactions.call
|
224
251
|
puts
|
225
|
-
puts choices
|
252
|
+
puts format_choices.call(choices)
|
226
253
|
puts
|
227
|
-
puts "Please choose from the above sub-accounts for this transaction."
|
228
|
-
|
229
|
-
|
254
|
+
puts "Please choose from the above sub-accounts for this transaction. " +
|
255
|
+
"If you wish to add a new sub account, type 0. To quit, type q. " +
|
256
|
+
"To start again for this transaction, type z"
|
230
257
|
while not chosen
|
231
258
|
require 'io/console'
|
232
259
|
choice = STDIN.getch
|
@@ -249,6 +276,7 @@ class CodeRunner::Budget
|
|
249
276
|
chosen = name
|
250
277
|
elsif choice == "z"
|
251
278
|
chosen = false
|
279
|
+
ext_account = nil
|
252
280
|
break
|
253
281
|
elsif not choices.keys.include? choice
|
254
282
|
puts "Error: this symbol does not correspond to a sub-account"
|
@@ -261,9 +289,8 @@ class CodeRunner::Budget
|
|
261
289
|
#Hash.phoenix('account_choices.rb') do |choices_hash|
|
262
290
|
#choices_hash[signature] = {external_account: ext_account, sub_account: chosen}
|
263
291
|
#end
|
264
|
-
add_sqlite_choices({external_account: ext_account, sub_account: chosen})
|
265
292
|
end #while not chosen
|
266
|
-
|
293
|
+
add_sqlite_choices({external_account: ext_account, sub_account: chosen})
|
267
294
|
end
|
268
295
|
{external_account: ext_account, sub_account: chosen}
|
269
296
|
end
|
@@ -279,12 +306,14 @@ class CodeRunner::Budget
|
|
279
306
|
end
|
280
307
|
if not @external_account
|
281
308
|
@external_account = (
|
282
|
-
get_sqlite_choices[:external_account] or
|
283
|
-
get_old_choices[:external_account]
|
309
|
+
(ch = get_sqlite_choices)[:external_account] or
|
310
|
+
(ch = get_old_choices)[:external_account] or
|
311
|
+
(ch = get_new_choices)[:external_account]
|
284
312
|
)
|
285
|
-
|
286
|
-
|
287
|
-
|
313
|
+
@sub_account = ch[:sub_account]
|
314
|
+
#if not @external_account
|
315
|
+
#raise "No external account for #{data_line}"
|
316
|
+
#end
|
288
317
|
end
|
289
318
|
return @external_account
|
290
319
|
end
|
data/lib/treasurer/accounts.rb
CHANGED
@@ -355,8 +355,11 @@ EOF
|
|
355
355
|
end
|
356
356
|
|
357
357
|
fork do
|
358
|
-
(kit).gnuplot_write("#{name_c_file}_balance2.eps", size: size) #, latex: true)
|
359
|
-
|
358
|
+
#(kit).gnuplot_write("#{name_c_file}_balance2.eps", size: size) #, latex: true)
|
359
|
+
(kit).gnuplot_write("#{name_c_file}_balance.eps", size: size) #, latex: true)
|
360
|
+
# Deprecate ps2epsi
|
361
|
+
# system %[ps2epsi #{name_c_file}_balance2.eps #{name_c_file}_balance.eps]
|
362
|
+
#system %[ps2eps < #{name_c_file}_balance2.eps > #{name_c_file}_balance.eps]
|
360
363
|
system %[epstopdf #{name_c_file}_balance.eps]
|
361
364
|
end
|
362
365
|
#%x[epstopdf #{name}_balance.eps]
|
data/lib/treasurer/commands.rb
CHANGED
@@ -32,8 +32,15 @@ class << self
|
|
32
32
|
def assign(copts={})
|
33
33
|
load_treasurer_folder(copts)
|
34
34
|
crcopts = eval(copts[:C]||"{}")
|
35
|
+
#crcopts[:h] = nil
|
36
|
+
#CodeRunner.run_command('generate_component_runs', crcopts)
|
35
37
|
crcopts[:h] = :component
|
36
|
-
|
38
|
+
crcopts[:O] = 'date'
|
39
|
+
crcopts[:f] = 'not (component_runs and component_runs.size > 0 and component_runs[0].instance_variable_get(:@external_account))'
|
40
|
+
crcopts[:f] = 'not (@external_account and @sub_account)'
|
41
|
+
catch (:quit_data_entry) do
|
42
|
+
CodeRunner.run_command('external_account', crcopts)
|
43
|
+
end
|
37
44
|
end
|
38
45
|
def status(copts={})
|
39
46
|
load_treasurer_folder(copts)
|
data/lib/treasurer/report.rb
CHANGED
@@ -124,9 +124,12 @@ class Treasurer
|
|
124
124
|
#p 'accounts256',@runs.size, @runs.map{|r| r.account}.uniq
|
125
125
|
|
126
126
|
end
|
127
|
+
# Construct the list of accounts. Because of double entry accounting
|
128
|
+
# # every entry has two accounts. External accounts are abstract accounts
|
129
|
+
# that do not correspond to a real account: e.g. "Food Expenditure"
|
127
130
|
def generate_accounts
|
128
131
|
accounts = @runs.map{|r| r.account}.uniq.map{|acc| Account.new(acc, self, @runner, @runs, false)}
|
129
|
-
external_accounts = (@runs.map{|r| r.external_account}.uniq - accounts.map{|acc| acc.name}).map{|acc| Account.new(acc, self, @runner, @runs, true)}
|
132
|
+
external_accounts = (@runs.map{|r| r.external_account}.uniq - accounts.map{|acc| acc.name} - ["Transfer"]).map{|acc| Account.new(acc, self, @runner, @runs, true)}
|
130
133
|
#if not @report_currency
|
131
134
|
external_accounts = external_accounts.map do |acc|
|
132
135
|
if acc_inf = ACCOUNT_INFO[acc.name] and currencies = acc_inf[:currencies] and currencies.size > 1
|
@@ -390,8 +393,11 @@ EOF
|
|
390
393
|
fork do
|
391
394
|
|
392
395
|
kit.gp.key = "off"
|
393
|
-
kit.gnuplot_write("#{name}2.eps", size: "#{[[labels.size.to_f/4.2, 5.0].min, 1.0].max}in,4.5in")
|
394
|
-
|
396
|
+
#kit.gnuplot_write("#{name}2.eps", size: "#{[[labels.size.to_f/4.2, 5.0].min, 1.0].max}in,4.5in")
|
397
|
+
kit.gnuplot_write("#{name}.eps", size: "#{[[labels.size.to_f/4.2, 5.0].min, 1.0].max}in,4.5in")
|
398
|
+
# Deprecate ps2epsi... fails on bounding boxes.
|
399
|
+
#system %[ps2epsi #{name}2.eps #{name}.eps]
|
400
|
+
#system %[ps2eps < #{name}2.eps > #{name}.eps]
|
395
401
|
system %[epstopdf #{name}.eps]
|
396
402
|
|
397
403
|
end
|
@@ -574,8 +580,11 @@ EOF
|
|
574
580
|
#kit.gnuplot
|
575
581
|
#ep ['kit1122', account, kit]
|
576
582
|
fork do
|
577
|
-
kit.gnuplot_write("#{account.name_c_file}2.eps", size: "4.0in,2.0in")
|
578
|
-
|
583
|
+
#kit.gnuplot_write("#{account.name_c_file}2.eps", size: "4.0in,2.0in")
|
584
|
+
kit.gnuplot_write("#{account.name_c_file}.eps", size: "4.0in,2.0in")
|
585
|
+
#system "ps2epsi #{account.name_c_file}2.eps #{account.name_c_file}.eps"
|
586
|
+
# ps2epsi can break.. we use ps2eps instead!
|
587
|
+
#system "ps2eps < #{account.name_c_file}2.eps > #{account.name_c_file}.eps"
|
579
588
|
exec "epstopdf #{account.name_c_file}.eps"
|
580
589
|
end
|
581
590
|
#%x[ps2eps #{account}.ps]
|
data/treasurer.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: treasurer 0.10.
|
5
|
+
# stub: treasurer 0.10.6 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "treasurer".freeze
|
9
|
-
s.version = "0.10.
|
9
|
+
s.version = "0.10.6"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Edmund Highcock".freeze]
|
14
|
-
s.date = "2020-
|
14
|
+
s.date = "2020-06-27"
|
15
15
|
s.description = "A simple command line tool for managing accounts and finances. Easily import internet banking spreadsheets and generate sophisticated reports and projections.".freeze
|
16
16
|
s.email = "edmundhighcock@users.sourceforge.net".freeze
|
17
17
|
s.executables = ["treasurer".freeze]
|
@@ -47,37 +47,25 @@ Gem::Specification.new do |s|
|
|
47
47
|
]
|
48
48
|
s.homepage = "http://github.com/edmundhighcock/treasurer".freeze
|
49
49
|
s.licenses = ["GPLv3".freeze]
|
50
|
-
s.rubygems_version = "3.
|
50
|
+
s.rubygems_version = "3.1.2".freeze
|
51
51
|
s.summary = "A simple command line tool for managing accounts and finances.".freeze
|
52
52
|
|
53
53
|
if s.respond_to? :specification_version then
|
54
54
|
s.specification_version = 4
|
55
|
+
end
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
else
|
69
|
-
s.add_dependency(%q<activesupport>.freeze, [">= 5.0.0"])
|
70
|
-
s.add_dependency(%q<coderunner>.freeze, [">= 0.14.16"])
|
71
|
-
s.add_dependency(%q<budgetcrmod>.freeze, ["~> 0.5.0"])
|
72
|
-
s.add_dependency(%q<command-line-flunky>.freeze, [">= 1.0.0"])
|
73
|
-
s.add_dependency(%q<sqlite3>.freeze, ["~> 1.3"])
|
74
|
-
s.add_dependency(%q<shoulda>.freeze, [">= 0"])
|
75
|
-
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
76
|
-
s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
|
77
|
-
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.1"])
|
78
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
79
|
-
s.add_dependency(%q<ruby-prof>.freeze, [">= 0.15"])
|
80
|
-
end
|
57
|
+
if s.respond_to? :add_runtime_dependency then
|
58
|
+
s.add_runtime_dependency(%q<activesupport>.freeze, [">= 5.0.0"])
|
59
|
+
s.add_runtime_dependency(%q<coderunner>.freeze, [">= 0.14.16"])
|
60
|
+
s.add_runtime_dependency(%q<budgetcrmod>.freeze, ["~> 0.5.0"])
|
61
|
+
s.add_runtime_dependency(%q<command-line-flunky>.freeze, [">= 1.0.0"])
|
62
|
+
s.add_runtime_dependency(%q<sqlite3>.freeze, ["~> 1.3"])
|
63
|
+
s.add_development_dependency(%q<shoulda>.freeze, [">= 0"])
|
64
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
65
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 2.0"])
|
66
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.1"])
|
67
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
68
|
+
s.add_development_dependency(%q<ruby-prof>.freeze, [">= 0.15"])
|
81
69
|
else
|
82
70
|
s.add_dependency(%q<activesupport>.freeze, [">= 5.0.0"])
|
83
71
|
s.add_dependency(%q<coderunner>.freeze, [">= 0.14.16"])
|
@@ -86,7 +74,7 @@ Gem::Specification.new do |s|
|
|
86
74
|
s.add_dependency(%q<sqlite3>.freeze, ["~> 1.3"])
|
87
75
|
s.add_dependency(%q<shoulda>.freeze, [">= 0"])
|
88
76
|
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
89
|
-
s.add_dependency(%q<bundler>.freeze, ["~>
|
77
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 2.0"])
|
90
78
|
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.1"])
|
91
79
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
92
80
|
s.add_dependency(%q<ruby-prof>.freeze, [">= 0.15"])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: treasurer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edmund Highcock
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '2.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '2.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: jeweler
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
217
|
- !ruby/object:Gem::Version
|
218
218
|
version: '0'
|
219
219
|
requirements: []
|
220
|
-
rubygems_version: 3.
|
220
|
+
rubygems_version: 3.1.2
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
223
|
summary: A simple command line tool for managing accounts and finances.
|