br_danfe 0.11.1 → 0.11.2
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 -0
- data/.rubocop.yml +113 -0
- data/Gemfile.lock +40 -19
- data/Rakefile +3 -3
- data/br_danfe.gemspec +7 -7
- data/lib/br_danfe.rb +14 -14
- data/lib/br_danfe/cce.rb +1 -0
- data/lib/br_danfe/cce_lib/barcode.rb +3 -2
- data/lib/br_danfe/cce_lib/correction.rb +3 -2
- data/lib/br_danfe/cce_lib/document.rb +15 -5
- data/lib/br_danfe/cce_lib/footer.rb +1 -1
- data/lib/br_danfe/cce_lib/header.rb +1 -1
- data/lib/br_danfe/cce_lib/nfe_key.rb +4 -3
- data/lib/br_danfe/cce_lib/protocol.rb +4 -3
- data/lib/br_danfe/danfe.rb +17 -17
- data/lib/br_danfe/danfe_lib/cep.rb +1 -1
- data/lib/br_danfe/danfe_lib/cst.rb +8 -6
- data/lib/br_danfe/danfe_lib/dest.rb +21 -23
- data/lib/br_danfe/danfe_lib/det_body.rb +20 -20
- data/lib/br_danfe/danfe_lib/document.rb +49 -36
- data/lib/br_danfe/danfe_lib/dup.rb +11 -10
- data/lib/br_danfe/danfe_lib/emit_header.rb +38 -34
- data/lib/br_danfe/danfe_lib/helper.rb +23 -23
- data/lib/br_danfe/danfe_lib/icmstot.rb +12 -12
- data/lib/br_danfe/danfe_lib/infadic.rb +1 -0
- data/lib/br_danfe/danfe_lib/issqn.rb +6 -6
- data/lib/br_danfe/danfe_lib/options.rb +6 -5
- data/lib/br_danfe/danfe_lib/phone.rb +2 -2
- data/lib/br_danfe/danfe_lib/ticket.rb +6 -4
- data/lib/br_danfe/danfe_lib/transp.rb +27 -26
- data/lib/br_danfe/danfe_lib/vol.rb +9 -8
- data/lib/br_danfe/danfe_lib/xml.rb +6 -6
- data/lib/br_danfe/danfe_lib/xprod.rb +22 -23
- data/lib/br_danfe/uf.rb +1 -4
- data/lib/br_danfe/version.rb +1 -1
- data/spec/features/cce_spec.rb +6 -6
- data/spec/features/danfe_spec.rb +25 -25
- data/spec/fixtures/cce/lib/barcode#render.pdf +5 -1
- data/spec/fixtures/cce/lib/correction#render.pdf +6 -2
- data/spec/fixtures/cce/lib/document#box.pdf +5 -1
- data/spec/fixtures/cce/lib/document#box.with.block.pdf +6 -2
- data/spec/fixtures/cce/lib/document#text.align.pdf +6 -2
- data/spec/fixtures/cce/lib/document#text.pad.pdf +6 -2
- data/spec/fixtures/cce/lib/document#text.simple.pdf +6 -2
- data/spec/fixtures/cce/lib/document#text.size.pdf +6 -2
- data/spec/fixtures/cce/lib/document#text.style.pdf +6 -2
- data/spec/fixtures/cce/lib/footer#render.pdf +6 -2
- data/spec/fixtures/cce/lib/header#render.pdf +6 -2
- data/spec/fixtures/cce/lib/nfe_key#render.pdf +7 -3
- data/spec/fixtures/cce/lib/protocol#render.pdf +7 -3
- data/spec/fixtures/cce/v1.00/cce.fixture.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-v2.00.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-v3.10.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-v4.00.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-with-address-bigger.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-with_cnpj.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-with_cpf.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-with_ie.pdf +7 -3
- data/spec/fixtures/nfe/lib/dest#render-without-address-complement.pdf +7 -3
- data/spec/fixtures/nfe/lib/det_body#render-csosn.pdf +383 -379
- data/spec/fixtures/nfe/lib/det_body#render-cst.pdf +233 -229
- data/spec/fixtures/nfe/lib/det_body#render-fci.pdf +158 -154
- data/spec/fixtures/nfe/lib/det_body#render-icms_st.pdf +158 -154
- data/spec/fixtures/nfe/lib/det_body#render-quantity_with_custom_precision.pdf +158 -154
- data/spec/fixtures/nfe/lib/det_body#render-three_pages.pdf +3697 -3685
- data/spec/fixtures/nfe/lib/det_body#render-two_pages.pdf +3540 -3532
- data/spec/fixtures/nfe/lib/det_body#render-unit_price_with_custom_precision.pdf +158 -154
- data/spec/fixtures/nfe/lib/det_body#render-with_infadprod.pdf +158 -154
- data/spec/fixtures/nfe/lib/det_body#render-with_issqn.pdf +1665 -1657
- data/spec/fixtures/nfe/lib/det_body#render-without_issqn.pdf +1665 -1657
- data/spec/fixtures/nfe/lib/document#lcnpj-blank.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lcnpj-invalid.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lcnpj-valid.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lie-blank-uf-invalid.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lie-blank.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lie-invalid.pdf +6 -2
- data/spec/fixtures/nfe/lib/document#lie-valid.pdf +6 -2
- data/spec/fixtures/nfe/lib/dup#render.pdf +8 -4
- data/spec/fixtures/nfe/lib/emit_header#render-second_page.pdf +9 -5
- data/spec/fixtures/nfe/lib/emit_header#render-with_logo.pdf +9 -5
- data/spec/fixtures/nfe/lib/emit_header#render-without_logo.pdf +7 -3
- data/spec/fixtures/nfe/lib/icmstot#render.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic#render-all_the_informations.pdf +8 -4
- data/spec/fixtures/nfe/lib/infadic#render-difal.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic#render-extra_volume.pdf +8 -4
- data/spec/fixtures/nfe/lib/infadic#render-with_complementary_information.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic#render-with_fisco_additional_information.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic#render-with_street_data.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic#render.pdf +7 -3
- data/spec/fixtures/nfe/lib/infadic_vol#render-extra_volume.pdf +7 -3
- data/spec/fixtures/nfe/lib/issqn#render-with_issqn.pdf +7 -3
- data/spec/fixtures/nfe/lib/issqn#render-with_one_issqn_value.pdf +7 -3
- data/spec/fixtures/nfe/lib/issqn#render-without_issqn.pdf +5 -1
- data/spec/fixtures/nfe/lib/ticket#render.pdf +6 -2
- data/spec/fixtures/nfe/lib/transp#render-modfrete_0.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render-modfrete_1.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render-modfrete_2.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render-modfrete_3.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render-modfrete_4.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render-modfrete_9.pdf +7 -3
- data/spec/fixtures/nfe/lib/transp#render.pdf +7 -3
- data/spec/fixtures/nfe/lib/vol#render-blank-boxes.pdf +6 -2
- data/spec/fixtures/nfe/lib/vol#render.pdf +6 -2
- data/spec/fixtures/nfe/v2.00/custom_options.fixture.pdf +317 -313
- data/spec/fixtures/nfe/v2.00/nfe_simples_nacional.xml.fixture.pdf +315 -311
- data/spec/fixtures/nfe/v2.00/nfe_with_extra_volumes.xml.fixture.pdf +1297 -1289
- data/spec/fixtures/nfe/v2.00/nfe_with_fci.xml.fixture.pdf +165 -161
- data/spec/fixtures/nfe/v2.00/nfe_with_ns.xml.fixture.pdf +1297 -1289
- data/spec/fixtures/nfe/v2.00/nfe_without_ns.xml.fixture.pdf +314 -310
- data/spec/fixtures/nfe/v3.10/nfe_simples_nacional.xml.fixture.pdf +765 -761
- data/spec/fixtures/nfe/v3.10/with_footer.fixture.pdf +1222 -1214
- data/spec/fixtures/nfe/v3.10/with_issqn.fixture.pdf +1222 -1214
- data/spec/fixtures/nfe/v3.10/with_three_pages.fixture.pdf +4004 -3992
- data/spec/fixtures/nfe/v3.10/without_issqn.fixture.pdf +1522 -1514
- data/spec/lib/cce_lib/barcode_spec.rb +5 -5
- data/spec/lib/cce_lib/correction_spec.rb +5 -5
- data/spec/lib/cce_lib/document_spec.rb +23 -23
- data/spec/lib/cce_lib/footer_spec.rb +4 -4
- data/spec/lib/cce_lib/header_spec.rb +4 -4
- data/spec/lib/cce_lib/nfe_key_spec.rb +5 -5
- data/spec/lib/cce_lib/protocol_spec.rb +5 -5
- data/spec/lib/danfe_lib/cep_spec.rb +5 -5
- data/spec/lib/danfe_lib/cst_spec.rb +8 -8
- data/spec/lib/danfe_lib/dest_spec.rb +23 -23
- data/spec/lib/danfe_lib/det_body_spec.rb +26 -26
- data/spec/lib/danfe_lib/document_spec.rb +25 -25
- data/spec/lib/danfe_lib/dup_spec.rb +4 -4
- data/spec/lib/danfe_lib/emit_header_spec.rb +13 -13
- data/spec/lib/danfe_lib/helper_spec.rb +74 -74
- data/spec/lib/danfe_lib/icmstot_spec.rb +4 -4
- data/spec/lib/danfe_lib/infadic_spec.rb +6 -13
- data/spec/lib/danfe_lib/infadic_vol_spec.rb +1 -4
- data/spec/lib/danfe_lib/issqn_spec.rb +11 -11
- data/spec/lib/danfe_lib/logo_options_spec.rb +18 -18
- data/spec/lib/danfe_lib/options_spec.rb +7 -7
- data/spec/lib/danfe_lib/phone_spec.rb +10 -10
- data/spec/lib/danfe_lib/plate_spec.rb +9 -9
- data/spec/lib/danfe_lib/ticket_spec.rb +4 -4
- data/spec/lib/danfe_lib/transp_spec.rb +10 -10
- data/spec/lib/danfe_lib/vol_spec.rb +7 -7
- data/spec/lib/danfe_lib/xml_spec.rb +5 -5
- data/spec/lib/danfe_lib/xprod_spec.rb +48 -50
- data/spec/lib/uf_spec.rb +12 -12
- data/spec/support/have_same_content_of.rb +6 -6
- metadata +40 -10
@@ -11,32 +11,33 @@ module BrDanfe
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def render
|
14
|
-
@pdf.ititle 0.42, 10.00, 0.75, @ltitle,
|
14
|
+
@pdf.ititle 0.42, 10.00, 0.75, @ltitle, 'dup.title'
|
15
15
|
@pdf.ibox 0.85, 19.57, 0.75, Y
|
16
16
|
|
17
17
|
x = 0.75
|
18
18
|
y = Y
|
19
|
-
@xml.collect(
|
19
|
+
@xml.collect('xmlns', 'dup') do |det|
|
20
20
|
render_dup(det, x, y)
|
21
21
|
x += 2.30
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
|
+
|
26
27
|
def render_dup(det, x, y)
|
27
|
-
@pdf.ibox 0.85, 2.12, x, y,
|
28
|
-
@pdf.ibox 0.85, 2.12, x + 0.70, y,
|
29
|
-
@pdf.ibox 0.85, 2.12, x, y + 0.20,
|
28
|
+
@pdf.ibox 0.85, 2.12, x, y, '', I18n.t('danfe.dup.nDup'), italic
|
29
|
+
@pdf.ibox 0.85, 2.12, x + 0.70, y, '', det.css('nDup').text, normal
|
30
|
+
@pdf.ibox 0.85, 2.12, x, y + 0.20, '', I18n.t('danfe.dup.dVenc'), italic
|
30
31
|
|
31
|
-
@pdf.ibox 0.85, 2.12, x + 0.70, y + 0.20,
|
32
|
+
@pdf.ibox 0.85, 2.12, x + 0.70, y + 0.20, '', dtduplicata(det), normal
|
32
33
|
|
33
|
-
@pdf.ibox 0.85, 2.12, x, y + 0.40,
|
34
|
-
@pdf.inumeric 0.85, 1.25, x + 0.70, y + 0.40,
|
34
|
+
@pdf.ibox 0.85, 2.12, x, y + 0.40, '', I18n.t('danfe.dup.vDup'), italic
|
35
|
+
@pdf.inumeric 0.85, 1.25, x + 0.70, y + 0.40, '', det.css('vDup').text, normal
|
35
36
|
end
|
36
37
|
|
37
38
|
def dtduplicata(det)
|
38
|
-
dtduplicata = det.css(
|
39
|
-
dtduplicata = dtduplicata[8,2] +
|
39
|
+
dtduplicata = det.css('dVenc').text
|
40
|
+
dtduplicata = dtduplicata[8, 2] + '/' + dtduplicata[5, 2] + '/' + dtduplicata[0, 4]
|
40
41
|
dtduplicata
|
41
42
|
end
|
42
43
|
|
@@ -21,42 +21,44 @@ module BrDanfe
|
|
21
21
|
|
22
22
|
def company_box
|
23
23
|
@pdf.ibox 3.92, 7.46, 0.75, @y_position
|
24
|
-
@pdf.ibox 3.92, 7.46, 0.75, @y_position,
|
25
|
-
|
24
|
+
@pdf.ibox 3.92, 7.46, 0.75, @y_position, '', @xml['emit/xNome'],
|
25
|
+
{ size: 12, align: :center, border: 0, style: :bold }
|
26
26
|
|
27
27
|
address_company
|
28
28
|
end
|
29
29
|
|
30
30
|
def address_company
|
31
31
|
if @logo.blank?
|
32
|
-
@pdf.ibox 3.92, 7.46, 1.25, @y_position + 1.46,
|
32
|
+
@pdf.ibox 3.92, 7.46, 1.25, @y_position + 1.46, '', address, { align: :left, border: 0 }
|
33
33
|
else
|
34
|
-
@pdf.ibox 3.92, 7.46, 3.60, @y_position + 1.46,
|
34
|
+
@pdf.ibox 3.92, 7.46, 3.60, @y_position + 1.46, '', address, { size: 8, align: :left, border: 0 }
|
35
35
|
logo
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
def address
|
40
|
-
formatted = @xml[
|
41
|
-
formatted += @xml[
|
42
|
-
formatted += @xml[
|
43
|
-
formatted += phone +
|
40
|
+
formatted = @xml['enderEmit/xLgr'] + ', ' + @xml['enderEmit/nro'] + "\n"
|
41
|
+
formatted += @xml['enderEmit/xBairro'] + ' - ' + cep + "\n"
|
42
|
+
formatted += @xml['enderEmit/xMun'] + '/' + @xml['enderEmit/UF'] + "\n"
|
43
|
+
formatted += phone + ' ' + @xml['enderEmit/email']
|
44
44
|
formatted
|
45
45
|
end
|
46
46
|
|
47
47
|
def phone
|
48
|
-
Phone.format(@xml[
|
48
|
+
Phone.format(@xml['enderEmit/fone'])
|
49
49
|
end
|
50
50
|
|
51
51
|
def cep
|
52
|
-
Cep.format(@xml[
|
52
|
+
Cep.format(@xml['enderEmit/CEP'])
|
53
53
|
end
|
54
54
|
|
55
55
|
def logo
|
56
56
|
bounding_box_size = 80
|
57
57
|
logo_options = BrDanfe::DanfeLib::LogoOptions.new(bounding_box_size, @logo_dimensions).options
|
58
58
|
|
59
|
-
@pdf.bounding_box(
|
59
|
+
@pdf.bounding_box(
|
60
|
+
[0.83.cm, Helper.invert(@y_position.cm + 1.02.cm)], width: bounding_box_size, height: bounding_box_size
|
61
|
+
) do
|
60
62
|
@pdf.image @logo, logo_options
|
61
63
|
end
|
62
64
|
end
|
@@ -64,47 +66,49 @@ module BrDanfe
|
|
64
66
|
def danfe_box(page)
|
65
67
|
@pdf.ibox 3.92, 2.08, 8.21, @y_position
|
66
68
|
|
67
|
-
@pdf.ibox 0.60, 2.08, 8.21, @y_position,
|
68
|
-
|
69
|
+
@pdf.ibox 0.60, 2.08, 8.21, @y_position, '', 'DANFE',
|
70
|
+
{ size: 12, align: :center, border: 0, style: :bold }
|
69
71
|
|
70
|
-
@pdf.ibox 1.20, 2.08, 8.21, @y_position + 0.60,
|
71
|
-
|
72
|
+
@pdf.ibox 1.20, 2.08, 8.21, @y_position + 0.60, '', I18n.t('danfe.others.danfe'),
|
73
|
+
{ size: 8, align: :center, border: 0 }
|
72
74
|
|
73
|
-
@pdf.ibox 0.60, 2.08, 8.21, @y_position + 1.80,
|
74
|
-
|
75
|
+
@pdf.ibox 0.60, 2.08, 8.21, @y_position + 1.80, '',
|
76
|
+
"#{@xml['ide/tpNF']} - " +
|
77
|
+
(@xml['ide/tpNF'] == '0' ? I18n.t('danfe.ide.tpNF.entry') : I18n.t('danfe.ide.tpNF.departure')),
|
78
|
+
{ size: 8, align: :center, border: 0 }
|
75
79
|
|
76
|
-
@pdf.ibox 1.00, 2.08, 8.21, @y_position + 2.40,
|
77
|
-
|
78
|
-
|
80
|
+
@pdf.ibox 1.00, 2.08, 8.21, @y_position + 2.40, '',
|
81
|
+
I18n.t('danfe.ide.document', nNF: @xml['ide/nNF'], serie: @xml['ide/serie']),
|
82
|
+
{ size: 8, align: :center, valign: :center, border: 0, style: :bold }
|
79
83
|
|
80
|
-
@pdf.ibox 1.00, 2.08, 8.21, @y_position + 3.00,
|
81
|
-
|
82
|
-
|
84
|
+
@pdf.ibox 1.00, 2.08, 8.21, @y_position + 3.00, '',
|
85
|
+
I18n.t('danfe.others.page', current: page, total: @pdf.page_count),
|
86
|
+
{ size: 8, align: :center, valign: :center, border: 0, style: :bold }
|
83
87
|
end
|
84
88
|
|
85
89
|
def access_key_box
|
86
90
|
@pdf.ibox 2.22, 10.02, 10.29, @y_position
|
87
|
-
@pdf.ibarcode 1.50, 8.00, 10.4010, @y_position + 1.90, @xml[
|
88
|
-
@pdf.ibox 0.85, 10.02, 10.29, @y_position + 2.22, I18n.t(
|
89
|
-
|
91
|
+
@pdf.ibarcode 1.50, 8.00, 10.4010, @y_position + 1.90, @xml['chNFe']
|
92
|
+
@pdf.ibox 0.85, 10.02, 10.29, @y_position + 2.22, I18n.t('danfe.chNFe'),
|
93
|
+
@xml['chNFe'].gsub(/(\d)(?=(\d\d\d\d)+(?!\d))/, '\\1 '), { style: :bold, align: :center }
|
90
94
|
end
|
91
95
|
|
92
96
|
def sefaz_box
|
93
|
-
@pdf.ibox 0.85, 10.02, 10.29, @y_position + 3.07,
|
94
|
-
|
97
|
+
@pdf.ibox 0.85, 10.02, 10.29, @y_position + 3.07, '', I18n.t('danfe.others.sefaz'),
|
98
|
+
{ align: :center, size: 8 }
|
95
99
|
end
|
96
100
|
|
97
101
|
def render_emit(y_position)
|
98
102
|
y_first_line = y_position + 3.92
|
99
103
|
y_second_line = y_first_line + LINE_HEIGHT
|
100
104
|
|
101
|
-
@pdf.lbox LINE_HEIGHT, 10.04, 0.75, y_first_line, @xml,
|
102
|
-
@pdf.ibox LINE_HEIGHT, 9.52, 10.79, y_first_line, I18n.t(
|
103
|
-
|
105
|
+
@pdf.lbox LINE_HEIGHT, 10.04, 0.75, y_first_line, @xml, 'ide/natOp'
|
106
|
+
@pdf.ibox LINE_HEIGHT, 9.52, 10.79, y_first_line, I18n.t('danfe.infProt'),
|
107
|
+
"#{@xml['infProt/nProt']} #{Helper.format_datetime(@xml['infProt/dhRecbto'])}", { align: :center }
|
104
108
|
|
105
|
-
@pdf.lie LINE_HEIGHT, 6.36, 0.75, y_second_line, @xml,
|
106
|
-
@pdf.lie LINE_HEIGHT, 6.86, 7.11, y_second_line, @xml,
|
107
|
-
@pdf.lcnpj LINE_HEIGHT, 6.34, 13.97, y_second_line, @xml,
|
109
|
+
@pdf.lie LINE_HEIGHT, 6.36, 0.75, y_second_line, @xml, 'enderEmit/UF', 'emit/IE'
|
110
|
+
@pdf.lie LINE_HEIGHT, 6.86, 7.11, y_second_line, @xml, 'enderDest/UF', 'emit/IEST'
|
111
|
+
@pdf.lcnpj LINE_HEIGHT, 6.34, 13.97, y_second_line, @xml, 'emit/CNPJ'
|
108
112
|
end
|
109
113
|
end
|
110
114
|
end
|
@@ -2,14 +2,14 @@ module BrDanfe
|
|
2
2
|
module DanfeLib
|
3
3
|
class Helper
|
4
4
|
def self.numerify(number)
|
5
|
-
return
|
5
|
+
return '' if !number || number == ''
|
6
6
|
|
7
|
-
separated_number = number.to_s.split(
|
8
|
-
integer_part = separated_number[0].reverse.gsub(
|
9
|
-
decimal_part = separated_number[1] ||
|
10
|
-
decimal_part
|
7
|
+
separated_number = number.to_s.split('.')
|
8
|
+
integer_part = separated_number[0].reverse.gsub(/\d{3}(?=\d)/, '\&.').reverse
|
9
|
+
decimal_part = separated_number[1] || '00'
|
10
|
+
decimal_part += '0' if decimal_part.size < 2
|
11
11
|
|
12
|
-
integer_part +
|
12
|
+
integer_part + ',' + decimal_part
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.invert(y)
|
@@ -17,50 +17,50 @@ module BrDanfe
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.format_datetime(xml_datetime)
|
20
|
-
formated =
|
20
|
+
formated = ''
|
21
21
|
|
22
|
-
|
23
|
-
date = DateTime.strptime(xml_datetime,
|
24
|
-
formated = date.strftime(
|
22
|
+
unless xml_datetime.empty?
|
23
|
+
date = DateTime.strptime(xml_datetime, '%Y-%m-%dT%H:%M:%S')
|
24
|
+
formated = date.strftime('%d/%m/%Y %H:%M:%S')
|
25
25
|
end
|
26
26
|
|
27
27
|
formated
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.format_date(xml_datetime)
|
31
|
-
formated =
|
31
|
+
formated = ''
|
32
32
|
|
33
|
-
|
34
|
-
date = DateTime.strptime(xml_datetime,
|
35
|
-
formated = date.strftime(
|
33
|
+
unless xml_datetime.empty?
|
34
|
+
date = DateTime.strptime(xml_datetime, '%Y-%m-%d')
|
35
|
+
formated = date.strftime('%d/%m/%Y')
|
36
36
|
end
|
37
37
|
|
38
38
|
formated
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.format_time(xml_datetime)
|
42
|
-
formated =
|
42
|
+
formated = ''
|
43
43
|
|
44
44
|
if xml_datetime.length == 8
|
45
45
|
formated = xml_datetime
|
46
46
|
elsif xml_datetime.length > 8
|
47
|
-
date = DateTime.strptime(xml_datetime,
|
48
|
-
formated = date.strftime(
|
47
|
+
date = DateTime.strptime(xml_datetime, '%Y-%m-%dT%H:%M:%S %Z').to_time
|
48
|
+
formated = date.strftime('%H:%M:%S')
|
49
49
|
end
|
50
50
|
|
51
51
|
formated
|
52
52
|
end
|
53
53
|
|
54
|
-
def self.
|
54
|
+
def self.no_fiscal_value?(xml)
|
55
55
|
homologation?(xml) || unauthorized?(xml)
|
56
56
|
end
|
57
57
|
|
58
58
|
def self.homologation?(xml)
|
59
|
-
xml_text(xml,
|
59
|
+
xml_text(xml, 'nfeProc/NFe/infNFe/ide/tpAmb') == '2'
|
60
60
|
end
|
61
61
|
|
62
62
|
def self.unauthorized?(xml)
|
63
|
-
xml.css(
|
63
|
+
xml.css('nfeProc/protNFe/infProt/dhRecbto').empty?
|
64
64
|
end
|
65
65
|
|
66
66
|
def self.mensure_text(pdf, text)
|
@@ -72,9 +72,9 @@ module BrDanfe
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def self.generate_address(xml)
|
75
|
-
address_complement = " - #{xml_text(xml,
|
76
|
-
address_number = " #{xml_text(xml,
|
77
|
-
"#{xml_text(xml,
|
75
|
+
address_complement = " - #{xml_text(xml, 'enderDest/xCpl')}" if xml_text(xml, 'enderDest/xCpl').present?
|
76
|
+
address_number = " #{xml_text(xml, 'enderDest/nro')}" if xml_text(xml, 'enderDest/nro').present?
|
77
|
+
"#{xml_text(xml, 'enderDest/xLgr')}#{address_number}#{address_complement}"
|
78
78
|
end
|
79
79
|
|
80
80
|
def self.xml_text(xml, property)
|
@@ -13,20 +13,20 @@ module BrDanfe
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def render
|
16
|
-
@pdf.ititle 0.42, 5.60, 0.75, @ltitle,
|
16
|
+
@pdf.ititle 0.42, 5.60, 0.75, @ltitle, 'ICMSTot.title'
|
17
17
|
|
18
|
-
@pdf.lnumeric LINE_HEIGHT, 3.56, 0.75, @l1, @xml,
|
19
|
-
@pdf.lnumeric LINE_HEIGHT, 4.06, 4.31, @l1, @xml,
|
20
|
-
@pdf.lnumeric LINE_HEIGHT, 4.06, 8.37, @l1, @xml,
|
21
|
-
@pdf.lnumeric LINE_HEIGHT, 4.06, 12.43, @l1, @xml,
|
22
|
-
@pdf.lnumeric LINE_HEIGHT, 3.82, 16.49, @l1, @xml,
|
18
|
+
@pdf.lnumeric LINE_HEIGHT, 3.56, 0.75, @l1, @xml, 'ICMSTot/vBC'
|
19
|
+
@pdf.lnumeric LINE_HEIGHT, 4.06, 4.31, @l1, @xml, 'ICMSTot/vICMS'
|
20
|
+
@pdf.lnumeric LINE_HEIGHT, 4.06, 8.37, @l1, @xml, 'ICMSTot/vBCST'
|
21
|
+
@pdf.lnumeric LINE_HEIGHT, 4.06, 12.43, @l1, @xml, 'ICMSTot/vST'
|
22
|
+
@pdf.lnumeric LINE_HEIGHT, 3.82, 16.49, @l1, @xml, 'ICMSTot/vProd'
|
23
23
|
|
24
|
-
@pdf.lnumeric LINE_HEIGHT, 2.55, 0.75, @l2, @xml,
|
25
|
-
@pdf.lnumeric LINE_HEIGHT, 3.05, 3.30, @l2, @xml,
|
26
|
-
@pdf.lnumeric LINE_HEIGHT, 3.04, 6.35, @l2, @xml,
|
27
|
-
@pdf.lnumeric LINE_HEIGHT, 3.04, 9.39, @l2, @xml,
|
28
|
-
@pdf.lnumeric LINE_HEIGHT, 4.06, 12.43, @l2, @xml,
|
29
|
-
@pdf.lnumeric LINE_HEIGHT, 3.82, 16.49, @l2, @xml,
|
24
|
+
@pdf.lnumeric LINE_HEIGHT, 2.55, 0.75, @l2, @xml, 'ICMSTot/vFrete'
|
25
|
+
@pdf.lnumeric LINE_HEIGHT, 3.05, 3.30, @l2, @xml, 'ICMSTot/vSeg'
|
26
|
+
@pdf.lnumeric LINE_HEIGHT, 3.04, 6.35, @l2, @xml, 'ICMSTot/vDesc'
|
27
|
+
@pdf.lnumeric LINE_HEIGHT, 3.04, 9.39, @l2, @xml, 'ICMSTot/vOutro'
|
28
|
+
@pdf.lnumeric LINE_HEIGHT, 4.06, 12.43, @l2, @xml, 'ICMSTot/vIPI'
|
29
|
+
@pdf.lnumeric LINE_HEIGHT, 3.82, 16.49, @l2, @xml, 'ICMSTot/vNF', style: :bold
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -10,15 +10,15 @@ module BrDanfe
|
|
10
10
|
@title = Y_POSITION - 0.42
|
11
11
|
@y_position = Y_POSITION
|
12
12
|
|
13
|
-
@serv =
|
14
|
-
@bc =
|
15
|
-
@iss =
|
13
|
+
@serv = 'total/ISSQNtot/vServ'
|
14
|
+
@bc = 'total/ISSQNtot/vBC'
|
15
|
+
@iss = 'total/ISSQNtot/vISS'
|
16
16
|
end
|
17
17
|
|
18
18
|
def render
|
19
19
|
if can_render?
|
20
|
-
@pdf.ititle 0.42, 10.00, 0.75, @title,
|
21
|
-
@pdf.lbox LINE_HEIGHT, 4.64, 0.75, @y_position, @xml,
|
20
|
+
@pdf.ititle 0.42, 10.00, 0.75, @title, 'issqn.title'
|
21
|
+
@pdf.lbox LINE_HEIGHT, 4.64, 0.75, @y_position, @xml, 'emit/IM'
|
22
22
|
@pdf.lnumeric LINE_HEIGHT, 5.14, 5.39, @y_position, @xml, @serv
|
23
23
|
@pdf.lnumeric LINE_HEIGHT, 5.14, 10.53, @y_position, @xml, @bc
|
24
24
|
@pdf.lnumeric LINE_HEIGHT, 4.64, 15.67, @y_position, @xml, @iss
|
@@ -28,7 +28,7 @@ module BrDanfe
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def can_render?
|
31
|
-
|
31
|
+
@xml[@serv].to_i.positive? || @xml[@bc].to_i.positive? || @xml[@iss].to_i.positive?
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -1,21 +1,22 @@
|
|
1
1
|
module BrDanfe
|
2
2
|
module DanfeLib
|
3
3
|
class Options < OpenStruct
|
4
|
-
DEFAULTOPTIONS = { logo:
|
4
|
+
DEFAULTOPTIONS = { logo: '', logo_dimensions: {} }.freeze
|
5
5
|
|
6
|
-
def initialize(new_options={})
|
6
|
+
def initialize(new_options = {})
|
7
7
|
options = DEFAULTOPTIONS.merge(config_yaml_load)
|
8
8
|
super options.merge(new_options)
|
9
9
|
end
|
10
10
|
|
11
11
|
private
|
12
|
+
|
12
13
|
def file
|
13
|
-
File.
|
14
|
+
File.exist?('config/br_danfe.yml') ? File.open('config/br_danfe.yml').read : ''
|
14
15
|
end
|
15
16
|
|
16
17
|
def config_yaml_load
|
17
|
-
@file_read = YAML.
|
18
|
-
@file_read ? (@file_read[
|
18
|
+
@file_read = YAML.safe_load(file)
|
19
|
+
@file_read ? (@file_read['br_danfe'] || {})['options'] : {}
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -3,9 +3,9 @@ module BrDanfe
|
|
3
3
|
class Phone
|
4
4
|
def self.format(phone)
|
5
5
|
if phone.length == 10
|
6
|
-
phone.sub(/(\d{2})(\d{4})(\d{4})/,
|
6
|
+
phone.sub(/(\d{2})(\d{4})(\d{4})/, '(\\1) \\2-\\3')
|
7
7
|
else
|
8
|
-
phone.sub(/(\d{2})(\d{5})(\d{4})/,
|
8
|
+
phone.sub(/(\d{2})(\d{5})(\d{4})/, '(\\1) \\2-\\3')
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -7,10 +7,12 @@ module BrDanfe
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def render
|
10
|
-
@pdf.ibox 0.85, 15.60, 0.75, 1.85, I18n.t(
|
11
|
-
@pdf.ibox 0.85, 3.85, 0.75, 2.7, I18n.t(
|
12
|
-
@pdf.ibox 0.85, 11.75, 4.60, 2.7, I18n.t(
|
13
|
-
@pdf.ibox 1.70, 4.00, 16.35, 1.85,
|
10
|
+
@pdf.ibox 0.85, 15.60, 0.75, 1.85, I18n.t('danfe.ticket.xNome', xNome: @xml['emit/xNome'])
|
11
|
+
@pdf.ibox 0.85, 3.85, 0.75, 2.7, I18n.t('danfe.ticket.received_at')
|
12
|
+
@pdf.ibox 0.85, 11.75, 4.60, 2.7, I18n.t('danfe.ticket.receiver')
|
13
|
+
@pdf.ibox 1.70, 4.00, 16.35, 1.85, '',
|
14
|
+
I18n.t('danfe.ticket.document', nNF: @xml['ide/nNF'], serie: @xml['ide/serie']),
|
15
|
+
{ align: :center, valign: :center }
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
@@ -13,39 +13,40 @@ module BrDanfe
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def render
|
16
|
-
@pdf.ititle 0.42, 10.00, 0.75, @ltitle,
|
17
|
-
|
18
|
-
@pdf.lbox LINE_HEIGHT, 8.52, 0.75, @l1, @xml,
|
19
|
-
@pdf.i18n_lbox LINE_HEIGHT, 2.79, 9.27, @l1,
|
20
|
-
@pdf.lbox LINE_HEIGHT, 1.78, 12.06, @l1, @xml,
|
21
|
-
@pdf.i18n_lbox LINE_HEIGHT, 2.29, 13.84, @l1,
|
22
|
-
@pdf.lbox LINE_HEIGHT, 0.76, 16.13, @l1, @xml,
|
23
|
-
@pdf.lcnpj LINE_HEIGHT, 3.44, 16.89, @l1, @xml,
|
24
|
-
@pdf.lbox LINE_HEIGHT, 8.52, 0.75, @l2, @xml,
|
25
|
-
@pdf.lbox LINE_HEIGHT, 6.86, 9.27, @l2, @xml,
|
26
|
-
@pdf.lbox LINE_HEIGHT, 0.76, 16.13, @l2, @xml,
|
27
|
-
@pdf.lie LINE_HEIGHT, 3.44, 16.89, @l2, @xml,
|
16
|
+
@pdf.ititle 0.42, 10.00, 0.75, @ltitle, 'transporta.title'
|
17
|
+
|
18
|
+
@pdf.lbox LINE_HEIGHT, 8.52, 0.75, @l1, @xml, 'transporta/xNome'
|
19
|
+
@pdf.i18n_lbox LINE_HEIGHT, 2.79, 9.27, @l1, 'transp.modFrete.title', mod_frete
|
20
|
+
@pdf.lbox LINE_HEIGHT, 1.78, 12.06, @l1, @xml, 'veicTransp/RNTC'
|
21
|
+
@pdf.i18n_lbox LINE_HEIGHT, 2.29, 13.84, @l1, 'veicTransp.placa', plate
|
22
|
+
@pdf.lbox LINE_HEIGHT, 0.76, 16.13, @l1, @xml, 'veicTransp/UF'
|
23
|
+
@pdf.lcnpj LINE_HEIGHT, 3.44, 16.89, @l1, @xml, 'transporta/CNPJ'
|
24
|
+
@pdf.lbox LINE_HEIGHT, 8.52, 0.75, @l2, @xml, 'transporta/xEnder'
|
25
|
+
@pdf.lbox LINE_HEIGHT, 6.86, 9.27, @l2, @xml, 'transporta/xMun'
|
26
|
+
@pdf.lbox LINE_HEIGHT, 0.76, 16.13, @l2, @xml, 'transporta/UF'
|
27
|
+
@pdf.lie LINE_HEIGHT, 3.44, 16.89, @l2, @xml, 'transporta/UF', 'transporta/IE'
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
31
|
+
|
31
32
|
def plate
|
32
|
-
Plate.format(@xml[
|
33
|
+
Plate.format(@xml['veicTransp/placa'])
|
33
34
|
end
|
34
35
|
|
35
36
|
def mod_frete
|
36
|
-
case @xml[
|
37
|
-
when
|
38
|
-
modality =
|
39
|
-
when
|
40
|
-
modality =
|
41
|
-
when
|
42
|
-
modality =
|
43
|
-
when
|
44
|
-
modality =
|
45
|
-
when
|
46
|
-
modality =
|
47
|
-
when
|
48
|
-
modality =
|
37
|
+
case @xml['transp/modFrete']
|
38
|
+
when '0'
|
39
|
+
modality = 'emitter'
|
40
|
+
when '1'
|
41
|
+
modality = 'recipient'
|
42
|
+
when '2'
|
43
|
+
modality = 'third_party'
|
44
|
+
when '3'
|
45
|
+
modality = 'own_emitter'
|
46
|
+
when '4'
|
47
|
+
modality = 'own_recipient'
|
48
|
+
when '9'
|
49
|
+
modality = 'no_freight'
|
49
50
|
end
|
50
51
|
|
51
52
|
I18n.t("danfe.transp.modFrete.#{modality}")
|