Actualizar backend/core/data_manager.py
This commit is contained in:
@@ -677,6 +677,68 @@ class DataManager:
|
||||
print(f"❌ Error cronograma cobranza: {e}")
|
||||
return []
|
||||
|
||||
def traer_vendedor_cod_detalle(self, matriculas):
|
||||
"""Para el apartado RETIROS: por cada num_matricula (solo las POR RETIRAR),
|
||||
trae dsc_vendedor, cod_detalle, dsc_alumno, N° cuotas pagadas/vencidas,
|
||||
fecha de vencimiento más antigua, imp_total_pagado e inv_neta. Consulta ligera."""
|
||||
try:
|
||||
mats = [str(m).strip() for m in (matriculas or []) if str(m).strip()]
|
||||
if not mats:
|
||||
return {}
|
||||
placeholders = ",".join(["?"] * len(mats))
|
||||
query = f"""
|
||||
SELECT m.num_matricula,
|
||||
(SELECT t.dsc_apellido_paterno + ' ' + SUBSTRING(t.dsc_apellido_materno,1,1) + '. ' + t.dsc_nombres
|
||||
FROM rhuma_trabajador t WHERE t.cod_trabajador = m.cod_vendedor) AS dsc_vendedor,
|
||||
m.cod_periodo AS cod_detalle,
|
||||
(a.dsc_apellido_paterno + ' ' + a.dsc_apellido_materno + ', ' + a.dsc_nombres) AS dsc_alumno,
|
||||
(SELECT COUNT(1) FROM sgede_cronograma_matricula c
|
||||
WHERE c.cod_localidad=m.cod_localidad AND c.num_matricula=m.num_matricula
|
||||
AND c.num_refinanciamiento=m.num_refinanciamiento
|
||||
AND c.cod_tipo_cuota='ARM' AND c.cod_estado='CAN') AS num_cuotas_pagadas,
|
||||
(SELECT COUNT(1) FROM sgede_cronograma_matricula c
|
||||
WHERE c.cod_localidad=m.cod_localidad AND c.num_matricula=m.num_matricula
|
||||
AND c.num_refinanciamiento=m.num_refinanciamiento
|
||||
AND c.cod_tipo_cuota='ARM' AND c.cod_estado<>'CAN'
|
||||
AND c.fch_vencimiento < CAST(GETDATE() AS DATE)) AS num_cuotas_vencidas,
|
||||
(SELECT MIN(c.fch_vencimiento) FROM sgede_cronograma_matricula c
|
||||
WHERE c.cod_localidad=m.cod_localidad AND c.num_matricula=m.num_matricula
|
||||
AND c.num_refinanciamiento=m.num_refinanciamiento
|
||||
AND c.cod_tipo_cuota='ARM' AND c.cod_estado<>'CAN'
|
||||
AND c.fch_vencimiento < CAST(GETDATE() AS DATE)) AS fch_venc_mas_antigua,
|
||||
(SELECT SUM(c.imp_total_pagado) FROM sgede_cronograma_matricula c
|
||||
WHERE c.cod_localidad=m.cod_localidad AND c.num_matricula=m.num_matricula
|
||||
AND c.num_refinanciamiento=m.num_refinanciamiento) AS imp_total_pagado,
|
||||
ISNULL((SELECT SUM(c.imp_total - ISNULL(c.imp_dscto,0)) FROM sgede_cronograma_matricula c
|
||||
WHERE c.cod_localidad=m.cod_localidad AND c.num_matricula=m.num_matricula
|
||||
AND c.num_refinanciamiento=1),0) AS inv_neta
|
||||
FROM sgeca_matricula m
|
||||
INNER JOIN sgema_alumno a ON m.cod_alumno = a.cod_alumno
|
||||
WHERE m.num_matricula IN ({placeholders})
|
||||
"""
|
||||
conn = self.get_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(query, mats)
|
||||
out = {}
|
||||
for row in cursor.fetchall():
|
||||
mat = str(row[0]).strip()
|
||||
fvenc = row[6]
|
||||
out[mat] = {
|
||||
"dsc_vendedor": (row[1] or "").strip() if row[1] else "",
|
||||
"cod_detalle": row[2] if row[2] is not None else "",
|
||||
"dsc_alumno": (row[3] or "").strip() if row[3] else "",
|
||||
"num_cuotas_pagadas": int(row[4] or 0),
|
||||
"num_cuotas_vencidas": int(row[5] or 0),
|
||||
"fch_venc_mas_antigua": (str(fvenc)[:10] if fvenc else ""),
|
||||
"imp_total_pagado": float(row[7] or 0),
|
||||
"inv_neta": float(row[8] or 0),
|
||||
}
|
||||
conn.close()
|
||||
return out
|
||||
except Exception as e:
|
||||
print(f"❌ Error traer_vendedor_cod_detalle: {e}")
|
||||
return {}
|
||||
|
||||
def ejecutar_consulta_facturas_cobranza(self, ano):
|
||||
clave = str(ano)
|
||||
en_cache = self._cache_facturas.get(clave)
|
||||
|
||||
Reference in New Issue
Block a user