feat(MED-171): update benefits info in company members table
This commit is contained in:
@@ -73,6 +73,7 @@ export async function loadAccountMembersBenefitsUsage(
|
||||
{
|
||||
personal_account_id: string;
|
||||
benefit_amount: number;
|
||||
benefit_unused_amount: number;
|
||||
}[]
|
||||
> {
|
||||
const { data, error } = await client
|
||||
@@ -86,7 +87,11 @@ export async function loadAccountMembersBenefitsUsage(
|
||||
return [];
|
||||
}
|
||||
|
||||
return data ?? [];
|
||||
return (data ?? []) as unknown as {
|
||||
personal_account_id: string;
|
||||
benefit_amount: number;
|
||||
benefit_unused_amount: number;
|
||||
}[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,6 +46,7 @@ type AccountMembersTableProps = {
|
||||
membersBenefitsUsage: {
|
||||
personal_account_id: string;
|
||||
benefit_amount: number;
|
||||
benefit_unused_amount: number;
|
||||
}[];
|
||||
};
|
||||
|
||||
@@ -132,6 +133,7 @@ function useGetColumns(
|
||||
membersBenefitsUsage: {
|
||||
personal_account_id: string;
|
||||
benefit_amount: number;
|
||||
benefit_unused_amount: number;
|
||||
}[];
|
||||
},
|
||||
): ColumnDef<Members[0]>[] {
|
||||
@@ -185,11 +187,11 @@ function useGetColumns(
|
||||
{
|
||||
header: t('distributedBenefitsAmount'),
|
||||
cell: ({ row }) => {
|
||||
const benefitAmount = params.membersBenefitsUsage.find(
|
||||
let benefitAmount = params.membersBenefitsUsage.find(
|
||||
(usage) => usage.personal_account_id === row.original.id,
|
||||
)?.benefit_amount;
|
||||
if (typeof benefitAmount !== 'number') {
|
||||
return '-';
|
||||
benefitAmount = 0;
|
||||
}
|
||||
|
||||
return formatCurrency({
|
||||
@@ -199,6 +201,23 @@ function useGetColumns(
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
header: t('distributedBenefitsUnusedAmount'),
|
||||
cell: ({ row }) => {
|
||||
let benefitUnusedAmount = params.membersBenefitsUsage.find(
|
||||
(usage) => usage.personal_account_id === row.original.id,
|
||||
)?.benefit_unused_amount;
|
||||
if (typeof benefitUnusedAmount !== 'number') {
|
||||
benefitUnusedAmount = 0;
|
||||
}
|
||||
|
||||
return formatCurrency({
|
||||
currencyCode: 'EUR',
|
||||
locale: language,
|
||||
value: benefitUnusedAmount,
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
header: t('roleLabel'),
|
||||
cell: ({ row }) => {
|
||||
|
||||
@@ -2323,6 +2323,7 @@ export type Database = {
|
||||
Returns: {
|
||||
personal_account_id: string
|
||||
benefit_amount: number
|
||||
benefit_unused_amount: number
|
||||
}
|
||||
}
|
||||
get_config: {
|
||||
|
||||
@@ -196,5 +196,6 @@
|
||||
"specialCharactersError": "This name cannot contain special characters. Please choose a different one.",
|
||||
"personalCode": "Personal Code",
|
||||
"teamOwnerPersonalCodeLabel": "Owner's Personal Code",
|
||||
"distributedBenefitsAmount": "Assigned benefits"
|
||||
"distributedBenefitsAmount": "Assigned benefits",
|
||||
"distributedBenefitsUnusedAmount": "Unused benefits"
|
||||
}
|
||||
|
||||
@@ -196,5 +196,6 @@
|
||||
"specialCharactersError": "Nimi ei tohi sisaldada erimärke. Palun vali mõni teine.",
|
||||
"personalCode": "Isikukood",
|
||||
"teamOwnerPersonalCodeLabel": "Omaniku isikukood",
|
||||
"distributedBenefitsAmount": "Väljastatud toetus"
|
||||
"distributedBenefitsAmount": "Väljastatud toetus",
|
||||
"distributedBenefitsUnusedAmount": "Jääk"
|
||||
}
|
||||
|
||||
@@ -196,5 +196,6 @@
|
||||
"specialCharactersError": "Это имя не может содержать специальные символы. Пожалуйста, выберите другое.",
|
||||
"personalCode": "Идентификационный код",
|
||||
"teamOwnerPersonalCodeLabel": "Идентификационный код владельца",
|
||||
"distributedBenefitsAmount": "Распределенные выплаты"
|
||||
"distributedBenefitsAmount": "Распределенные выплаты",
|
||||
"distributedBenefitsUnusedAmount": "Неиспользованные выплаты"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
DROP FUNCTION IF EXISTS medreport.get_benefits_usages_for_company_members(uuid);
|
||||
|
||||
CREATE OR REPLACE FUNCTION medreport.get_benefits_usages_for_company_members(p_account_id uuid)
|
||||
returns table (
|
||||
personal_account_id uuid,
|
||||
benefit_amount numeric,
|
||||
benefit_unused_amount numeric
|
||||
)
|
||||
language plpgsql
|
||||
as $$
|
||||
begin
|
||||
return query
|
||||
with benefit_recipient_accounts as (
|
||||
-- Find all personal accounts that have received benefits from this company
|
||||
select distinct account_id
|
||||
from medreport.account_balance_entries
|
||||
where source_company_id = p_account_id
|
||||
and entry_type = 'benefit'
|
||||
)
|
||||
select
|
||||
bra.account_id as personal_account_id,
|
||||
coalesce(sum(case when abe.entry_type = 'benefit' and abe.source_company_id = p_account_id then abe.amount else 0 end), 0) as benefit_amount,
|
||||
coalesce(sum(case when abe.entry_type = 'benefit' and abe.source_company_id = p_account_id then abe.amount when abe.entry_type = 'purchase' then abe.amount else 0 end), 0) as benefit_unused_amount
|
||||
from benefit_recipient_accounts bra
|
||||
left join medreport.account_balance_entries abe on abe.account_id = bra.account_id
|
||||
group by bra.account_id;
|
||||
end;
|
||||
$$;
|
||||
|
||||
grant execute on function medreport.get_benefits_usages_for_company_members(uuid) to authenticated, service_role;
|
||||
Reference in New Issue
Block a user