se agrega fallback OWTR y calculo de fecha de vencimiento por condicion de pago
- hana_manager.get_delivery ahora busca en ODLN y, si no encuentra, en OWTR - sapb1_manager resuelve StockTransfers -> Orders (via U_IDC_NUMOV) para validar precios de flete cuando la guia es un traslado de inventario - se corrige el orden de parametros tipo/serie/numero (sin cruces) en get_delivery, get_delivery_notes y _get_delivery_entries - se agrega sapb1_manager.obtener_condicion_pago (BusinessPartners + PaymentTermsTypes) y pipeline._calcular_fecha_vencimiento para que DocDueDate del draft sea fecha de contabilizacion + dias de la condicion de pago del proveedor - se agrega variante de regex para "VALOR REFER" truncado en sunat_schema.py - se actualiza documentacion (docs/) reflejando estos cambios Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d023f14ad9
commit
c532170ac2
230 files changed
+21397
-475
No files matched your search
@@ -1,29 +1,5 @@
|
||||
import os
|
||||
import zipfile
|
||||
import database_utilities
|
||||
|
||||
# ============================================================================
|
||||
def quitar_correos_ya_registrados_en_base_de_datos(emails: list[dict]) -> list[dict]:
|
||||
"""
|
||||
Verifica cuáles correos son nuevos (no están en la BD), los guarda
|
||||
y retorna la lista filtrada de los que tienen adjuntos.
|
||||
"""
|
||||
if not emails:
|
||||
return []
|
||||
|
||||
# 1. Verificar cuáles ya existen en la BD
|
||||
ids = [e['id'] for e in emails]
|
||||
existentes = database_utilities.get_existing_ids(ids)
|
||||
|
||||
# Solo nos quedamos con los que NO están en la BD
|
||||
correos_no_registrados = [e for e in emails if e['id'] not in existentes]
|
||||
print(f"Correos nuevos detectados: {len(correos_no_registrados)}")
|
||||
|
||||
if correos_no_registrados:
|
||||
print("Guardando nuevos correos en la base de datos...")
|
||||
database_utilities.save_emails(correos_no_registrados)
|
||||
|
||||
return correos_no_registrados
|
||||
|
||||
# ============================================================================
|
||||
def descomprimir_adjuntos(emails: list[dict], ruta: str) -> list[dict]:
|
||||
@@ -73,21 +49,4 @@ def filtrar_archivos_validos(archivos: list[str]) -> list[str]:
|
||||
return [a for a in archivos if a.lower().endswith(extensiones_validas)]
|
||||
|
||||
# ============================================================================
|
||||
def procesar_adjuntos_email(e: dict, archivos: list[str], ruta_descarga: str) -> list[str]:
|
||||
"""
|
||||
Descomprime y filtra los archivos de un correo.
|
||||
Retorna la lista de archivos válidos si existen, de lo contrario lista vacía.
|
||||
"""
|
||||
# 1. Descomprimir archivos ZIP si existen
|
||||
archivos_procesados = descomprimir_adjuntos(archivos, ruta_descarga)
|
||||
|
||||
# 2. Filtrar solo PDF y XML
|
||||
archivos_validos = filtrar_archivos_validos(archivos_procesados)
|
||||
|
||||
if archivos_validos:
|
||||
e['archivos'] = archivos_validos
|
||||
return archivos_validos
|
||||
return []
|
||||
|
||||
# ============================================================================
|
||||
|
||||
Reference in new issue
Block a user