import React, { useState, useMemo } from 'react'; import { StandardPageLayout } from '@/components/layout/StandardPageLayout'; import { KanbanPrioridadesFabricacao } from '@/components/prioridades/KanbanPrioridadesFabricacao'; import { PecaSelectorModal } from '@/components/prioridades/PecaSelectorModal'; import { PrioridadesPDF } from '@/components/prioridades/PrioridadesPDF'; import { PrioridadesPDFTemplate } from '@/components/prioridades/PrioridadesPDFTemplate'; import { FiltrosVisualizacao } from '@/components/prioridades/FiltrosVisualizacao'; import { useItensPrioridadeFabricacaoFiltrado } from '@/hooks/useItensPrioridadeFabricacaoFiltrado'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Plus, FileText, RefreshCw, Printer, X, Loader2 } from 'lucide-react'; import { toast } from 'sonner'; import { printProfessionalPDF } from '@/utils/pdfGenerator'; const PrioridadesFabricacao = () => { const { itensPorPrioridade, loading, atualizarQuantidade, removerItem, removerItensPorPrioridade, transferirItem, reorderItems, refetch, ofSelecionada, faseSelecionada, versaoAtual, onFiltroChange, incrementarRevisao, resetarRevisao } = useItensPrioridadeFabricacaoFiltrado(); const [showPecaSelector, setShowPecaSelector] = useState(false); const [showPrioridadesPDF, setShowPrioridadesPDF] = useState(false); const [isPrintingDirect, setIsPrintingDirect] = useState(false); // Construir título dinâmico const tituloCompleto = useMemo(() => { if (ofSelecionada && faseSelecionada) { return `Prioridades de Fabricação - OF: ${ofSelecionada} - FASE: ${faseSelecionada}`; } return 'Prioridades de Fabricação'; }, [ofSelecionada, faseSelecionada]); const calcularTotalPecas = () => { return Object.values(itensPorPrioridade).reduce((total, itens) => total + itens.length, 0); }; const calcularPesoTotal = () => { return Object.values(itensPorPrioridade).reduce((total, itens) => { return total + itens.reduce((pesoItens, item) => pesoItens + (item.peso_total || 0), 0); }, 0); }; const handleAddPecas = async () => { await refetch(); }; const handleResetarRevisao = async () => { if (!ofSelecionada || !faseSelecionada) return; if (window.confirm(`Deseja resetar o número de revisão desta lista de prioridades (OF: ${ofSelecionada} - Fase: ${faseSelecionada}) para 0?`)) { await resetarRevisao(0); } }; const handleImprimirRelatorio = async () => { if (!ofSelecionada || !faseSelecionada) { toast.error('Selecione uma OF e Fase para imprimir o relatório'); return; } const querSubir = window.confirm( `Deseja incrementar a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1} para esta impressão?\n\n- Clique em OK para subir a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1}\n- Clique em Cancelar para manter a revisão atual (Rev. ${versaoAtual?.revisao || 0})` ); if (querSubir) { await incrementarRevisao(); await new Promise(resolve => setTimeout(resolve, 200)); } try { setIsPrintingDirect(true); await printProfessionalPDF('prioridades-direct-print-content'); toast.success('Relatório enviado para impressão'); } catch (error) { console.error('Erro ao imprimir:', error); toast.error('Erro ao imprimir o relatório'); } finally { setIsPrintingDirect(false); } }; return (
{/* Filtros de Visualização */} {/* Header com resumo e ações */}
Total de Peças: {calcularTotalPecas()}
Peso Total: {calcularPesoTotal().toFixed(1)} kg
{versaoAtual && (
Revisão: {versaoAtual.revisao}
)}
{/* Componente Kanban */} {loading ? (
) : ofSelecionada && faseSelecionada ? ( ) : (

Selecione uma OF e Fase nos filtros acima para visualizar o Kanban de prioridades.

)} {/* Modais */} setShowPecaSelector(false)} onAddPecas={handleAddPecas} /> setShowPrioridadesPDF(false)} itensPorPrioridade={itensPorPrioridade} ofSelecionada={ofSelecionada} faseSelecionada={faseSelecionada} versaoAtual={versaoAtual} onIncrementarRevisao={incrementarRevisao} /> {/* Container para impressão direta 100% idêntica ao PDF gerado */} {ofSelecionada && faseSelecionada && (
)}
); }; export default PrioridadesFabricacao;