From eae078f23a1e5bfbac6386bd0bd9347462cea034 Mon Sep 17 00:00:00 2001 From: Vins Date: Thu, 4 Apr 2024 14:36:04 +0200 Subject: [PATCH] manage facturation --- .../Api/LeCoffreApi/Admin/Stripe/Stripe.ts | 14 ++++++++++++++ .../Admin/Subscriptions/Subscriptions.ts | 13 +++++++++++++ .../SubscribeCheckoutTicket/index.tsx | 2 -- .../SubscriptionFacturation/index.tsx | 18 +++++++++++++++++- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts b/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts index 95e41e74..382e8666 100644 --- a/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts +++ b/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts @@ -10,6 +10,10 @@ export type IPostStripeResponse = { url: string; }; +export type IGetClientPortalSessionResponse = { + url: string; +}; + export default class Stripe extends BaseAdmin { private static instance: Stripe; private readonly baseURl = this.namespaceUrl.concat("/stripe"); @@ -37,4 +41,14 @@ export default class Stripe extends BaseAdmin { return Promise.reject(err); } } + + public async getClientPortalSession(stripe_subscription_id: string) { + const url = new URL(this.baseURl.concat(`/${stripe_subscription_id}`)); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } } diff --git a/src/front/Api/LeCoffreApi/Admin/Subscriptions/Subscriptions.ts b/src/front/Api/LeCoffreApi/Admin/Subscriptions/Subscriptions.ts index db6fabff..c49d43e2 100644 --- a/src/front/Api/LeCoffreApi/Admin/Subscriptions/Subscriptions.ts +++ b/src/front/Api/LeCoffreApi/Admin/Subscriptions/Subscriptions.ts @@ -1,3 +1,4 @@ +import { Subscription } from "le-coffre-resources/dist/Admin"; import BaseAdmin from "../../../../../common/Api/LeCoffreApi/Admin/BaseAdmin"; export interface IPostSubscriptionsParams { @@ -20,6 +21,18 @@ export default class Subscriptions extends BaseAdmin { } } + public async get(q: any) { + const url = new URL(this.baseURl); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + /** * @description : Create a Document */ diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx index 1122913b..4efd2c45 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx @@ -46,8 +46,6 @@ export default function SubscribeCheckoutTicket(props: IProps) { }; const handleSubmitPayment = async () => { - console.log("handleSubmitPayment"); - const stripeCheckout = { type: EType.Standard, nb_seats: numberOfCollaborators, diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index 1f222cb8..4c783266 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -8,12 +8,17 @@ import useOpenable from "@Front/Hooks/useOpenable"; import MessageBox from "@Front/Components/Elements/MessageBox"; import Link from "next/link"; import Module from "@Front/Config/Module"; +import Subscriptions from "@Front/Api/LeCoffreApi/Admin/Subscriptions/Subscriptions"; +import JwtService from "@Front/Services/JwtService/JwtService"; +import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe"; +import { useRouter } from "next/router"; export enum EForfeitType { "standard", "unlimited", } export default function SubscriptionFacturation() { + const router = useRouter(); const [forfeitType, _setForfeitType] = useState(EForfeitType.standard); const { close: closeCancelSubscription, isOpen: isCancelSubscriptionOpen, open: openCancelSubscription } = useOpenable(); const { close: closeConfirmation, isOpen: isConfirmationOpen, open: openConfirmation } = useOpenable(); @@ -24,6 +29,17 @@ export default function SubscriptionFacturation() { return; }, [closeCancelSubscription, openConfirmation]); + const manageBilling = async () => { + console.log("handleSubmitPayment"); + + try { + const jwt = JwtService.getInstance().decodeJwt(); + const subscription = await Subscriptions.getInstance().get({ officeId: jwt?.office_Id }); + const stripe_client_portal = await Stripe.getInstance().getClientPortalSession(subscription.stripe_subscription_id!); + router.push(stripe_client_portal.url); + } catch (error) {} + }; + return (
@@ -141,7 +157,7 @@ export default function SubscriptionFacturation() { Arrêter l'abonnement - +