From 4be043edf33e7fc865cad13feb7c72f075238f40 Mon Sep 17 00:00:00 2001 From: Welton Moura Date: Tue, 21 Jul 2026 13:40:54 -0300 Subject: [PATCH] feat: modal aberta apos adicionar item + filtrar produtos inativos - Modal de adicionar item nao fecha mais apos cadastro, permite adicionar varios itens seguidos - Campos resetam (qtd, obs, selecao) e grid de sugestoes recarrega - Produtos inativos excluidos da aggregation getTopProducts (groupBy filtra ativo=true) --- src/services/product.service.ts | 2 +- web/src/views/orders.ts | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/services/product.service.ts b/src/services/product.service.ts index 4db8819..2ceae46 100644 --- a/src/services/product.service.ts +++ b/src/services/product.service.ts @@ -2,9 +2,9 @@ import { prisma } from '../lib/prisma'; import { ProductInput } from '../schemas/product.schema'; export async function getTopProducts(limit = 10) { - // Agrega a soma de quantidades vendidas para cada produto const topItems = await prisma.itemPedido.groupBy({ by: ['produtoId'], + where: { produto: { ativo: true } }, _sum: { quantidade: true }, orderBy: { _sum: { quantidade: 'desc' } }, take: limit, diff --git a/web/src/views/orders.ts b/web/src/views/orders.ts index 817724d..710974e 100644 --- a/web/src/views/orders.ts +++ b/web/src/views/orders.ts @@ -392,7 +392,19 @@ function bindOrderEvents() { try { await api.post(`/comandas/${comandaId}/itens`, { produtoId, quantidade, observacao: observacao || undefined }); toast('Pedido enviado para preparo!', 'success'); - (document.getElementById('modal-add-item') as HTMLElement).style.display = 'none'; + + (document.getElementById('qtd') as HTMLInputElement).value = '1'; + (document.getElementById('obs') as HTMLInputElement).value = ''; + (document.getElementById('selected-produto-id') as HTMLInputElement).value = ''; + const preview = document.getElementById('selected-produto-preview')!; + preview.textContent = 'Nenhum produto selecionado'; + preview.style.color = 'var(--text-primary)'; + + try { + const topProducts = await api.get('/produtos/mais-vendidos'); + renderProductCards(topProducts); + } catch {} + await loadComandas({ status: 'ABERTA,FECHADA' }); } catch (err: any) { toast(err.message, 'error');