import type { FC } from 'react'; import { Send, PackageCheck, CreditCard, Ban, Pencil } from 'lucide-react'; import { Modal, Button, Badge } from '../ui'; import type { Compra } from '../../services/odoo'; import { ESTADO_META, fmtMoney, fmtNum } from './shared'; interface Props { isOpen: boolean; onClose: () => void; compra: Compra | null; puedeEditar: boolean; puedeRecibir: boolean; puedePagar: boolean; puedeCancelar: boolean; puedeCrear: boolean; onEdit: (c: Compra) => void; onEnviar: (c: Compra) => void; onRecibir: (c: Compra) => void; onPagar: (c: Compra) => void; onCancelar: (c: Compra) => void; } const CompraDetalleModal: FC = ({ isOpen, onClose, compra, puedeEditar, puedeRecibir, puedePagar, puedeCancelar, puedeCrear, onEdit, onEnviar, onRecibir, onPagar, onCancelar, }) => { if (!compra) return null; const meta = ESTADO_META[compra.estado]; return ( {puedeEditar && ['borrador', 'enviada'].includes(compra.estado) && ( )} {puedeCrear && compra.estado === 'borrador' && ( )} {puedeRecibir && compra.puede_recibir && ( )} {puedePagar && compra.estado !== 'cancelada' && compra.saldo > 0 && ( )} {puedeCancelar && compra.puede_cancelar && ( )} )} >
{meta.label} {compra.proveedor} Fecha {compra.fecha} {compra.fecha_entrega_esperada && Entrega esperada {compra.fecha_entrega_esperada}} Moneda {compra.moneda} {compra.recibida_at && Recibida {compra.recibida_at}}
{compra.cancel_reason && (

Cancelada: {compra.cancel_reason}

)}

Subtotal

{fmtMoney(compra.subtotal, compra.moneda)}

Impuestos

{fmtMoney(compra.impuestos, compra.moneda)}

Total

{fmtMoney(compra.total, compra.moneda)}

Pagado / Saldo

{fmtMoney(compra.pagado, compra.moneda)} / {fmtMoney(compra.saldo, compra.moneda)}

Líneas

{(compra.lineas || []).map((l) => ( ))}
Artículo Pedida Recibida Pendiente Costo Subtotal Lote / Cad.
{l.item} {fmtNum(l.cantidad_pedida)} {fmtNum(l.cantidad_recibida)} {fmtNum(l.cantidad_pendiente)} {fmtMoney(l.costo_unitario, compra.moneda)} {fmtMoney(l.subtotal, compra.moneda)} {l.lote || '—'}{l.fecha_caducidad ? ` · ${l.fecha_caducidad}` : ''}

Recepciones

{(compra.recepciones || []).length === 0 ? (

Sin recepciones todavía.

) : (
    {(compra.recepciones || []).map((r) => (
  • {r.fecha} {fmtNum(r.total_unidades)} u · {fmtMoney(r.total_costo, compra.moneda)}

    {r.usuario || '—'}{r.notas ? ` · ${r.notas}` : ''}

      {r.lineas.map((ln) => (
    • {ln.item}: {fmtNum(ln.cantidad)} u{ln.lote ? ` · lote ${ln.lote}` : ''}{ln.fecha_caducidad ? ` · cad. ${ln.fecha_caducidad}` : ''}
    • ))}
  • ))}
)}

Pagos

{(compra.pagos || []).length === 0 ? (

Sin pagos registrados.

) : (
    {(compra.pagos || []).map((p) => (
  • {fmtMoney(p.monto, p.moneda)}

    {p.fecha} · {p.metodo_label}{p.referencia ? ` · ${p.referencia}` : ''}

    {p.moneda !== compra.moneda && ( = {fmtMoney(p.monto_en_compra, compra.moneda)} )}
  • ))}
)}
{compra.notas &&

Observaciones: {compra.notas}

} Los pagos a proveedores son egresos y no se mezclan con los cobros a pacientes.
); }; export default CompraDetalleModal;