feat: add DFD number management to pedidos, including editing functionality and validation for sending to acceptance, enhancing data integrity and user feedback
This commit is contained in:
@@ -409,6 +409,7 @@ export const list = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: pedidoStatusValidator,
|
||||
// acaoId removed from return
|
||||
criadoPor: v.id('usuarios'),
|
||||
@@ -433,6 +434,7 @@ export const list = query({
|
||||
_id: p._id,
|
||||
_creationTime: p._creationTime,
|
||||
numeroSei: p.numeroSei,
|
||||
numeroDfd: p.numeroDfd,
|
||||
status: p.status,
|
||||
criadoPor: p.criadoPor,
|
||||
criadoPorNome: creator?.nome || 'Desconhecido',
|
||||
@@ -455,6 +457,7 @@ export const get = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: pedidoStatusValidator,
|
||||
acaoId: v.optional(v.id('acoes')),
|
||||
criadoPor: v.id('usuarios'),
|
||||
@@ -568,6 +571,7 @@ export const checkExisting = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: v.union(
|
||||
v.literal('em_rascunho'),
|
||||
v.literal('aguardando_aceite'),
|
||||
@@ -662,6 +666,7 @@ export const checkExisting = query({
|
||||
_id: pedido._id,
|
||||
_creationTime: pedido._creationTime,
|
||||
numeroSei: pedido.numeroSei,
|
||||
numeroDfd: pedido.numeroDfd,
|
||||
status: pedido.status,
|
||||
criadoPor: pedido.criadoPor,
|
||||
aceitoPor: pedido.aceitoPor,
|
||||
@@ -684,6 +689,7 @@ export const listForAcceptance = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: v.string(),
|
||||
criadoPor: v.id('usuarios'),
|
||||
criadoPorNome: v.string(),
|
||||
@@ -722,6 +728,7 @@ export const listForAcceptance = query({
|
||||
_id: o._id,
|
||||
_creationTime: o._creationTime,
|
||||
numeroSei: o.numeroSei,
|
||||
numeroDfd: o.numeroDfd,
|
||||
status: o.status,
|
||||
criadoPor: o.criadoPor,
|
||||
criadoPorNome: creator?.nome || 'Desconhecido',
|
||||
@@ -742,6 +749,7 @@ export const listMyAnalysis = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: v.string(),
|
||||
criadoPor: v.id('usuarios'),
|
||||
criadoPorNome: v.string(),
|
||||
@@ -789,6 +797,7 @@ export const listMyAnalysis = query({
|
||||
_id: o._id,
|
||||
_creationTime: o._creationTime,
|
||||
numeroSei: o.numeroSei,
|
||||
numeroDfd: o.numeroDfd,
|
||||
status: o.status,
|
||||
criadoPor: o.criadoPor,
|
||||
criadoPorNome: creator?.nome || 'Desconhecido',
|
||||
@@ -816,6 +825,7 @@ export const listByItemCreator = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: pedidoStatusValidator,
|
||||
aceitoPor: v.optional(v.id('funcionarios')),
|
||||
criadoPor: v.id('usuarios'),
|
||||
@@ -855,6 +865,7 @@ export const listByItemCreator = query({
|
||||
_id: o._id,
|
||||
_creationTime: o._creationTime,
|
||||
numeroSei: o.numeroSei,
|
||||
numeroDfd: o.numeroDfd,
|
||||
status: o.status,
|
||||
criadoPor: o.criadoPor,
|
||||
criadoPorNome: creator?.nome || 'Desconhecido',
|
||||
@@ -901,6 +912,7 @@ export const gerarRelatorio = query({
|
||||
_id: v.id('pedidos'),
|
||||
_creationTime: v.number(),
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: pedidoStatusValidator,
|
||||
criadoPor: v.id('usuarios'),
|
||||
criadoPorNome: v.string(),
|
||||
@@ -1111,6 +1123,7 @@ export const gerarRelatorio = query({
|
||||
_id: p._id,
|
||||
_creationTime: p._creationTime,
|
||||
numeroSei: p.numeroSei,
|
||||
numeroDfd: p.numeroDfd,
|
||||
status: p.status,
|
||||
criadoPor: p.criadoPor,
|
||||
criadoPorNome: creator?.nome || 'Desconhecido',
|
||||
@@ -1228,7 +1241,8 @@ export const acceptOrder = mutation({
|
||||
|
||||
export const create = mutation({
|
||||
args: {
|
||||
numeroSei: v.optional(v.string())
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string())
|
||||
// acaoId removed
|
||||
},
|
||||
returns: v.id('pedidos'),
|
||||
@@ -1246,6 +1260,7 @@ export const create = mutation({
|
||||
// 3. Create Order
|
||||
const pedidoId = await ctx.db.insert('pedidos', {
|
||||
numeroSei: args.numeroSei,
|
||||
numeroDfd: args.numeroDfd,
|
||||
status: 'em_rascunho',
|
||||
criadoPor: user._id,
|
||||
criadoEm: Date.now(),
|
||||
@@ -1305,6 +1320,41 @@ export const updateSeiNumber = mutation({
|
||||
}
|
||||
});
|
||||
|
||||
export const updateDfdNumber = mutation({
|
||||
args: {
|
||||
pedidoId: v.id('pedidos'),
|
||||
numeroDfd: v.string()
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
const user = await getUsuarioAutenticado(ctx);
|
||||
const pedido = await ctx.db.get(args.pedidoId);
|
||||
if (!pedido) throw new Error('Pedido não encontrado.');
|
||||
|
||||
// Verificar se o pedido está em um status que permite edição
|
||||
if (pedido.status !== 'em_rascunho' && pedido.status !== 'precisa_ajustes') {
|
||||
throw new Error(
|
||||
'Apenas pedidos em rascunho ou que precisam de ajustes podem ter o número DFD atualizado.'
|
||||
);
|
||||
}
|
||||
|
||||
const oldDfd = pedido.numeroDfd;
|
||||
|
||||
await ctx.db.patch(args.pedidoId, {
|
||||
numeroDfd: args.numeroDfd,
|
||||
atualizadoEm: Date.now()
|
||||
});
|
||||
|
||||
await ctx.db.insert('historicoPedidos', {
|
||||
pedidoId: args.pedidoId,
|
||||
usuarioId: user._id,
|
||||
acao: 'atualizacao_dfd',
|
||||
detalhes: JSON.stringify({ de: oldDfd, para: args.numeroDfd }),
|
||||
data: Date.now()
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export const addItem = mutation({
|
||||
args: {
|
||||
pedidoId: v.id('pedidos'),
|
||||
@@ -1635,7 +1685,8 @@ export const splitPedido = mutation({
|
||||
args: {
|
||||
pedidoId: v.id('pedidos'),
|
||||
itemIds: v.array(v.id('objetoItems')),
|
||||
numeroSei: v.optional(v.string())
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string())
|
||||
},
|
||||
returns: v.id('pedidos'),
|
||||
handler: async (ctx, args) => {
|
||||
@@ -1679,6 +1730,7 @@ export const splitPedido = mutation({
|
||||
|
||||
const novoPedidoId = await ctx.db.insert('pedidos', {
|
||||
numeroSei: args.numeroSei,
|
||||
numeroDfd: args.numeroDfd,
|
||||
status: 'em_rascunho',
|
||||
criadoPor: user._id,
|
||||
criadoEm: Date.now(),
|
||||
@@ -1936,6 +1988,14 @@ export const enviarParaAceite = mutation({
|
||||
);
|
||||
}
|
||||
|
||||
// Validar que numeroSei e numeroDfd estão preenchidos
|
||||
if (!pedido.numeroSei || !pedido.numeroSei.trim()) {
|
||||
throw new Error('O número SEI deve ser informado antes de enviar o pedido para aceite.');
|
||||
}
|
||||
if (!pedido.numeroDfd || !pedido.numeroDfd.trim()) {
|
||||
throw new Error('O número DFD deve ser informado antes de enviar o pedido para aceite.');
|
||||
}
|
||||
|
||||
const oldStatus = pedido.status;
|
||||
const newStatus = 'aguardando_aceite';
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import { v } from 'convex/values';
|
||||
export const pedidosTables = {
|
||||
pedidos: defineTable({
|
||||
numeroSei: v.optional(v.string()),
|
||||
numeroDfd: v.optional(v.string()),
|
||||
status: v.union(
|
||||
v.literal('em_rascunho'),
|
||||
v.literal('aguardando_aceite'),
|
||||
@@ -21,6 +22,7 @@ export const pedidosTables = {
|
||||
atualizadoEm: v.number()
|
||||
})
|
||||
.index('by_numeroSei', ['numeroSei'])
|
||||
.index('by_numeroDfd', ['numeroDfd'])
|
||||
.index('by_status', ['status'])
|
||||
.index('by_criadoPor', ['criadoPor'])
|
||||
.index('by_aceitoPor', ['aceitoPor'])
|
||||
|
||||
Reference in New Issue
Block a user