import sys from app.config import get_package_version from datetime import datetime from dateutil import tz from app.config import create_logger, load_config, log_config from app.db import get_mysql_connection, get_factuges_connection, sync_invoices_verifactu from app.utils import obtener_fecha_ultima_ejecucion, actualizar_fecha_ultima_ejecucion def main(): # Cargar la configuración config = load_config() version = get_package_version() local_tz = tz.gettz(config['LOCAL_TZ']) # Logging logger = create_logger( name="factuges-sync", log_path="/app/logs/sync_verifactu.log", # Solo lo genera en producción ) logger.info("============================================================") logger.info(" FACTUGES Sync Verifactu - START ") logger.info(" Version: %s", version) logger.info(" UTC Now: %s", datetime.utcnow().isoformat()) logger.info(" Environment: {config['ENV']}") log_config(config) conn_factuges = None conn_mysql = None try: # Obtener la fecha de la última ejecución del programa last_execution_date_utc = obtener_fecha_ultima_ejecucion() last_execution_date_local_tz = last_execution_date_utc.astimezone( tz=local_tz).strftime("%Y-%m-%d %H:%M:%S") 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) # Abrimos conexión con una única transacción para que todo esté controlado conn_mysql = get_mysql_connection(config) # Sync Verifactu logger.info( f">>>>>>>>>> INI Sync facturas emitidas to Verifactu") sync_invoices_verifactu(conn_mysql, last_execution_date_local_tz) conn_mysql.commit() conn_mysql.close() logger.info(f">>>>>>>>>> FIN Sync facturas emitidas to Verifactu") actualizar_fecha_ultima_ejecucion() # Enviar email # send_orders_mail(inserted_orders) logger.info("== END (0) ==") logger.info("============================================================") sys.exit(0) except Exception as e: 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("============================================================") 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()