lucabook 0.2.18 → 0.2.19

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
  SHA256:
3
- metadata.gz: d25b3a6c62980682db52a5553ce26cafdcb36e80e9657a302a8413e1e92b565b
4
- data.tar.gz: e82a86c04d13aa6addef398afd85755a7a54ce437d1e9415ce3f98bf1b28f914
3
+ metadata.gz: 28e5bc747a4ba316a5badc9f7845637f4b27350cb199911c1cafc8771dc0925b
4
+ data.tar.gz: db3d419a9a20643d2235305a6c7d0ab6f776826cd062751878b3710772b03428
5
5
  SHA512:
6
- metadata.gz: 652c00f982977bbb619bfc834c312dbbb06f2ada524e1824869c04ef4ed09e3fadd5aee2b082fc3944cda4eaf7bfd18fd041a80582fe57f67cc88d13197b60a6
7
- data.tar.gz: 422dedf33b9a9bd53ac8502613ae4a27c3c10730e2ac65841fddd9e424d9435a2cb92118700f9571dceea09b54b1f9a1538b9c76facfed87542832e2ce4ba939
6
+ metadata.gz: b0a7ecb865541848cd4a0bcbeb7cb6e590bdba4b084a62ae656a2df7303580b7294bcc728991e41c7d2d6ef00cc068c0a6c140858126c9b2ba5d0afef4d5d68b
7
+ data.tar.gz: 1fe4d3b9ce540f6424792771ed1ed9b7e40f991a281258e1b4ba415ffbab328fa148c0db917047ca5d06437c9a3126b61db2a7099bdf99b45050adda7cfa0deb
@@ -33,7 +33,7 @@ module LucaCmd
33
33
 
34
34
  class Report
35
35
  def self.balancesheet(args, params)
36
- level = params[:level] || 2
36
+ level = params[:level] || 3
37
37
  legal = params[:legal] || false
38
38
  args = LucaCmd.gen_range(params[:n] || 1) if args.empty?
39
39
  LucaBook::State.term(*args).bs(level, legal: legal)
@@ -17,10 +17,11 @@ module LucaBook
17
17
 
18
18
  attr_reader :statement
19
19
 
20
- def initialize(data, count = nil)
20
+ def initialize(data, count = nil, date: nil)
21
21
  @data = data
22
22
  @count = count
23
23
  @dict = LucaRecord::Dict.load('base.tsv')
24
+ @start_date = date
24
25
  @start_balance = set_balance
25
26
  end
26
27
 
@@ -52,7 +53,7 @@ module LucaBook
52
53
  date = Date.new(date.next_month.year, date.next_month.month, -1)
53
54
  end
54
55
  end
55
- new reports, counts
56
+ new(reports, counts, date: Date.new(from_year.to_i, from_month.to_i, -1))
56
57
  end
57
58
 
58
59
  def by_code(code, year=nil, month=nil)
@@ -118,18 +119,19 @@ module LucaBook
118
119
  end
119
120
 
120
121
  def bs(level = 3, legal: false)
122
+ @start_balance.keys.each { |k| @data.first[k] ||= 0 }
121
123
  @data.map! { |data| data.select { |k, _v| k.length <= level } }
122
124
  @data.map! { |data| code_sum(data).merge(data) } if legal
123
125
  base = accumulate_balance(@data)
124
- length = [base[:debit].length, base[:credit].length].max
126
+ rows = [base[:debit].length, base[:credit].length].max
125
127
  @statement = [].tap do |a|
126
- length.times do |i|
128
+ rows.times do |i|
127
129
  {}.tap do |res|
128
130
  res['debit_label'] = base[:debit][i] ? @dict.dig(base[:debit][i].keys[0], :label) : ''
129
- res['debit_balance'] = base[:debit][i] ? @start_balance.dig(base[:debit][i].keys[0]) + base[:debit][i].values[0] : ''
131
+ res['debit_balance'] = base[:debit][i] ? (@start_balance.dig(base[:debit][i].keys[0]) || 0) + base[:debit][i].values[0] : ''
130
132
  res['debit_diff'] = base[:debit][i] ? base[:debit][i].values[0] : ''
131
133
  res['credit_label'] = base[:credit][i] ? @dict.dig(base[:credit][i].keys[0], :label) : ''
132
- res['credit_balance'] = base[:credit][i] ? @start_balance.dig(base[:credit][i].keys[0]) + base[:credit][i].values[0] : ''
134
+ res['credit_balance'] = base[:credit][i] ? (@start_balance.dig(base[:credit][i].keys[0]) || 0) + base[:credit][i].values[0] : ''
133
135
  res['credit_diff'] = base[:credit][i] ? base[:credit][i].values[0] : ''
134
136
  a << res
135
137
  end
@@ -144,9 +146,9 @@ module LucaBook
144
146
  month.each do |k, v|
145
147
  h[k] = h[k].nil? ? v : h[k] + v
146
148
  end
147
- end.sort.to_h
149
+ end
148
150
  { debit: [], credit: [] }.tap do |res|
149
- data.each do |k, v|
151
+ data.sort.to_h.each do |k, v|
150
152
  case k
151
153
  when /^[0-4].*/
152
154
  res[:debit] << { k => v }
@@ -159,11 +161,36 @@ module LucaBook
159
161
 
160
162
  def pl
161
163
  @statement = @data.map { |data| data.select { |k, _v| /^[A-H_].+/.match(k) } }
