From f941a7d5f95379c4d33e05321af15b4ec3cc3e30 Mon Sep 17 00:00:00 2001 From: Torwent Date: Wed, 24 Jan 2024 15:29:57 +0100 Subject: [PATCH] feat: add a more detailed balance information to the scripter dashboard than what stripe provides --- src/lib/backend/data.server.ts | 18 +++++++++++++++--- src/routes/dashboard/[slug]/+page.svelte | 18 ++++++++++++++++-- src/routes/dashboard/[slug]/+page.ts | 4 +++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/lib/backend/data.server.ts b/src/lib/backend/data.server.ts index 61fa251..fc7878f 100644 --- a/src/lib/backend/data.server.ts +++ b/src/lib/backend/data.server.ts @@ -366,7 +366,7 @@ export async function createStripeConnectAccount( }, metadata: { id: scripter.id, username: scripter.profiles.username }, settings: { - payouts: { schedule: { interval: "weekly", delay_days: 10, weekly_anchor: "monday" } } + payouts: { schedule: { interval: "weekly", delay_days: 7, weekly_anchor: "monday" } } } }) } catch (error) { @@ -421,7 +421,7 @@ export async function finishStripeConnectAccountSetup(baseURL: string, account: } export async function getStripeConnectAccount(id: string) { - let stripeAccount: Stripe.Response | null = null + let stripeAccount: Stripe.Account | null = null try { stripeAccount = await stripe.accounts.retrieve(id) @@ -432,7 +432,19 @@ export async function getStripeConnectAccount(id: string) { ) } - return stripeAccount + let stripeBalance: Stripe.Balance | null = null + try { + stripeBalance = await stripe.balance.retrieve({ + stripeAccount: id + }) + } catch (error) { + console.error( + "An error occurred when calling the Stripe API to create an account session", + error + ) + } + + return { stripeAccount, stripeBalance } } export async function updateStripeConnectAccount(id: string, dba: string) { diff --git a/src/routes/dashboard/[slug]/+page.svelte b/src/routes/dashboard/[slug]/+page.svelte index 0f10ed6..48e9c63 100644 --- a/src/routes/dashboard/[slug]/+page.svelte +++ b/src/routes/dashboard/[slug]/+page.svelte @@ -17,7 +17,7 @@ import { browser } from "$app/environment" import type { RealtimeChannel } from "@supabase/supabase-js" import { Tab, TabGroup } from "@skeletonlabs/skeleton" - import { FileCode, Landmark, Package } from "lucide-svelte" + import { Currency, FileCode, Landmark, Package } from "lucide-svelte" import type { StripeConnectInstance } from "@stripe/connect-js" export let data @@ -249,6 +249,10 @@ {#if tabSet === 0} + {@const available = data.stripeBalance?.available[0].amount ?? 0} + {@const pending = data.stripeBalance?.pending[0].amount ?? 0} + {@const currency = data.stripeBalance?.available[0].currency ?? ""} +
+
+

+ Balance: {(available + pending) / 100} + {currency} +

+

Available: {available / 100} {currency}

+

Settling: {pending / 100} {currency}

+
+ {#if data.stripeAccount?.requirements?.currently_due && data.stripeAccount?.requirements?.currently_due.length > 0}
Missing account information: @@ -312,7 +325,8 @@
{/if} -
Payments
+ +
Payments
Payouts
diff --git a/src/routes/dashboard/[slug]/+page.ts b/src/routes/dashboard/[slug]/+page.ts index aa8dac9..a7c3a24 100644 --- a/src/routes/dashboard/[slug]/+page.ts +++ b/src/routes/dashboard/[slug]/+page.ts @@ -339,13 +339,15 @@ export const load = async ({ parent, data, depends, url, params: { slug } }) => { amount: 50, currency: "eur", interval: "year" } ] - const stripeAccount = data.stripeAccount + const stripeAccount = data.stripeAccount?.stripeAccount ?? null + const stripeBalance = data.stripeAccount?.stripeBalance ?? null const dbaForm = data.dbaForm dbaForm.data.dba = stripeAccount?.business_profile?.name ?? "" return { stripeAccount, + stripeBalance, stripeSession: data.stripeSession, countryForm: data.countryForm, dbaForm,