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. [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/opensignlabs/opensign.svg)](http://isitmaintained.com/project/opensignlabs/opensign "Average time to resolve an issue") - [![All Contributors](https://img.shields.io/github/all-contributors/opensignlabs/opensign?color=ee8449&style=flat-square)](#contributors) +![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/w/opensignlabs/opensign) +![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/opensignlabs/opensign) + 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 - - - - -[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/opensignlabs.svg?style=social&label=Follow%20%40opensignlabs)](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(); - - 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()); + 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); - 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 ? ( -