feat: add area chart for upcoming employee leave data, visualizing monthly vacation counts and enhancing dashboard insights

This commit is contained in:
2025-11-29 22:27:23 -03:00
parent 1d9f924cb8
commit 545e119367
3 changed files with 156 additions and 9 deletions

View File

@@ -82,8 +82,11 @@ export const listarTodas = query({
// Buscar usuário do funcionário para obter fotoPerfilUrl
let fotoPerfilUrl: string | null = null;
if (funcionario?.usuarioId) {
const usuario = await ctx.db.get(funcionario.usuarioId);
if (funcionario) {
const usuario = await ctx.db
.query("usuarios")
.withIndex("by_funcionarioId", (q) => q.eq("funcionarioId", funcionario._id))
.first();
if (usuario?.fotoPerfil) {
fotoPerfilUrl = await ctx.storage.getUrl(usuario.fotoPerfil);
}
@@ -98,19 +101,16 @@ export const listarTodas = query({
.filter((q) => q.eq(q.field("ativo"), true))
.first();
let time = null;
let gestor = null;
let time: Doc<"times"> | null = null;
let gestor: { _id: Id<"usuarios">; nome: string } | null = null;
if (membroTime) {
time = await ctx.db.get(membroTime.timeId);
// Buscar gestor do time
if (time?.gestorId) {
const gestorUsuario = await ctx.db.get(time.gestorId);
if (gestorUsuario) {
if (gestorUsuario?.funcionarioId) {
// Buscar funcionário do gestor para obter o nome
const gestorFuncionario = await ctx.db
.query("funcionarios")
.withIndex("by_usuario", (q) => q.eq("usuarioId", time.gestorId))
.first();
const gestorFuncionario = await ctx.db.get(gestorUsuario.funcionarioId);
if (gestorFuncionario) {
gestor = {
_id: gestorUsuario._id,

View File

@@ -871,6 +871,10 @@ export default defineSchema({
configuradoNoServidorEm: v.optional(v.number()), // Timestamp de quando foi configurado no servidor
configuradoPor: v.id("usuarios"), // Usuário que configurou
atualizadoEm: v.number(), // Timestamp de atualização
jitsiConfigPath: v.optional(v.string()), // Caminho da configuração do Jitsi no servidor (ex: "~/.jitsi-meet-cfg")
sshUsername: v.optional(v.string()), // Usuário SSH para acesso ao servidor
sshPasswordHash: v.optional(v.string()), // Hash da senha SSH (criptografada)
sshPort: v.optional(v.number()), // Porta SSH (padrão: 22)
}).index("by_ativo", ["ativo"]),
// Fila de Emails