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.
@@ -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