br_invoices_pdf 0.2.6.alpha.19 → 0.2.6

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/.rubocop.yml +0 -1
  3. data/CHANGELOG.md +0 -1
  4. data/Gemfile +0 -2
  5. data/Rakefile +0 -2
  6. data/bin/console +0 -1
  7. data/br_invoices_pdf.gemspec +0 -1
  8. data/lib/br_invoices_pdf.rb +0 -12
  9. data/lib/br_invoices_pdf/cfe.rb +1 -2
  10. data/lib/br_invoices_pdf/cfe/parser.rb +3 -5
  11. data/lib/br_invoices_pdf/cfe/parser/access_key.rb +1 -3
  12. data/lib/br_invoices_pdf/cfe/parser/base_parser.rb +19 -0
  13. data/lib/br_invoices_pdf/cfe/parser/cnpj.rb +1 -3
  14. data/lib/br_invoices_pdf/cfe/parser/company_attributes.rb +1 -3
  15. data/lib/br_invoices_pdf/cfe/parser/cpf.rb +1 -3
  16. data/lib/br_invoices_pdf/cfe/parser/document_number.rb +1 -3
  17. data/lib/br_invoices_pdf/cfe/parser/fisco_obs.rb +1 -3
  18. data/lib/br_invoices_pdf/cfe/parser/payment.rb +1 -3
  19. data/lib/br_invoices_pdf/cfe/parser/payments.rb +16 -6
  20. data/lib/br_invoices_pdf/cfe/parser/products_data.rb +2 -4
  21. data/lib/br_invoices_pdf/cfe/parser/sat.rb +1 -3
  22. data/lib/br_invoices_pdf/cfe/renderer.rb +18 -4
  23. data/lib/br_invoices_pdf/cfe/renderer/base_renderer.rb +62 -5
  24. data/lib/br_invoices_pdf/cfe/renderer/company_identification.rb +0 -3
  25. data/lib/br_invoices_pdf/cfe/renderer/fisco_info.rb +0 -3
  26. data/lib/br_invoices_pdf/cfe/renderer/header.rb +0 -3
  27. data/lib/br_invoices_pdf/cfe/renderer/payment_forms.rb +12 -6
  28. data/lib/br_invoices_pdf/cfe/renderer/product_table.rb +48 -4
  29. data/lib/br_invoices_pdf/cfe/renderer/qr_code.rb +9 -5
  30. data/lib/br_invoices_pdf/cfe/renderer/taxes_info.rb +2 -5
  31. data/lib/br_invoices_pdf/cfe/renderer/totals.rb +24 -3
  32. data/lib/br_invoices_pdf/errors/invalid_document_type.rb +0 -2
  33. data/lib/br_invoices_pdf/generator.rb +0 -2
  34. data/lib/br_invoices_pdf/version.rb +1 -3
  35. metadata +6 -34
  36. data/.codeclimate.yml +0 -17
  37. data/lib/br_invoices_pdf/nfce.rb +0 -11
  38. data/lib/br_invoices_pdf/nfce/parser.rb +0 -33
  39. data/lib/br_invoices_pdf/nfce/parser/additional_info.rb +0 -17
  40. data/lib/br_invoices_pdf/nfce/parser/company.rb +0 -25
  41. data/lib/br_invoices_pdf/nfce/parser/customer.rb +0 -32
  42. data/lib/br_invoices_pdf/nfce/parser/emission_details.rb +0 -51
  43. data/lib/br_invoices_pdf/nfce/parser/payments.rb +0 -30
  44. data/lib/br_invoices_pdf/nfce/parser/products.rb +0 -39
  45. data/lib/br_invoices_pdf/nfce/parser/totals.rb +0 -25
  46. data/lib/br_invoices_pdf/nfce/renderer.rb +0 -37
  47. data/lib/br_invoices_pdf/nfce/renderer/base_renderer.rb +0 -22
  48. data/lib/br_invoices_pdf/nfce/renderer/company_identification.rb +0 -37
  49. data/lib/br_invoices_pdf/nfce/renderer/customer_identification.rb +0 -47
  50. data/lib/br_invoices_pdf/nfce/renderer/fiscal_message.rb +0 -46
  51. data/lib/br_invoices_pdf/nfce/renderer/header.rb +0 -32
  52. data/lib/br_invoices_pdf/nfce/renderer/payment_forms.rb +0 -73
  53. data/lib/br_invoices_pdf/nfce/renderer/product_table.rb +0 -23
  54. data/lib/br_invoices_pdf/nfce/renderer/qr_code.rb +0 -56
  55. data/lib/br_invoices_pdf/nfce/renderer/taxes_info.rb +0 -28
  56. data/lib/br_invoices_pdf/nfce/renderer/totals.rb +0 -30
  57. data/lib/br_invoices_pdf/util/base_renderer.rb +0 -121
  58. data/lib/br_invoices_pdf/util/enum.rb +0 -20
  59. data/lib/br_invoices_pdf/util/mount_params.rb +0 -26
  60. data/lib/br_invoices_pdf/util/nfce_check_urls.rb +0 -102
  61. data/lib/br_invoices_pdf/util/pdf_renderer.rb +0 -33
  62. data/lib/br_invoices_pdf/util/product_table.rb +0 -57
  63. data/lib/br_invoices_pdf/util/xml_locate.rb +0 -21
  64. data/nfce.xml +0 -160
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4612f7674183ae8414be784152bf91c80eada118
4
- data.tar.gz: f2e215f9ee6ef8eaba081f59106e36390e0b992a
3
+ metadata.gz: edc3c4973f7026dda333c9f158701959b12b1195
4
+ data.tar.gz: 6d4fbe410899ce9061768e0dbe736817b9645657
5
5
  SHA512:
