Actualizar backend/modules/ventas/logic.py
This commit is contained in:
@@ -163,6 +163,9 @@ class VentasLogic:
|
|||||||
set_vip_actual.add(val)
|
set_vip_actual.add(val)
|
||||||
lista_vip_str.append(str(val))
|
lista_vip_str.append(str(val))
|
||||||
except: pass
|
except: pass
|
||||||
|
# Lista PURA de BASE_PENDIENTES (sin overrides). Venta Pendientes usa SOLO esto.
|
||||||
|
set_lista_pendientes = set(set_vip_actual)
|
||||||
|
# Incluir matrículas con override de fecha (igual que ejecutar_consulta_ventas)
|
||||||
|
|
||||||
# Incluir matrículas con override de fecha (igual que ejecutar_consulta_ventas)
|
# Incluir matrículas con override de fecha (igual que ejecutar_consulta_ventas)
|
||||||
_fov_vip = getattr(self.data_manager, '_fecha_canc_overrides', None) or {}
|
_fov_vip = getattr(self.data_manager, '_fecha_canc_overrides', None) or {}
|
||||||
@@ -216,6 +219,21 @@ class VentasLogic:
|
|||||||
cursor.execute(sql_modificado, ano, mes_numero, ano, mes_numero)
|
cursor.execute(sql_modificado, ano, mes_numero, ano, mes_numero)
|
||||||
columns = [column[0] for column in cursor.description]
|
columns = [column[0] for column in cursor.description]
|
||||||
datos_raw = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
datos_raw = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
||||||
|
|
||||||
|
# DEDUP por num_matricula: el LEFT JOIN con RP_programa puede duplicar filas
|
||||||
|
# (una con fch_cancelacion y otra sin). Nos quedamos con UNA sola por matrícula,
|
||||||
|
# priorizando la que TENGA fecha de cancelación (verdad del pago).
|
||||||
|
_dedup = {}
|
||||||
|
for _d in datos_raw:
|
||||||
|
_m = str(_d.get('num_matricula', '')).strip()
|
||||||
|
if _m.endswith('.0'): _m = _m[:-2]
|
||||||
|
_prev = _dedup.get(_m)
|
||||||
|
_tiene_f = bool(_d.get('fch_cancelacion_cuota1'))
|
||||||
|
if _prev is None:
|
||||||
|
_dedup[_m] = _d
|
||||||
|
elif _tiene_f and not bool(_prev.get('fch_cancelacion_cuota1')):
|
||||||
|
_dedup[_m] = _d
|
||||||
|
datos_raw = list(_dedup.values())
|
||||||
|
|
||||||
# 🔥 DESCARGA DEL CRONOGRAMA COMPLETO (SIN IMPORTAR EL MES) 🔥
|
# 🔥 DESCARGA DEL CRONOGRAMA COMPLETO (SIN IMPORTAR EL MES) 🔥
|
||||||
lista_mats = list(set([str(d.get('num_matricula')).replace('.0','').strip() for d in datos_raw if d.get('num_matricula')]))
|
lista_mats = list(set([str(d.get('num_matricula')).replace('.0','').strip() for d in datos_raw if d.get('num_matricula')]))
|
||||||
@@ -322,6 +340,7 @@ class VentasLogic:
|
|||||||
saldo_mat = float(d.get('imp_saldo_matricula', 0.0))
|
saldo_mat = float(d.get('imp_saldo_matricula', 0.0))
|
||||||
saldo_c1 = float(d.get('imp_saldo_cuota1', 0.0))
|
saldo_c1 = float(d.get('imp_saldo_cuota1', 0.0))
|
||||||
fch_canc_raw = d.get('fch_cancelacion_cuota1')
|
fch_canc_raw = d.get('fch_cancelacion_cuota1')
|
||||||
|
fch_canc_real_sql = d.get('fch_cancelacion_cuota1') # SQL puro, sin override
|
||||||
fch_mat = d.get('fch_matricula')
|
fch_mat = d.get('fch_matricula')
|
||||||
|
|
||||||
# Override de fecha cancelación 1 (Supabase) → prioridad para clasificación + cuenta como pagado
|
# Override de fecha cancelación 1 (Supabase) → prioridad para clasificación + cuenta como pagado
|
||||||
@@ -610,8 +629,20 @@ class VentasLogic:
|
|||||||
if saldos_ok and pago_en_fecha:
|
if saldos_ok and pago_en_fecha:
|
||||||
agregar_a_lista("Venta P.C")
|
agregar_a_lista("Venta P.C")
|
||||||
|
|
||||||
# MES PASADO: matrícula anterior + pagó 1° cuota en el mes del filtro
|
# VENTA PENDIENTES: SOLO de tu lista BASE_PENDIENTES y que pagaron su 1ª
|
||||||
if matricula_mes_pasado and saldos_ok and pago_en_fecha:
|
# cuota EN EL MES/AÑO DEL FILTRO. Usa la FECHA REAL DEL SQL (sin override).
|
||||||
|
_pago_mes_real = False
|
||||||
|
if fch_canc_real_sql and str(fch_canc_real_sql).strip() != "None":
|
||||||
|
try:
|
||||||
|
if isinstance(fch_canc_real_sql, str):
|
||||||
|
_fo = datetime.strptime(fch_canc_real_sql[:10], '%Y-%m-%d')
|
||||||
|
_fa, _fm = _fo.year, _fo.month
|
||||||
|
else:
|
||||||
|
_fa, _fm = fch_canc_real_sql.year, fch_canc_real_sql.month
|
||||||
|
if int(_fa) == int(ano) and int(_fm) == int(mes_numero):
|
||||||
|
_pago_mes_real = True
|
||||||
|
except: pass
|
||||||
|
if matricula_int in set_lista_pendientes and _pago_mes_real:
|
||||||
agregar_a_lista("Venta Pendientes")
|
agregar_a_lista("Venta Pendientes")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user