brcobranca 10.0.0 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -165
  3. data/README.md +25 -19
  4. data/Rakefile +0 -5
  5. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  6. data/lib/brcobranca/boleto/ailos.rb +3 -2
  7. data/lib/brcobranca/boleto/banco_brasil.rb +5 -1
  8. data/lib/brcobranca/boleto/base.rb +3 -1
  9. data/lib/brcobranca/boleto/citibank.rb +1 -1
  10. data/lib/brcobranca/boleto/sicredi.rb +1 -1
  11. data/lib/brcobranca/boleto/template/base.rb +4 -0
  12. data/lib/brcobranca/boleto/template/rghost.rb +16 -11
  13. data/lib/brcobranca/boleto/template/rghost2.rb +263 -0
  14. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +279 -0
  15. data/lib/brcobranca/boleto/template/rghost_carne.rb +8 -8
  16. data/lib/brcobranca/formatacao.rb +12 -12
  17. data/lib/brcobranca/remessa/base.rb +1 -2
  18. data/lib/brcobranca/remessa/cnab240/ailos.rb +4 -2
  19. data/lib/brcobranca/remessa/cnab240/base.rb +1 -1
  20. data/lib/brcobranca/remessa/cnab240/santander.rb +224 -0
  21. data/lib/brcobranca/remessa/cnab240/sicoob.rb +1 -1
  22. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +1 -1
  23. data/lib/brcobranca/remessa/cnab240/sicredi.rb +1 -1
  24. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +1 -1
  25. data/lib/brcobranca/remessa/cnab400/banrisul.rb +1 -1
  26. data/lib/brcobranca/remessa/cnab400/santander.rb +1 -1
  27. data/lib/brcobranca/remessa/pagamento.rb +15 -15
  28. data/lib/brcobranca/retorno/cnab240/ailos.rb +2 -2
  29. data/lib/brcobranca/retorno/cnab240/base.rb +1 -1
  30. data/lib/brcobranca/retorno/cnab240/santander.rb +2 -2
  31. data/lib/brcobranca/retorno/cnab240/sicoob.rb +2 -2
  32. data/lib/brcobranca/retorno/cnab240/sicredi.rb +2 -2
  33. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +4 -1
  34. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +1 -1
  35. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +1 -1
  36. data/lib/brcobranca/retorno/cnab400/banrisul.rb +1 -1
  37. data/lib/brcobranca/retorno/cnab400/base.rb +1 -1
  38. data/lib/brcobranca/retorno/cnab400/bradesco.rb +1 -1
  39. data/lib/brcobranca/retorno/cnab400/credisis.rb +1 -1
  40. data/lib/brcobranca/retorno/cnab400/itau.rb +1 -1
  41. data/lib/brcobranca/retorno/cnab400/santander.rb +1 -1
  42. data/lib/brcobranca/retorno/cnab400/unicred.rb +1 -1
  43. data/lib/brcobranca/retorno/retorno_cnab240.rb +2 -2
  44. data/lib/brcobranca/retorno/retorno_cnab400.rb +1 -1
  45. data/lib/brcobranca/version.rb +1 -1
  46. data/lib/brcobranca.rb +4 -0
  47. metadata +16 -147
  48. data/HISTORY.md +0 -71
  49. data/spec/brcobranca/base_spec.rb +0 -179
  50. data/spec/brcobranca/boleto/ailos_spec.rb +0 -148
  51. data/spec/brcobranca/boleto/banco_brasil_spec.rb +0 -336
  52. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +0 -153
  53. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +0 -160
  54. data/spec/brcobranca/boleto/banestes_spec.rb +0 -193
  55. data/spec/brcobranca/boleto/banrisul_spec.rb +0 -180
  56. data/spec/brcobranca/boleto/bradesco_spec.rb +0 -214
  57. data/spec/brcobranca/boleto/caixa_spec.rb +0 -160
  58. data/spec/brcobranca/boleto/citibank_spec.rb +0 -195
  59. data/spec/brcobranca/boleto/credisis_spec.rb +0 -160
  60. data/spec/brcobranca/boleto/hsbc_spec.rb +0 -171
  61. data/spec/brcobranca/boleto/itau_spec.rb +0 -261
  62. data/spec/brcobranca/boleto/safra_spec.rb +0 -171
  63. data/spec/brcobranca/boleto/santander_spec.rb +0 -142
  64. data/spec/brcobranca/boleto/sicoob_spec.rb +0 -192
  65. data/spec/brcobranca/boleto/sicredi_spec.rb +0 -194
  66. data/spec/brcobranca/boleto/unicred_spec.rb +0 -139
  67. data/spec/brcobranca/boletos_em_lote_spec.rb +0 -38
  68. data/spec/brcobranca/calculo_data_spec.rb +0 -33
  69. data/spec/brcobranca/calculo_spec.rb +0 -187
  70. data/spec/brcobranca/currency_spec.rb +0 -79
  71. data/spec/brcobranca/formatacao_spec.rb +0 -46
  72. data/spec/brcobranca/formatacao_string_spec.rb +0 -31
  73. data/spec/brcobranca/limpeza_spec.rb +0 -10
  74. data/spec/brcobranca/remessa/base_spec.rb +0 -66
  75. data/spec/brcobranca/remessa/cnab240/ailos_spec.rb +0 -165
  76. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +0 -222
  77. data/spec/brcobranca/remessa/cnab240/base_spec.rb +0 -114
  78. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +0 -165
  79. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +0 -272
  80. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +0 -200
  81. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +0 -203
  82. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +0 -195
  83. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +0 -190
  84. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +0 -188
  85. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +0 -192
  86. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +0 -192
  87. data/spec/brcobranca/remessa/cnab400/base_spec.rb +0 -68
  88. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +0 -203
  89. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +0 -128
  90. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +0 -190
  91. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +0 -192
  92. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +0 -154
  93. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +0 -217
  94. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +0 -186
  95. data/spec/brcobranca/remessa/pagamento_spec.rb +0 -228
  96. data/spec/brcobranca/retorno/cnab240/base_spec.rb +0 -24
  97. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +0 -52
  98. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +0 -52
  99. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +0 -52
  100. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +0 -33
  101. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +0 -37
  102. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +0 -40
  103. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +0 -42
  104. data/spec/brcobranca/retorno/cnab400/base_spec.rb +0 -57
  105. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +0 -59
  106. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +0 -26
  107. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +0 -60
  108. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +0 -40
  109. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +0 -38
  110. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +0 -69
  111. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +0 -58
  112. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +0 -53
  113. data/spec/brcobranca/rghost_spec.rb +0 -29
  114. data/spec/brcobranca/util/empresa_spec.rb +0 -35
  115. data/spec/brcobranca_spec.rb +0 -33
