import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from '@/components/ui/alert-dialog'; import { Package, AlertTriangle, CheckCircle, XCircle, Info } from 'lucide-react'; import { useEmpenhosMaterial, useOFsComEmpenhos } from '@/hooks/useEmpenhosMaterialSimplificado'; import { Skeleton } from '@/components/ui/skeleton'; import { Button } from '@/components/ui/button'; export const EmpenhosMaterialSimplificado: React.FC = () => { const [selectedOF, setSelectedOF] = useState('all'); const { data: ofsComEmpenhos = [], isLoading: loadingOFs } = useOFsComEmpenhos(); const { data: empenhos = [], isLoading: loadingEmpenhos } = useEmpenhosMaterial(selectedOF === 'all' ? undefined : selectedOF); const getStatusColor = (status: string) => { switch (status) { case 'Empenhado': return 'bg-yellow-500'; case 'Finalizado': return 'bg-green-500'; case 'Cancelado': return 'bg-red-500'; default: return 'bg-gray-500'; } }; const getStatusIcon = (status: string) => { switch (status) { case 'Empenhado': return ; case 'Finalizado': return ; case 'Cancelado': return ; default: return ; } }; // Calcular totais const totais = empenhos.reduce((acc, empenho) => { acc.quantidadeEmpenhada += empenho.quantidade_empenhada; acc.quantidadeUtilizada += empenho.quantidade_utilizada; acc.valorTotal += (empenho.quantidade_empenhada * (empenho.estoque_materiais?.valor_unitario || 0)); if (empenho.status === 'Empenhado') acc.empenhosAtivos++; else if (empenho.status === 'Finalizado') acc.empenhosFinalizados++; else if (empenho.status === 'Cancelado') acc.empenhosCancelados++; return acc; }, { quantidadeEmpenhada: 0, quantidadeUtilizada: 0, valorTotal: 0, empenhosAtivos: 0, empenhosFinalizados: 0, empenhosCancelados: 0 }); if (loadingOFs) { return ; } return ( Visualização de Empenhos de Material

Os empenhos são gerados automaticamente através das movimentações. Para cancelar um empenho, exclua a movimentação correspondente na aba "Movimentação".

{/* Seletor de OF */}
{/* Cards de Resumo */} {selectedOF && selectedOF !== 'all' && (
{totais.empenhosAtivos}
Empenhos Ativos
{totais.empenhosFinalizados}
Finalizados
{totais.quantidadeEmpenhada.toFixed(2)}
Qtd Empenhada
R$ {totais.valorTotal.toFixed(2)}
Valor Total
)} {/* Tabela de Empenhos */} {loadingEmpenhos ? (
{[1, 2, 3, 4, 5].map((i) => ( ))}
) : empenhos.length > 0 ? (
Material OF Lote Qtd Empenhada Qtd Utilizada Restante Status Data Informações {empenhos.map((empenho) => { const qtdRestante = empenho.quantidade_empenhada - empenho.quantidade_utilizada; return (
{empenho.estoque_materiais?.descricao}
{empenho.estoque_materiais?.codigo}
{empenho.of_number} {empenho.lote || '-'} {empenho.quantidade_empenhada.toFixed(2)} {empenho.estoque_materiais?.unidade} {empenho.quantidade_utilizada.toFixed(2)} {empenho.estoque_materiais?.unidade} 0 ? 'text-yellow-600' : 'text-green-600'}> {qtdRestante.toFixed(2)} {empenho.estoque_materiais?.unidade} {getStatusIcon(empenho.status)} {empenho.status} {new Date(empenho.data_empenho).toLocaleDateString('pt-BR')} Informações do Empenho
Material: {empenho.estoque_materiais?.codigo} - {empenho.estoque_materiais?.descricao}
OF: {empenho.of_number}
Quantidade Empenhada: {empenho.quantidade_empenhada.toFixed(2)} {empenho.estoque_materiais?.unidade}
Quantidade Utilizada: {empenho.quantidade_utilizada.toFixed(2)} {empenho.estoque_materiais?.unidade}
Status: {empenho.status}
Data: {new Date(empenho.data_empenho).toLocaleDateString('pt-BR')}
{empenho.lote &&
Lote: {empenho.lote}
} {empenho.observacoes &&
Observações: {empenho.observacoes}
}
Para cancelar este empenho:
Acesse a aba "Movimentação" e exclua a movimentação de empenho correspondente.
); })}
) : (
{selectedOF && selectedOF !== 'all' ? (

Nenhum empenho encontrado para a OF {selectedOF}

) : (

Selecione uma OF para visualizar os empenhos de material

)}
)}
); };