diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index fb7f7309f..4d6b01d01 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -13,9 +13,10 @@ export const openInNewTab = (url) => { window.open(url, "_blank", "noopener,noreferrer"); }; -export async function fetchSubscription(extUserId) { +export async function fetchSubscription(extUserId, contactObjId) { try { const extClass = localStorage.getItem("Extand_Class"); + const isGuestSign = localStorage.getItem("isGuestSigner"); let extUser; if (extClass) { const jsonSender = JSON.parse(extClass); @@ -30,10 +31,18 @@ export async function fetchSubscription(extUserId) { "X-Parse-Application-Id": localStorage.getItem("parseAppId"), sessionToken: localStorage.getItem("accesstoken") }; - const params = { extUserId: extUser }; + const params = isGuestSign + ? { contactId: contactObjId } + : { extUserId: extUser }; const tenatRes = await axios.post(url, params, { headers: headers }); - const plan = tenatRes.data?.result?.result?.PlanCode; - const billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso; + let plan, status, billingDate; + if (isGuestSign) { + plan = tenatRes.data?.result?.result?.plan; + status = tenatRes.data?.result?.result?.isSubscribed; + } else { + plan = tenatRes.data?.result?.result?.PlanCode; + billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso; + } return { plan, billingDate }; } catch (err) { console.log("Err in fetch subscription", err); diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 70a252528..0d99d800e 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -138,10 +138,12 @@ function PdfRequestFiles() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [divRef.current]); - async function checkIsSubscribed(extUserId) { - const res = await fetchSubscription(extUserId); + async function checkIsSubscribed(extUserId, contactId) { + const isGuestSign = localStorage.getItem("isGuestSigner"); + const res = await fetchSubscription(extUserId, contactId); const plan = res.plan; - const billingDate = res.billingDate; + const billingDate = res?.billingDate; + const status = res?.status; if (plan === "freeplan") { return true; } else if (billingDate) { @@ -155,8 +157,15 @@ function PdfRequestFiles() { navigate(`/subscription`); } } + } else if (isGuestSign) { + if (status) { + setIsSubscribed(true); + return true; + } else { + setIsSubscriptionExpired(true); + } } else { - if (location.pathname.includes("/load/")) { + if (isGuestSign) { setIsSubscriptionExpired(true); } else { navigate(`/subscription`); @@ -178,9 +187,7 @@ function PdfRequestFiles() { } else { setPdfArrayBuffer(arrayBuffer); } - if (isEnableSubscription) { - await checkIsSubscribed(documentData[0]?.ExtUserPtr?.objectId); - } + setExtUserId(documentData[0]?.ExtUserPtr?.objectId); const isCompleted = documentData[0].IsCompleted && documentData[0].IsCompleted; @@ -196,6 +203,12 @@ function PdfRequestFiles() { ); currUserId = getCurrentSigner[0] ? getCurrentSigner[0].objectId : ""; + if (isEnableSubscription) { + await checkIsSubscribed( + documentData[0]?.ExtUserPtr?.objectId, + currUserId + ); + } setSignerObjectId(currUserId); if (documentData[0].SignedUrl) { setPdfUrl(documentData[0].SignedUrl); diff --git a/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js b/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js index f094143ba..80dae27de 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js +++ b/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js @@ -2,41 +2,96 @@ import axios from 'axios'; const serverUrl = process.env.SERVER_URL; const appId = process.env.APP_ID; export default async function getSubscription(request) { - const extUserId = request.params.extUserId; - try { - const userRes = await axios.get(serverUrl + '/users/me', { - headers: { - 'X-Parse-Application-Id': appId, - 'X-Parse-Session-Token': request.headers['sessiontoken'], - }, - }); - const userId = userRes.data && userRes.data.objectId; - if (userId) { - const subcriptionCls = new Parse.Query('contracts_Users'); - const exUser = await subcriptionCls.get(extUserId, { useMasterKey: true }); - if (exUser) { - const subscriptionCls = new Parse.Query('contracts_Subscriptions'); - subscriptionCls.equalTo('TenantId', { - __type: 'Pointer', - className: 'partners_Tenant', - objectId: exUser.get('TenantId').id, - }); - subscriptionCls.descending('createdAt'); - const subcripitions = await subscriptionCls.first({ useMasterKey: true }); - if (subcripitions) { - const _subcripitions = JSON.parse(JSON.stringify(subcripitions)); - return { status: 'success', result: _subcripitions }; + const extUserId = request.params.extUserId || ''; + const contactId = request.params.contactId || ''; + + if (extUserId) { + try { + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': appId, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + const userId = userRes.data && userRes.data.objectId; + if (userId) { + const extCls = new Parse.Query('contracts_Users'); + const exUser = await extCls.get(extUserId, { useMasterKey: true }); + if (exUser) { + const subscriptionCls = new Parse.Query('contracts_Subscriptions'); + subscriptionCls.equalTo('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: exUser.get('TenantId').id, + }); + subscriptionCls.descending('createdAt'); + const subcripitions = await subscriptionCls.first({ useMasterKey: true }); + if (subcripitions) { + const _subcripitions = JSON.parse(JSON.stringify(subcripitions)); + return { status: 'success', result: _subcripitions }; + } else { + return { status: 'success', result: {} }; + } } else { - return { status: 'success', result: {} }; + return { status: 'error', result: 'User not found!' }; } } else { - return { status: 'error', result: 'User not found!' }; + return { status: 'error', result: 'Invalid session token!' }; } - } else { - return { status: 'error', result: 'Invalid session token!' }; + } catch (err) { + console.log('Err in get subscription', err.message); + return { status: 'error', result: err.message }; } - } catch (err) { - console.log('Err in get subscription', err.message); - return { status: 'error', result: err.message }; + } else if (contactId) { + try { + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': appId, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + + const userId = userRes.data && userRes.data.objectId; + if (userId) { + const contactCls = new Parse.Query('contracts_Contactbook'); + const contactUser = await contactCls.get(contactId, { useMasterKey: true }); + if (contactUser) { + const subscriptionCls = new Parse.Query('contracts_Subscriptions'); + subscriptionCls.equalTo('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: contactUser.get('TenantId').id, + }); + subscriptionCls.descending('createdAt'); + const subcripitions = await subscriptionCls.first({ useMasterKey: true }); + + if (subcripitions) { + const _subcripitions = JSON.parse(JSON.stringify(subcripitions)); + if (_subcripitions.PlanCode === 'freeplan') { + return { status: 'success', result: { isSubscribed: false, plan: 'freeplan' } }; + } else if (_subcripitions?.Next_billing_date?.iso) { + if (new Date(_subcripitions.Next_billing_date.iso) > new Date()) { + return { status: 'success', result: { isSubscribed: true } }; + } else { + return { status: 'success', result: { isSubscribed: false } }; + } + } else { + return { status: 'success', result: { isSubscribed: false } }; + } + } else { + return { status: 'success', result: { isSubscribed: false } }; + } + } else { + return { status: 'error', result: 'User not found!' }; + } + } else { + return { status: 'error', result: 'Invalid session token!' }; + } + } catch (err) { + console.log('Err in get subscription2', err.message); + return { status: 'error', result: err.message }; + } + } else { + return { status: 'error', result: 'Invalid session token!' }; } }