diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
index 0a8630125..5f73f8c62 100644
--- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
+++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
@@ -3,7 +3,7 @@ import fs from 'node:fs';
import axios from 'axios';
import { pdflibAddPlaceholder } from './customSignPdf/pdflibplaceholder.min.js';
import { PDFDocument } from 'pdf-lib';
-import { saveFileUsage } from '../../../Utils.js';
+import { replaceMailVaribles, saveFileUsage } from '../../../Utils.js';
import GenerateCertificate from './GenerateCertificate.js';
const serverUrl = process.env.SERVER_URL,
APPID = process.env.APP_ID,
@@ -20,18 +20,18 @@ async function uploadFile(e, a) {
}
async function updateDoc(t, s, r, i, o, n) {
try {
- var d = {
+ var l = {
UserPtr: { __type: 'Pointer', className: n, objectId: r },
SignedUrl: s,
Activity: 'Signed',
ipAddress: i,
};
let e;
- var l = (e = o.AuditTrail && 0 < o.AuditTrail.length ? [...o.AuditTrail, d] : [d]).filter(
+ var d = (e = o.AuditTrail && 0 < o.AuditTrail.length ? [...o.AuditTrail, l] : [l]).filter(
e => 'Signed' === e.Activity
);
let a = !1;
- !((o.Signers && 0 < o.Signers.length && l.length !== o.Signers.length) || !(a = !0));
+ !((o.Signers && 0 < o.Signers.length && d.length !== o.Signers.length) || !(a = !0));
var c = { SignedUrl: s, AuditTrail: e, IsCompleted: a };
await axios.put(serverUrl + '/classes/contracts_Document/' + t, c, {
headers: {
@@ -47,23 +47,62 @@ async function updateDoc(t, s, r, i, o, n) {
}
async function sendCompletedMail(e) {
var a = e.url,
- t = e.sender,
- s = e.pdfName,
- r = e.receiver,
- e = {
- extUserId: e.extUserId,
- url: a,
- from: 'OpenSign™',
- recipient: r,
- subject: `Document ${s} has been signed by all parties`,
- pdfName: s,
- html:
- "
Document sign successfully
All parties have successfully signed the document" +
- s +
- '. Kindly download the document from the attachment.
This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender ' +
- t.Mail +
- ' directly. If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.
',
- };
+ t = e.doc,
+ s = e.doc.ExtUserPtr,
+ r = t.Name,
+ i = s.Email;
+ let o = `Document "${r}" has been signed by all parties`,
+ n =
+ " Document signed successfully
All parties have successfully signed the document " +
+ `"${r}"` +
+ '. Kindly download the document from the attachment.
This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender ' +
+ s.Email +
+ ' directly. If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.
';
+ if (e?.isCustomMail)
+ try {
+ var l,
+ d,
+ c,
+ p,
+ m,
+ g = new Parse.Query('partners_Tenant');
+ g.equalTo('UserId', { __type: 'Pointer', className: '_User', objectId: s.UserId.objectId });
+ const u = await g.first();
+ u &&
+ ((l = JSON.parse(JSON.stringify(u)))?.CompletionSubject && (o = l?.CompletionSubject),
+ l?.CompletionBody && (n = l?.CompletionBody),
+ (d = t.ExpiryDate.iso),
+ (c = new Date(d).toLocaleDateString('en-US', {
+ day: 'numeric',
+ month: 'long',
+ year: 'numeric',
+ })),
+ (p = {
+ document_title: r,
+ sender_name: s.Name,
+ sender_mail: s.Email,
+ sender_phone: s.Phone,
+ receiver_name: s.Name,
+ receiver_email: s.Email,
+ receiver_phone: s.Phone,
+ expiry_date: c,
+ company_name: s.Company,
+ }),
+ (m = replaceMailVaribles(o, n, p)),
+ (o = m.subject),
+ (n = m.body));
+ } catch (e) {
+ console.log('error in fetch tenant in signpdf', e.message);
+ }
+ e = {
+ extUserId: s.objectId,
+ url: a,
+ from: 'OpenSign™',
+ recipient: i,
+ subject: o,
+ pdfName: r,
+ html: n,
+ };
await axios.post(serverUrl + '/functions/sendmailv3', e, {
headers: {
'Content-Type': 'application/json',
@@ -134,6 +173,7 @@ async function PDF(o) {
try {
var n = o.params.docId,
e = o.params.userId,
+ l = o.params.isCustomCompletionMail,
d = await axios.get(
serverUrl + '/classes/contracts_Document/' + n + '?include=ExtUserPtr,Signers',
{
@@ -144,33 +184,33 @@ async function PDF(o) {
},
}
),
- l = await axios.get(serverUrl + '/users/me', {
+ c = await axios.get(serverUrl + '/users/me', {
headers: {
'X-Parse-Application-Id': APPID,
'X-Parse-Session-Token': o.headers.sessiontoken,
},
});
- if (!l.data || !l.data.objectId) return { status: 'error', message: 'This user not allowed!' };
+ if (!c.data || !c.data.objectId) return { status: 'error', message: 'This user not allowed!' };
{
var a,
t,
s,
- c = JSON.stringify({ objectId: e });
+ p = JSON.stringify({ objectId: e });
let r, i;
i = e
- ? (a = await axios.get(serverUrl + '/classes/contracts_Contactbook?where=' + c, {
+ ? (a = await axios.get(serverUrl + '/classes/contracts_Contactbook?where=' + p, {
headers: {
'X-Parse-Application-Id': APPID,
'X-Parse-Session-Token': o.headers.sessiontoken,
},
})).data && 0 < a.data.results.length
? ((r = a), 'contracts_Contactbook')
- : ((r = await axios.get(serverUrl + '/classes/contracts_Users?where=' + c, {
+ : ((r = await axios.get(serverUrl + '/classes/contracts_Users?where=' + p, {
headers: { 'X-Parse-Application-Id': APPID, 'X-Parse-Master-Key': masterKEY },
})),
'contracts_Users')
: ((t = JSON.stringify({
- UserId: { __type: 'Pointer', className: '_User', objectId: l.data.objectId },
+ UserId: { __type: 'Pointer', className: '_User', objectId: c.data.objectId },
})),
(s = await axios.get(serverUrl + '/classes/contracts_Users?where=' + t, {
headers: { 'X-Parse-Application-Id': APPID, 'X-Parse-Master-Key': masterKEY },
@@ -183,13 +223,13 @@ async function PDF(o) {
},
})),
'contracts_Contactbook'));
- var p = r.data.results[0].Name,
- m = r.data.results[0].Email;
+ var m = r.data.results[0].Name,
+ g = r.data.results[0].Email;
if (!o.params.pdfFile) return { status: 'error', message: 'Pdf file not present!' };
{
let e = Buffer.from(o.params.pdfFile, 'base64');
- var g = process.env.PFX_BASE64,
- u = Buffer.from(g, 'base64'),
+ var u = process.env.PFX_BASE64,
+ h = Buffer.from(u, 'base64'),
f = {
UserPtr: { __type: 'Pointer', className: i, objectId: r.data.results[0].objectId },
SignedUrl: '',
@@ -197,104 +237,96 @@ async function PDF(o) {
ipAddress: o.headers['x-real-ip'],
};
let a;
- var h = (a =
+ var P = (a =
d.data.AuditTrail && 0 < d.data.AuditTrail.length
? [...d.data.AuditTrail, f]
: [f]).filter(e => 'Signed' === e.Activity);
let t = !1;
!(
- (d.data.Signers && 0 < d.data.Signers.length && h.length !== d.data.Signers.length) ||
+ (d.data.Signers && 0 < d.data.Signers.length && P.length !== d.data.Signers.length) ||
!(t = !0)
);
- var P,
- y,
+ var y,
+ b,
v,
U,
- b,
I,
- w = `exported_file_${Math.floor(5e3 * Math.random())}.pdf`,
- A = './exports/' + w;
+ w,
+ D = `exported_file_${Math.floor(5e3 * Math.random())}.pdf`,
+ S = './exports/' + D;
let s = e.length;
s = (
t
- ? ((P = d.data.Signers?.map(e => e.Name + ' <' + e.Email + '>')),
+ ? ((y = d.data.Signers?.map(e => e.Name + ' <' + e.Email + '>')),
(e =
- P && 0 < P.length
- ? ((y = await PDFDocument.load(e)),
+ y && 0 < y.length
+ ? ((b = await PDFDocument.load(e)),
pdflibAddPlaceholder({
- pdfDoc: y,
- reason: 'Digitally signed by OpenSign for ' + P?.join(', '),
+ pdfDoc: b,
+ reason: 'Digitally signed by OpenSign for ' + y?.join(', '),
location: 'n/a',
signatureLength: 15e3,
}),
- (v = await y.save()),
+ (v = await b.save()),
Buffer.from(v))
: ((U = await PDFDocument.load(e)),
pdflibAddPlaceholder({
pdfDoc: U,
- reason: 'Digitally signed by OpenSign for ' + p + ' <' + m + '>',
+ reason: 'Digitally signed by OpenSign for ' + m + ' <' + g + '>',
location: 'n/a',
signatureLength: 15e3,
}),
- (b = await U.save()),
- Buffer.from(b))),
- (I = await new SignPDF(e, u).signPDF()),
- fs.writeFileSync(A, I),
- I)
- : (fs.writeFileSync(A, e), e)
+ (I = await U.save()),
+ Buffer.from(I))),
+ (w = await new SignPDF(e, h).signPDF()),
+ fs.writeFileSync(S, w),
+ w)
+ : (fs.writeFileSync(S, e), e)
).length;
- var D,
- S,
+ var _,
+ A,
x,
E,
- _,
j,
k,
F,
+ C,
T,
- N,
- C = await uploadFile(w, A);
- if (C && C.imageUrl)
+ N = await uploadFile(D, S);
+ if (N && N.imageUrl)
return (
- (D = await updateDoc(
+ (_ = await updateDoc(
o.params.docId,
- C.imageUrl,
+ N.imageUrl,
r.data.results[0].objectId,
o.headers['x-real-ip'],
d.data,
i
)),
- sendDoctoWebhook(d, C.imageUrl, 'signed', r?.data.results?.[0]),
- saveFileUsage(s, C.imageUrl, l.data.objectId),
- D &&
- D.isCompleted &&
- ((S = {
- url: C.imageUrl,
- sender: { Mail: d.data.ExtUserPtr.Email, Name: 'OpenSign™' },
- pdfName: d.data.Name,
- receiver: d.data.ExtUserPtr.Email,
- extUserId: d.data.ExtUserPtr.objectId,
- }),
- (x = { ...d.data, AuditTrail: D.AuditTrail }),
- (E = await GenerateCertificate(x)),
- (_ = await PDFDocument.load(E)),
+ sendDoctoWebhook(d, N.imageUrl, 'signed', r?.data.results?.[0]),
+ saveFileUsage(s, N.imageUrl, c.data.objectId),
+ _ &&
+ _.isCompleted &&
+ ((A = { ...d.data, AuditTrail: _.AuditTrail }),
+ (x = await GenerateCertificate(A)),
+ (E = await PDFDocument.load(x)),
pdflibAddPlaceholder({
- pdfDoc: _,
+ pdfDoc: E,
reason: 'Digitally signed by OpenSign.',
location: 'n/a',
signatureLength: 15e3,
}),
- (j = await _.save()),
+ (j = await E.save()),
(k = Buffer.from(j)),
- (F = await new SignPDF(k, u).signPDF()),
+ (F = await new SignPDF(k, h).signPDF()),
fs.writeFileSync('./exports/certificate.pdf', F),
- (N = {
- CertificateUrl: (T = await uploadFile(
+ (T = {
+ CertificateUrl: (C = await uploadFile(
'certificate.pdf',
'./exports/certificate.pdf'
)).imageUrl,
}),
- await axios.put(serverUrl + '/classes/contracts_Document/' + n, N, {
+ await axios.put(serverUrl + '/classes/contracts_Document/' + n, T, {
headers: {
'Content-Type': 'application/json',
'X-Parse-Application-Id': APPID,
@@ -303,13 +335,13 @@ async function PDF(o) {
}),
d.data.IsSendMail && !1 === d.data.IsSendMail
? console.log("don't send mail")
- : sendCompletedMail(S),
- saveFileUsage(k.length, T.imageUrl, l.data.objectId),
- sendDoctoWebhook(d, C.imageUrl, 'completed')),
- fs.unlinkSync(A),
- console.log('New Signed PDF created called: ' + A),
- 'success' === D.message
- ? { status: 'success', data: C.imageUrl }
+ : sendCompletedMail({ url: N.imageUrl, isCustomMail: l, doc: d.data }),
+ saveFileUsage(k.length, C.imageUrl, c.data.objectId),
+ sendDoctoWebhook(d, N.imageUrl, 'completed')),
+ fs.unlinkSync(S),
+ console.log('New Signed PDF created called: ' + S),
+ 'success' === _.message
+ ? { status: 'success', data: N.imageUrl }
: { status: 'error', message: 'Please provide required parameters!' }
);
}