diff --git a/app/home/[account]/billing/page.tsx b/app/home/[account]/billing/page.tsx index e3ca767..9a1aeff 100644 --- a/app/home/[account]/billing/page.tsx +++ b/app/home/[account]/billing/page.tsx @@ -29,10 +29,13 @@ async function TeamAccountBillingPage({ params }: TeamAccountBillingPageProps) { const account = await api.getTeamAccount(accountSlug); const { members } = await api.getMembers(accountSlug); + const eligibleMembersCount = members.filter( + ({ is_eligible_for_benefits }) => !!is_eligible_for_benefits, + ).length; const [expensesOverview, companyParams] = await Promise.all([ loadTeamAccountBenefitExpensesOverview({ companyId: account.id, - employeeCount: members.length, + employeeCount: eligibleMembersCount, }), api.getTeamAccountParams(account.id), ]); @@ -42,7 +45,7 @@ async function TeamAccountBillingPage({ params }: TeamAccountBillingPageProps) { diff --git a/packages/features/team-accounts/src/components/members/account-members-table.tsx b/packages/features/team-accounts/src/components/members/account-members-table.tsx index 8c851ec..3eddd0a 100644 --- a/packages/features/team-accounts/src/components/members/account-members-table.tsx +++ b/packages/features/team-accounts/src/components/members/account-members-table.tsx @@ -242,7 +242,6 @@ function useGetColumns( @@ -256,13 +255,11 @@ function useGetColumns( function ActionsDropdown({ permissions, member, - currentUserId, currentTeamAccountId, currentRoleHierarchy, }: { permissions: Permissions; member: Members[0]; - currentUserId: string; currentTeamAccountId: string; currentRoleHierarchy: number; }) { @@ -271,13 +268,8 @@ function ActionsDropdown({ const [isUpdatingRole, setIsUpdatingRole] = useState(false); const [isUpdatingBenefit, setIsUpdatingBenefit] = useState(false); - const isCurrentUser = member.user_id === currentUserId; const isPrimaryOwner = member.primary_owner_user_id === member.user_id; - if (isCurrentUser || isPrimaryOwner) { - return null; - } - const memberRoleHierarchy = member.role_hierarchy_level; const canUpdateRole = permissions.canUpdateRole(memberRoleHierarchy); @@ -304,19 +296,19 @@ function ActionsDropdown({ - + setIsUpdatingRole(true)}> - + setIsTransferring(true)}> - + setIsRemoving(true)}> diff --git a/public/locales/et/teams.json b/public/locales/et/teams.json index 5c1b966..2ab7ada 100644 --- a/public/locales/et/teams.json +++ b/public/locales/et/teams.json @@ -96,12 +96,12 @@ "updateRoleLoadingMessage": "Rolli uuendatakse...", "updateRoleSuccessMessage": "Roll edukalt uuendatud", "updatingRoleErrorMessage": "Vabandust, tekkis viga. Palun proovi uuesti.", - "updateBenefit": "Uuenda toetust", - "updateBenefitHeading": "Uuenda toetus staatust", - "removeBenefitDescription": "Eemalda töötaja toetusest", - "allowBenefitDescription": "Luba töötajale toetus", - "removeBenefitSubmitLabel": "Eemalda toetus", - "allowBenefitSubmitLabel": "Luba toetus", + "updateBenefit": "Tervisekonto staatus", + "updateBenefitHeading": "Muuda tervisekonto staatust", + "removeBenefitDescription": "Deaktiveeri töötaja tervisekonto", + "allowBenefitDescription": "Aktiveeri töötaja tervisekonto", + "removeBenefitSubmitLabel": "Deaktiveeri", + "allowBenefitSubmitLabel": "Aktiveeri", "updateBenefiErrorMessage": "Vabandus, tekkis viga. Palun proovi uuesti.", "updateMemberRoleModalHeading": "Uuenda töötaja rolli", "updateMemberRoleModalDescription": "Muuda valitud töötaja rolli. Roll määrab töötaja õigused.", diff --git a/supabase/migrations/20251002191000_add_new_type.sql b/supabase/migrations/20251002191000_add_new_type.sql index c111974..95fb34b 100644 --- a/supabase/migrations/20251002191000_add_new_type.sql +++ b/supabase/migrations/20251002191000_add_new_type.sql @@ -54,3 +54,97 @@ end;$function$ grant execute on function medreport.get_account_members (text) to authenticated, service_role; + +create policy "update_accounts_memberships" +on "medreport"."accounts_memberships" +as permissive +for update +to authenticated +using (medreport.is_account_owner(account_id)) +with check (medreport.is_account_owner(account_id)); + +drop policy "restrict_mfa_accounts_memberships" on "medreport"."accounts_memberships"; +grant update on table "medreport"."accounts_memberships" to "authenticated"; + +drop TRIGGER if exists prevent_memberships_update_check on "medreport"."accounts_memberships"; +drop function if exists kit.prevent_memberships_update(); + +create or replace function medreport.upsert_health_benefits( + p_benefit_distribution_schedule_id uuid +) +returns void +language plpgsql +security definer +as $$ +declare + member_record record; + expires_date timestamp with time zone; + v_company_id uuid; + v_benefit_amount numeric; + existing_entry_id uuid; + v_target_amount numeric; +begin + -- Expires on first day of next year. + expires_date := date_trunc('year', now() + interval '1 year'); + + -- Get company_id and benefit_amount from benefit_distribution_schedule + select company_id, benefit_amount into v_company_id, v_benefit_amount + from medreport.benefit_distribution_schedule + where id = p_benefit_distribution_schedule_id; + + -- Get all personal accounts that are members of this company + for member_record in + select distinct + a.id as personal_account_id, + coalesce(am.is_eligible_for_benefits) as is_eligible + from medreport.accounts a + join medreport.accounts_memberships am on a.id = am.user_id + where am.account_id = v_company_id + and a.is_personal_account = true + loop + v_target_amount := case when member_record.is_eligible + then v_benefit_amount + else 0 end; + + -- Check if there is already a balance entry for this personal account from the same company in same month + select id into existing_entry_id + from medreport.account_balance_entries + where entry_type = 'benefit' + and account_id = member_record.personal_account_id + and source_company_id = v_company_id + and date_trunc('month', created_at) = date_trunc('month', now()) + LIMIT 1; + + if existing_entry_id is not null then + update medreport.account_balance_entries set + amount = v_target_amount, + expires_at = expires_date, + benefit_distribution_schedule_id = p_benefit_distribution_schedule_id + where id = existing_entry_id; + else + -- Insert new balance entry for personal account + insert into medreport.account_balance_entries ( + account_id, + amount, + entry_type, + description, + source_company_id, + created_by, + expires_at, + benefit_distribution_schedule_id + ) values ( + member_record.personal_account_id, + v_target_amount, + 'benefit', + 'Health benefit from company', + v_company_id, + auth.uid(), + expires_date, + p_benefit_distribution_schedule_id + ); + end if; + end loop; +end; +$$; + +grant execute on function medreport.upsert_health_benefits(uuid) to authenticated, service_role; \ No newline at end of file