br_invoices_pdf 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -0
  3. data/.rubocop.yml +1 -0
  4. data/CHANGELOG.md +3 -0
  5. data/Gemfile +2 -0
  6. data/Rakefile +2 -0
  7. data/bin/console +1 -0
  8. data/br_invoices_pdf.gemspec +1 -0
  9. data/lib/br_invoices_pdf.rb +12 -0
  10. data/lib/br_invoices_pdf/cfe.rb +2 -1
  11. data/lib/br_invoices_pdf/cfe/parser.rb +5 -3
  12. data/lib/br_invoices_pdf/cfe/parser/access_key.rb +3 -1
  13. data/lib/br_invoices_pdf/cfe/parser/cnpj.rb +3 -1
  14. data/lib/br_invoices_pdf/cfe/parser/company_attributes.rb +3 -1
  15. data/lib/br_invoices_pdf/cfe/parser/cpf.rb +3 -1
  16. data/lib/br_invoices_pdf/cfe/parser/document_number.rb +3 -1
  17. data/lib/br_invoices_pdf/cfe/parser/fisco_obs.rb +3 -1
  18. data/lib/br_invoices_pdf/cfe/parser/payment.rb +3 -1
  19. data/lib/br_invoices_pdf/cfe/parser/payments.rb +6 -16
  20. data/lib/br_invoices_pdf/cfe/parser/products_data.rb +4 -2
  21. data/lib/br_invoices_pdf/cfe/parser/sat.rb +3 -1
  22. data/lib/br_invoices_pdf/cfe/renderer.rb +4 -18
  23. data/lib/br_invoices_pdf/cfe/renderer/base_renderer.rb +5 -62
  24. data/lib/br_invoices_pdf/cfe/renderer/company_identification.rb +3 -0
  25. data/lib/br_invoices_pdf/cfe/renderer/fisco_info.rb +3 -0
  26. data/lib/br_invoices_pdf/cfe/renderer/header.rb +3 -0
  27. data/lib/br_invoices_pdf/cfe/renderer/payment_forms.rb +6 -12
  28. data/lib/br_invoices_pdf/cfe/renderer/product_table.rb +4 -48
  29. data/lib/br_invoices_pdf/cfe/renderer/qr_code.rb +5 -9
  30. data/lib/br_invoices_pdf/cfe/renderer/taxes_info.rb +5 -2
  31. data/lib/br_invoices_pdf/cfe/renderer/totals.rb +3 -24
  32. data/lib/br_invoices_pdf/errors/invalid_document_type.rb +2 -0
  33. data/lib/br_invoices_pdf/generator.rb +2 -0
  34. data/lib/br_invoices_pdf/nfce.rb +11 -0
  35. data/lib/br_invoices_pdf/nfce/parser.rb +33 -0
  36. data/lib/br_invoices_pdf/nfce/parser/additional_info.rb +17 -0
  37. data/lib/br_invoices_pdf/nfce/parser/company.rb +25 -0
  38. data/lib/br_invoices_pdf/nfce/parser/customer.rb +32 -0
  39. data/lib/br_invoices_pdf/nfce/parser/emission_details.rb +51 -0
  40. data/lib/br_invoices_pdf/nfce/parser/payments.rb +30 -0
  41. data/lib/br_invoices_pdf/nfce/parser/products.rb +39 -0
  42. data/lib/br_invoices_pdf/nfce/parser/totals.rb +25 -0
  43. data/lib/br_invoices_pdf/nfce/renderer.rb +37 -0
  44. data/lib/br_invoices_pdf/nfce/renderer/base_renderer.rb +22 -0
  45. data/lib/br_invoices_pdf/nfce/renderer/company_identification.rb +37 -0
  46. data/lib/br_invoices_pdf/nfce/renderer/customer_identification.rb +47 -0
  47. data/lib/br_invoices_pdf/nfce/renderer/fiscal_message.rb +46 -0
  48. data/lib/br_invoices_pdf/nfce/renderer/header.rb +32 -0
  49. data/lib/br_invoices_pdf/nfce/renderer/payment_forms.rb +73 -0
  50. data/lib/br_invoices_pdf/nfce/renderer/product_table.rb +23 -0
  51. data/lib/br_invoices_pdf/nfce/renderer/qr_code.rb +56 -0
  52. data/lib/br_invoices_pdf/nfce/renderer/taxes_info.rb +28 -0
  53. data/lib/br_invoices_pdf/nfce/renderer/totals.rb +30 -0
  54. data/lib/br_invoices_pdf/util/base_renderer.rb +121 -0
  55. data/lib/br_invoices_pdf/util/enum.rb +20 -0
  56. data/lib/br_invoices_pdf/util/mount_params.rb +26 -0
  57. data/lib/br_invoices_pdf/util/nfce_check_urls.rb +102 -0
  58. data/lib/br_invoices_pdf/util/pdf_renderer.rb +33 -0
  59. data/lib/br_invoices_pdf/util/product_table.rb +57 -0
  60. data/lib/br_invoices_pdf/util/xml_locate.rb +21 -0
  61. data/lib/br_invoices_pdf/version.rb +3 -1
  62. data/nfce.xml +160 -0
  63. metadata +32 -4
  64. data/lib/br_invoices_pdf/cfe/parser/base_parser.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: edc3c4973f7026dda333c9f158701959b12b1195
4
- data.tar.gz: 6d4fbe410899ce9061768e0dbe736817b9645657
3
+ metadata.gz: 4d8ffb07a7ddccdda717e66d7962338f6829f413
4
+ data.tar.gz: 9185d96c8d79c492b0861cc449d72ea4ca01b0a3
5
5
  SHA512:
6
- metadata.gz: a92513413440e7cf85d89d1eb6289a3bdf9e6a8188b0f6cb272ed705ec12c48a8fb8b42499c106bead0b823df44608d8711741b4b1c7d2dd34c4da7824d74121
7
- data.tar.gz: 926e7a5d44506eb5517d283d30e8e8bc9687615b7efef75726abab5fdfbfb8420c10f9a7e10ef0683b6b442442995faa53c92d22bf73f27cd77363a059df9b48
6
+ metadata.gz: fffe964bad7628178056848cc6b2a7890dc599577c8ba565c0a3b523440138c6281320f5270097e75e671068077f0bd68878724843bea82eb7367cc30cf74501
7
+ data.tar.gz: 1ea1f0d2eb53fa2bca910bcd4d3c388f48710379427389901948c8765ea356b1a7ff2fce29456bee25ce1c34439dad1337d2be7dd0ae656ee6f6791f0bc3fc68
@@ -0,0 +1,17 @@
1
+ engines:
2
+ rubocop:
3
+ enabled: false
4
+ #checks:
5
+ # Rubocop/Metrics/ClassLength:
6
+ # enabled: false
7
+ duplication:
8
+ enabled: true
9
+ config:
10
+ languages:
11
+ - ruby:
12
+ ratings:
13
+ paths:
14
+ - lib/**/*
15
+ exclude_paths:
16
+ - spec/**/*
17
+ - lib/br_invoices_pdf/nfce/parser/emission_details.rb
@@ -19,6 +19,7 @@ Layout/IndentHash:
19
19
  AllCops:
20
20
  Exclude:
21
21
  - 'spec/factories/*.rb'
22
+ TargetRubyVersion: 2.4
22
23
 
23
24
  Lint/AmbiguousBlockAssociation:
24
25
  Exclude:
@@ -4,6 +4,9 @@
4
4
 
5
5
  ### Unreleased
6
6
 
7
+ ### 0.2.7 [2017-10-06]
8
+ - [Add] PDF generator to NFC-e
9
+
7
10
  ### 0.2.6 [2017-10-06]
8
11
  - [Corrigido] Valores de CFE.
9
12
  - [Corrigido] Encoding de produtos na CFE.
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'br_invoices_pdf'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  lib = File.expand_path('../lib', __FILE__)
4
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
1
5
  require 'ox'
2
6
  require 'prawn'
3
7
  require 'prawn/table'
@@ -39,4 +43,12 @@ module BrInvoicesPdf
39
43
  end
40
44
  end
41
45
 
46
+ require 'br_invoices_pdf/util/xml_locate'
47
+ require 'br_invoices_pdf/util/nfce_check_urls'
48
+ require 'br_invoices_pdf/util/mount_params'
49
+ require 'br_invoices_pdf/util/enum'
50
+ require 'br_invoices_pdf/util/base_renderer'
51
+ require 'br_invoices_pdf/util/pdf_renderer'
52
+ require 'br_invoices_pdf/util/product_table'
42
53
  require 'br_invoices_pdf/cfe'
