class MX::SAT::Contabilidad::CatalogoCuentas
Constants
- NAMESPACE
OJOOOOOO están mal las URLs, pero el
SAT
así las tiene en sus XSDs al 28 de Feb de 2015- NAMESPACES
- VERSION
- XSD_CATALOGO_CUENTAS
- XSLT_CATALOGO_CUENTAS
Attributes
año[RW]
certificado[RW]
datos[RW]
llave_privada[RW]
mes[RW]
nombre_archivo[R]
passwd_llave_privada[RW]
rfc[RW]
xml[R]
xml_certificado[R]
Public Class Methods
new()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 18 def initialize @xml = nil @xml_certificado = nil @nombre_archivo = nil @rfc = nil @año = nil @mes = nil @datos = [] @certificado = nil @llave_privada = nil @passwd_llave_privada = nil end
Public Instance Methods
cargar_xslx(archivo)
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 31 def cargar_xslx(archivo) doc = ::SimpleXlsxReader.open(archivo) filas = doc.sheets.find{ |s| s.name.downcase == "datos" }.rows[1..-1] obtener_atributos_generales(filas.first) @datos = filas.map { |fila| { CodAgrup: fila[3], NumCta: fila[4], Desc: fila[5], SubCtaDe: fila[6], Nivel: fila[7], Natur: fila[8] } } end
generar_archivo_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 51 def generar_archivo_xml return unless @nombre_archivo File.open("#{@nombre_archivo}.xml", "w") {|f| f.write(@xml_certifcado || @xml || self.to_xml) } "#{@nombre_archivo}.xml" end
generar_archivo_zip()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 57 def generar_archivo_zip return unless @nombre_archivo self.generar_archivo_xml unless File.exist?("#{@nombre_archivo}.xml") ::Zip::File.open(File.join("#{@nombre_archivo}.zip"), ::Zip::File::CREATE) do |archivo_zip| archivo_zip.add("#{@nombre_archivo}.xml", "#{@nombre_archivo}.xml") end "#{@nombre_archivo}.zip" end
to_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 38 def to_xml return if @datos.empty? builder = ::Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml| xml['catalogocuentas'].Catalogo(atributos_nodo_catalogo) do @datos.each do |dato| xml.Ctas((dato[:SubCtaDe].nil? or dato[:SubCtaDe].empty?) ? dato.reject{|k,v| k == :SubCtaDe} : dato) end end end @xml = builder.to_xml certificar_xml end
xml_valido?()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 66 def xml_valido? xsd_doc = Nokogiri::XML::Schema(File.open(XSD_CATALOGO_CUENTAS, 'rb')) xml_doc = Nokogiri::XML(@xml_certificado || @xml || self.to_xml, nil, 'UTF-8') errors = "" xsd_doc.validate(xml_doc).each { |error| errors += " #{error.message}" } doc_valido = xsd_doc.valid?(xml_doc) puts "XML validado con #{xsd} es INVÁLIDO!: #{errors}" unless doc_valido return doc_valido end
Private Instance Methods
agregar_certificacion_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 86 def agregar_certificacion_xml xml_doc_sin_sello = Nokogiri::XML(@xml || to_xml, nil, 'UTF-8') cadena = ::MX::SAT::Certificacion.generar_cadena_original(@xml, XSLT_CATALOGO_CUENTAS) nodo_raiz = xml_doc_sin_sello.at_xpath('/catalogocuentas:Catalogo', NAMESPACE) nodo_raiz['Sello'] = ::MX::SAT::Certificacion.firma_sha256(cadena, @llave_privada, @passwd_llave_privada) nodo_raiz['noCertificado'] = ::MX::SAT::Certificacion.num_serial_certificado(@certificado) nodo_raiz['Certificado'] = ::MX::SAT::Certificacion.certificado_b64(@certificado) xml_doc_sin_sello.to_xml end
atributos_nodo_catalogo()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 96 def atributos_nodo_catalogo atributos = { Version: VERSION, RFC: @rfc, Mes: @mes, Anio: @año } atributos.merge(NAMESPACES) end
atributos_nodo_ctas(dato)
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 101 def atributos_nodo_ctas(dato) (dato[:SubCtaDe].nil? or dato[:SubCtaDe].empty?) ? dato.reject{|k,v| k == :SubCtaDe} : dato end
certificar_xml()
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 78 def certificar_xml if !@certificado.nil? and !@llave_privada.nil? @xml_certificado = agregar_certificacion_xml else @xml end end
fmto_mes(num)
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 112 def fmto_mes(num) "%02d" % num end
obtener_atributos_generales(fila)
click to toggle source
# File lib/MX/SAT/Contabilidad/catalogo_cuentas.rb, line 105 def obtener_atributos_generales(fila) arr = fila[0..2] @rfc, mes, @año = *arr @mes = fmto_mes(mes) @nombre_archivo = "#{@rfc}#{@año}#{@mes}CT" end