public
Description: KillBill is a billing generator according to brazilian bank patterns. Gerador de boleto bancário
Homepage: http://blog.riopro.com.br
Clone URL: git://github.com/riopro/kill_bill.git
commit  5e810492c526069e810a1df012cef12fdf68bd1f
tree    52d12cd8be3d88bc40bd5bd55583993abbd6638a
parent  f89c2418ea05d070d126efa1af83a59387e21c15
name age message
file .gitignore Mon Mar 30 09:27:44 -0700 2009 passando a incluir prawn/layout por conta da ve... [riopro]
file CHANGELOG Fri Apr 17 08:17:00 -0700 2009 Atualizando README e criando CHANGELOG para o K... [riopro]
file README Fri Apr 17 08:17:00 -0700 2009 Atualizando README e criando CHANGELOG para o K... [riopro]
file Rakefile Mon Mar 30 12:26:06 -0700 2009 incluindo arquivo de versão [riopro]
directory examples/ Fri Apr 17 07:54:15 -0700 2009 mais testes para DV com resultado 'P' no nosso ... [riopro]
file init.rb Wed Dec 10 17:13:30 -0800 2008 Commit inicial. Extraindo do Zist [otavio]
file install.rb Wed Dec 10 17:13:30 -0800 2008 Commit inicial. Extraindo do Zist [otavio]
directory lib/ Fri Apr 17 08:22:10 -0700 2009 finalizando layout de criação de boletos do tip... [riopro]
directory spec/ Fri Apr 17 07:59:15 -0700 2009 melhorando a forma de calcular modulo 11 2 a 7 [riopro]
directory tasks/ Wed Dec 10 17:13:30 -0800 2008 Commit inicial. Extraindo do Zist [otavio]
file uninstall.rb Wed Dec 10 17:13:30 -0800 2008 Commit inicial. Extraindo do Zist [otavio]
README
KillBill
========

Cria boleto com código de barras, usando o prawn (https://github.com/sandal/prawn/tree)
e o barby (https://github.com/toretore/barby/tree).

Baseado e inclusive muitos métodos copiados por inteiro do
acts_as_payment (http://github.com/kivanio/acts_as_payment/tree). O
autor original é Kivanio
(http://www.kivanio.com.br/home/post/58-plugin-para-pagamentos-actsaspayment.html)

Para execução, necessita das Gems instaladas:

prawn >= (0.4.1)
prawn-layout >= (0.1.0)
prawn-fast-png >= (0.1.1)
barby >= (0.2.1)
rmagick >= (2.9.1)

Além disso, instale o ImageMagick na sua máquina. Se você usar o Ubuntu:

$ sudo aptitude install imagemagick libmagick9-dev

Para testes necessita das Gems instaladas:

rspec >= (1.1.11)


Nota: O RMagick é uma necessidade do prawn-fast-png e ajuda a aumentar a
velocidade de renderização de arquivos PNG que contém transparência. A leitura
do AlphaChannel do PNG em Ruby puro estava muito lenta.


Example
=======

Os exemplos estão na pasta examples. Para usá-los, você precisa estar com as
gems instaladas e executar o exemplo desejado. O exemplo:

$ ruby examples/boleto_itau_examples.rb

Vai criar no diretório raiz um arquivo boleto_itau.pdf


Incorporando o seu banco ao KillBill
=================================================

Para entender melhor como incorporar o seu banco ao KillBill, comece olhando o 
arquivo lib/bank/itau.rb.

De cara você verá que o mesmo herda de Riopro::KillBill::Bank::Base. A classe 
base faz todas as instanciações padrão e contém os métodos mais comuns a todos
os bancos (como cálculo dos digitos verificadores do tipo 10 e 11).

Em seguida colocamos attr_accessor para cada campo que for específico do nosso
banco. No caso do itaú, são os campos :cpf_or_cnpj e :descriptions.

Em seguida temos o método initialize, onde instanciamos atributos para esse banco
(como o número e o nome do banco). É importante chamar self.process_options(options)
ao final do initialize para que o banco possa receber opções de inicialização através
de um hash.

O próximo método importante que varia de banco para banco é build_barcode. Cada 
banco determina como será a ordem de campos (e até mesmo quais são eles) para
o código de barras. Os 3 primeiros campos são fixos porém: 

#{self.bank_number}#{self.currency}#{verifyer_cd}

O primeiro é o número do banco 001 (banco do brasil), 341 (itaú),... O segundo é
a moeda de pagamento do boleto. Normalmente a forma de pagamento é em Reais, que
possui um id fixo entre os bancos = 9. Mas poderia ser dólar ou euro, ou se o país mudasse
de moeda para Reais Novos por exemplo, esse número mudaria.

O terceiro campo onipresente é o que calcula o dígito verificador para esse código
de barras. Mas essa forma de calcular vária de banco para banco. O que é fixo é
a posição.

Sem entrar muito em detalhes, o próximo passo é criar a imagem de fundo para o
seu boleto (com o logo do banco e todos os campos no alinhamento correto). Você pode
tomar como base o nosso arquivo do Gimp lib/images/bank_source.xcf e usá-lo
para gerar a sua imagem de background do boleto do seu banco. O importante é que
convencionamos que a imagem de fundo do boleto será chamada lib/images/nome_do_banco.jpg
Importante que nome_do_banco deve estar em minúsculo. Isso ajudará na padronização.

Em seguida, faça seus métodos pdf_parameters, to_pdf e to_pdf_file que fazem a 
renderização do boleto propriamente dita.


Melhorias desejadas e Roadmap
=============================

Seria importante que os métodos to_pdf e to_pdf_file chamassem um método
valid! que validaria se os campos estão corretos antes de tentar criar o pdf.

Isso porque acreditamos que um boleto só deve ser gerado se ele puder ser gerado.
Ou seja, se um campo obrigatório não foi preenchido (como o sacado por exemplo),
deve ser obrigatorio que a biblioteca levante um erro informando que atributo 
exatamente não foi preenchido ou foi preenchido incorretamente.

O objetivo agora é acrescentar o maior número possível de bancos, sem desvirtuar
o conceito de simplicidade do KillBill.

consulte também o arquivo CHANGELOG para ver as modificações em cada versão.


Agradecimentos
=============================
* Kivanio Pereira Barbosa (kivanio at gmail dot com) pela troca de idéias e pela
criação do acts_as_payment, no qual o KillBill se baseou inicialmente.

* Felipe Cruxen Godinho (felipecruxen at turboseg dot com dot br) por parte do
código para implementar os boletos do banco Bradesco.

Copyright (c) 2008 Riopro Informática Ltda, released under the MIT license