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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d836e65d5a547695b349900d544dbef6d98c8577
4
- data.tar.gz: 16196410eab178b2bcbb597291d3e238ca9a31c0
3
+ metadata.gz: 819b733dd887956bd873ebc757e904dae158ccba
4
+ data.tar.gz: 666e22545e406b052b1d5784cd141ddb46553aa7
5
5
  SHA512:
6
- metadata.gz: 645be724dcf5d8be0f6272960fef3f57577620daca276ca84f3c57b41bbde7308236f4106d9ea1b76828934cbf808cac16826f662b29fd17d321ca8012630e59
7
- data.tar.gz: 56a024b9e4ad6041610882228bf1c181d70878fc9e6ff7152c0d34053f26764a4f101ef74869a1938b8ceb97a9407b51e15e6da3408311af065ebef762ec14a6
6
+ metadata.gz: 54550b9cb1304738e761a9cc780c7de768df3e41470cabeff53873e288dd11bd90b1875c73b3d36a7fac78e47d6128a4b5a79156a6472967d79f447a5dcace2b
7
+ data.tar.gz: a1ae22c7fdeba01e0be6cb51630b4cbd74cb0075950d11818033caf8db6fedbcac865017d93ca3245308439225429cfcc3886ebb2907109f26b947d139ee348f
data/lib/cfdi.rb CHANGED
@@ -16,6 +16,6 @@ module CFDI
16
16
  require 'time'
17
17
  require 'base64'
18
18
 
19
- VERSION = '0.0.5'
19
+ VERSION = '0.0.6'
20
20
 
21
21
  end
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, :impuestos, :complemento, :NumCtaPago, :TipoCambio]
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
- data = @@options[:defaults].merge data
26
- @opciones = @@options.merge options
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
- self.send "#{k}=", v
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[:serie] = @TipoCambio if @TipoCambio
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:@opciones[:tasa]*100.to_i, importe: self.subTotal*@opciones[: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
- Hash[*self.class.data.map { |v|
38
- [v, self.send(v)]
39
- }.flatten]
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
- @valorUnitario,
16
- @importe
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
@@ -22,6 +22,7 @@ module CFDI
22
22
  end
23
23
 
24
24
  def expedidoEn= domicilio
25
+ return if !domicilio
25
26
  domicilio = Domicilio.new domicilio unless domicilio.is_a? Domicilio
26
27
  @expedidoEn = domicilio
27
28
  end
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: emisor.at_xpath('//RegimenFiscal').attr('Regimen'),
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
- cp: de.attr('codigoPostal')
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
- no_ext: exp.attr('noExterior'),
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
- cp: exp.attr('codigoPostal')
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
- no_ext: dr.attr('noExterior'),
74
- no_int: dr.attr('noInterior'),
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
- cp: dr.attr('codigoPostal')
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
- factura.conceptos << Concepto.new({
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.5
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-19 00:00:00.000000000 Z
11
+ date: 2013-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri