catalogos_sat 0.0.1 → 0.0.2
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/catalogos_sat.rb +21 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2234a7e9fe29abd1287ab7986ff7e1d92d59a553
|
4
|
+
data.tar.gz: 1f4638fb2ef285cb522d34584a2e5e7ba6e41a8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95f9bb29d21239c61a4174ce1c90114e55fe831f87217f5aaa95b50a1d601c8cb3604c8641d0c8802d571972c80209a8b8bf69cbf4ee7e2ccd7dd2dbc45bb04d
|
7
|
+
data.tar.gz: 2274cdb4bc120207e9cb6b87b4ba6d588ae49e2200c571ef38a4815e16e4b18670c5fae8ae67d7ce07d7f0f04b4e1f1aa840d28d113ff932a5fae8179972bf4c
|
data/lib/catalogos_sat.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
# Clase principal, se instancia con Catalogos.new()
|
3
3
|
class Catalogos
|
4
4
|
require 'progressbar'
|
5
5
|
require 'spreadsheet'
|
6
6
|
require 'json'
|
7
7
|
require 'net/http'
|
8
8
|
|
9
|
+
# Codigo para reemplazar caracteres NO ASCII en los encabezados
|
10
|
+
# Ref: https://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby
|
9
11
|
REPLACEMENTS = {
|
10
12
|
'á' => "a",
|
11
13
|
'é' => 'e',
|
@@ -19,6 +21,7 @@ class Catalogos
|
|
19
21
|
attr_accessor :local_eTag
|
20
22
|
|
21
23
|
|
24
|
+
# Inicializa la configuracion de encoding y variables de instancia
|
22
25
|
def initialize()
|
23
26
|
@encoding_options = {
|
24
27
|
:invalid => :replace, # Replace invalid byte sequences
|
@@ -35,6 +38,10 @@ class Catalogos
|
|
35
38
|
end
|
36
39
|
|
37
40
|
|
41
|
+
# Descarga el .xls de los catalogos del SAT y lo guarda en el folder temporal del sistema operativo.
|
42
|
+
# Despues de correr este metodo, se asigna la variable @last_eTag en base al archivo descargado.
|
43
|
+
# @param url_excel [String] el url donde el SAT tiene los catalogos, valor default "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls"
|
44
|
+
# @note Generalmente se mandara llamar vacio a menos que el SAT cambie el url en el futuro.
|
38
45
|
def descargar(url_excel = "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls")
|
39
46
|
|
40
47
|
begin
|
@@ -51,7 +58,7 @@ class Catalogos
|
|
51
58
|
|
52
59
|
tempdir = Dir.tmpdir()
|
53
60
|
|
54
|
-
File.open("#{tempdir}/catalogo.xls", "
|
61
|
+
File.open("#{tempdir}/catalogo.xls", "wb") do |f|
|
55
62
|
http.get(url_excel.path) do |str|
|
56
63
|
bytesDescargados += str.length
|
57
64
|
relation = 100 * bytesDescargados / totalSize
|
@@ -72,7 +79,8 @@ class Catalogos
|
|
72
79
|
|
73
80
|
end
|
74
81
|
|
75
|
-
|
82
|
+
# Genera un folder "catalogosJSON" en la ruta temporal del sistema operativo, requiere que ya exista el .xls generado,
|
83
|
+
# usualmente se usa despues de mandar llamar descargar.
|
76
84
|
def procesar()
|
77
85
|
|
78
86
|
begin
|
@@ -219,6 +227,11 @@ class Catalogos
|
|
219
227
|
|
220
228
|
end
|
221
229
|
|
230
|
+
# Compara el eTag del .xls en la pagina del SAT con el @last_eTag
|
231
|
+
# @param local_eTag [String] siempre intentara utilizar el @last_eTag a menos que se mande explicitamente un eTag, este se puede
|
232
|
+
# obtener de @last_eTag en una iteracion previa del programa.
|
233
|
+
# @param url_excel [String] el url donde el SAT tiene los catalogos, valor default "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls"
|
234
|
+
# @return [Bool] verdadero si los eTags son distintos, es decir, si hay una nueva version disponible.
|
222
235
|
def nuevo_xls?(local_eTag = nil, url_excel = "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls")
|
223
236
|
local_eTag = @local_eTag if local_eTag.nil?
|
224
237
|
url_excel = URI.parse(url_excel)
|
@@ -235,6 +248,11 @@ class Catalogos
|
|
235
248
|
|
236
249
|
end
|
237
250
|
|
251
|
+
# Encapsula los demas metodos en una sola rutina
|
252
|
+
# @param local_eTag [String] siempre intentara utilizar el @last_eTag a menos que se mande explicitamente un eTag, este se puede
|
253
|
+
# obtener de @last_eTag en una iteracion previa del programa.
|
254
|
+
# @param url_excel [String] el url donde el SAT tiene los catalogos, valor default "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls"
|
255
|
+
# @return [Bool] verdadero si no hubo ningun error.
|
238
256
|
def main(local_eTag = nil, url_excel = "http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Documents/catCFDI.xls")
|
239
257
|
|
240
258
|
if (nuevo_xls?(local_eTag, url_excel))
|