Skip to content

Commit

Permalink
feat: add alteration count and state to archive listing (#3198)
Browse files Browse the repository at this point in the history
* feat(handler): add alteration state and number to archive list

* feat(backend): simple serializer for listing alterations
  • Loading branch information
sirtawast authored Aug 9, 2024
1 parent 46dfc21 commit 09a645e
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from applications.api.v1.serializers.application_alteration import (
ApplicantApplicationAlterationSerializer,
HandlerApplicationAlterationSerializer,
SimpleApplicationAlterationSerializer,
)
from applications.api.v1.serializers.attachment import AttachmentSerializer
from applications.api.v1.serializers.batch import ApplicationBatchSerializer
Expand Down Expand Up @@ -1858,6 +1859,7 @@ class Meta:
"handler",
"additional_information_needed_by",
"calculation",
"alterations",
]

read_only_fields = [
Expand All @@ -1875,12 +1877,19 @@ class Meta:
"additional_information_needed_by",
"handler",
"calculation",
"alterations",
]

additional_information_needed_by = serializers.SerializerMethodField(
"get_additional_information_needed_by"
)

alterations = SimpleApplicationAlterationSerializer(
source="alteration_set",
read_only=True,
many=True,
)

handled_at = serializers.SerializerMethodField(
"get_handled_at",
help_text=(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
from users.utils import get_company_from_request, get_request_user_from_context


class SimpleApplicationAlterationSerializer(DynamicFieldsModelSerializer):
class Meta:
model = ApplicationAlteration
fields = ["state"]
read_only_fields = ["state"]


class BaseApplicationAlterationSerializer(DynamicFieldsModelSerializer):
class Meta:
model = ApplicationAlteration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,21 @@ export const $UnreadMessagesCount = styled.div`
color: ${(props) => props.theme.colors.white};
background-color: ${(props) => props.theme.colors.coatOfArms};
`;

interface $AlterationBadgeProps {
$requiresAttention?: boolean;
}
export const $AlterationBadge = styled.div<$AlterationBadgeProps>`
background: ${(props) =>
props.$requiresAttention
? props.theme.colors.coatOfArms
: props.theme.colors.black40};
color: ${({ theme }) => theme.colors.white};
font-size: 14px;
line-height: 1;
width: 14px;
height: 14px;
text-align: center;
padding: 0.3rem 0.35rem;
border-radius: 50%;
`;
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { getTagStyleForStatus } from 'benefit/handler/utils/applications';
import { APPLICATION_STATUSES } from 'benefit-shared/constants';
import { ApplicationData } from 'benefit-shared/types/application';
import {
ALTERATION_STATE,
APPLICATION_STATUSES,
} from 'benefit-shared/constants';
import {
ApplicationAlterationData,
ApplicationData,
} from 'benefit-shared/types/application';
import { IconAlertCircle, IconCheck, IconCross, Table, Tag } from 'hds-react';
import { useTranslation } from 'next-i18next';
import * as React from 'react';
Expand All @@ -9,7 +15,10 @@ import { $Link } from 'shared/components/table/Table.sc';
import { sortFinnishDate } from 'shared/utils/date.utils';
import { useTheme } from 'styled-components';

import { $TagWrapper } from '../applicationList/ApplicationList.sc';
import {
$AlterationBadge,
$TagWrapper,
} from '../applicationList/ApplicationList.sc';
import { $ArchiveCount, $CompanyNameDisabled } from './ApplicationsArchive.sc';
import { prepareSearchData } from './useApplicationsArchive';

Expand Down Expand Up @@ -42,6 +51,7 @@ const ApplicationArchiveList: React.FC<SearchProps> = ({
id: string;
companyName: string;
status: APPLICATION_STATUSES;
alterations: ApplicationAlterationData[];
}

const rows = React.useMemo(() => prepareSearchData(data), [data]);
Expand Down Expand Up @@ -117,6 +127,22 @@ const ApplicationArchiveList: React.FC<SearchProps> = ({
isSortable: true,
customSortCompareFunction: sortByStatus,
},
{
transform: ({ alterations }: TableTransforms) =>
alterations.length > 0 && (
<$AlterationBadge
$requiresAttention={alterations.some(({ state }) =>
[ALTERATION_STATE.RECEIVED, ALTERATION_STATE.OPENED].includes(
state
)
)}
>
{alterations.length}
</$AlterationBadge>
),
headerName: '',
key: 'alterations',
},
];

const hasSearchLoadedWithResults = !isSearchLoading && data.length > 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export const prepareSearchData = (
application_number: applicationNum,
status,
calculation,
alterations,
} = application;

return {
Expand All @@ -62,6 +63,7 @@ export const prepareSearchData = (
'-',
handledAt: convertToUIDateFormat(handled_at) || '-',
applicationNum,
alterations,
calculationEndDate:
convertToUIDateFormat(calculation?.end_date) || '-',
};
Expand Down
2 changes: 2 additions & 0 deletions frontend/benefit/shared/src/types/application.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ export type ApplicationData = {
archived_for_applicant?: boolean;
is_granted_as_de_minimis_aid?: boolean | null;
handled_by_ahjo_automation?: boolean;
alterations: ApplicationAlterationData[];
};

export type EmployeeData = {
Expand Down Expand Up @@ -551,6 +552,7 @@ export type ApplicationListItemData = {
ahjoCaseId?: string;
calculationEndDate?: string;
handledByAhjoAutomation?: boolean;
alterations?: ApplicationAlterationData[];
};

export type TextProp = 'textFi' | 'textEn' | 'textSv';
Expand Down

0 comments on commit 09a645e

Please sign in to comment.