lib/abank/rendas.rb in abank-0.2.4 vs lib/abank/rendas.rb in abank-0.2.5

- old
+ new

@@ -1,95 +1,121 @@ # frozen_string_literal: true -# class Big::Renda -class Abank::Big::Contrato::Rendas < Abank::Big::Contrato - attr_reader :ren +# @see Abank::Big +class Abank::Big + # @return [Integer] ano renda em tratamento + attr_reader :reano - # @return [Integer] ano renda - attr_reader :ran - # @return [Integer] mes renda - attr_reader :rcn + # @return [Integer] mes renda em tratamento + attr_reader :repos + # @return [Float] valor renda mensal - attr_reader :rru + attr_reader :revre - # @return [Integer] total de movimentos novos - attr_reader :mcn + # @return [String] rendas a inserir (values.re) + attr_reader :revls + # @return [Integer] movimento em tratamento - attr_reader :mpn + attr_reader :mvpos + # @return [Date] data lancamento movimento em tratamento - attr_reader :mdl + attr_reader :mvdlm + # @return [Float] valor movimento em tratamento - attr_reader :mvl + attr_reader :mvvlm - # @return [Date] data contrato arrendamento - # {:mv=>[{:dl=>#<Date: 2020-03-02>, :vl=>0.3e2},...] - # ,:ct=>"r03000" - # ,:dc=>#<Date: 2020-03-01> - # ,:ano=>2020 - # ,:cnt=>0 - # ,:dl=>#<Date: 2020-03-01>} - def initialize(ren) - p ['Rendas', ren] - @ren = ren - super(ren[:ct]) + # (see CLI#recriare) + def re_atualiza + # obtem contratos ativos + @ctlct = sel('SELECT ct from hernanilr.ab.re group by 1') + + # [re]cria rendas [novas|todas] + lr_apaga.cm_cria.vr_cria.re_insert end - # @param [Hash] con dados contrato & lista movimentos novos - # @return [Array<Hash>] lista rendas novas para criar - def rendas - vars_re - vars_mv + # cria rendas associadas a lista ids contratos arrendamento + def re_work + bqnrs.zero? || ctlct.count.positive? ? cm_cria.vr_cria.re_insert : re_atualiza + end + + # obtem rendas a inserir (values.re) + # + # @return [Big] acesso a base dados abank no bigquery + def vr_cria + @revls = ctlcm.map { |c| rendas_novas(c) }.flatten(1).join(',') + self + end + + # insere rendas no bigquery + def re_insert + if revls.size.zero? + puts 'NAO EXISTEM RENDAS NOVAS' + else + dml('insert hernanilr.ab.re VALUES' + revls) + puts "RENDAS #{str_lc('')} CRIADAS " + bqnrs.to_s + end + end + + # @param [Hash] cmv dados contrato arrendamento (inclui lista movimentos novos) + # @return [Array<String>] lista rendas novas dum contrato arrendamento (values.re) + def rendas_novas(cmv) + return [] unless cmv[:mv].count.positive? + + vars_re(cmv) r = [] - while mvl >= rru && mpn < mcn - r << nova_re - proximo_mv + while mvvlm >= revre && mvpos < cmv[:mv].count + r << nova_re(cmv) + proximo_mv(cmv) end r end - # @param (see rendas) - def vars_mv - @mpn = 0 - @mcn = ren[:mv].count - vars_dados_mv + # inicializa variaveis para processar rendas do contrato arrendamento + # @param (see rendas_novas) + def vars_re(cmv) + @reano = cmv[:ano] + @repos = cmv[:cnt] + @revre = Float(cmv[:ct][/\d+/]) / 100 + @mvpos = 0 + vars_re_mv(cmv) end - # @param (see rendas) - def vars_dados_mv - @mdl = ren[:mv][mpn][:dl] - @mvl = ren[:mv][mpn][:vl] + # inicializa variaveis para processar movimentos associados ao contrato arrendamento + # @param (see rendas_novas) + def vars_re_mv(cmv) + @mvdlm = cmv[:mv][mvpos][:dl] + @mvvlm = cmv[:mv][mvpos][:vl] end - # @param (see rendas) - def vars_re - @ran = ren[:ano] - @rcn = ren[:cnt] - @rru = Float(ren[:ct][/\d+/]) / 100 - end - - # @return [Array] lista dados da renda nova - def nova_re - if rcn == 12 - @rcn = 1 - @ran += 1 + # @param (see rendas_novas) + # @return [String] renda formatada (values.re) + def nova_re(cmv) + # inicializa proxima renda + if repos == 12 + @repos = 1 + @reano += 1 else - @rcn += 1 + @repos += 1 end - # [rct, ran, rcn, mdl, mdl.mjd - vencimento.mjd] - "('#{rct}',#{ran},#{rcn},'#{mdl.strftime(DF)}',#{dias})" + "('#{cmv[:ct]}',#{reano},#{repos},'#{mvdlm.strftime(DF)}',#{dias(cmv)})" end - def dias - mdl.mjd - (Date.new(ran, rcn, 1) >> (ren[:dc].month - 1)).mjd + # @param (see rendas_novas) + # @return [Integer] dias atraso no pagamento da renda + def dias(cmv) + mvdlm.mjd - (Date.new(reano, repos, 1) >> (cmv[:dc].month - 1)).mjd end - # @param (see rendas) - def proximo_mv - @mvl -= rru - return unless mvl < rru + # inicializa variaveis para processar proximo movimento + # @param (see rendas_novas) + def proximo_mv(cmv) + # valor renda paga retirado do valor do movimento + @mvvlm -= revre + return unless mvvlm < revre - @mpn += 1 - return unless mpn < mcn + # avanca na lista de movimentos + @mvpos += 1 + return unless mvpos < cmv[:mv].count - vars_dados_mv + vars_re_mv(cmv) end end