diff --git a/apps/web/src/routes/(dashboard)/almoxarifado/requisicoes/+page.svelte b/apps/web/src/routes/(dashboard)/almoxarifado/requisicoes/+page.svelte
index 786c6c3..bcfdfd9 100644
--- a/apps/web/src/routes/(dashboard)/almoxarifado/requisicoes/+page.svelte
+++ b/apps/web/src/routes/(dashboard)/almoxarifado/requisicoes/+page.svelte
@@ -208,14 +208,23 @@
async function confirmarAprovar() {
if (!requisicaoParaAprovar) return;
+ // Não permitir aprovação se houver problemas de estoque
+ if (problemasEstoqueAprovar.length > 0) {
+ return;
+ }
+
try {
processandoAprovar = true;
await client.mutation(api.almoxarifado.aprovarRequisicao, { id: requisicaoParaAprovar });
mostrarMensagem('success', 'Requisição aprovada com sucesso!');
fecharModalAprovar();
} catch (error: unknown) {
- const message = error instanceof Error ? error.message : 'Erro ao aprovar requisição';
- mostrarMensagem('error', message);
+ // Silenciar erros de estoque insuficiente (já verificados no frontend)
+ const errorMessage = error instanceof Error ? error.message : String(error);
+ if (!errorMessage.includes('Estoque insuficiente')) {
+ const message = error instanceof Error ? error.message : 'Erro ao aprovar requisição';
+ mostrarMensagem('error', message);
+ }
} finally {
processandoAprovar = false;
}
@@ -929,19 +938,21 @@
>
Cancelar
-
+ {#if problemasEstoqueAprovar.length === 0}
+
+ {/if}
diff --git a/packages/backend/convex/almoxarifado.ts b/packages/backend/convex/almoxarifado.ts
index cb8760a..d593374 100644
--- a/packages/backend/convex/almoxarifado.ts
+++ b/packages/backend/convex/almoxarifado.ts
@@ -1196,35 +1196,8 @@ export const aprovarRequisicao = mutation({
throw new Error('Apenas requisições pendentes podem ser aprovadas');
}
- // Verificar estoque antes de aprovar
- const itens = await ctx.db
- .query('requisicaoItens')
- .withIndex('by_requisicaoId', (q) => q.eq('requisicaoId', args.id))
- .collect();
-
- const problemasEstoque: Array<{
- materialNome: string;
- quantidadeSolicitada: number;
- estoqueAtual: number;
- }> = [];
-
- for (const item of itens) {
- const material = await ctx.db.get(item.materialId);
- if (!material) continue;
-
- if (material.estoqueAtual < item.quantidadeSolicitada) {
- problemasEstoque.push({
- materialNome: material.nome,
- quantidadeSolicitada: item.quantidadeSolicitada,
- estoqueAtual: material.estoqueAtual
- });
- }
- }
-
- if (problemasEstoque.length > 0) {
- const mensagem = `Estoque insuficiente para os seguintes materiais:\n${problemasEstoque.map(p => `- ${p.materialNome}: solicitado ${p.quantidadeSolicitada}, disponível ${p.estoqueAtual}`).join('\n')}`;
- throw new Error(mensagem);
- }
+ // Nota: A verificação de estoque é feita no frontend antes de permitir a aprovação
+ // O botão de aprovar só aparece quando há estoque suficiente
const usuario = await getCurrentUserFunction(ctx);
if (!usuario) throw new Error('Usuário não autenticado');