dtefacil_xml_builder 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/dtefacil_xml_builder.gemspec +1 -0
- data/lib/dtefacil_xml_builder/collection.rb +11 -0
- data/lib/dtefacil_xml_builder/detalle.rb +9 -13
- data/lib/dtefacil_xml_builder/dte_reader.rb +82 -0
- data/lib/dtefacil_xml_builder/factura_electronica.rb +87 -0
- data/lib/dtefacil_xml_builder/factura_exenta_electronica.rb +21 -0
- data/lib/dtefacil_xml_builder/nota_de_credito_electronica.rb +34 -0
- data/lib/dtefacil_xml_builder/test_documents.rb +12 -31
- data/lib/dtefacil_xml_builder/version.rb +1 -1
- data/lib/dtefacil_xml_builder.rb +5 -1
- metadata +23 -3
- data/lib/dtefacil_xml_builder/documentos.rb +0 -136
@@ -1,19 +1,7 @@
|
|
1
1
|
module DtefacilXmlBuilder
|
2
2
|
class Detalle
|
3
|
-
attr_accessor :nombre, :descripcion, :cantidad, :precio_unitario, :descuento, :unidad, :exento
|
3
|
+
attr_accessor :nombre, :descripcion, :cantidad, :precio_unitario, :descuento, :unidad, :exento, :numero_linea, :monto_total
|
4
4
|
|
5
|
-
def set_all_attr nombre, descripcion, cantidad, precio_unitario, descuento, unidad, exento
|
6
|
-
@nombre= nombre
|
7
|
-
@descripcion= descripcion
|
8
|
-
@cantidad= cantidad
|
9
|
-
@precio_unitario= precio_unitario
|
10
|
-
@descuento= descuento
|
11
|
-
@unidad= unidad
|
12
|
-
@exento= exento
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
5
|
def set_detalle detalle
|
18
6
|
@nombre = detalle[:nombre]
|
19
7
|
@cantidad = detalle[:cantidad]
|
@@ -34,6 +22,14 @@ module DtefacilXmlBuilder
|
|
34
22
|
if detalle[:exento]
|
35
23
|
@exento = detalle[:exento]
|
36
24
|
end
|
25
|
+
|
26
|
+
if detalle[:numero_linea]
|
27
|
+
@numero_linea= detalle[:numero_linea]
|
28
|
+
end
|
29
|
+
|
30
|
+
if detalle[:monto_total]
|
31
|
+
@monto_total= detalle[:monto_total]
|
32
|
+
end
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'xmlsimple'
|
3
|
+
|
4
|
+
module DtefacilXmlBuilder
|
5
|
+
class DteReader
|
6
|
+
attr_accessor :receptor, :detalles, :folio, :tipo, :folio, :collection
|
7
|
+
|
8
|
+
def dte= xml
|
9
|
+
ref = XmlSimple.xml_in xml
|
10
|
+
id_doc_hash = ref['Documento'].map{ |i| i['Encabezado'].map{|f| f['IdDoc']}}.flatten
|
11
|
+
receptor_hash = ref['Documento'].map{ |i| i['Encabezado'].map{|f| f['Receptor']}}.flatten
|
12
|
+
|
13
|
+
@tipo = id_doc_hash.first["TipoDTE"].first
|
14
|
+
@folio = id_doc_hash.first["Folio"].first
|
15
|
+
|
16
|
+
r = Receptor.new
|
17
|
+
r.rut= receptor_hash.first["RUTRecep"].first
|
18
|
+
r.razon_social= receptor_hash.first["RznSocRecep"].first
|
19
|
+
r.giro= receptor_hash.first["GiroRecep"].first
|
20
|
+
r.direccion= receptor_hash.first["DirRecep"].first
|
21
|
+
r.comuna= receptor_hash.first["CmnaRecep"].first
|
22
|
+
r.ciudad= receptor_hash.first["CiudadRecep"].first
|
23
|
+
@receptor=r
|
24
|
+
@detalles=[]
|
25
|
+
|
26
|
+
detalles_hash_array= ref['Documento'].map{ |d| d['Detalle']}.flatten
|
27
|
+
|
28
|
+
detalles_hash_array.each do |det|
|
29
|
+
d = Detalle.new
|
30
|
+
d.nombre= det["NmbItem"].first
|
31
|
+
d.numero_linea=det["NroLinDet"].first
|
32
|
+
d.cantidad=det["QtyItem"].first
|
33
|
+
d.precio_unitario=det["PrcItem"].first
|
34
|
+
d.monto= det["MontoItems"].first
|
35
|
+
|
36
|
+
if det["DescuentoMonto"].first
|
37
|
+
d.descuento= det["DescuentoMonto"].first
|
38
|
+
end
|
39
|
+
|
40
|
+
if det["IndExe"].first
|
41
|
+
d.exento= true
|
42
|
+
end
|
43
|
+
|
44
|
+
if det["UnmdItem"].first
|
45
|
+
d.unidad= det["UnmdItem"].first
|
46
|
+
end
|
47
|
+
|
48
|
+
@detalles[@detalles.length]=d
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def collection= xml
|
53
|
+
ref = XmlSimple.xml_in xml
|
54
|
+
|
55
|
+
col = Collection.new
|
56
|
+
d = DocumentoElectronico.new
|
57
|
+
docs=[]
|
58
|
+
|
59
|
+
col.pag = ref["pag"]
|
60
|
+
col.tPag = ref["tPag"]
|
61
|
+
col.total = ref["total"]
|
62
|
+
col.pags = ref["pags"]
|
63
|
+
|
64
|
+
ref["documento"].each do |doc|
|
65
|
+
d.id= doc["id"]
|
66
|
+
d.url= doc["url"]
|
67
|
+
d.fchEmis= doc["fchEmis"]
|
68
|
+
d.rutRecep= doc["rutRecep"]
|
69
|
+
d.rutEmisor= doc["rutEmisor"]
|
70
|
+
d.tipo= doc["tipo"]
|
71
|
+
d.folio= doc["folio"]
|
72
|
+
d.mntTotal= doc["mntTotal"]
|
73
|
+
|
74
|
+
docs[docs.length]=d
|
75
|
+
end
|
76
|
+
|
77
|
+
col.documentos= docs
|
78
|
+
@collection= col
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
module DtefacilXmlBuilder
|
4
|
+
|
5
|
+
class FacturaElectronica
|
6
|
+
|
7
|
+
attr_accessor :descuento, :actividades_economicas, :receptor, :detalles
|
8
|
+
|
9
|
+
def set= actividades_economicas, receptor, detalles
|
10
|
+
@actividades_economicas=actividades_economicas
|
11
|
+
@r= Receptor.new
|
12
|
+
@r.set_receptor receptor
|
13
|
+
@receptor= @r
|
14
|
+
@detalles = []
|
15
|
+
|
16
|
+
detalles.each do |detalle|
|
17
|
+
@d = Detalle.new
|
18
|
+
@d.set_detalle detalle
|
19
|
+
@detalles[@detalles.length]=@d
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def render_xml
|
25
|
+
dtebuilder = DteBuilder.new
|
26
|
+
|
27
|
+
xml = Builder::XmlMarkup.new
|
28
|
+
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
29
|
+
xml.facturaElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
30
|
+
|f|
|
31
|
+
actividades_economicas.each do |act|
|
32
|
+
f.actividadEconomica act
|
33
|
+
end
|
34
|
+
|
35
|
+
f.receptor {
|
36
|
+
|r|
|
37
|
+
r.rut receptor.rut
|
38
|
+
r.razonSocial receptor.razon_social
|
39
|
+
r.giro receptor.giro
|
40
|
+
r.ubicacion{
|
41
|
+
|u|
|
42
|
+
u.direccion receptor.direccion
|
43
|
+
u.comuna receptor.comuna
|
44
|
+
u.ciudad receptor.ciudad
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
f.detalles {
|
49
|
+
|d|
|
50
|
+
if descuento
|
51
|
+
d.descuento{
|
52
|
+
|desc|
|
53
|
+
desc.porcentaje(descuento)
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
detalles.each do |detalle|
|
58
|
+
d.detalle{
|
59
|
+
|det|
|
60
|
+
det.nombre(detalle.nombre)
|
61
|
+
det.cantidad(detalle.cantidad)
|
62
|
+
det.precioUnitario(detalle.precio_unitario)
|
63
|
+
|
64
|
+
if detalle.unidad
|
65
|
+
det.unidad(detalle.unidad)
|
66
|
+
end
|
67
|
+
|
68
|
+
if detalle.descuento
|
69
|
+
det.descuento{
|
70
|
+
|desc_det|
|
71
|
+
desc_det.porcentaje(detalle.descuento)
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
if detalle.exento
|
76
|
+
det.observaciones{
|
77
|
+
|obs|
|
78
|
+
obs.exento
|
79
|
+
}
|
80
|
+
end
|
81
|
+
}
|
82
|
+
end
|
83
|
+
}
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
module DtefacilXmlBuilder
|
4
|
+
|
5
|
+
class FacturaExentaElectronica
|
6
|
+
|
7
|
+
attr_accessor :descuento, :actividades_economicas, :receptor, :detalles
|
8
|
+
|
9
|
+
def render_xml
|
10
|
+
dtebuilder = DteBuilder.new
|
11
|
+
|
12
|
+
xml = Builder::XmlMarkup.new
|
13
|
+
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
14
|
+
xml.facturaExentaElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
15
|
+
dtebuilder.create_actividades_economicas @actividades_economicas
|
16
|
+
dtebuilder.create_receptor @receptor
|
17
|
+
dtebuilder.create_detalles @detalles, @descuento
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
module DtefacilXmlBuilder
|
4
|
+
|
5
|
+
class NotaDeCreditoElectronica
|
6
|
+
|
7
|
+
attr_accessor :referencia, :tipo, :receptor, :detalles
|
8
|
+
|
9
|
+
def render_xml
|
10
|
+
dtebuilder = DteBuilder.new
|
11
|
+
|
12
|
+
xml = Builder::XmlMarkup.new
|
13
|
+
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
14
|
+
xml.notaCreditoElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
15
|
+
|n|
|
16
|
+
if @tipo == "anula"
|
17
|
+
n.anulaDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte)
|
18
|
+
end
|
19
|
+
|
20
|
+
if @receptor && @tipo == "datos"
|
21
|
+
n.corrigeReceptorDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte){
|
22
|
+
dtebuilder.create_receptor @receptor
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
if @detalles && @tipo == "detalles"
|
27
|
+
n.corrigeMontosDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte){
|
28
|
+
dtebuilder.create_detalles @detalles, @descuento
|
29
|
+
}
|
30
|
+
end
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,43 +1,24 @@
|
|
1
|
-
require 'rest-client'
|
2
|
-
|
3
1
|
module DtefacilXmlBuilder
|
4
2
|
class TestDocuments
|
5
3
|
|
6
|
-
def factura_electronica_test
|
7
|
-
f = FacturaElectronica.new
|
8
|
-
r = Receptor.new
|
9
|
-
d = Detalle.new
|
10
|
-
|
11
|
-
r.set_all_attr "15842089-9", "Vladimir Suarez", "Informaciones", "Pajaritos 345", "Maipu", "Santiago"
|
12
|
-
d.set_all_attr "CompuGay", "asdfaf", 4, 456, 0.1, "UF", true
|
13
|
-
f.actividades_economicas= [324]
|
14
|
-
f.descuento= 0.2
|
15
|
-
f.receptor= r
|
16
|
-
f.detalles= [d]
|
17
|
-
#body = f.render_xml
|
18
|
-
#f.render_xml
|
19
|
-
#response = RestClient.get 'https://ptoTicket:pt0T1ck3t@api.dtefacil.cl/1.2/usuarios/yo'
|
20
|
-
db = DteBuilder.new
|
21
|
-
@emisor= db.create_emisor "emisor48"
|
22
|
-
#@emisor = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><usuario tipo=\"emisor\" xmlns=\"http://dtefacil.cl/1.2\"><nombre>emisor4</nombre><clave>1234567</clave><sucursal><nombre>segunda</nombre><codigo>4</codigo></sucursal></usuario>"
|
23
|
-
|
24
|
-
#delete_url= 'https://ptoTicket:pt0T1ck3t@api.dtefacil.cl/1.2/usuarios/emisores/dupzglfpvqbfx7mq7ownb5nrz7m?purgar=true'
|
25
|
-
|
26
|
-
#response = RestClient.post , @emisor, content_type: "application/xml"
|
27
|
-
#response = RestClient.delete(delete_url)
|
28
|
-
response = RestClient.post "https://api.dtefacil.cl/1.2/usuarios/emisores/", @emisor, {content_type: "application/xml", authorization: "Basic cHRvVGlja2V0OnB0MFQxY2szdA=="}
|
29
|
-
puts response
|
30
|
-
#puts response.headers[:location]
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
4
|
def set_factura_electronica_with_hash
|
35
5
|
receptor = { :rut => "15842089-9", :razon_social => "Vladimir", :giro => "Computacion", :direccion => "Alameda", :comuna => "Santiago", :ciudad => "Satiago" }
|
36
6
|
detalles = [{:nombre => "Pelota", :cantidad => 3, :precio_unitario => 45}]
|
37
7
|
f = FacturaElectronica.new
|
38
|
-
f.
|
8
|
+
f.set= [324], receptor, detalles
|
39
9
|
body = f.render_xml
|
10
|
+
end
|
11
|
+
|
12
|
+
def read_dte
|
13
|
+
response = RestClient.get "https://acid:WhXdrDBJ@api.dtefacil.cl/1.2/documentos/d3g3zty5qybgx3e5dcqls22iuwy"
|
14
|
+
reader = DteReader.new
|
15
|
+
reader.dte= response.body
|
16
|
+
end
|
40
17
|
|
18
|
+
def read_collection
|
19
|
+
response = RestClient.get "https://ptoTicket:pt0T1ck3t@api.dtefacil.cl/1.2/documentos"
|
20
|
+
reader = DteReader.new
|
21
|
+
reader.collection= response.body
|
41
22
|
end
|
42
23
|
|
43
24
|
end
|
data/lib/dtefacil_xml_builder.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
require "dtefacil_xml_builder/collection"
|
2
|
+
require "dtefacil_xml_builder/factura_exenta_electronica"
|
3
|
+
require "dtefacil_xml_builder/nota_de_credito_electronica"
|
4
|
+
require "dtefacil_xml_builder/factura_electronica"
|
1
5
|
require "dtefacil_xml_builder/test_documents"
|
2
6
|
require "dtefacil_xml_builder/detalle"
|
3
7
|
require "dtefacil_xml_builder/receptor"
|
4
|
-
require "dtefacil_xml_builder/documentos"
|
5
8
|
require "dtefacil_xml_builder/dte_builder"
|
9
|
+
require "dtefacil_xml_builder/dte_reader"
|
6
10
|
require "dtefacil_xml_builder/version"
|
7
11
|
require "builder"
|
8
12
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtefacil_xml_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: xml-simple
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
description: Facilita la construcción y manipulacion de xml necesarios para DTE Fácil
|
47
63
|
1.2
|
48
64
|
email:
|
@@ -58,9 +74,13 @@ files:
|
|
58
74
|
- Rakefile
|
59
75
|
- dtefacil_xml_builder.gemspec
|
60
76
|
- lib/dtefacil_xml_builder.rb
|
77
|
+
- lib/dtefacil_xml_builder/collection.rb
|
61
78
|
- lib/dtefacil_xml_builder/detalle.rb
|
62
|
-
- lib/dtefacil_xml_builder/documentos.rb
|
63
79
|
- lib/dtefacil_xml_builder/dte_builder.rb
|
80
|
+
- lib/dtefacil_xml_builder/dte_reader.rb
|
81
|
+
- lib/dtefacil_xml_builder/factura_electronica.rb
|
82
|
+
- lib/dtefacil_xml_builder/factura_exenta_electronica.rb
|
83
|
+
- lib/dtefacil_xml_builder/nota_de_credito_electronica.rb
|
64
84
|
- lib/dtefacil_xml_builder/receptor.rb
|
65
85
|
- lib/dtefacil_xml_builder/test_documents.rb
|
66
86
|
- lib/dtefacil_xml_builder/version.rb
|
@@ -1,136 +0,0 @@
|
|
1
|
-
require 'builder'
|
2
|
-
|
3
|
-
module DtefacilXmlBuilder
|
4
|
-
|
5
|
-
class FacturaElectronica
|
6
|
-
|
7
|
-
attr_accessor :descuento, :actividades_economicas, :receptor, :detalles
|
8
|
-
|
9
|
-
def set_factura actividades_economicas, receptor, detalles
|
10
|
-
@actividades_economicas=actividades_economicas
|
11
|
-
@r= Receptor.new
|
12
|
-
@r.set_receptor receptor
|
13
|
-
@receptor= @r
|
14
|
-
@detalles = []
|
15
|
-
|
16
|
-
detalles.each do |detalle|
|
17
|
-
@d = Detalle.new
|
18
|
-
@d.set_detalle detalle
|
19
|
-
@detalles[@detalles.length]=@d
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
def render_xml
|
25
|
-
dtebuilder = DteBuilder.new
|
26
|
-
|
27
|
-
xml = Builder::XmlMarkup.new
|
28
|
-
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
29
|
-
xml.facturaElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
30
|
-
|f|
|
31
|
-
actividades_economicas.each do |act|
|
32
|
-
f.actividadEconomica act
|
33
|
-
end
|
34
|
-
|
35
|
-
f.receptor {
|
36
|
-
|r|
|
37
|
-
r.rut receptor.rut
|
38
|
-
r.razonSocial receptor.razon_social
|
39
|
-
r.giro receptor.giro
|
40
|
-
r.ubicacion{
|
41
|
-
|u|
|
42
|
-
u.direccion receptor.direccion
|
43
|
-
u.comuna receptor.comuna
|
44
|
-
u.ciudad receptor.ciudad
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
f.detalles {
|
49
|
-
|d|
|
50
|
-
#if descuento
|
51
|
-
# d.descuento{
|
52
|
-
# |desc|
|
53
|
-
# desc.porcentaje(descuento)
|
54
|
-
# }
|
55
|
-
#end
|
56
|
-
|
57
|
-
detalles.each do |detalle|
|
58
|
-
d.detalle{
|
59
|
-
|det|
|
60
|
-
det.nombre(detalle.nombre)
|
61
|
-
det.cantidad(detalle.cantidad)
|
62
|
-
det.precioUnitario(detalle.precio_unitario)
|
63
|
-
|
64
|
-
#if detalle.unidad
|
65
|
-
# det.unidad(detalle.unidad)
|
66
|
-
#end
|
67
|
-
|
68
|
-
#if detalle.descuento
|
69
|
-
# det.descuento{
|
70
|
-
# |desc_det|
|
71
|
-
# desc_det.porcentaje(detalle.descuento)
|
72
|
-
# }
|
73
|
-
#end
|
74
|
-
|
75
|
-
#if detalle.exento
|
76
|
-
# det.observaciones{
|
77
|
-
# |obs|
|
78
|
-
# obs.exento
|
79
|
-
# }
|
80
|
-
#end
|
81
|
-
}
|
82
|
-
end
|
83
|
-
}
|
84
|
-
}
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
class NotaDeCreditoElectronica
|
90
|
-
|
91
|
-
attr_accessor :referencia, :tipo, :receptor, :detalles
|
92
|
-
|
93
|
-
def render_xml
|
94
|
-
dtebuilder = DteBuilder.new
|
95
|
-
|
96
|
-
xml = Builder::XmlMarkup.new(:target=>STDOUT, :indent=>2)
|
97
|
-
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
98
|
-
xml.notaCreditoElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
99
|
-
|n|
|
100
|
-
if @tipo == "anula"
|
101
|
-
n.anulaDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte)
|
102
|
-
end
|
103
|
-
|
104
|
-
if @receptor && @tipo == "datos"
|
105
|
-
n.corrigeReceptorDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte){
|
106
|
-
dtebuilder.create_receptor @receptor
|
107
|
-
}
|
108
|
-
end
|
109
|
-
|
110
|
-
if @detalles && @tipo == "detalles"
|
111
|
-
n.corrigeMontosDte(tipo: @referencia.tipo_dte, folio: @referencia.folio_dte){
|
112
|
-
dtebuilder.create_detalles @detalles, @descuento
|
113
|
-
}
|
114
|
-
end
|
115
|
-
}
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
class FacturaExentaElectronica
|
121
|
-
|
122
|
-
attr_accessor :descuento, :actividades_economicas, :receptor, :detalles
|
123
|
-
|
124
|
-
def render_xml
|
125
|
-
dtebuilder = DteBuilder.new
|
126
|
-
|
127
|
-
xml = Builder::XmlMarkup.new(:target=>STDOUT, :indent=>2)
|
128
|
-
xml.instruct!(:xml, version: "1.0", encoding: "ISO-8859-1")
|
129
|
-
xml.facturaExentaElectronica(xmlns: "http://dtefacil.cl/1.2"){
|
130
|
-
dtebuilder.create_actividades_economicas @actividades_economicas
|
131
|
-
dtebuilder.create_receptor @receptor
|
132
|
-
dtebuilder.create_detalles @detalles, @descuento
|
133
|
-
}
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|