6
- metadata.gz: 94507762fe95b1a7c9d9d0875f71f8c954f37ab80460d35a6c5ab367e0cd1f112781e85235b036e41407e835be57830eba8832606ae18d65c767f300bc46d17c
7
- data.tar.gz: 6827fa177ed6cc72252d92461f552667b0d90c52c30d3f25d65ce0c959c7a144fd174d77cfd6fc1d9a7586c8689232e5032bc4eed600af9abadca7c8e9afd7f5
6
+ metadata.gz: a92513413440e7cf85d89d1eb6289a3bdf9e6a8188b0f6cb272ed705ec12c48a8fb8b42499c106bead0b823df44608d8711741b4b1c7d2dd34c4da7824d74121
7
+ data.tar.gz: 926e7a5d44506eb5517d283d30e8e8bc9687615b7efef75726abab5fdfbfb8420c10f9a7e10ef0683b6b442442995faa53c92d22bf73f27cd77363a059df9b48
data/.rubocop.yml CHANGED
@@ -19,7 +19,6 @@ Layout/IndentHash:
19
19
  AllCops:
20
20
  Exclude:
21
21
  - 'spec/factories/*.rb'
22
- TargetRubyVersion: 2.4
23
22
 
24
23
  Lint/AmbiguousBlockAssociation:
25
24
  Exclude:
data/CHANGELOG.md CHANGED
@@ -3,7 +3,6 @@
3
3
  ## CHANGELOG
4
4
 
5
5
  ### Unreleased
6
- - [Add] PDF generator to NFC-e
7
6
 
8
7
  ### 0.2.6 [2017-10-06]
9
8
  - [Corrigido] Valores de CFE.
data/Gemfile CHANGED
@@ -1,4 +1,2 @@
1
- # frozen_string_literal: true
2
-
3
1
  source 'https://rubygems.org'
4
2
  gemspec
data/Rakefile CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'bundler/gem_tasks'
4
2
  require 'rspec/core/rake_task'
5
3
 
data/bin/console CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
2
 
4
3
  require 'bundler/setup'
5
4
  require 'br_invoices_pdf'
@@ -1,5 +1,4 @@
1
1
  # coding: utf-8
2
- # frozen_string_literal: true
3
2
 
4
3
  lib = File.expand_path('../lib', __FILE__)
5
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -1,7 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
- require 'stringio'
4
-
5
1
  require 'ox'
6
2
  require 'prawn'
7
3
  require 'prawn/table'
@@ -43,12 +39,4 @@ module BrInvoicesPdf
43
39
  end
44
40
  end
45
41
 
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'
53
42
  require 'br_invoices_pdf/cfe'
54
- require 'br_invoices_pdf/nfce'
@@ -1,5 +1,4 @@
1
- # frozen_string_literal: true
2
-
1
+ require 'br_invoices_pdf/cfe/parser/base_parser'
3
2
  require 'br_invoices_pdf/cfe/parser'
4
3
  require 'br_invoices_pdf/cfe/renderer/base_renderer'
5
4
  require 'br_invoices_pdf/cfe/renderer'
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'br_invoices_pdf/cfe/parser/access_key'
4
2
  require 'br_invoices_pdf/cfe/parser/company_attributes'
5
3
  require 'br_invoices_pdf/cfe/parser/cpf'
@@ -16,10 +14,10 @@ module BrInvoicesPdf
16
14
  module Parser
17
15
  module_function
18
16
 
