Class: Abank::Folha

Inherits:
Big
  • Object
show all
Defined in:
lib/abank/folha1.rb,
lib/abank/folha2.rb

Overview

acesso a folha calculo & base dados abank no bigquery

Constant Summary

Constants inherited from Big

Big::DF

Instance Attribute Summary collapse

Attributes inherited from Big

#bqnrs, #bqres, #ctpos, #mvpos, #opcao

Instance Method Summary collapse

Methods inherited from Big

#ano, #bqapi, #cnt, #ct_apaga, #ct_cria, #ct_dados, #ct_existe?, #ct_rendas, #ctlct, #dias, #dml, #job, #ky_mv, #mv_classifica, #mv_delete, #mv_delete_dml, #mvkys, #re_apaga, #re_atual, #re_atual_mv, #re_atualiza, #re_delete_dml, #re_insert, #re_nova_renda, #re_proximos_dados, #re_rendas, #re_saldo_mv?, #sql, #sql_contrato_mv, #sql_last_re, #sql_novo_mv, #str_lc

Constructor Details

#initialize(opcoes = {}) ⇒ Folha

acesso a folha calculo & base dados abank no bigquery

Parameters:

  • xls (String)

    folha calculo a processar

  • opcoes (Thor::CoreExt::HashWithIndifferentAccess) (defaults to: {})

    trabalho

Options Hash (opcoes):

  • :s (Boolean) — default: false

    apaga movimento similar? (mv)

  • :e (Boolean) — default: false

    apaga movimento igual? (mv)

  • :i (Boolean) — default: false

    insere movimento novo? (mv)

  • :v (String) — default: ''

    data valor movimentos (mv)

  • :g (String) — default: ''

    classificacao movimentos (mv)



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/abank/folha1.rb', line 26

def initialize(opcoes = {})
  @opcao = super
  @opcao[:s] = opcoes.fetch(:s, false)
  @opcao[:e] = opcoes.fetch(:e, false)
  @opcao[:i] = opcoes.fetch(:i, false)
  @opcao[:v] = opcoes.fetch(:v, '')
  @opcao[:g] = opcoes.fetch(:g, '')
  # acumuladores necessitam init
  @opcao[:k] = ''
  @mvvls = ''
end

Instance Attribute Details

#mvvlsString (readonly)

Returns movimentos a inserir (values.mv).

Returns:

  • (String)

    movimentos a inserir (values.mv)



15
16
17
# File 'lib/abank/folha1.rb', line 15

def mvvls
  @mvvls
end

#rowfcArray (readonly)

Returns row folha calculo em processamento.

Returns:

  • (Array)

    row folha calculo em processamento



12
13
14
# File 'lib/abank/folha1.rb', line 12

def rowfc
  @rowfc
end

Instance Method Details

#add_kysObject

obtem chaves movimento (keysin.mv) para apagar



44
45
46
# File 'lib/abank/folha2.rb', line 44

def add_kys
  bqres.each { |row| opcao[:k] += ",#{row[:ky]}" }
end

#contaInteger

Returns numero conta associado a folha calculo.

Examples:

mov*.xlsx     --> 1 --> conta-corrente
movCard*.xlsx --> 2 --> conta-cartao

Returns:

  • (Integer)

    numero conta associado a folha calculo



59
60
61
# File 'lib/abank/folha1.rb', line 59

def conta
  opcao[:f].match?(/card/i) ? 2 : 1
end

#ctcString

Returns classificacao do movimento (null –> classificacao automatica).

Returns:

  • (String)

    classificacao do movimento (null –> classificacao automatica)



69
70
71
72
# File 'lib/abank/folha2.rb', line 69

def ctc
  cmv = opcao[:g]
  cmv.empty? ? 'null' : "'#{cmv}'"
end

#dvcDate

Returns data valor corrigida.

Returns:

  • (Date)

    data valor corrigida



63
64
65
66
# File 'lib/abank/folha2.rb', line 63

def dvc
  dvl = opcao[:v]
  dvl.empty? ? rowfc[1] : Date.parse(dvl)
end

#folhaRoo::Excelx

Returns folha calculo a processar.

Returns:

  • (Roo::Excelx)

    folha calculo a processar



39
40
41
# File 'lib/abank/folha1.rb', line 39

def folha
  @folha ||= Roo::Spreadsheet.open(opcao[:f])
end

#linha_baseString

Returns texto base formatado para display.

Returns:

  • (String)

    texto base formatado para display



22
23
24
# File 'lib/abank/folha2.rb', line 22

def linha_base
  "#{rowfc[0].strftime(DF)} #{format('%<v3>-34.34s %<v4>8.2f', v3: rowfc[2], v4: rowfc[3])}"
end

#linha_existeString

Returns texto linha existente formatada para display.

Returns:

  • (String)

    texto linha existente formatada para display



