bbrcobranca 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +12 -0
  5. data/Rakefile +13 -0
  6. data/lib/bbrcobranca.rb +196 -0
  7. data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  8. data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  9. data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  10. data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  11. data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
  12. data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  13. data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
  14. data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  15. data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
  16. data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  17. data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
  18. data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  19. data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
  20. data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  21. data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
  22. data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
  23. data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
  24. data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
  25. data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
  26. data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  27. data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
  28. data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
  29. data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
  30. data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
  31. data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
  32. data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  33. data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
  34. data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  35. data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
  36. data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
  37. data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  38. data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
  39. data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
  40. data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
  41. data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
  42. data/lib/bbrcobranca/boleto/banestes.rb +85 -0
  43. data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
  44. data/lib/bbrcobranca/boleto/base.rb +256 -0
  45. data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
  46. data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
  47. data/lib/bbrcobranca/boleto/caixa.rb +121 -0
  48. data/lib/bbrcobranca/boleto/cecred.rb +86 -0
  49. data/lib/bbrcobranca/boleto/credisis.rb +116 -0
  50. data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
  51. data/lib/bbrcobranca/boleto/itau.rb +138 -0
  52. data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
  53. data/lib/bbrcobranca/boleto/santander.rb +84 -0
  54. data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
  55. data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
  56. data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
  57. data/lib/bbrcobranca/boleto/template/base.rb +25 -0
  58. data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
  59. data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
  60. data/lib/bbrcobranca/boleto/unicred.rb +141 -0
  61. data/lib/bbrcobranca/calculo.rb +115 -0
  62. data/lib/bbrcobranca/calculo_data.rb +62 -0
  63. data/lib/bbrcobranca/currency.rb +69 -0
  64. data/lib/bbrcobranca/formatacao.rb +103 -0
  65. data/lib/bbrcobranca/formatacao_string.rb +35 -0
  66. data/lib/bbrcobranca/limpeza.rb +20 -0
  67. data/lib/bbrcobranca/remessa/base.rb +76 -0
  68. data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
  69. data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
  70. data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  71. data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
  72. data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
  73. data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
  74. data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  75. data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
  76. data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
  77. data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  78. data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  79. data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
  80. data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
  81. data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
  82. data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
  83. data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
  84. data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
  85. data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
  86. data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
  87. data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
  88. data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
  89. data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
  90. data/lib/bbrcobranca/retorno/base.rb +49 -0
  91. data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
  92. data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
  93. data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
  94. data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
  95. data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
  96. data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
  97. data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  98. data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  99. data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  100. data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
  101. data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
  102. data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
  103. data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
  104. data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
  105. data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
  106. data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
  107. data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
  108. data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
  109. data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
  110. data/lib/bbrcobranca/util/date.rb +20 -0
  111. data/lib/bbrcobranca/util/empresa.rb +28 -0
  112. data/lib/bbrcobranca/util/errors.rb +76 -0
  113. data/lib/bbrcobranca/validations.rb +232 -0
  114. data/lib/bbrcobranca/version.rb +6 -0
  115. data/spec/arquivos/CBR64310.RET +28 -0
  116. data/spec/arquivos/CNAB240.RET +74 -0
  117. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  118. data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
  119. data/spec/arquivos/CNAB240SICOOB.RET +10 -0
  120. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  121. data/spec/arquivos/CNAB400.RET +54 -0
  122. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  123. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  124. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  125. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  126. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  127. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  128. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  129. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  130. data/spec/bbrcobranca_spec.rb +34 -0
  131. data/spec/brcobranca/base_spec.rb +170 -0
  132. data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
  133. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
  134. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
  135. data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
  136. data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
  137. data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
  138. data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
  139. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  140. data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
  141. data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
  142. data/spec/brcobranca/boleto/itau_spec.rb +262 -0
  143. data/spec/brcobranca/boleto/santander_spec.rb +143 -0
  144. data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
  145. data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
  146. data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
  147. data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
  148. data/spec/brcobranca/calculo_data_spec.rb +33 -0
  149. data/spec/brcobranca/calculo_spec.rb +185 -0
  150. data/spec/brcobranca/currency_spec.rb +79 -0
  151. data/spec/brcobranca/formatacao_spec.rb +46 -0
  152. data/spec/brcobranca/formatacao_string_spec.rb +24 -0
  153. data/spec/brcobranca/limpeza_spec.rb +10 -0
  154. data/spec/brcobranca/remessa/base_spec.rb +67 -0
  155. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
  156. data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
  157. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
  158. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  159. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  160. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
  161. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  162. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  163. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
  164. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  165. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
  166. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  167. data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
  168. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
  169. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
  170. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  171. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
  172. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
  173. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
  174. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  175. data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
  176. data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
  177. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  178. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
  179. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
  180. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  181. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  182. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  183. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  184. data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
  185. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
  186. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  187. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
  188. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  189. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  190. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
  191. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
  192. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
  193. data/spec/brcobranca/rghost_spec.rb +29 -0
  194. data/spec/brcobranca/util/empresa_spec.rb +36 -0
  195. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
  196. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  197. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
  198. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
  199. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
  200. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  201. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
  202. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
  203. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  204. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
  205. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  206. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
  207. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
  208. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
  209. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  210. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  211. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  212. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  213. data/spec/spec.opts +8 -0
  214. data/spec/spec_helper.rb +38 -0
  215. data/spec/support/remessa_helpers.rb +13 -0
  216. data/spec/support/shared_examples/busca_logotipo.rb +15 -0
  217. data/spec/support/shared_examples/cnab240.rb +259 -0
  218. data/spec/support/shared_examples/cnab400.rb +180 -0
  219. data/spec/support/shared_examples/formatos_validos.rb +36 -0
  220. metadata +422 -0
