mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-17 21:25:54 +02:00
96 lines
4.4 KiB
JavaScript
96 lines
4.4 KiB
JavaScript
import axios from 'axios';
|
|
import { appName, cloudServerUrl, serverAppId } from '../../Utils.js';
|
|
const serverUrl = cloudServerUrl;
|
|
const APPID = serverAppId;
|
|
const masterKEY = process.env.MASTER_KEY;
|
|
const headers = {
|
|
'Content-Type': 'application/json',
|
|
'X-Parse-Application-Id': APPID,
|
|
'X-Parse-Master-Key': masterKEY,
|
|
};
|
|
|
|
async function sendDeclineMail(doc, publicUrl, userId, reason) {
|
|
try {
|
|
const TenantAppName = appName;
|
|
const logo =
|
|
"<img src='https://qikinnovation.ams3.digitaloceanspaces.com/logo.png' height='50' style='padding:20px'/>";
|
|
const opurl = ` <a href='mailto:complaint@opensiglabs.com' target=_blank>here</a>`;
|
|
const removePrefill =
|
|
doc?.Placeholders?.length > 0 && doc?.Placeholders?.filter(x => x?.Role !== 'prefill');
|
|
const signUser =
|
|
removePrefill?.length > 0 &&
|
|
removePrefill?.find(x => x?.signerPtr?.UserId?.objectId === userId);
|
|
|
|
const sender = doc.ExtUserPtr;
|
|
const pdfName = doc.Name;
|
|
const creatorName = doc.ExtUserPtr.Name;
|
|
const creatorEmail = doc.ExtUserPtr.Email;
|
|
const signerName = signUser?.signerPtr?.Name || '';
|
|
const signerEmail = signUser?.signerPtr?.Email || signUser?.email || '';
|
|
const viewDocUrl = `${publicUrl}/recipientSignPdf/${doc.objectId}`;
|
|
const subject = `Document "${pdfName}" has been declined by ${signerName}`;
|
|
const body =
|
|
"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/></head><body><div style='background-color:#f5f5f5;padding:20px'><div style='background-color:white'>" +
|
|
`<div>${logo}</div><div style='padding:2px;font-family:system-ui;background-color:#47a3ad'><p style='font-size:20px;font-weight:400;color:white;padding-left:20px'>Document declined by ${signerName}</p>` +
|
|
`</div><div style='padding:20px;font-family:system-ui;font-size:14px'><p>Dear ${creatorName},</p>` +
|
|
`<p>${pdfName} has been declined by ${signerName} "${signerEmail}" on ${new Date().toLocaleDateString()}.</p>` +
|
|
`<p>Decline Reason: ${reason || 'Not specified'}</p>` +
|
|
`<p><a href=${viewDocUrl} target=_blank>View Document</a></p></div></div><div><p>This is an automated email from ${TenantAppName}. For any queries regarding this email, ` +
|
|
`please contact the sender ${creatorEmail} directly. If you think this email is inappropriate or spam, you may file a complaints with ${TenantAppName}${opurl}.</p></div></div></body></html>`;
|
|
|
|
const params = {
|
|
extUserId: sender.objectId,
|
|
from: TenantAppName,
|
|
recipient: creatorEmail,
|
|
subject: subject,
|
|
pdfName: pdfName,
|
|
html: body,
|
|
};
|
|
await axios.post(serverUrl + '/functions/sendmailv3', params, { headers });
|
|
} catch (err) {
|
|
console.log('err in sendnotifymail', err);
|
|
}
|
|
}
|
|
export default async function declinedocument(request) {
|
|
const docId = request.params.docId;
|
|
const reason = request.params?.reason || '';
|
|
const userId = request.params.userId;
|
|
const declineBy = { __type: 'Pointer', className: '_User', objectId: userId };
|
|
const publicUrl = request.headers.public_url;
|
|
if (!docId) {
|
|
throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'missing parameter docId.');
|
|
}
|
|
try {
|
|
const docCls = new Parse.Query('contracts_Document');
|
|
docCls.include('ExtUserPtr.TenantId,Placeholders.signerPtr,Signers');
|
|
const updateDoc = await docCls.get(docId, { useMasterKey: true });
|
|
if (updateDoc) {
|
|
const _doc = JSON.parse(JSON.stringify(updateDoc));
|
|
const isEnableOTP = updateDoc?.get('IsEnableOTP') || false;
|
|
if (!isEnableOTP) {
|
|
updateDoc.set('IsDeclined', true);
|
|
updateDoc.set('DeclineReason', reason);
|
|
updateDoc.set('DeclineBy', declineBy);
|
|
await updateDoc.save(null, { useMasterKey: true });
|
|
sendDeclineMail(_doc, publicUrl, userId, reason);
|
|
return 'document declined';
|
|
} else {
|
|
if (!request?.user) {
|
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
|
}
|
|
updateDoc.set('IsDeclined', true);
|
|
updateDoc.set('DeclineReason', reason);
|
|
updateDoc.set('DeclineBy', declineBy);
|
|
await updateDoc.save(null, { useMasterKey: true });
|
|
sendDeclineMail(_doc, publicUrl, userId, reason);
|
|
return 'document declined';
|
|
}
|
|
} else {
|
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Document not found.');
|
|
}
|
|
} catch (err) {
|
|
console.log('err while decling doc', err);
|
|
throw err;
|
|
}
|
|
}
|