mirror of
https://github.com/documenso/documenso.git
synced 2025-11-21 12:11:29 +10:00
chore: improve logic
This commit is contained in:
@ -6,16 +6,9 @@ import { downloadFile } from './download-file';
|
||||
type DownloadPDFProps = {
|
||||
documentData: DocumentData;
|
||||
fileName?: string;
|
||||
includeCertificate?: boolean;
|
||||
includeAuditLog?: boolean;
|
||||
};
|
||||
|
||||
export const downloadPDF = async ({
|
||||
documentData,
|
||||
fileName,
|
||||
includeCertificate,
|
||||
includeAuditLog,
|
||||
}: DownloadPDFProps) => {
|
||||
export const downloadPDF = async ({ documentData, fileName }: DownloadPDFProps) => {
|
||||
const bytes = await getFile(documentData);
|
||||
|
||||
const blob = new Blob([bytes], {
|
||||
@ -24,18 +17,8 @@ export const downloadPDF = async ({
|
||||
|
||||
const baseTitle = (fileName ?? 'document').replace(/\.pdf$/, '');
|
||||
|
||||
let suffix = '_signed';
|
||||
|
||||
if (includeCertificate && includeAuditLog) {
|
||||
suffix = suffix + '_with_certificate_and_audit';
|
||||
} else if (includeCertificate) {
|
||||
suffix = suffix + '_with_certificate';
|
||||
} else if (includeAuditLog) {
|
||||
suffix = suffix + '_with_audit';
|
||||
}
|
||||
|
||||
downloadFile({
|
||||
filename: `${baseTitle}${suffix}.pdf`,
|
||||
filename: `${baseTitle}_signed.pdf`,
|
||||
data: blob,
|
||||
});
|
||||
};
|
||||
|
||||
@ -124,6 +124,8 @@ export const createDocument = async ({
|
||||
team?.teamGlobalSettings?.documentVisibility,
|
||||
userTeamRole ?? TeamMemberRole.MEMBER,
|
||||
),
|
||||
includeSigningCertificate: team?.teamGlobalSettings?.includeSigningCertificate ?? true,
|
||||
includeAuditTrailLog: team?.teamGlobalSettings?.includeAuditTrailLog ?? true,
|
||||
formValues,
|
||||
source: DocumentSource.DOCUMENT,
|
||||
documentMeta: {
|
||||
|
||||
@ -111,21 +111,36 @@ export const sealDocument = async ({
|
||||
// !: Need to write the fields onto the document as a hard copy
|
||||
const pdfData = await getFile(documentData);
|
||||
|
||||
const certificateData =
|
||||
(document.team?.teamGlobalSettings?.includeSigningCertificate ?? true)
|
||||
? await getCertificatePdf({
|
||||
documentId,
|
||||
language: document.documentMeta?.language,
|
||||
}).catch(() => null)
|
||||
: null;
|
||||
let includeSigningCertificate;
|
||||
|
||||
const auditLogData =
|
||||
(document.team?.teamGlobalSettings?.includeAuditTrailLog ?? true)
|
||||
? await getAuditLogsPdf({
|
||||
documentId,
|
||||
language: document.documentMeta?.language,
|
||||
}).catch(() => null)
|
||||
: null;
|
||||
if (document.teamId) {
|
||||
includeSigningCertificate =
|
||||
document.team?.teamGlobalSettings?.includeSigningCertificate ?? true;
|
||||
} else {
|
||||
includeSigningCertificate = document.includeSigningCertificate ?? true;
|
||||
}
|
||||
|
||||
const certificateData = includeSigningCertificate
|
||||
? await getCertificatePdf({
|
||||
documentId,
|
||||
language: document.documentMeta?.language,
|
||||
}).catch(() => null)
|
||||
: null;
|
||||
|
||||
let includeAuditTrailLog;
|
||||
|
||||
if (document.teamId) {
|
||||
includeAuditTrailLog = document.team?.teamGlobalSettings?.includeAuditTrailLog ?? true;
|
||||
} else {
|
||||
includeAuditTrailLog = document.includeAuditTrailLog ?? true;
|
||||
}
|
||||
|
||||
const auditLogData = includeAuditTrailLog
|
||||
? await getAuditLogsPdf({
|
||||
documentId,
|
||||
language: document.documentMeta?.language,
|
||||
}).catch(() => null)
|
||||
: null;
|
||||
|
||||
const doc = await PDFDocument.load(pdfData);
|
||||
|
||||
|
||||
@ -21,6 +21,8 @@ export type UpdateDocumentOptions = {
|
||||
title?: string;
|
||||
externalId?: string | null;
|
||||
visibility?: DocumentVisibility | null;
|
||||
includeSigningCertificate?: boolean;
|
||||
includeAuditTrailLog?: boolean;
|
||||
globalAccessAuth?: TDocumentAccessAuthTypes | null;
|
||||
globalActionAuth?: TDocumentActionAuthTypes | null;
|
||||
};
|
||||
@ -156,6 +158,12 @@ export const updateDocument = async ({
|
||||
documentGlobalActionAuth === undefined || documentGlobalActionAuth === newGlobalActionAuth;
|
||||
const isDocumentVisibilitySame =
|
||||
data.visibility === undefined || data.visibility === document.visibility;
|
||||
const isIncludeSigningCertificateSame =
|
||||
data.includeSigningCertificate === undefined ||
|
||||
data.includeSigningCertificate === document.includeSigningCertificate;
|
||||
const isIncludeAuditTrailLogSame =
|
||||
data.includeAuditTrailLog === undefined ||
|
||||
data.includeAuditTrailLog === document.includeAuditTrailLog;
|
||||
|
||||
const auditLogs: CreateDocumentAuditLogDataResponse[] = [];
|
||||
|
||||
@ -235,6 +243,34 @@ export const updateDocument = async ({
|
||||
);
|
||||
}
|
||||
|
||||
if (!isIncludeSigningCertificateSame) {
|
||||
auditLogs.push(
|
||||
createDocumentAuditLogData({
|
||||
type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_SIGNING_CERTIFICATE_UPDATED,
|
||||
documentId,
|
||||
metadata: requestMetadata,
|
||||
data: {
|
||||
from: String(document.includeSigningCertificate),
|
||||
to: String(data.includeSigningCertificate || false),
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
if (!isIncludeAuditTrailLogSame) {
|
||||
auditLogs.push(
|
||||
createDocumentAuditLogData({
|
||||
type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_AUDIT_TRAIL_UPDATED,
|
||||
documentId,
|
||||
metadata: requestMetadata,
|
||||
data: {
|
||||
from: String(document.includeAuditTrailLog),
|
||||
to: String(data.includeAuditTrailLog || false),
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
// Early return if nothing is required.
|
||||
if (auditLogs.length === 0) {
|
||||
return document;
|
||||
@ -254,6 +290,8 @@ export const updateDocument = async ({
|
||||
title: data.title,
|
||||
externalId: data.externalId,
|
||||
visibility: data.visibility as DocumentVisibility,
|
||||
includeSigningCertificate: data.includeSigningCertificate,
|
||||
includeAuditTrailLog: data.includeAuditTrailLog,
|
||||
authOptions,
|
||||
},
|
||||
});
|
||||
|
||||
@ -29,7 +29,9 @@ export const ZDocumentAuditLogTypeSchema = z.enum([
|
||||
'DOCUMENT_FIELD_INSERTED', // When a field is inserted (signed/approved/etc) by a recipient.
|
||||
'DOCUMENT_FIELD_UNINSERTED', // When a field is uninserted by a recipient.
|
||||
'DOCUMENT_FIELD_PREFILLED', // When a field is prefilled by an assistant.
|
||||
'DOCUMENT_VISIBILITY_UPDATED', // When the document visibility scope is updated
|
||||
'DOCUMENT_VISIBILITY_UPDATED', // When the document visibility scope is updated.
|
||||
'DOCUMENT_SIGNING_CERTIFICATE_UPDATED', // When the include signing certificate is updated.
|
||||
'DOCUMENT_AUDIT_TRAIL_UPDATED', // When the include audit trail is updated.
|
||||
'DOCUMENT_GLOBAL_AUTH_ACCESS_UPDATED', // When the global access authentication is updated.
|
||||
'DOCUMENT_GLOBAL_AUTH_ACTION_UPDATED', // When the global action authentication is updated.
|
||||
'DOCUMENT_META_UPDATED', // When the document meta data is updated.
|
||||
@ -397,6 +399,16 @@ export const ZDocumentAuditLogEventDocumentVisibilitySchema = z.object({
|
||||
data: ZGenericFromToSchema,
|
||||
});
|
||||
|
||||
export const ZDocumentAuditLogEventDocumentSigningCertificateUpdatedSchema = z.object({
|
||||
type: z.literal(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_SIGNING_CERTIFICATE_UPDATED),
|
||||
data: ZGenericFromToSchema,
|
||||
});
|
||||
|
||||
export const ZDocumentAuditLogEventDocumentAuditTrailUpdatedSchema = z.object({
|
||||
type: z.literal(DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_AUDIT_TRAIL_UPDATED),
|
||||
data: ZGenericFromToSchema,
|
||||
});
|
||||
|
||||
/**
|
||||
* Event: Document global authentication access updated.
|
||||
*/
|
||||
@ -574,6 +586,8 @@ export const ZDocumentAuditLogSchema = ZDocumentAuditLogBaseSchema.and(
|
||||
ZDocumentAuditLogEventDocumentFieldUninsertedSchema,
|
||||
ZDocumentAuditLogEventDocumentFieldPrefilledSchema,
|
||||
ZDocumentAuditLogEventDocumentVisibilitySchema,
|
||||
ZDocumentAuditLogEventDocumentSigningCertificateUpdatedSchema,
|
||||
ZDocumentAuditLogEventDocumentAuditTrailUpdatedSchema,
|
||||
ZDocumentAuditLogEventDocumentGlobalAuthAccessUpdatedSchema,
|
||||
ZDocumentAuditLogEventDocumentGlobalAuthActionUpdatedSchema,
|
||||
ZDocumentAuditLogEventDocumentMetaUpdatedSchema,
|
||||
|
||||
@ -18,6 +18,8 @@ import { ZRecipientLiteSchema } from './recipient';
|
||||
*/
|
||||
export const ZDocumentSchema = DocumentSchema.pick({
|
||||
visibility: true,
|
||||
includeSigningCertificate: true,
|
||||
includeAuditTrailLog: true,
|
||||
status: true,
|
||||
source: true,
|
||||
id: true,
|
||||
@ -82,6 +84,8 @@ export const ZDocumentLiteSchema = DocumentSchema.pick({
|
||||
deletedAt: true,
|
||||
teamId: true,
|
||||
templateId: true,
|
||||
includeSigningCertificate: true,
|
||||
includeAuditTrailLog: true,
|
||||
});
|
||||
|
||||
/**
|
||||
@ -104,6 +108,8 @@ export const ZDocumentManySchema = DocumentSchema.pick({
|
||||
deletedAt: true,
|
||||
teamId: true,
|
||||
templateId: true,
|
||||
includeSigningCertificate: true,
|
||||
includeAuditTrailLog: true,
|
||||
}).extend({
|
||||
user: UserSchema.pick({
|
||||
id: true,
|
||||
|
||||
@ -322,6 +322,14 @@ export const formatDocumentAuditLogAction = (
|
||||
anonymous: msg`Document visibility updated`,
|
||||
identified: msg`${prefix} updated the document visibility`,
|
||||
}))
|
||||
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_SIGNING_CERTIFICATE_UPDATED }, () => ({
|
||||
anonymous: msg`Document signing certificate updated`,
|
||||
identified: msg`${prefix} updated the document signing certificate`,
|
||||
}))
|
||||
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_AUDIT_TRAIL_UPDATED }, () => ({
|
||||
anonymous: msg`Document audit trail updated`,
|
||||
identified: msg`${prefix} updated the document audit trail`,
|
||||
}))
|
||||
.with({ type: DOCUMENT_AUDIT_LOG_TYPE.DOCUMENT_GLOBAL_AUTH_ACCESS_UPDATED }, () => ({
|
||||
anonymous: msg`Document access auth updated`,
|
||||
identified: msg`${prefix} updated the document access auth requirements`,
|
||||
|
||||
Reference in New Issue
Block a user