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)
This commit is contained in:
@@ -2,9 +2,9 @@ import { prisma } from '../lib/prisma';
|
|||||||
import { ProductInput } from '../schemas/product.schema';
|
import { ProductInput } from '../schemas/product.schema';
|
||||||
|
|
||||||
export async function getTopProducts(limit = 10) {
|
export async function getTopProducts(limit = 10) {
|
||||||
// Agrega a soma de quantidades vendidas para cada produto
|
|
||||||
const topItems = await prisma.itemPedido.groupBy({
|
const topItems = await prisma.itemPedido.groupBy({
|
||||||
by: ['produtoId'],
|
by: ['produtoId'],
|
||||||
|
where: { produto: { ativo: true } },
|
||||||
_sum: { quantidade: true },
|
_sum: { quantidade: true },
|
||||||
orderBy: { _sum: { quantidade: 'desc' } },
|
orderBy: { _sum: { quantidade: 'desc' } },
|
||||||
take: limit,
|
take: limit,
|
||||||
|
|||||||
@@ -392,7 +392,19 @@ function bindOrderEvents() {
|
|||||||
try {
|
try {
|
||||||
await api.post(`/comandas/${comandaId}/itens`, { produtoId, quantidade, observacao: observacao || undefined });
|
await api.post(`/comandas/${comandaId}/itens`, { produtoId, quantidade, observacao: observacao || undefined });
|
||||||
toast('Pedido enviado para preparo!', 'success');
|
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' });
|
await loadComandas({ status: 'ABERTA,FECHADA' });
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
toast(err.message, 'error');
|
toast(err.message, 'error');
|
||||||
|
|||||||
Reference in New Issue
Block a user