From ca6b4e7d822adef66ec48edde696622c66689395 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Sat, 16 Dec 2023 22:19:12 +0530 Subject: [PATCH] add createDocument from template functionality --- apps/OpenSign/public/version.txt | 2 +- apps/OpenSignServer/cloud/main.js | 2 + .../cloud/parsefunction/GetTemplate.js | 46 ++++++++++++++ .../cloud/parsefunction/getDocument.js | 2 +- .../SignDocuments/src/utils/Utils.js | 61 ++++++++++++++++++- 5 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 apps/OpenSignServer/cloud/parsefunction/GetTemplate.js diff --git a/apps/OpenSign/public/version.txt b/apps/OpenSign/public/version.txt index 3e82ea442..565fe9c82 100644 --- a/apps/OpenSign/public/version.txt +++ b/apps/OpenSign/public/version.txt @@ -1 +1 @@ -v1.0.5-beta +v1.0.7-beta diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js index ee8cac810..7532bc00d 100644 --- a/apps/OpenSignServer/cloud/main.js +++ b/apps/OpenSignServer/cloud/main.js @@ -18,6 +18,7 @@ import getDocument from './parsefunction/getDocument.js'; import getDrive from './parsefunction/getDrive.js'; import getReport from './parsefunction/getReport.js'; import TemplateAfterSave from './parsefunction/TemplateAfterSave.js'; +import GetTemplate from './parsefunction/GetTemplate.js'; Parse.Cloud.define('AddUserToRole', addUserToGroups); Parse.Cloud.define('UserGroups', getUserGroups); @@ -35,6 +36,7 @@ Parse.Cloud.define('getUserDetails', getUserDetails); Parse.Cloud.define('getDocument', getDocument); Parse.Cloud.define('getDrive', getDrive) Parse.Cloud.define('getReport', getReport) +Parse.Cloud.define("getTemplate", GetTemplate) Parse.Cloud.afterSave('contracts_Document', DocumentAftersave); Parse.Cloud.afterSave('contracts_Contactbook', ContactbookAftersave); Parse.Cloud.afterSave('contracts_Users', ContractUsersAftersave); diff --git a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js new file mode 100644 index 000000000..96b0a623a --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js @@ -0,0 +1,46 @@ +export default async function GetTemplate(request) { + const serverUrl = process.env.SERVER_URL; + const templateId = request.params.templateId; + + try { + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': process.env.APP_ID, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + const userId = userRes.data && userRes.data.objectId; + if (templateId && userId) { + try { + const template = new Parse.Query('contracts_Template'); + template.equalTo('objectId', templateId); + template.include('ExtUserPtr'); + template.include('Signers'); + template.include('CreateBy'); + const res = template.first({ useMasterKey: true }); + if (res) { + const acl = res.getACL(); + if (acl && acl.getReadAccess(userId)) { + return res; + } else { + return { error: "You don't have access of this document!" }; + } + } else { + return { error: "You don't have access of this document!" }; + } + } catch (err) { + console.log('err', err); + return err; + } + } else { + return { error: 'Please pass required parameters!' }; + } + } catch (err) { + console.log('err', err); + if (err.code == 209) { + return { error: 'Invalid session token' }; + } else { + return { error: "You don't have access of this document!" }; + } + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js index 9e4d71ff3..8666cafdf 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js @@ -40,7 +40,7 @@ export default async function getDocument(request) { return { error: 'Please pass required parameters!' }; } } catch (err) { - console.log('err'); + console.log('err', err); if (err.code == 209) { return { error: 'Invalid session token' }; } else { diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js index e5cd69857..5deab7dee 100644 --- a/microfrontends/SignDocuments/src/utils/Utils.js +++ b/microfrontends/SignDocuments/src/utils/Utils.js @@ -1002,4 +1002,63 @@ export const signPdfFun = async ( return response; }; -export const randomId = () => Math.floor(1000 + Math.random() * 9000); \ No newline at end of file +export const randomId = () => Math.floor(1000 + Math.random() * 9000); + +export const createDocument = async (template) => { + if (template && template.length > 0) { + const Doc = template[0]; + let signers; + console.log("Doc.Placholders ", Doc) + if (Doc.Signers && Doc.Signers.length > 0) { + signers = Doc.Signers.map((x) => ({ + __type: "Pointer", + className: "contracts_Contactbook", + objectId: x.objectId + })); + } else { + signers = []; + } + const data = { + Name: Doc.Name, + URL: Doc.URL, + SignedUrl: Doc.SignedUrl, + Description: Doc.Description, + Note: Doc.Note, + Placeholders: Doc.Placeholders, + ExtUserPtr: { + __type: "Pointer", + className: "contracts_Users", + objectId: Doc.ExtUserPtr.objectId + }, + CreatedBy: { + __type: "Pointer", + className: "_User", + objectId: Doc.CreatedBy.objectId + }, + Signers: signers + }; + + try { + const res = await axios.post( + `${localStorage.getItem("baseUrl")}classes/${localStorage.getItem( + "_appName" + )}_Document`, + data, + { + headers: { + "Content-Type": "application/json", + "X-Parse-Application-Id": localStorage.getItem("parseAppId"), + "X-Parse-Session-Token": localStorage.getItem("accesstoken") + } + } + ); + if (res) { + console.log("res", res); + return { status: "success", id: res.data.objectId }; + } + } catch (err) { + console.log("axois err ", err); + return { status: "error", id: "Something Went Wrong!" }; + } + } +};