diff --git a/apps/OpenSign/src/components/BulkSendUi.js b/apps/OpenSign/src/components/BulkSendUi.js index 039f43c39..ee93c505a 100644 --- a/apps/OpenSign/src/components/BulkSendUi.js +++ b/apps/OpenSign/src/components/BulkSendUi.js @@ -118,8 +118,8 @@ const BulkSendUi = (props) => { // Push a new document object with updated Placeholders into the Documents array Documents.push({ ...props.item, Placeholders: updatedPlaceholders }); }); - console.log("Documents ", Documents); - // await batchQuery(Documents); + // console.log("Documents ", Documents); + await batchQuery(Documents); }; const batchQuery = async (Documents) => { diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index cff85d595..6b7b12145 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -632,11 +632,27 @@ const ReportTable = (props) => { } }; - const handleBulkSend = (template) => { - if (template?.Placeholders?.length > 0) { - setPlaceholders(template?.Placeholders); - setTemplateDetails(template); - setIsBulkSend({ [template.objectId]: true }); + const handleBulkSend = async (template) => { + const params = { + templateId: template.objectId, + include: ["Placeholders.signerPtr"] + }; + const axiosRes = await axios.post( + `${localStorage.getItem("baseUrl")}functions/getTemplate`, + params, + { + headers: { + "Content-Type": "application/json", + "X-Parse-Application-Id": localStorage.getItem("parseAppId"), + sessionToken: localStorage.getItem("accesstoken") + } + } + ); + const templateRes = axiosRes.data && axiosRes.data.result; + if (templateRes?.Placeholders?.length > 0) { + setPlaceholders(templateRes?.Placeholders); + setTemplateDetails(templateRes); + setIsBulkSend({ [templateRes.objectId]: true }); } else { setIsDocErr(true); } diff --git a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js index 7b9ef2f61..1fb8e783e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js +++ b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js @@ -33,7 +33,7 @@ async function sendMail(document, sessionToken) { if (objectId) { encodeBase64 = btoa(`${document.objectId}}/${signerMail[i].signerPtr.Email}/${objectId}`); } else { - encodeBase64 = btoa(`${document.objectId}}/${signerMail[i].email}/${objectId}`); + encodeBase64 = btoa(`${document.objectId}}/${signerMail[i].email}`); } let signPdf = `${hostUrl}/login/${encodeBase64}`; const openSignUrl = 'https://www.opensignlabs.com/'; @@ -80,7 +80,7 @@ export default async function createBatchDocs(request) { const strDocuments = request.params.Documents; const sessionToken = request.headers['sessiontoken']; const Documents = JSON.parse(strDocuments); - + const Ip = request?.headers?.['x-real-ip'] || ''; // console.log('Documents ', Documents); const parseConfig = { baseURL: serverUrl, //localStorage.getItem('baseUrl'), @@ -91,51 +91,79 @@ export default async function createBatchDocs(request) { }, }; try { - const requests = Documents.map(x => ({ - method: 'POST', - path: '/app/classes/contracts_Document', - body: { - Name: x.Name, - URL: x.URL, - Note: x.Note, - Description: x.Description, - CreatedBy: x.CreatedBy, - ExtUserPtr: { - __type: 'Pointer', - className: x.ExtUserPtr.className, - objectId: x.ExtUserPtr.objectId, + const requests = Documents.map(x => { + const Signers = x.Signers; + const allSigner = x?.Placeholders?.map(item => { + const signer = Signers?.find(e => item?.signerPtr?.objectId === e?.objectId); + if (signer) { + return signer; + } else { + return item?.signerPtr?.objectId && item?.signerPtr; + } + }); + const date = new Date(); + const isoDate = date.toISOString(); + let Acl = { [x.CreatedBy.objectId]: { read: true, write: true } }; + // console.log('allSigner ', allSigner); + if (allSigner && allSigner.length > 0) { + allSigner.forEach(x => { + const obj = { [x.CreatedBy.objectId]: { read: true, write: true } }; + Acl = { ...Acl, ...obj }; + }); + } + return { + method: 'POST', + path: '/app/classes/contracts_Document', + body: { + Name: x.Name, + URL: x.URL, + Note: x.Note, + Description: x.Description, + CreatedBy: x.CreatedBy, + SendinOrder: x.SendinOrder || true, + ExtUserPtr: { + __type: 'Pointer', + className: x.ExtUserPtr.className, + objectId: x.ExtUserPtr.objectId, + }, + Placeholders: x.Placeholders.map(y => + y?.signerPtr?.objectId + ? { + ...y, + signerPtr: { + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: y.signerPtr.objectId, + }, + signerObjId: y.signerObjId, + } + : { ...y, signerPtr: {}, signerObjId: '' } + ), + SignedUrl: x.URL || x.SignedUrl, + Signers: allSigner?.map(y => ({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: y.objectId, + })), + ACL: Acl, + RemindOnceInEvery: x.RemindOnceInEvery, + AutomaticReminders: x.AutomaticReminders || false, + TimeToCompleteDays: x.TimeToCompleteDays || 15, + OriginIp: Ip, + DocSentAt: { __type: 'Date', iso: isoDate }, }, - Placeholders: x.Placeholders.map(y => - y?.signerPtr?.objectId - ? { - ...y, - signerPtr: { - __type: 'Pointer', - className: y.signerPtr.className, - objectId: y.signerPtr.objectId, - }, - signerObjId: y.signerObjId, - } - : { ...y, signerPtr: {}, signerObjId: '' } - ), - SignedUrl: x.SignedUrl, - Signers: x.Signers.map(y => ({ - __type: 'Pointer', - className: y.className, - objectId: y.objectId, - })), - }, - })); + }; + }); // console.log('requests ', requests); const response = await axios.post('batch', { requests: requests }, parseConfig); // // Handle the batch query response - // console.log('Batch query response:', response.data) + // console.log('Batch query response:', response.data); if (response.data && response.data.length > 0) { const updateDocuments = Documents.map((x, i) => ({ ...x, objectId: response.data[i]?.success?.objectId, - createdAt: response.data[i]?.success.createdAt, + createdAt: response.data[i]?.success?.createdAt, })); for (let i = 0; i < updateDocuments.length; i++) { // console.log('updateDocuments ', updateDocuments);