import React from 'react'; import { ItemPrioridade } from '@/hooks/useItensPrioridadeFabricacao'; interface PrioridadesPDFTemplateProps { id?: string; itensPorPrioridade: { [key: string]: ItemPrioridade[] }; ofSelecionada?: string | null; faseSelecionada?: string | null; versaoAtual?: { revisao: number; dataModificacao: string; modificadoPor?: string; } | null; } export const PrioridadesPDFTemplate: React.FC = ({ id, itensPorPrioridade, ofSelecionada, faseSelecionada, versaoAtual }) => { const todosItens = Object.values(itensPorPrioridade).flat(); const primeiroItem = todosItens[0]; const ofNumber = ofSelecionada || primeiroItem?.peca?.of_number || primeiroItem?.prioridade_fabricacao?.of_number || 'N/A'; const etapaFase = faseSelecionada || primeiroItem?.peca?.etapa_fase || primeiroItem?.prioridade_fabricacao?.etapa_fase || 'N/A'; const dataAtual = new Date().toLocaleDateString('pt-BR'); const getPrioridadeNome = (codigo: string) => { switch (codigo) { case 'P1': return 'Prioridade P1 - Urgente'; case 'P2': return 'Prioridade P2 - Alta'; case 'P3': return 'Prioridade P3 - Média'; case 'P4': return 'Prioridade P4 - Baixa'; default: return 'Desconhecida'; } }; const getCoresPrioridade = (codigo: string) => { switch (codigo) { case 'P1': return 'text-red-700 bg-red-100 border-red-300'; case 'P2': return 'text-orange-700 bg-orange-100 border-orange-300'; case 'P3': return 'text-blue-700 bg-blue-100 border-blue-300'; case 'P4': return 'text-gray-700 bg-gray-200 border-gray-300'; default: return 'text-gray-700 bg-gray-200 border-gray-300'; } }; const generateTickBoxes = (quantity: number) => { if (!quantity || quantity <= 0) return null; let qtd50 = 0; let qtd10 = 0; let qtd5 = 0; let qtd1 = 0; if (quantity <= 10) { qtd1 = quantity; } else if (quantity <= 50) { qtd5 = Math.floor(quantity / 5); qtd1 = quantity % 5; } else if (quantity <= 100) { qtd10 = Math.floor(quantity / 10); const resto10 = quantity % 10; qtd5 = Math.floor(resto10 / 5); qtd1 = resto10 % 5; } else { // Acima de 100 unidades qtd50 = Math.floor(quantity / 50); const resto50 = quantity % 50; qtd10 = Math.floor(resto50 / 10); const resto10 = resto50 % 10; qtd5 = Math.floor(resto10 / 5); qtd1 = resto10 % 5; } const boxes: React.ReactNode[] = []; // Quadrados de peso 50 for (let i = 0; i < qtd50; i++) { boxes.push( 50 ); } // Quadrados de peso 10 for (let i = 0; i < qtd10; i++) { boxes.push( 10 ); } // Quadrados de peso 5 for (let i = 0; i < qtd5; i++) { boxes.push( 5 ); } // Quadrados unitários (vazios) for (let i = 0; i < qtd1; i++) { boxes.push( ); } return {boxes}; }; return (
{/* Cabeçalho do Relatório */}

Checklist de Produção

Formulário para apontamento da fabricação.

Data de Emissão: {dataAtual} {versaoAtual && ( Rev. {versaoAtual.revisao} )}

{/* Informações da OF e Fase */}
{/* Coluna OF */}

Ordem de Fabricação (OF)

{ofNumber}

{/* Coluna Fase */}

Fase

{etapaFase}

{/* Coluna Processo */}

PROCESSO

{['Corte', 'Solda', 'Pintura', 'Expedição'].map((processo) => (
{processo}
))}
{/* Legenda */}
Legenda: Marca (Qtd) (S/M) = Sem Montagem (borda tracejada), (C/M) = Com Montagem (borda contínua). Os quadrados indicam o controle de peças (quadrados com número = lotes de 50, 10 ou 5 unidades; vazios = 1 unidade).
{/* Itens por Prioridade */}
{['P1', 'P2', 'P3', 'P4'].map((codigo) => { const itens = itensPorPrioridade[codigo] || []; if (itens.length === 0) return null; return (

{getPrioridadeNome(codigo)}

{Array.from({ length: Math.ceil(itens.length / 3) }, (_, i) => { const bgColorClass = i % 2 !== 0 ? 'bg-gray-50/70' : 'bg-white'; const rowItems = itens.slice(i * 3, (i + 1) * 3); return (
{rowItems.map((item) => { const quantidade = item.quantidade_priorizada; const marca = item.peca?.marca || 'N/A'; const temComponentes = item.peca?.tem_componentes; const infoType = temComponentes ? '(C/M)' : '(S/M)'; return (
{marca} ({quantidade}) {infoType} {generateTickBoxes(quantidade)}
Data/Operador:
); })} {/* Preencher células vazias se necessário */} {Array.from({ length: 3 - rowItems.length }, (_, emptyIndex) => (
))}
); })}
); })}
); };