From 1c5da463356e93fb6b182ae61ee40b5c94f9bf23 Mon Sep 17 00:00:00 2001 From: Mythie Date: Fri, 14 Jun 2024 13:53:08 +1000 Subject: [PATCH] fix: update signing email job --- .../jobs/definitions/send-signing-email.ts | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/packages/lib/jobs/definitions/send-signing-email.ts b/packages/lib/jobs/definitions/send-signing-email.ts index 701831648..5ee6c2fd2 100644 --- a/packages/lib/jobs/definitions/send-signing-email.ts +++ b/packages/lib/jobs/definitions/send-signing-email.ts @@ -6,7 +6,12 @@ import { mailer } from '@documenso/email/mailer'; import { render } from '@documenso/email/render'; import DocumentInviteEmailTemplate from '@documenso/email/templates/document-invite'; import { prisma } from '@documenso/prisma'; -import { DocumentStatus, RecipientRole, SendStatus } from '@documenso/prisma/client'; +import { + DocumentSource, + DocumentStatus, + RecipientRole, + SendStatus, +} from '@documenso/prisma/client'; import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app'; import { FROM_ADDRESS, FROM_NAME } from '../../constants/email'; @@ -15,10 +20,10 @@ import { RECIPIENT_ROLE_TO_EMAIL_TYPE, } from '../../constants/recipient-roles'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; +import { ZRequestMetadataSchema } from '../../universal/extract-request-metadata'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; import { renderCustomEmailTemplate } from '../../utils/render-custom-email-template'; import type { JobDefinition } from '../client/_internal/job'; -import { ZRequestMetadataSchema } from '../../universal/extract-request-metadata'; export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { id: 'send.signing.email', @@ -64,37 +69,47 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { return; } - const emailType = RECIPIENT_ROLE_TO_EMAIL_TYPE[recipient.role]; - const roleDescription = RECIPIENT_ROLES_DESCRIPTION[recipient.role]; + const customEmail = document?.documentMeta; + const isDirectTemplate = document.source === DocumentSource.TEMPLATE_DIRECT_LINK; - const isSendingToSelf = recipient.email === user.email; - const selfSignerMessage = `You have initiated the document ${`"${document.title}"`} that requires you to ${roleDescription.actionVerb.toLowerCase()} it.`; + const recipientEmailType = RECIPIENT_ROLE_TO_EMAIL_TYPE[recipient.role]; - const emailSubject = isSendingToSelf - ? `Please ${roleDescription.actionVerb.toLowerCase()} your document` - : `Please ${roleDescription.actionVerb.toLowerCase()} this document`; + const { email, name } = recipient; + const selfSigner = email === user.email; + const { actionVerb } = RECIPIENT_ROLES_DESCRIPTION[recipient.role]; + const recipientActionVerb = actionVerb.toLowerCase(); - const emailTemplateVariables = { - 'signer.name': recipient.name, - 'signer.email': recipient.email, - 'document.title': document.title, + let emailMessage = customEmail?.message || ''; + let emailSubject = `Please ${recipientActionVerb} this document`; + + if (selfSigner) { + emailMessage = `You have initiated the document ${`"${document.title}"`} that requires you to ${recipientActionVerb} it.`; + emailSubject = `Please ${recipientActionVerb} your document`; + } + + if (isDirectTemplate) { + emailMessage = `A document was created by your direct template that requires you to ${recipientActionVerb} it.`; + emailSubject = `Please ${recipientActionVerb} this document created by your direct template`; + } + + const customEmailTemplate = { + 'signer.name': name, + 'signer.email': email, + 'document.name': document.title, }; const assetBaseUrl = NEXT_PUBLIC_WEBAPP_URL() || 'http://localhost:3000'; - const signDocumentUrl = `${NEXT_PUBLIC_WEBAPP_URL()}/sign/${recipient.token}`; + const signDocumentLink = `${NEXT_PUBLIC_WEBAPP_URL()}/sign/${recipient.token}`; const template = createElement(DocumentInviteEmailTemplate, { documentName: document.title, inviterName: user.name || undefined, inviterEmail: user.email, assetBaseUrl, - signDocumentLink: signDocumentUrl, - customBody: renderCustomEmailTemplate( - isSendingToSelf ? selfSignerMessage : documentMeta?.message || '', - emailTemplateVariables, - ), + signDocumentLink, + customBody: renderCustomEmailTemplate(emailMessage, customEmailTemplate), role: recipient.role, - selfSigner: isSendingToSelf, + selfSigner, }); await io.runTask('send-signing-email', async () => { @@ -109,7 +124,7 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { }, subject: renderCustomEmailTemplate( documentMeta?.subject || emailSubject, - emailTemplateVariables, + customEmailTemplate, ), html: render(template), text: render(template, { plainText: true }), @@ -135,7 +150,7 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { user, requestMetadata, data: { - emailType, + emailType: recipientEmailType, recipientId: recipient.id, recipientName: recipient.name, recipientEmail: recipient.email,