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
@@ -8,15 +8,16 @@ module BrDanfe
|
|
8
8
|
|
9
9
|
def render
|
10
10
|
@pdf.box(height: 36) do
|
11
|
-
@pdf.text I18n.t(
|
11
|
+
@pdf.text I18n.t('cce.protocol'), size: 8, style: :bold
|
12
12
|
@pdf.text protocol, pad: 5
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
|
+
|
17
18
|
def protocol
|
18
|
-
node = @xml.css(
|
19
|
-
|
19
|
+
node = @xml.css('procEventoNFe > retEvento > infEvento > nProt')
|
20
|
+
node ? node.text : ''
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
data/lib/br_danfe/danfe.rb
CHANGED
@@ -10,12 +10,12 @@ module BrDanfe
|
|
10
10
|
create_watermark
|
11
11
|
end
|
12
12
|
|
13
|
-
def save_pdf(filename, footer_info =
|
13
|
+
def save_pdf(filename, footer_info = '')
|
14
14
|
generate footer_info
|
15
15
|
@pdf.render_file filename
|
16
16
|
end
|
17
17
|
|
18
|
-
def render_pdf(footer_info =
|
18
|
+
def render_pdf(footer_info = '')
|
19
19
|
generate footer_info
|
20
20
|
@pdf.render
|
21
21
|
end
|
@@ -23,17 +23,17 @@ module BrDanfe
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def create_watermark
|
26
|
-
@pdf.create_stamp(
|
27
|
-
@pdf.fill_color
|
28
|
-
@pdf.text_box I18n.t(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
26
|
+
@pdf.create_stamp('has_no_fiscal_value') do
|
27
|
+
@pdf.fill_color '7d7d7d'
|
28
|
+
@pdf.text_box I18n.t('danfe.others.has_no_fiscal_value'),
|
29
|
+
size: 2.2.cm,
|
30
|
+
width: @pdf.bounds.width,
|
31
|
+
height: @pdf.bounds.height,
|
32
|
+
align: :center,
|
33
|
+
valign: :center,
|
34
|
+
at: [0, @pdf.bounds.height],
|
35
|
+
rotate: 45,
|
36
|
+
rotate_around: :center
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -65,7 +65,7 @@ module BrDanfe
|
|
65
65
|
|
66
66
|
@pdf.page_count.times do |i|
|
67
67
|
page = i + 1
|
68
|
-
position = page
|
68
|
+
position = page == 1 ? 3.96 : 1.85
|
69
69
|
repeated_information page, position, emitter, footer_info
|
70
70
|
end
|
71
71
|
end
|
@@ -81,17 +81,17 @@ module BrDanfe
|
|
81
81
|
|
82
82
|
def render_product_table_title(page)
|
83
83
|
y_position = page == 1 ? 18.91 : 7.40
|
84
|
-
@pdf.ititle 0.42, 10.00, 0.75, y_position,
|
84
|
+
@pdf.ititle 0.42, 10.00, 0.75, y_position, 'det.title'
|
85
85
|
end
|
86
86
|
|
87
87
|
def render_footer_information(footer_info)
|
88
88
|
if footer_info.present?
|
89
|
-
@pdf.ibox 0.35, 12.45, 0.75, 30.21,
|
89
|
+
@pdf.ibox 0.35, 12.45, 0.75, 30.21, '', footer_info, { size: 5, border: 0 }
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
93
|
def render_no_fiscal_value
|
94
|
-
@pdf.stamp(
|
94
|
+
@pdf.stamp('has_no_fiscal_value') if DanfeLib::Helper.no_fiscal_value?(@xml)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
@@ -5,26 +5,28 @@ module BrDanfe
|
|
5
5
|
value = origin(xml)
|
6
6
|
|
7
7
|
if csosn?(xml)
|
8
|
-
value += xml.css(
|
8
|
+
value += xml.css('ICMS/*/CSOSN').text
|
9
9
|
elsif cst?(xml)
|
10
|
-
value += xml.css(
|
10
|
+
value += xml.css('ICMS/*/CST').text
|
11
11
|
end
|
12
12
|
|
13
13
|
value
|
14
14
|
end
|
15
15
|
|
16
|
-
private
|
17
16
|
def self.origin(xml)
|
18
|
-
xml.css(
|
17
|
+
xml.css('ICMS/*/orig').text
|
19
18
|
end
|
19
|
+
private_class_method :origin
|
20
20
|
|
21
21
|
def self.cst?(xml)
|
22
|
-
xml.css(
|
22
|
+
xml.css('ICMS/*/CST').text != ''
|
23
23
|
end
|
24
|
+
private_class_method :cst?
|
24
25
|
|
25
26
|
def self.csosn?(xml)
|
26
|
-
xml.css(
|
27
|
+
xml.css('ICMS/*/CSOSN').text != ''
|
27
28
|
end
|
29
|
+
private_class_method :csosn?
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -16,7 +16,7 @@ module BrDanfe
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def render
|
19
|
-
@pdf.ititle 0.42, 10.00, 0.75, @ltitle,
|
19
|
+
@pdf.ititle 0.42, 10.00, 0.75, @ltitle, 'dest.title'
|
20
20
|
|
21
21
|
render_line1
|
22
22
|
render_line2
|
@@ -28,68 +28,66 @@ module BrDanfe
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def render_line1
|
31
|
-
@pdf.lbox LINE_HEIGHT, 11.82, 0.75, @l1, @xml,
|
31
|
+
@pdf.lbox LINE_HEIGHT, 11.82, 0.75, @l1, @xml, 'dest/xNome'
|
32
32
|
render_cnpj_cpf
|
33
33
|
end
|
34
34
|
|
35
35
|
def render_cnpj_cpf
|
36
|
-
if @xml[
|
37
|
-
@pdf.i18n_lbox LINE_HEIGHT, 4.37, 12.57, @l1,
|
36
|
+
if @xml['dest/CNPJ'] == ''
|
37
|
+
@pdf.i18n_lbox LINE_HEIGHT, 4.37, 12.57, @l1, 'dest.CPF', cpf
|
38
38
|
else
|
39
|
-
@pdf.lcnpj LINE_HEIGHT, 4.37, 12.57, @l1, @xml,
|
39
|
+
@pdf.lcnpj LINE_HEIGHT, 4.37, 12.57, @l1, @xml, 'dest/CNPJ'
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def cpf
|
44
|
-
cpf = BrDocuments::CnpjCpf::Cpf.new(@xml[
|
44
|
+
cpf = BrDocuments::CnpjCpf::Cpf.new(@xml['dest/CPF'])
|
45
45
|
cpf.formatted
|
46
46
|
end
|
47
47
|
|
48
48
|
def render_line2
|
49
|
-
@pdf.i18n_lbox LINE_HEIGHT, 9.66, 0.75, @l2,
|
50
|
-
@pdf.lbox LINE_HEIGHT, 4.33, 10.41, @l2, @xml,
|
51
|
-
@pdf.i18n_lbox LINE_HEIGHT, 2.20, 14.74, @l2,
|
49
|
+
@pdf.i18n_lbox LINE_HEIGHT, 9.66, 0.75, @l2, 'enderDest.xLgr', address
|
50
|
+
@pdf.lbox LINE_HEIGHT, 4.33, 10.41, @l2, @xml, 'enderDest/xBairro'
|
51
|
+
@pdf.i18n_lbox LINE_HEIGHT, 2.20, 14.74, @l2, 'enderDest.CEP', cep
|
52
52
|
end
|
53
53
|
|
54
54
|
def address
|
55
55
|
address = Helper.generate_address @xml
|
56
56
|
|
57
57
|
if Helper.address_is_too_big(@pdf, address)
|
58
|
-
while Helper.mensure_text(@pdf, "#{address.strip}...") > MAXIMUM_SIZE_FOR_STREET && address.
|
59
|
-
address = address[0..address.length-2]
|
60
|
-
end
|
58
|
+
address = address[0..address.length - 2] while Helper.mensure_text(@pdf, "#{address.strip}...") > MAXIMUM_SIZE_FOR_STREET && !address.empty?
|
61
59
|
address = "#{address.strip}..."
|
62
60
|
end
|
63
61
|
address
|
64
62
|
end
|
65
63
|
|
66
64
|
def cep
|
67
|
-
Cep.format(@xml[
|
65
|
+
Cep.format(@xml['enderDest/CEP'])
|
68
66
|
end
|
69
67
|
|
70
68
|
def render_line3
|
71
|
-
@pdf.lbox LINE_HEIGHT, 6.61, 0.75, @l3, @xml,
|
72
|
-
@pdf.i18n_lbox LINE_HEIGHT, 4.06, 7.36, @l3,
|
73
|
-
@pdf.lbox LINE_HEIGHT, 1.14, 11.42, @l3, @xml,
|
74
|
-
@pdf.lie LINE_HEIGHT, 4.38, 12.56, @l3, @xml,
|
69
|
+
@pdf.lbox LINE_HEIGHT, 6.61, 0.75, @l3, @xml, 'enderDest/xMun'
|
70
|
+
@pdf.i18n_lbox LINE_HEIGHT, 4.06, 7.36, @l3, 'enderDest.fone', phone
|
71
|
+
@pdf.lbox LINE_HEIGHT, 1.14, 11.42, @l3, @xml, 'enderDest/UF'
|
72
|
+
@pdf.lie LINE_HEIGHT, 4.38, 12.56, @l3, @xml, 'enderDest/UF', 'dest/IE'
|
75
73
|
end
|
76
74
|
|
77
75
|
def phone
|
78
|
-
Phone.format(@xml[
|
76
|
+
Phone.format(@xml['enderDest/fone'])
|
79
77
|
end
|
80
78
|
|
81
79
|
def render_dates_for_nfe_310_or_newer
|
82
|
-
render_dates
|
80
|
+
render_dates 'ide/dhEmi', 'ide/dhSaiEnt', 'ide/dhSaiEnt'
|
83
81
|
end
|
84
82
|
|
85
83
|
def render_dates(emitted_at_date_and_hour, exited_at_date, exited_at_hour)
|
86
|
-
@pdf.ldate LINE_HEIGHT, 2.92, 17.40, @l1,
|
87
|
-
@pdf.ldate LINE_HEIGHT, 2.92, 17.40, @l2,
|
88
|
-
@pdf.ltime LINE_HEIGHT, 2.92, 17.40, @l3,
|
84
|
+
@pdf.ldate LINE_HEIGHT, 2.92, 17.40, @l1, 'ide.dEmi', @xml[emitted_at_date_and_hour], { align: :right }
|
85
|
+
@pdf.ldate LINE_HEIGHT, 2.92, 17.40, @l2, 'ide.dSaiEnt', @xml[exited_at_date], { align: :right }
|
86
|
+
@pdf.ltime LINE_HEIGHT, 2.92, 17.40, @l3, 'ide.hSaiEnt', @xml[exited_at_hour], { align: :right }
|
89
87
|
end
|
90
88
|
|
91
89
|
def render_dates_for_older_nfes
|
92
|
-
render_dates
|
90
|
+
render_dates 'ide/dEmi', 'ide/dSaiEnt', 'ide/hSaiEnt'
|
93
91
|
end
|
94
92
|
end
|
95
93
|
end
|
@@ -27,11 +27,11 @@ module BrDanfe
|
|
27
27
|
|
28
28
|
def create_header
|
29
29
|
header = [[
|
30
|
-
header_column(
|
31
|
-
header_column(
|
32
|
-
header_column(
|
33
|
-
header_column(
|
34
|
-
header_column(
|
30
|
+
header_column('prod.cProd'), header_column('prod.xProd'), header_column('prod.NCM'),
|
31
|
+
header_column('ICMS.CST'), header_column('prod.CFOP'), header_column('prod.uCom'),
|
32
|
+
header_column('prod.qCom'), header_column('prod.vUnCom'), header_column('prod.vProd'),
|
33
|
+
header_column('ICMS.vBC'), header_column('ICMS.vICMS'), header_column('IPI.vIPI'),
|
34
|
+
header_column('ICMS.pICMS'), header_column('IPI.pIPI')
|
35
35
|
]]
|
36
36
|
@pdf.make_table(header, options)
|
37
37
|
end
|
@@ -62,25 +62,25 @@ module BrDanfe
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def products
|
65
|
-
@xml.collect(
|
65
|
+
@xml.collect('xmlns', 'det') { |det| product(det) }
|
66
66
|
end
|
67
67
|
|
68
68
|
def product(det)
|
69
69
|
[
|
70
|
-
cell_text(det.css(
|
70
|
+
cell_text(det.css('prod/cProd').text),
|
71
71
|
cell_text(Xprod.new(det).render),
|
72
|
-
cell_text(det.css(
|
72
|
+
cell_text(det.css('prod/NCM').text),
|
73
73
|
cell_text(Cst.to_danfe(det)),
|
74
|
-
cell_text(det.css(
|
75
|
-
cell_text(det.css(
|
76
|
-
cell_number(numerify(det,
|
77
|
-
cell_number(numerify(det,
|
78
|
-
cell_number(numerify(det,
|
79
|
-
cell_number(numerify(det,
|
80
|
-
cell_number(numerify(det,
|
81
|
-
cell_number(numerify(det,
|
82
|
-
cell_number(numerify(det,
|
83
|
-
cell_number(numerify(det,
|
74
|
+
cell_text(det.css('prod/CFOP').text),
|
75
|
+
cell_text(det.css('prod/uCom').text),
|
76
|
+
cell_number(numerify(det, 'prod/qCom')),
|
77
|
+
cell_number(numerify(det, 'prod/vUnCom')),
|
78
|
+
cell_number(numerify(det, 'prod/vProd')),
|
79
|
+
cell_number(numerify(det, 'ICMS/*/vBC')),
|
80
|
+
cell_number(numerify(det, 'ICMS/*/vICMS')),
|
81
|
+
cell_number(numerify(det, 'IPI/*/vIPI')),
|
82
|
+
cell_number(numerify(det, 'ICMS/*/pICMS')),
|
83
|
+
cell_number(numerify(det, 'IPI/*/pIPI'))
|
84
84
|
]
|
85
85
|
end
|
86
86
|
|
@@ -95,7 +95,7 @@ module BrDanfe
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def numerify(det, xpath)
|
98
|
-
Helper.numerify(det.css(
|
98
|
+
Helper.numerify(det.css(xpath.to_s).text)
|
99
99
|
end
|
100
100
|
|
101
101
|
def create_row(data)
|
@@ -115,7 +115,7 @@ module BrDanfe
|
|
115
115
|
def render_table(data, start_position, height)
|
116
116
|
@pdf.y = start_position
|
117
117
|
@pdf.bounding_box [0.75.cm, @pdf.cursor], width: 19.56.cm, height: height do
|
118
|
-
@pdf.table data.map{ |item| [item] }, { header: true }
|
118
|
+
@pdf.table data.map { |item| [item] }, { header: true }
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
@@ -3,71 +3,82 @@ module BrDanfe
|
|
3
3
|
class Document
|
4
4
|
def initialize
|
5
5
|
@document = Prawn::Document.new(
|
6
|
-
page_size:
|
6
|
+
page_size: 'A4',
|
7
7
|
page_layout: :portrait,
|
8
8
|
left_margin: 0,
|
9
9
|
right_margin: 0,
|
10
10
|
top_margin: 0,
|
11
|
-
botton_margin: 0
|
11
|
+
botton_margin: 0
|
12
|
+
)
|
12
13
|
|
13
|
-
@document.font
|
14
|
+
@document.font 'Times-Roman'
|
14
15
|
@document.line_width = 0.3
|
15
16
|
end
|
16
17
|
|
17
18
|
def method_missing(method_name, *args, &block)
|
18
|
-
@document.
|
19
|
+
if @document.respond_to? method_name
|
20
|
+
@document.send method_name, *args, &block
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def respond_to_missing?(method_name, include_private = false)
|
27
|
+
@document.respond_to?(method_name, include_private) || super
|
19
28
|
end
|
20
29
|
|
21
30
|
def ititle(h, w, x, y, i18n)
|
22
|
-
title =
|
23
|
-
title = I18n.t("danfe.#{i18n}") if i18n !=
|
31
|
+
title = ''
|
32
|
+
title = I18n.t("danfe.#{i18n}") if i18n != ''
|
24
33
|
|
25
|
-
|
34
|
+
text_box title, size: 8, at: [x.cm, Helper.invert(y.cm) - 4], width: w.cm, height: h.cm, style: :bold
|
26
35
|
end
|
27
36
|
|
28
37
|
def ibarcode(h, w, x, y, info)
|
29
|
-
|
38
|
+
if info != ''
|
39
|
+
Barby::Code128C.new(info).annotate_pdf(self, x: x.cm, y: Helper.invert(y.cm), width: w.cm, height: h.cm)
|
40
|
+
end
|
30
41
|
end
|
31
42
|
|
32
|
-
def ibox(h, w, x, y, title =
|
43
|
+
def ibox(h, w, x, y, title = '', info = '', options = {})
|
33
44
|
box [x.cm, Helper.invert(y.cm)], w.cm, h.cm, title, info, options
|
34
45
|
end
|
35
46
|
|
36
47
|
def lbox(h, w, x, y, xml, xpath, options = {})
|
37
|
-
i18n = xpath.
|
48
|
+
i18n = xpath.tr('/', '.')
|
38
49
|
label = I18n.t("danfe.#{i18n}")
|
39
50
|
data = xml[xpath]
|
40
51
|
|
41
52
|
ibox(h, w, x, y, label, data, options)
|
42
53
|
end
|
43
54
|
|
44
|
-
def ldate(h, w, x, y, i18n =
|
45
|
-
data = Helper
|
55
|
+
def ldate(h, w, x, y, i18n = '', info = '', options = {})
|
56
|
+
data = Helper.format_date(info)
|
46
57
|
i18n_lbox(h, w, x, y, i18n, data, options)
|
47
58
|
end
|
48
59
|
|
49
|
-
def ltime(h, w, x, y, i18n =
|
50
|
-
data = Helper
|
60
|
+
def ltime(h, w, x, y, i18n = '', info = '', options = {})
|
61
|
+
data = Helper.format_time(info)
|
51
62
|
i18n_lbox(h, w, x, y, i18n, data, options)
|
52
63
|
end
|
53
64
|
|
54
65
|
def lcnpj(h, w, x, y, xml, xpath, options = {})
|
55
|
-
i18n = xpath.
|
66
|
+
i18n = xpath.tr('/', '.')
|
56
67
|
|
57
68
|
cnpj = BrDocuments::CnpjCpf::Cnpj.new(xml[xpath])
|
58
|
-
if cnpj.valid?
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
69
|
+
data = if cnpj.valid?
|
70
|
+
cnpj.formatted
|
71
|
+
else
|
72
|
+
''
|
73
|
+
end
|
63
74
|
|
64
75
|
i18n_lbox(h, w, x, y, i18n, data, options)
|
65
76
|
end
|
66
77
|
|
67
78
|
def lie(h, w, x, y, xml, xpath_uf, xpath_ie, options = {})
|
68
|
-
i18n = xpath_ie.
|
79
|
+
i18n = xpath_ie.tr('/', '.')
|
69
80
|
|
70
|
-
data =
|
81
|
+
data = ''
|
71
82
|
if BrDanfe::Uf.include?(xml[xpath_uf])
|
72
83
|
ie = BrDocuments::IE::Factory.create(xml[xpath_uf], xml[xpath_ie])
|
73
84
|
data = ie.formatted if ie.valid?
|
@@ -77,29 +88,30 @@ module BrDanfe
|
|
77
88
|
end
|
78
89
|
|
79
90
|
def lnumeric(h, w, x, y, xml, xpath, options = {})
|
80
|
-
i18n = xpath.tr(
|
91
|
+
i18n = xpath.tr('/', '.')
|
81
92
|
data = xml[xpath]
|
82
93
|
|
83
94
|
inumeric(h, w, x, y, i18n, data, options)
|
84
95
|
end
|
85
96
|
|
86
|
-
def inumeric(h, w, x, y, i18n =
|
87
|
-
label = i18n !=
|
97
|
+
def inumeric(h, w, x, y, i18n = '', data = '', options = {})
|
98
|
+
label = i18n != '' ? I18n.t("danfe.#{i18n}") : ''
|
88
99
|
numeric [x.cm, Helper.invert(y.cm)], w.cm, h.cm, label, data, options
|
89
100
|
end
|
90
101
|
|
91
|
-
def i18n_lbox(h, w, x, y, i18n =
|
92
|
-
label = i18n !=
|
102
|
+
def i18n_lbox(h, w, x, y, i18n = '', info = '', options = {})
|
103
|
+
label = i18n != '' ? I18n.t("danfe.#{i18n}") : ''
|
93
104
|
ibox h, w, x, y, label, info, options
|
94
105
|
end
|
95
106
|
|
96
107
|
private
|
97
|
-
|
98
|
-
|
99
|
-
|
108
|
+
|
109
|
+
def numeric(at, w, h, title = '', info = '', options = {})
|
110
|
+
info = Helper.numerify(info) if info != ''
|
111
|
+
box at, w, h, title, info, options.merge({ align: :right })
|
100
112
|
end
|
101
113
|
|
102
|
-
def box(at, w, h, title =
|
114
|
+
def box(at, w, h, title = '', info = '', options = {})
|
103
115
|
options = {
|
104
116
|
align: :left,
|
105
117
|
size: 10,
|
@@ -108,19 +120,20 @@ module BrDanfe
|
|
108
120
|
border: 1
|
109
121
|
}.merge(options)
|
110
122
|
|
111
|
-
|
123
|
+
stroke_rectangle at, w, h if options[:border] == 1
|
112
124
|
|
113
125
|
at[0] += 2
|
114
126
|
|
115
|
-
if title !=
|
127
|
+
if title != ''
|
116
128
|
title_coord = Array.new(at)
|
117
129
|
title_coord[1] -= 2
|
118
|
-
|
130
|
+
text_box title, size: 6, at: title_coord, width: w - 4, height: 8
|
119
131
|
end
|
120
132
|
|
121
|
-
title_adjustment = title ==
|
133
|
+
title_adjustment = title == '' ? 4 : 13
|
122
134
|
at[1] -= title_adjustment
|
123
|
-
|
135
|
+
text_box info, size: options[:size], at: at, width: w - 4, height: h - title_adjustment, align: options[:align],
|
136
|
+
style: options[:style], valign: options[:valign]
|
124
137
|
end
|
125
138
|
end
|
126
139
|
end
|