lib/abank/bigquery.rb in abank-0.2.2 vs lib/abank/bigquery.rb in abank-0.2.3

- old
+ new

@@ -28,15 +28,17 @@ # @param [Hash] ops opcoes trabalho com linhas # @option ops [Boolean] :s (false) apaga linha similar? # @option ops [Boolean] :e (false) apaga linha igual? # @option ops [Boolean] :m (false) apaga linhas existencia multipla? # @option ops [Boolean] :i (false) insere linha nova? + # @option ops [Boolean] :t (false) apaga rendas totalmente? # @option ops [Numeric] :n (0) numero dias correcao para data valor + # @option ops [String] :r identificador contrato arrendamento # @return [Bigquery] acesso folhas calculo activobank # & correspondente bigquery dataset def initialize(xls = '', ops = { s: false, e: false, m: false, - i: false, n: 0 }) + i: false, t: false, n: 0, r: '' }) # usa env GOOGLE_APPLICATION_CREDENTIALS para obter credentials # @see https://cloud.google.com/bigquery/docs/authentication/getting-started @apibq = Google::Cloud::Bigquery.new @folha = Roo::Spreadsheet.open(xls) if xls.size.positive? @linha = ops @@ -70,10 +72,11 @@ # cria Data Manipulation Language (DML) job bigquery # # @param (see job_bigquery?) # @return [Integer] numero linhas afetadas def dml(sql) + p sql job_bigquery?(sql) ? 0 : job.num_dml_affected_rows end # pesquisa existencia linha folha calculo no bigquery # @@ -94,15 +97,51 @@ # (see CLI#classifica) def classifica return unless linha[:i] - puts 'LINHAS CLASSIFICADAS ' + - dml('update hernanilr.ab.mv set mv.ct=tt.nct' \ - ' from (select * from hernanilr.ab.cl) as tt' \ - ' where mv.dl=tt.dl and mv.dv=tt.dv' \ - ' and mv.ds=tt.ds and mv.vl=tt.vl').to_s + i = dml('update hernanilr.ab.mv set mv.ct=tt.nct' \ + ' from (select * from hernanilr.ab.cl) as tt' \ + ' where mv.dl=tt.dl and mv.dv=tt.dv' \ + ' and mv.ds=tt.ds and mv.vl=tt.vl') + puts 'LINHAS CLASSIFICADAS ' + i.to_s + return unless i.positive? + + atualiza + end + + # (see CLI#atualiza) + def atualiza puts 'RENDAS INSERIDAS ' + esp('call hernanilr.ab.rendas()').to_s + end + + # (see CLI#cria) + def cria + i = dml('insert into hernanilr.ab.re ' + sql_contrato) + puts i.zero? ? 'NAO EXISTE CONTRATO' : 'CONTRATO INSERIDO' + return unless i.positive? && linha[:t] + + atualiza + end + + # @return [String] sql obtem dados inicio contrato arrendamento + def sql_contrato + '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='#{linha[:r]}' " \ + 'order by dl limit 1' + end + + # (see CLI#apaga) + def apaga + puts 'RENDAS APAGADAS ' + dml(sql_apaga).to_s + end + + # @return [String] sql apaga rendas + def sql_apaga + "delete from hernanilr.ab.re where ct='#{linha[:r]}'" + + (linha[:t] ? '' : ' and cnt>0') end # @return [Integer] numero linhas inseridas def sql_insert return 1 unless linha[:i]