feat(cotizador): tope de mensualidades = meses que faltan para la entrega (UI y API); nunca se rebasa la fecha de entrega
This commit is contained in:
@@ -17,10 +17,11 @@ export const APARTADO_ESQUEMA_DEFAULT = 15000
|
||||
const MS_POR_MES = 30.4 * 86400000
|
||||
|
||||
/**
|
||||
* Mensualidades del diferimiento sugeridas para una unidad: los meses que
|
||||
* faltan hasta su fecha de entrega estimada (la que vive en el módulo de
|
||||
* captura: entrega programada/reprogramada de obra). Si la unidad no trae
|
||||
* fecha, cae al default del esquema (14). El vendedor puede ajustarla después.
|
||||
* Tope (y default) de mensualidades del diferimiento para una unidad: los
|
||||
* meses que faltan hasta su fecha de entrega estimada (la que vive en el
|
||||
* módulo de captura: entrega programada/reprogramada de obra). El diferimiento
|
||||
* nunca puede rebasar la entrega de la vivienda. Si la unidad no trae fecha,
|
||||
* cae al default global del esquema (14; tope 36).
|
||||
*/
|
||||
export function mensualidadesParaUnidad(u: Unidad | null, hoy: Date = new Date()): number {
|
||||
const fecha = u?.fechaEntrega
|
||||
@@ -101,18 +102,29 @@ export function useCotizacion(reglas: ReglasDesarrollo = SIN_REGLAS): UseCotizac
|
||||
|
||||
/** Elige unidad y, con ella, las mensualidades del diferimiento: los meses
|
||||
* que faltan para la entrega estimada de esa vivienda (dato del módulo de
|
||||
* captura). El vendedor puede ajustarlas después. */
|
||||
* captura). El vendedor puede ajustarlas después, sin rebasar la entrega. */
|
||||
const elegirUnidad = (u: Unidad | null) => {
|
||||
setUnidad(u)
|
||||
setNumMensualidades(mensualidadesParaUnidad(u))
|
||||
}
|
||||
|
||||
/** Tope de mensualidades: las que faltan para la entrega (36 sin fecha) */
|
||||
const topeMensualidades = () => mensualidadesParaUnidad(unidad)
|
||||
|
||||
const ajustarMensualidades = (n: number) => {
|
||||
setNumMensualidades(Math.max(MENSUALIDADES_MIN, Math.min(n, topeMensualidades())))
|
||||
}
|
||||
|
||||
const restaurar = (estado: EstadoRestaurar) => {
|
||||
setDesarrolloState(estado.desarrollo)
|
||||
setUnidad(estado.unidad)
|
||||
setAcabados(estado.acabados)
|
||||
setApartado(estado.apartado)
|
||||
setNumMensualidades(estado.numMensualidades ?? MENSUALIDADES_DEFAULT)
|
||||
// El diferimiento no puede rebasar la entrega: una cotización guardada con
|
||||
// más mensualidades se acota a las que faltan hoy para esa unidad
|
||||
setNumMensualidades(
|
||||
Math.min(estado.numMensualidades ?? MENSUALIDADES_DEFAULT, mensualidadesParaUnidad(estado.unidad)),
|
||||
)
|
||||
setEscrituracionDiferida(estado.escrituracionDiferida ?? false)
|
||||
}
|
||||
|
||||
@@ -160,7 +172,7 @@ export function useCotizacion(reglas: ReglasDesarrollo = SIN_REGLAS): UseCotizac
|
||||
setApartado,
|
||||
apartadoEfectivo,
|
||||
numMensualidades,
|
||||
setNumMensualidades,
|
||||
setNumMensualidades: ajustarMensualidades,
|
||||
escrituracionDiferida,
|
||||
setEscrituracionDiferida,
|
||||
precioLista,
|
||||
|
||||
Reference in New Issue
Block a user