diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index f6df36dd7..017fdef3b 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -475,7 +475,7 @@ "role-not-found": "Role not found.", "do-not-access": "You don't have access, please contact the admin.", "add-admin": "Add admin", - "opensign-setup": "Opensign Setup", + "opensign-setup": "OpenSign Setup", "join-discord": "Join our discord server", "admin-already-exist": "Admin already exist.", "password-update-alert-1": "Password updated successfully.", @@ -531,7 +531,7 @@ "filed-required-correctly": "Please fill required details correctly.", "admin-created": "Admin created", "invalid-masterkey": "Invalid masterkey", - "opensign-Setup": "Opensign Setup", + "opensign-Setup": "OpenSign Setup", "master-key": " Master key", "profile-update-alert": "Profile updated successfully.", "date": "Date", @@ -593,7 +593,7 @@ "Recently sent for signatures": "This is a list of documents you've sent to other parties for signature.", "Drafts": "This are documents you have started but have not finalized for sending.", "public-template": "This video demonstrates how to set up your personalized public profile, such as ‘https://opensign.me/your-username’. You’ll also learn how to customize your tagline and make your templates available for public signing." - }, + }, "enter-email-plaholder": "Add an email address and hit enter", "success-email-alert": "Email sent successfully!", "expired-doc-title": "Expired Document", @@ -634,6 +634,7 @@ "quotamailselfsign": "You've reached your limit of 20 emails for this month. Upgrade now to continue sending emails directly.", "quotamail": "You've reached your limit of 20 signature request emails for this month. Upgrade now to continue sending emails directly.", "quotamailTip":"Tip: You can still sign unlimited documents by manually sharing the signing request links below.", - "quotamailhead":"Quota Reached" + "quotamailhead":"Quota Reached", + "unauthorized-modal":"You don't have permission to perform this action, please contact {{adminName}}<{{adminEmail}}>." } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index e52882f39..e90ffc42c 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -474,7 +474,7 @@ "role-not-found": "Rôle introuvable.", "do-not-access": "Vous n'y avez pas accès, veuillez contacter l'administrateur.", "add-admin": "Ajouter un administrateur", - "opensign-setup": "Configuration d'Opensign", + "opensign-setup": "Configuration d'OpenSign", "join-discord": "Rejoignez notre serveur Discord", "admin-already-exist": "L'administrateur existe déjà.", "password-update-alert-1": "Mot de passe mis à jour avec succès.", @@ -530,7 +530,7 @@ "filed-required-correctly": "Veuillez remplir correctement les informations requises.", "admin-created": "Administrateur créé", "invalid-masterkey": "Clé principale invalide", - "opensign-Setup": "Configuration d'Opensign", + "opensign-Setup": "Configuration d'OpenSign", "master-key": "La clef maitresse", "profile-update-alert": "Mise à jour du profil réussie.", "date": "Date", @@ -634,6 +634,7 @@ "quotamailselfsign": "Vous avez atteint votre limite de 20 e-mails pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quotamail": "Vous avez atteint votre limite de 20 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quotamailTip":"Astuce : Vous pouvez toujours signer un nombre illimité de documents en partageant manuellement les liens de demande de signature ci-dessous.", - "quotamailhead":"Quota atteint" + "quotamailhead":"Quota atteint", + "unauthorized-modal":"Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminName}}<{{adminEmail}}>." } diff --git a/apps/OpenSign/src/components/BulkSendUi.js b/apps/OpenSign/src/components/BulkSendUi.js index 4491a08d3..6e42344a5 100644 --- a/apps/OpenSign/src/components/BulkSendUi.js +++ b/apps/OpenSign/src/components/BulkSendUi.js @@ -29,6 +29,12 @@ const BulkSendUi = (props) => { const [isQuotaReached, setIsQuotaReached] = useState(false); const [isLoader, setIsLoader] = useState(false); const [isFreePlan, setIsFreePlan] = useState(false); + const [admin, setAdmin] = useState({ + objectId: "", + name: "", + email: "", + isAdmin: true + }); const allowedSigners = 50; useEffect(() => { signatureExist(); @@ -41,6 +47,27 @@ const BulkSendUi = (props) => { setIsLoader(true); try { const subscription = await fetchSubscription(); + const extUser = + localStorage.getItem("Extand_Class") && + JSON.parse(localStorage.getItem("Extand_Class"))?.[0]; + if ( + subscription?.adminId && + extUser?.objectId === subscription?.adminId + ) { + setAdmin((obj) => ({ + ...obj, + objectId: subscription?.adminId, + isAdmin: true + })); + } else { + setAdmin((obj) => ({ + ...obj, + isAdmin: false, + name: extUser?.CreatedBy?.name, + email: extUser?.CreatedBy?.email + })); + } + setAdmin((obj) => ({ ...obj, objectId: subscription?.adminId })); if (subscription?.plan === "freeplan") { setIsFreePlan(true); } @@ -69,6 +96,7 @@ const BulkSendUi = (props) => { } } else { setIsBulkAvailable(true); + setAdmin((obj) => ({ ...obj, isAdmin: true })); const getPlaceholder = props.item?.Placeholders; const checkIsSignatureExistt = getPlaceholder?.every((placeholderObj) => placeholderObj?.placeHolder?.some((holder) => @@ -417,46 +445,57 @@ const BulkSendUi = (props) => { ) : ( -
-

- {t("additional-credits")} -

-
- - -
-
- -
- USD {amount.price} + <> + {admin?.isAdmin ? ( + +

+ {t("additional-credits")} +

+
+ + +
+
+ +
+ USD {amount.price} +
+
+
+ + + ) : ( +
+ {t("unauthorized-modal", { + adminName: admin?.name, + adminEmail: admin?.email + })}
-
-
- - + )} + )} )} diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 71f7aa69d..4ec3c35d0 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -56,7 +56,7 @@ export async function fetchSubscription( ? { contactId: contactObjId } : { extUserId: extUser }; const tenatRes = await axios.post(url, params, { headers: headers }); - let plan, status, billingDate; + let plan, status, billingDate, adminId; if (isGuestSign) { plan = tenatRes.data?.result?.result?.plan; status = tenatRes.data?.result?.result?.isSubscribed; @@ -64,12 +64,13 @@ export async function fetchSubscription( plan = tenatRes.data?.result?.result?.PlanCode; billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso; const allowedUsers = tenatRes.data?.result?.result?.AllowedUsers || 0; + adminId = tenatRes?.data?.result?.result?.ExtUserPtr?.objectId; localStorage.setItem("allowedUsers", allowedUsers); } - return { plan, billingDate, status }; + return { plan, billingDate, status, adminId }; } catch (err) { console.log("Err in fetch subscription", err); - return { plan: "", billingDate: "" }; + return { plan: "", billingDate: "", status: "", adminId: "" }; } } @@ -122,22 +123,22 @@ export async function checkIsSubscribed() { try { const res = await fetchSubscription(); if (res.plan === "freeplan") { - return { plan: res.plan, isValid: false }; + return { plan: res.plan, isValid: false, adminId: res?.adminId }; } else if (res.billingDate) { const plan = validplan[res.plan] || false; if (plan && new Date(res.billingDate) > new Date()) { - return { plan: res.plan, isValid: true }; + return { plan: res.plan, isValid: true, adminId: res?.adminId }; } else if (new Date(res.billingDate) > new Date()) { - return { plan: res.plan, isValid: true }; + return { plan: res.plan, isValid: true, adminId: res?.adminId }; } else { - return { plan: res.plan, isValid: false }; + return { plan: res.plan, isValid: false, adminId: res?.adminId }; } } else { - return { plan: res.plan, isValid: false }; + return { plan: res.plan, isValid: false, adminId: res?.adminId }; } } catch (err) { console.log("Err in fetch subscription", err); - return { plan: "no-plan", isValid: false }; + return { plan: "no-plan", isValid: false, adminId: "" }; } } diff --git a/apps/OpenSign/src/pages/GenerateToken.js b/apps/OpenSign/src/pages/GenerateToken.js index d5fa82ac6..757a0f1f8 100644 --- a/apps/OpenSign/src/pages/GenerateToken.js +++ b/apps/OpenSign/src/pages/GenerateToken.js @@ -21,9 +21,16 @@ function GenerateToken() { const [isLoader, setIsLoader] = useState(true); const [isModal, setIsModal] = useState({ generateapi: false, - buyapis: false + buyapis: false, + unauthorized: false + }); + const [isSubscribe, setIsSubscribe] = useState({ + plan: "", + isValid: false, + adminId: "", + adminName: "", + adminEmail: "" }); - const [isSubscribe, setIsSubscribe] = useState({ plan: "", isValid: false }); const [isAlert, setIsAlert] = useState({ type: "success", msg: "" }); const [isTour, setIsTour] = useState(false); const [amount, setAmount] = useState({ @@ -139,10 +146,24 @@ function GenerateToken() { if (isSubscribe?.plan === "freeplan" && isEnableSubscription) { setIsTour(true); } else { - setIsModal((obj) => ({ ...obj, buyapis: !obj.buyapis })); + const extUser = + localStorage.getItem("Extand_Class") && + JSON.parse(localStorage.getItem("Extand_Class"))?.[0]; + if (isSubscribe?.adminId && extUser?.objectId === isSubscribe?.adminId) { + setIsModal((obj) => ({ ...obj, buyapis: !obj.buyapis })); + } else { + setIsSubscribe((obj) => ({ + ...obj, + adminName: extUser?.CreatedBy?.name, + adminEmail: extUser?.CreatedBy?.email + })); + setIsModal((obj) => ({ ...obj, unauthorized: !obj.unauthorized })); + } } }; - + const handleCloseModal = () => { + setIsModal({ generateapi: false, buyapis: false, unauthorized: false }); + }; const handlePricePerAPIs = (e) => { const quantity = e.target?.value; const price = @@ -374,7 +395,7 @@ function GenerateToken() { {isFormLoader && (
@@ -419,6 +440,18 @@ function GenerateToken() { + +
+ {t("unauthorized-modal", { + adminName: isSubscribe?.adminName, + adminEmail: isSubscribe?.adminEmail + })} +
+
{isEnableSubscription && isSubscribe?.plan === "freeplan" && (
diff --git a/apps/OpenSign/src/script/locales/en/translation.json b/apps/OpenSign/src/script/locales/en/translation.json index af6e2fbed..6564f0233 100644 --- a/apps/OpenSign/src/script/locales/en/translation.json +++ b/apps/OpenSign/src/script/locales/en/translation.json @@ -475,7 +475,7 @@ "role-not-found": "Role not found.", "do-not-access": "You don't have access, please contact the admin.", "add-admin": "Add admin", - "opensign-setup": "Opensign Setup", + "opensign-setup": "OpenSign Setup", "join-discord": "Join our discord server", "admin-already-exist": "Admin already exist.", "password-update-alert-1": "Password updated successfully.", @@ -531,7 +531,7 @@ "filed-required-correctly": "Please fill required details correctly.", "admin-created": "Admin created", "invalid-masterkey": "Invalid masterkey", - "opensign-Setup": "Opensign Setup", + "opensign-Setup": "OpenSign Setup", "master-key": " Master key", "profile-update-alert": "Profile updated successfully.", "date": "Date", @@ -631,6 +631,7 @@ "quotamailselfsign": "You've reached your limit of 20 emails for this month. Upgrade now to continue sending emails directly.", "quotamail": "You've reached your limit of 20 signature request emails for this month. Upgrade now to continue sending emails directly.", "quotamailTip":"Tip: You can still sign unlimited documents by manually sharing the signing request links below.", - "quotamailhead":"Quota Reached" + "quotamailhead":"Quota Reached", + "unauthorized-modal":"You don't have permission to perform this action, please contact {{adminName}}<{{adminEmail}}>." } diff --git a/apps/OpenSign/src/script/locales/fr/translation.json b/apps/OpenSign/src/script/locales/fr/translation.json index 6956bcff1..34d93d349 100644 --- a/apps/OpenSign/src/script/locales/fr/translation.json +++ b/apps/OpenSign/src/script/locales/fr/translation.json @@ -474,7 +474,7 @@ "role-not-found": "Rôle introuvable.", "do-not-access": "Vous n'y avez pas accès, veuillez contacter l'administrateur.", "add-admin": "Ajouter un administrateur", - "opensign-setup": "Configuration d'Opensign", + "opensign-setup": "Configuration d'OpenSign", "join-discord": "Rejoignez notre serveur Discord", "admin-already-exist": "L'administrateur existe déjà.", "password-update-alert-1": "Mot de passe mis à jour avec succès.", @@ -530,7 +530,7 @@ "filed-required-correctly": "Veuillez remplir correctement les informations requises.", "admin-created": "Administrateur créé", "invalid-masterkey": "Clé principale invalide", - "opensign-Setup": "Configuration d'Opensign", + "opensign-Setup": "Configuration d'OpenSign", "master-key": "La clef maitresse", "profile-update-alert": "Mise à jour du profil réussie.", "date": "Date", @@ -631,6 +631,7 @@ "quotamailselfsign": "Vous avez atteint votre limite de 20 e-mails pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quotamail": "Vous avez atteint votre limite de 20 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quotamailTip":"Astuce : Vous pouvez toujours signer un nombre illimité de documents en partageant manuellement les liens de demande de signature ci-dessous.", - "quotamailhead":"Quota atteint" + "quotamailhead":"Quota atteint", + "unauthorized-modal":"Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminName}}<{{adminEmail}}>." } diff --git a/apps/OpenSignServer/cloud/customRoute/saveSubscription.js b/apps/OpenSignServer/cloud/customRoute/saveSubscription.js index 31b14503e..d6db217fd 100644 --- a/apps/OpenSignServer/cloud/customRoute/saveSubscription.js +++ b/apps/OpenSignServer/cloud/customRoute/saveSubscription.js @@ -7,8 +7,10 @@ export default async function saveSubscription(request, response) { const Next_billing_date = request.body?.data?.subscription?.next_billing_at; const planCode = request.body?.data?.subscription?.plan?.plan_code; const addons = request.body?.data?.subscription?.addons || []; + const event = request.body?.data?.event_type || ''; const credits = planCredits?.[planCode] || 0; - let existAddon = 0; + const isTeamPlan = planCode?.includes('team'); + let newAddons = 0; if (addons?.length > 0) { let allowedUsersMonthly = 0; let allowedUsersYearly = 0; @@ -22,11 +24,11 @@ export default async function saveSubscription(request, response) { } }); if (allowedUsersMonthly > 0 || allowedUsersYearly > 0) { - existAddon = allowedUsersMonthly + allowedUsersYearly + 1; + newAddons = allowedUsersMonthly + allowedUsersYearly + 1; } } else { if (planCode === 'teams-yearly' || planCode === 'teams-monthly' || planCode === 'team-weekly') { - existAddon = 1; + newAddons = 1; } } try { @@ -42,6 +44,7 @@ export default async function saveSubscription(request, response) { }); const subscription = await subcriptionCls.first({ useMasterKey: true }); if (subscription) { + const _resSub = JSON.parse(JSON.stringify(subscription)); const updateSubscription = new Parse.Object('contracts_Subscriptions'); updateSubscription.id = subscription.id; updateSubscription.set('SubscriptionId', SubscriptionId); @@ -52,27 +55,81 @@ export default async function saveSubscription(request, response) { updateSubscription.unset('Next_billing_date'); } updateSubscription.set('PlanCode', planCode); - if (existAddon > 0) { - updateSubscription.set('AllowedUsers', parseInt(existAddon)); + if (newAddons > 0) { + updateSubscription.set('AllowedUsers', parseInt(newAddons)); + } + let existAddon = 0; + let allowedUsersMonthly = 0; + let allowedUsersYearly = 0; + _resSub.SubscriptionDetails?.data?.subscription?.addons?.forEach(item => { + if (item.addon_code === 'extra-teams-users-monthly') { + allowedUsersMonthly += item.quantity; + } else if (item.addon_code === 'extra-teams-users-yearly') { + allowedUsersYearly += item.quantity; + } else if (item.addon_code === 'extra-users') { + allowedUsersMonthly += item.quantity; + } + }); + if (allowedUsersMonthly > 0 || allowedUsersYearly > 0) { + existAddon = allowedUsersMonthly + allowedUsersYearly + 1; // + 1 is Admin user + } else { + if ( + planCode === 'teams-yearly' || + planCode === 'teams-monthly' || + planCode === 'team-weekly' + ) { + existAddon = 1; // 1 is Admin user + } } const isSameAsPrevPlan = subscription?.get('PlanCode') === planCode; if (isSameAsPrevPlan) { const planCredits = subscription?.get('PlanCredits'); + const existAllowedCredits = subscription?.get('AllowedCredits') || 0; if (planCredits) { - updateSubscription.set('AllowedCredits', planCredits); + const oldAddons = existAddon; + const substractedAddon = newAddons - oldAddons; + if (isTeamPlan && substractedAddon > 0) { + const newCredits = existAllowedCredits + substractedAddon * planCredits; + updateSubscription.set('AllowedCredits', newCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } else if (isTeamPlan) { + const existCredits = existAddon * planCredits; + updateSubscription.set('AllowedCredits', existCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } else { + updateSubscription.set('AllowedCredits', planCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } } else { if (credits > 0) { - updateSubscription.set('AllowedCredits', credits); - updateSubscription.set('PlanCredits', credits); + if (isTeamPlan) { + const newCredits = newAddons * credits; + updateSubscription.set('AllowedCredits', newCredits); + updateSubscription.set('PlanCredits', credits); + } else { + updateSubscription.set('AllowedCredits', credits); + updateSubscription.set('PlanCredits', credits); + } } } } else { if (credits > 0) { - updateSubscription.set('AllowedCredits', credits); - updateSubscription.set('PlanCredits', credits); + if (isTeamPlan) { + const newCredits = newAddons * credits; + updateSubscription.set('AllowedCredits', newCredits); + updateSubscription.set('PlanCredits', credits); + } else { + updateSubscription.set('AllowedCredits', credits); + updateSubscription.set('PlanCredits', credits); + } } } - await updateSubscription.save(null, { useMasterKey: true }); return response.status(200).json({ status: 'update subscription!' }); } else { @@ -100,11 +157,18 @@ export default async function saveSubscription(request, response) { createSubscription.unset('Next_billing_date'); } createSubscription.set('PlanCode', planCode); - if (existAddon > 0) { - createSubscription.set('AllowedUsers', parseInt(existAddon)); + if (newAddons > 0) { + createSubscription.set('AllowedUsers', parseInt(newAddons)); } if (credits > 0) { - createSubscription.set('AllowedCredits', credits); + if (isTeamPlan) { + const totalCredits = parseInt(newAddons) * credits; + createSubscription.set('AllowedCredits', totalCredits); + createSubscription.set('PlanCredits', credits); + } else { + createSubscription.set('AllowedCredits', credits); + createSubscription.set('PlanCredits', credits); + } } await createSubscription.save(null, { useMasterKey: true }); return response.status(200).json({ status: 'create subscription!' }); diff --git a/apps/OpenSignServer/cloud/parsefunction/BuyAddonUsers.js b/apps/OpenSignServer/cloud/parsefunction/BuyAddonUsers.js index 3ca147f4a..4281ab9d4 100644 --- a/apps/OpenSignServer/cloud/parsefunction/BuyAddonUsers.js +++ b/apps/OpenSignServer/cloud/parsefunction/BuyAddonUsers.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import { planCredits } from '../../Utils.js'; export default async function BuyAddonUsers(request) { const users = request.params.users; if (!request?.user) { @@ -88,10 +89,15 @@ export default async function BuyAddonUsers(request) { ); const subscriptionInfo = { data: updatedSubscription.data }; const allowedUsers = quantity + 1; + const existAllowedCredits = _resSub?.AllowedCredits || 0; + const credits = resSub?.PlanCredits || planCredits[plan_code]; + const newAllowedCredits = users * credits; + const totalCredits = existAllowedCredits + newAllowedCredits; const updateSub = new Parse.Object('contracts_Subscriptions'); updateSub.id = resSub.id; updateSub.set('SubscriptionDetails', subscriptionInfo); updateSub.set('AllowedUsers', allowedUsers); + updateSub.set('AllowedCredits', totalCredits); const resupdateSub = await updateSub.save(null, { useMasterKey: true }); return { status: 'success', addon: allowedUsers }; } else { diff --git a/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js index 2c2a0a373..b7e8fcb3a 100644 --- a/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js +++ b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js @@ -8,8 +8,10 @@ export default async function saveSubscription(request) { const body = subscription; const Next_billing_date = subscription.data.subscription.next_billing_at; const planCode = subscription.data.subscription.plan.plan_code; + const event = subscription?.data?.event_type || ''; const credits = planCredits?.[planCode] || 0; - let existAddon = 0; + const isTeamPlan = planCode?.includes('team'); + let newAddons = 0; try { const userRes = await axios.get(serverUrl + '/users/me', { headers: { @@ -47,7 +49,7 @@ export default async function saveSubscription(request) { } }); if (allowedUsersMonthly > 0 || allowedUsersYearly > 0) { - existAddon = allowedUsersMonthly + allowedUsersYearly + 1; + newAddons = allowedUsersMonthly + allowedUsersYearly + 1; // + 1 is Admin user } } else { if ( @@ -55,39 +57,90 @@ export default async function saveSubscription(request) { planCode === 'teams-monthly' || planCode === 'team-weekly' ) { - existAddon = 1; + newAddons = 1; // 1 is Admin user } } - - // const existAddon = addons.reduce((acc, curr) => acc + curr.quantity, 1); if (resSubscription) { + const _resSub = JSON.parse(JSON.stringify(resSubscription)); const updateSubscription = new Parse.Object('contracts_Subscriptions'); updateSubscription.id = resSubscription.id; updateSubscription.set('SubscriptionId', SubscriptionId); updateSubscription.set('SubscriptionDetails', body); updateSubscription.set('Next_billing_date', new Date(Next_billing_date)); updateSubscription.set('PlanCode', planCode); - if (existAddon > 0) { - updateSubscription.set('AllowedUsers', parseInt(existAddon)); + if (newAddons > 0) { + updateSubscription.set('AllowedUsers', parseInt(newAddons)); + } + let existAddon = 0; + let allowedUsersMonthly = 0; + let allowedUsersYearly = 0; + _resSub.SubscriptionDetails?.data?.subscription?.addons?.forEach(item => { + if (item.addon_code === 'extra-teams-users-monthly') { + allowedUsersMonthly += item.quantity; + } else if (item.addon_code === 'extra-teams-users-yearly') { + allowedUsersYearly += item.quantity; + } else if (item.addon_code === 'extra-users') { + allowedUsersMonthly += item.quantity; + } + }); + if (allowedUsersMonthly > 0 || allowedUsersYearly > 0) { + existAddon = allowedUsersMonthly + allowedUsersYearly + 1; // + 1 is Admin user + } else { + if ( + planCode === 'teams-yearly' || + planCode === 'teams-monthly' || + planCode === 'team-weekly' + ) { + existAddon = 1; // 1 is Admin user + } } const isSameAsPrevPlan = resSubscription?.get('PlanCode') === planCode; if (isSameAsPrevPlan) { const planCredits = resSubscription?.get('PlanCredits'); + const existAllowedCredits = resSubscription?.get('AllowedCredits') || 0; if (planCredits) { - updateSubscription.set('AllowedCredits', planCredits); + const oldAddons = existAddon; + const substractedAddon = newAddons - oldAddons; + if (isTeamPlan && substractedAddon > 0) { + const newCredits = existAllowedCredits + substractedAddon * planCredits; + updateSubscription.set('AllowedCredits', newCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } else if (isTeamPlan) { + const existCredits = existAddon * planCredits; + updateSubscription.set('AllowedCredits', existCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } else { + updateSubscription.set('AllowedCredits', planCredits); + if (event === 'subscription_created') { + updateSubscription.set('PlanCredits', credits); + } + } } else { - if (credits > 0) { + if (isTeamPlan) { + const newCredits = newAddons * credits; + updateSubscription.set('AllowedCredits', newCredits); + updateSubscription.set('PlanCredits', credits); + } else { updateSubscription.set('AllowedCredits', credits); updateSubscription.set('PlanCredits', credits); } } } else { if (credits > 0) { - updateSubscription.set('AllowedCredits', credits); - updateSubscription.set('PlanCredits', credits); + if (isTeamPlan) { + const newCredits = newAddons * credits; + updateSubscription.set('AllowedCredits', newCredits); + updateSubscription.set('PlanCredits', credits); + } else { + updateSubscription.set('AllowedCredits', credits); + updateSubscription.set('PlanCredits', credits); + } } } - await updateSubscription.save(null, { useMasterKey: true }); return { status: 'update subscription!' }; } else { @@ -111,12 +164,18 @@ export default async function saveSubscription(request) { }); createSubscription.set('Next_billing_date', new Date(Next_billing_date)); createSubscription.set('PlanCode', planCode); - if (existAddon > 0) { - createSubscription.set('AllowedUsers', parseInt(existAddon)); + if (newAddons > 0) { + createSubscription.set('AllowedUsers', parseInt(newAddons)); } if (credits > 0) { - createSubscription.set('AllowedCredits', credits); - createSubscription.set('PlanCredits', credits); + if (isTeamPlan) { + const totalCredits = parseInt(newAddons) * credits; + createSubscription.set('AllowedCredits', totalCredits); + createSubscription.set('PlanCredits', credits); + } else { + createSubscription.set('AllowedCredits', credits); + createSubscription.set('PlanCredits', credits); + } } await createSubscription.save(null, { useMasterKey: true }); return { status: 'create subscription!' };