diff --git a/README.md b/README.md
index 3a5062026..1420d4cf5 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,10 @@
The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign | Smartwaiver | SignRequest | HelloSign | Zoho sign.
[](http://isitmaintained.com/project/opensignlabs/opensign "Average time to resolve an issue")
-
[](#contributors)
+
+
+
Website
•
@@ -23,12 +25,6 @@ The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign |
## An Open-Source Alternative to DocuSign, PandaDoc, SignNow, Adobe Sign, Smartwaiver, SignRequest, and HelloSign
-Support us -
-
-
-
-[](https://twitter.com/opensignlabs)
-
---
@@ -88,7 +84,7 @@ We welcome contributions from the open-source community. For more information on
### License
-OpenSign is licensed under the AGPL License. For more details, see the [LICENSE](LICENSE.md) file.
+OpenSign is licensed under the AGPL License. For more details, see the [LICENSE](LICENSE) file.
---
diff --git a/apps/OpenSign/src/components/dashboard/DashboardCard.js b/apps/OpenSign/src/components/dashboard/DashboardCard.js
index 0bf4fabaa..c51f7ba42 100644
--- a/apps/OpenSign/src/components/dashboard/DashboardCard.js
+++ b/apps/OpenSign/src/components/dashboard/DashboardCard.js
@@ -156,7 +156,35 @@ const DashboardCard = (props) => {
if (props.Data.key !== "count") {
setresponse(res.data.results[0][props.Data.key]);
} else {
- setresponse(res.data[props.Data.key]);
+ if (props.Label === "Need your Signature") {
+ const listData = res.data?.results.filter(
+ (x) => x.Signers.length > 0
+ );
+ let arr = [];
+ for (const obj of listData) {
+ const isSigner = obj.Signers.some(
+ (item) => item.UserId.objectId === currentUser.id
+ );
+ if (isSigner) {
+ let isRecord;
+ if (obj?.AuditTrail && obj?.AuditTrail.length > 0) {
+ isRecord = obj?.AuditTrail.some(
+ (item) =>
+ item?.UserPtr?.UserId?.objectId === currentUser.id &&
+ item.Activity === "Signed"
+ );
+ } else {
+ isRecord = false;
+ }
+ if (isRecord === false) {
+ arr.push(obj);
+ }
+ }
+ }
+ setresponse(arr.length);
+ } else {
+ setresponse(res.data[props.Data.key]);
+ }
}
} else {
setresponse(0);
diff --git a/apps/OpenSign/src/components/dashboard/DashboardReport.js b/apps/OpenSign/src/components/dashboard/DashboardReport.js
index a23f20b15..4a0575f14 100644
--- a/apps/OpenSign/src/components/dashboard/DashboardReport.js
+++ b/apps/OpenSign/src/components/dashboard/DashboardReport.js
@@ -34,10 +34,39 @@ function DashboardReport(props) {
"X-Parse-Session-Token": localStorage.getItem("accesstoken")
};
try {
- const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}`;
+ const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}&include=AuditTrail.UserPtr`;
const res = await axios.get(url, { headers: headers });
// console.log("res ", res.data?.results);
- setList(res.data?.results);
+ if (id === "5Go51Q7T8r") {
+ const currentUser = Parse.User.current().id;
+ const listData = res.data?.results.filter(
+ (x) => x.Signers.length > 0
+ );
+ let arr = [];
+ for (const obj of listData) {
+ const isSigner = obj.Signers.some(
+ (item) => item.UserId.objectId === currentUser
+ );
+ if (isSigner) {
+ let isRecord;
+ if (obj?.AuditTrail && obj?.AuditTrail.length > 0) {
+ isRecord = obj?.AuditTrail.some(
+ (item) =>
+ item?.UserPtr?.UserId?.objectId === currentUser &&
+ item.Activity === "Signed"
+ );
+ } else {
+ isRecord = false;
+ }
+ if (isRecord === false) {
+ arr.push(obj);
+ }
+ }
+ }
+ setList(arr);
+ } else {
+ setList(res.data?.results);
+ }
setIsLoader(false);
} catch (err) {
console.log("err ", err);
diff --git a/apps/OpenSign/src/components/fields/FileUpload.js b/apps/OpenSign/src/components/fields/FileUpload.js
index bfb47baa4..2b0840276 100644
--- a/apps/OpenSign/src/components/fields/FileUpload.js
+++ b/apps/OpenSign/src/components/fields/FileUpload.js
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from "react";
import { SaveFileSize } from "../../constant/saveFileSize";
-import Parse from "parse";
-import sanitizeFileName from "../../primitives/sanitizeFileName";
+// import Parse from "parse";
+// import sanitizeFileName from "../../primitives/sanitizeFileName";
+import axios from "axios";
const FileUpload = (props) => {
const [parseBaseUrl] = useState(localStorage.getItem("baseUrl"));
@@ -11,7 +12,7 @@ const FileUpload = (props) => {
const [localValue, setLocalValue] = useState("");
const [Message] = useState(false);
- const [percentage] = useState(0);
+ const [percentage, setpercentage] = useState(0);
const REQUIRED_FIELD_SYMBOL = "*";
@@ -68,33 +69,50 @@ const FileUpload = (props) => {
};
const handleFileUpload = async (file) => {
- Parse.serverURL = parseBaseUrl;
- Parse.initialize(parseAppId);
- const size = file.size;
- const fileName = file.name;
- const name = sanitizeFileName(fileName);
setfileload(true);
- const pdfFile = file;
- const parseFile = new Parse.File(name, pdfFile);
+ const file_url = parseBaseUrl.slice(0, -4);
+ const url = `${file_url}file_upload`;
+ const formData = new FormData();
+ formData.append("file", file);
+ const config = {
+ headers: {
+ "content-type": "multipart/form-data",
+ "X-Parse-Application-Id": parseAppId
+ },
+ onUploadProgress: function (progressEvent) {
+ var percentCompleted = Math.round(
+ (progressEvent.loaded * 100) / progressEvent.total
+ );
+ setpercentage(percentCompleted);
+ }
+ };
try {
- const response = await parseFile.save();
+ await axios
+ .post(url, formData, config)
+ .then((res) => {
+ if (res.data.status === "Error") {
+ alert(res.data.message);
+ }
+ setFileUpload(res.data.imageUrl);
+ props.onChange(res.data.imageUrl);
+ setfileload(false);
+ setpercentage(0);
- setFileUpload(response.url());
- props.onChange(response.url());
- setfileload(false);
- // The response object will contain information about the uploaded file
- // console.log("File uploaded:", response);
-
- // You can access the URL of the uploaded file using response.url()
- // console.log("File URL:", response.url());
- if (response.url()) {
- SaveFileSize(size, response.url());
-
- return response.url();
- }
+ if (res.data.imageUrl) {
+ SaveFileSize(file.size, res.data.imageUrl);
+ return res.data.imageUrl;
+ }
+ })
+ .catch((err) => {
+ alert(`${err.message}`);
+ setfileload(false);
+ setpercentage(0);
+ });
} catch (error) {
- console.error("Error uploading file:", error);
+ alert(error.message);
+ setfileload(false);
+ setpercentage(0);
}
};
@@ -106,7 +124,7 @@ const FileUpload = (props) => {
Download
@@ -133,12 +151,14 @@ const FileUpload = (props) => {
{REQUIRED_FIELD_SYMBOL}
)}
{fileload ? (
-