feat: Add confirmation modal for item actions and enhance user feedback with toast notifications in pedidos management.
This commit is contained in:
@@ -619,8 +619,8 @@ export const addItem = mutation({
|
||||
const pedido = await ctx.db.get(args.pedidoId);
|
||||
if (!pedido) throw new Error('Pedido não encontrado.');
|
||||
|
||||
// --- CHECK ANALYSIS MODE ---
|
||||
if (pedido.status === 'em_analise') {
|
||||
// --- CHECK ANALYSIS / ACCEPTANCE MODE ---
|
||||
if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') {
|
||||
await ctx.db.insert('solicitacoesItens', {
|
||||
pedidoId: args.pedidoId,
|
||||
tipo: 'adicao',
|
||||
@@ -729,8 +729,8 @@ export const updateItemQuantity = mutation({
|
||||
const pedido = await ctx.db.get(item.pedidoId);
|
||||
if (!pedido) throw new Error('Pedido não encontrado.');
|
||||
|
||||
// --- CHECK ANALYSIS MODE ---
|
||||
if (pedido.status === 'em_analise') {
|
||||
// --- CHECK ANALYSIS / ACCEPTANCE MODE ---
|
||||
if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') {
|
||||
await ctx.db.insert('solicitacoesItens', {
|
||||
pedidoId: item.pedidoId,
|
||||
tipo: 'alteracao_quantidade',
|
||||
@@ -784,8 +784,8 @@ export const removeItem = mutation({
|
||||
const pedido = await ctx.db.get(item.pedidoId);
|
||||
if (!pedido) throw new Error('Pedido não encontrado.');
|
||||
|
||||
// --- CHECK ANALYSIS MODE ---
|
||||
if (pedido.status === 'em_analise') {
|
||||
// --- CHECK ANALYSIS / ACCEPTANCE MODE ---
|
||||
if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') {
|
||||
if (!user.funcionarioId) throw new Error('Usuário sem funcionário vinculado.');
|
||||
await ctx.db.insert('solicitacoesItens', {
|
||||
pedidoId: item.pedidoId,
|
||||
@@ -995,6 +995,9 @@ export const updateItem = mutation({
|
||||
const item = await ctx.db.get(args.itemId);
|
||||
if (!item) throw new Error('Item não encontrado.');
|
||||
|
||||
const pedido = await ctx.db.get(item.pedidoId);
|
||||
if (!pedido) throw new Error('Pedido não encontrado.');
|
||||
|
||||
// Apenas quem adicionou o item pode editá-lo
|
||||
const isOwner = item.adicionadoPor === user.funcionarioId;
|
||||
if (!isOwner) {
|
||||
@@ -1008,6 +1011,29 @@ export const updateItem = mutation({
|
||||
ataId: 'ataId' in item ? item.ataId : undefined
|
||||
};
|
||||
|
||||
// Em pedidos em análise ou aguardando aceite, geramos uma solicitação em vez de alterar diretamente
|
||||
if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') {
|
||||
await ctx.db.insert('solicitacoesItens', {
|
||||
pedidoId: item.pedidoId,
|
||||
tipo: 'alteracao_detalhes',
|
||||
dados: JSON.stringify({
|
||||
itemId: args.itemId,
|
||||
de: oldValues,
|
||||
para: {
|
||||
valorEstimado: args.valorEstimado,
|
||||
modalidade: args.modalidade,
|
||||
acaoId: args.acaoId,
|
||||
ataId: args.ataId
|
||||
}
|
||||
}),
|
||||
status: 'pendente',
|
||||
solicitadoPor: user.funcionarioId,
|
||||
criadoEm: Date.now()
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await ctx.db.patch(args.itemId, {
|
||||
valorEstimado: args.valorEstimado,
|
||||
modalidade: args.modalidade,
|
||||
@@ -1510,18 +1536,6 @@ export const notifyStatusChange = internalMutation({
|
||||
|
||||
export const getItemRequests = query({
|
||||
args: { pedidoId: v.id('pedidos') },
|
||||
returns: v.array(
|
||||
v.object({
|
||||
_id: v.id('solicitacoesItens'),
|
||||
pedidoId: v.id('pedidos'),
|
||||
tipo: v.union(v.literal('adicao'), v.literal('alteracao_quantidade'), v.literal('exclusao')),
|
||||
dados: v.string(),
|
||||
status: v.union(v.literal('pendente'), v.literal('aprovado'), v.literal('rejeitado')),
|
||||
solicitadoPor: v.id('funcionarios'),
|
||||
solicitadoPorNome: v.string(),
|
||||
criadoEm: v.number()
|
||||
})
|
||||
),
|
||||
handler: async (ctx, args) => {
|
||||
const requests = await ctx.db
|
||||
.query('solicitacoesItens')
|
||||
@@ -1648,6 +1662,26 @@ export const approveItemRequest = mutation({
|
||||
if (item) {
|
||||
await ctx.db.delete(itemId);
|
||||
}
|
||||
} else if (request.tipo === 'alteracao_detalhes') {
|
||||
const { itemId, para } = data as {
|
||||
itemId: Id<'objetoItems'>;
|
||||
para: {
|
||||
valorEstimado: string;
|
||||
modalidade: Doc<'objetoItems'>['modalidade'];
|
||||
acaoId?: Id<'acoes'>;
|
||||
ataId?: Id<'atas'>;
|
||||
};
|
||||
};
|
||||
|
||||
const item = await ctx.db.get(itemId);
|
||||
if (item) {
|
||||
await ctx.db.patch(itemId, {
|
||||
valorEstimado: para.valorEstimado,
|
||||
modalidade: para.modalidade,
|
||||
acaoId: para.acaoId,
|
||||
ataId: para.ataId
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Update request status
|
||||
|
||||
Reference in New Issue
Block a user