import { useState, useEffect } from 'react'; import { Banknote, CreditCard, ArrowRightLeft, CheckCircle2, X, AlertCircle, RefreshCw, Printer } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import clsx from 'clsx'; import api from '../services/api'; interface CashClosingModalProps { onClose: () => void; onComplete: () => void; } export default function CashClosingModal({ onClose, onComplete }: CashClosingModalProps) { const [summary, setSummary] = useState(null); const [loadingSummary, setLoadingSummary] = useState(true); const [notes, setNotes] = useState(''); const [isClosing, setIsClosing] = useState(false); const [done, setDone] = useState(false); const [closedSessionId, setClosedSessionId] = useState(null); // 1. Al abrir el modal, traemos lo que el sistema dice que debería haber useEffect(() => { const fetchSummary = async () => { try { const res = await api.get('/cashsessions/summary'); setSummary(res.data); } catch (error) { console.error(error); } finally { setLoadingSummary(false); } }; fetchSummary(); }, []); const handleFinalClose = async () => { setIsClosing(true); try { const res = await api.post('/cashsessions/close', { declaredCash: summary.cashSales + summary.openingBalance, declaredDebit: summary.cardSales, declaredCredit: 0, declaredTransfer: summary.transferSales, notes: notes || "Cierre confirmado por cajero" }); setClosedSessionId(res.data.sessionId); setDone(true); } catch (error) { console.error(error); alert('Error al cerrar caja'); } finally { setIsClosing(false); } }; const handleDownloadPdf = async () => { if (!closedSessionId) return; try { const res = await api.get(`/cashsessions/${closedSessionId}/pdf`, { responseType: 'blob' }); const url = window.URL.createObjectURL(new Blob([res.data], { type: 'application/pdf' })); const link = document.createElement('a'); link.href = url; link.setAttribute('download', `Acta_Cierre_${closedSessionId}.pdf`); document.body.appendChild(link); link.click(); link.remove(); } catch (error) { alert("Error al descargar el comprobante"); } }; if (loadingSummary) return (
); return (
{/* Header */}
Finalización de Turno

Cierre de Caja

{!done && ( )}
{!done ? ( {/* Visualización de Totales del Sistema */}

Resumen de Valores en Caja

} /> } isSale /> } isSale /> } isSale />
{/* Total a Entregar */}
Total Final a Entregar $ {summary.totalExpected.toLocaleString('es-AR', { minimumFractionDigits: 2 })}
{/* Notas opcionales */}