Agregar soporte para rangos de fechas

This commit is contained in:
Mauricio Baeza 2021-08-06 22:02:30 -05:00
parent f68d4a898a
commit 5adf7086aa
3 changed files with 63 additions and 9 deletions

View File

@ -41,13 +41,26 @@ def _process_command_line_arguments():
parser.add_argument('-fn', '--fiel-nombre', help=help, default='fiel') parser.add_argument('-fn', '--fiel-nombre', help=help, default='fiel')
help = "Descargar por Tipo: t=todos(default), e=emitidas, r=recibidas" help = "Descargar por Tipo: t=todos(default), e=emitidas, r=recibidas"
parser.add_argument('-t', '--tipo', help=help, dest='type', default='t', choices=['t', 'e', 'r']) parser.add_argument('-t', '--tipo', help=help,
dest='type', default='t', choices=['t', 'e', 'r'])
help = "Año de la descarga entre 2014 y el año actual (predeterminado)." help = "Año de la descarga entre 2014 y el año actual (predeterminado)."
parser.add_argument('-a', '--año', help=help, dest='year', default=year, type=int, choices=range(2014, year+1)) parser.add_argument('-a', '--año', help=help,
dest='year', default=year, type=int, choices=range(2014, year+1))
help = "Mes de la descarga, el mes actual es el predeterminado" help = "Mes de la descarga, el mes actual es el predeterminado"
parser.add_argument('-m', '--mes', help=help, dest='month', default=0, type=int, choices=range(13)) parser.add_argument('-m', '--mes', help=help,
dest='month', default=0, type=int, choices=range(13))
help = "Día de la descarga, de forma predeterminada no se usa" help = "Día de la descarga, de forma predeterminada no se usa"
parser.add_argument('-d', '--dia', help=help, dest='day', default=0, type=int, choices=range(32)) parser.add_argument('-d', '--dia', help=help,
dest='day', default=0, type=int, choices=range(32))
help = "Intervalo de días a partir de la fecha actual y hacia a atras"
parser.add_argument('-ud', '--ultimos-dias', help=help,
dest='last_days', default=0, type=int, choices=range(30))
help = "Fecha inicial AAAA-MM-DD"
parser.add_argument('-fi', '--fecha-inicial', help=help,
dest='date_start', default='')
help = "Fecha final AAAA-MM-DD"
parser.add_argument('-ff', '--fecha-final', help=help,
dest='date_end', default='')
help = 'Solicitar descarga' help = 'Solicitar descarga'
parser.add_argument('-sd', '--solicitar-descarga', help=help, parser.add_argument('-sd', '--solicitar-descarga', help=help,
@ -59,9 +72,11 @@ def _process_command_line_arguments():
parser.add_argument('-da', '--descargar-archivos', help=help, parser.add_argument('-da', '--descargar-archivos', help=help,
action='store_true', default=False, required=False) action='store_true', default=False, required=False)
help = 'ID de solicitud' help = 'ID de solicitud'
parser.add_argument('-id', '--id-solicitud', dest='id_request', help=help, default='') parser.add_argument('-id', '--id-solicitud', dest='id_request',
help=help, default='')
help = 'ID archivo' help = 'ID archivo'
parser.add_argument('-ida', '--id-archivo', dest='id_file', help=help, default='') parser.add_argument('-ida', '--id-archivo', dest='id_file',
help=help, default='')
help = 'Ruta de descarga de archivos' help = 'Ruta de descarga de archivos'
parser.add_argument('-dd', '--directorio-descargas', dest='path_download', parser.add_argument('-dd', '--directorio-descargas', dest='path_download',
help=help, default='') help=help, default='')

View File

@ -131,6 +131,7 @@ class SATWebService():
# ~ soap = ET.tostring(root, pretty_print=True, encoding='utf-8') # ~ soap = ET.tostring(root, pretty_print=True, encoding='utf-8')
soap = ET.tostring(root) soap = ET.tostring(root)
return soap return soap
def _get_token(self): def _get_token(self):

View File

@ -3,7 +3,7 @@
import getpass import getpass
import uuid import uuid
from calendar import monthrange from calendar import monthrange
from datetime import datetime from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
from time import sleep from time import sleep
@ -126,6 +126,21 @@ def _get_cert(data):
return cert return cert
def _to_date(str_date, end=False):
error = ''
dt = None
try:
parts = str_date.split('-')
if end:
dt = datetime(int(parts[0]), int(parts[1]), int(parts[2]), 23, 59, 59)
else:
dt = datetime(int(parts[0]), int(parts[1]), int(parts[2]), 0, 0, 0)
except Exception as e:
error = 'Fecha inválida'
return error, dt
def _validate_requests_args(args): def _validate_requests_args(args):
result, data = _validate_fiel_args(args) result, data = _validate_fiel_args(args)
if not result: if not result:
@ -149,14 +164,37 @@ def _validate_requests_args(args):
data['month'] = args.month data['month'] = args.month
data['day'] = args.day data['day'] = args.day
now = today()
if args.last_days:
date_start = now.replace(hour=0, minute=0, second=0, microsecond=0) \
- timedelta(days=args.last_days)
date_end = now.replace(hour=23, minute=59, second=59, microsecond=0)
data['date_start'] = date_start
data['date_end'] = date_end
return True, data
if args.date_start and args.date_end:
error, date_start = _to_date(args.date_start)
if error:
log.error(error)
return False, {}
error, date_end = _to_date(args.date_end, True)
if error:
log.error(error)
return False, {}
data['date_start'] = date_start
data['date_end'] = date_end
return True, data
if data['day']: if data['day']:
if not validate_date(data['year'], data['month'], data['day']): if not validate_date(data['year'], data['month'], data['day']):
msg = 'Fecha inválida' msg = 'Fecha inválida'
log.error(msg) log.error(msg)
return False, {} return False, {}
now = today()
month1 = month2 = data['month'] month1 = month2 = data['month']
if month1 == 0: if month1 == 0:
month1 = 1 month1 = 1