brcobranca 3.2.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -1
- data/.travis.yml +7 -1
- data/Gemfile +13 -2
- data/Rakefile +2 -2
- data/brcobranca.gemspec +10 -17
- data/lib/brcobranca.rb +2 -5
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +0 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +0 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +0 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +27 -29
- data/lib/brcobranca/boleto/base.rb +29 -30
- data/lib/brcobranca/boleto/bradesco.rb +14 -15
- data/lib/brcobranca/boleto/caixa.rb +25 -23
- data/lib/brcobranca/boleto/hsbc.rb +30 -34
- data/lib/brcobranca/boleto/itau.rb +23 -25
- data/lib/brcobranca/boleto/santander.rb +17 -19
- data/lib/brcobranca/boleto/sicredi.rb +19 -19
- data/lib/brcobranca/boleto/template/base.rb +0 -2
- data/lib/brcobranca/boleto/template/rghost.rb +72 -74
- data/lib/brcobranca/boleto/template/rghost_carne.rb +105 -118
- data/lib/brcobranca/calculo.rb +22 -22
- data/lib/brcobranca/calculo_data.rb +8 -8
- data/lib/brcobranca/currency.rb +11 -11
- data/lib/brcobranca/formatacao.rb +16 -16
- data/lib/brcobranca/limpeza.rb +4 -4
- data/lib/brcobranca/retorno/base.rb +0 -1
- data/lib/brcobranca/retorno/retorno_cbr643.rb +35 -35
- data/lib/brcobranca/retorno/retorno_cnab240.rb +39 -40
- data/lib/brcobranca/retorno/retorno_cnab400.rb +21 -26
- data/lib/brcobranca/version.rb +2 -2
- data/spec/brcobranca/banco_bradesco_spec.rb +113 -113
- data/spec/brcobranca/banco_brasil_spec.rb +167 -167
- data/spec/brcobranca/banco_caixa_spec.rb +58 -58
- data/spec/brcobranca/banco_hsbc_spec.rb +117 -118
- data/spec/brcobranca/banco_sicredi_spec.rb +92 -93
- data/spec/brcobranca/base_spec.rb +78 -78
- data/spec/brcobranca/boletos_em_lote_spec.rb +22 -22
- data/spec/brcobranca/core_ext_spec.rb +134 -135
- data/spec/brcobranca/currency_spec.rb +59 -59
- data/spec/brcobranca/itau_spec.rb +137 -137
- data/spec/brcobranca/retorno_cbr643_spec.rb +32 -32
- data/spec/brcobranca/retorno_cnab400_spec.rb +40 -42
- data/spec/brcobranca/retorno_cnab_240_spec.rb +17 -19
- data/spec/brcobranca/rghost_spec.rb +21 -21
- data/spec/brcobranca/santander_spec.rb +80 -80
- data/spec/brcobranca_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- metadata +12 -54
- data/VERSION +0 -1
- data/lib/brcobranca/arquivos/logos/bancobrasil.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/bradesco.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/itau.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/santander.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/sicredi.jpg +0 -0
@@ -12,16 +12,16 @@ module Brcobranca
|
|
12
12
|
# <b>REQUERIDO</b>: Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
|
13
13
|
attr_accessor :byte_idt
|
14
14
|
|
15
|
-
validates_length_of :agencia, :
|
16
|
-
validates_length_of :numero_documento, :
|
17
|
-
validates_length_of :conta_corrente, :
|
18
|
-
validates_length_of :carteira, :
|
19
|
-
validates_length_of :byte_idt, :
|
15
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
16
|
+
validates_length_of :numero_documento, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
17
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
18
|
+
validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
19
|
+
validates_length_of :byte_idt, is: 1, message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
|
20
20
|
|
21
21
|
# Nova instancia do Bradesco
|
22
22
|
# @param (see Brcobranca::Boleto::Base#initialize)
|
23
|
-
def initialize(campos={})
|
24
|
-
campos = {:
|
23
|
+
def initialize(campos = {})
|
24
|
+
campos = { carteira: '03', especie_documento: 'A' }.merge!(campos)
|
25
25
|
super(campos)
|
26
26
|
end
|
27
27
|
|
@@ -29,14 +29,14 @@ module Brcobranca
|
|
29
29
|
#
|
30
30
|
# @return [String] 3 caracteres numéricos.
|
31
31
|
def banco
|
32
|
-
|
32
|
+
'748'
|
33
33
|
end
|
34
34
|
|
35
35
|
# Carteira
|
36
36
|
#
|
37
37
|
# @return [String] 2 caracteres numéricos.
|
38
38
|
def carteira=(valor)
|
39
|
-
@carteira = valor.to_s.rjust(2,'0') if valor
|
39
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
40
40
|
end
|
41
41
|
|
42
42
|
# Posto
|
@@ -49,7 +49,7 @@ module Brcobranca
|
|
49
49
|
# Número da conta corrente
|
50
50
|
# @return [String] 5 caracteres numéricos.
|
51
51
|
def conta_corrente=(valor)
|
52
|
-
@conta_corrente = valor.to_s.rjust(5,'0') if valor
|
52
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
53
53
|
end
|
54
54
|
|
55
55
|
# Dígito verificador do banco
|
@@ -63,30 +63,30 @@ module Brcobranca
|
|
63
63
|
# @example
|
64
64
|
# boleto.nosso_numero_boleto #=> "14/200022-5"
|
65
65
|
def nosso_numero_boleto
|
66
|
-
"#{numero_documento_with_byte_idt[0..1]}/#{numero_documento_with_byte_idt[2..-1]}-#{
|
66
|
+
"#{numero_documento_with_byte_idt[0..1]}/#{numero_documento_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
|
67
67
|
end
|
68
68
|
|
69
69
|
def numero_documento_with_byte_idt
|
70
|
-
"#{
|
70
|
+
"#{data_documento.strftime('%y')}#{byte_idt}#{numero_documento}"
|
71
71
|
end
|
72
72
|
|
73
73
|
# Número seqüencial utilizado para identificar o boleto.
|
74
74
|
# @return [String] 5 caracteres numéricos.
|
75
75
|
def numero_documento=(valor)
|
76
|
-
@numero_documento = valor.to_s.rjust(5,'0') if valor
|
76
|
+
@numero_documento = valor.to_s.rjust(5, '0') if valor
|
77
77
|
end
|
78
78
|
|
79
79
|
# Codigo referente ao tipo de cobrança
|
80
80
|
# @return [String]: 1 caractere numérico
|
81
81
|
def tipo_cobranca
|
82
|
-
|
82
|
+
'3'
|
83
83
|
end
|
84
84
|
|
85
85
|
# Codigo referente ao tipo de carteira
|
86
86
|
# @return [String]: 1 caractere numérico
|
87
87
|
def tipo_carteira
|
88
|
-
if
|
89
|
-
|
88
|
+
if carteira == '03'
|
89
|
+
'1'
|
90
90
|
end
|
91
91
|
end
|
92
92
|
# Dígito verificador do nosso número
|
@@ -96,16 +96,16 @@ module Brcobranca
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def agencia_conta_boleto
|
99
|
-
"#{
|
99
|
+
"#{agencia}.#{posto}.#{conta_corrente}"
|
100
100
|
end
|
101
101
|
|
102
102
|
def agencia_posto_conta
|
103
|
-
"#{
|
103
|
+
"#{agencia}#{posto}#{conta_corrente}"
|
104
104
|
end
|
105
105
|
|
106
106
|
# Segunda parte do código de barras.
|
107
107
|
def codigo_barras_segunda_parte
|
108
|
-
campo_livre = "#{
|
108
|
+
campo_livre = "#{tipo_cobranca}#{tipo_carteira}#{nosso_numero_boleto.gsub(/\D/, '')}#{agencia_posto_conta}10"
|
109
109
|
campo_livre + campo_livre.modulo11_9to2_10_como_zero.to_s
|
110
110
|
end
|
111
111
|
end
|
@@ -7,7 +7,6 @@ module Brcobranca
|
|
7
7
|
extend self
|
8
8
|
|
9
9
|
def define_template(template)
|
10
|
-
|
11
10
|
case template
|
12
11
|
when :rghost
|
13
12
|
return Brcobranca::Boleto::Template::Rghost
|
@@ -16,7 +15,6 @@ module Brcobranca
|
|
16
15
|
else
|
17
16
|
return Brcobranca::Boleto::Template::Rghost
|
18
17
|
end
|
19
|
-
|
20
18
|
end
|
21
19
|
end
|
22
20
|
end
|
@@ -30,8 +30,8 @@ module Brcobranca
|
|
30
30
|
# @return [Stream]
|
31
31
|
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
32
32
|
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
33
|
-
def to(formato, options={})
|
34
|
-
modelo_generico(self, options.merge!(
|
33
|
+
def to(formato, options = {})
|
34
|
+
modelo_generico(self, options.merge!(formato: formato))
|
35
35
|
end
|
36
36
|
|
37
37
|
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
@@ -39,7 +39,7 @@ module Brcobranca
|
|
39
39
|
# @return [Stream]
|
40
40
|
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
41
41
|
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
42
|
-
def lote(boletos, options={})
|
42
|
+
def lote(boletos, options = {})
|
43
43
|
modelo_generico_multipage(boletos, options)
|
44
44
|
end
|
45
45
|
|
@@ -51,8 +51,8 @@ module Brcobranca
|
|
51
51
|
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
52
52
|
def method_missing(m, *args)
|
53
53
|
method = m.to_s
|
54
|
-
if method.start_with?(
|
55
|
-
modelo_generico(self, (args.first || {}).merge!(
|
54
|
+
if method.start_with?('to_')
|
55
|
+
modelo_generico(self, (args.first || {}).merge!(formato: method[3..-1]))
|
56
56
|
else
|
57
57
|
super
|
58
58
|
end
|
@@ -67,24 +67,24 @@ module Brcobranca
|
|
67
67
|
# @param [Hash] options Opção para a criação do boleto.
|
68
68
|
# @option options [Symbol] :resolucao Resolução em pixels.
|
69
69
|
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
70
|
-
def modelo_generico(boleto, options={})
|
71
|
-
doc=Document.new :
|
70
|
+
def modelo_generico(boleto, options = {})
|
71
|
+
doc = Document.new paper: :A4 # 210x297
|
72
72
|
|
73
|
-
template_path = File.join(File.dirname(__FILE__),'..','..','arquivos','templates','modelo_generico.eps')
|
73
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
|
74
74
|
|
75
|
-
|
75
|
+
fail 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
76
76
|
|
77
77
|
modelo_generico_template(doc, boleto, template_path)
|
78
78
|
modelo_generico_cabecalho(doc, boleto)
|
79
79
|
modelo_generico_rodape(doc, boleto)
|
80
80
|
|
81
|
-
#Gerando codigo de barra com rghost_barcode
|
82
|
-
doc.barcode_interleaved2of5(boleto.codigo_barras, :
|
81
|
+
# Gerando codigo de barra com rghost_barcode
|
82
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: '0.7 cm', y: '5.8 cm') if boleto.codigo_barras
|
83
83
|
|
84
84
|
# Gerando stream
|
85
85
|
formato = (options.delete(:formato) || Brcobranca.configuration.formato)
|
86
86
|
resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
|
87
|
-
doc.render_stream(formato.to_sym, :
|
87
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
88
88
|
end
|
89
89
|
|
90
90
|
# Retorna um stream para multiplos boletos pronto para gravação em arquivo.
|
@@ -94,12 +94,12 @@ module Brcobranca
|
|
94
94
|
# @param [Hash] options Opção para a criação do boleto.
|
95
95
|
# @option options [Symbol] :resolucao Resolução em pixels.
|
96
96
|
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
97
|
-
def modelo_generico_multipage(boletos, options={})
|
98
|
-
doc=Document.new :
|
97
|
+
def modelo_generico_multipage(boletos, options = {})
|
98
|
+
doc = Document.new paper: :A4 # 210x297
|
99
99
|
|
100
|
-
template_path = File.join(File.dirname(__FILE__),'..','..','arquivos','templates','modelo_generico.eps')
|
100
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
|
101
101
|
|
102
|
-
|
102
|
+
fail 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
103
103
|
|
104
104
|
boletos.each_with_index do |boleto, index|
|
105
105
|
|
@@ -107,123 +107,121 @@ module Brcobranca
|
|
107
107
|
modelo_generico_cabecalho(doc, boleto)
|
108
108
|
modelo_generico_rodape(doc, boleto)
|
109
109
|
|
110
|
-
#Gerando codigo de barra com rghost_barcode
|
111
|
-
doc.barcode_interleaved2of5(boleto.codigo_barras, :
|
112
|
-
#Cria nova página se não for o último boleto
|
113
|
-
doc.next_page unless index == boletos.length-1
|
110
|
+
# Gerando codigo de barra com rghost_barcode
|
111
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: '0.7 cm', y: '5.8 cm') if boleto.codigo_barras
|
112
|
+
# Cria nova página se não for o último boleto
|
113
|
+
doc.next_page unless index == boletos.length - 1
|
114
114
|
|
115
115
|
end
|
116
116
|
# Gerando stream
|
117
117
|
formato = (options.delete(:formato) || Brcobranca.configuration.formato)
|
118
118
|
resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
|
119
|
-
doc.render_stream(formato.to_sym, :
|
119
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
120
120
|
end
|
121
121
|
|
122
122
|
# Define o template a ser usado no boleto
|
123
|
-
def modelo_generico_template(doc,
|
124
|
-
doc.define_template(:template, template_path, :
|
123
|
+
def modelo_generico_template(doc, _boleto, template_path)
|
124
|
+
doc.define_template(:template, template_path, x: '0.3 cm', y: '0 cm')
|
125
125
|
doc.use_template :template
|
126
126
|
|
127
127
|
doc.define_tags do
|
128
|
-
tag :grande, :
|
128
|
+
tag :grande, size: 13
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
132
|
# Monta o cabeçalho do layout do boleto
|
133
133
|
def modelo_generico_cabecalho(doc, boleto)
|
134
|
-
#INICIO Primeira parte do BOLETO
|
134
|
+
# INICIO Primeira parte do BOLETO
|
135
135
|
# LOGOTIPO do BANCO
|
136
|
-
doc.image(boleto.logotipo, :
|
136
|
+
doc.image(boleto.logotipo, x: '0.5 cm', y: '23.85 cm', zoom: 80)
|
137
137
|
# Dados
|
138
|
-
doc.moveto :
|
139
|
-
doc.show "#{boleto.banco}-#{boleto.banco_dv}", :
|
140
|
-
doc.moveto :
|
141
|
-
doc.show boleto.codigo_barras.linha_digitavel, :
|
142
|
-
doc.moveto :
|
138
|
+
doc.moveto x: '5.2 cm', y: '23.85 cm'
|
139
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
|
140
|
+
doc.moveto x: '7.5 cm', y: '23.85 cm'
|
141
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
142
|
+
doc.moveto x: '0.7 cm', y: '23 cm'
|
143
143
|
doc.show boleto.cedente
|
144
|
-
doc.moveto :
|
144
|
+
doc.moveto x: '11 cm', y: '23 cm'
|
145
145
|
doc.show boleto.agencia_conta_boleto
|
146
|
-
doc.moveto :
|
146
|
+
doc.moveto x: '14.2 cm', y: '23 cm'
|
147
147
|
doc.show boleto.especie
|
148
|
-
doc.moveto :
|
148
|
+
doc.moveto x: '15.7 cm', y: '23 cm'
|
149
149
|
doc.show boleto.quantidade
|
150
|
-
doc.moveto :
|
150
|
+
doc.moveto x: '0.7 cm', y: '22.2 cm'
|
151
151
|
doc.show boleto.numero_documento
|
152
|
-
doc.moveto :
|
152
|
+
doc.moveto x: '7 cm', y: '22.2 cm'
|
153
153
|
doc.show "#{boleto.documento_cedente.formata_documento}"
|
154
|
-
doc.moveto :
|
154
|
+
doc.moveto x: '12 cm', y: '22.2 cm'
|
155
155
|
doc.show boleto.data_vencimento.to_s_br
|
156
|
-
doc.moveto :
|
156
|
+
doc.moveto x: '16.5 cm', y: '23 cm'
|
157
157
|
doc.show boleto.nosso_numero_boleto
|
158
|
-
doc.moveto :
|
158
|
+
doc.moveto x: '16.5 cm', y: '22.2 cm'
|
159
159
|
doc.show boleto.valor_documento.to_currency
|
160
|
-
doc.moveto :
|
160
|
+
doc.moveto x: '1.4 cm', y: '20.9 cm'
|
161
161
|
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
|
162
|
-
doc.moveto :
|
162
|
+
doc.moveto x: '1.4 cm', y: '20.6 cm'
|
163
163
|
doc.show "#{boleto.sacado_endereco}"
|
164
|
-
#FIM Primeira parte do BOLETO
|
164
|
+
# FIM Primeira parte do BOLETO
|
165
165
|
end
|
166
166
|
|
167
167
|
# Monta o corpo e rodapé do layout do boleto
|
168
168
|
def modelo_generico_rodape(doc, boleto)
|
169
|
-
#INICIO Segunda parte do BOLETO BB
|
169
|
+
# INICIO Segunda parte do BOLETO BB
|
170
170
|
# LOGOTIPO do BANCO
|
171
|
-
doc.image(boleto.logotipo, :
|
172
|
-
doc.moveto :
|
173
|
-
doc.show "#{boleto.banco}-#{boleto.banco_dv}", :
|
174
|
-
doc.moveto :
|
175
|
-
doc.show boleto.codigo_barras.linha_digitavel, :
|
176
|
-
doc.moveto :
|
171
|
+
doc.image(boleto.logotipo, x: '0.5 cm', y: '16.8 cm', zoom: 80)
|
172
|
+
doc.moveto x: '5.2 cm', y: '16.8 cm'
|
173
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
|
174
|
+
doc.moveto x: '7.5 cm', y: '16.8 cm'
|
175
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
176
|
+
doc.moveto x: '0.7 cm', y: '16 cm'
|
177
177
|
doc.show boleto.local_pagamento
|
178
|
-
doc.moveto :
|
178
|
+
doc.moveto x: '16.5 cm', y: '16 cm'
|
179
179
|
doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
|
180
|
-
doc.moveto :
|
180
|
+
doc.moveto x: '0.7 cm', y: '15.2 cm'
|
181
181
|
doc.show boleto.cedente
|
182
|
-
doc.moveto :
|
182
|
+
doc.moveto x: '16.5 cm', y: '15.2 cm'
|
183
183
|
doc.show boleto.agencia_conta_boleto
|
184
|
-
doc.moveto :
|
184
|
+
doc.moveto x: '0.7 cm', y: '14.4 cm'
|
185
185
|
doc.show boleto.data_documento.to_s_br if boleto.data_documento
|
186
|
-
doc.moveto :
|
186
|
+
doc.moveto x: '4.2 cm', y: '14.4 cm'
|
187
187
|
doc.show boleto.numero_documento
|
188
|
-
doc.moveto :
|
188
|
+
doc.moveto x: '10 cm', y: '14.4 cm'
|
189
189
|
doc.show boleto.especie_documento
|
190
|
-
doc.moveto :
|
190
|
+
doc.moveto x: '11.7 cm', y: '14.4 cm'
|
191
191
|
doc.show boleto.aceite
|
192
|
-
doc.moveto :
|
192
|
+
doc.moveto x: '13 cm', y: '14.4 cm'
|
193
193
|
doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
|
194
|
-
doc.moveto :
|
194
|
+
doc.moveto x: '16.5 cm', y: '14.4 cm'
|
195
195
|
doc.show boleto.nosso_numero_boleto
|
196
|
-
doc.moveto :
|
196
|
+
doc.moveto x: '4.4 cm', y: '13.5 cm'
|
197
197
|
doc.show boleto.carteira
|
198
|
-
doc.moveto :
|
198
|
+
doc.moveto x: '6.4 cm', y: '13.5 cm'
|
199
199
|
doc.show boleto.especie
|
200
|
-
doc.moveto :
|
200
|
+
doc.moveto x: '8 cm', y: '13.5 cm'
|
201
201
|
doc.show boleto.quantidade
|
202
202
|
# doc.moveto :x => '11 cm' , :y => '13.5 cm'
|
203
203
|
# doc.show boleto.valor.to_currency
|
204
|
-
doc.moveto :
|
204
|
+
doc.moveto x: '16.5 cm', y: '13.5 cm'
|
205
205
|
doc.show boleto.valor_documento.to_currency
|
206
|
-
doc.moveto :
|
206
|
+
doc.moveto x: '0.7 cm', y: '12.7 cm'
|
207
207
|
doc.show boleto.instrucao1
|
208
|
-
doc.moveto :
|
208
|
+
doc.moveto x: '0.7 cm', y: '12.3 cm'
|
209
209
|
doc.show boleto.instrucao2
|
210
|
-
doc.moveto :
|
210
|
+
doc.moveto x: '0.7 cm', y: '11.9 cm'
|
211
211
|
doc.show boleto.instrucao3
|
212
|
-
doc.moveto :
|
212
|
+
doc.moveto x: '0.7 cm', y: '11.5 cm'
|
213
213
|
doc.show boleto.instrucao4
|
214
|
-
doc.moveto :
|
214
|
+
doc.moveto x: '0.7 cm', y: '11.1 cm'
|
215
215
|
doc.show boleto.instrucao5
|
216
|
-
doc.moveto :
|
216
|
+
doc.moveto x: '0.7 cm', y: '10.7 cm'
|
217
217
|
doc.show boleto.instrucao6
|
218
|
-
doc.moveto :
|
218
|
+
doc.moveto x: '1.2 cm', y: '8.8 cm'
|
219
219
|
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
|
220
|
-
doc.moveto :
|
220
|
+
doc.moveto x: '1.2 cm', y: '8.4 cm'
|
221
221
|
doc.show "#{boleto.sacado_endereco}"
|
222
|
-
#FIM Segunda parte do BOLETO
|
222
|
+
# FIM Segunda parte do BOLETO
|
223
223
|
end
|
224
|
-
|
225
|
-
end #Base
|
224
|
+
end # Base
|
226
225
|
end
|
227
226
|
end
|
228
227
|
end
|
229
|
-
|
@@ -30,8 +30,8 @@ module Brcobranca
|
|
30
30
|
# @return [Stream]
|
31
31
|
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
32
32
|
# @see Rghost#modelo_carne Recebe os mesmos parâmetros do Rghost#modelo_carne.
|
33
|
-
def to(formato, options={})
|
34
|
-
modelo_carne(self, options.merge!(
|
33
|
+
def to(formato, options = {})
|
34
|
+
modelo_carne(self, options.merge!(formato: formato))
|
35
35
|
end
|
36
36
|
|
37
37
|
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
@@ -39,7 +39,7 @@ module Brcobranca
|
|
39
39
|
# @return [Stream]
|
40
40
|
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
41
41
|
# @see Rghost#modelo_carne Recebe os mesmos parâmetros do Rghost#modelo_carne.
|
42
|
-
def lote(boletos, options={})
|
42
|
+
def lote(boletos, options = {})
|
43
43
|
modelo_carne_multipage(boletos, options)
|
44
44
|
end
|
45
45
|
|
@@ -51,8 +51,8 @@ module Brcobranca
|
|
51
51
|
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
52
52
|
def method_missing(m, *args)
|
53
53
|
method = m.to_s
|
54
|
-
if method.start_with?(
|
55
|
-
modelo_carne(self, (args.first || {}).merge!(
|
54
|
+
if method.start_with?('to_')
|
55
|
+
modelo_carne(self, (args.first || {}).merge!(formato: method[3..-1]))
|
56
56
|
else
|
57
57
|
super
|
58
58
|
end
|
@@ -67,14 +67,13 @@ module Brcobranca
|
|
67
67
|
# @param [Hash] options Opção para a criação do boleto.
|
68
68
|
# @option options [Symbol] :resolucao Resolução em pixels.
|
69
69
|
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
70
|
-
def modelo_carne(boleto, options={})
|
71
|
-
doc=Document.new :
|
70
|
+
def modelo_carne(boleto, options = {})
|
71
|
+
doc = Document.new paper: [21, 9]
|
72
72
|
|
73
73
|
colunas = calc_colunas 1
|
74
74
|
linhas = calc_linhas 0
|
75
75
|
|
76
|
-
|
77
|
-
modelo_carne_load_background(doc,0)
|
76
|
+
modelo_carne_load_background(doc, 0)
|
78
77
|
|
79
78
|
modelo_carne_define_tags(doc)
|
80
79
|
|
@@ -84,11 +83,9 @@ module Brcobranca
|
|
84
83
|
# Gerando stream
|
85
84
|
formato = (options.delete(:formato) || Brcobranca.configuration.formato)
|
86
85
|
resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
|
87
|
-
doc.render_stream(formato.to_sym, :
|
86
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
88
87
|
end
|
89
88
|
|
90
|
-
|
91
|
-
|
92
89
|
# Retorna um stream para multiplos boletos pronto para gravação em arquivo.
|
93
90
|
#
|
94
91
|
# @return [Stream]
|
@@ -96,21 +93,20 @@ module Brcobranca
|
|
96
93
|
# @param [Hash] options Opção para a criação do boleto.
|
97
94
|
# @option options [Symbol] :resolucao Resolução em pixels.
|
98
95
|
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
99
|
-
def modelo_carne_multipage(boletos, options={})
|
100
|
-
doc=Document.new :
|
101
|
-
|
96
|
+
def modelo_carne_multipage(boletos, options = {})
|
97
|
+
doc = Document.new paper: :A4
|
102
98
|
|
103
99
|
max_per_page = 3
|
104
100
|
curr_page_position = 0
|
105
|
-
heigth_template = 9 #altura do template é de 9 cm
|
106
|
-
initial_margin_bottom = 1.4 #margin inicial abaixo
|
101
|
+
heigth_template = 9 # altura do template é de 9 cm
|
102
|
+
initial_margin_bottom = 1.4 # margin inicial abaixo
|
107
103
|
|
108
104
|
modelo_carne_define_tags(doc)
|
109
105
|
|
110
106
|
boletos.each_with_index do |boleto, index|
|
111
|
-
curr_page_position = curr_page_position+1
|
107
|
+
curr_page_position = curr_page_position + 1
|
112
108
|
|
113
|
-
margin_bottom = initial_margin_bottom + (
|
109
|
+
margin_bottom = initial_margin_bottom + (heigth_template * (max_per_page - curr_page_position)) # onde o boleto sera impresso na pagina A4
|
114
110
|
|
115
111
|
modelo_carne_load_background doc, margin_bottom
|
116
112
|
|
@@ -120,12 +116,11 @@ module Brcobranca
|
|
120
116
|
modelo_carne_build_data_left(doc, boleto, colunas, linhas)
|
121
117
|
modelo_carne_build_data_right(doc, boleto, colunas, linhas)
|
122
118
|
|
123
|
-
|
124
119
|
if curr_page_position >= max_per_page # maximo 3 boletos por pagina
|
125
|
-
#Cria nova página se não for o último boleto
|
126
|
-
doc.next_page unless index == boletos.length-1
|
120
|
+
# Cria nova página se não for o último boleto
|
121
|
+
doc.next_page unless index == boletos.length - 1
|
127
122
|
|
128
|
-
curr_page_position = 0 #reinicia contador por página
|
123
|
+
curr_page_position = 0 # reinicia contador por página
|
129
124
|
end
|
130
125
|
|
131
126
|
end
|
@@ -134,194 +129,186 @@ module Brcobranca
|
|
134
129
|
formato = (options.delete(:formato) || Brcobranca.configuration.formato)
|
135
130
|
resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
|
136
131
|
|
137
|
-
doc.render_stream(formato.to_sym, :
|
132
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
138
133
|
end
|
139
134
|
|
140
|
-
#carrega background do boleto
|
141
|
-
def modelo_carne_load_background(doc,margin_bottom)
|
142
|
-
template_path = File.join(File.dirname(__FILE__),'..','..','arquivos','templates','modelo_carne.eps')
|
143
|
-
|
135
|
+
# carrega background do boleto
|
136
|
+
def modelo_carne_load_background(doc, margin_bottom)
|
137
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_carne.eps')
|
138
|
+
fail 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
144
139
|
|
145
|
-
doc.image template_path, :
|
140
|
+
doc.image template_path, x: 1, y: margin_bottom
|
146
141
|
end
|
147
142
|
|
148
|
-
#define os tamanhos
|
143
|
+
# define os tamanhos
|
149
144
|
def modelo_carne_define_tags(doc)
|
150
145
|
doc.define_tags do
|
151
|
-
tag :grande, :
|
152
|
-
tag :media, :
|
146
|
+
tag :grande, size: 13
|
147
|
+
tag :media, size: 10
|
153
148
|
end
|
154
149
|
end
|
155
150
|
|
156
|
-
#define as colunas do documento, conforme margem lateral esquerda
|
151
|
+
# define as colunas do documento, conforme margem lateral esquerda
|
157
152
|
def calc_colunas(margin_left)
|
158
|
-
colunas = [0.1,3.4,4.5,7.1,7.8,8.5,9.1,9.7,11,12.4,13.3,15]
|
153
|
+
colunas = [0.1, 3.4, 4.5, 7.1, 7.8, 8.5, 9.1, 9.7, 11, 12.4, 13.3, 15]
|
159
154
|
|
160
|
-
colunas.each_with_index do |v,i|
|
161
|
-
colunas[i] = v+margin_left
|
155
|
+
colunas.each_with_index do |v, i|
|
156
|
+
colunas[i] = v + margin_left
|
162
157
|
end
|
163
158
|
|
164
159
|
colunas
|
165
160
|
end
|
166
161
|
|
167
|
-
#define as linhas do documento conforme margem inferior
|
162
|
+
# define as linhas do documento conforme margem inferior
|
168
163
|
def calc_linhas(margin_bottom)
|
169
|
-
linhas = [8.2,7.5,6.92,6.34,5.74,5.1,4.7,4.3,3.9,3.5,3.1,2.32,1.92,1.69,0.1]
|
164
|
+
linhas = [8.2, 7.5, 6.92, 6.34, 5.74, 5.1, 4.7, 4.3, 3.9, 3.5, 3.1, 2.32, 1.92, 1.69, 0.1]
|
170
165
|
|
171
|
-
linhas.each_with_index do |v,i|
|
172
|
-
linhas[i] = v+margin_bottom
|
166
|
+
linhas.each_with_index do |v, i|
|
167
|
+
linhas[i] = v + margin_bottom
|
173
168
|
end
|
174
169
|
|
175
170
|
linhas
|
176
171
|
end
|
177
172
|
|
178
173
|
# aplica dados do lado esquerdo
|
179
|
-
def modelo_carne_build_data_left(doc, boleto,colunas,linhas)
|
180
|
-
|
174
|
+
def modelo_carne_build_data_left(doc, boleto, colunas, linhas)
|
181
175
|
# LOGOTIPO do BANCO
|
182
|
-
doc.image(boleto.logotipo, :
|
176
|
+
doc.image(boleto.logotipo, x: (colunas[0] - 0.1), y: linhas[0], zoom: 50)
|
183
177
|
|
184
178
|
# Dados
|
185
179
|
|
186
|
-
#Numero do banco
|
187
|
-
doc.moveto :
|
180
|
+
# Numero do banco
|
181
|
+
doc.moveto x: colunas[1], y: linhas[0]
|
188
182
|
doc.show "#{boleto.banco}-#{boleto.banco_dv}"
|
189
183
|
|
190
|
-
#vencimento
|
191
|
-
doc.moveto :
|
184
|
+
# vencimento
|
185
|
+
doc.moveto x: colunas[0], y: linhas[1]
|
192
186
|
doc.show boleto.data_vencimento.to_s_br
|
193
187
|
|
194
|
-
#agencia/codigo cedente
|
195
|
-
doc.moveto :
|
188
|
+
# agencia/codigo cedente
|
189
|
+
doc.moveto x: colunas[0], y: linhas[2]
|
196
190
|
doc.show boleto.agencia_conta_boleto
|
197
191
|
|
198
|
-
#nosso numero
|
199
|
-
doc.moveto :
|
192
|
+
# nosso numero
|
193
|
+
doc.moveto x: colunas[0], y: linhas[3]
|
200
194
|
doc.show boleto.nosso_numero_boleto
|
201
195
|
|
202
|
-
#valor do documento
|
203
|
-
doc.moveto :
|
196
|
+
# valor do documento
|
197
|
+
doc.moveto x: colunas[0], y: linhas[4]
|
204
198
|
doc.show boleto.valor_documento.to_currency
|
205
199
|
|
206
|
-
#numero documento
|
207
|
-
doc.moveto :
|
200
|
+
# numero documento
|
201
|
+
doc.moveto x: colunas[0], y: linhas[11]
|
208
202
|
doc.show boleto.numero_documento
|
209
203
|
|
210
|
-
#sacado
|
211
|
-
doc.moveto :
|
204
|
+
# sacado
|
205
|
+
doc.moveto x: colunas[0], y: linhas[13]
|
212
206
|
doc.show "#{boleto.sacado}"
|
213
|
-
|
214
207
|
end
|
215
208
|
|
216
209
|
# aplica dados do lado direito
|
217
|
-
def modelo_carne_build_data_right(doc, boleto,colunas,linhas)
|
218
|
-
|
210
|
+
def modelo_carne_build_data_right(doc, boleto, colunas, linhas)
|
219
211
|
# LOGOTIPO do BANCO
|
220
|
-
doc.image(boleto.logotipo, :
|
212
|
+
doc.image(boleto.logotipo, x: colunas[2], y: linhas[0], zoom: 50)
|
221
213
|
|
222
|
-
#Numero do banco
|
223
|
-
doc.moveto :
|
224
|
-
doc.show "#{boleto.banco}-#{boleto.banco_dv}", :
|
214
|
+
# Numero do banco
|
215
|
+
doc.moveto x: colunas[4], y: linhas[0]
|
216
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
|
225
217
|
|
226
|
-
#linha digitavel
|
227
|
-
doc.moveto :
|
228
|
-
doc.show boleto.codigo_barras.linha_digitavel, :
|
218
|
+
# linha digitavel
|
219
|
+
doc.moveto x: colunas[6], y: linhas[0]
|
220
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :media
|
229
221
|
|
230
|
-
#local de pagamento
|
231
|
-
doc.moveto :
|
222
|
+
# local de pagamento
|
223
|
+
doc.moveto x: colunas[2], y: linhas[1]
|
232
224
|
doc.show boleto.local_pagamento
|
233
225
|
|
234
|
-
#vencimento
|
235
|
-
doc.moveto :
|
226
|
+
# vencimento
|
227
|
+
doc.moveto x: colunas[11], y: linhas[1]
|
236
228
|
doc.show boleto.data_vencimento.to_s_br
|
237
229
|
|
238
|
-
#cedente
|
239
|
-
doc.moveto :
|
230
|
+
# cedente
|
231
|
+
doc.moveto x: colunas[2], y: linhas[2]
|
240
232
|
doc.show boleto.cedente
|
241
233
|
|
242
|
-
#agencia/codigo cedente
|
243
|
-
doc.moveto :
|
234
|
+
# agencia/codigo cedente
|
235
|
+
doc.moveto x: colunas[11], y: linhas[2]
|
244
236
|
doc.show boleto.agencia_conta_boleto
|
245
237
|
|
246
|
-
#data do documento
|
247
|
-
doc.moveto :
|
238
|
+
# data do documento
|
239
|
+
doc.moveto x: colunas[2], y: linhas[3]
|
248
240
|
doc.show boleto.data_documento.to_s_br if boleto.data_documento
|
249
241
|
|
250
|
-
#numero documento
|
251
|
-
doc.moveto :
|
242
|
+
# numero documento
|
243
|
+
doc.moveto x: colunas[3], y: linhas[3]
|
252
244
|
doc.show boleto.numero_documento
|
253
245
|
|
254
|
-
#especie doc.
|
255
|
-
doc.moveto :
|
246
|
+
# especie doc.
|
247
|
+
doc.moveto x: colunas[8], y: linhas[3]
|
256
248
|
doc.show boleto.especie
|
257
249
|
|
258
|
-
#aceite
|
259
|
-
doc.moveto :
|
250
|
+
# aceite
|
251
|
+
doc.moveto x: colunas[9], y: linhas[3]
|
260
252
|
doc.show boleto.aceite
|
261
253
|
|
262
|
-
#dt processamento
|
263
|
-
doc.moveto :
|
254
|
+
# dt processamento
|
255
|
+
doc.moveto x: colunas[10], y: linhas[3]
|
264
256
|
doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
|
265
257
|
|
266
|
-
|
267
|
-
|
268
|
-
doc.moveto :x => colunas[11] , :y => linhas[3]
|
258
|
+
# nosso numero
|
259
|
+
doc.moveto x: colunas[11], y: linhas[3]
|
269
260
|
doc.show boleto.nosso_numero_boleto
|
270
261
|
|
271
|
-
#uso do banco
|
262
|
+
# uso do banco
|
272
263
|
## nada...
|
273
264
|
|
274
|
-
|
275
|
-
|
276
|
-
doc.moveto :x => colunas[3] , :y => linhas[4]
|
265
|
+
# carteira
|
266
|
+
doc.moveto x: colunas[3], y: linhas[4]
|
277
267
|
doc.show boleto.carteira
|
278
268
|
|
279
|
-
#especie
|
280
|
-
doc.moveto :
|
269
|
+
# especie
|
270
|
+
doc.moveto x: colunas[5], y: linhas[4]
|
281
271
|
doc.show boleto.moeda
|
282
272
|
|
283
|
-
#quantidade
|
284
|
-
doc.moveto :
|
273
|
+
# quantidade
|
274
|
+
doc.moveto x: colunas[7], y: linhas[4]
|
285
275
|
doc.show boleto.quantidade
|
286
276
|
|
287
|
-
#valor documento
|
288
|
-
doc.moveto :
|
277
|
+
# valor documento
|
278
|
+
doc.moveto x: colunas[8], y: linhas[4]
|
289
279
|
doc.show boleto.valor_documento.to_currency
|
290
280
|
|
291
|
-
#valor do documento
|
292
|
-
doc.moveto :
|
281
|
+
# valor do documento
|
282
|
+
doc.moveto x: colunas[11], y: linhas[4]
|
293
283
|
doc.show boleto.valor_documento.to_currency
|
294
284
|
|
295
|
-
#Instruções
|
296
|
-
doc.moveto :
|
285
|
+
# Instruções
|
286
|
+
doc.moveto x: colunas[2], y: linhas[5]
|
297
287
|
doc.show boleto.instrucao1
|
298
|
-
doc.moveto :
|
288
|
+
doc.moveto x: colunas[2], y: linhas[6]
|
299
289
|
doc.show boleto.instrucao2
|
300
|
-
doc.moveto :
|
290
|
+
doc.moveto x: colunas[2], y: linhas[7]
|
301
291
|
doc.show boleto.instrucao3
|
302
|
-
doc.moveto :
|
292
|
+
doc.moveto x: colunas[2], y: linhas[8]
|
303
293
|
doc.show boleto.instrucao4
|
304
|
-
doc.moveto :
|
294
|
+
doc.moveto x: colunas[2], y: linhas[9]
|
305
295
|
doc.show boleto.instrucao5
|
306
|
-
doc.moveto :
|
296
|
+
doc.moveto x: colunas[2], y: linhas[10]
|
307
297
|
doc.show boleto.instrucao6
|
308
298
|
|
309
|
-
#Sacado
|
310
|
-
doc.moveto :
|
299
|
+
# Sacado
|
300
|
+
doc.moveto x: colunas[2], y: linhas[11]
|
311
301
|
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
|
312
302
|
|
313
|
-
#Sacado endereço
|
314
|
-
doc.moveto :
|
303
|
+
# Sacado endereço
|
304
|
+
doc.moveto x: colunas[2], y: linhas[12]
|
315
305
|
doc.show "#{boleto.sacado_endereco}"
|
316
306
|
|
317
|
-
#codigo de barras
|
318
|
-
#Gerando codigo de barra com rghost_barcode
|
319
|
-
doc.barcode_interleaved2of5(boleto.codigo_barras, :
|
320
|
-
|
307
|
+
# codigo de barras
|
308
|
+
# Gerando codigo de barra com rghost_barcode
|
309
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.2 cm', x: colunas[2], y: linhas[14]) if boleto.codigo_barras
|
321
310
|
end
|
322
|
-
|
323
|
-
end #Base
|
311
|
+
end # Base
|
324
312
|
end
|
325
313
|
end
|
326
314
|
end
|
327
|
-
|