cfdi 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/lib/cfdi.rb +1 -1
- data/lib/comprobante.rb +15 -9
- data/lib/comun.rb +8 -3
- data/lib/concepto.rb +6 -2
- data/lib/entidad.rb +1 -0
- data/lib/xml.rb +18 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 819b733dd887956bd873ebc757e904dae158ccba
|
4
|
+
data.tar.gz: 666e22545e406b052b1d5784cd141ddb46553aa7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54550b9cb1304738e761a9cc780c7de768df3e41470cabeff53873e288dd11bd90b1875c73b3d36a7fac78e47d6128a4b5a79156a6472967d79f447a5dcace2b
|
7
|
+
data.tar.gz: a1ae22c7fdeba01e0be6cb51630b4cbd74cb0075950d11818033caf8db6fedbcac865017d93ca3245308439225429cfcc3886ebb2907109f26b947d139ee348f
|
data/lib/cfdi.rb
CHANGED
data/lib/comprobante.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module CFDI
|
2
2
|
class Comprobante
|
3
3
|
|
4
|
-
@@datosCadena = [:version, :fecha, :tipoDeComprobante, :formaDePago, :condicionesDePago, :subTotal, :moneda, :total, :metodoDePago, :lugarExpedicion]
|
5
|
-
@@data = @@datosCadena+[:emisor, :receptor, :conceptos, :serie, :folio, :sello, :noCertificado, :certificado, :
|
4
|
+
@@datosCadena = [:version, :fecha, :tipoDeComprobante, :formaDePago, :condicionesDePago, :subTotal, :TipoCambio, :moneda, :total, :metodoDePago, :lugarExpedicion, :NumCtaPago]
|
5
|
+
@@data = @@datosCadena+[:emisor, :receptor, :conceptos, :serie, :folio, :sello, :noCertificado, :certificado, :conceptos, :complemento, :cancelada, :impuestos]
|
6
6
|
attr_accessor *@@data
|
7
7
|
|
8
8
|
@@options = {
|
@@ -11,6 +11,7 @@ module CFDI
|
|
11
11
|
moneda: 'pesos',
|
12
12
|
version: '3.2',
|
13
13
|
subTotal: 0.0,
|
14
|
+
TipoCambio: 1,
|
14
15
|
conceptos: [],
|
15
16
|
impuestos: [],
|
16
17
|
tipoDeComprobante: 'ingreso'
|
@@ -22,10 +23,14 @@ module CFDI
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def initialize (data={}, options={})
|
25
|
-
|
26
|
-
|
26
|
+
#hack porque dup se caga con instance variables
|
27
|
+
opts = Marshal::load(Marshal.dump(@@options))
|
28
|
+
data = opts[:defaults].merge data
|
29
|
+
@opciones = opts.merge options
|
27
30
|
data.each do |k,v|
|
28
|
-
|
31
|
+
method = "#{k}="
|
32
|
+
next if !self.respond_to? method
|
33
|
+
self.send method, v
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
@@ -93,7 +98,8 @@ module CFDI
|
|
93
98
|
LugarExpedicion: @lugarExpedicion,
|
94
99
|
}
|
95
100
|
ns[:serie] = @serie if @serie
|
96
|
-
ns[:
|
101
|
+
ns[:TipoCambio] = @TipoCambio if @TipoCambio
|
102
|
+
ns[:NumCtaPago] = @NumCtaPago if @NumCtaPago
|
97
103
|
|
98
104
|
if @noCertificado
|
99
105
|
ns[:noCertificado] = @noCertificado
|
@@ -127,7 +133,7 @@ module CFDI
|
|
127
133
|
xml.Impuestos({totalImpuestosTrasladados: self.subTotal*@opciones[:tasa]}) {
|
128
134
|
xml.Traslados {
|
129
135
|
@impuestos.each do |impuesto|
|
130
|
-
xml.Traslado({impuesto: impuesto[:impuesto], tasa
|
136
|
+
xml.Traslado({impuesto: impuesto[:impuesto], tasa:(@opciones[:tasa]*100).to_i, importe: self.subTotal*@opciones[:tasa]})
|
131
137
|
end
|
132
138
|
}
|
133
139
|
}
|
@@ -170,9 +176,9 @@ module CFDI
|
|
170
176
|
@conceptos.each do |concepto|
|
171
177
|
params += concepto.cadena_original
|
172
178
|
end
|
173
|
-
|
179
|
+
|
174
180
|
@impuestos.each do |traslado|
|
175
|
-
params += [traslado[:impuesto], @opciones[:tasa]*100, self.subTotal*@opciones[:tasa], self.subTotal*@opciones[:tasa]]
|
181
|
+
params += [traslado[:impuesto], (@opciones[:tasa]*100).to_i, self.subTotal*@opciones[:tasa], self.subTotal*@opciones[:tasa]]
|
176
182
|
end
|
177
183
|
|
178
184
|
params.select! { |i| i != nil }
|
data/lib/comun.rb
CHANGED
@@ -34,9 +34,14 @@ module CFDI
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def to_h
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
h = {}
|
38
|
+
self.class.data.each do |v|
|
39
|
+
value = self.send(v)
|
40
|
+
value = value.to_h if value.is_a? ElementoComprobante
|
41
|
+
h[v] = value
|
42
|
+
end
|
43
|
+
|
44
|
+
h
|
40
45
|
end
|
41
46
|
|
42
47
|
end
|
data/lib/concepto.rb
CHANGED
@@ -12,8 +12,8 @@ module CFDI
|
|
12
12
|
@unidad,
|
13
13
|
@noIdentificacion,
|
14
14
|
@descripcion,
|
15
|
-
|
16
|
-
|
15
|
+
self.valorUnitario,
|
16
|
+
self.importe
|
17
17
|
]
|
18
18
|
end
|
19
19
|
|
@@ -25,6 +25,10 @@ module CFDI
|
|
25
25
|
return @valorUnitario*@cantidad
|
26
26
|
end
|
27
27
|
|
28
|
+
def cantidad= qty
|
29
|
+
@cantidad = qty.to_i
|
30
|
+
end
|
31
|
+
|
28
32
|
end
|
29
33
|
|
30
34
|
end
|
data/lib/entidad.rb
CHANGED
data/lib/xml.rb
CHANGED
@@ -26,14 +26,15 @@ module CFDI
|
|
26
26
|
factura.lugarExpedicion = comprobante.attr('LugarExpedicion')
|
27
27
|
factura.metodoDePago = comprobante.attr('metodoDePago')
|
28
28
|
factura.moneda = comprobante.attr('Moneda')
|
29
|
+
factura.NumCtaPago = comprobante.attr('NumCtaPago')
|
29
30
|
|
30
31
|
|
31
|
-
|
32
|
+
rf = emisor.at_xpath('//RegimenFiscal')
|
32
33
|
|
33
34
|
emisor = {
|
34
35
|
rfc: emisor.attr('rfc'),
|
35
36
|
nombre: emisor.attr('nombre'),
|
36
|
-
regimenFiscal:
|
37
|
+
regimenFiscal: rf && rf.attr('Regimen'),
|
37
38
|
domicilioFiscal: {
|
38
39
|
calle: de.attr('calle'),
|
39
40
|
noExterior: de.attr('noExterior'),
|
@@ -44,14 +45,14 @@ module CFDI
|
|
44
45
|
municipio: de.attr('municipio'),
|
45
46
|
estado: de.attr('estado'),
|
46
47
|
pais: de.attr('pais'),
|
47
|
-
|
48
|
+
codigoPostal: de.attr('codigoPostal')
|
48
49
|
}
|
49
50
|
}
|
50
51
|
|
51
52
|
if exp
|
52
53
|
emisor[:expedidoEn] = {
|
53
54
|
calle: exp.attr('calle'),
|
54
|
-
|
55
|
+
noExterior: exp.attr('noExterior'),
|
55
56
|
no_int: exp.attr('noInterior'),
|
56
57
|
colonia: exp.attr('colonia'),
|
57
58
|
localidad: exp.attr('localidad'),
|
@@ -59,7 +60,7 @@ module CFDI
|
|
59
60
|
municipio: exp.attr('municipio'),
|
60
61
|
estado: exp.attr('estado'),
|
61
62
|
pais: exp.attr('pais'),
|
62
|
-
|
63
|
+
codigoPostal: exp.attr('codigoPostal')
|
63
64
|
}
|
64
65
|
end
|
65
66
|
|
@@ -70,32 +71,34 @@ module CFDI
|
|
70
71
|
nombre: receptor.attr('nombre'),
|
71
72
|
domicilioFiscal: {
|
72
73
|
calle: dr.attr('calle'),
|
73
|
-
|
74
|
-
|
74
|
+
noExterior: dr.attr('noExterior'),
|
75
|
+
noInterior: dr.attr('noInterior'),
|
75
76
|
colonia: dr.attr('colonia'),
|
76
77
|
localidad: dr.attr('localidad'),
|
77
78
|
referencia: dr.attr('referencia'),
|
78
79
|
municipio: dr.attr('municipio'),
|
79
80
|
estado: dr.attr('estado'),
|
80
81
|
pais: dr.attr('pais'),
|
81
|
-
|
82
|
+
codigoPostal: dr.attr('codigoPostal')
|
82
83
|
}
|
83
84
|
}
|
85
|
+
|
84
86
|
|
85
|
-
|
87
|
+
factura.conceptos = []
|
88
|
+
#puts "conceptos: #{factura.conceptos.length}"
|
86
89
|
xml.xpath('//Concepto').each do |concepto|
|
87
90
|
total = concepto.attr('importe').to_f
|
88
|
-
|
91
|
+
hash = {
|
89
92
|
cantidad: concepto.attr('cantidad').to_f,
|
90
93
|
unidad: concepto.attr('unidad'),
|
91
94
|
noIdentificacion: concepto.attr('noIdentificacion'),
|
92
95
|
descripcion: concepto.attr('descripcion'),
|
93
96
|
valorUnitario: concepto.attr('valorUnitario').to_f
|
94
|
-
}
|
97
|
+
}
|
98
|
+
#puts "hash: ", hash
|
99
|
+
factura.conceptos << Concepto.new(hash)
|
95
100
|
end
|
96
|
-
|
97
|
-
|
98
|
-
|
101
|
+
|
99
102
|
timbre = xml.at_xpath('//TimbreFiscalDigital')
|
100
103
|
if timbre
|
101
104
|
version = timbre.attr('version');
|
@@ -112,7 +115,7 @@ module CFDI
|
|
112
115
|
selloSAT: timbre.attr('selloSAT')
|
113
116
|
}
|
114
117
|
end
|
115
|
-
|
118
|
+
#factura.impuestos = []
|
116
119
|
factura.impuestos << {impuesto: 'IVA'}
|
117
120
|
|
118
121
|
factura
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfdi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Hidalgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|