Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging several forks and unbonding template from bank slip. #1

Closed
wants to merge 24 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
681d09a
Tentando recolocar o Banespa Santander.
caugmar Oct 4, 2011
cf3531d
Tinha esquecido do autoload...
caugmar Oct 4, 2011
0decb3c
O que precisamos é do Santander, não mais do Banespa.
caugmar Oct 4, 2011
55d5e10
Corrigido problema no calculo do Digito Verificador para Boletos da C…
Nov 9, 2011
80e2fca
Corrigindo os testes para Boletos da CAIXA
Nov 9, 2011
66732c1
Adicionando banco SICREDI
andersondias Jan 20, 2012
7079ba8
Added ruby-debug19 to gemfile.
Feb 16, 2012
84a2f09
Fixed the CBR643 return file (based on another repository.)
Feb 16, 2012
4e190e2
Updating docs based on merged repos.
Feb 16, 2012
e54a452
removed duplicated sicredi
Feb 16, 2012
53e63ed
adjusting default external_encoding based on the ruby version.
Feb 16, 2012
8a54527
Added the possibility to use a different logo
Feb 16, 2012
b6c4265
made define_template method more generic.
Feb 16, 2012
4da3e73
Added non-default logo example.
Feb 16, 2012
5e4b34c
Just noticed that there's no need to another parameter , oops :P
Feb 17, 2012
0e94c6d
Fixing Santander spec
Feb 17, 2012
f2cf6d8
Removing useless "to" method from class and unbounding template from …
Feb 17, 2012
07bc158
First html template try.
Feb 17, 2012
bfdd96d
Added html to autoload and removed the generator from configuration.
Feb 17, 2012
3d6b217
Regex Replace is not a good idea when you're tired. Oops.
Feb 17, 2012
f58b786
Fixed the modelo_generico
Feb 22, 2012
5610721
Added Barby
Feb 22, 2012
5a0f567
No time to worry about gem-side html template now...
Feb 22, 2012
0037ab1
Updating version
Feb 22, 2012
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion Gemfile
Expand Up @@ -8,4 +8,5 @@ gem "rake"
group :test do
gem "rspec", :require => false
gem "ruby-debug", :require => false, :platform => :ruby_18
end
gem "ruby-debug19", :require => false, :platform => :ruby_19
end
35 changes: 27 additions & 8 deletions Gemfile.lock
Expand Up @@ -3,26 +3,33 @@ PATH
specs:
brcobranca (3.0.0)
activemodel (>= 3.0.0)
barby (>= 0.5.0)
parseline (>= 1.0.3)
rghost (>= 0.8.7)
rghost_barcode (>= 0.8)

GEM
remote: http://rubygems.org/
specs:
activemodel (3.0.6)
activesupport (= 3.0.6)
builder (~> 2.1.2)
i18n (~> 0.5.0)
activesupport (3.0.6)
builder (2.1.2)
activemodel (3.2.1)
activesupport (= 3.2.1)
builder (~> 3.0.0)
activesupport (3.2.1)
i18n (~> 0.6)
multi_json (~> 1.0)
archive-tar-minitar (0.5.2)
barby (0.5.0)
builder (3.0.0)
columnize (0.3.2)
diff-lcs (1.1.2)
i18n (0.5.0)
i18n (0.6.0)
linecache (0.43)
linecache19 (0.5.12)
ruby_core_source (>= 0.1.4)
multi_json (1.1.0)
parseline (1.0.3)
rake (0.8.7)
rghost (0.8.7.5)
rghost (0.8.7.6)
rghost_barcode (0.9)
rspec (2.5.0)
rspec-core (~> 2.5.0)
Expand All @@ -37,12 +44,24 @@ GEM
ruby-debug-base (~> 0.10.4.0)
ruby-debug-base (0.10.4)
linecache (>= 0.3)
ruby-debug-base19 (0.11.25)
columnize (>= 0.3.1)
linecache19 (>= 0.5.11)
ruby_core_source (>= 0.1.4)
ruby-debug19 (0.11.6)
columnize (>= 0.3.1)
linecache19 (>= 0.5.11)
ruby-debug-base19 (>= 0.11.19)
ruby_core_source (0.1.5)
archive-tar-minitar (>= 0.5.2)

PLATFORMS
ruby
x86-mingw32

DEPENDENCIES
brcobranca!
rake
rspec
ruby-debug
ruby-debug19
9 changes: 5 additions & 4 deletions README.rdoc
Expand Up @@ -13,9 +13,6 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros

== Bancos Disponíveis

* Banco Banespa
* COB

* Banco do Brasil
* TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO

Expand All @@ -39,6 +36,10 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros
* Banco Caixa
* Sem registro (SR) by Túlio Ornelas - https://github.com/tulios

* Banco Santader

* Banco Sincredi

== Está perdido?

Veja a documentação da versão atual em http://rubydoc.info/gems/brcobranca e da versão de desenvolvimento em http://rubydoc.info/github/kivanio/brcobranca/master/frames
Expand Down Expand Up @@ -76,4 +77,4 @@ BSD

De brasileiro para brasileiros.

Copyleft 2009 Kivanio Barbosa
Copyleft 2009 Kivanio Barbosa
2 changes: 2 additions & 0 deletions app/views/brcobranca/_boleto.html.erb
@@ -0,0 +1,2 @@
Hi i'll be your <%= image_tag boleto.logotipo %> slip soon! yay!

2 changes: 1 addition & 1 deletion brcobranca.gemspec
Expand Up @@ -31,4 +31,4 @@ Gem::Specification.new do |s|
Visite http://www.boletorails.com.br para ver exemplos!
===========================================================================
]
end
end
11 changes: 4 additions & 7 deletions lib/brcobranca.rb
Expand Up @@ -53,10 +53,6 @@ def initialize(boleto)
#
# Ou colocar em um arquivo na pasta initializer do rails.
class Configuration
# Gerador de arquivo de boleto.
# @return [Symbol]
# @param [Symbol] (Padrão: :rghost)
attr_accessor :gerador
# Formato do arquivo de boleto a ser gerado.
# @return [Symbol]
# @param [Symbol] (Padrão: :pdf)
Expand All @@ -77,9 +73,9 @@ class Configuration

# Atribui valores padrões de configuração
def initialize
self.gerador = :rghost
self.formato = :pdf
self.resolucao = 150
self.external_encoding = 'ascii-8bit' if RUBY_VERSION =~ /^1\.9/
end
end

Expand All @@ -103,12 +99,13 @@ module Boleto
autoload :Bradesco, 'brcobranca/boleto/bradesco'
autoload :Unibanco, 'brcobranca/boleto/unibanco'
autoload :Caixa, 'brcobranca/boleto/caixa'
autoload :Sicredi, 'brcobranca/boleto/sicredi'
autoload :Santander, 'brcobranca/boleto/santander'
autoload :Sicredi, 'brcobranca/boleto/sicredi'

# Módulos para classes de template
module Template
autoload :Base, 'brcobranca/boleto/template/base'
autoload :Rghost, 'brcobranca/boleto/template/rghost'
autoload :Html, 'brcobranca/boleto/template/html'
end
end

Expand Down
Binary file added lib/brcobranca/arquivos/logos/santander.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 54 additions & 8 deletions lib/brcobranca/boleto/base.rb
Expand Up @@ -4,12 +4,6 @@ module Brcobranca
module Boleto
# Classe base para todas as classes de boletos
class Base
extend Template::Base

# Configura gerador de arquivo de boleto e código de barras.
extend define_template(Brcobranca.configuration.gerador)
include define_template(Brcobranca.configuration.gerador)

# Validações do Rails 3
include ActiveModel::Validations

Expand Down Expand Up @@ -71,6 +65,8 @@ class Base
attr_accessor :sacado_endereco
# <b>REQUERIDO</b>: Documento da pessoa que receberá o boleto
attr_accessor :sacado_documento
# <b>OPTIONAL</b>: Personalized logo to bank slip
attr_writer :logotipo

# Validações
validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :numero_documento, :message => "não pode estar em branco."
Expand All @@ -79,6 +75,7 @@ class Base
# Nova instancia da classe Base
# @param [Hash] campos
def initialize(campos={})