162
- @statement << @statement.each_with_object({}) { |item, h| item.each { |k, v| h[k].nil? ? h[k] = v : h[k] += v } }
163
- .tap { |h| h['_d'] = 'Total' }
164
+ term = @statement.each_with_object({}) { |item, h| item.each { |k, v| h[k].nil? ? h[k] = v : h[k] += v } }
165
+ fy = @start_balance.select { |k, _v| /^[A-H].+/.match(k) }
166
+ fy = {}.tap do |h|
167
+ (term.keys + fy.keys).uniq.each do |k|
168
+ h[k] = (fy[k] || 0).to_i + (term[k] || 0).to_i
169
+ end
170
+ end
171
+ @statement << term.tap { |h| h['_d'] = 'Period Total' }
172
+ @statement << fy.tap { |h| h['_d'] = 'FY Total' }
164
173
  self
165
174
  end
166
175
 
176
+ def self.accumulate_term(start_year, start_month, end_year, end_month)
177
+ date = Date.new(start_year, start_month, 1)
178
+ last_date = Date.new(end_year, end_month, -1)
179
+ return nil if date > last_date
180
+
181
+ {}.tap do |res|
182
+ while date <= last_date do
183
+ diff, _count = net(date.year, date.month)
184
+ diff.each do |k, v|
185
+ next if /^[_]/.match(k)
186
+
187
+ res[k] = res[k].nil? ? v : res[k] + v
188
+ end
189
+ date = date.next_month
190
+ end
191
+ end
192
+ end
193
+
167
194
  def self.accumulate_month(year, month)
168
195
  monthly_record, count = net(year, month)
169
196
  [total_subaccount(monthly_record), count]
@@ -187,18 +214,24 @@ module LucaBook
187
214
  res['H0'] = sum_matched(report, /^[H][0-9][0-9A-Z]{1,}/)
188
215
  res['HA'] = res['GA'] - res['H0']
189
216
 
190
- res['9142'] = (report['9142'] || 0) + res['HA']
217
+ report['9142'] = (report['9142'] || 0) + res['HA']
218
+ res['9142'] = report['9142']
191
219
  res['10'] = sum_matched(report, /^[123][0-9A-Z]{2,}/)
192
220
  res['40'] = sum_matched(report, /^[4][0-9A-Z]{2,}/)
193
221
  res['50'] = sum_matched(report, /^[56][0-9A-Z]{2,}/)
194
222
  res['70'] = sum_matched(report, /^[78][0-9A-Z]{2,}/)
223
+ res['91'] = sum_matched(report, /^91[0-9A-Z]{1,}/)
195
224
  res['8ZZ'] = res['50'] + res['70']
196
225
  res['9ZZ'] = sum_matched(report, /^[9][0-9A-Z]{2,}/)
197
226
 
198
227
  res['1'] = res['10'] + res['40']
199
- res['5'] = res['8ZZ'] + res['9ZZ'] + res['HA']
228
+ res['5'] = res['8ZZ'] + res['9ZZ']
200
229
  res['_d'] = report['_d']
201
230
 
231
+ report.each do |k, v|
232
+ res[k] = v if k.length == 3
233
+ end
234
+
202
235
  report.each do |k, v|
203
236
  if k.length >= 4
204
237
  if res[k[0, 3]]
@@ -219,10 +252,22 @@ module LucaBook
219
252
  end
220
253
 
221
254
  def set_balance
255
+ pre_last = @start_date.prev_month
256
+ pre = if @start_date.month > LucaSupport::CONFIG['fy_start'].to_i
257
+ self.class.accumulate_term(pre_last.year, LucaSupport::CONFIG['fy_start'], pre_last.year, pre_last.month)
258
+ elsif @start_date.month < LucaSupport::CONFIG['fy_start'].to_i
259
+ self.class.accumulate_term(pre_last.year - 1, LucaSupport::CONFIG['fy_start'], pre_last.year, pre_last.month)
260
+ end
261
+
222
262
  base = Dict.latest_balance.each_with_object({}) do |(k, v), h|
223
263
  h[k] = v[:balance].to_i if v[:balance]
224
264
  end
225
- code_sum(base).merge(self.class.total_subaccount(base))
265
+ if pre
266
+ idx = (pre.keys + base.keys).uniq
267
+ base = {}.tap { |h| idx.each { |k| h[k] = (base[k] || 0) + (pre[k] || 0) } }
268
+ end
269
+ #code_sum(base).merge(self.class.total_subaccount(base))
270
+ self.class.total_subaccount(base)
226
271
  end
227
272
 
228
273
  def self.sum_matched(report, reg)
@@ -291,9 +336,9 @@ module LucaBook
291
336
  # TODO: replace load_tsv -> generic load_tsv_dict
292
337
  def load_start
293
338
  file = Pathname(LucaSupport::Config::Pjdir) / 'data' / 'balance' / 'start.tsv'
294
- {}.tap do |dic|
339
+ {}.tap do |dict|
295
340
  load_tsv(file) do |row|
296
- dic[row[0]] = row[2].to_i if ! row[2].nil?
341
+ dict[row[0]] = row[2].to_i if ! row[2].nil?
297
342
  end
298
343
  end
299
344
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaBook
4
- VERSION = '0.2.18'
4
+ VERSION = '0.2.19'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lucabook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.18
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro