br_invoices_pdf 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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