padrao = {
:moeda => "9", :data_documento => Date.today, :dias_vencimento => 1, :quantidade => 1,
:especie_documento => "DM", :especie => "R$", :aceite => "S", :valor => 0.0,
Expand All @@ -93,10 +90,47 @@ def initialize(campos={})
yield self if block_given?
end

# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
#
# @return [Stream]
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
def to(formato, options={})
template.generate(self, options.merge(:formato => formato))
end

# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
#
# @return [Stream]
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
def lote(boletos, options={})
template.generate(boletos, options)
end

def self.lote(boletos, options={}, template=default_template)
template.generate(boletos, options)
end

# Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
#
# @return [Stream]
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
# @example
# @boleto.to_pdf #=> boleto gerado no formato pdf
def method_missing(m, *args)
method = m.to_s
if method.start_with?("to_")
template.generate(self, (args.first || {}).merge!({:formato => method[3..-1]}))
else
super
end
end

# Logotipo do banco
# @return [Path] Caminho para o arquivo de logotipo do banco.
def logotipo
File.join(File.dirname(__FILE__),'..','arquivos','logos',"#{class_name}.jpg")
@logotipo ||= File.join(File.dirname(__FILE__),'..','arquivos','logos',"#{class_name}.jpg")
end

# Dígito verificador do banco
Expand Down Expand Up @@ -200,6 +234,19 @@ def codigo_barras_segunda_parte
raise Brcobranca::NaoImplementado.new("Sobreescreva este método na classe referente ao banco que você esta criando")
end

def template
@template ||= self.class.default_template
end

# <b>OPTIONAL</b>: Select a different template for generating the bank slip
def template=(template)
@template = Brcobranca::Boleto::Template.const_get(template.capitalize)
end

def self.default_template
Brcobranca::Boleto::Template::Rghost
end

private

# Monta a primeira parte do código de barras, que é a mesma para todos bancos.
Expand All @@ -219,7 +266,6 @@ def valor_documento_formatado
def class_name
self.class.to_s.split("::").last.downcase
end

end
end
end
6 changes: 3 additions & 3 deletions lib/brcobranca/boleto/caixa.rb
Expand Up @@ -56,7 +56,7 @@ def nosso_numero_boleto
# Utiliza-se o [-1..-1] para retornar o último caracter
# @return [String]
def nosso_numero_dv
"#{carteira}#{numero_documento}".modulo11_9to2.to_s[-1..-1]
"#{carteira}#{numero_documento}".modulo11_2to9_caixa.to_s
end

# Número da agência/código cedente do cliente para exibir no boleto.
Expand All @@ -70,7 +70,7 @@ def agencia_conta_boleto
# Dígito verificador do convênio ou código do cedente
# @return [String]
def convenio_dv
"#{convenio.modulo11_2to9}"
"#{convenio.modulo11_2to9_caixa}"
end

# Monta a segunda parte do código de barras.
Expand All @@ -92,7 +92,7 @@ def codigo_barras_segunda_parte
"#{nosso_numero_boleto[1..1]}" <<
"#{nosso_numero_boleto[8..16]}"

"#{campo_livre}#{campo_livre.modulo11_2to9}"
"#{campo_livre}#{campo_livre.modulo11_2to9_caixa}"
end

end
Expand Down
37 changes: 37 additions & 0 deletions lib/brcobranca/boleto/santander.rb
@@ -0,0 +1,37 @@
# -*- encoding: utf-8 -*-
module Brcobranca
module Boleto
class Santander < Base

validates_length_of :agencia, :maximum => 4, :message => "deve ser menor ou igual a 4 dígitos."
validates_length_of :convenio, :maximum => 11, :message => "deve ser menor ou igual a 11 dígitos."
validates_length_of :numero_documento, :maximum => 7, :message => "deve ser menor ou igual a 7 dígitos."

# Nova instancia do Banespa
# @param (see Brcobranca::Boleto::Base#initialize)
def initialize(campos={})
padrao = {:carteira => "102", :banco => "033"}
campos = padrao.merge!(campos)
super(campos)
end

# @abstract Deverá ser sobreescrito para cada banco.
def nosso_numero_boleto
"#{self.numero_documento}-#{self.nosso_numero_dv}"
end

# @abstract Deverá ser sobreescrito para cada banco.
def agencia_conta_boleto
"#{self.agencia}-#{self.agencia_dv}/#{self.conta_corrente}-#{self.conta_corrente_dv}"
end

# Monta a segunda parte do código de barras, que é específico para cada banco.
#
# @abstract Deverá ser sobreescrito para cada banco.
def codigo_barras_segunda_parte
"9" * 25
end

end
end
end
13 changes: 0 additions & 13 deletions lib/brcobranca/boleto/template/base.rb

This file was deleted.

40 changes: 40 additions & 0 deletions lib/brcobranca/boleto/template/html.rb
@@ -0,0 +1,40 @@
#encoding: utf-8

begin
require 'rghost_barcode'
rescue LoadError
require 'rubygems' unless ENV['NO_RUBYGEMS']
gem 'rghost_barcode'
require 'rghost_barcode'
end

module Brcobranca
module Boleto
module Template
# Templates para usar com HTML
module Html
extend self
include RGhost unless self.include?(RGhost)
RGhost::Config::GS[:external_encoding] = Brcobranca.configuration.external_encoding

def generate(boleto, options)
if boleto.is_a? Array
modelo_generico_multipage(boleto, options)
else
modelo_generico(boleto, options)
end
end

private

def modelo_generico(boleto, options={})
#TODO: Render bank slip
end

def modelo_generico_multipage(boletos, options={})
#TODO: Render multiples bank slips
end
end
end
end
end