br_danfe 0.20.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -1
- data/Gemfile.lock +1 -1
- data/config/locales/pt-BR.yml +15 -0
- data/lib/br_danfe/danfe_lib/nfe.rb +5 -3
- data/lib/br_danfe/danfe_lib/nfe_lib/dest.rb +1 -1
- data/lib/br_danfe/danfe_lib/nfe_lib/det_body.rb +6 -1
- data/lib/br_danfe/danfe_lib/nfe_lib/dup.rb +8 -4
- data/lib/br_danfe/danfe_lib/nfe_lib/entrega.rb +86 -0
- data/lib/br_danfe/danfe_lib/nfe_lib/helper.rb +4 -4
- data/lib/br_danfe/danfe_lib/nfe_lib/icmstot.rb +8 -4
- data/lib/br_danfe/danfe_lib/nfe_lib/infadic.rb +3 -19
- data/lib/br_danfe/danfe_lib/nfe_lib/issqn.rb +4 -2
- data/lib/br_danfe/danfe_lib/nfe_lib/transp.rb +8 -4
- data/lib/br_danfe/danfe_lib/nfe_lib/vol.rb +6 -2
- data/lib/br_danfe/version.rb +1 -1
- data/spec/br_danfe/danfe_lib/nfe_lib/det_body_spec.rb +73 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/dup_spec.rb +50 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/entrega_spec.rb +186 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/helper_spec.rb +23 -4
- data/spec/br_danfe/danfe_lib/nfe_lib/icmstot_spec.rb +46 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/infadic_spec.rb +0 -41
- data/spec/br_danfe/danfe_lib/nfe_lib/issqn_spec.rb +49 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/transp_spec.rb +49 -0
- data/spec/br_danfe/danfe_lib/nfe_lib/vol_spec.rb +59 -0
- data/spec/br_danfe/danfe_lib/nfe_spec.rb +11 -0
- data/spec/fixtures/nfe/lib/det_body#render-with_entrega.pdf +1110 -0
- data/spec/fixtures/nfe/lib/dup#render-with_entrega.pdf +0 -0
- data/spec/fixtures/nfe/lib/entrega#render-v2.00.pdf +0 -0
- data/spec/fixtures/nfe/lib/entrega#render-with-address-bigger.pdf +0 -0
- data/spec/fixtures/nfe/lib/entrega#render-with_cpf.pdf +0 -0
- data/spec/fixtures/nfe/lib/entrega#render-without-address-complement.pdf +0 -0
- data/spec/fixtures/nfe/lib/icmstot#render-with_entrega.pdf +0 -0
- data/spec/fixtures/nfe/lib/infadic#render-all_the_informations.pdf +0 -0
- data/spec/fixtures/nfe/lib/issqn#render-with_entrega.pdf +0 -0
- data/spec/fixtures/nfe/lib/transp#render-with_entrega.pdf +0 -0
- data/spec/fixtures/nfe/lib/vol#render-with_entrega.pdf +0 -0
- data/spec/fixtures/nfe/v2.00/nfe_with_entrega.xml +260 -0
- data/spec/fixtures/nfe/v2.00/nfe_with_entrega.xml.fixture.pdf +3413 -0
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 345273bdb39c1d133110285def88a0dcae14df47b6e1b8fcd6085ab753d3898e
|
4
|
+
data.tar.gz: 2d24c830171df9dd03b4870e96704385a809d240ae7abcb3b4c0adc31673a2dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08340f8602de112ea5260412165d3481f7a1122074093f30e505afacda6fbbdab1ccd43fdddffc606c60b546311ff89f92d08f20abc204832f33e95f702364fd'
|
7
|
+
data.tar.gz: 9ad4f2ed6707f8b4d486f4f8d78fb1cb4d251ae0b2b867c4cb760050343a491633ec5b59751d469e7eb7189feff096fd33e65f04a93afc334fdf64778ef3d9ee
|
data/.codeclimate.yml
CHANGED
data/Gemfile.lock
CHANGED
data/config/locales/pt-BR.yml
CHANGED
@@ -144,6 +144,21 @@ pt-BR:
|
|
144
144
|
received_at: "DATA DE RECEBIMENTO"
|
145
145
|
receiver: "IDENTIFICAÇÃO E ASSINATURA DO RECEBEDOR"
|
146
146
|
document: "NF-e\nN°. %{nNF}\nSÉRIE %{serie}"
|
147
|
+
entrega:
|
148
|
+
title: "INFORMAÇÕES DO LOCAL DE ENTREGA"
|
149
|
+
CNPJ: "CNPJ"
|
150
|
+
CPF: "CPF"
|
151
|
+
xNome: "NOME/RAZÃO SOCIAL"
|
152
|
+
xLgr: "ENDEREÇO"
|
153
|
+
nro: "NÚMERO"
|
154
|
+
xCpl: "COMPLEMENTO"
|
155
|
+
xBairro: "BAIRRO"
|
156
|
+
cMun: "CÓDIGO DE MUNICÍPIO"
|
157
|
+
xMun: "MUNICÍPIO"
|
158
|
+
UF: "UF"
|
159
|
+
CEP: "CEP"
|
160
|
+
fone: "FONE/FAX"
|
161
|
+
IE: "INSCRIÇÃO ESTADUAL"
|
147
162
|
nfce:
|
148
163
|
payment_methods:
|
149
164
|
'01': "Dinheiro"
|
@@ -42,6 +42,7 @@ module BrDanfe
|
|
42
42
|
def render_on_first_page(xml)
|
43
43
|
NfeLib::Ticket.new(@document, xml).render
|
44
44
|
NfeLib::Dest.new(@document, xml).render
|
45
|
+
NfeLib::Entrega.new(@document, xml).render
|
45
46
|
NfeLib::Dup.new(@document, xml).render
|
46
47
|
NfeLib::Icmstot.new(@document, xml).render
|
47
48
|
NfeLib::Transp.new(@document, xml).render
|
@@ -73,13 +74,14 @@ module BrDanfe
|
|
73
74
|
@document.go_to_page(page)
|
74
75
|
|
75
76
|
emitter.render(initial_page_of_pdf, y_position, total_pages)
|
76
|
-
render_product_table_title initial_page_of_pdf
|
77
|
+
render_product_table_title initial_page_of_pdf, xml
|
77
78
|
render_footer_information footer_info
|
78
79
|
render_no_fiscal_value(xml)
|
79
80
|
end
|
80
81
|
|
81
|
-
def render_product_table_title(page)
|
82
|
-
y_position = page == 1 ?
|
82
|
+
def render_product_table_title(page, xml)
|
83
|
+
y_position = NfeLib::Entrega.delivery_local?(xml) && page == 1 ? 3.00 : 0
|
84
|
+
y_position += page == 1 ? 18.91 : 7.40
|
83
85
|
@document.ititle 0.42, 10.00, 0.75, y_position, 'det.title'
|
84
86
|
end
|
85
87
|
|
@@ -53,7 +53,7 @@ module BrDanfe
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def address
|
56
|
-
address = Helper.generate_address @xml
|
56
|
+
address = Helper.generate_address @xml, 'enderDest'
|
57
57
|
|
58
58
|
if Helper.address_is_too_big(@pdf, address)
|
59
59
|
address = address[0..address.length - 2] while Helper.mensure_text(@pdf, "#{address.strip}...") > MAXIMUM_SIZE_FOR_STREET && !address.empty?
|
@@ -2,9 +2,13 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class DetBody
|
5
|
+
attr_reader :y_position_with_entrega
|
6
|
+
|
5
7
|
def initialize(pdf, xml)
|
6
8
|
@pdf = pdf
|
7
9
|
@xml = xml
|
10
|
+
|
11
|
+
@y_position_with_entrega = Entrega.delivery_local?(@xml) ? 3.00 : 0.00
|
8
12
|
end
|
9
13
|
|
10
14
|
def render(has_issqn)
|
@@ -121,7 +125,8 @@ module BrDanfe
|
|
121
125
|
end
|
122
126
|
|
123
127
|
def table_position_on_first_page
|
124
|
-
|
128
|
+
y_position = @y_position_with_entrega.cm + 18.07.cm
|
129
|
+
Helper.invert(y_position)
|
125
130
|
end
|
126
131
|
|
127
132
|
def table_position_on_next_pages
|
@@ -2,21 +2,25 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class Dup
|
5
|
-
|
5
|
+
attr_reader :y_position
|
6
|
+
|
7
|
+
Y_POSITION = 12.92
|
6
8
|
|
7
9
|
def initialize(pdf, xml)
|
8
10
|
@pdf = pdf
|
9
11
|
@xml = xml
|
10
12
|
|
11
|
-
@
|
13
|
+
@y_position = Entrega.delivery_local?(@xml) ? Y_POSITION + 3.00 : Y_POSITION
|
14
|
+
|
15
|
+
@ltitle = @y_position - 0.42
|
12
16
|
end
|
13
17
|
|
14
18
|
def render
|
15
19
|
@pdf.ititle 0.42, 10.00, 0.75, @ltitle, 'dup.title'
|
16
|
-
@pdf.ibox 0.85, 19.57, 0.75,
|
20
|
+
@pdf.ibox 0.85, 19.57, 0.75, @y_position
|
17
21
|
|
18
22
|
x = 0.75
|
19
|
-
y =
|
23
|
+
y = @y_position
|
20
24
|
@xml.collect('xmlns', 'dup') do |det|
|
21
25
|
render_dup(det, x, y)
|
22
26
|
x += 2.30
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module BrDanfe
|
2
|
+
module DanfeLib
|
3
|
+
module NfeLib
|
4
|
+
class Entrega
|
5
|
+
Y_POSITION = 12.92
|
6
|
+
MAXIMUM_SIZE_FOR_STREET = 319
|
7
|
+
|
8
|
+
def initialize(pdf, xml)
|
9
|
+
@pdf = pdf
|
10
|
+
@xml = xml
|
11
|
+
|
12
|
+
@y_position = Y_POSITION
|
13
|
+
@ltitle = @y_position - 0.42
|
14
|
+
@l1 = @y_position
|
15
|
+
@l2 = @y_position + LINE_HEIGHT
|
16
|
+
@l3 = @y_position + (LINE_HEIGHT * 2)
|
17
|
+
end
|
18
|
+
|
19
|
+
def render
|
20
|
+
if Entrega.delivery_local?(@xml)
|
21
|
+
@pdf.ititle 0.42, 10.00, 0.75, @ltitle, 'entrega.title'
|
22
|
+
render_line1
|
23
|
+
render_line2
|
24
|
+
render_line3
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.delivery_local?(xml)
|
29
|
+
doc = xml.is_a?(BrDanfe::XML) ? xml : Nokogiri::XML(xml)
|
30
|
+
doc.css('entrega/xLgr').text.present?
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def render_line1
|
36
|
+
@pdf.lbox LINE_HEIGHT, 11.82, 0.75, @l1, @xml, 'entrega/xNome'
|
37
|
+
render_cnpj_cpf
|
38
|
+
@pdf.lie LINE_HEIGHT, 2.92, 17.40, @l1, @xml, 'entrega/UF', 'entrega/IE'
|
39
|
+
end
|
40
|
+
|
41
|
+
def render_cnpj_cpf
|
42
|
+
if @xml['entrega/CNPJ'] == ''
|
43
|
+
@pdf.i18n_lbox LINE_HEIGHT, 4.37, 12.57, @l1, 'entrega.CPF', cpf
|
44
|
+
else
|
45
|
+
@pdf.lcnpj LINE_HEIGHT, 4.37, 12.57, @l1, @xml, 'entrega/CNPJ'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def cpf
|
50
|
+
cpf = BrDocuments::CnpjCpf::Cpf.new(@xml['entrega/CPF'])
|
51
|
+
cpf.formatted
|
52
|
+
end
|
53
|
+
|
54
|
+
def render_line2
|
55
|
+
@pdf.i18n_lbox LINE_HEIGHT, 11.82, 0.75, @l2, 'entrega.xLgr', address
|
56
|
+
@pdf.lbox LINE_HEIGHT, 4.37, 12.57, @l2, @xml, 'entrega/xBairro'
|
57
|
+
@pdf.i18n_lbox LINE_HEIGHT, 2.92, 17.40, @l2, 'entrega.CEP', cep
|
58
|
+
end
|
59
|
+
|
60
|
+
def address
|
61
|
+
address = Helper.generate_address @xml, 'entrega'
|
62
|
+
|
63
|
+
if Helper.address_is_too_big(@pdf, address)
|
64
|
+
address = address[0..address.length - 2] while Helper.mensure_text(@pdf, "#{address.strip}...") > MAXIMUM_SIZE_FOR_STREET && !address.empty?
|
65
|
+
address = "#{address.strip}..."
|
66
|
+
end
|
67
|
+
address
|
68
|
+
end
|
69
|
+
|
70
|
+
def cep
|
71
|
+
BrDanfe::Helper.format_cep(@xml['entrega/CEP'])
|
72
|
+
end
|
73
|
+
|
74
|
+
def render_line3
|
75
|
+
@pdf.lbox LINE_HEIGHT, 15.05, 0.75, @l3, @xml, 'entrega/xMun'
|
76
|
+
@pdf.lbox LINE_HEIGHT, 1.14, 15.8, @l3, @xml, 'entrega/UF'
|
77
|
+
@pdf.i18n_lbox LINE_HEIGHT, 2.92, 17.40, @l3, 'entrega.fone', phone
|
78
|
+
end
|
79
|
+
|
80
|
+
def phone
|
81
|
+
Phone.format(@xml['entrega/fone'])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -38,10 +38,10 @@ module BrDanfe
|
|
38
38
|
Helper.mensure_text(pdf, address) > Dest::MAXIMUM_SIZE_FOR_STREET
|
39
39
|
end
|
40
40
|
|
41
|
-
def self.generate_address(xml)
|
42
|
-
address_complement = " - #{xml_text(xml,
|
43
|
-
address_number = " #{xml_text(xml,
|
44
|
-
"#{xml_text(xml,
|
41
|
+
def self.generate_address(xml, path)
|
42
|
+
address_complement = " - #{xml_text(xml, "#{path}/xCpl")}" if xml_text(xml, "#{path}/xCpl").present?
|
43
|
+
address_number = " #{xml_text(xml, "#{path}/nro")}" if xml_text(xml, "#{path}/nro").present?
|
44
|
+
"#{xml_text(xml, "#{path}/xLgr")}#{address_number}#{address_complement}"
|
45
45
|
end
|
46
46
|
|
47
47
|
def self.xml_text(xml, property)
|
@@ -2,15 +2,19 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class Icmstot
|
5
|
-
|
5
|
+
attr_reader :y_position
|
6
|
+
|
7
|
+
Y_POSITION = 13.77 + SPACE_BETWEEN_GROUPS
|
6
8
|
|
7
9
|
def initialize(pdf, xml)
|
8
10
|
@pdf = pdf
|
9
11
|
@xml = xml
|
10
12
|
|
11
|
-
@
|
12
|
-
|
13
|
-
@
|
13
|
+
@y_position = Entrega.delivery_local?(@xml) ? Y_POSITION + 3.00 : Y_POSITION
|
14
|
+
|
15
|
+
@ltitle = @y_position - 0.42
|
16
|
+
@l1 = @y_position
|
17
|
+
@l2 = @y_position + LINE_HEIGHT
|
14
18
|
end
|
15
19
|
|
16
20
|
def render
|
@@ -44,7 +44,6 @@ module BrDanfe
|
|
44
44
|
additional_data.push(address_content) if address?
|
45
45
|
additional_data.push(difal_content) if difal?
|
46
46
|
additional_data.push(fisco_content) if fisco?
|
47
|
-
additional_data.push(address_shipment) if shipment?
|
48
47
|
additional_data.join(' * ')
|
49
48
|
end
|
50
49
|
|
@@ -57,11 +56,11 @@ module BrDanfe
|
|
57
56
|
end
|
58
57
|
|
59
58
|
def address_content
|
60
|
-
"Endereço: #{Helper.generate_address @xml}"
|
59
|
+
"Endereço: #{Helper.generate_address @xml, 'enderDest'}"
|
61
60
|
end
|
62
61
|
|
63
62
|
def address?
|
64
|
-
Helper.address_is_too_big @pdf, Helper.generate_address(@xml)
|
63
|
+
Helper.address_is_too_big @pdf, Helper.generate_address(@xml, 'enderDest')
|
65
64
|
end
|
66
65
|
|
67
66
|
def difal_content
|
@@ -77,21 +76,6 @@ module BrDanfe
|
|
77
76
|
BrDanfe::Helper.numerify(value) if value != ''
|
78
77
|
end
|
79
78
|
|
80
|
-
def shipment?
|
81
|
-
@xml['entrega'].present?
|
82
|
-
end
|
83
|
-
|
84
|
-
def address_shipment
|
85
|
-
street = @xml['entrega/xLgr'].to_s
|
86
|
-
number = @xml['entrega/nro'].to_s
|
87
|
-
complement = @xml['entrega/xCpl'].to_s
|
88
|
-
neighborhood = @xml['entrega/xBairro'].to_s
|
89
|
-
city = @xml['entrega/xMun'].to_s
|
90
|
-
uf = @xml['entrega/UF'].to_s
|
91
|
-
|
92
|
-
"Endereço de entrega: #{street}, nº #{number} - #{neighborhood} - #{city} - #{uf} - #{complement}"
|
93
|
-
end
|
94
|
-
|
95
79
|
def difal?
|
96
80
|
value = @xml['ICMSTot/vICMSUFDest'].presence || '0.0'
|
97
81
|
BigDecimal(value).positive?
|
@@ -114,7 +98,7 @@ module BrDanfe
|
|
114
98
|
end
|
115
99
|
|
116
100
|
def additional_data?
|
117
|
-
complementary? || address? || difal? || fisco?
|
101
|
+
complementary? || address? || difal? || fisco?
|
118
102
|
end
|
119
103
|
|
120
104
|
def render_reserved_fisco
|
@@ -2,14 +2,16 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class Issqn
|
5
|
+
attr_reader :y_position
|
6
|
+
|
5
7
|
Y_POSITION = 25.72 + SPACE_BETWEEN_GROUPS
|
6
8
|
|
7
9
|
def initialize(pdf, xml)
|
8
10
|
@pdf = pdf
|
9
11
|
@xml = xml
|
10
12
|
|
11
|
-
@
|
12
|
-
@
|
13
|
+
@y_position = Entrega.delivery_local?(@xml) ? Y_POSITION + 3.00 : Y_POSITION
|
14
|
+
@title = @y_position - 0.42
|
13
15
|
|
14
16
|
@serv = 'total/ISSQNtot/vServ'
|
15
17
|
@bc = 'total/ISSQNtot/vBC'
|
@@ -2,15 +2,19 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class Transp
|
5
|
-
|
5
|
+
attr_reader :y_position
|
6
|
+
|
7
|
+
Y_POSITION = 15.89 + SPACE_BETWEEN_GROUPS
|
6
8
|
|
7
9
|
def initialize(pdf, xml)
|
8
10
|
@pdf = pdf
|
9
11
|
@xml = xml
|
10
12
|
|
11
|
-
@
|
12
|
-
|
13
|
-
@
|
13
|
+
@y_position = Entrega.delivery_local?(@xml) ? Y_POSITION + 3.00 : Y_POSITION
|
14
|
+
|
15
|
+
@ltitle = @y_position - 0.42
|
16
|
+
@l1 = @y_position
|
17
|
+
@l2 = @y_position + LINE_HEIGHT
|
14
18
|
end
|
15
19
|
|
16
20
|
def render
|
@@ -2,13 +2,17 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
module NfeLib
|
4
4
|
class Vol
|
5
|
-
|
5
|
+
attr_reader :y_position
|
6
|
+
|
7
|
+
Y_POSITION = 18.01
|
6
8
|
|
7
9
|
def initialize(pdf, xml)
|
8
10
|
@pdf = pdf
|
9
11
|
@xml = xml
|
10
12
|
|
11
|
-
@
|
13
|
+
@y_position = Entrega.delivery_local?(@xml) ? Y_POSITION + 3.00 : Y_POSITION
|
14
|
+
|
15
|
+
@l1 = @y_position
|
12
16
|
end
|
13
17
|
|
14
18
|
def render
|
data/lib/br_danfe/version.rb
CHANGED
@@ -418,6 +418,79 @@ describe BrDanfe::DanfeLib::NfeLib::DetBody do
|
|
418
418
|
end
|
419
419
|
end
|
420
420
|
|
421
|
+
context 'with entrega' do
|
422
|
+
let(:products) do
|
423
|
+
<<~XML
|
424
|
+
<det nItem="1">
|
425
|
+
<prod>
|
426
|
+
<cProd>REF 06</cProd>
|
427
|
+
<xProd>Produto com FCI</xProd>
|
428
|
+
<NCM>90303329</NCM>
|
429
|
+
<EXTIPI>00</EXTIPI>
|
430
|
+
<CFOP>5101</cfop>
|
431
|
+
<uCom>PC</uCom>
|
432
|
+
<qCom>1.00</qCom>
|
433
|
+
<vUnCom>49.23</vUnCom>
|
434
|
+
<vProd>49.23</vProd>
|
435
|
+
</prod>
|
436
|
+
<imposto>
|
437
|
+
<ICMS>
|
438
|
+
<ICMS00>
|
439
|
+
<orig>0</orig>
|
440
|
+
<CST>00</CST>
|
441
|
+
<modBC>3</modBC>
|
442
|
+
<vBC>49.23</vBC>
|
443
|
+
<pICMS>12.00</pICMS>
|
444
|
+
<vICMS>5.90</vICMS>
|
445
|
+
</ICMS00>
|
446
|
+
</ICMS>
|
447
|
+
<IPI>
|
448
|
+
<cEnq>999</cEnq>
|
449
|
+
<IPITrib>
|
450
|
+
<CST>50</CST>
|
451
|
+
<vBC>49.23</vBC>
|
452
|
+
<pIPI>5.00</pIPI>
|
453
|
+
<vIPI>2.46</vIPI>
|
454
|
+
</IPITrib>
|
455
|
+
</IPI>
|
456
|
+
</imposto>
|
457
|
+
</det>
|
458
|
+
XML
|
459
|
+
end
|
460
|
+
|
461
|
+
let(:xml_as_string) do
|
462
|
+
<<~XML
|
463
|
+
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
|
464
|
+
<infNFe Id="NFe25111012345678901234550020000134151000134151" versao="2.00">
|
465
|
+
#{products}
|
466
|
+
<entrega>
|
467
|
+
<CNPJ>82743287000880</CNPJ>
|
468
|
+
<xNome>Schneider Electric Brasil Ltda</xNome>
|
469
|
+
<xLgr>Av da Saudade</xLgr>
|
470
|
+
<nro>1125</nro>
|
471
|
+
<xBairro>Frutal</xBairro>
|
472
|
+
<xCpl>Sala 01 e 02</xCpl>
|
473
|
+
<cMun>3552403</cMun>
|
474
|
+
<xMun>SUMARE</xMun>
|
475
|
+
<UF>SP</UF>
|
476
|
+
<CEP>13171320</CEP>
|
477
|
+
<fone>1921046300</fone>
|
478
|
+
<IE>671008375110</IE>
|
479
|
+
</entrega>
|
480
|
+
</infNFe>
|
481
|
+
</NFe>
|
482
|
+
XML
|
483
|
+
end
|
484
|
+
|
485
|
+
it 'renders xml to the pdf' do
|
486
|
+
expect(File.exist?(output_pdf)).to be_falsey
|
487
|
+
|
488
|
+
pdf.render_file output_pdf
|
489
|
+
|
490
|
+
expect("#{base_dir}det_body#render-with_entrega.pdf").to have_same_content_of file: output_pdf
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
421
494
|
context 'when the product table occupies more than one page' do
|
422
495
|
context 'when the product table occupies two pages' do
|
423
496
|
let(:products) { ("#{product_1}\n#{product_2}" * 22) + "\n#{product_1}" }
|
@@ -48,5 +48,55 @@ describe BrDanfe::DanfeLib::NfeLib::Dup do
|
|
48
48
|
|
49
49
|
expect("#{base_dir}dup#render.pdf").to have_same_content_of file: output_pdf
|
50
50
|
end
|
51
|
+
|
52
|
+
describe 'with entrega' do
|
53
|
+
let(:xml_as_string) do
|
54
|
+
<<~XML
|
55
|
+
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
|
56
|
+
<infNFe Id="NFe25111012345678901234550020000134151000134151" versao="2.00">
|
57
|
+
<cobr>
|
58
|
+
<dup>
|
59
|
+
<nDup>1</nDup>
|
60
|
+
<dVenc>2015-02-13</dVenc>
|
61
|
+
<vDup>25.56</vDup>
|
62
|
+
</dup>
|
63
|
+
<dup>
|
64
|
+
<nDup>2</nDup>
|
65
|
+
<dVenc>2015-03-15</dVenc>
|
66
|
+
<vDup>25.56</vDup>
|
67
|
+
</dup>
|
68
|
+
<dup>
|
69
|
+
<nDup>3</nDup>
|
70
|
+
<dVenc>2015-04-14</dVenc>
|
71
|
+
<vDup>25.55</vDup>
|
72
|
+
</dup>
|
73
|
+
</cobr>
|
74
|
+
<entrega>
|
75
|
+
<CNPJ>82743287000880</CNPJ>
|
76
|
+
<xNome>Schneider Electric Brasil Ltda</xNome>
|
77
|
+
<xLgr>Av da Saudade</xLgr>
|
78
|
+
<nro>1125</nro>
|
79
|
+
<xBairro>Frutal</xBairro>
|
80
|
+
<xCpl>Sala 01 e 02</xCpl>
|
81
|
+
<cMun>3552403</cMun>
|
82
|
+
<xMun>SUMARE</xMun>
|
83
|
+
<UF>SP</UF>
|
84
|
+
<CEP>13171320</CEP>
|
85
|
+
<fone>1921046300</fone>
|
86
|
+
<IE>671008375110</IE>
|
87
|
+
</entrega>
|
88
|
+
</infNFe>
|
89
|
+
</NFe>
|
90
|
+
XML
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'renders xml to the pdf' do
|
94
|
+
expect(File.exist?(output_pdf)).to be_falsey
|
95
|
+
|
96
|
+
pdf.render_file output_pdf
|
97
|
+
|
98
|
+
expect("#{base_dir}dup#render-with_entrega.pdf").to have_same_content_of file: output_pdf
|
99
|
+
end
|
100
|
+
end
|
51
101
|
end
|
52
102
|
end
|