lucabook 0.2.19 → 0.2.20
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/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
         |