@@ -5,10 +5,11 @@ module Brcobranca
5
5
  # Ailos
6
6
  class Ailos < Base
7
7
  validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
8
- validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
8
+ validates_length_of :conta_corrente,
9
+ maximum: 8,
10
+ message: 'deve ser menor ou igual a 8 dígitos.'
9
11
  validates_length_of :carteira, is: 2, message: 'deve ser menor ou igual a 2 dígitos.'
10
12
  validates_length_of :convenio, is: 6, message: 'deve ser menor ou igual a 6 dígitos.'
11
-
12
13
  validates_length_of :nosso_numero, maximum: 9, message: 'deve ser menor ou igual a 9 dígitos.'
13
14
 
14
15
  # Nova instancia do Ailos
@@ -29,7 +29,11 @@ module Brcobranca
29
29
  # Nova instancia do BancoBrasil
30
30
  # @param (see Brcobranca::Boleto::Base#initialize)
31
31
  def initialize(campos = {})
32
- campos = { carteira: '18', codigo_servico: false }.merge!(campos)
32
+ campos = {
33
+ carteira: '18',
34
+ codigo_servico: false,
35
+ local_pagamento: 'PAGÁVEL EM QUALQUER BANCO.'
36
+ }.merge!(campos)
33
37
  super(campos)
34
38
  end
35
39
 
@@ -89,6 +89,8 @@ module Brcobranca
89
89
  attr_accessor :avalista_documento
90
90
  # <b>OPCIONAL</b>: Endereço do beneficiário
91
91
  attr_accessor :cedente_endereco
