🚀 Auto-deploy: TrackSteelAPP atualizado em 21/08/2026 20:54:10

This commit is contained in:
2026-08-21 20:54:10 +00:00
parent ed60dcb12c
commit 35e9387be3
@@ -123,7 +123,28 @@ export const ItensRomaneioModal: React.FC<ItensRomaneioModalProps> = ({
return; return;
} }
// Agrupar por peça e calcular quantidade disponível // 2. Buscar quanto dessa OF já foi embalado em TODOS os romaneios da OF
const { data: expedidosData, error: expError } = await supabase
.from('itens_romaneio_pecas')
.select(`
peca_id,
quantidade_expedida,
romaneio:romaneios_expedicao!inner!itens_romaneio_pecas_romaneio_id_fkey(of_number)
`)
.eq('romaneio.of_number', romaneio.of_number);
const expedidosMap = new Map<string, number>();
if (!expError && expedidosData) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(expedidosData as any[]).forEach((item: any) => {
const pid = item.peca_id;
const qtd = item.quantidade_expedida || 0;
const current = expedidosMap.get(pid) || 0;
expedidosMap.set(pid, current + qtd);
});
}
// Agrupar por peça e calcular quantidade total produzida
const pecasAgrupadas = new Map<string, PecaDisponivel>(); const pecasAgrupadas = new Map<string, PecaDisponivel>();
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -135,26 +156,39 @@ export const ItensRomaneioModal: React.FC<ItensRomaneioModalProps> = ({
if (pecasAgrupadas.has(pecaId)) { if (pecasAgrupadas.has(pecaId)) {
const pecaExistente = pecasAgrupadas.get(pecaId)!; const pecaExistente = pecasAgrupadas.get(pecaId)!;
pecaExistente.quantidade_disponivel += quantidade; pecaExistente.quantidade_disponivel += quantidade; // Aqui salva o Bruto temporariamente
} else { } else {
pecasAgrupadas.set(pecaId, { pecasAgrupadas.set(pecaId, {
id: apontamento.peca.id, id: apontamento.peca.id,
marca: apontamento.peca.marca, marca: apontamento.peca.marca,
descricao: apontamento.peca.descricao || '', descricao: apontamento.peca.descricao || '',
etapa_fase: apontamento.peca.etapa_fase || '', etapa_fase: apontamento.peca.etapa_fase || '',
quantidade_disponivel: quantidade, quantidade_disponivel: quantidade, // Bruto temporário
peso_unitario: apontamento.peca.peso_unitario || 0, peso_unitario: apontamento.peca.peso_unitario || 0,
prioridade: apontamento.peca.prioridade || 'P4' prioridade: apontamento.peca.prioridade || 'P4'
}); });
} }
}); });
const pecasArray = Array.from(pecasAgrupadas.values()); // 4. Calcular o saldo Real (Produzido - Expedido) e limpar zerados
setPecasDisponiveis(pecasArray); const pecasDisponiveisFinal: PecaDisponivel[] = [];
pecasAgrupadas.forEach((peca, pecaId) => {
const qtdExpedida = expedidosMap.get(pecaId) || 0;
const saldoReal = peca.quantidade_disponivel - qtdExpedida;
if (saldoReal > 0) {
pecasDisponiveisFinal.push({
...peca,
quantidade_disponivel: saldoReal // Retorna apenas o saldo disponível
});
}
});
setPecasDisponiveis(pecasDisponiveisFinal);
// Extrair fases e marcas únicas // Extrair fases e marcas únicas
const fasesUnicas = [...new Set(pecasArray.map(p => p.etapa_fase).filter(Boolean))]; const fasesUnicas = [...new Set(pecasDisponiveisFinal.map(p => p.etapa_fase).filter(Boolean))];
const marcasUnicas = [...new Set(pecasArray.map(p => p.marca).filter(Boolean))]; const marcasUnicas = [...new Set(pecasDisponiveisFinal.map(p => p.marca).filter(Boolean))];
setFasesDisponiveis(fasesUnicas); setFasesDisponiveis(fasesUnicas);
setMarcasDisponiveis(marcasUnicas); setMarcasDisponiveis(marcasUnicas);