19
- PARSERS = {
17
+ PARSERERS = {
20
18
  sat_params: Sat,
21
19
  document_number: DocumentNumber,
22
- totals: Payment,
20
+ payment: Payment,
23
21
  payments: Payments,
24
22
  products: ProductsData,
25
23
  company_attributes: CompanyAttributes,
@@ -30,7 +28,7 @@ module BrInvoicesPdf
30
28
  }.freeze
31
29
 
32
30
  def parse(xml)
33
- PARSERS.reduce({}) do |response, (param, parser)|
31
+ PARSERERS.reduce({}) do |response, (param, parser)|
34
32
  { **response, param => parser.execute(xml) }
35
33
  end
36
34
  end
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module AccessKey
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -0,0 +1,19 @@
1
+ module BrInvoicesPdf
2
+ module Cfe
3
+ module Parser
4
+ module BaseParser
5
+ module_function
6
+
7
+ def locate_element(xml, path)
8
+ element = xml.locate(path).first
9
+ element.text if element
10
+ end
11
+
12
+ def node_locate(element, path)
13
+ value = element.nodes.first.locate(path).first
14
+ value.text if value
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module Cnpj
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module CompanyAttributes
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module Cpf
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module DocumentNumber
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module FiscoObs
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module Payment
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,18 +1,28 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module Payments
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
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
+
11
22
  def execute(xml)
12
23
  node_payments = xml.locate('infCFe/pgto')
13
24
 
14
- return unless node_payments
15
- payments_by_nodes(node_payments) if node_payments.any?
25
+ payments_by_nodes(node_payments) if node_payments && node_payments.any?
16
26
  end
17
27
 
18
28
  def payments_by_nodes(node_payments)
@@ -24,7 +34,7 @@ module BrInvoicesPdf
24
34
 
25
35
  def payment_by(element)
26
36
  {
27
- type: Util::Enum::PAYMENT_TYPES[locate_element(element, 'cMP')],
37
+ type: PAYMENT_TYPES[locate_element(element, 'cMP')],
28
38
  amount: locate_element(element, 'vMP')
29
39
  }
30
40
  end
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module ProductsData
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -29,7 +27,7 @@ module BrInvoicesPdf
29
27
 
30
28
  def product_by(element)
31
29
  FIELDS
32
- .map { |(key, field)| [key, node_locate(element, field).force_encoding('UTF-8')] }
30
+ .map { |(key, field)| [key, node_locate(element, field).force_encoding('UTF-8'.freeze)] }
33
31
  .to_h
34
32
  end
35
33
  private_class_method :product_by
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Parser
6
4
  module Sat
7
- extend Util::XmlLocate
5
+ extend BaseParser
8
6
 
9
7
  module_function
10
8
 
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'br_invoices_pdf/cfe/renderer/company_identification'
4
2
  require 'br_invoices_pdf/cfe/renderer/fisco_info'
5
3
  require 'br_invoices_pdf/cfe/renderer/header'
@@ -14,7 +12,7 @@ module BrInvoicesPdf
14
12
  module Renderer
15
13
  module_function
16
14
 
17
- extend Util::PdfRenderer
15
+ AUTO_HEIGHT_MOCK = 2000
18
16
 
19
17
  RENDERERS = [
20
18
  CompanyIdentification,
@@ -27,8 +25,24 @@ module BrInvoicesPdf
27
25
  FiscoInfo
28
26
  ].freeze
29
27
 
28
+ # :reek:FeatureEnvy
30
29
  def pdf(data, options)
31
- generate_pdf(data, options, RENDERERS)
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
32
46
  end
33
47
  end
34
48
  end
@@ -1,17 +1,74 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Renderer
6
4
  module BaseRenderer
7
- extend Util::BaseRenderer
8
-
9
5
  module_function
10
6
 
11
- ADDRESS_FORMAT = '%s, %s, %s, %s, %s/%s'
7
+ ADDRESS_FORMAT = '%s, %s, %s, %s, %s/%s'.freeze
12
8
  def format_address(address)
13
9
  ADDRESS_FORMAT % %i(public_place number complement neighborhood city state).map(&address.method(:[]))
14
10
  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
15
72
  end
16
73
  end
17
74
  end
@@ -1,11 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Renderer
6
4
  # :reek:DataClump
7
5
  module CompanyIdentification
8
- extend Util::BaseRenderer
9
6
  extend BaseRenderer
10
7
 
11
8
  module_function
@@ -1,10 +1,7 @@
1
- # frozen_string_literal: true
2
-
3
1
  module BrInvoicesPdf
4
2
  module Cfe
5
3
  module Renderer
6
4
  module FiscoInfo
7
- extend Util::BaseRenderer
8
5
  extend BaseRenderer
9
6
 
10
7
  module_function