lib/abank/folha.rb in abank-0.2.5 vs lib/abank/folha.rb in abank-0.2.6
- old
+ new
@@ -1,154 +1,156 @@
# frozen_string_literal: true
require 'roo'
-# acesso a folha calculo & base dados abank no bigquery
-class Abank::Big::Folha < Abank::Big
- # @return [Roo::Excelx] folha calculo a processar
- attr_reader :folha
+module Abank
+ # acesso a folha calculo & base dados abank no bigquery
+ class Folha < Big
+ # @return [Roo::Excelx] folha calculo a processar
+ attr_reader :folha
- # @return [Integer] numero conta associado a folha calculo
- # @example
- # mov*.xlsx --> 1 --> conta-corrente
- # movCard*.xlsx --> 2 --> conta-cartao
- attr_reader :conta
+ # @return [Integer] numero conta associado a folha calculo
+ # @example
+ # mov*.xlsx --> 1 --> conta-corrente
+ # movCard*.xlsx --> 2 --> conta-cartao
+ attr_reader :conta
- # @return [Array] row folha calculo em processamento
- attr_reader :rowfc
+ # @return [Array] row folha calculo em processamento
+ attr_reader :rowfc
- # acesso a folha calculo & base dados abank no bigquery
- #
- # @param [Hash] opc opcoes trabalho
- # @option opc [String] :f ('') folha calculo a processar
- # @option opc [Boolean] :s (false) apaga movimento similar? (mv)
- # @option opc [Boolean] :e (false) apaga movimento igual? (mv)
- # @option opc [Boolean] :i (false) insere movimento novo? (mv)
- # @option opc [String] :v ('') data valor movimentos (mv)
- # @option opc [String] :g ('') classificacao movimentos (mv)
- def initialize(opc = {})
- @opcao = super
- @folha = Roo::Spreadsheet.open(opc.fetch(:f))
- @conta = opc.fetch(:f).match?(/card/i) ? 2 : 1
- @opcao[:s] = opc.fetch(:s, false)
- @opcao[:e] = opc.fetch(:e, false)
- @opcao[:i] = opc.fetch(:i, false)
- @opcao[:v] = opc.fetch(:v, '')
- @opcao[:g] = opc.fetch(:g, '')
- end
-
- # carrega/mostra folha calculo
- def processa_xls
- n = 0
- folha.sheet(0).parse(header_search: ['Data Lanc.', 'Data Valor', 'Descrição', 'Valor']) do |r|
- n += 1
- puts n == 1 ? "\n" + folha.info : processa_linha(r)
+ # acesso a folha calculo & base dados abank no bigquery
+ #
+ # @param [Hash] opc opcoes trabalho
+ # @option opc [String] :f ('') folha calculo a processar
+ # @option opc [Boolean] :s (false) apaga movimento similar? (mv)
+ # @option opc [Boolean] :e (false) apaga movimento igual? (mv)
+ # @option opc [Boolean] :i (false) insere movimento novo? (mv)
+ # @option opc [String] :v ('') data valor movimentos (mv)
+ # @option opc [String] :g ('') classificacao movimentos (mv)
+ def initialize(opc = {})
+ @opcao = super
+ @folha = Roo::Spreadsheet.open(opc.fetch(:f))
+ @conta = opc.fetch(:f).match?(/card/i) ? 2 : 1
+ @opcao[:s] = opc.fetch(:s, false)
+ @opcao[:e] = opc.fetch(:e, false)
+ @opcao[:i] = opc.fetch(:i, false)
+ @opcao[:v] = opc.fetch(:v, '')
+ @opcao[:g] = opc.fetch(:g, '')
end
- return unless opcao[:i]
- # processa movimentos & atualiza rendas
- mv_delete.mv_insert.re_work
- end
+ # carrega/mostra folha calculo
+ def processa_xls
+ n = 0
+ folha.sheet(0).parse(header_search: ['Data Lanc.', 'Data Valor', 'Descrição', 'Valor']) do |r|
+ n += 1
+ puts n == 1 ? "\n" + folha.info : processa_linha(r)
+ end
+ return unless opcao[:i]
- # processa linha folha calculo
- #
- # @param [Hash] linha da folha calculo em processamento
- # @return [String] texto informativo formatado da linha em processamento
- def processa_linha(linha)
- vars_xls(linha)
- # pesquisa existencia linha folha calculo no bigquery
- # array.count = 0 ==> pode carregar esta linha
- # array.count = 1 ==> mais testes necessarios
- # array.count > 1 ==> nao pode carregar esta linha
- sel(sql_existe_mv, [{}, {}])
- if linha_naoexiste? then linha_base + values_mv
- elsif linha_existe? then linha_existe
- elsif linha_simila? then linha_similar
- else linha_multiplas
+ # processa movimentos & atualiza rendas
+ mv_delete.mv_insert.re_work
end
- end
- # inicializa variavel para processar linha folha calculo
- #
- # @param (see processa_linha)
- def vars_xls(linha)
- @rowfc = linha.values
- @rowfc[2] = rowfc[2].strip
- @rowfc[3] = -1 * rowfc[3] if conta > 1
- end
+ # processa linha folha calculo
+ #
+ # @param [Hash] linha da folha calculo em processamento
+ # @return [String] texto informativo formatado da linha em processamento
+ def processa_linha(linha)
+ vars_xls(linha)
+ # pesquisa existencia linha folha calculo no bigquery
+ # array.count = 0 ==> pode carregar esta linha
+ # array.count = 1 ==> mais testes necessarios
+ # array.count > 1 ==> nao pode carregar esta linha
+ sel(sql_existe_mv, [{}, {}])
+ if linha_naoexiste? then linha_base + values_mv
+ elsif linha_existe? then linha_existe
+ elsif linha_simila? then linha_similar
+ else linha_multiplas
+ end
+ end
- # @return [String] texto base formatado para display
- def linha_base
- "#{rowfc[0].strftime(DF)} #{format('%<v3>-34.34s %<v4>8.2f', v3: rowfc[2], v4: rowfc[3])}"
- end
+ # inicializa variavel para processar linha folha calculo
+ #
+ # @param (see processa_linha)
+ def vars_xls(linha)
+ @rowfc = linha.values
+ @rowfc[2] = rowfc[2].strip
+ @rowfc[3] = -1 * rowfc[3] if conta > 1
+ end
- # @return [String] texto linha existente formatada para display
- def linha_existe
- add_kys if opcao[:e]
- linha_base + ' EXIS ' + format('%<v1>20d', v1: bqres.first[:ky])
- end
+ # @return [String] texto base formatado para display
+ def linha_base
+ "#{rowfc[0].strftime(DF)} #{format('%<v3>-34.34s %<v4>8.2f', v3: rowfc[2], v4: rowfc[3])}"
+ end
- # @return [String] texto linha similar formatada para display
- def linha_similar
- add_kys if opcao[:s]
- linha_base + ' SIMI ' + format('%<v1>-20.20s', v1: bqres.first[:ds].strip)
- end
+ # @return [String] texto linha existente formatada para display
+ def linha_existe
+ add_kys if opcao[:e]
+ linha_base + ' EXIS ' + format('%<v1>20d', v1: bqres.first[:ky])
+ end
- # @return [String] texto linha existencia multipla formatada para display
- def linha_multiplas
- linha_base + ' MULT(' + bqres.count.to_s + ')'
- end
+ # @return [String] texto linha similar formatada para display
+ def linha_similar
+ add_kys if opcao[:s]
+ linha_base + ' SIMI ' + format('%<v1>-20.20s', v1: bqres.first[:ds].strip)
+ end
- # obtem chaves movimento (keysin.mv) para apagar
- def add_kys
- bqres.each { |r| @mvkys += ",#{r[:ky]}" }
- end
+ # @return [String] texto linha existencia multipla formatada para display
+ def linha_multiplas
+ linha_base + ' MULT(' + bqres.count.to_s + ')'
+ end
- # @return [Boolean] linha folha calculo nao existe no bigquery?
- def linha_naoexiste?
- bqres.count.zero?
- end
+ # obtem chaves movimento (keysin.mv) para apagar
+ def add_kys
+ bqres.each { |r| @mvkys += ",#{r[:ky]}" }
+ end
- # @return [Boolean] linha folha calculo existe no bigquery?
- def linha_existe?
- bqres.count == 1 && bqres.first[:ds].strip == rowfc[2]
- end
+ # @return [Boolean] linha folha calculo nao existe no bigquery?
+ def linha_naoexiste?
+ bqres.count.zero?
+ end
- # @return [Boolean] linha folha calculo existe parecida no bigquery?
- def linha_simila?
- bqres.count == 1 && bqres.first[:ds].strip != rowfc[2]
- end
+ # @return [Boolean] linha folha calculo existe no bigquery?
+ def linha_existe?
+ bqres.count == 1 && bqres.first[:ds].strip == rowfc[2]
+ end
- # @return [String] sql para movimentos no bigquery
- def sql_existe_mv
- "select *,#{ky_mv} as ky from hernanilr.ab.mv " \
- "where nc=#{conta} and dl='#{rowfc[0].strftime(DF)}' and vl=#{rowfc[3]}"
- end
+ # @return [Boolean] linha folha calculo existe parecida no bigquery?
+ def linha_simila?
+ bqres.count == 1 && bqres.first[:ds].strip != rowfc[2]
+ end
- # obtem movimento (values.mv) para inserir
- #
- # @return [String] ' NOVO'
- def values_mv
- @mvvls += ",('#{rowfc[0].strftime(DF)}','#{dvc.strftime(DF)}','#{rowfc[2]}',#{rowfc[3]}" + values_mv_extra
- ' NOVO'
- end
+ # @return [String] sql para movimentos no bigquery
+ def sql_existe_mv
+ "select *,#{ky_mv} as ky from hernanilr.ab.mv " \
+ "where nc=#{conta} and dl='#{rowfc[0].strftime(DF)}' and vl=#{rowfc[3]}"
+ end
- # @return [String] campos extra do movimento (values.mv) para inserir
- def values_mv_extra
- ",#{conta},#{dvc.year},#{dvc.month},'#{tpc}',#{ctc})"
- end
+ # obtem movimento (values.mv) para inserir
+ #
+ # @return [String] ' NOVO'
+ def values_mv
+ @mvvls += ",('#{rowfc[0].strftime(DF)}','#{dvc.strftime(DF)}','#{rowfc[2]}',#{rowfc[3]}" + values_mv_extra
+ ' NOVO'
+ end
- # @return [Date] data valor corrigida
- def dvc
- opcao[:v].size.zero? ? rowfc[1] : Date.parse(opcao[:v])
- end
+ # @return [String] campos extra do movimento (values.mv) para inserir
+ def values_mv_extra
+ ",#{conta},#{dvc.year},#{dvc.month},'#{tpc}',#{ctc})"
+ end
- # @return [String] classificacao do movimento (null --> classificacao automatica)
- def ctc
- opcao[:g].size.zero? ? 'null' : ("'" + opcao[:g] + "'")
- end
+ # @return [Date] data valor corrigida
+ def dvc
+ opcao[:v].size.zero? ? rowfc[1] : Date.parse(opcao[:v])
+ end
- # @return [String] tipo movimento c[redito] ou d[ebito]
- def tpc
- rowfc[3].positive? ? 'c' : 'd'
+ # @return [String] classificacao do movimento (null --> classificacao automatica)
+ def ctc
+ opcao[:g].size.zero? ? 'null' : ("'" + opcao[:g] + "'")
+ end
+
+ # @return [String] tipo movimento c[redito] ou d[ebito]
+ def tpc
+ rowfc[3].positive? ? 'c' : 'd'
+ end
end
end