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,145 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
#
|
5
|
+
# Sicredi
|
6
|
+
# Documentação: Maio 2016
|
7
|
+
#
|
8
|
+
module Brcobranca
|
9
|
+
module Boleto
|
10
|
+
# Banco SICREDI
|
11
|
+
class Sicredi < Base
|
12
|
+
# <b>REQUERIDO</b>: Código do posto da cooperativa de crédito
|
13
|
+
attr_accessor :posto
|
14
|
+
|
15
|
+
# <b>REQUERIDO</b>: Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
|
16
|
+
attr_accessor :byte_idt
|
17
|
+
|
18
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
19
|
+
validates_length_of :nosso_numero, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
20
|
+
validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
21
|
+
# Carteira
|
22
|
+
# 1 – Com Registro
|
23
|
+
# 3 – Sem Registro
|
24
|
+
# Obs.: O SICREDI não validará este campo.
|
25
|
+
validates_length_of :carteira, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
|
26
|
+
validates_length_of :posto, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
27
|
+
validates_length_of :byte_idt, is: 1,
|
28
|
+
message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
|
29
|
+
validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
|
30
|
+
|
31
|
+
# Nova instancia do Bradesco
|
32
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
33
|
+
def initialize(campos = {})
|
34
|
+
campos = { carteira: '3', especie_documento: 'A' }.merge!(campos)
|
35
|
+
super(campos)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
39
|
+
#
|
40
|
+
# @return [String] 3 caracteres numéricos.
|
41
|
+
def banco
|
42
|
+
'748'
|
43
|
+
end
|
44
|
+
|
45
|
+
# Carteira
|
46
|
+
#
|
47
|
+
# @return [String] 2 caracteres numéricos.
|
48
|
+
def carteira=(valor)
|
49
|
+
@carteira = valor.to_s.rjust(1, '0') if valor
|
50
|
+
end
|
51
|
+
|
52
|
+
# Posto
|
53
|
+
#
|
54
|
+
# @return [String] 2 caracteres numéricos.
|
55
|
+
def posto=(valor)
|
56
|
+
@posto = valor.to_s.rjust(2, '0') if valor
|
57
|
+
end
|
58
|
+
|
59
|
+
# Número da conta corrente
|
60
|
+
# @return [String] 5 caracteres numéricos.
|
61
|
+
def conta_corrente=(valor)
|
62
|
+
@conta_corrente = valor.to_s.rjust(5, '0') if valor
|
63
|
+
end
|
64
|
+
|
65
|
+
# Código Beneficiário
|
66
|
+
# @return [String] 5 caracteres numéricos.
|
67
|
+
def convenio=(valor)
|
68
|
+
@convenio = valor.to_s.rjust(5, '0') if valor
|
69
|
+
end
|
70
|
+
|
71
|
+
# Dígito verificador do banco
|
72
|
+
# @return [String] 1 caractere.
|
73
|
+
def banco_dv
|
74
|
+
'X'
|
75
|
+
end
|
76
|
+
|
77
|
+
# Nosso número para exibir no boleto.
|
78
|
+
# O campo Nosso Número deve ser apresentado no formato AA/BXXXXX-D, onde:
|
79
|
+
# AA = Ano atual
|
80
|
+
# B = Byte que pode ser de 2 a 9. Somente será 1 se forem boletos pré-impressos.
|
81
|
+
# XXXXX = número sequencial
|
82
|
+
# D = dígito verificador calculado
|
83
|
+
# @return [String]
|
84
|
+
# @example
|
85
|
+
# boleto.nosso_numero_boleto #=> "14/200022-5"
|
86
|
+
def nosso_numero_boleto
|
87
|
+
"#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..]}-#{nosso_numero_dv}"
|
88
|
+
end
|
89
|
+
|
90
|
+
def nosso_numero_codigo_barra
|
91
|
+
nosso_numero_boleto.gsub(/\D/, '')
|
92
|
+
end
|
93
|
+
|
94
|
+
def nosso_numero_with_byte_idt
|
95
|
+
"#{data_processamento.strftime('%y')}#{byte_idt}#{nosso_numero}"
|
96
|
+
end
|
97
|
+
|
98
|
+
# Número seqüencial utilizado para identificar o boleto.
|
99
|
+
# @return [String] 5 caracteres numéricos.
|
100
|
+
def nosso_numero=(valor)
|
101
|
+
@nosso_numero = valor.to_s.rjust(5, '0') if valor
|
102
|
+
end
|
103
|
+
|
104
|
+
# Dígito verificador do nosso número
|
105
|
+
# @return [Integer] 1 caracteres numéricos.
|
106
|
+
def nosso_numero_dv
|
107
|
+
"#{agencia_posto_conta}#{nosso_numero_with_byte_idt}"
|
108
|
+
.modulo11(mapeamento: mapeamento_para_modulo_11)
|
109
|
+
end
|
110
|
+
|
111
|
+
def agencia_conta_boleto
|
112
|
+
"#{agencia}.#{posto}.#{convenio}"
|
113
|
+
end
|
114
|
+
|
115
|
+
def agencia_posto_conta
|
116
|
+
"#{agencia}#{posto}#{convenio}"
|
117
|
+
end
|
118
|
+
|
119
|
+
# Segunda parte do código de barras.
|
120
|
+
# Posição Tamanho Conteúdo
|
121
|
+
# 20 – 20 01 Código numérico correspondente ao tipo de cobrança: “1” – Com Registro “3 – Sem Registro”. Obs.: O SICREDI não validará este campo.
|
122
|
+
# 21 – 21 01 Código numérico correspondente ao tipo de carteira: “1” - carteira simples
|
123
|
+
# 22 – 30 09 Nosso número
|
124
|
+
# 31 – 34 # 04 # Cooperativa de crédito/agência beneficiária
|
125
|
+
# 35 – 36 # 02 # Posto da cooperativa de crédito/agência beneficiária
|
126
|
+
# 37 – 41 # 05 # Código do beneficiário
|
127
|
+
# 42 – 42 # 01 # Será 1 (um) quando houver valor expresso no campo “valor do documento”
|
128
|
+
# 43 – 43 # 01 # Filler – zeros “0”
|
129
|
+
# 44 – 44 # 01 # DV do campo livre calculado por módulo 11 com aproveitamento total (resto igual a 0 ou 1 DV cai para 0)
|
130
|
+
def codigo_barras_segunda_parte
|
131
|
+
campo_livre = "#{carteira}1#{nosso_numero_codigo_barra}#{agencia_posto_conta}10"
|
132
|
+
campo_livre + campo_livre.modulo11(mapeamento: mapeamento_para_modulo_11).to_s
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
def mapeamento_para_modulo_11
|
138
|
+
{
|
139
|
+
10 => 0,
|
140
|
+
11 => 0
|
141
|
+
}
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Boleto
|
5
|
+
module Template
|
6
|
+
module Base
|
7
|
+
module_function
|
8
|
+
|
9
|
+
def define_template(template)
|
10
|
+
case template
|
11
|
+
when :rghost
|
12
|
+
[Brcobranca::Boleto::Template::Rghost]
|
13
|
+
when :rghost_carne
|
14
|
+
[Brcobranca::Boleto::Template::RghostCarne]
|
15
|
+
when :rghost_bolepix
|
16
|
+
[Brcobranca::Boleto::Template::RghostBolepix]
|
17
|
+
when :rghost2
|
18
|
+
[Brcobranca::Boleto::Template::Rghost2]
|
19
|
+
when :both
|
20
|
+
[Brcobranca::Boleto::Template::Rghost, Brcobranca::Boleto::Template::RghostCarne]
|
21
|
+
else
|
22
|
+
[Brcobranca::Boleto::Template::Rghost]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,308 @@
|
|
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 Rghost
|
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
|
+
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
39
|
+
#
|
40
|
+
# @return [Stream]
|
41
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
42
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
43
|
+
def lote(boletos, options = {})
|
44
|
+
modelo_generico_multipage(boletos, options)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
|
48
|
+
#
|
49
|
+
# @return [Stream]
|
50
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
51
|
+
# @example
|
52
|
+
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
53
|
+
def method_missing(m, *args)
|
54
|
+
method = m.to_s
|
55
|
+
if method.start_with?('to_')
|
56
|
+
modelo_generico(self, (args.first || {}).merge!(formato: method[3..]))
|
57
|
+
else
|
58
|
+
super
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Retorna um stream pronto para gravação em arquivo.
|
65
|
+
#
|
66
|
+
# @return [Stream]
|
67
|
+
# @param [Boleto] Instância de uma classe de boleto.
|
68
|
+
# @param [Hash] options Opção para a criação do boleto.
|
69
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
70
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
71
|
+
def modelo_generico(boleto, options = {})
|
72
|
+
doc = Document.new paper: :A4 # 210x297
|
73
|
+
|
74
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
|
75
|
+
|
76
|
+
raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
77
|
+
|
78
|
+
modelo_generico_template(doc, boleto, template_path)
|
79
|
+
modelo_generico_cabecalho(doc, boleto)
|
80
|
+
modelo_generico_rodape(doc, boleto)
|
81
|
+
|
82
|
+
# Gerando codigo de barra com rghost_barcode
|
83
|
+
if boleto.codigo_barras
|
84
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm",
|
85
|
+
y: "#{@y - 1.67} cm")
|
86
|
+
end
|
87
|
+
|
88
|
+
# Gerando stream
|
89
|
+
formato = options.delete(:formato) || Brcobranca.configuration.formato
|
90
|
+
resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
|
91
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Retorna um stream para multiplos boletos pronto para gravação em arquivo.
|
95
|
+
#
|
96
|
+
# @return [Stream]
|
97
|
+
# @param [Array] Instâncias de classes de boleto.
|
98
|
+
# @param [Hash] options Opção para a criação do boleto.
|
99
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
100
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
101
|
+
def modelo_generico_multipage(boletos, options = {})
|
102
|
+
doc = Document.new paper: :A4 # 210x297
|
103
|
+
|
104
|
+
template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
|
105
|
+
|
106
|
+
raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
|
107
|
+
|
108
|
+
boletos.each_with_index do |boleto, index|
|
109
|
+
modelo_generico_template(doc, boleto, template_path)
|
110
|
+
modelo_generico_cabecalho(doc, boleto)
|
111
|
+
modelo_generico_rodape(doc, boleto)
|
112
|
+
|
113
|
+
# Gerando codigo de barra com rghost_barcode
|
114
|
+
if boleto.codigo_barras
|
115
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm",
|
116
|
+
y: "#{@y - 1.67} cm")
|
117
|
+
end
|
118
|
+
|
119
|
+
# Cria nova página se não for o último boleto
|
120
|
+
doc.next_page unless index == boletos.length - 1
|
121
|
+
end
|
122
|
+
# Gerando stream
|
123
|
+
formato = options.delete(:formato) || Brcobranca.configuration.formato
|
124
|
+
resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
|
125
|
+
doc.render_stream(formato.to_sym, resolution: resolucao)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Define o template a ser usado no boleto
|
129
|
+
def modelo_generico_template(doc, _boleto, template_path)
|
130
|
+
doc.define_template(:template, template_path, x: '0.5 cm', y: '2.7 cm')
|
131
|
+
doc.use_template :template
|
132
|
+
|
133
|
+
doc.define_tags do
|
134
|
+
tag :grande, size: 13
|
135
|
+
tag :maior, size: 15
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def move_more(doc, x, y)
|
140
|
+
@x += x
|
141
|
+
@y += y
|
142
|
+
doc.moveto x: "#{@x} cm", y: "#{@y} cm"
|
143
|
+
end
|
144
|
+
|
145
|
+
# Monta o cabeçalho do layout do boleto
|
146
|
+
def modelo_generico_cabecalho(doc, boleto)
|
147
|
+
# INICIO Primeira parte do BOLETO
|
148
|
+
# Pontos iniciais em x e y
|
149
|
+
@x = 0.50
|
150
|
+
@y = 27.42
|
151
|
+
# LOGOTIPO do BANCO
|
152
|
+
doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
|
153
|
+
# Dados
|
154
|
+
|
155
|
+
move_more(doc, 4.84, 0.02)
|
156
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
|
157
|
+
move_more(doc, 2, 0)
|
158
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
159
|
+
move_more(doc, -6.5, -0.83)
|
160
|
+
|
161
|
+
doc.show boleto.cedente
|
162
|
+
|
163
|
+
move_more(doc, 15.8, 0)
|
164
|
+
doc.show boleto.agencia_conta_boleto
|
165
|
+
|
166
|
+
move_more(doc, -15.8, -0.9)
|
167
|
+
doc.show boleto.cedente_endereco
|
168
|
+
|
169
|
+
move_more(doc, 15.8, 0)
|
170
|
+
doc.show boleto.nosso_numero_boleto
|
171
|
+
|
172
|
+
move_more(doc, -15.8, -0.8)
|
173
|
+
doc.show boleto.documento_numero
|
174
|
+
|
175
|
+
move_more(doc, 3.5, 0)
|
176
|
+
doc.show boleto.especie
|
177
|
+
|
178
|
+
move_more(doc, 1.5, 0)
|
179
|
+
doc.show boleto.quantidade
|
180
|
+
|
181
|
+
move_more(doc, 2, 0)
|
182
|
+
doc.show boleto.documento_cedente.formata_documento.to_s
|
183
|
+
|
184
|
+
move_more(doc, 3.8, 0)
|
185
|
+
doc.show boleto.data_vencimento.to_s_br
|
186
|
+
|
187
|
+
move_more(doc, 5, 0)
|
188
|
+
doc.show boleto.valor_documento.to_currency
|
189
|
+
|
190
|
+
move_more(doc, -15, -1.3)
|
191
|
+
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
|
192
|
+
|
193
|
+
move_more(doc, 0, -0.3)
|
194
|
+
doc.show boleto.sacado_endereco.to_s
|
195
|
+
return unless boleto.demonstrativo
|
196
|
+
|
197
|
+
doc.text_area boleto.demonstrativo, width: '18.5 cm', text_align: :left, x: "#{@x - 0.8} cm",
|
198
|
+
y: "#{@y - 0.9} cm", row_height: '0.4 cm'
|
199
|
+
|
200
|
+
# FIM Primeira parte do BOLETO
|
201
|
+
end
|
202
|
+
|
203
|
+
# Monta o corpo e rodapé do layout do boleto
|
204
|
+
def modelo_generico_rodape(doc, boleto)
|
205
|
+
# INICIO Segunda parte do BOLETO BB
|
206
|
+
# Pontos iniciais em x e y
|
207
|
+
@x = 0.50
|
208
|
+
@y = 12.22
|
209
|
+
# LOGOTIPO do BANCO
|
210
|
+
doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
|
211
|
+
|
212
|
+
move_more(doc, 4.84, 0.01)
|
213
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
|
214
|
+
|
215
|
+
move_more(doc, 2, 0)
|
216
|
+
doc.show boleto.codigo_barras.linha_digitavel, tag: :grande
|
217
|
+
|
218
|
+
move_more(doc, -6.5, -0.9)
|
219
|
+
doc.show boleto.local_pagamento
|
220
|
+
|
221
|
+
move_more(doc, 15.8, 0)
|
222
|
+
doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
|
223
|
+
|
224
|
+
move_more(doc, -15.8, -0.8)
|
225
|
+
if boleto.cedente_endereco
|
226
|
+
doc.show boleto.cedente_endereco
|
227
|
+
move_more(doc, 1.2, 0.3)
|
228
|
+
doc.show boleto.cedente
|
229
|
+
move_more(doc, -1.2, -0.3)
|
230
|
+
else
|
231
|
+
doc.show boleto.cedente
|
232
|
+
end
|
233
|
+
|
234
|
+
move_more(doc, 15.8, 0)
|
235
|
+
doc.show boleto.agencia_conta_boleto
|
236
|
+
|
237
|
+
move_more(doc, -15.8, -0.9)
|
238
|
+
doc.show boleto.data_documento.to_s_br if boleto.data_documento
|
239
|
+
|
240
|
+
move_more(doc, 3.5, 0)
|
241
|
+
doc.show boleto.documento_numero
|
242
|
+
|
243
|
+
move_more(doc, 5.8, 0)
|
244
|
+
doc.show boleto.especie_documento
|
245
|
+
|
246
|
+
move_more(doc, 1.7, 0)
|
247
|
+
doc.show boleto.aceite
|
248
|
+
|
249
|
+
move_more(doc, 1.3, 0)
|
250
|
+
|
251
|
+
doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
|
252
|
+
|
253
|
+
move_more(doc, 3.5, 0)
|
254
|
+
doc.show boleto.nosso_numero_boleto
|
255
|
+
|
256
|
+
move_more(doc, -12.1, -0.8)
|
257
|
+
if boleto.variacao
|
258
|
+
doc.show "#{boleto.carteira}-#{boleto.variacao}"
|
259
|
+
else
|
260
|
+
doc.show boleto.carteira
|
261
|
+
end
|
262
|
+
|
263
|
+
move_more(doc, 2, 0)
|
264
|
+
doc.show boleto.especie
|
265
|
+
|
266
|
+
move_more(doc, 10.1, 0)
|
267
|
+
doc.show boleto.valor_documento.to_currency
|
268
|
+
|
269
|
+
if boleto.instrucoes
|
270
|
+
doc.text_area boleto.instrucoes, width: '14 cm', text_align: :left, x: "#{@x -= 15.8} cm", y: "#{@y -= 0.9} cm",
|
271
|
+
row_height: '0.4 cm'
|
272
|
+
move_more(doc, 0, -2)
|
273
|
+
else
|
274
|
+
move_more(doc, -15.8, -0.9)
|
275
|
+
doc.show boleto.instrucao1
|
276
|
+
|
277
|
+
move_more(doc, 0, -0.4)
|
278
|
+
doc.show boleto.instrucao2
|
279
|
+
|
280
|
+
move_more(doc, 0, -0.4)
|
281
|
+
doc.show boleto.instrucao3
|
282
|
+
|
283
|
+
move_more(doc, 0, -0.4)
|
284
|
+
doc.show boleto.instrucao4
|
285
|
+
|
286
|
+
move_more(doc, 0, -0.4)
|
287
|
+
doc.show boleto.instrucao5
|
288
|
+
|
289
|
+
move_more(doc, 0, -0.4)
|
290
|
+
doc.show boleto.instrucao6
|
291
|
+
end
|
292
|
+
|
293
|
+
move_more(doc, 0.5, -1.9)
|
294
|
+
if boleto.sacado && boleto.sacado_documento
|
295
|
+
doc.show "#{boleto.sacado} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}"
|
296
|
+
end
|
297
|
+
|
298
|
+
move_more(doc, 0, -0.4)
|
299
|
+
doc.show boleto.sacado_endereco.to_s
|
300
|
+
|
301
|
+
move_more(doc, 1.2, -0.93)
|
302
|
+
doc.show "#{boleto.avalista} - #{boleto.avalista_documento}" if boleto.avalista && boleto.avalista_documento
|
303
|
+
# FIM Segunda parte do BOLETO
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|