128 lines
3.6 KiB
TypeScript
128 lines
3.6 KiB
TypeScript
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 };
|
|
},
|
|
});
|
|
|
|
|