import { useState } from 'react' import type { CotizacionGuardada } from '../services/api' import { formatoMoneda } from '../lib/formatters' interface Props { cotizaciones: CotizacionGuardada[] cargando: boolean error: string | null /** Restaura la cotización en el cotizador (unidad + parámetros) */ onRetomar: (c: CotizacionGuardada) => void } const TITULO_PROPUESTA: Record = { BANCARIO: 'Crédito Bancario', INFONAVIT: 'Crédito Infonavit-Cofinavit', COFINAVIT: 'Crédito Infonavit-Cofinavit', CONTADO: 'Contado', SEMI_CONTADO: 'Semi Contado', } const formatoFechaHora = (iso: string): string => new Date(iso).toLocaleString('es-MX', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }) /** * Mensualidades guardadas: "N × $m". Las cotizaciones viejas (plazo 0/null, sin * mensualidad) muestran "—". */ const formatoMensualidades = (c: CotizacionGuardada): string => { if (c.mensualidad === null || c.numMensualidades === 0) return '—' return `${c.numMensualidades} × ${formatoMoneda(c.mensualidad)}` } /** Sección colapsable "Mis cotizaciones": historial del vendedor logueado */ export function MisCotizaciones({ cotizaciones, cargando, error, onRetomar }: Props) { const [abierto, setAbierto] = useState(false) return (

Mis cotizaciones

{abierto && (
{cargando &&

Cargando historial…

} {error &&

{error}

} {!cargando && !error && cotizaciones.length === 0 && (

Aún no tienes cotizaciones guardadas. Se guardan al generar el PDF.

)} {cotizaciones.length > 0 && (
{['Fecha', 'Folio', 'Cliente', 'Unidad', 'Propuesta', 'Mensualidades', 'Precio final', ''].map( (h) => ( ), )} {cotizaciones.map((c) => ( ))}
{h}
{formatoFechaHora(c.createdAt)} {c.folio ?? '—'} {c.clienteNombre} {c.unidadCodigo} {c.desarrollo} {TITULO_PROPUESTA[c.tipoPropuesta] ?? c.tipoPropuesta} {formatoMensualidades(c)} {formatoMoneda(c.precioFinal)}
{/* El alta prellenada requiere la cotización en el servidor; las locales (CTE-LOCAL-*) no la tienen */} {!c.id.startsWith('local-') && ( Iniciar alta )}
)}
)}
) }