From 9675e051bd17973274ef897f174e5224fc9f105b Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 3 Sep 2024 19:48:21 +0530 Subject: [PATCH 1/5] feat: display the email of the user who declined the document along with the decline reason in the document decline popup. --- .../public/locales/en/translation.json | 7 +++- .../public/locales/fr/translation.json | 5 ++- apps/OpenSign/src/constant/Utils.js | 2 +- apps/OpenSign/src/pages/PdfRequestFiles.js | 36 +++++++++++++++++-- .../cloud/parsefunction/getDocument.js | 1 + ...0628-update_contracts_document_cls_cjs.cjs | 31 ++++++++++++++++ 6 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 apps/OpenSignServer/databases/migrations/20240903170628-update_contracts_document_cls_cjs.cjs diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index ee282f354..66920942a 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -623,5 +623,10 @@ "generate-test-token":"Generate Test Token", "regenerate-test-token":"Regenerate Test Token", "help-test-token":"This token can be used to test the APIs at the https://sandbox.opensignlabs.com/api/v1 endpoint, allowing you to conduct unlimited document signatures. Please note that the sandbox API will sign your documents with self-signed certificates, which may not be recognized as valid by Adobe. Once you’ve completed your testing, you can upgrade to one of our paid plans to generate a production token.", - "help-api-token":"This token can be used to access the production APIs at the {{origin}}/api/v1 endpoint. It can only be generated on one of our paid plans." + "help-api-token":"This token can be used to access the production APIs at the {{origin}}/api/v1 endpoint. It can only be generated on one of our paid plans.", + "reason":"Reason", + "decline-by":"Declined/revoked by", + "document-declined": "Document declined" + + } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index 72a30b619..20cfae993 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -624,5 +624,8 @@ "generate-test-token": "Générer jeton de test", "regenerate-test-token":"Régénérer le jeton de test", "help-test-token":"Ce jeton peut être utilisé pour tester les API au niveau du point de terminaison https://sandbox.opensignlabs.com/api/v1, vous permettant ainsi d'effectuer un nombre illimité de signatures de documents. Veuillez noter que l'API sandbox signera vos documents avec des certificats auto-signés, qui peuvent ne pas être reconnus comme valides par Adobe. Une fois vos tests terminés, vous pouvez passer à l’un de nos forfaits payants pour générer un jeton de production.", - "help-api-token":"Ce jeton peut être utilisé pour accéder aux API de production au point de terminaison {{origin}}/api/v1. Il ne peut être généré que sur l'un de nos forfaits payants." + "help-api-token":"Ce jeton peut être utilisé pour accéder aux API de production au point de terminaison {{origin}}/api/v1. Il ne peut être généré que sur l'un de nos forfaits payants.", + "reason" :"Raison", + "decline-by" :"Refusé/révoqué par", + "document-declined":"document refusé" } diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 08b92c975..71f7aa69d 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -1411,7 +1411,7 @@ export const multiSignEmbed = async ( }; const color = position?.options?.fontColor; const updateColorInRgb = getWidgetsFontColor(color); - const fontSize = parseInt(position?.options?.fontSize); + const fontSize = parseInt(position?.options?.fontSize || 13); const widgetTypeExist = [ textWidget, textInputWidget, diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 3dacc088e..a7586ce60 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1213,7 +1213,15 @@ function PdfRequestFiles(props) { ); const jsonSender = JSON.parse(senderUser); setIsDecline({ isDeclined: false }); - const data = { IsDeclined: true, DeclineReason: reason }; + const data = { + IsDeclined: true, + DeclineReason: reason, + DeclineBy: { + __type: "Pointer", + className: "_User", + objectId: jsonSender?.objectId + } + }; setIsUiLoading(true); await axios @@ -1572,6 +1580,24 @@ function PdfRequestFiles(props) { const name = pdfDetails?.[0]?.Name; await fetchUrl(url, name); }; + const handleDeclineMssg = () => { + const user = pdfDetails[0]?.DeclineBy?.email; + return ( +
+ {t("decline-alert-3")} +
+ {" "} + {t("reason")} :{" "} + {pdfDetails[0]?.DeclineReason}{" "} +
+
+ {" "} + {t("decline-by")} : {user} +
+
+ ); + }; + console.log("signerpos", signerPos); return ( @@ -1659,13 +1685,17 @@ function PdfRequestFiles(props) { {/* this modal is used to show decline alert */} <PdfDeclineModal show={isDecline.isDeclined} - headMsg={t("document-decline")} + headMsg={ + pdfDetails[0]?.IsDeclined + ? t("document-declined") + : t("document-decline") + } bodyMssg={ isDecline.currnt === "Sure" ? t("decline-alert-1") : isDecline.currnt === "YouDeclined" ? t("decline-alert-2") - : isDecline.currnt === "another" && t("decline-alert-3") + : isDecline.currnt === "another" && handleDeclineMssg() } footerMessage={isDecline.currnt === "Sure"} declineDoc={declineDoc} diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js index c7b2d07d2..2773f1cf1 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js @@ -22,6 +22,7 @@ export default async function getDocument(request) { query.include('Signers'); query.include('AuditTrail.UserPtr'); query.include('Placeholders'); + query.include('DeclineBy'); query.notEqualTo('IsArchive', true); const res = await query.first({ useMasterKey: true }); if (res) { diff --git a/apps/OpenSignServer/databases/migrations/20240903170628-update_contracts_document_cls_cjs.cjs b/apps/OpenSignServer/databases/migrations/20240903170628-update_contracts_document_cls_cjs.cjs new file mode 100644 index 000000000..74adeda91 --- /dev/null +++ b/apps/OpenSignServer/databases/migrations/20240903170628-update_contracts_document_cls_cjs.cjs @@ -0,0 +1,31 @@ +/** + * + * @param {Parse} Parse + */ +exports.up = async Parse => { + // TODO: set className here + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.addPointer('DeclineBy', '_User'); + // TODO: Set the schema here + // Example: + // schema.addString('name').addNumber('cash'); + + return schema.update(); +}; + +/** + * + * @param {Parse} Parse + */ +exports.down = async Parse => { + // TODO: set className here + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.deleteField('DeclineBy'); + // TODO: Set the schema here + // Example: + // schema.deleteField('name').deleteField('cash'); + + return schema.update(); +}; From 03fc0b84cba1e5cc9f9dada5339733199eec4bad Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 3 Sep 2024 19:53:43 +0530 Subject: [PATCH 2/5] fix: remove console --- apps/OpenSign/src/pages/PdfRequestFiles.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index a57cd9813..411d9cb10 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1600,7 +1600,6 @@ function PdfRequestFiles(props) { </div> ); }; - console.log("signerpos", signerPos); return ( <DndProvider backend={HTML5Backend}> <Title title={props.templateId ? "Public Sign" : "Request Sign"} /> From d547e0552ae3bed9c04fb3b2bddd3f27898585fc Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 3 Sep 2024 20:11:14 +0530 Subject: [PATCH 3/5] fix: handle error --- apps/OpenSign/src/pages/PdfRequestFiles.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 411d9cb10..bdb577bd4 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1285,6 +1285,8 @@ function PdfRequestFiles(props) { }) .catch((err) => { console.log("error updating field is decline ", err); + setIsLoading({ isLoad: false }); + setHandleError(t("something-went-wrong-mssg")); }); }; //function to add default signature for all requested placeholder of sign From ab6c88bebd09b3b6391c5ac10b150a9619c88de5 Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 3 Sep 2024 20:23:54 +0530 Subject: [PATCH 4/5] feat: save declined by user details in-progress report --- apps/OpenSign/src/primitives/GetReportDisplay.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 9171b52a7..94e98f145 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -473,9 +473,21 @@ const ReportTable = (props) => { }; //function to handle revoke/decline docment const handleRevoke = async (item) => { + const senderUser = localStorage.getItem( + `Parse/${localStorage.getItem("parseAppId")}/currentUser` + ); + const jsonSender = JSON.parse(senderUser); setIsRevoke({}); setActLoader({ [`${item.objectId}`]: true }); - const data = { IsDeclined: true, DeclineReason: reason }; + const data = { + IsDeclined: true, + DeclineReason: reason, + DeclineBy: { + __type: "Pointer", + className: "_User", + objectId: jsonSender?.objectId + } + }; await axios .put( `${localStorage.getItem("baseUrl")}classes/contracts_Document/${ From 27eca2b470fc2c64bca8007cb3588f6c1a52e94f Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 3 Sep 2024 20:43:45 +0530 Subject: [PATCH 5/5] fix: add error iin alert --- apps/OpenSign/src/pages/PdfRequestFiles.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index bdb577bd4..833ce8616 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1285,8 +1285,8 @@ function PdfRequestFiles(props) { }) .catch((err) => { console.log("error updating field is decline ", err); - setIsLoading({ isLoad: false }); - setHandleError(t("something-went-wrong-mssg")); + setIsUiLoading(false); + alert(t("something-went-wrong-mssg")); }); }; //function to add default signature for all requested placeholder of sign