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,118 @@
import { v } from "convex/values";
import { mutation } from "./_generated/server";
import { hashPassword } from "./auth/utils";
/**
* Cria um usuário de teste com funcionário associado
* para testar o sistema de férias
*/
export const criarUsuarioParaTesteFerias = mutation({
args: {},
returns: v.object({
sucesso: v.boolean(),
login: v.string(),
senha: v.string(),
mensagem: v.string(),
}),
handler: async (ctx, args) => {
const loginTeste = "teste.ferias";
const senhaTeste = "Teste@2025";
const emailTeste = "teste.ferias@sgse.pe.gov.br";
const nomeTeste = "João Silva (Teste)";
// Verificar se já existe
const usuarioExistente = await ctx.db
.query("usuarios")
.withIndex("by_matricula", (q) => q.eq("matricula", loginTeste))
.first();
if (usuarioExistente) {
return {
sucesso: true,
login: loginTeste,
senha: senhaTeste,
mensagem: "Usuário de teste já existe! Use as credenciais abaixo.",
};
}
// Buscar role padrão (usuário comum)
const roleUsuario = await ctx.db
.query("roles")
.filter((q) => q.eq(q.field("nome"), "usuario"))
.first();
if (!roleUsuario) {
return {
sucesso: false,
login: "",
senha: "",
mensagem: "Erro: Role 'usuario' não encontrada",
};
}
// Buscar um símbolo qualquer
const simbolo = await ctx.db.query("simbolos").first();
if (!simbolo) {
return {
sucesso: false,
login: "",
senha: "",
mensagem: "Erro: Nenhum símbolo encontrado. Crie um símbolo primeiro.",
};
}
// Criar funcionário
const funcionarioId = await ctx.db.insert("funcionarios", {
nome: nomeTeste,
cpf: "111.222.333-44",
rg: "1234567",
nascimento: "1990-05-15",
endereco: "Rua de Teste, 123",
bairro: "Centro",
cidade: "Recife",
uf: "PE",
cep: "50000-000",
telefone: "(81) 98765-4321",
email: emailTeste,
matricula: loginTeste,
admissaoData: "2023-01-15", // Admitido em jan/2023 (quase 2 anos)
simboloId: simbolo._id,
simboloTipo: simbolo.tipo,
statusFerias: "ativo",
regimeTrabalho: "clt", // CLT para testar
descricaoCargo: "Analista Administrativo",
nomePai: "José Silva",
nomeMae: "Maria Silva",
naturalidade: "Recife",
naturalidadeUF: "PE",
sexo: "masculino",
estadoCivil: "solteiro",
nacionalidade: "Brasileira",
grauInstrucao: "superior",
});
// Criar usuário
const senhaHash = await hashPassword(senhaTeste);
const usuarioId = await ctx.db.insert("usuarios", {
matricula: loginTeste,
senhaHash,
nome: nomeTeste,
email: emailTeste,
funcionarioId,
roleId: roleUsuario._id,
ativo: true,
primeiroAcesso: false, // Já consideramos que fez primeiro acesso
criadoEm: Date.now(),
atualizadoEm: Date.now(),
});
return {
sucesso: true,
login: loginTeste,
senha: senhaTeste,
mensagem: "Usuário de teste criado com sucesso!",
};
},
});