diff --git a/app/home/[account]/billing/_components/health-benefit-form.tsx b/app/home/[account]/billing/_components/health-benefit-form.tsx index 8c11bc4..a247f92 100644 --- a/app/home/[account]/billing/_components/health-benefit-form.tsx +++ b/app/home/[account]/billing/_components/health-benefit-form.tsx @@ -1,5 +1,7 @@ 'use client'; +import { useState } from 'react'; + import { UpdateHealthBenefitSchema } from '@/packages/billing/core/src/schema'; import { Database } from '@/packages/supabase/src/database.types'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -22,32 +24,52 @@ import YearlyExpensesOverview from './yearly-expenses-overview'; const HealthBenefitForm = ({ account, companyParams, + employeeCount, }: { account: Database['medreport']['Tables']['accounts']['Row']; companyParams: Database['medreport']['Tables']['company_params']['Row']; + employeeCount: number; }) => { + const [currentCompanyParams, setCurrentCompanyParams] = + useState( + companyParams, + ); + const [isLoading, setIsLoading] = useState(false); const form = useForm({ resolver: zodResolver(UpdateHealthBenefitSchema), mode: 'onChange', defaultValues: { - occurance: companyParams.benefit_occurance || 'yearly', - amount: companyParams.benefit_amount || 0, + occurance: currentCompanyParams.benefit_occurance || 'yearly', + amount: currentCompanyParams.benefit_amount || 0, }, }); + const onSubmit = (data: { occurance: string; amount: number }) => { + const promise = async () => { + setIsLoading(true); + try { + await updateHealthBenefit({ ...data, accountId: account.id }); + setCurrentCompanyParams((prev) => ({ + ...prev, + benefit_amount: data.amount, + benefit_occurance: data.occurance, + })); + } finally { + setIsLoading(false); + } + }; + + toast.promise(promise, { + success: 'Andmed uuendatud', + error: 'error', + }); + }; + return (
{ - toast.promise( - () => updateHealthBenefit({ ...data, accountId: account.id }), - { - success: 'success', - error: 'error', - }, - ); - })} + onSubmit={form.handleSubmit(onSubmit)} >
@@ -61,13 +83,13 @@ const HealthBenefitForm = ({

- @@ -82,7 +104,7 @@ const HealthBenefitForm = ({

- {companyParams.benefit_amount || 0} € + {currentCompanyParams.benefit_amount || 0} €

@@ -95,8 +117,8 @@ const HealthBenefitForm = ({

diff --git a/app/home/[account]/billing/_components/yearly-expenses-overview.tsx b/app/home/[account]/billing/_components/yearly-expenses-overview.tsx index 71d6592..36a42be 100644 --- a/app/home/[account]/billing/_components/yearly-expenses-overview.tsx +++ b/app/home/[account]/billing/_components/yearly-expenses-overview.tsx @@ -21,7 +21,7 @@ const YearlyExpensesOverview = ({ case 'yearly': return (companyParams.benefit_amount / 12).toFixed(2); case 'quarterly': - return (companyParams.benefit_amount / 4).toFixed(2); + return (companyParams.benefit_amount / 3).toFixed(2); case 'monthly': return companyParams.benefit_amount.toFixed(2); default: @@ -38,7 +38,7 @@ const YearlyExpensesOverview = ({ case 'yearly': return companyParams.benefit_amount.toFixed(2); case 'quarterly': - return (companyParams.benefit_amount * 4).toFixed(2); + return (companyParams.benefit_amount * 3).toFixed(2); case 'monthly': return (companyParams.benefit_amount * 12).toFixed(2); default: @@ -80,8 +80,15 @@ const YearlyExpensesOverview = ({

-

Kokku

- 13 200,00 € +

+ +

+ + {companyParams.benefit_amount + ? companyParams.benefit_amount * employeeCount + : 0}{' '} + € +
); diff --git a/app/home/[account]/billing/page.tsx b/app/home/[account]/billing/page.tsx index 8342c98..a56b07a 100644 --- a/app/home/[account]/billing/page.tsx +++ b/app/home/[account]/billing/page.tsx @@ -1,3 +1,4 @@ +import { createAccountsApi } from '@/packages/features/accounts/src/server/api'; import { createTeamAccountsApi } from '@/packages/features/team-accounts/src/server/api'; import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client'; @@ -23,13 +24,20 @@ export const generateMetadata = async () => { async function TeamAccountBillingPage({ params }: TeamAccountBillingPageProps) { const accountSlug = (await params).account; - const api = createTeamAccountsApi(getSupabaseServerClient()); + const client = getSupabaseServerClient(); + const api = createTeamAccountsApi(client); + const account = await api.getTeamAccount(accountSlug); const companyParams = await api.getTeamAccountParams(account.id); + const accounts = await api.getMembers(accountSlug); return ( - + ); } diff --git a/packages/features/admin/src/components/admin-account-page.tsx b/packages/features/admin/src/components/admin-account-page.tsx index 9902bcd..1acb6a7 100644 --- a/packages/features/admin/src/components/admin-account-page.tsx +++ b/packages/features/admin/src/components/admin-account-page.tsx @@ -3,6 +3,7 @@ import { BadgeX, Ban, ShieldPlus, VenetianMask } from 'lucide-react'; import { Tables } from '@kit/supabase/database'; import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; +import { createTeamAccountsApi } from '@kit/team-accounts/api'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { AppBreadcrumbs } from '@kit/ui/app-breadcrumbs'; import { Badge } from '@kit/ui/badge'; @@ -162,7 +163,8 @@ async function PersonalAccountPage(props: { account: Account }) { async function TeamAccountPage(props: { account: Account & { memberships: Membership[] }; }) { - const members = await getMembers(props.account.slug ?? ''); + const api = createTeamAccountsApi(getSupabaseServerClient()); + const members = await api.getMembers(props.account.slug ?? ''); return ( <> @@ -386,17 +388,3 @@ async function getMemberships(userId: string) { return memberships.data; } - -async function getMembers(accountSlug: string) { - const client = getSupabaseServerClient(); - - const members = await client.schema('medreport').rpc('get_account_members', { - account_slug: accountSlug, - }); - - if (members.error) { - throw members.error; - } - - return members.data; -} diff --git a/packages/features/team-accounts/src/server/api.ts b/packages/features/team-accounts/src/server/api.ts index 442735d..60339ff 100644 --- a/packages/features/team-accounts/src/server/api.ts +++ b/packages/features/team-accounts/src/server/api.ts @@ -295,6 +295,20 @@ export class TeamAccountsApi { return data; } + + async getMembers(accountSlug: string) { + const members = await this.client + .schema('medreport') + .rpc('get_account_members', { + account_slug: accountSlug, + }); + + if (members.error) { + throw members.error; + } + + return members.data; + } } export function createTeamAccountsApi(client: SupabaseClient) { diff --git a/public/locales/et/billing.json b/public/locales/et/billing.json index a071540..d89d3b3 100644 --- a/public/locales/et/billing.json +++ b/public/locales/et/billing.json @@ -137,6 +137,7 @@ "title": "Kulude ülevaade 2025 aasta raames", "monthly": "Kulu töötaja kohta kuus *", "yearly": "Maksimaalne kulu inimese kohta kokku aastas *", - "total": "Maksimaalne kulu {{employeeCount}} töötaja kohta aastas *" + "total": "Maksimaalne kulu {{employeeCount}} töötaja kohta aastas *", + "sum": "Kokku" } }