Merge pull request #937 from nxglabs/tenant_mailtemplate

fix: if user not provide default value use it from template in createdocument from template API
This commit is contained in:
nxglabs
2025-07-03 16:04:35 +00:00
parent 4a5b35e147
commit 71b9bd6367
45 changed files with 2147 additions and 1067 deletions
@@ -92,7 +92,7 @@ async function AuthLoginAsMail(request) {
} catch (err) {
console.log('err in Auth');
console.log(err);
return 'Result not found', err;
return 'Result not found';
}
}
export default AuthLoginAsMail;
@@ -84,7 +84,7 @@ async function sendMail(document, publicUrl) {
};
let params = {
extUserId: document.ExtUserPtr.objectId,
recipient: objectId ? existSigner?.Email : signerMail[i].email,
recipient: existSigner?.Email || signerMail[i].email,
subject: replaceVar?.subject ? replaceVar?.subject : mailTemplate(mailparam).subject,
from: document.ExtUserPtr.Email,
replyto: senderEmail || '',
@@ -1,25 +1,5 @@
// `saveRoleContact` is used to save user in contracts_Guest role and create contact
const saveRoleContact = async contact => {
try {
const Role = new Parse.Query(Parse.Role);
const guestRole = await Role.equalTo('name', 'contracts_Guest').first();
if (guestRole) {
// Check if the user is already in the role
const relation = guestRole.relation('users');
const usersInRoleQuery = relation.query();
usersInRoleQuery.equalTo('objectId', contact.UserId.objectId);
const usersInRole = await usersInRoleQuery.find();
if (usersInRole.length > 0) {
console.log('User already added to Guest role.');
} else {
relation.add({ __type: 'Pointer', className: '_User', id: contact.UserId.objectId });
await guestRole.save(null, { useMasterKey: true });
// console.log('User added to Guest role successfully.');
}
}
} catch (err) {
console.log('err in role save', err);
}
const contactQuery = new Parse.Object('contracts_Contactbook');
contactQuery.set('Name', contact.Name);
contactQuery.set('Email', contact.Email);
@@ -59,6 +59,7 @@ export default async function saveAsTemplate(request) {
options: {
...p.options,
status: 'required',
...(p?.options?.defaultValue ? { defaultValue: '' } : {}),
},
})),
}));
@@ -73,10 +74,28 @@ export default async function saveAsTemplate(request) {
};
templateCls.set('Placeholders', [placeHolders]);
} else {
const placeHolders = _docRes?.Placeholders?.map((x, i) => {
const email = x.email ? { email: '' } : {};
return { ...x, signerObjId: '', signerPtr: {}, Role: 'Role ' + (i + 1), ...email };
});
const placeHolders = _docRes?.Placeholders.map((signer, signerIndex) => ({
// copy everything else, then overwrite these fields:
...signer,
signerObjId: '',
signerPtr: {},
Role: `Role ${signerIndex + 1}`,
email: '',
// rebuild placeHolder/pages
placeHolder: (signer.placeHolder || []).map(page => ({
...page,
pos: (page.pos || []).map(widget => {
// if there is a defaultValue in options, zero it out
if (widget.options && widget.options.defaultValue !== undefined) {
return { ...widget, options: { ...widget.options, defaultValue: '' } }; // reset only the value
}
// otherwise, return the widget unchanged
return widget;
}),
})),
}));
templateCls.set('Placeholders', placeHolders);
}
}
@@ -38,7 +38,6 @@ const makeEmail = async (
replyto,
testPdf
) => {
const publicUrl = new URL(process.env.SERVER_URL);
const htmlContent = html;
const boundary = 'boundary_' + Date.now().toString(16);
const bccHeader = bcc && bcc.length > 0 ? `BCC: ${bcc.join(',')}\n` : ''; // Construct BCC header if provided
@@ -8,12 +8,15 @@ export default async function updateTenant(request) {
if (!request.user) {
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'unauthorized');
}
const validKeys = ['CompletionBody', 'CompletionSubject', 'RequestBody', 'RequestSubject'];
try {
const tenant = new Parse.Object('partners_Tenant');
tenant.id = tenantId;
// Update tenant details
Object.keys(details).forEach(key => {
tenant.set(key, details?.[key]);
if (validKeys.includes(key)) {
tenant.set(key, details?.[key]);
}
});
const tenantRes = await tenant.save(null, { useMasterKey: true });