@@ -0,0 +1,315 @@
1
+ # -*- encoding: utf-8 -*-
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 Bbrcobranca
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] = Bbrcobranca.configuration.external_encoding
27
+
28
+ # Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
29
+ #
30
+ # @return [Stream]
31
+ # @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
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!(formato: formato))
35
+ end
36
+
37
+ # Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
38
+ #
39
+ # @return [Stream]
40
+ # @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
41
+ # @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
42
+ def lote(boletos, options = {})
43
+ modelo_generico_multipage(boletos, options)
44
+ end
45
+
46
+ # Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
47
+ #
48
+ # @return [Stream]
49
+ # @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
50
+ # @example
51
+ # @boleto.to_pdf #=> boleto gerado no formato pdf
52
+ def method_missing(m, *args)
53
+ method = m.to_s
54
+ if method.start_with?('to_')
55
+ modelo_generico(self, (args.first || {}).merge!(formato: method[3..-1]))
56
+ else
57
+ super
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ # Retorna um stream pronto para gravação em arquivo.
64
+ #
65
+ # @return [Stream]
66
+ # @param [Boleto] Instância de uma classe de boleto.
67
+ # @param [Hash] options Opção para a criação do boleto.
68
+ # @option options [Symbol] :resolucao Resolução em pixels.
69
+ # @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
70
+ def modelo_generico(boleto, options = {})
71
+ doc = Document.new paper: :A4 # 210x297
72
+
73
+ template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
74
+
75
+ raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
76
+
77
+ modelo_generico_template(doc, boleto, template_path)
78
+ modelo_generico_cabecalho(doc, boleto)
79
+ modelo_generico_rodape(doc, boleto)
80
+
81
+ # Gerando codigo de barra com rghost_barcode
82
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm", y: "#{@y - 1.67} cm") if boleto.codigo_barras
83
+
84
+ # Gerando stream
85
+ formato = (options.delete(:formato) || Bbrcobranca.configuration.formato)
86
+ resolucao = (options.delete(:resolucao) || Bbrcobranca.configuration.resolucao)
87
+ doc.render_stream(formato.to_sym, resolution: resolucao)
88
+ end
89
+
90
+ # Retorna um stream para multiplos boletos pronto para gravação em arquivo.
91
+ #
92
+ # @return [Stream]
93
+ # @param [Array] Instâncias de classes de boleto.
94
+ # @param [Hash] options Opção para a criação do boleto.
95
+ # @option options [Symbol] :resolucao Resolução em pixels.
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 paper: :A4 # 210x297
99
+
100
+ template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_generico.eps')
101
+
102
+ raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
103
+
104
+ boletos.each_with_index do |boleto, index|
105
+ modelo_generico_template(doc, boleto, template_path)
106
+ modelo_generico_cabecalho(doc, boleto)
107
+ modelo_generico_rodape(doc, boleto)
108
+
109
+ # Gerando codigo de barra com rghost_barcode
110
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.3 cm', x: "#{@x - 1.7} cm", y: "#{@y - 1.67} cm") if boleto.codigo_barras
111
+
112
+ # Cria nova página se não for o último boleto
113
+ doc.next_page unless index == boletos.length - 1
114
+ end
115
+ # Gerando stream
116
+ formato = (options.delete(:formato) || Bbrcobranca.configuration.formato)
117
+ resolucao = (options.delete(:resolucao) || Bbrcobranca.configuration.resolucao)
118
+ doc.render_stream(formato.to_sym, resolution: resolucao)
119
+ end
120
+
121
+ # Define o template a ser usado no boleto
122
+ def modelo_generico_template(doc, _boleto, template_path)
123
+ doc.define_template(:template, template_path, x: '0.5 cm', y: '2.7 cm')
124
+ doc.use_template :template
125
+
126
+ doc.define_tags do
127
+ tag :grande, size: 13
128
+ tag :maior, size: 15
129
+ end
130
+ end
131
+
132
+ def move_more(doc, x, y)
133
+ @x += x
134
+ @y += y
135
+ doc.moveto x: "#{@x} cm", y: "#{@y} cm"
136
+ end
137
+ # Monta o cabeçalho do layout do boleto
138
+ def modelo_generico_cabecalho(doc, boleto)
139
+ # INICIO Primeira parte do BOLETO
140
+ # Pontos iniciais em x e y
141
+ @x = 0.50
142
+ @y = 27.42
143
+
144
+ doc.image boleto.logotipo_cabecalho, x: 0.5, y: 28.6, zoom: 30 if boleto.logotipo_cabecalho
145
+
146
+ if boleto.linha_cabecalho1
147
+ doc.moveto x: "2.7 cm", y: "29.1 cm"
148
+ doc.text boleto.linha_cabecalho1
149
+ end
150
+
151
+ if boleto.linha_cabecalho2
152
+ doc.moveto x: "2.7 cm", y: "28.7 cm"
153
+ doc.text boleto.linha_cabecalho2
154
+ end
155
+
156
+ # LOGOTIPO do BANCO
157
+ doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
158
+ # Dados
159
+
160
+ move_more(doc, 4.84, 0.02)
161
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
162
+ move_more(doc, 2, 0)
163
+ doc.show exibe_linha_digitavel_para(boleto), tag: :grande
164
+ move_more(doc, -6.5, -0.83)
165
+
166
+ doc.show boleto.cedente
167
+
168
+ move_more(doc, 15.8, 0)
169
+ doc.show boleto.agencia_conta_boleto
170
+
171
+ move_more(doc, -15.8, -0.9)
172
+ doc.show boleto.cedente_endereco
173
+
174
+ move_more(doc, 15.8, 0)
175
+ doc.show boleto.nosso_numero_boleto
176
+
177
+ move_more(doc, -15.8, -0.8)
178
+ doc.show boleto.documento_numero
179
+
180
+ move_more(doc, 3.5, 0)
181
+ doc.show boleto.especie
182
+
183
+ move_more(doc, 1.5, 0)
184
+ doc.show boleto.quantidade
185
+
186
+ move_more(doc, 2, 0)
187
+ doc.show "#{boleto.documento_cedente.formata_documento}"
188
+
189
+ move_more(doc, 3.8, 0)
190
+ doc.show boleto.data_vencimento.to_s_br
191
+
192
+ move_more(doc, 5, 0)
193
+ doc.show boleto.valor_documento.to_currency
194
+
195
+ move_more(doc, -15, -1.3)
196
+ doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
197
+
198
+ move_more(doc, 0, -0.3)
199
+ doc.show "#{boleto.sacado_endereco}"
200
+ if boleto.demonstrativo
201
+ 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'
202
+ end
203
+ # FIM Primeira parte do BOLETO
204
+ end
205
+
206
+ # Monta o corpo e rodapé do layout do boleto
207
+ def modelo_generico_rodape(doc, boleto)
208
+ # INICIO Segunda parte do BOLETO BB
209
+ # Pontos iniciais em x e y
210
+ @x = 0.50
211
+ @y = 12.22
212
+ # LOGOTIPO do BANCO
213
+ doc.image boleto.logotipo, x: "#{@x} cm", y: "#{@y} cm"
214
+
215
+ move_more(doc, 4.84, 0.01)
216
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :maior
217
+
218
+ move_more(doc, 2, 0)
219
+ doc.show exibe_linha_digitavel_para(boleto), tag: :grande
220
+
221
+ move_more(doc, -6.5, -0.9)
222
+ doc.show boleto.local_pagamento
223
+
224
+ move_more(doc, 15.8, 0)
225
+ doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
226
+
227
+ move_more(doc, -15.8, -0.8)
228
+ if boleto.cedente_endereco
229
+ doc.show boleto.cedente_endereco
230
+ move_more(doc, 1.2, 0.3)
231
+ doc.show boleto.cedente
232
+ move_more(doc, -1.2, -0.3)
233
+ else
234
+ doc.show boleto.cedente
235
+ end
236
+
237
+ move_more(doc, 15.8, 0)
238
+ doc.show boleto.agencia_conta_boleto
239
+
240
+ move_more(doc, -15.8 , -0.9)
241
+ doc.show boleto.data_documento.to_s_br if boleto.data_documento
242
+
243
+ move_more(doc, 3.5, 0)
244
+ doc.show boleto.documento_numero
245
+
246
+ move_more(doc, 5.8, 0)
247
+ doc.show boleto.especie_documento
248
+
249
+ move_more(doc, 1.7, 0)
250
+ doc.show boleto.aceite
251
+
252
+ move_more(doc, 1.3, 0)
253
+
254
+ doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
255
+
256
+ move_more(doc, 3.5, 0)
257
+ doc.show boleto.nosso_numero_boleto
258
+
259
+ move_more(doc, -12.1, -0.8)
260
+ if boleto.variacao
261
+ doc.show "#{boleto.carteira}-#{boleto.variacao}"
262
+ else
263
+ doc.show boleto.carteira
264
+ end
265
+
266
+ move_more(doc, 2, 0)
267
+ doc.show boleto.especie
268
+
269
+ move_more(doc, 10.1, 0)
270
+ doc.show boleto.valor_documento.to_currency
271
+
272
+ if boleto.instrucoes
273
+ 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'
274
+ move_more(doc, 0, -2)
275
+ else
276
+ move_more(doc, -15.8, -0.9)
277
+ doc.show boleto.instrucao1
278
+
279
+ move_more(doc, 0, -0.4)
280
+ doc.show boleto.instrucao2
281
+
282
+ move_more(doc, 0, -0.4)
283
+ doc.show boleto.instrucao3
284
+
285
+ move_more(doc, 0, -0.4)
286
+ doc.show boleto.instrucao4
287
+
288
+ move_more(doc, 0, -0.4)
289
+ doc.show boleto.instrucao5
290
+
291
+ move_more(doc, 0, -0.4)
292
+ doc.show boleto.instrucao6
293
+ end
294
+
295
+
296
+ move_more(doc, 0.5, -1.9)
297
+ doc.show "#{boleto.sacado} - CPF/CNPJ: #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
298
+
299
+ move_more(doc, 0, -0.4)
300
+ doc.show "#{boleto.sacado_endereco}"
301
+
302
+ move_more(doc, 1.2, -0.93)
303
+ if boleto.avalista && boleto.avalista_documento
304
+ doc.show "#{boleto.avalista} - #{boleto.avalista_documento}"
305
+ end
306
+ # FIM Segunda parte do BOLETO
307
+ end
308
+
309
+ def exibe_linha_digitavel_para(boleto)
310
+ boleto.linha_digitavel || boleto.codigo_barras.linha_digitavel
311
+ end
312
+ end # Base
313
+ end
314
+ end
315
+ end
@@ -0,0 +1,317 @@
1
+ # -*- encoding: utf-8 -*-
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 Bbrcobranca
20
+ module Boleto
21
+ module Template
22
+ # Templates para usar com Rghost
23
+ module RghostCarne
24
+ extend self
25
+ include RGhost unless include?(RGhost)
26
+ RGhost::Config::GS[:external_encoding] = Bbrcobranca.configuration.external_encoding
27
+
28
+ # Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
29
+ #
30
+ # @return [Stream]
31
+ # @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
32
+ # @see Rghost#modelo_carne Recebe os mesmos parâmetros do Rghost#modelo_carne.
33
+ def to_carne(formato, options = {})
34
+ modelo_carne(self, options.merge!(formato: formato))
35
+ end
36
+
37
+ # Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
38
+ #
39
+ # @return [Stream]
40
+ # @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
41
+ # @see Rghost#modelo_carne Recebe os mesmos parâmetros do Rghost#modelo_carne.
42
+ def lote_carne(boletos, options = {})
43
+ modelo_carne_multipage(boletos, options)
44
+ end
45
+
46
+ # Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
47
+ #
48
+ # @return [Stream]
49
+ # @see Rghost#modelo_carne Recebe os mesmos parâmetros do Rghost#modelo_carne.
50
+ # @example
51
+ # @boleto.to_pdf #=> boleto gerado no formato pdf
52
+ def method_missing(m, *args)
53
+ method = m.to_s
54
+ if method.start_with?('to_')
55
+ modelo_carne(self, (args.first || {}).merge!(formato: method[3..-1]))
56
+ else
57
+ super
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ # Retorna um stream pronto para gravação em arquivo.
64
+ #
65
+ # @return [Stream]
66
+ # @param [Boleto] Instância de uma classe de boleto.
67
+ # @param [Hash] options Opção para a criação do boleto.
68
+ # @option options [Symbol] :resolucao Resolução em pixels.
69
+ # @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
70
+ def modelo_carne(boleto, options = {})
71
+ doc = Document.new paper: [21, 9]
72
+
73
+ colunas = calc_colunas 1
74
+ linhas = calc_linhas 0
75
+
76
+ modelo_carne_load_background(doc, 0)
77
+
78
+ modelo_carne_define_tags(doc)
79
+
80
+ modelo_carne_build_data_left(doc, boleto, colunas, linhas)
81
+ modelo_carne_build_data_right(doc, boleto, colunas, linhas)
82
+
83
+ # Gerando stream
84
+ formato = (options.delete(:formato) || Bbrcobranca.configuration.formato)
85
+ resolucao = (options.delete(:resolucao) || Bbrcobranca.configuration.resolucao)
86
+ doc.render_stream(formato.to_sym, resolution: resolucao)
87
+ end
88
+
89
+ # Retorna um stream para multiplos boletos pronto para gravação em arquivo.
90
+ #
91
+ # @return [Stream]
92
+ # @param [Array] Instâncias de classes de boleto.
93
+ # @param [Hash] options Opção para a criação do boleto.
94
+ # @option options [Symbol] :resolucao Resolução em pixels.
95
+ # @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
96
+ def modelo_carne_multipage(boletos, options = {})
97
+ doc = Document.new paper: :A4
98
+
99
+ max_per_page = 3
100
+ curr_page_position = 0
101
+ heigth_template = 9 # altura do template é de 9 cm
102
+ initial_margin_bottom = 1.4 # margin inicial abaixo
103
+
104
+ modelo_carne_define_tags(doc)
105
+
106
+ boletos.each_with_index do |boleto, index|
107
+ curr_page_position += 1
108
+
109
+ margin_bottom = initial_margin_bottom + (heigth_template * (max_per_page - curr_page_position)) # onde o boleto sera impresso na pagina A4
110
+
111
+ modelo_carne_load_background doc, margin_bottom
112
+
113
+ colunas = calc_colunas 1
114
+ linhas = calc_linhas margin_bottom
115
+
116
+ modelo_carne_build_data_left(doc, boleto, colunas, linhas)
117
+ modelo_carne_build_data_right(doc, boleto, colunas, linhas)
118
+
119
+ if curr_page_position >= max_per_page # maximo 3 boletos por pagina
120
+ # Cria nova página se não for o último boleto
121
+ doc.next_page unless index == boletos.length - 1
122
+
123
+ curr_page_position = 0 # reinicia contador por página
124
+ end
125
+ end
126
+
127
+ # Gerando stream
128
+ formato = (options.delete(:formato) || Bbrcobranca.configuration.formato)
129
+ resolucao = (options.delete(:resolucao) || Bbrcobranca.configuration.resolucao)
130
+
131
+ doc.render_stream(formato.to_sym, resolution: resolucao)
132
+ end
133
+
134
+ # carrega background do boleto
135
+ def modelo_carne_load_background(doc, margin_bottom)
136
+ template_path = File.join(File.dirname(__FILE__), '..', '..', 'arquivos', 'templates', 'modelo_carne.eps')
137
+ raise 'Não foi possível encontrar o template. Verifique o caminho' unless File.exist?(template_path)
138
+
139
+ doc.image template_path, x: 1, y: margin_bottom
140
+ end
141
+
142
+ # define os tamanhos
143
+ def modelo_carne_define_tags(doc)
144
+ doc.define_tags do
145
+ tag :grande, size: 13
146
+ tag :media, size: 10
147
+ end
148
+ end
149
+
150
+ # define as colunas do documento, conforme margem lateral esquerda
151
+ def calc_colunas(margin_left)
152
+ colunas = [0.1, 3.4, 4.5, 7.1, 7.8, 8.5, 9.1, 9.7, 11, 12.4, 13.3, 15]
153
+
154
+ colunas.each_with_index do |v, i|
155
+ colunas[i] = v + margin_left
156
+ end
157
+
158
+ colunas
159
+ end
160
+
161
+ # define as linhas do documento conforme margem inferior
162
+ def calc_linhas(margin_bottom)
163
+ 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
+
165
+ linhas.each_with_index do |v, i|
166
+ linhas[i] = v + margin_bottom
167
+ end
168
+
169
+ linhas
170
+ end
171
+
172
+ # aplica dados do lado esquerdo
173
+ def modelo_carne_build_data_left(doc, boleto, colunas, linhas)
174
+ # LOGOTIPO do BANCO
175
+ doc.image boleto.logotipo, x: (colunas[0] - 0.11), y: linhas[0]
176
+
177
+ # Dados
178
+
179
+ # Numero do banco
180
+ doc.moveto x: colunas[1], y: linhas[0]
181
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}"
182
+
183
+ # vencimento
184
+ doc.moveto x: colunas[0], y: linhas[1]
185
+ doc.show boleto.data_vencimento.to_s_br
186
+
187
+ # agencia/codigo cedente
188
+ doc.moveto x: colunas[0], y: linhas[2]
189
+ doc.show boleto.agencia_conta_boleto
190
+
191
+ # nosso numero
192
+ doc.moveto x: colunas[0], y: linhas[3]
193
+ doc.show boleto.nosso_numero_boleto
194
+
195
+ # valor do documento
196
+ doc.moveto x: colunas[0], y: linhas[4]
197
+ doc.show boleto.valor_documento.to_currency
198
+
199
+ # numero documento
200
+ doc.moveto x: colunas[0], y: linhas[11]
201
+ doc.show boleto.documento_numero
202
+
203
+ # sacado
204
+ doc.moveto x: colunas[0], y: linhas[13]
205
+ doc.show "#{boleto.sacado}"
206
+ end
207
+
208
+ # aplica dados do lado direito
209
+ def modelo_carne_build_data_right(doc, boleto, colunas, linhas)
210
+ # LOGOTIPO do BANCO
211
+ doc.image boleto.logotipo, x: (colunas[2] - 0.11), y: linhas[0]
212
+
213
+ # Numero do banco
214
+ doc.moveto x: colunas[4], y: linhas[0]
215
+ doc.show "#{boleto.banco}-#{boleto.banco_dv}", tag: :grande
216
+
217
+ # linha digitavel
218
+ doc.moveto x: colunas[6], y: linhas[0]
219
+ doc.show exibe_linha_digitavel_para(boleto), tag: :media
220
+
221
+ # local de pagamento
222
+ doc.moveto x: colunas[2], y: linhas[1]
223
+ doc.show boleto.local_pagamento
224
+
225
+ # vencimento
226
+ doc.moveto x: colunas[11], y: linhas[1]
227
+ doc.show boleto.data_vencimento.to_s_br
228
+
229
+ # cedente
230
+ doc.moveto x: colunas[2], y: linhas[2]
231
+ doc.show boleto.cedente
232
+
233
+ # agencia/codigo cedente
234
+ doc.moveto x: colunas[11], y: linhas[2]
235
+ doc.show boleto.agencia_conta_boleto
236
+
237
+ # data do documento
238
+ doc.moveto x: colunas[2], y: linhas[3]
239
+ doc.show boleto.data_documento.to_s_br if boleto.data_documento
240
+
241
+ # numero documento
242
+ doc.moveto x: colunas[3], y: linhas[3]
243
+ doc.show boleto.documento_numero
244
+
245
+ # especie doc.
246
+ doc.moveto x: colunas[8], y: linhas[3]
247
+ doc.show boleto.especie_documento
248
+
249
+ # aceite
250
+ doc.moveto x: colunas[9], y: linhas[3]
251
+ doc.show boleto.aceite
252
+
253
+ # dt processamento
254
+ doc.moveto x: colunas[10], y: linhas[3]
255
+ doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
256
+
257
+ # nosso numero
258
+ doc.moveto x: colunas[11], y: linhas[3]
259
+ doc.show boleto.nosso_numero_boleto
260
+
261
+ # uso do banco
262
+ ## nada...
263
+
264
+ # carteira
265
+ doc.moveto x: colunas[3], y: linhas[4]
266
+ doc.show boleto.carteira
267
+
268
+ # especie
269
+ doc.moveto x: colunas[5], y: linhas[4]
270
+ doc.show boleto.especie
271
+
272
+ # quantidade
273
+ doc.moveto x: colunas[7], y: linhas[4]
274
+ doc.show boleto.quantidade
275
+
276
+ # valor documento
277
+ doc.moveto x: colunas[8], y: linhas[4]
278
+ doc.show boleto.valor_documento.to_currency
279
+
280
+ # valor do documento
281
+ doc.moveto x: colunas[11], y: linhas[4]
282
+ doc.show boleto.valor_documento.to_currency
283
+
284
+ # Instruções
285
+ doc.moveto x: colunas[2], y: linhas[5]
286
+ doc.show boleto.instrucao1
287
+ doc.moveto x: colunas[2], y: linhas[6]
288
+ doc.show boleto.instrucao2
289
+ doc.moveto x: colunas[2], y: linhas[7]
290
+ doc.show boleto.instrucao3
291
+ doc.moveto x: colunas[2], y: linhas[8]
292
+ doc.show boleto.instrucao4
293
+ doc.moveto x: colunas[2], y: linhas[9]
294
+ doc.show boleto.instrucao5
295
+ doc.moveto x: colunas[2], y: linhas[10]
296
+ doc.show boleto.instrucao6
297
+
298
+ # Sacado
299
+ doc.moveto x: colunas[2], y: linhas[11]
300
+ doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
301
+
302
+ # Sacado endereço
303
+ doc.moveto x: colunas[2], y: linhas[12]
304
+ doc.show "#{boleto.sacado_endereco}"
305
+
306
+ # codigo de barras
307
+ # Gerando codigo de barra com rghost_barcode
308
+ doc.barcode_interleaved2of5(boleto.codigo_barras, width: '10.3 cm', height: '1.2 cm', x: colunas[2], y: linhas[14]) if boleto.codigo_barras
309
+ end
310
+
311
+ def exibe_linha_digitavel_para(boleto)
312
+ boleto.linha_digitavel || boleto.codigo_barras.linha_digitavel
313
+ end
314
+ end # Base
315
+ end
316
+ end
317
+ end