54
+ require 'br_invoices_pdf/nfce'
@@ -1,4 +1,5 @@
1
- require 'br_invoices_pdf/cfe/parser/base_parser'
1
+ # frozen_string_literal: true
2
+
2
3
  require 'br_invoices_pdf/cfe/parser'
3
4
  require 'br_invoices_pdf/cfe/renderer/base_renderer'
4
5
  require 'br_invoices_pdf/cfe/renderer'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'br_invoices_pdf/cfe/parser/access_key'
2
4
  require 'br_invoices_pdf/cfe/parser/company_attributes'
3
5
  require 'br_invoices_pdf/cfe/parser/cpf'
@@ -14,10 +16,10 @@ module BrInvoicesPdf
14
16
  module Parser
15
17
  module_function
16
18
 
17
- PARSERERS = {
19
+ PARSERS = {
18
20
  sat_params: Sat,
19
21
  document_number: DocumentNumber,
20
- payment: Payment,
22
+ totals: Payment,
21
23
  payments: Payments,
22
24
  products: ProductsData,
23
25
  company_attributes: CompanyAttributes,
@@ -28,7 +30,7 @@ module BrInvoicesPdf
28
30
  }.freeze
29
31
 
30
32
  def parse(xml)
31
- PARSERERS.reduce({}) do |response, (param, parser)|
33
+ PARSERS.reduce({}) do |response, (param, parser)|
32
34
  { **response, param => parser.execute(xml) }
33
35
  end
34
36
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module AccessKey
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module Cnpj
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module CompanyAttributes
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module Cpf
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module DocumentNumber
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module FiscoObs
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module Payment
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,28 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module Payments
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
9
- PAYMENT_TYPES = {
10
- '01' => 'Dinheiro',
11
- '02' => 'Cheque',
12
- '03' => 'Cartão de Crédito',
13
- '04' => 'Cartão de Débito',
14
- '05' => 'Crédito Loja',
15
- '10' => 'Vale Alimentação',
16
- '11' => 'Vale Refeição',
17
- '12' => 'Vale Presente',
18
- '13' => 'Vale Combustível',
19
- '99' => 'Outros'
20
- }.freeze
21
-
22
11
  def execute(xml)
23
12
  node_payments = xml.locate('infCFe/pgto')
24
13
 
25
- payments_by_nodes(node_payments) if node_payments && node_payments.any?
14
+ return unless node_payments
15
+ payments_by_nodes(node_payments) if node_payments.any?
26
16
  end
27
17
 
28
18
  def payments_by_nodes(node_payments)
@@ -34,7 +24,7 @@ module BrInvoicesPdf
34
24
 
35
25
  def payment_by(element)
36
26
  {
37
- type: PAYMENT_TYPES[locate_element(element, 'cMP')],
27
+ type: Util::Enum::PAYMENT_TYPES[locate_element(element, 'cMP')],
38
28
  amount: locate_element(element, 'vMP')
39
29
  }
40
30
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module ProductsData
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -27,7 +29,7 @@ module BrInvoicesPdf
27
29
 
28
30
  def product_by(element)
29
31
  FIELDS
30
- .map { |(key, field)| [key, node_locate(element, field).force_encoding('UTF-8'.freeze)] }
32
+ .map { |(key, field)| [key, node_locate(element, field).force_encoding('UTF-8')] }
31
33
  .to_h
32
34
  end
33
35
  private_class_method :product_by
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Parser
4
6
  module Sat
5
- extend BaseParser
7
+ extend Util::XmlLocate
6
8
 
7
9
  module_function
8
10
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'br_invoices_pdf/cfe/renderer/company_identification'
2
4
  require 'br_invoices_pdf/cfe/renderer/fisco_info'
3
5
  require 'br_invoices_pdf/cfe/renderer/header'
@@ -12,7 +14,7 @@ module BrInvoicesPdf
12
14
  module Renderer
13
15
  module_function
14
16
 
15
- AUTO_HEIGHT_MOCK = 2000
17
+ extend Util::PdfRenderer
16
18
 
17
19
  RENDERERS = [
18
20
  CompanyIdentification,
@@ -25,24 +27,8 @@ module BrInvoicesPdf
25
27
  FiscoInfo
26
28
  ].freeze
27
29
 
28
- # :reek:FeatureEnvy
29
30
  def pdf(data, options)
30
- page_width = Renderer::BaseRenderer.page_paper_width(options[:page_size])
31
-
32
- Prawn::Document.new(options.merge(page_size: [page_width, AUTO_HEIGHT_MOCK])) do |pdf|
33
- pdf_content(pdf, data, page_width)
34
- end
35
- end
36
-
37
- def pdf_content(pdf, data, page_width)
38
- pdf.font_size(7) do
39
- RENDERERS.each do |renderer|
40
- renderer.execute(pdf, data)
41
- end
42
-
43
- page = pdf.page
44
- page.dictionary.data[:MediaBox] = [0, pdf.y - page.margins[:bottom], page_width, AUTO_HEIGHT_MOCK]
45
- end
31
+ generate_pdf(data, options, RENDERERS)
46
32
  end
47
33
  end
48
34
  end
@@ -1,74 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Renderer
4
6
  module BaseRenderer
7
+ extend Util::BaseRenderer
8
+
5
9
  module_function
6
10
 
7
- ADDRESS_FORMAT = '%s, %s, %s, %s, %s/%s'.freeze
11
+ ADDRESS_FORMAT = '%s, %s, %s, %s, %s/%s'
8
12
  def format_address(address)
9
13
  ADDRESS_FORMAT % %i(public_place number complement neighborhood city state).map(&address.method(:[]))
10
14
  end
11
-
12
- def box(pdf, position, width)
13
- pdf.bounding_box(position, width: width) do
14
- pdf.pad(2) do
15
- pdf.indent(2, 2) do
16
- yield
17
- end
18
- end
19
-
20
- pdf.stroke_bounds
21
- end
22
- end
23
-
24
- # :reek:FeatureEnvy
25
- def pdf_setup(pdf)
26
- pdf.bounding_box([0, pdf.cursor], width: page_content_width(pdf)) do
27
- pdf.pad(10) do
28
- pdf.indent(10, 10) do
29
- yield
30
- end
31
- end
32
- pdf.stroke_bounds
33
- end
34
- end
35
-
36
- CNPJ_FORMAT = '%02d.%03d.%03d/%04d-%02d'.freeze
37
- # :reek:FeatureEnvy
38
- def format_cnpj(cnpj)
39
- format(CNPJ_FORMAT, cnpj[0, 2].to_i, cnpj[2, 3].to_i, cnpj[5, 3].to_i,
40
- cnpj[8, 4].to_i, cnpj[12, 2].to_i)
41
- end
42
-
43
- CPF_FORMAT = '%d.%d.%d-%d'.freeze
44
- # :reek:FeatureEnvy
45
- def format_cpf(cpf)
46
- format(CPF_FORMAT, cpf[0, 3], cpf[3, 3], cpf[6, 3], cpf[9, 2])
47
- end
48
-
49
- # :reek:FeatureEnvy
50
- def format_currency(number_string)
51
- number = BigDecimal(number_string)
52
- format('%.2f', number.truncate(2)).tr('.', ',')
53
- end
54
-
55
- # :reek:FeatureEnvy
56
- def format_number(number_string, prec: 4)
57
- number = BigDecimal(number_string)
58
- format("%.#{prec}f", number.truncate(prec)).tr('.', ',')
59
- end
60
-
61
- # :reek:FeatureEnvy
62
- def page_paper_width(name)
63
- (name.is_a?(Array) ? name : PDF::Core::PageGeometry::SIZES[name]).first
64
- end
65
-
66
- # :reek:FeatureEnvy
67
- def page_content_width(pdf)
68
- page = pdf.page
69
- margins = page.margins
70
- page_paper_width(page.size) - margins[:left] - margins[:right]
71
- end
72
15
  end
73
16
  end
74
17
  end
@@ -1,8 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Renderer
4
6
  # :reek:DataClump
5
7
  module CompanyIdentification
8
+ extend Util::BaseRenderer
6
9
  extend BaseRenderer
7
10
 
8
11
  module_function
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrInvoicesPdf
2
4
  module Cfe
3
5
  module Renderer
4
6
  module FiscoInfo
7
+ extend Util::BaseRenderer
5
8
  extend BaseRenderer
6
9
 
7
10
  module_function