lib/abank/contrato.rb in abank-0.2.5 vs lib/abank/contrato.rb in abank-0.2.6

- old
+ new

@@ -1,107 +1,110 @@ # frozen_string_literal: true -# acesso a base dados abank no bigquery -class Abank::Big - # @return [String] id contrato arrendamento - attr_reader :ctide +module Abank + # acesso a base dados abank no bigquery + class Big + # @return [String] id contrato arrendamento + attr_reader :ctide - # @return [Array<Hash>] lista ids contratos arrendamento - # @example - # [{ ct: 'r03000' }, ...] - attr_reader :ctlct + # @return [Array<Hash>] lista ids contratos arrendamento + # @example + # [{ ct: 'r03000' }, ...] + attr_reader :ctlct - # @return [Array<Hash>] lista dados contrato arrendamento (inclui lista movimentos novos) - # @example - # [{ct: 'r03000', dc: '2020-03-01', ano: 2020, cnt: 0, dl: '2020-03-01', mv: [{dl: '2020-03-02', vl: 30}, ...] }] - attr_reader :ctlcm + # @return [Array<Hash>] lista dados contrato arrendamento (inclui lista movimentos novos) + # @example + # [{ct: 'r03000', dc: '2020-03-01', ano: 2020, cnt: 0, dl: '2020-03-01', mv: [{dl: '2020-03-02', vl: 30}, ...] }] + attr_reader :ctlcm - # (see CLI#criact) - def ct_cria - if existe_contrato? - @bqnrs = 1 - puts 'CONTRATO JA EXISTE' - else - dml('insert into hernanilr.ab.re ' + sql_contrato_mv) - puts "CONTRATO #{ctide} " + (bqnrs.zero? ? 'NAO EXISTE' : 'INSERIDO') + # (see CLI#criact) + def ct_cria + if existe_contrato? + @bqnrs = 1 + puts 'CONTRATO JA EXISTE' + else + dml('insert into hernanilr.ab.re ' + sql_contrato_mv) + puts "CONTRATO #{ctide} " + (bqnrs.zero? ? 'NAO EXISTE' : 'INSERIDO') + end + return unless existem_rendas? + + # processa rendas associadas ao contrato arrendamento + cm_cria.vr_cria.re_insert end - return unless existem_rendas? - # processa rendas associadas ao contrato arrendamento - cm_cria.vr_cria.re_insert - end + # (see CLI#apagact) + def ct_apaga + @ctlct = [{ ct: ctide }] + lc_apaga + end - # (see CLI#apagact) - def ct_apaga - @ctlct = [{ ct: ctide }] - lc_apaga - end + # apaga rendas da lista de contrato arrendamento + # + # @return [Big] acesso a base dados abank no bigquery + def lr_apaga + return self unless opcao[:t] && ctlct.count.positive? - # apaga rendas da lista de contrato arrendamento - # - # @return [Big] acesso a base dados abank no bigquery - def lr_apaga - return self unless opcao[:t] && ctlct.count.positive? + # para nao apagar contrato arrendamento - somente as rendas + @opcao[:t] = false - # para nao apagar contrato arrendamento - somente as rendas - @opcao[:t] = false + lc_apaga + self + end - lc_apaga - self - end + # apaga rendas da lista de contratos arrendamento + def lc_apaga + dml("delete from hernanilr.ab.re where ct in(#{str_lc})#{opcao[:t] ? '' : ' and cnt>0'}") + puts "RENDAS #{str_lc('')} APAGADAS " + bqnrs.to_s + end - # apaga rendas da lista de contratos arrendamento - def lc_apaga - dml("delete from hernanilr.ab.re where ct in(#{str_lc})#{opcao[:t] ? '' : ' and cnt>0'}") - puts "RENDAS #{str_lc('')} APAGADAS " + bqnrs.to_s - end + # @return [String] texto formatado que representa lista de contratos arrendamento + def str_lc(sep = "'") + ctlct.map { |c| sep + c[:ct] + sep }.join(',') + end - # @return [String] texto formatado que representa lista de contratos arrendamento - def str_lc(sep = "'") - ctlct.map { |c| sep + c[:ct] + sep }.join(',') - end + # optem lista dados contrato arrendamento (inclui lista movimentos novos) + # + # @return [Big] acesso a base dados abank no bigquery + def cm_cria + @ctlcm = [] + ctlct.each do |c| + @ctide = c[:ct] + sel(sql_last_re) + @ctlcm << bqres[0].merge({ mv: sel(sql_novo_mv(bqres[0][:dl])) }) + end + self + end - # optem lista dados contrato arrendamento (inclui lista movimentos novos) - # - # @return [Big] acesso a base dados abank no bigquery - def cm_cria - @ctlcm = [] - ctlct.each do |c| - @ctide = c[:ct] - sel(sql_last_re) - @ctlcm << bqres[0].merge({ mv: sel(sql_novo_mv(bqres[0][:dl])) }) + # @return [Boolean] existem rendas para processar sim/nao? + def existem_rendas? + @ctlct = [{ ct: ctide }] + bqnrs.positive? && opcao[:t] end - self - end - # @return [Boolean] existem rendas para processar sim/nao? - def existem_rendas? - @ctlct = [{ ct: ctide }] - bqnrs.positive? && opcao[:t] - end + # @return [Boolean] contrato arrendamento ja existe sim/nao? + def existe_contrato? + sel("select ct from hernanilr.ab.re where ct='#{ctide}' and cnt=0").count.positive? + end - # @return [Boolean] contrato arrendamento ja existe sim/nao? - def existe_contrato? - sel("select ct from hernanilr.ab.re where ct='#{ctide}' and cnt=0").count.positive? - end + # @return [String] sql para obter ultima renda do contrato arrendamento + def sql_last_re + 'select ct,DATE_SUB(DATE_SUB(dl,INTERVAL dias DAY),INTERVAL IF(cnt=0,0,cnt-1) MONTH) as dc,ano,cnt,dl ' \ + "from hernanilr.ab.re where ct='#{ctide}' order by ano desc,cnt desc limit 1" + end - # @return [String] sql para obter ultima renda do contrato arrendamento - def sql_last_re - 'select ct,DATE_SUB(DATE_SUB(dl,INTERVAL dias DAY),INTERVAL IF(cnt=0,0,cnt-1) MONTH) as dc,ano,cnt,dl ' \ - "from hernanilr.ab.re where ct='#{ctide}' order by ano desc,cnt desc limit 1" - end + # @return [String] sql para obter movimentos novos (depois da ultima renda do contrato arrendamento) + def sql_novo_mv(mdl) + "select dl,vl from hernanilr.ab.mv where ct='#{ctide}' and dl>='#{(mdl + 1).strftime(DF)}' order by dl,dv" + end - # @return [String] sql para obter movimentos novos (depois da ultima renda do contrato arrendamento) - def sql_novo_mv(mdl) - "select dl,vl from hernanilr.ab.mv where ct='#{ctide}' and dl>='#{(mdl + 1).strftime(DF)}' order by dl,dv" - end - - # @return [String] sql para obter dados do inicio contrato arrendamento - def sql_contrato_mv - if opcao[:d].size.zero? - 'select ct,EXTRACT(YEAR FROM DATE_TRUNC(dl,MONTH)) as ano,0 as cnt,DATE_TRUNC(dl,MONTH) as dl,0 dias ' \ - "from hernanilr.ab.mv where ct='#{ctide}' order by dl limit 1" - else - "select '#{ctide}' as ct,EXTRACT(YEAR FROM DATE '#{opcao[:d]}') as ano,0 as cnt,DATE '#{opcao[:d]}' as dl,0 dias" + # @return [String] sql para obter dados do inicio contrato arrendamento + def sql_contrato_mv + if opcao[:d].size.zero? + 'select ct,EXTRACT(YEAR FROM DATE_TRUNC(dl,MONTH)) as ano,0 as cnt,DATE_TRUNC(dl,MONTH) as dl,0 dias ' \ + "from hernanilr.ab.mv where ct='#{ctide}' order by dl limit 1" + else + "select '#{ctide}' as ct,EXTRACT(YEAR FROM DATE '#{opcao[:d]}') as ano" \ + ",0 as cnt,DATE '#{opcao[:d]}' as dl,0 dias" + end end end end