/setting/cargamar.aspx - Resumen de Funcionalidad
Flujo Principal
| # | Paso | Descripcion |
| 1 | Cargar archivo | Subida de .xlsx a carpeta ~/repo con nombre unico (timestamp). Guarda en Session("nombreArchivo"). |
| 2 | Previsualizar | Extrae datos del Excel y muestra 2 grillas JS: Liquidaciones y Propietarios. |
| 3 | Procesar | Boton "Procesar" ejecuta toda la logica de importacion a la base de datos. |
Dentro de btnProcesar_Click
| # | Sub-paso | Detalle |
| a | Identificar columnas | Busca por nombre: U.F./Piso, saldo anterior MM-yyyy, abonado, deuda/ redondeo, interes, propietario |
| b | Extraer periodo | Del header saldo anterior 02-2026 extrae "02-2026", suma 1 mes y obtiene "03-2026" |
| c | Normalizar U.F./Piso | Formato NN/XXX (UF + piso). Si hay excedente despues del /, lo mueve a columna propietario. Limpia caracteres de control con Regex. |
| d | Verificar duplicados | Si ya existen registros de liquidaciones para ese periodo + UF, hace rollback, borra archivos del repo y muestra error. |
| e | Insertar liquidaciones | Por cada fila: INSERT (uf, periodo, saldo_anterior, abonado, deuda, intereses). Usa transaccion SQL. |
| f | Insertar/actualizar propietarios | Si UF+piso no existe: INSERT con nombre capitalizado. Si existe pero nombre diferente: UPDATE. No borra registros existentes. |
| g | Recalcular | Llama Calculos.RecalcularMesesAdeudados() |
| h | Limpiar | Borra el Excel del repo. Marca Session("procesadoOk") = True para evitar reprocesar |
Funciones Clave Auxiliares
| Funcion | Proposito |
LimpiarYCapitalizar() | Limpia espacios/TABs/ENTERs/caracteres de control con Regex. Capitaliza la primera letra de cada palabra ("juan perez" -> "Juan Perez"). Excepciones: s.a. -> S.A., y -> y. |
CargarDatosEnHiddenFields() | Serializa DataTables a JSON embebido en <input type="hidden"> para que JS renderice las grillas de previsualizacion. |
CargarTooltip() | Lee tooltips.json y muestra el tip contextual de esta pagina |
Descripcion del Formato de Datos
| Campo | Origen en Excel | Transformacion |
uf | Antes del / en columna U.F./ Piso | Parsea a Integer |
piso | Despues del / en U.F./ Piso | Maximo 3 caracteres; excedente va a propietario |
periodo | Nombre de columna saldo anterior MM-yyyy | Extrae MM-yyyy y suma 1 mes |
propietario | Columna propietario | Limpia con Regex + LimpiarYCapitalizar() |
saldo_anterior | Columna saldo anterior ... | Decimal.Parse |
abonado | Columna abonado | Decimal.Parse |
deuda | Columna deuda/ redondeo | Decimal.Parse |
intereses | Columna interes | Decimal.Parse |
Notas de Diseno
-
Boton Cargar: color ambar (
#f59e0b), con
UseSubmitBehavior="false" para evitar doble postback.
-
Boton Procesar: color emerald (
#10b981), tambien con
UseSubmitBehavior="false".
-
Grillas: renderizadas 100% en JavaScript a partir de
<input type="hidden"> con JSON (sin GridView).
-
Mensajes: usan
Session("msgCargar") /
Session("msgProcesar") con redirect para evitar reenvio de formulario al refrescar.