brcobranca_sicredi_400 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- metadata +225 -0
@@ -0,0 +1,264 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rghost'
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
7
|
+
gem 'rghost'
|
8
|
+
require 'rghost'
|
9
|
+
end
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'rghost_barcode'
|
13
|
+
rescue LoadError
|
14
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
15
|
+
gem 'rghost_barcode'
|
16
|
+
require 'rghost_barcode'
|
17
|
+
end
|
18
|
+
|
19
|
+
module Brcobranca
|
20
|
+
module Boleto
|
21
|
+
module Template
|
22
|
+
# Templates para usar com Rghost
|
23
|
+
module Rghost2
|
24
|
+
extend self
|
25
|
+
include RGhost unless include?(RGhost)
|
26
|
+
RGhost::Config::GS[:external_encoding] = Brcobranca.configuration.external_encoding
|
27
|
+
RGhost::Config::GS[:default_params] << '-dNOSAFER'
|
28
|
+
RGhost::Config::GS[:unit] = Units::Cm
|
29
|
+
|
30
|
+
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
31
|
+
#
|
32
|
+
# @return [Stream]
|
33
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
34
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
35
|
+
def to(formato, options = {})
|
36
|
+
modelo_generico(self, options.merge!(formato: formato))
|
37
|
+
end
|
38
|
+
|
39
|
+
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
40
|
+
#
|
41
|
+
# @return [Stream]
|
42
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
43
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
44
|
+
def lote(boletos, options = {})
|
45
|
+
modelo_generico_multipage(boletos, options)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
|
49
|
+
#
|
50
|
+
# @return [Stream]
|
51
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
52
|
+
# @example
|
53
|
+
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
54
|
+
def method_missing(m, *args)
|
55
|
+
method = m.to_s
|
56
|
+
if method.start_with?('to_')
|
57
|
+
modelo_generico(self, (args.first || {}).merge!(formato: method[3..]))
|
58
|
+
else
|
59
|
+
super
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
# Retorna um stream pronto para gravação em arquivo.
|
66
|
+
#
|
67
|
+
# @return [Stream]
|
68
|
+
# @param [Boleto] Instância de uma classe de boleto.
|
69
|
+
# @param [Hash] options Opção para a criação do boleto.
|
70
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
71
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
72
|
+
def modelo_generico(boleto, options = {})
|
73
|
+
doc = Document.new paper: [21, 29.7] # A4
|
74
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico2.eps')
|
75
|
+
raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
76
|
+
|
77
|
+
modelo_recibo_beneficiario(doc, boleto)
|
78
|
+
modelo_generico_template(doc, boleto, template_path)
|
79
|
+
modelo_generico_cabecalho(doc, boleto)
|
80
|
+
modelo_generico_rodape(doc, boleto)
|
81
|
+
# Gerando stream
|
82
|
+
formato = options.delete(:formato) || Brcobranca.configuration.formato
|
83
|
+
resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
|
84
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Retorna um stream para multiplos boletos pronto para gravação em arquivo.
|
88
|
+
#
|
89
|
+
# @return [Stream]
|
90
|
+
# @param [Array] Instâncias de classes de boleto.
|
91
|
+
# @param [Hash] options Opção para a criação do boleto.
|
92
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
93
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
94
|
+
def modelo_generico_multipage(boletos, options = {})
|
95
|
+
doc = Document.new paper: [21, 29.7] # A4
|
96
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico2.eps')
|
97
|
+
raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
98
|
+
|
99
|
+
boletos.each_with_index do |boleto, index|
|
100
|
+
modelo_generico_template(doc, boleto, template_path)
|
101
|
+
modelo_recibo_beneficiario(doc, boleto)
|
102
|
+
modelo_generico_cabecalho(doc, boleto)
|
103
|
+
modelo_generico_rodape(doc, boleto)
|
104
|
+
# Cria nova página se não for o último boleto
|
105
|
+
doc.next_page unless index == boletos.length - 1
|
106
|
+
end
|
107
|
+
# Gerando stream
|
108
|
+
formato = options.delete(:formato) || Brcobranca.configuration.formato
|
109
|
+
resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
|
110
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Define o template a ser usado no boleto
|
114
|
+
def modelo_generico_template(doc, _boleto, template_path)
|
115
|
+
doc.define_template(:template, template_path, x: '0.732 cm', y: '3.48 cm')
|
116
|
+
doc.use_template :template
|
117
|
+
|
118
|
+
doc.define_tags do
|
119
|
+
tag :menor, name: 'LiberationMono', size: 8
|
120
|
+
tag :menor2, name: 'LiberationMono', size: 6
|
121
|
+
tag :menor_bold, name: 'Helvetica-Bold', size: 8
|
122
|
+
tag :medio, name: 'Helvetica-Bold', size: 12
|
123
|
+
tag :maior, name: 'Helvetica-Bold', size: 13.5
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Monta Recibo do Beneficiário
|
128
|
+
def modelo_recibo_beneficiario(doc, boleto)
|
129
|
+
monta_logotipo(doc, boleto, 14.500, 26.850, 1.00)
|
130
|
+
doc.moveto x: 4.28, y: 26.87
|
131
|
+
doc.show truncar(boleto.cedente, 90), tag: :menor
|
132
|
+
doc.moveto x: 4.28, y: 26.33
|
133
|
+
doc.show truncar(boleto.sacado, 90), tag: :menor
|
134
|
+
doc.moveto x: 4.28, y: 25.76
|
135
|
+
doc.show boleto.documento_numero, tag: :menor
|
136
|
+
doc.moveto x: 4.28, y: 25.20
|
137
|
+
doc.show boleto.nosso_numero_boleto, tag: :menor
|
138
|
+
doc.moveto x: 4.28, y: 24.63
|
139
|
+
doc.show boleto.data_vencimento.to_s_br, tag: :menor
|
140
|
+
doc.moveto x: 4.28, y: 24.070
|
141
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :menor
|
142
|
+
doc.moveto x: 4.28, y: 23.49
|
143
|
+
doc.show boleto.agencia_conta_boleto, tag: :menor
|
144
|
+
doc.moveto x: 4.28, y: 22.95
|
145
|
+
doc.show boleto.valor_documento.to_currency, tag: :menor
|
146
|
+
end
|
147
|
+
|
148
|
+
# Monta Recibo do Pagador boleto
|
149
|
+
def modelo_generico_cabecalho(doc, boleto)
|
150
|
+
monta_logotipo(doc, boleto, 0.782, 19.717, 0.85)
|
151
|
+
doc.moveto x: 4.813, y: 19.801
|
152
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :medio
|
153
|
+
doc.moveto x: 0.823, y: 20.942
|
154
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :menor_bold
|
155
|
+
doc.moveto x: 1.121, y: 18.924
|
156
|
+
doc.show truncar(boleto.cedente, 47), tag: :menor
|
157
|
+
doc.moveto x: 9.9, y: 18.924
|
158
|
+
doc.show boleto.agencia_conta_boleto.tr(' ', ''), tag: :menor
|
159
|
+
doc.moveto x: 16.423, y: 18.924
|
160
|
+
doc.show boleto.nosso_numero_boleto, tag: :menor
|
161
|
+
doc.moveto x: 1.121, y: 17.984
|
162
|
+
doc.show boleto.documento_numero, tag: :menor
|
163
|
+
doc.moveto x: 14.139, y: 18.924
|
164
|
+
doc.show boleto.quantidade, tag: :menor
|
165
|
+
doc.moveto x: 7.0, y: 17.984
|
166
|
+
doc.show boleto.documento_cedente.formata_documento.to_s, tag: :menor
|
167
|
+
doc.moveto x: 10.602, y: 17.984
|
168
|
+
doc.show boleto.data_vencimento.to_s_br, tag: :menor
|
169
|
+
doc.text_area "<menor>#{boleto.valor_documento.to_currency}</menor>", width: 5.78, text_align: :right,
|
170
|
+
x: 14.12, y: 17.984, tag: :menor
|
171
|
+
doc.moveto x: 1.109, y: 17.089
|
172
|
+
doc.show truncar(boleto.sacado, 109), tag: :menor
|
173
|
+
end
|
174
|
+
|
175
|
+
# Monta o corpo e rodapé do layout do boleto
|
176
|
+
def modelo_generico_rodape(doc, boleto)
|
177
|
+
monta_logotipo(doc, boleto, 0.782, 13.9, 0.85)
|
178
|
+
doc.text_area "<menor_bold>#{boleto.data_vencimento&.to_s_br}</menor_bold>",
|
179
|
+
width: 5.786, text_align: :center, x: 14.47271, y: 13.11587
|
180
|
+
doc.text_area "<menor>#{boleto.agencia_conta_boleto}</menor>", width: 5.786, text_align: :center, x: 14.47271,
|
181
|
+
y: 12.26921
|
182
|
+
doc.text_area "<menor>#{boleto.nosso_numero_boleto}</menor>", width: 5.786, text_align: :center, x: 14.47271,
|
183
|
+
y: 11.42254
|
184
|
+
doc.text_area "<menor_bold>#{boleto.valor_documento.to_currency}</menor_bold>", width: 5.5, text_align: :right,
|
185
|
+
x: 14.47271, y: 10.56926
|
186
|
+
doc.moveto x: 4.813, y: 13.977
|
187
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :medio
|
188
|
+
doc.moveto x: 6.815, y: 13.990
|
189
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :maior
|
190
|
+
doc.moveto x: 1.121, y: 13.2
|
191
|
+
doc.show boleto.local_pagamento, tag: :menor
|
192
|
+
doc.moveto x: 1.121, y: 12.295
|
193
|
+
doc.show truncar(boleto.cedente, 54), tag: :menor
|
194
|
+
doc.moveto x: 11.307, y: 12.295
|
195
|
+
doc.show boleto.documento_cedente.formata_documento.to_s, tag: :menor
|
196
|
+
doc.moveto x: 1.112, y: 11.42
|
197
|
+
doc.show boleto.data_documento&.to_s_br, tag: :menor
|
198
|
+
doc.moveto x: 4.268, y: 11.42
|
199
|
+
doc.show boleto.documento_numero, tag: :menor
|
200
|
+
doc.moveto x: 7.471, y: 11.42
|
201
|
+
doc.show boleto.especie_documento, tag: :menor
|
202
|
+
doc.moveto x: 9.588, y: 11.42
|
203
|
+
doc.show boleto.aceite, tag: :menor
|
204
|
+
doc.moveto x: 11.660, y: 11.42
|
205
|
+
doc.show boleto.data_processamento&.to_s_br, tag: :menor
|
206
|
+
doc.moveto x: 4.62056, y: 10.56058
|
207
|
+
if boleto.variacao
|
208
|
+
doc.show "#{boleto.carteira}-#{boleto.variacao}"
|
209
|
+
else
|
210
|
+
doc.show boleto.carteira
|
211
|
+
end
|
212
|
+
doc.moveto x: 7.26640, y: 10.56058
|
213
|
+
doc.show boleto.especie
|
214
|
+
monta_instrucoes(doc, boleto, 0.8, 9.8)
|
215
|
+
pagador = "<menor>#{truncar(boleto.sacado, 75)} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}</menor>"
|
216
|
+
pagador += "\n<menor>#{boleto.sacado_endereco}</menor>" if boleto.sacado_endereco
|
217
|
+
doc.text_area pagador, width: 18, text_align: :left, x: 2.04611, y: 5.8, row_height: '0.4 cm'
|
218
|
+
if boleto.avalista && boleto.avalista_documento
|
219
|
+
avalista = "#{truncar(boleto.avalista,
|
220
|
+
46)} - CPF/CNPJ: #{boleto.avalista_documento.formata_documento}"
|
221
|
+
end
|
222
|
+
if avalista
|
223
|
+
doc.text_area "<menor2>#{avalista}</menor2>", width: 12.312, text_align: :left, x: 2.04611, y: 4.3,
|
224
|
+
row_height: '0.4 cm'
|
225
|
+
end
|
226
|
+
# Gerando codigo de barra com rghost_barcode
|
227
|
+
return unless boleto.codigo_barras
|
228
|
+
|
229
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: 1.06, y: 2.12)
|
230
|
+
|
231
|
+
# FIM Segunda parte do BOLETO
|
232
|
+
end
|
233
|
+
|
234
|
+
def truncar(string, limite)
|
235
|
+
string = "#{string[0...limite].upcase}..." if string.length > limite
|
236
|
+
string
|
237
|
+
end
|
238
|
+
|
239
|
+
def monta_instrucoes(doc, boleto, x, y)
|
240
|
+
lista_instrucoes = [
|
241
|
+
boleto.instrucoes,
|
242
|
+
boleto.instrucao1,
|
243
|
+
boleto.instrucao2,
|
244
|
+
boleto.instrucao3,
|
245
|
+
boleto.instrucao4,
|
246
|
+
boleto.instrucao5,
|
247
|
+
boleto.instrucao6
|
248
|
+
].reject(&:blank?)
|
249
|
+
lista_instrucoes = lista_instrucoes.map { |i| "<menor>#{i}</menor>" }
|
250
|
+
texto_instrucoes = lista_instrucoes.join("\n")
|
251
|
+
doc.text_area texto_instrucoes, width: 13.547, text_align: :left, x: x, y: y, row_height: '0.4 cm'
|
252
|
+
end
|
253
|
+
|
254
|
+
def monta_logotipo(doc, boleto, x, y, scale)
|
255
|
+
doc.graphic do |g|
|
256
|
+
g.scale(scale, scale)
|
257
|
+
fator = 1 / scale
|
258
|
+
g.image boleto.logotipo, x: (x * fator), y: (y * fator)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
@@ -0,0 +1,286 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rghost'
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
7
|
+
gem 'rghost'
|
8
|
+
require 'rghost'
|
9
|
+
end
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'rghost_barcode'
|
13
|
+
rescue LoadError
|
14
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
15
|
+
gem 'rghost_barcode'
|
16
|
+
require 'rghost_barcode'
|
17
|
+
end
|
18
|
+
|
19
|
+
module Brcobranca
|
20
|
+
module Boleto
|
21
|
+
module Template
|
22
|
+
# Templates para usar com Rghost
|
23
|
+
module RghostBolepix
|
24
|
+
extend self
|
25
|
+
include RGhost unless include?(RGhost)
|
26
|
+
RGhost::Config::GS[:external_encoding] = Brcobranca.configuration.external_encoding
|
27
|
+
RGhost::Config::GS[:default_params] << '-dNOSAFER'
|
28
|
+
|
29
|
+
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
30
|
+
#
|
31
|
+
# @return [Stream]
|
32
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
33
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
34
|
+
def to(formato, options = {})
|
35
|
+
modelo_generico(self, options.merge!(formato: formato))
|
36
|
+
end
|
37
|
+
|
38
|
+
# Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
|
39
|
+
#
|
40
|
+
# @return [Stream]
|
41
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
42
|
+
# @example
|
43
|
+
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
44
|
+
def method_missing(m, *args)
|
45
|
+
method = m.to_s
|
46
|
+
if method.start_with?('to_')
|
47
|
+
modelo_generico(self, (args.first || {}).merge!(formato: method[3..]))
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Retorna um stream pronto para gravação em arquivo.
|
56
|
+
#
|
57
|
+
# @return [Stream]
|
58
|
+
# @param [Boleto] Instância de uma classe de boleto.
|
59
|
+
# @param [Hash] options Opção para a criação do boleto.
|
60
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
61
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
62
|
+
def modelo_generico(boleto, options = {})
|
63
|
+
doc = Document.new paper: :A4 # 210x297
|
64
|
+
|
65
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
|
66
|
+
|
67
|
+
raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
68
|
+
|
69
|
+
modelo_generico_template(doc, boleto, template_path)
|
70
|
+
modelo_generico_cabecalho(doc, boleto)
|
71
|
+
modelo_generico_rodape(doc, boleto)
|
72
|
+
|
73
|
+
# Gerando codigo de barra com rghost_barcode
|
74
|
+
if boleto.codigo_barras
|
75
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm",
|
76
|
+
y: "#{@y - 1.67} cm")
|
77
|
+
end
|
78
|
+
|
79
|
+
# Gerando QRCode a partir de um emv
|
80
|
+
if boleto.emv
|
81
|
+
doc.barcode_qrcode(boleto.emv, width: '2.5 cm',
|
82
|
+
height: '2.5 cm',
|
83
|
+
eclevel: 'H',
|
84
|
+
x: "#{@x + 12.9} cm",
|
85
|
+
y: "#{@y - 2.50} cm")
|
86
|
+
move_more(doc, @x + 12.9, @y - 3.70)
|
87
|
+
doc.show 'Pague com PIX'
|
88
|
+
end
|
89
|
+
|
90
|
+
# Gerando stream
|
91
|
+
formato = options.delete(:formato) || Brcobranca.configuration.formato
|
92
|
+
resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
|
93
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Define o template a ser usado no boleto
|
97
|
+
def modelo_generico_template(doc, _boleto, template_path)
|
98
|
+
doc.define_template(:template, template_path, x: '0.5 cm', y: '2.7 cm')
|
99
|
+
doc.use_template :template
|
100
|
+
|
101
|
+
doc.define_tags do
|
102
|
+
tag :grande, size: 13
|
103
|
+
tag :maior, size: 15
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def move_more(doc, x, y)
|
108
|
+
@x += x
|
109
|
+
@y += y
|
110
|
+
doc.moveto x: "#{@x} cm", y: "#{@y} cm"
|
111
|
+
end
|
112
|
+
|
113
|
+
# Monta o cabeçalho do layout do boleto
|
114
|
+
def modelo_generico_cabecalho(doc, boleto)
|
115
|
+
# INICIO Primeira parte do BOLETO
|
116
|
+
# Pontos iniciais em x e y
|
117
|
+
@x = 0.50
|
118
|
+
@y = 27.42
|
119
|
+
# LOGOTIPO do BANCO
|
120
|
+
doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
|
121
|
+
# Dados
|
122
|
+
|
123
|
+
move_more(doc, 4.84, 0.02)
|
124
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
|
125
|
+
move_more(doc, 2, 0)
|
126
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
127
|
+
move_more(doc, -6.5, -0.83)
|
128
|
+
|
129
|
+
doc.show boleto.cedente
|
130
|
+
|
131
|
+
move_more(doc, 15.8, 0)
|
132
|
+
doc.show boleto.agencia_conta_boleto
|
133
|
+
|
134
|
+
move_more(doc, -15.8, -0.9)
|
135
|
+
doc.show boleto.cedente_endereco
|
136
|
+
|
137
|
+
move_more(doc, 15.8, 0)
|
138
|
+
doc.show boleto.nosso_numero_boleto
|
139
|
+
|
140
|
+
move_more(doc, -15.8, -0.8)
|
141
|
+
doc.show boleto.documento_numero
|
142
|
+
|
143
|
+
move_more(doc, 3.5, 0)
|
144
|
+
doc.show boleto.especie
|
145
|
+
|
146
|
+
move_more(doc, 1.5, 0)
|
147
|
+
doc.show boleto.quantidade
|
148
|
+
|
149
|
+
move_more(doc, 2, 0)
|
150
|
+
doc.show boleto.documento_cedente.formata_documento.to_s
|
151
|
+
|
152
|
+
move_more(doc, 3.8, 0)
|
153
|
+
doc.show boleto.data_vencimento.to_s_br
|
154
|
+
|
155
|
+
move_more(doc, 5, 0)
|
156
|
+
doc.show boleto.valor_documento.to_currency
|
157
|
+
|
158
|
+
move_more(doc, -15.8, -0.75)
|
159
|
+
doc.show boleto.descontos_e_abatimentos&.to_currency
|
160
|
+
|
161
|
+
move_more(doc, 0.8, -0.55)
|
162
|
+
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
|
163
|
+
|
164
|
+
move_more(doc, 0, -0.3)
|
165
|
+
doc.show boleto.sacado_endereco.to_s
|
166
|
+
return unless boleto.demonstrativo
|
167
|
+
|
168
|
+
doc.text_area boleto.demonstrativo, width: '18.5 cm', text_align: :left, x: "#{@x - 0.8} cm",
|
169
|
+
y: "#{@y - 0.9} cm", row_height: '0.4 cm'
|
170
|
+
|
171
|
+
# FIM Primeira parte do BOLETO
|
172
|
+
end
|
173
|
+
|
174
|
+
# Monta o corpo e rodapé do layout do boleto
|
175
|
+
def modelo_generico_rodape(doc, boleto)
|
176
|
+
# INICIO Segunda parte do BOLETO BB
|
177
|
+
# Pontos iniciais em x e y
|
178
|
+
@x = 0.50
|
179
|
+
@y = 12.22
|
180
|
+
# LOGOTIPO do BANCO
|
181
|
+
doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
|
182
|
+
|
183
|
+
move_more(doc, 4.84, 0.01)
|
184
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
|
185
|
+
|
186
|
+
move_more(doc, 2, 0)
|
187
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
188
|
+
|
189
|
+
move_more(doc, -6.5, -0.9)
|
190
|
+
doc.show boleto.local_pagamento
|
191
|
+
|
192
|
+
move_more(doc, 15.8, 0)
|
193
|
+
doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
|
194
|
+
|
195
|
+
move_more(doc, -15.8, -0.8)
|
196
|
+
if boleto.cedente_endereco
|
197
|
+
doc.show boleto.cedente_endereco
|
198
|
+
move_more(doc, 1.2, 0.3)
|
199
|
+
doc.show boleto.cedente
|
200
|
+
move_more(doc, -1.2, -0.3)
|
201
|
+
else
|
202
|
+
doc.show boleto.cedente
|
203
|
+
end
|
204
|
+
|
205
|
+
move_more(doc, 15.8, 0)
|
206
|
+
doc.show boleto.agencia_conta_boleto
|
207
|
+
|
208
|
+
move_more(doc, -15.8, -0.9)
|
209
|
+
doc.show boleto.data_documento.to_s_br if boleto.data_documento
|
210
|
+
|
211
|
+
move_more(doc, 3.5, 0)
|
212
|
+
doc.show boleto.documento_numero
|
213
|
+
|
214
|
+
move_more(doc, 5.8, 0)
|
215
|
+
doc.show boleto.especie_documento
|
216
|
+
|
217
|
+
move_more(doc, 1.7, 0)
|
218
|
+
doc.show boleto.aceite
|
219
|
+
|
220
|
+
move_more(doc, 1.3, 0)
|
221
|
+
|
222
|
+
doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
|
223
|
+
|
224
|
+
move_more(doc, 3.5, 0)
|
225
|
+
doc.show boleto.nosso_numero_boleto
|
226
|
+
|
227
|
+
move_more(doc, -12.1, -0.8)
|
228
|
+
if boleto.variacao
|
229
|
+
doc.show "#{boleto.carteira}-#{boleto.variacao}"
|
230
|
+
else
|
231
|
+
doc.show boleto.carteira
|
232
|
+
end
|
233
|
+
|
234
|
+
move_more(doc, 2, 0)
|
235
|
+
doc.show boleto.especie
|
236
|
+
|
237
|
+
move_more(doc, 10.1, 0)
|
238
|
+
doc.show boleto.valor_documento.to_currency
|
239
|
+
|
240
|
+
move_more(doc, 0, -0.8)
|
241
|
+
doc.show boleto.descontos_e_abatimentos&.to_currency
|
242
|
+
|
243
|
+
move_more(doc, 0, 0.8)
|
244
|
+
if boleto.instrucoes
|
245
|
+
doc.text_area boleto.instrucoes, width: '14 cm',
|
246
|
+
text_align: :left, x: "#{@x -= 15.8} cm",
|
247
|
+
y: "#{@y -= 0.9} cm",
|
248
|
+
row_height: '0.4 cm'
|
249
|
+
move_more(doc, 0, -2)
|
250
|
+
else
|
251
|
+
move_more(doc, -15.8, -0.9)
|
252
|
+
doc.show boleto.instrucao1
|
253
|
+
|
254
|
+
move_more(doc, 0, -0.4)
|
255
|
+
doc.show boleto.instrucao2
|
256
|
+
|
257
|
+
move_more(doc, 0, -0.4)
|
258
|
+
doc.show boleto.instrucao3
|
259
|
+
|
260
|
+
move_more(doc, 0, -0.4)
|
261
|
+
doc.show boleto.instrucao4
|
262
|
+
|
263
|
+
move_more(doc, 0, -0.4)
|
264
|
+
doc.show boleto.instrucao5
|
265
|
+
|
266
|
+
move_more(doc, 0, -0.4)
|
267
|
+
doc.show boleto.instrucao6
|
268
|
+
end
|
269
|
+
|
270
|
+
move_more(doc, 0.5, -1.9)
|
271
|
+
if boleto.sacado && boleto.sacado_documento
|
272
|
+
sacado_info = "#{boleto.sacado} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}"
|
273
|
+
doc.show sacado_info
|
274
|
+
end
|
275
|
+
|
276
|
+
move_more(doc, 0, -0.4)
|
277
|
+
doc.show boleto.sacado_endereco.to_s
|
278
|
+
|
279
|
+
move_more(doc, 1.2, -0.93)
|
280
|
+
doc.show "#{boleto.avalista} - #{boleto.avalista_documento}" if boleto.avalista && boleto.avalista_documento
|
281
|
+
# FIM Segunda parte do BOLETO
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|