lucabook 0.2.19 → 0.2.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/luca-book +3 -1
- data/lib/luca_book/state.rb +35 -28
- data/lib/luca_book/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82bb098ac3acfbb37c600908b75174c34a665f4d7c9003d9956738783bb9a617
|
4
|
+
data.tar.gz: b963a24873e226c898c7b14dba4cf21edaacf4cfdc9f7e6eeab0d04959fa788b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b56ef4dd42ee782bf488cd50e6992415d878f388663ed0fb4f983f7353310ea53a2a0a4e1d94be5f06b51102eb73f7e9d0a7404a05cdccf6487248a1041196d3
|
7
|
+
data.tar.gz: 12cfe5f1194d34236ebe69541a9d4b0adf3333a39c1e73024ce0d3ad43639e4147ab48c19c5fc52e08bcbe6473821c850189c0b81e252101456ce70eea80a3c4
|
data/exe/luca-book
CHANGED
@@ -40,8 +40,9 @@ module LucaCmd
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.profitloss(args, params)
|
43
|
+
level = params[:level] || 2
|
43
44
|
args = LucaCmd.gen_range(params[:n]) if args.empty?
|
44
|
-
LucaBook::State.term(*args).pl.to_yaml
|
45
|
+
LucaBook::State.term(*args).pl(level).to_yaml
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -121,6 +122,7 @@ when /reports?/, 'r'
|
|
121
122
|
when 'pl'
|
122
123
|
OptionParser.new do |opt|
|
123
124
|
opt.banner = 'Usage: luca-book reports pl [options] [YYYY M YYYY M]'
|
125
|
+
opt.on('-l', '--level VAL', 'account level') { |v| params[:level] = v.to_i }
|
124
126
|
opt.on('-n VAL', 'report count') { |v| params[:n] = v.to_i }
|
125
127
|
args = opt.parse!(ARGV)
|
126
128
|
LucaCmd::Report.profitloss(args, params)
|
data/lib/luca_book/state.rb
CHANGED
@@ -81,7 +81,7 @@ module LucaBook
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def to_yaml
|
84
|
-
YAML.dump(code2label).tap { |data| puts data }
|
84
|
+
YAML.dump(readable(code2label)).tap { |data| puts data }
|
85
85
|
end
|
86
86
|
|
87
87
|
def code2label
|
@@ -137,7 +137,7 @@ module LucaBook
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
end
|
140
|
-
puts YAML.dump(@statement)
|
140
|
+
puts YAML.dump(readable(@statement))
|
141
141
|
self
|
142
142
|
end
|
143
143
|
|
@@ -159,13 +159,25 @@ module LucaBook
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
def pl
|
163
|
-
|
164
|
-
|
162
|
+
def pl(level = 2)
|
163
|
+
term_keys = @data.inject([]) { |a, data| a + data.keys }
|
164
|
+
.compact.select { |k| /^[A-H_].+/.match(k) }
|
165
165
|
fy = @start_balance.select { |k, _v| /^[A-H].+/.match(k) }
|
166
|
+
keys = (term_keys + fy.keys).uniq.sort
|
167
|
+
keys.select! { |k| k.length <= level }
|
168
|
+
@statement = @data.map do |data|
|
169
|
+
{}.tap do |h|
|
170
|
+
keys.each { |k| h[k] = data[k] || BigDecimal('0') }
|
171
|
+
end
|
172
|
+
end
|
173
|
+
term = @statement.each_with_object({}) do |item, h|
|
174
|
+
item.each do |k, v|
|
175
|
+
h[k] = h[k].nil? ? v : h[k] + v if /^[^_]/.match(k)
|
176
|
+
end
|
177
|
+
end
|
166
178
|
fy = {}.tap do |h|
|
167
|
-
|
168
|
-
h[k] = (fy[k] || 0)
|
179
|
+
keys.each do |k|
|
180
|
+
h[k] = BigDecimal(fy[k] || '0') + BigDecimal(term[k] || '0')
|
169
181
|
end
|
170
182
|
end
|
171
183
|
@statement << term.tap { |h| h['_d'] = 'Period Total' }
|
@@ -214,7 +226,7 @@ module LucaBook
|
|
214
226
|
res['H0'] = sum_matched(report, /^[H][0-9][0-9A-Z]{1,}/)
|
215
227
|
res['HA'] = res['GA'] - res['H0']
|
216
228
|
|
217
|
-
report['9142'] = (report['9142'] || 0) + res['HA']
|
229
|
+
report['9142'] = (report['9142'] || BigDecimal('0')) + res['HA']
|
218
230
|
res['9142'] = report['9142']
|
219
231
|
res['10'] = sum_matched(report, /^[123][0-9A-Z]{2,}/)
|
220
232
|
res['40'] = sum_matched(report, /^[4][0-9A-Z]{2,}/)
|
@@ -260,13 +272,14 @@ module LucaBook
|
|
260
272
|
end
|
261
273
|
|
262
274
|
base = Dict.latest_balance.each_with_object({}) do |(k, v), h|
|
263
|
-
h[k] = v[:balance].
|
275
|
+
h[k] = BigDecimal(v[:balance].to_s) if v[:balance]
|
264
276
|
end
|
265
277
|
if pre
|
266
278
|
idx = (pre.keys + base.keys).uniq
|
267
|
-
base = {}.tap
|
279
|
+
base = {}.tap do |h|
|
280
|
+
idx.each { |k| h[k] = (base[k] || BigDecimal('0')) + (pre[k] || BigDecimal('0')) }
|
281
|
+
end
|
268
282
|
end
|
269
|
-
#code_sum(base).merge(self.class.total_subaccount(base))
|
270
283
|
self.class.total_subaccount(base)
|
271
284
|
end
|
272
285
|
|
@@ -275,6 +288,7 @@ module LucaBook
|
|
275
288
|
end
|
276
289
|
|
277
290
|
# for assert purpose
|
291
|
+
#
|
278
292
|
def self.gross(year, month = nil, code = nil, date_range = nil, rows = 4)
|
279
293
|
if ! date_range.nil?
|
280
294
|
raise if date_range.class != Range
|
@@ -287,27 +301,28 @@ module LucaBook
|
|
287
301
|
CSV.new(f, headers: false, col_sep: "\t", encoding: 'UTF-8')
|
288
302
|
.each_with_index do |row, i|
|
289
303
|
break if i >= rows
|
304
|
+
|
290
305
|
case i
|
291
306
|
when 0
|
292
307
|
idx_memo = row.map(&:to_s)
|
293
308
|
idx_memo.each do |r|
|
294
|
-
sum[:debit][r] ||= 0
|
309
|
+
sum[:debit][r] ||= BigDecimal('0')
|
295
310
|
sum[:debit_count][r] ||= 0
|
296
311
|
end
|
297
312
|
when 1
|
298
313
|
row.each_with_index do |r, j|
|
299
|
-
sum[:debit][idx_memo[j]] += r.
|
314
|
+
sum[:debit][idx_memo[j]] += BigDecimal(r.to_s)
|
300
315
|
sum[:debit_count][idx_memo[j]] += 1
|
301
316
|
end
|
302
317
|
when 2
|
303
318
|
idx_memo = row.map(&:to_s)
|
304
319
|
idx_memo.each do |r|
|
305
|
-
sum[:credit][r] ||= 0
|
320
|
+
sum[:credit][r] ||= BigDecimal('0')
|
306
321
|
sum[:credit_count][r] ||= 0
|
307
322
|
end
|
308
323
|
when 3
|
309
324
|
row.each_with_index do |r, j|
|
310
|
-
sum[:credit][idx_memo[j]] += r.
|
325
|
+
sum[:credit][idx_memo[j]] += BigDecimal(r.to_s)
|
311
326
|
sum[:credit_count][idx_memo[j]] += 1
|
312
327
|
end
|
313
328
|
else
|
@@ -319,37 +334,29 @@ module LucaBook
|
|
319
334
|
end
|
320
335
|
|
321
336
|
# netting vouchers in specified term
|
337
|
+
#
|
322
338
|
def self.net(year, month = nil, code = nil, date_range = nil)
|
323
339
|
g = gross(year, month, code, date_range)
|
324
340
|
idx = (g[:debit].keys + g[:credit].keys).uniq.sort
|
325
341
|
count = {}
|
326
342
|
diff = {}.tap do |sum|
|
327
343
|
idx.each do |code|
|
328
|
-
sum[code] = g.dig(:debit, code).nil? ? 0 : Util.calc_diff(g[:debit][code], code)
|
329
|
-
sum[code] -= g.dig(:credit, code).nil? ? 0 : Util.calc_diff(g[:credit][code], code)
|
344
|
+
sum[code] = g.dig(:debit, code).nil? ? BigDecimal('0') : Util.calc_diff(g[:debit][code], code)
|
345
|
+
sum[code] -= g.dig(:credit, code).nil? ? BigDecimal('0') : Util.calc_diff(g[:credit][code], code)
|
330
346
|
count[code] = (g.dig(:debit_count, code) || 0) + (g.dig(:credit_count, code) || 0)
|
331
347
|
end
|
332
348
|
end
|
333
349
|
[diff, count]
|
334
350
|
end
|
335
351
|
|
336
|
-
# TODO:
|
352
|
+
# TODO: obsolete in favor of Dict.latest_balance()
|
337
353
|
def load_start
|
338
354
|
file = Pathname(LucaSupport::Config::Pjdir) / 'data' / 'balance' / 'start.tsv'
|
339
355
|
{}.tap do |dict|
|
340
|
-
|
341
|
-
dict[row[0]] = row[2].to_i if ! row[2].nil?
|
342
|
-
end
|
356
|
+
LucaRecord::Dict.load_tsv_dict(file).each { |k, v| h[k] = v[:balance] if !v[:balance].nil? }
|
343
357
|
end
|
344
358
|
end
|
345
359
|
|
346
|
-
def load_tsv(path)
|
347
|
-
return enum_for(:load_tsv, path) unless block_given?
|
348
|
-
|
349
|
-
data = CSV.read(path, headers: true, col_sep: "\t", encoding: 'UTF-8')
|
350
|
-
data.each { |row| yield row }
|
351
|
-
end
|
352
|
-
|
353
360
|
private
|
354
361
|
|
355
362
|
def legal_items
|
data/lib/luca_book/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lucabook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chuma Takahiro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lucarecord
|