92
+ # <b>OPCIONAL</b>: EMV para gerar QRCode para pagamento via PIX
93
+ attr_accessor :emv
92
94
 
93
95
  # Validações
94
96
  validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :nosso_numero,
@@ -113,7 +115,7 @@ module Brcobranca
113
115
 
114
116
  campos = padrao.merge!(campos)
115
117
  campos.each do |campo, valor|
116
- send "#{campo}=", valor
118
+ send :"#{campo}=", valor
117
119
  end
118
120
 
119
121
  yield self if block_given?
@@ -90,7 +90,7 @@ module Brcobranca
90
90
  #
91
91
  # @return [String]
92
92
  def codigo_barras_segunda_parte
93
- "#{carteira}#{portfolio}#{convenio[1..-1]}#{nosso_numero}#{nosso_numero_dv}"
93
+ "#{carteira}#{portfolio}#{convenio[1..]}#{nosso_numero}#{nosso_numero_dv}"
94
94
  end
95
95
  end
96
96
  end
@@ -84,7 +84,7 @@ module Brcobranca
84
84
  # @example
85
85
  # boleto.nosso_numero_boleto #=> "14/200022-5"
86
86
  def nosso_numero_boleto
87
- "#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
87
+ "#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..]}-#{nosso_numero_dv}"
88
88
  end
89
89
 
90
90
  def nosso_numero_codigo_barra
@@ -12,6 +12,10 @@ module Brcobranca
12
12
  [Brcobranca::Boleto::Template::Rghost]
13
13
  when :rghost_carne
14
14
  [Brcobranca::Boleto::Template::RghostCarne]
15
+ when :rghost_bolepix
16
+ [Brcobranca::Boleto::Template::RghostBolepix]
17
+ when :rghost2
18
+ [Brcobranca::Boleto::Template::Rghost2]
15
19
  when :both
16
20
  [Brcobranca::Boleto::Template::Rghost, Brcobranca::Boleto::Template::RghostCarne]
17
21
  else
@@ -53,7 +53,7 @@ module Brcobranca
53
53
  def method_missing(m, *args)
54
54
  method = m.to_s
55
55
  if method.start_with?('to_')
56
- modelo_generico(self, (args.first || {}).merge!(formato: method[3..-1]))
56
+ modelo_generico(self, (args.first || {}).merge!(formato: method[3..]))
57
57
  else
58
58
  super
59
59
  end
@@ -81,12 +81,13 @@ module Brcobranca
81
81
 
82
82
  # Gerando codigo de barra com rghost_barcode
83
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", y: "#{@y - 1.67} cm")
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")
85
86
  end
86
87
 
87
88
  # Gerando stream
88
- formato = (options.delete(:formato) || Brcobranca.configuration.formato)
89
- resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
89
+ formato = options.delete(:formato) || Brcobranca.configuration.formato
90
+ resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
90
91
  doc.render_stream(formato.to_sym, resolution: resolucao)
91
92
  end
92
93
 
@@ -111,15 +112,16 @@ module Brcobranca
111
112
 
112
113
  # Gerando codigo de barra com rghost_barcode
113
114
  if boleto.codigo_barras
114
- doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm", y: "#{@y - 1.67} cm")
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")
115
117
  end
116
118
 
117
119
  # Cria nova página se não for o último boleto
118
120
  doc.next_page unless index == boletos.length - 1
119
121
  end
120
122
  # Gerando stream
121
- formato = (options.delete(:formato) || Brcobranca.configuration.formato)
122
- resolucao = (options.delete(:resolucao) || Brcobranca.configuration.resolucao)
123
+ formato = options.delete(:formato) || Brcobranca.configuration.formato
124
+ resolucao = options.delete(:resolucao) || Brcobranca.configuration.resolucao
123
125
  doc.render_stream(formato.to_sym, resolution: resolucao)
124
126
  end
125
127
 
@@ -190,9 +192,11 @@ module Brcobranca
190
192
 
191
193
  move_more(doc, 0, -0.3)
192
194
  doc.show boleto.sacado_endereco.to_s
193
- if boleto.demonstrativo
194
- doc.text_area boleto.demonstrativo, width: '18.5 cm', text_align: :left, x: "#{@x - 0.8} cm", y: "#{@y - 0.9} cm", row_height: '0.4 cm'
195
- end
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
+
196
200
  # FIM Primeira parte do BOLETO
