feat: enhance vacation management system with new employee association functionality, improved email notification handling, and comprehensive documentation; update dependencies and UI components for better user experience

This commit is contained in:
2025-10-30 09:27:10 -03:00
parent 21b41121db
commit fd445e8246
43 changed files with 6097 additions and 515 deletions

View File

@@ -0,0 +1,127 @@
import { v } from "convex/values";
import { mutation } from "./_generated/server";
/**
* Mutation de teste para criar um funcionário e associar ao usuário TI Master
* Isso permite testar o sistema de férias completo
*/
export const criarFuncionarioParaTIMaster = mutation({
args: {
usuarioEmail: v.string(), // Email do usuário TI Master
},
returns: v.union(
v.object({ sucesso: v.literal(true), funcionarioId: v.id("funcionarios") }),
v.object({ sucesso: v.literal(false), erro: v.string() })
),
handler: async (ctx, args) => {
// Buscar usuário
const usuario = await ctx.db
.query("usuarios")
.withIndex("by_email", (q) => q.eq("email", args.usuarioEmail))
.first();
if (!usuario) {
return { sucesso: false as const, erro: "Usuário não encontrado" };
}
// Verificar se já tem funcionário associado
if (usuario.funcionarioId) {
return { sucesso: false as const, erro: "Usuário já tem funcionário associado" };
}
// Buscar um símbolo qualquer (pegamos o primeiro)
const simbolo = await ctx.db.query("simbolos").first();
if (!simbolo) {
return { sucesso: false as const, erro: "Nenhum símbolo encontrado no sistema" };
}
// Criar funcionário de teste
const funcionarioId = await ctx.db.insert("funcionarios", {
nome: usuario.nome,
cpf: "000.000.000-00", // CPF de teste
rg: "0000000",
endereco: "Endereço de Teste",
bairro: "Centro",
cidade: "Recife",
uf: "PE",
telefone: "(81) 99999-9999",
email: usuario.email,
matricula: usuario.matricula,
admissaoData: "2023-01-01", // Data de admissão: 1 ano atrás
simboloId: simbolo._id,
simboloTipo: simbolo.tipo,
statusFerias: "ativo",
// IMPORTANTE: Definir regime de trabalho
// Altere aqui para testar diferentes regimes:
// - "clt" = CLT (máx 3 períodos, mín 5 dias)
// - "estatutario_pe" = Servidor Público PE (máx 2 períodos, mín 10 dias)
regimeTrabalho: "clt",
// Dados opcionais
descricaoCargo: "Gestor de TI - Cargo de Teste",
nomePai: "Pai de Teste",
nomeMae: "Mãe de Teste",
naturalidade: "Recife",
naturalidadeUF: "PE",
sexo: "masculino",
estadoCivil: "solteiro",
nacionalidade: "Brasileira",
grauInstrucao: "superior_completo",
tipoSanguineo: "O+",
});
// Associar funcionário ao usuário
await ctx.db.patch(usuario._id, {
funcionarioId,
});
return { sucesso: true as const, funcionarioId };
},
});
/**
* Mutation para alterar o regime de trabalho de um funcionário
* Útil para testar diferentes regras (CLT vs Servidor PE)
*/
export const alterarRegimeTrabalho = mutation({
args: {
funcionarioId: v.id("funcionarios"),
novoRegime: v.union(
v.literal("clt"),
v.literal("estatutario_pe"),
v.literal("estatutario_federal"),
v.literal("estatutario_municipal")
),
},
returns: v.object({ sucesso: v.boolean() }),
handler: async (ctx, args) => {
await ctx.db.patch(args.funcionarioId, {
regimeTrabalho: args.novoRegime,
});
return { sucesso: true };
},
});
/**
* Mutation para alterar data de admissão
* Útil para testar diferentes períodos aquisitivos
*/
export const alterarDataAdmissao = mutation({
args: {
funcionarioId: v.id("funcionarios"),
novaData: v.string(), // Formato: "YYYY-MM-DD"
},
returns: v.object({ sucesso: v.boolean() }),
handler: async (ctx, args) => {
await ctx.db.patch(args.funcionarioId, {
admissaoData: args.novaData,
});
return { sucesso: true };
},
});