27
28
29
30
# File 'lib/abank/folha2.rb', line 27

def linha_existe
  add_kys if opcao[:e]
  "#{linha_base} EXIS #{format('%<v1>20d', v1: bqres.first[:ky])}"
end

#linha_existe?Boolean

Returns linha folha calculo existe no bigquery?.

Returns:

  • (Boolean)

    linha folha calculo existe no bigquery?



12
13
14
# File 'lib/abank/folha2.rb', line 12

def linha_existe?
  bqres.count == 1 && bqres.first[:ds].strip == rowfc[2]
end

#linha_multiplasString

Returns texto linha existencia multipla formatada para display.

Returns:

  • (String)

    texto linha existencia multipla formatada para display



39
40
41
# File 'lib/abank/folha2.rb', line 39

def linha_multiplas
  "#{linha_base} MULT(#{bqres.count})"
end

#linha_naoexiste?Boolean

Returns linha folha calculo nao existe no bigquery?.

Returns:

  • (Boolean)

    linha folha calculo nao existe no bigquery?



7
8
9
# File 'lib/abank/folha2.rb', line 7

def linha_naoexiste?
  bqres.empty?
end

#linha_simila?Boolean

Returns linha folha calculo existe parecida no bigquery?.

Returns:

  • (Boolean)

    linha folha calculo existe parecida no bigquery?



17
18
19
# File 'lib/abank/folha2.rb', line 17

def linha_simila?
  bqres.count == 1 && bqres.first[:ds].strip != rowfc[2]
end

#linha_similarString

Returns texto linha similar formatada para display.

Returns:

  • (String)

    texto linha similar formatada para display



33
34
35
36
# File 'lib/abank/folha2.rb', line 33

def linha_similar
  add_kys if opcao[:s]
  "#{linha_base} SIMI #{format('%<v1>-20.20s', v1: bqres.first[:ds].strip)}"
end

#mv_insertBig

insere & classifica movimentos no bigquery

Returns:

  • (Big)

    acesso a base dados abank no bigquery



92
93
94
95
96
97
98
99
100
# File 'lib/abank/folha1.rb', line 92

def mv_insert
  unless mvvls.empty?
    @mvvls = mvvls[1..] if mvvls[0] == ','
    dml("insert #{BD}.mv VALUES#{mvvls}")
    puts("MOVIMENTOS INSERIDOS #{bqnrs}")
    mv_classifica if bqnrs.positive?
  end
  self
end

#ok?(linha) ⇒ Boolean

Returns linha com valores para processar?.

Parameters:

  • linha (Hash)

    da folha calculo em processamento

Returns:

  • (Boolean)

    linha com valores para processar?



65
66
67
68
69
70
71
72
# File 'lib/abank/folha1.rb', line 65

def ok?(linha)
  @rowfc = linha.values
  return false if rowfc[0].is_a?(String)

  rowfc[2] = rowfc[2].strip
  rowfc[3] = -1 * rowfc[3] if conta > 1
  true
end

#processa_linhaString

Returns texto informativo formatado da linha processada.

Returns:

  • (String)

    texto informativo formatado da linha processada



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/abank/folha1.rb', line 75

def processa_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
  sql(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

#processa_xlsObject

carrega/mostra folha calculo



44
45
46
47
48
49
50
51
52
53
# File 'lib/abank/folha1.rb', line 44

def processa_xls
  puts("\n#{folha.info}")
  folha.sheet(0).parse(header_search: ['Data Lanc.', 'Data Valor', 'Descrição', 'Valor']) do |row|
    puts(processa_linha) if ok?(row)
  end
  return unless opcao[:i]

  # processa movimentos & atualiza rendas
  mv_delete.mv_insert.ct_dados.re_insert
end

#sql_existe_mvString

Returns sql para movimentos no bigquery.

Returns:

  • (String)

    sql para movimentos no bigquery



49
50
51
# File 'lib/abank/folha2.rb', line 49

def sql_existe_mv
  "select *,#{ky_mv} as ky from #{BD}.mv where nc=#{conta} and dl='#{rowfc[0].strftime(DF)}' and vl=#{rowfc[3]}"
end

#tpcString

Returns tipo movimento c ou d.

Returns:

  • (String)

    tipo movimento c ou d



75
76
77
# File 'lib/abank/folha2.rb', line 75

def tpc
  rowfc[3].positive? ? 'c' : 'd'
end

#values_mvString

obtem movimento (values.mv) para inserir

Returns:

  • (String)

    ‘ NOVO’



56
57
58
59
60
# File 'lib/abank/folha2.rb', line 56

def values_mv
  @mvvls += ",('#{rowfc[0].strftime(DF)}','#{dvc.strftime(DF)}','#{rowfc[2]}',#{rowfc[3]}"\
            ",#{conta},#{dvc.year},#{dvc.month},'#{tpc}',#{ctc})"
  ' NOVO'
end