feat: enhance 'Almoxarifado' UI with improved styling, updated component layouts, and added barcode functionality for better inventory management and user experience
This commit is contained in:
@@ -165,6 +165,101 @@ export const listarMovimentacoes = query({
|
||||
}
|
||||
});
|
||||
|
||||
export const listarMovimentacoesComHistorico = query({
|
||||
args: {},
|
||||
handler: async (ctx) => {
|
||||
const usuario = await getCurrentUserFunction(ctx);
|
||||
if (!usuario) return [];
|
||||
|
||||
try {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'almoxarifado',
|
||||
acao: 'listar'
|
||||
});
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Buscar movimentações de estoque
|
||||
const movimentacoes = await ctx.db
|
||||
.query('movimentacoesEstoque')
|
||||
.withIndex('by_data')
|
||||
.collect();
|
||||
|
||||
// Buscar histórico de alterações de materiais (criação, edição, exclusão)
|
||||
const historicoMateriais = await ctx.db
|
||||
.query('historicoAlteracoes')
|
||||
.withIndex('by_tipoEntidade', (q) => q.eq('tipoEntidade', 'material'))
|
||||
.collect();
|
||||
|
||||
// Buscar todos os usuários únicos para enriquecer os dados
|
||||
const usuarioIds = new Set<Id<'usuarios'>>();
|
||||
for (const mov of movimentacoes) {
|
||||
usuarioIds.add(mov.usuarioId);
|
||||
}
|
||||
for (const hist of historicoMateriais) {
|
||||
usuarioIds.add(hist.usuarioId);
|
||||
}
|
||||
|
||||
// Buscar informações dos usuários
|
||||
const usuariosMap = new Map<Id<'usuarios'>, Doc<'usuarios'>>();
|
||||
for (const userId of usuarioIds) {
|
||||
const usuario = await ctx.db.get(userId);
|
||||
if (usuario) {
|
||||
usuariosMap.set(userId, usuario);
|
||||
}
|
||||
}
|
||||
|
||||
// Transformar movimentações em formato unificado
|
||||
const movimentacoesFormatadas = movimentacoes.map((mov) => {
|
||||
const usuario = usuariosMap.get(mov.usuarioId);
|
||||
return {
|
||||
id: mov._id,
|
||||
tipo: 'movimentacao' as const,
|
||||
tipoMovimentacao: mov.tipo,
|
||||
materialId: mov.materialId,
|
||||
data: mov.data,
|
||||
quantidade: mov.quantidade,
|
||||
quantidadeAnterior: mov.quantidadeAnterior,
|
||||
quantidadeNova: mov.quantidadeNova,
|
||||
motivo: mov.motivo,
|
||||
funcionarioId: mov.funcionarioId,
|
||||
usuarioId: mov.usuarioId,
|
||||
usuarioNome: usuario?.nome || 'Usuário desconhecido',
|
||||
observacoes: mov.observacoes
|
||||
};
|
||||
});
|
||||
|
||||
// Transformar histórico de alterações em formato unificado
|
||||
const historicoFormatado = historicoMateriais.map((hist) => {
|
||||
const usuario = usuariosMap.get(hist.usuarioId);
|
||||
return {
|
||||
id: hist._id,
|
||||
tipo: 'alteracao' as const,
|
||||
tipoAlteracao: hist.acao, // 'criacao', 'edicao', 'exclusao'
|
||||
materialId: hist.entidadeId as Id<'materiais'>, // Converter string para Id
|
||||
data: hist.timestamp,
|
||||
quantidade: undefined,
|
||||
quantidadeAnterior: undefined,
|
||||
quantidadeNova: undefined,
|
||||
motivo: hist.observacoes || hist.acao,
|
||||
funcionarioId: undefined,
|
||||
usuarioId: hist.usuarioId,
|
||||
usuarioNome: usuario?.nome || 'Usuário desconhecido',
|
||||
observacoes: hist.observacoes,
|
||||
dadosAnteriores: hist.dadosAnteriores,
|
||||
dadosNovos: hist.dadosNovos
|
||||
};
|
||||
});
|
||||
|
||||
// Combinar e ordenar por data (mais recente primeiro)
|
||||
const todos = [...movimentacoesFormatadas, ...historicoFormatado];
|
||||
todos.sort((a, b) => b.data - a.data);
|
||||
|
||||
return todos;
|
||||
}
|
||||
});
|
||||
|
||||
export const listarRequisicoes = query({
|
||||
args: {
|
||||
status: v.optional(requisicaoStatus),
|
||||
|
||||
Reference in New Issue
Block a user