dtefacil_xml_builder 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,4 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.version = DtefacilXmlBuilder::VERSION
17
17
  gem.add_runtime_dependency 'builder'
18
18
  gem.add_runtime_dependency 'rest-client'
19
+ gem.add_runtime_dependency 'xml-simple'
19
20
  end
@@ -0,0 +1,11 @@
1
+ module DtefacilXmlBuilder
2
+
3
+ class DocumentoElectronico
4
+ attr_accessor :id, :url, :fchEmis, :rutRecep, :rutEmisor, :tipo, :folio, :mntTotal
5
+ end
6
+
7
+ class Collection
8
+ attr_accessor :pag, :tPag, :total, :pags, :documentos
9
+ end
10
+
11
+ end
@@ -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.set_factura [324], receptor, detalles
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
@@ -1,3 +1,3 @@
1
1
  module DtefacilXmlBuilder
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -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.6
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-06 00:00:00.000000000 Z
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