197
201
  end
198
202
 
@@ -263,7 +267,8 @@ module Brcobranca
263
267
  doc.show boleto.valor_documento.to_currency
264
268
 
265
269
  if boleto.instrucoes
266
- doc.text_area boleto.instrucoes, width: '14 cm', text_align: :left, x: "#{@x -= 15.8} cm", y: "#{@y -= 0.9} cm", row_height: '0.4 cm'
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'
267
272
  move_more(doc, 0, -2)
268
273
  else
269
274
  move_more(doc, -15.8, -0.9)
@@ -0,0 +1,263 @@
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
+ doc.moveto x: 4.28, y: 26.87
130
+ doc.show truncar(boleto.cedente, 90), tag: :menor
131
+ doc.moveto x: 4.28, y: 26.33
132
+ doc.show truncar(boleto.sacado, 90), tag: :menor
133
+ doc.moveto x: 4.28, y: 25.76
134
+ doc.show boleto.documento_numero, tag: :menor
135
+ doc.moveto x: 4.28, y: 25.20
136
+ doc.show boleto.nosso_numero_boleto, tag: :menor
137
+ doc.moveto x: 4.28, y: 24.63
138
+ doc.show boleto.data_vencimento.to_s_br, tag: :menor
139
+ doc.moveto x: 4.28, y: 24.070
140
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :menor
141
+ doc.moveto x: 4.28, y: 23.49
142
+ doc.show boleto.agencia_conta_boleto, tag: :menor
143
+ doc.moveto x: 4.28, y: 22.95
144
+ doc.show boleto.valor_documento.to_currency, tag: :menor
145
+ end
146
+
147
+ # Monta Recibo do Pagador boleto
148
+ def modelo_generico_cabecalho(doc, boleto)
149
+ monta_logotipo(doc, boleto, 0.782, 19.717, 0.85)
150
+ doc.moveto x: 4.813, y: 19.801
151
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :medio
152
+ doc.moveto x: 0.823, y: 20.942
153
+ doc.show boleto.codigo_barras.linha_digitavel, tag: :menor_bold
154
+ doc.moveto x: 1.121, y: 18.924
155
+ doc.show truncar(boleto.cedente, 47), tag: :menor
156
+ doc.moveto x: 9.9, y: 18.924
157
+ doc.show boleto.agencia_conta_boleto.tr(' ', ''), tag: :menor
158
+ doc.moveto x: 16.423, y: 18.924
159
+ doc.show boleto.nosso_numero_boleto, tag: :menor
160
+ doc.moveto x: 1.121, y: 17.984
161
+ doc.show boleto.documento_numero, tag: :menor
162
+ doc.moveto x: 14.139, y: 18.924
163
+ doc.show boleto.quantidade, tag: :menor
164
+ doc.moveto x: 7.0, y: 17.984
165
+ doc.show boleto.documento_cedente.formata_documento.to_s, tag: :menor
166
+ doc.moveto x: 10.602, y: 17.984
167
+ doc.show boleto.data_vencimento.to_s_br, tag: :menor
168
+ doc.text_area "<menor>#{boleto.valor_documento.to_currency}</menor>", width: 5.78, text_align: :right,
169
+ x: 14.12, y: 17.984, tag: :menor
170
+ doc.moveto x: 1.109, y: 17.089
171
+ doc.show truncar(boleto.sacado, 109), tag: :menor
172
+ end
173
+
174
+ # Monta o corpo e rodapé do layout do boleto
175
+ def modelo_generico_rodape(doc, boleto)
176
+ monta_logotipo(doc, boleto, 0.782, 13.9, 0.85)
177
+ doc.text_area "<menor_bold>#{boleto.data_vencimento&.to_s_br}</menor_bold>",
178
+ width: 5.786, text_align: :center, x: 14.47271, y: 13.11587
179
+ doc.text_area "<menor>#{boleto.agencia_conta_boleto}</menor>", width: 5.786, text_align: :center, x: 14.47271,
180
+ y: 12.26921
181
+ doc.text_area "<menor>#{boleto.nosso_numero_boleto}</menor>", width: 5.786, text_align: :center, x: 14.47271,
182
+ y: 11.42254
183
+ doc.text_area "<menor_bold>#{boleto.valor_documento.to_currency}</menor_bold>", width: 5.5, text_align: :right,
184
+ x: 14.47271, y: 10.56926
185
+ doc.moveto x: 4.813, y: 13.977
186
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :medio
187
+ doc.moveto x: 6.815, y: 13.990
188
+ doc.show boleto.codigo_barras.linha_digitavel, tag: :maior
189
+ doc.moveto x: 1.121, y: 13.2
190
+ doc.show boleto.local_pagamento, tag: :menor
191
+ doc.moveto x: 1.121, y: 12.295
192
+ doc.show truncar(boleto.cedente, 54), tag: :menor
193
+ doc.moveto x: 11.307, y: 12.295
194
+ doc.show boleto.documento_cedente.formata_documento.to_s, tag: :menor
195
+ doc.moveto x: 1.112, y: 11.42
196
+ doc.show boleto.data_documento&.to_s_br, tag: :menor
197
+ doc.moveto x: 4.268, y: 11.42
198
+ doc.show boleto.documento_numero, tag: :menor
199
+ doc.moveto x: 7.471, y: 11.42
200
+ doc.show boleto.especie_documento, tag: :menor
201
+ doc.moveto x: 9.588, y: 11.42
202
+ doc.show boleto.aceite, tag: :menor
203
+ doc.moveto x: 11.660, y: 11.42
204
+ doc.show boleto.data_processamento&.to_s_br, tag: :menor
205
+ doc.moveto x: 4.62056, y: 10.56058
206
+ if boleto.variacao
207
+ doc.show "#{boleto.carteira}-#{boleto.variacao}"
208
+ else
209
+ doc.show boleto.carteira
210
+ end
211
+ doc.moveto x: 7.26640, y: 10.56058
212
+ doc.show boleto.especie
213
+ monta_instrucoes(doc, boleto, 0.8, 9.8)
214
+ pagador = "<menor>#{truncar(boleto.sacado, 75)} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}</menor>"
215
+ pagador += "\n<menor>#{boleto.sacado_endereco}</menor>" if boleto.sacado_endereco
216
+ doc.text_area pagador, width: 18, text_align: :left, x: 2.04611, y: 5.8, row_height: '0.4 cm'
217
+ if boleto.avalista && boleto.avalista_documento
218
+ avalista = "#{truncar(boleto.avalista,
219
+ 46)} - CPF/CNPJ: #{boleto.avalista_documento.formata_documento}"
220
+ end
221
+ if avalista
222
+ doc.text_area "<menor2>#{avalista}</menor2>", width: 12.312, text_align: :left, x: 2.04611, y: 4.3,
223
+ row_height: '0.4 cm'
224
+ end
225
+ # Gerando codigo de barra com rghost_barcode
226
+ return unless boleto.codigo_barras
227
+
228
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: 1.06, y: 2.12)
229
+
230
+ # FIM Segunda parte do BOLETO
231
+ end
232
+
233
+ def truncar(string, limite)
234
+ string = "#{string[0...limite].upcase}..." if string.length > limite
235
+ string
236
+ end
237
+
238
+ def monta_instrucoes(doc, boleto, x, y)
239
+ lista_instrucoes = [
240
+ boleto.instrucoes,
241
+ boleto.instrucao1,
242
+ boleto.instrucao2,
243
+ boleto.instrucao3,
244
+ boleto.instrucao4,
245
+ boleto.instrucao5,
246
+ boleto.instrucao6
247
+ ].reject(&:blank?)
248
+ lista_instrucoes = lista_instrucoes.map { |i| "<menor>#{i}</menor>" }
249
+ texto_instrucoes = lista_instrucoes.join("\n")
250
+ doc.text_area texto_instrucoes, width: 13.547, text_align: :left, x: x, y: y, row_height: '0.4 cm'
251
+ end
252
+
253
+ def monta_logotipo(doc, boleto, x, y, scale)
254
+ doc.graphic do |g|
255
+ g.scale(scale, scale)
256
+ fator = 1 / scale
257
+ g.image boleto.logotipo, x: (x * fator), y: (y * fator)
258
+ end
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end