feat: add chart for displaying the last 10 registered products in 'Almoxarifado', enhancing inventory visibility and user engagement

This commit is contained in:
2025-12-21 08:34:55 -03:00
parent f0884a19a7
commit fdbecff4fa
3 changed files with 153 additions and 5 deletions

View File

@@ -351,6 +351,42 @@ export const verificarEstoqueBaixo = query({
}
});
export const obterUltimosProdutosCadastrados = query({
args: {
limit: v.optional(v.number())
},
handler: async (ctx, args) => {
const usuario = await getCurrentUserFunction(ctx);
if (!usuario) return [];
try {
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
recurso: 'almoxarifado',
acao: 'listar'
});
} catch {
return [];
}
const limit = args.limit ?? 10;
const materiais = await ctx.db.query('materiais').collect();
// Ordenar por data de criação (mais recente primeiro) e pegar os últimos N
const materiaisOrdenados = materiais
.sort((a, b) => b.criadoEm - a.criadoEm)
.slice(0, limit);
return materiaisOrdenados.map((m) => ({
_id: m._id,
nome: m.nome,
codigo: m.codigo,
estoqueAtual: m.estoqueAtual,
unidadeMedida: m.unidadeMedida,
criadoEm: m.criadoEm
}));
}
});
// ========== MUTATIONS ==========
async function registrarHistorico(
@@ -678,6 +714,7 @@ export const registrarEntrada = mutation({
materialId: v.id('materiais'),
quantidade: v.number(),
motivo: v.string(),
funcionarioId: v.optional(v.id('funcionarios')),
documento: v.optional(v.string()),
observacoes: v.optional(v.string())
},
@@ -698,6 +735,9 @@ export const registrarEntrada = mutation({
const usuario = await getCurrentUserFunction(ctx);
if (!usuario) throw new Error('Usuário não autenticado');
// Se funcionarioId não foi fornecido, usar o do usuário logado (se existir)
const funcionarioId = args.funcionarioId || usuario.funcionarioId;
const quantidadeAnterior = material.estoqueAtual;
const quantidadeNova = quantidadeAnterior + args.quantidade;
@@ -716,6 +756,7 @@ export const registrarEntrada = mutation({
quantidadeNova,
motivo: args.motivo,
documento: args.documento,
funcionarioId,
usuarioId: usuario._id,
data: Date.now(),
observacoes: args.observacoes
@@ -818,6 +859,7 @@ export const ajustarEstoque = mutation({
materialId: v.id('materiais'),
quantidadeNova: v.number(),
motivo: v.string(),
funcionarioId: v.optional(v.id('funcionarios')),
observacoes: v.optional(v.string())
},
handler: async (ctx, args) => {
@@ -837,6 +879,9 @@ export const ajustarEstoque = mutation({
const usuario = await getCurrentUserFunction(ctx);
if (!usuario) throw new Error('Usuário não autenticado');
// Se funcionarioId não foi fornecido, usar o do usuário logado (se existir)
const funcionarioId = args.funcionarioId || usuario.funcionarioId;
const quantidadeAnterior = material.estoqueAtual;
const diferenca = args.quantidadeNova - quantidadeAnterior;
@@ -854,6 +899,7 @@ export const ajustarEstoque = mutation({
quantidadeAnterior,
quantidadeNova: args.quantidadeNova,
motivo: args.motivo,
funcionarioId,
usuarioId: usuario._id,
data: Date.now(),
observacoes: args.observacoes