feat: add tab navigation and content management for notifications page, allowing users to switch between Enviar Notificação, Gerenciar Templates, and Agendamentos for improved organization and usability
This commit is contained in:
@@ -358,20 +358,45 @@ export const criarSolicitacao = mutation({
|
||||
.first();
|
||||
|
||||
if (gestorUsuario && funcionarioUsuario) {
|
||||
// Enviar email ao gestor
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: gestorUsuario.email,
|
||||
destinatarioId: gestorId,
|
||||
assunto: `Nova Solicitação de Ausência - ${funcionario.nome}`,
|
||||
corpo: `<p>Olá ${gestorUsuario.nome},</p>
|
||||
<p>O funcionário <strong>${funcionario.nome}</strong> solicitou uma ausência:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(args.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(args.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${args.motivo}</li>
|
||||
</ul>
|
||||
<p>Por favor, acesse o sistema para aprovar ou reprovar esta solicitação.</p>`,
|
||||
enviadoPor: funcionarioUsuario._id,
|
||||
});
|
||||
// Obter URL do sistema
|
||||
let urlSistema = process.env.FRONTEND_URL || "http://localhost:5173";
|
||||
if (!urlSistema.match(/^https?:\/\//i)) {
|
||||
urlSistema = `http://${urlSistema}`;
|
||||
}
|
||||
|
||||
// Enviar email ao gestor usando template
|
||||
try {
|
||||
await ctx.runAction(api.email.enviarEmailComTemplate, {
|
||||
destinatario: gestorUsuario.email,
|
||||
destinatarioId: gestorId,
|
||||
templateCodigo: "ausencia_solicitada",
|
||||
variaveis: {
|
||||
gestorNome: gestorUsuario.nome,
|
||||
funcionarioNome: funcionario.nome,
|
||||
dataInicio: new Date(args.dataInicio).toLocaleDateString("pt-BR"),
|
||||
dataFim: new Date(args.dataFim).toLocaleDateString("pt-BR"),
|
||||
motivo: args.motivo,
|
||||
urlSistema,
|
||||
},
|
||||
enviadoPor: funcionarioUsuario._id,
|
||||
});
|
||||
} catch (error) {
|
||||
// Fallback para envio direto se template não existir
|
||||
console.warn("Template ausencia_solicitada não encontrado, usando envio direto:", error);
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: gestorUsuario.email,
|
||||
destinatarioId: gestorId,
|
||||
assunto: `Nova Solicitação de Ausência - ${funcionario.nome}`,
|
||||
corpo: `<p>Olá ${gestorUsuario.nome},</p>
|
||||
<p>O funcionário <strong>${funcionario.nome}</strong> solicitou uma ausência:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(args.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(args.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${args.motivo}</li>
|
||||
</ul>
|
||||
<p>Por favor, acesse o sistema para aprovar ou reprovar esta solicitação.</p>`,
|
||||
enviadoPor: funcionarioUsuario._id,
|
||||
});
|
||||
}
|
||||
|
||||
// Criar ou obter conversa entre gestor e funcionário
|
||||
const conversasExistentes = await ctx.db
|
||||
@@ -475,19 +500,44 @@ export const aprovar = mutation({
|
||||
const gestorUsuario = await ctx.db.get(args.gestorId);
|
||||
|
||||
if (gestorUsuario) {
|
||||
// Enviar email ao funcionário
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
assunto: "Solicitação de Ausência Aprovada",
|
||||
corpo: `<p>Olá ${funcionarioUsuario.nome},</p>
|
||||
<p>Sua solicitação de ausência foi <strong>aprovada</strong> pelo gestor ${gestorUsuario.nome}:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(solicitacao.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${solicitacao.motivo}</li>
|
||||
</ul>`,
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
// Obter URL do sistema
|
||||
let urlSistema = process.env.FRONTEND_URL || "http://localhost:5173";
|
||||
if (!urlSistema.match(/^https?:\/\//i)) {
|
||||
urlSistema = `http://${urlSistema}`;
|
||||
}
|
||||
|
||||
// Enviar email ao funcionário usando template
|
||||
try {
|
||||
await ctx.runAction(api.email.enviarEmailComTemplate, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
templateCodigo: "ausencia_aprovada",
|
||||
variaveis: {
|
||||
funcionarioNome: funcionarioUsuario.nome,
|
||||
gestorNome: gestorUsuario.nome,
|
||||
dataInicio: new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR"),
|
||||
dataFim: new Date(solicitacao.dataFim).toLocaleDateString("pt-BR"),
|
||||
motivo: solicitacao.motivo,
|
||||
urlSistema,
|
||||
},
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
} catch (error) {
|
||||
// Fallback para envio direto se template não existir
|
||||
console.warn("Template ausencia_aprovada não encontrado, usando envio direto:", error);
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
assunto: "Solicitação de Ausência Aprovada",
|
||||
corpo: `<p>Olá ${funcionarioUsuario.nome},</p>
|
||||
<p>Sua solicitação de ausência foi <strong>aprovada</strong> pelo gestor ${gestorUsuario.nome}:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(solicitacao.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${solicitacao.motivo}</li>
|
||||
</ul>`,
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
}
|
||||
|
||||
// Criar ou obter conversa
|
||||
const conversasExistentes = await ctx.db
|
||||
@@ -593,20 +643,46 @@ export const reprovar = mutation({
|
||||
const gestorUsuario = await ctx.db.get(args.gestorId);
|
||||
|
||||
if (gestorUsuario) {
|
||||
// Enviar email ao funcionário
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
assunto: "Solicitação de Ausência Reprovada",
|
||||
corpo: `<p>Olá ${funcionarioUsuario.nome},</p>
|
||||
<p>Sua solicitação de ausência foi <strong>reprovada</strong> pelo gestor ${gestorUsuario.nome}:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(solicitacao.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${solicitacao.motivo}</li>
|
||||
<li><strong>Motivo da Reprovação:</strong> ${args.motivoReprovacao}</li>
|
||||
</ul>`,
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
// Obter URL do sistema
|
||||
let urlSistema = process.env.FRONTEND_URL || "http://localhost:5173";
|
||||
if (!urlSistema.match(/^https?:\/\//i)) {
|
||||
urlSistema = `http://${urlSistema}`;
|
||||
}
|
||||
|
||||
// Enviar email ao funcionário usando template
|
||||
try {
|
||||
await ctx.runAction(api.email.enviarEmailComTemplate, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
templateCodigo: "ausencia_reprovada",
|
||||
variaveis: {
|
||||
funcionarioNome: funcionarioUsuario.nome,
|
||||
gestorNome: gestorUsuario.nome,
|
||||
dataInicio: new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR"),
|
||||
dataFim: new Date(solicitacao.dataFim).toLocaleDateString("pt-BR"),
|
||||
motivo: solicitacao.motivo,
|
||||
motivoReprovacao: args.motivoReprovacao,
|
||||
urlSistema,
|
||||
},
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
} catch (error) {
|
||||
// Fallback para envio direto se template não existir
|
||||
console.warn("Template ausencia_reprovada não encontrado, usando envio direto:", error);
|
||||
await ctx.runMutation(api.email.enfileirarEmail, {
|
||||
destinatario: funcionarioUsuario.email,
|
||||
destinatarioId: funcionarioUsuario._id,
|
||||
assunto: "Solicitação de Ausência Reprovada",
|
||||
corpo: `<p>Olá ${funcionarioUsuario.nome},</p>
|
||||
<p>Sua solicitação de ausência foi <strong>reprovada</strong> pelo gestor ${gestorUsuario.nome}:</p>
|
||||
<ul>
|
||||
<li><strong>Período:</strong> ${new Date(solicitacao.dataInicio).toLocaleDateString("pt-BR")} até ${new Date(solicitacao.dataFim).toLocaleDateString("pt-BR")}</li>
|
||||
<li><strong>Motivo:</strong> ${solicitacao.motivo}</li>
|
||||
<li><strong>Motivo da Reprovação:</strong> ${args.motivoReprovacao}</li>
|
||||
</ul>`,
|
||||
enviadoPor: args.gestorId,
|
||||
});
|
||||
}
|
||||
|
||||
// Criar ou obter conversa
|
||||
const conversasExistentes = await ctx.db
|
||||
|
||||
Reference in New Issue
Block a user