diff --git a/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/[id]/+page.svelte b/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/[id]/+page.svelte new file mode 100644 index 0000000..6430ee2 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/[id]/+page.svelte @@ -0,0 +1,267 @@ + + +
+
+
+
+ + + +
+
+

Editar Template

+

+ Atualize as informações do template selecionado. Templates de sistema não podem ser + editados. +

+
+
+ Voltar +
+ + {#if !template} +
+ Template não encontrado. +
+ {:else} + {#if mensagem} +
+ {mensagem.texto} + +
+ {/if} + +
+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+
+ + + +
+
+ + +
+
+ +
+ Cancelar + +
+
+
+ {/if} +
diff --git a/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/novo/+page.svelte b/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/novo/+page.svelte new file mode 100644 index 0000000..c29def9 --- /dev/null +++ b/apps/web/src/routes/(dashboard)/ti/notificacoes/templates/novo/+page.svelte @@ -0,0 +1,243 @@ + + +
+
+
+
+ + + +
+
+

Novo Template

+

+ Crie um template de email ou mensagem para reutilizar no sistema. +

+
+
+ Voltar +
+ + {#if mensagem} +
+ {mensagem.texto} + +
+ {/if} + +
+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + + +
+
+ + +
+
+ +
+ Cancelar + +
+
+
+
diff --git a/packages/backend/convex/ausencias.ts b/packages/backend/convex/ausencias.ts index d3981fd..89078d2 100644 --- a/packages/backend/convex/ausencias.ts +++ b/packages/backend/convex/ausencias.ts @@ -364,9 +364,9 @@ export const criarSolicitacao = mutation({ urlSistema = `http://${urlSistema}`; } - // Enviar email ao gestor usando template + // Enviar email ao gestor usando template (agendado via scheduler) try { - await ctx.runAction(api.email.enviarEmailComTemplate, { + await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, { destinatario: gestorUsuario.email, destinatarioId: gestorId, templateCodigo: "ausencia_solicitada", @@ -381,8 +381,11 @@ export const criarSolicitacao = mutation({ 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); + // Fallback para envio direto se houver erro ao agendar ou processar o template + console.warn( + "Erro ao agendar envio de email com template ausencia_solicitada, usando envio direto:", + error, + ); await ctx.runMutation(api.email.enfileirarEmail, { destinatario: gestorUsuario.email, destinatarioId: gestorId, @@ -506,9 +509,9 @@ export const aprovar = mutation({ urlSistema = `http://${urlSistema}`; } - // Enviar email ao funcionário usando template + // Enviar email ao funcionário usando template (agendado via scheduler) try { - await ctx.runAction(api.email.enviarEmailComTemplate, { + await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, { destinatario: funcionarioUsuario.email, destinatarioId: funcionarioUsuario._id, templateCodigo: "ausencia_aprovada", @@ -523,8 +526,11 @@ export const aprovar = mutation({ 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); + // Fallback para envio direto se houver erro ao agendar ou processar o template + console.warn( + "Erro ao agendar envio de email com template ausencia_aprovada, usando envio direto:", + error, + ); await ctx.runMutation(api.email.enfileirarEmail, { destinatario: funcionarioUsuario.email, destinatarioId: funcionarioUsuario._id, @@ -649,9 +655,9 @@ export const reprovar = mutation({ urlSistema = `http://${urlSistema}`; } - // Enviar email ao funcionário usando template + // Enviar email ao funcionário usando template (agendado via scheduler) try { - await ctx.runAction(api.email.enviarEmailComTemplate, { + await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, { destinatario: funcionarioUsuario.email, destinatarioId: funcionarioUsuario._id, templateCodigo: "ausencia_reprovada", @@ -667,8 +673,11 @@ export const reprovar = mutation({ 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); + // Fallback para envio direto se houver erro ao agendar ou processar o template + console.warn( + "Erro ao agendar envio de email com template ausencia_reprovada, usando envio direto:", + error, + ); await ctx.runMutation(api.email.enfileirarEmail, { destinatario: funcionarioUsuario.email, destinatarioId: funcionarioUsuario._id, diff --git a/packages/backend/convex/chamados.ts b/packages/backend/convex/chamados.ts index f0a9776..536644d 100644 --- a/packages/backend/convex/chamados.ts +++ b/packages/backend/convex/chamados.ts @@ -131,7 +131,7 @@ async function registrarNotificacoes( if (ticket.solicitanteEmail) { // Tentar usar template, senão usar envio direto try { - await ctx.runAction(api.email.enviarEmailComTemplate, { + await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, { destinatario: ticket.solicitanteEmail, destinatarioId: ticket.solicitanteId, templateCodigo: "chamado_atualizado", @@ -145,6 +145,10 @@ async function registrarNotificacoes( }); } catch (error) { // Fallback para envio direto + console.warn( + "Erro ao agendar envio de email com template chamado_atualizado para solicitante, usando envio direto:", + error, + ); await ctx.runMutation(api.email.enfileirarEmail, { destinatario: ticket.solicitanteEmail, destinatarioId: ticket.solicitanteId, @@ -172,7 +176,7 @@ async function registrarNotificacoes( if (responsavel?.email) { // Tentar usar template, senão usar envio direto try { - await ctx.runAction(api.email.enviarEmailComTemplate, { + await ctx.scheduler.runAfter(0, api.email.enviarEmailComTemplate, { destinatario: responsavel.email, destinatarioId: ticket.responsavelId, templateCodigo: "chamado_atualizado", @@ -186,6 +190,10 @@ async function registrarNotificacoes( }); } catch (error) { // Fallback para envio direto + console.warn( + "Erro ao agendar envio de email com template chamado_atualizado para responsável, usando envio direto:", + error, + ); await ctx.runMutation(api.email.enfileirarEmail, { destinatario: responsavel.email, destinatarioId: ticket.responsavelId,