feat: Enhance pedidos management with detailed item linking, object search, and improved UI for item configuration and details

This commit is contained in:
2025-12-03 10:22:22 -03:00
parent 4d29501849
commit d86d7d8dbb
5 changed files with 923 additions and 219 deletions

View File

@@ -498,6 +498,71 @@ export const removeItem = mutation({
}
});
export const updateItem = mutation({
args: {
itemId: v.id('objetoItems'),
valorEstimado: v.string(),
modalidade: v.union(
v.literal('dispensa'),
v.literal('inexgibilidade'),
v.literal('adesao'),
v.literal('consumo')
),
acaoId: v.optional(v.id('acoes')),
ataId: v.optional(v.id('atas'))
},
returns: v.null(),
handler: async (ctx, args) => {
const user = await getUsuarioAutenticado(ctx);
if (!user.funcionarioId) {
throw new Error('Usuário não vinculado a um funcionário.');
}
const item = await ctx.db.get(args.itemId);
if (!item) throw new Error('Item não encontrado.');
// Apenas quem adicionou o item pode editá-lo
const isOwner = item.adicionadoPor === user.funcionarioId;
if (!isOwner) {
throw new Error('Apenas quem adicionou este item pode editá-lo.');
}
const oldValues = {
valorEstimado: item.valorEstimado,
modalidade: item.modalidade,
acaoId: 'acaoId' in item ? item.acaoId : undefined,
ataId: 'ataId' in item ? item.ataId : undefined
};
await ctx.db.patch(args.itemId, {
valorEstimado: args.valorEstimado,
modalidade: args.modalidade,
acaoId: args.acaoId,
ataId: args.ataId
});
await ctx.db.patch(item.pedidoId, { atualizadoEm: Date.now() });
await ctx.db.insert('historicoPedidos', {
pedidoId: item.pedidoId,
usuarioId: user._id,
acao: 'edicao_item',
detalhes: JSON.stringify({
objetoId: item.objetoId,
de: oldValues,
para: {
valorEstimado: args.valorEstimado,
modalidade: args.modalidade,
acaoId: args.acaoId,
ataId: args.ataId
}
}),
data: Date.now()
});
}
});
export const updateStatus = mutation({
args: {
pedidoId: v.id('pedidos'),