import React, { useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Search, Package } from 'lucide-react'; import { useApontamentosProducao } from '@/hooks/useApontamentosProducao'; import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; export const ApontamentosList = () => { const { apontamentos, loading } = useApontamentosProducao(); const [filtroOF, setFiltroOF] = useState(''); const [filtroProcesso, setFiltroProcesso] = useState(''); const [filtroData, setFiltroData] = useState(''); const [filtroPecaComponente, setFiltroPecaComponente] = useState(''); const apontamentosFiltrados = apontamentos.filter(apt => { const matchOF = !filtroOF || apt.of_number.toLowerCase().includes(filtroOF.toLowerCase()); const matchProcesso = !filtroProcesso || apt.processo?.nome.toLowerCase().includes(filtroProcesso.toLowerCase()); const matchData = !filtroData || apt.data_apontamento.includes(filtroData); // Filtro por peça/componente - busca na marca da peça ou componente const matchPecaComponente = !filtroPecaComponente || getMarcaExibida(apt).toLowerCase().includes(filtroPecaComponente.toLowerCase()); return matchOF && matchProcesso && matchData && matchPecaComponente; }); // Função para determinar a marca exibida baseada no tipo de apontamento const getMarcaExibida = (apontamento: any) => { if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.marca_componente) { return apontamento.componente.marca_componente; } if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.marca) { return apontamento.peca.marca; } return 'N/A'; }; // Função para calcular peso total baseado no tipo correto (peça ou componente) const calcularPesoTotal = (apontamento: any) => { let pesoUnitario = 0; if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) { pesoUnitario = Number(apontamento.componente.peso_unitario); } else if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.peso_unitario) { pesoUnitario = Number(apontamento.peca.peso_unitario); } const quantidade = Number(apontamento.quantidade_produzida) || 0; const pesoTotal = pesoUnitario * quantidade; console.log(`Apontamento ${apontamento.id}: Tipo: ${apontamento.tipo_apontamento}, Peso unitário: ${pesoUnitario}, Quantidade: ${quantidade}, Peso total: ${pesoTotal}`); return pesoTotal.toFixed(3); }; // Função para obter a descrição correta baseada no tipo const getDescricaoExibida = (apontamento: any) => { if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.descricao) { return apontamento.componente.descricao; } if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.descricao) { return apontamento.peca.descricao; } return ''; }; // Calcular totais para debug const pesoTotalApontamentos = apontamentosFiltrados.reduce((total, apt) => { return total + Number(calcularPesoTotal(apt)); }, 0); console.log('Total de peso dos apontamentos filtrados:', pesoTotalApontamentos); if (loading) { return
Carregando apontamentos...
; } return (
{/* Filtros */} Filtros
setFiltroOF(e.target.value)} className="h-8" />
setFiltroProcesso(e.target.value)} className="h-8" />
setFiltroData(e.target.value)} className="h-8" />
setFiltroPecaComponente(e.target.value)} className="h-8" />
{apontamentosFiltrados.length} registros encontrados
Peso total: {pesoTotalApontamentos.toFixed(3)} kg
{/* Tabela de Apontamentos */}
Histórico de Apontamentos
{apontamentosFiltrados.length} registros
{apontamentosFiltrados.length === 0 ? (
Nenhum apontamento encontrado
) : (
OF Peça/Componente Tipo Processo Quantidade Peso Unit. (kg) Peso Total (kg) Data Observações {apontamentosFiltrados.map((apontamento) => { const pesoUnitario = apontamento.tipo_apontamento === 'componente' ? Number(apontamento.componente?.peso_unitario || 0) : Number(apontamento.peca?.peso_unitario || 0); return ( {apontamento.of_number}
{getMarcaExibida(apontamento)}
{getDescricaoExibida(apontamento) && (
{getDescricaoExibida(apontamento)}
)}
{apontamento.tipo_apontamento === 'componente' ? 'Componente' : 'Peça'} {apontamento.processo?.nome || 'N/A'} {apontamento.quantidade_produzida} {pesoUnitario.toFixed(3)} {calcularPesoTotal(apontamento)} {format(new Date(apontamento.data_apontamento), 'dd/MM/yyyy', { locale: ptBR })}
{apontamento.observacoes || '-'}
); })}
)}
); };