feat: add chart for displaying the last 10 registered products in 'Almoxarifado', enhancing inventory visibility and user engagement
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user