mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-18 05:35:50 +02:00
feat: create duplicate template functionality feat: add support of csv and xlsx for bulk contacts import feat: add info text for forms and dashboard button feat: implement functionality to delete a PDF page while editing the document feat: show completed documents in which signers included but not owner in completed reports feat: add delete folder button in opensign drive feat: introduce Bcc email support for sending completed documents feat: allow merging multiple pdf while drafting document and template feat: add 'My Initials' tab for auto-signing in request-sign flow feat: add support for redirect URL to navigate after document completion feat: introduce privacy policy and digital signature terms before signing documents. feat: add feature to allow adding new pages to existing document feat: add save signature, initials, stamp functionality in sign pad for logged in user feat: add preferences menu feat: add save custom email template, notifyonsignature, set timezone, allow signature types in preferences feat: secure local url feat: implement Italian language translation feat: implement German language translation feat: update menu name from report to documents and shift contactbook in main menu feat: provide edit contact functionality fix: unable to delete folder when all its documents are deleted fix: fields.push is not function fix: document loading issue in opensign drive fix: adjust the guest signature flow to display the document in full screen, eliminating any blank space which is displayed below the place holder in mobile view fix: resolve issue of instance of pdfdict or pdfstream but got undefined build(deps): update dependencies refactor: change note text from add contact form
108 lines
3.7 KiB
JavaScript
108 lines
3.7 KiB
JavaScript
export default async function TemplateAfterSave(request) {
|
|
try {
|
|
if (!request.original) {
|
|
console.log('new entry is insert in contracts_Template');
|
|
// update acl of New Document If There are signers present in array
|
|
const signers = request.object.get('Signers');
|
|
const AutoReminder = request?.object?.get('AutomaticReminders') || false;
|
|
const ip = request?.headers?.['x-real-ip'] || '';
|
|
const originIp = request?.object?.get('OriginIp') || '';
|
|
if (AutoReminder) {
|
|
const RemindOnceInEvery = request?.object?.get('RemindOnceInEvery') || 5;
|
|
const ReminderDate = new Date(request?.object?.get('createdAt'));
|
|
ReminderDate.setDate(ReminderDate.getDate() + RemindOnceInEvery);
|
|
request.object.set('NextReminderDate', ReminderDate);
|
|
}
|
|
if (!originIp) {
|
|
request.object.set('OriginIp', ip);
|
|
}
|
|
await request.object.save(null, { useMasterKey: true });
|
|
if (signers && signers.length > 0) {
|
|
await updateAclDoc(request.object.id);
|
|
} else {
|
|
if (request?.object?.id && request?.user) {
|
|
await updateSelfDoc(request.object.id);
|
|
}
|
|
}
|
|
} else {
|
|
if (request?.user) {
|
|
const signers = request.object.get('Signers');
|
|
if (signers && signers.length > 0) {
|
|
await updateAclDoc(request.object.id);
|
|
} else {
|
|
if (request?.object?.id) {
|
|
await updateSelfDoc(request.object.id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
console.log('err in aftersave of contracts_Template');
|
|
console.log(err);
|
|
}
|
|
|
|
async function updateAclDoc(objId) {
|
|
// console.log("In side updateAclDoc func")
|
|
// console.log(objId)
|
|
const Query = new Parse.Query('contracts_Template');
|
|
Query.include('Signers');
|
|
Query.include('CreatedBy');
|
|
Query.include('ExtUserPtr.TenantId');
|
|
const updateACL = await Query.get(objId, { useMasterKey: true });
|
|
const res = JSON.parse(JSON.stringify(updateACL));
|
|
// console.log("res");
|
|
// console.log(JSON.stringify(res));
|
|
const UsersPtr = res.Signers.map(item => item.UserId);
|
|
|
|
if (res.Signers[0].ExtUserPtr) {
|
|
const ExtUserSigners = res.Signers.map(item => {
|
|
return {
|
|
__type: 'Pointer',
|
|
className: 'contracts_Users',
|
|
objectId: item.ExtUserPtr.objectId,
|
|
};
|
|
});
|
|
updateACL.set('Signers', ExtUserSigners);
|
|
}
|
|
|
|
// console.log("UsersPtr")
|
|
// console.log(JSON.stringify(UsersPtr))
|
|
const newACL = new Parse.ACL();
|
|
newACL.setPublicReadAccess(false);
|
|
newACL.setPublicWriteAccess(false);
|
|
if (res?.CreatedBy) {
|
|
newACL.setReadAccess(res?.CreatedBy?.objectId, true);
|
|
newACL.setWriteAccess(res?.CreatedBy?.objectId, true);
|
|
}
|
|
|
|
UsersPtr.forEach(x => {
|
|
newACL.setReadAccess(x.objectId, true);
|
|
newACL.setWriteAccess(x.objectId, true);
|
|
});
|
|
|
|
updateACL.setACL(newACL);
|
|
updateACL.save(null, { useMasterKey: true });
|
|
}
|
|
|
|
async function updateSelfDoc(objId) {
|
|
// console.log("Inside updateSelfDoc func")
|
|
|
|
const Query = new Parse.Query('contracts_Template');
|
|
Query.include('CreatedBy');
|
|
Query.include('ExtUserPtr.TenantId');
|
|
const updateACL = await Query.get(objId, { useMasterKey: true });
|
|
const res = JSON.parse(JSON.stringify(updateACL));
|
|
// console.log("res");
|
|
// console.log(JSON.stringify(res));
|
|
const newACL = new Parse.ACL();
|
|
newACL.setPublicReadAccess(false);
|
|
newACL.setPublicWriteAccess(false);
|
|
if (res?.CreatedBy) {
|
|
newACL.setReadAccess(res?.CreatedBy?.objectId, true);
|
|
newACL.setWriteAccess(res?.CreatedBy?.objectId, true);
|
|
}
|
|
updateACL.setACL(newACL);
|
|
updateACL.save(null, { useMasterKey: true });
|
|
}
|
|
}
|