cfdi40 0.2.1 → 0.3.0

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
  SHA256:
3
- metadata.gz: ecf98bb6f090122a8deb1fd4efdcc536452a130971dde09b6edcfb78fe4edc85
4
- data.tar.gz: 940ed9335fd2c541476f287b577a40574d2a07734278b730392533302755ad94
3
+ metadata.gz: 3be0f21285d38b188da1f754be05c94c8e441397b99c0999fad9ded2f49aad1e
4
+ data.tar.gz: 182ddc911312bb0e40785baef05ec34e0a5d365b48e8aac6be50c1e89febcf5f
5
5
  SHA512:
6
- metadata.gz: 796605c919c80f6e2de32b7055da870e46b8af0df71b4a5775943948f11be9b73c356a748d21615527a00aa2e4c6ba85ca5599e2105081e946a24d73755381fe
7
- data.tar.gz: f858dcd68742d342fdaa1790beaeafbcc8122f5f54a7f4d2bcbed70b74def6ad3108e3000d35eec221bafb5056d9e7e9347fbc86383b96ea458cfa05dee95b2a
6
+ metadata.gz: a0a03c705030d5cc17c8709a68b4e8054d170d93426c93e6162f3b728efbaa2d3771f389a0014a978edae29e8e615376090fb2c7a9b2c40ae48f704e865f97fd
7
+ data.tar.gz: 0e565d63b5e549bfff192979f34b2385fdf161923b0974a8f566b9bb023d61ede67ed94ad906f343686ff67d9113b55780f8aeeba92e9f1fe3bd24b10c7edaa6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cfdi40 (0.2.0)
4
+ cfdi40 (0.2.1)
5
5
  nokogiri (>= 1.10.10)
6
6
 
7
7
  GEM
@@ -16,5 +16,9 @@ module Cfdi40
16
16
  @children_nodes << @pagos
17
17
  @pagos
18
18
  end
19
+
20
+ def timbre
21
+ @children_nodes.select { |children| children.is_a?(Cfdi40::Timbre) }.first
22
+ end
19
23
  end
20
24
  end
@@ -264,6 +264,20 @@ module Cfdi40
264
264
  traslados.traslados_iva.map(&:importe).map(&:to_f).sum.round(2)
265
265
  end
266
266
 
267
+ def load_tfd(tfd_node)
268
+ timbre = Cfdi40::Timbre.new
269
+ timbre.load_from_ng_node(tfd_node)
270
+ timbre.parent_node = complemento
271
+ complemento.children_nodes << timbre
272
+ timbre
273
+ end
274
+
275
+ def timbre
276
+ return nil unless defined?(@complemento)
277
+
278
+ complemento.timbre
279
+ end
280
+
267
281
  private
268
282
 
269
283
  def add_node_concepto_actividad_pago
data/lib/cfdi40/node.rb CHANGED
@@ -187,7 +187,18 @@ module Cfdi40
187
187
  self.class.attributes.each do |variable_name, attr_name|
188
188
  next if ng_node.attributes[attr_name].nil?
189
189
 
190
- instance_variable_set("@#{variable_name}".to_sym, ng_node.attributes[attr_name].value)
190
+ case self.class.formats[variable_name]
191
+ when :t_FechaH, :t_FechaHora
192
+ begin
193
+ parsed_time = Time.strptime(ng_node.attributes[attr_name].value, "%Y-%m-%dT%H:%M:%S")
194
+ instance_variable_set("@#{variable_name}".to_sym, parsed_time)
195
+ rescue
196
+ puts "Warning: cannot parse '#{value}' as Time"
197
+ next
198
+ end
199
+ else
200
+ instance_variable_set("@#{variable_name}".to_sym, ng_node.attributes[attr_name].value)
201
+ end
191
202
  end
192
203
  end
193
204
 
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Cfdi40
3
+ class Timbre < Node
4
+ define_attribute :version, readonly: true, xml_attribute: "Version"
5
+ define_attribute :rfc_prov_certif, readonly: true, xml_attribute: "RfcProvCertif"
6
+ define_attribute :fecha_timbrado, readonly: true, xml_attribute: "FechaTimbrado", format: :t_FechaH
7
+ define_attribute :uuid, readonly: true, xml_attribute: "UUID"
8
+ define_attribute :sello_cfd, readonly: true, xml_attribute: "SelloCFD"
9
+ define_attribute :sello_sat, readonly: true, xml_attribute: "SelloSAT"
10
+ define_attribute :no_certificado_sat, readonly: true, xml_attribute: "NoCertificadoSAT"
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cfdi40
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -17,6 +17,7 @@ module Cfdi40
17
17
  load_receptor
18
18
  load_conceptos
19
19
  load_impuestos
20
+ load_tfd
20
21
 
21
22
  @cfdi.lock if readonly?
22
23
  @cfdi.loaded_xml = xml_string
@@ -62,5 +63,13 @@ module Cfdi40
62
63
 
63
64
  @cfdi.load_impuestos(impuestos_node)
64
65
  end
66
+
67
+ def load_tfd
68
+ tfd_namespace = { "tfd" => "http://www.sat.gob.mx/TimbreFiscalDigital" }
69
+ tfd_node = xml_doc.xpath("//tfd:TimbreFiscalDigital", tfd_namespace).first
70
+ return if tfd_node.nil?
71
+
72
+ @cfdi.load_tfd(tfd_node)
73
+ end
65
74
  end
66
75
  end
data/lib/cfdi40.rb CHANGED
@@ -32,6 +32,7 @@ require_relative "cfdi40/impuestos_p"
32
32
  require_relative "cfdi40/traslados_p"
33
33
  require_relative "cfdi40/traslado_p"
34
34
  require_relative "cfdi40/cp_totales"
35
+ require_relative "cfdi40/timbre"
35
36
  require_relative "cfdi40/xml_loader"
36
37
 
37
38
  # Leading module and entry point for all features and classes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfdi40
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Israel Benítez
@@ -64,6 +64,7 @@ files:
64
64
  - lib/cfdi40/sat_csd.rb
65
65
  - lib/cfdi40/schema_validator.rb
66
66
  - lib/cfdi40/signature_validator.rb
67
+ - lib/cfdi40/timbre.rb
67
68
  - lib/cfdi40/traslado.rb
68
69
  - lib/cfdi40/traslado_dr.rb
69
70
  - lib/cfdi40/traslado_p.rb