Uecko_ERP_FactuGES_sync/app/sync_verifactu_main.py

96 lines
3.1 KiB
Python
Raw Permalink Normal View History

2025-08-28 08:51:05 +00:00
import sys
from datetime import datetime
2025-11-30 22:44:55 +00:00
from pathlib import Path
2025-08-28 08:51:05 +00:00
from dateutil import tz
2025-11-30 22:44:55 +00:00
from app.config import create_logger, get_package_version, load_config, log_config
from app.db import get_mysql_connection, sync_invoices_verifactu
from app.utils import actualizar_fecha_ultima_ejecucion, obtener_fecha_ultima_ejecucion
2025-08-28 08:51:05 +00:00
def main():
# Cargar la configuración
config = load_config()
2025-11-30 18:28:44 +00:00
version = get_package_version()
2025-08-28 08:51:05 +00:00
local_tz = tz.gettz(config['LOCAL_TZ'])
2025-11-30 22:44:55 +00:00
state_path = Path(config["STATE_PATH"])
2025-08-28 08:51:05 +00:00
# Logging
2025-11-30 22:44:55 +00:00
log_dir = state_path / "logs"
log_dir.mkdir(parents=True, exist_ok=True)
2025-11-30 18:28:44 +00:00
logger = create_logger(
name="factuges-sync",
2025-11-30 22:44:55 +00:00
log_path=log_dir / "sync_verifactu.log", # Solo lo genera en producción
2025-11-30 18:28:44 +00:00
)
logger.info("============================================================")
2025-12-01 08:55:54 +00:00
logger.info("FACTUGES Sync Verifactu - START ")
logger.info("Version: %s", version)
logger.info("UTC Now: %s", datetime.utcnow().isoformat())
logger.info("Environment: %s", config['ENV'])
logger.info("Log: %s", log_dir / "sync_verifactu.log")
2025-08-28 08:51:05 +00:00
2025-11-30 18:28:44 +00:00
log_config(config)
2025-08-28 08:51:05 +00:00
2025-11-30 22:44:55 +00:00
state_file = Path(config["STATE_PATH"]) / "verifactu_last.ini"
2025-08-28 08:51:05 +00:00
conn_factuges = None
conn_mysql = None
try:
# Obtener la fecha de la última ejecución del programa
2025-11-30 22:44:55 +00:00
last_execution_date_utc = obtener_fecha_ultima_ejecucion(state_file)
2025-08-28 08:51:05 +00:00
last_execution_date_local_tz = last_execution_date_utc.astimezone(
tz=local_tz).strftime("%Y-%m-%d %H:%M:%S")
2025-11-30 18:28:44 +00:00
logger.info("Last execution (UTC): %s",
last_execution_date_utc.strftime("%Y-%m-%d %H:%M:%S %Z"))
logger.info("Last execution (Local time): %s",
last_execution_date_local_tz)
2025-08-28 08:51:05 +00:00
2025-11-27 19:08:06 +00:00
# Abrimos conexión con una única transacción para que todo esté controlado
2025-10-29 16:08:14 +00:00
conn_mysql = get_mysql_connection(config)
2025-10-03 18:22:15 +00:00
# Sync Verifactu
2025-11-30 18:28:44 +00:00
logger.info(
2025-11-30 22:44:55 +00:00
">>>>>>>>>> INI Sync facturas emitidas to Verifactu")
2025-11-20 18:51:03 +00:00
sync_invoices_verifactu(conn_mysql, last_execution_date_local_tz)
2025-10-29 16:08:14 +00:00
conn_mysql.commit()
conn_mysql.close()
2025-11-30 22:44:55 +00:00
logger.info(">>>>>>>>>> FIN Sync facturas emitidas to Verifactu")
2025-10-03 18:22:15 +00:00
2025-11-30 22:44:55 +00:00
actualizar_fecha_ultima_ejecucion(state_file)
2025-08-28 08:51:05 +00:00
# Enviar email
2025-09-04 16:54:32 +00:00
# send_orders_mail(inserted_orders)
2025-08-28 08:51:05 +00:00
2025-11-30 18:28:44 +00:00
logger.info("== END (0) ==")
logger.info("============================================================")
2025-08-28 08:51:05 +00:00
sys.exit(0)
except Exception as e:
2025-11-30 18:28:44 +00:00
logger.error("Se ha producido un error en la última ejecución.")
logger.error(e)
logger.error("Traceback:", exc_info=True)
logger.info("== END (1) ==")
logger.info("============================================================")
2025-08-28 08:51:05 +00:00
if conn_mysql is not None:
conn_mysql.rollback()
if conn_factuges is not None:
conn_factuges.rollback()
sys.exit(1)
finally:
if conn_factuges:
conn_factuges.close()
if conn_mysql:
conn_mysql.close()
if __name__ == "__main__":
main()