README.md
# BrDanfe
[![Code Climate](https://codeclimate.com/github/asseinfo/br_danfe.png)](https://codeclimate.com/github/asseinfo/br_danfe)
This gem generates PDF files for Brazilian DANFE (_Documento Auxiliar da Nota Fiscal Eletrônica_) from a valid NF-e XML. It also can generates PDF file for CC-e (_Carta de Correção Eletrônica_).
[See an example here.](https://github.com/asseinfo/br_danfe/blob/master/spec/fixtures/v2.00/nfe_with_logo.xml.fixture.pdf?raw=true)
This gem requires `ruby >= 2.0`.
## Supported NF-e versions
XML version | Supported?
----------- | ----------
1.00 | no
2.00 | yes
3.10 | yes
4.00 | yes
## Installing
gem install br_danfe
## Usage
### DANFE - _Documento Auxiliar da Nota Fiscal Eletrônica_
#### Usage in Ruby
xml = File.read("spec/fixtures/nfe/v2.00/nfe_simples_nacional.xml")
danfe = BrDanfe::Danfe.new(xml)
danfe.options.logo = "spec/fixtures/logo.png"
danfe.options.logo_dimensions = { width: 100, height: 100 }
danfe.save_pdf("output.pdf")
#### Usage in Rails Controller
class DanfeController < ApplicationController
def new
invoice = Invoice.find(params[:id])
xml_as_string = invoice.generate_xml # your method that generates the NF-e's xml
danfe = BrDanfe::Danfe.new(xml_as_string)
send_data danfe.render_pdf, filename: "danfe.pdf", type: "application/pdf"
end
end
#### Usage in Rails Controller with more than one xml
class DanfeController < ApplicationController
def new
invoices = Invoice.where(ids: params[:ids])
xmls_as_string = []
invoices.each do |invoice|
xmls_as_string << invoice.generate_xml # your method that generates the NF-e's xml
end
danfe = BrDanfe::Danfe.new(xmls_as_string)
send_data danfe.render_pdf, filename: "danfe.pdf", type: "application/pdf"
end
end
### Options
* `logo_path`: Path of sender's logo image.
* `logo_dimensions`: Dimensions of the logo. Ex: logo_dimensions = { width: 100, height: 90 }
### CC-e - Carta de Correção Eletrônica
#### Usage in Ruby
xml = File.read("cce.xml")
cce = BrDanfe::Cce.new(xml)
cce.save_pdf("nfe.pdf")
#### Usage in Rails Controller
class CCeController < ApplicationController
def new
invoice = Invoice.find(params[:id])
xml_as_string = invoice.generate_xml # your method that generates the CC-e's xml
cce = BrDanfe::Cce.new(xml_as_string)
send_data cce.render_pdf, filename: "cce.pdf", type: "application/pdf"
end
end
### DAMDFE - _Documento Auxiliar do Manifesto Eletrônico de Documentos Fiscais_
#### Usage in Ruby
xml = File.read("mdfe.xml")
mdfe = BrDanfe::Mdfe.new(xml)
mdfe.save_pdf("mdfe.pdf")
#### Usage in Rails Controller
class MdfeController < ApplicationController
def new
mdfe = Mdfe.find(params[:id])
xml_as_string = mdfe.generate_xml # your method that generates the MDF-e's xml
mdfe = BrDanfe::Mdfe.new(xml_as_string)
send_data mdfe.render_pdf, filename: "mdfe.pdf", type: "application/pdf"
end
end
## I18n
By default, your rails application must be configured to `pt-Br`.
If you need to customize some message or field label, you can override the content of pt-Br.yml file.
## Development - With Docker
You needs to build docker container like above:
$ docker-compose build
You can run all RSpec specs using:
$ docker-compose run --rm br_danfe rspec
## Development - Without Docker
You needs to install all necessaries dependencies using bunder like above:
$ bundle install
You can run all RSpec specs using:
$ bundle exec rspec
## About tests
> If you modify something that caused general visual changes at output pdf's, so you have to rebuild the fixtures pdf files.
>
> You can do this simply deleting the fixture pdf file. The `have_same_content_of` matcher will recreate the fixture in the next time you run the `bundle exec rspec` command.
## Environment variables
The following variables are necessary to be set:
Environment var | Development? | Test? | CI? | Production? | Data
----------------------|--------------|-------|-------|-------------|-----
TZ | no | no | yes | no | America/Sao_Paulo
BUNDLE_PATH | no | no | yes | no | vendor/bundle
CC_TEST_REPORTER_ID | no | no | yes | no | get at codeclimate
RAILS_ENV | no | no | yes | no | test
### Code coverage
Code coverage is available through of SimpleCov. Just run `bundle exec rspec` and open the coverage report in your browser.
### Fake data for generating new fixtures
If you need to generate new danfes for using as fixtures, please don't use real data.
These data bellow are suggested:
**Sender:**
Field | Content
------------ | ----------------------
Name | Nome do Remetente Ltda
Trade | Nome Fantasia do Remetente Ltda
Address | Rua do Remetente
Number | 123
Complement | Casa
Neighborhood | Bairro do Remetente
CEP | 12.345-678
City | São Paulo - SP
Phone | (11) 1234-5678
CNPJ | 62.013.294/0001-43
IE | 526.926.313.553
**Recipient:**
Field | Content
------------ | -------------------------
Name | Nome do Destinatário PJ Ltda
Address | Rua do Destinatário PJ
Number | 345
Complement | SL 1 e 2
Neighborhood | Bairro do Destinatário PJ
CEP | 23.456-789
City | Sumaré - SP
Phone | (19) 2345-6789
CNPJ | 71.058.884/0001-83
IE | 671.008.375.110
IE ST | 611.724.092.039
Field | Content
------------ | -------------------------
Name | Nome do Destinatário PF
Address | Rua do Destinatário PF
Number | 345
Complement | 1o Andar
Neighborhood | Bairro do Destinatário PF
CEP | 98.765-432
City | Vinhedo - SP
Phone | (16) 4567-8901
CPF | 485.325.574-57
RG | 11.420.947-9
**Transporter:**
Field | Content
------------ | --------------------------
Name | Nome do Transportador Ltda
Address | Rua do Transportador, 456
City | Votorantim - SP
CNPJ | 71.434.064/0001-49
IE | 964.508.990.089
You can generate new data using [4devs generators](http://www.4devs.com.br).
## Deploy to Rubygems
1. Create and send the new version to Rubygems
$ bundle exec rake release
2. Create a [new release on Github](https://github.com/asseinfo/br_danfe/releases/new)
* Choose **the new tag** (Ex.: v0.10.1)
* Fill the **Release title** (Ex.: 0.10.1)
* Click at **Generate release notes**
* Click at **Publish release**
3. Done!
You can build or install the gem using one of the above tasks
$ bundle exec rake build # Build br_danfe-X.X.X.gem into the pkg directory
$ bundle exec rake install # Build and install br_danfe-X.X.X.gem into system gems
#### Login
$ gem signin
$ gem signout
## Contributing
We encourage you to contribute to BrDanfe!
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request
## Ruby DANFE gem
This project is based on [Ruby DANFE gem](http://github.com/taxweb/ruby_danfe).
## License
BrDanfe is released under the [MIT License](http://www.opensource.org/licenses/MIT).