import type { FC } from 'react'; import { Printer } from 'lucide-react'; import { Button, Modal } from './ui'; import type { CashClosing } from '../services/odoo'; import { useClinicaPrint } from '../lib/ticketConfig'; // Corte de caja imprimible. Sigue el patrón de impresión existente // (RecetaPrint / EstadoCuentaPrint / TicketPrint): contenido en un // div.print-ticket + window.print(); el CSS de @media print en index.css // oculta el resto de la página. const money = (v: number) => '$' + (v ?? 0).toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); export const CortePrint: FC<{ corte: CashClosing | null; onClose: () => void }> = ({ corte, onClose }) => { if (!corte) return null; const clinic = useClinicaPrint(); const fila = (label: string, valor: number) => ( {label} {money(valor)} ); const filaDiff = (label: string, esperado: number, contado: number, diff: number) => ( {label} {money(esperado)} {money(contado)} 0 ? 'text-emerald-700' : '')}> {diff > 0 ? '+' : ''}{money(diff)} ); return (

{clinic.nombre}

{clinic.direccion &&

{clinic.direccion}

} {clinic.telefono &&

{clinic.telefono}

}

CORTE DE CAJA {corte.name}

Fecha: {corte.date} · Cerró: {corte.user || '—'}

{filaDiff('Efectivo', corte.opening_cash + corte.total_cash, corte.counted_cash, corte.diff_cash)} {filaDiff('Tarjeta', corte.total_card, corte.counted_card, corte.diff_card)} {filaDiff('Transferencia', corte.total_transfer, corte.counted_transfer, corte.diff_transfer)} {filaDiff('Otros', corte.total_other, corte.counted_other, corte.diff_other)} {fila('Ventas totales del día', corte.total_sales)} {fila('Efectivo esperado (apertura + cobros)', corte.opening_cash + corte.total_cash)} {fila('Efectivo de cierre registrado', corte.closing_cash)}
Método Esperado Contado Diferencia
Diferencia total del corte 0 ? 'text-emerald-700' : '')}> {corte.difference > 0 ? '+' : ''}{money(corte.difference)}
{corte.notes && (

Notas:

{corte.notes}

)}
_____________________
Entregó (cajero)
_____________________
Recibió (administración)

Impreso el {new Date().toLocaleString('es-MX')}

); };