From 69f3d42409e25e138203d87dc290e12e492ea97d Mon Sep 17 00:00:00 2001 From: GlenAOT <160973940+GlenAOT@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:47:02 -0700 Subject: [PATCH 1/5] implement ReviewApplicationRejectionHistory.tsx component --- .../permits/helpers/deserializeApplication.ts | 8 ++- .../components/review/PermitReview.tsx | 13 ++++- .../ReviewApplicationRejectionHistory.scss | 21 +++++++ .../ReviewApplicationRejectionHistory.tsx | 58 +++++++++++++++++++ .../types/ApplicationRejectionHistory.ts | 8 +++ .../src/features/permits/types/application.ts | 2 + .../components/ApplicationInQueueReview.tsx | 1 + .../src/common/constants/permit.constant.ts | 1 + 8 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.scss create mode 100644 frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx create mode 100644 frontend/src/features/permits/types/ApplicationRejectionHistory.ts diff --git a/frontend/src/features/permits/helpers/deserializeApplication.ts b/frontend/src/features/permits/helpers/deserializeApplication.ts index 47486ff2c..08f9f9e0d 100644 --- a/frontend/src/features/permits/helpers/deserializeApplication.ts +++ b/frontend/src/features/permits/helpers/deserializeApplication.ts @@ -2,7 +2,13 @@ import { Dayjs } from "dayjs"; import { applyWhenNotNullable } from "../../../common/helpers/util"; import { Application, ApplicationResponseData } from "../types/application"; -import { getEndOfDate, getStartOfDate, now, toLocalDayjs, utcToLocalDayjs } from "../../../common/helpers/formatDate"; +import { + getEndOfDate, + getStartOfDate, + now, + toLocalDayjs, + utcToLocalDayjs, +} from "../../../common/helpers/formatDate"; import { getDurationOrDefault } from "./getDefaultApplicationFormData"; import { getExpiryDate } from "./permitState"; import { minDurationForPermitType } from "./dateSelection"; diff --git a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx index e91c28ca2..37107d4a8 100644 --- a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx +++ b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx @@ -23,6 +23,8 @@ import { PERMIT_REVIEW_CONTEXTS, PermitReviewContext, } from "../../../../types/PermitReviewContext"; +import { ApplicationRejectionHistory } from "../../../../types/ApplicationRejectionHistory"; +import { ReviewApplicationRejectionHistory } from "./ReviewApplicationRejectionHistory"; interface PermitReviewProps { reviewContext: PermitReviewContext; @@ -59,6 +61,7 @@ interface PermitReviewProps { calculatedFee: string; doingBusinessAs?: Nullable; loas?: Nullable; + applicationRejectionHistory?: Nullable; } export const PermitReview = (props: PermitReviewProps) => { @@ -86,9 +89,7 @@ export const PermitReview = (props: PermitReviewProps) => { oldFields={props.oldFields?.permitData?.contactDetails} /> - + { oldFields={props.oldFields?.permitData?.vehicleDetails} /> + {props.applicationRejectionHistory && ( + + )} + { + const { idirUserDetails } = useContext(OnRouteBCContext); + + const reversedApplicationRejectionHistory = applicationRejectionHistory + .slice() + .reverse(); + + return ( + + + + Rejection History + + + + + {reversedApplicationRejectionHistory.map((item) => ( + +
+ + {canViewApplicationQueue(idirUserDetails?.userRole) + ? `${item.userName}, ${dayjsToLocalStr(item.dateTime, DATE_FORMATS.LONG)}` + : dayjsToLocalStr(item.dateTime, DATE_FORMATS.LONG)} + +
+
+ {item.caseNotes} +
+
+ ))} +
+
+
+ ); +}; diff --git a/frontend/src/features/permits/types/ApplicationRejectionHistory.ts b/frontend/src/features/permits/types/ApplicationRejectionHistory.ts new file mode 100644 index 000000000..5bdfa20be --- /dev/null +++ b/frontend/src/features/permits/types/ApplicationRejectionHistory.ts @@ -0,0 +1,8 @@ +import { Dayjs } from "dayjs"; + +export interface ApplicationRejectionHistory { + caseActivityId: number; + userName: string; + dateTime: Dayjs; + caseNotes: string; +} diff --git a/frontend/src/features/permits/types/application.ts b/frontend/src/features/permits/types/application.ts index fb4a0314c..49973bd47 100644 --- a/frontend/src/features/permits/types/application.ts +++ b/frontend/src/features/permits/types/application.ts @@ -8,6 +8,7 @@ import { PermitApplicationOrigin } from "./PermitApplicationOrigin"; import { PermitApprovalSource } from "./PermitApprovalSource"; import { PermitData } from "./PermitData"; import { ApplicationQueueStatus } from "../../queue/types/ApplicationQueueStatus"; +import { ApplicationRejectionHistory } from "./ApplicationRejectionHistory"; /** * A partial permit type that consists of all common fields used for a permit. @@ -39,6 +40,7 @@ export interface Application extends PartialApplication { updatedDateTime?: Nullable; permitData: PermitData; applicant?: Nullable; + rejectionHistory?: Nullable; } /** diff --git a/frontend/src/features/queue/components/ApplicationInQueueReview.tsx b/frontend/src/features/queue/components/ApplicationInQueueReview.tsx index 075f8de46..f45fedfbd 100644 --- a/frontend/src/features/queue/components/ApplicationInQueueReview.tsx +++ b/frontend/src/features/queue/components/ApplicationInQueueReview.tsx @@ -145,6 +145,7 @@ export const ApplicationInQueueReview = ({ } doingBusinessAs={doingBusinessAs} calculatedFee={fee} + applicationRejectionHistory={applicationData?.rejectionHistory} /> diff --git a/vehicles/src/common/constants/permit.constant.ts b/vehicles/src/common/constants/permit.constant.ts index c1e5804ae..e958dbb4b 100644 --- a/vehicles/src/common/constants/permit.constant.ts +++ b/vehicles/src/common/constants/permit.constant.ts @@ -11,4 +11,5 @@ export const TROW_MAX_VALID_DURATION = 366; export const PERMIT_TYPES_FOR_QUEUE: readonly PermitType[] = [ PermitType.SINGLE_TRIP_OVERSIZE, + PermitType.TERM_OVERSIZE, ]; From 3ef916163b03448f39437f1c66f702783e90f3e9 Mon Sep 17 00:00:00 2001 From: GlenAOT <160973940+GlenAOT@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:06:36 -0700 Subject: [PATCH 2/5] remove TROS from PERMIT_TYPES_FOR_QUEUE --- vehicles/src/common/constants/permit.constant.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/vehicles/src/common/constants/permit.constant.ts b/vehicles/src/common/constants/permit.constant.ts index e958dbb4b..c1e5804ae 100644 --- a/vehicles/src/common/constants/permit.constant.ts +++ b/vehicles/src/common/constants/permit.constant.ts @@ -11,5 +11,4 @@ export const TROW_MAX_VALID_DURATION = 366; export const PERMIT_TYPES_FOR_QUEUE: readonly PermitType[] = [ PermitType.SINGLE_TRIP_OVERSIZE, - PermitType.TERM_OVERSIZE, ]; From 4640501750e2d56084b4aeb4963b3d8ffcc6514c Mon Sep 17 00:00:00 2001 From: GlenAOT <160973940+GlenAOT@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:17:00 -0700 Subject: [PATCH 3/5] PR review changes --- .../components/review/PermitReview.tsx | 7 ++++- .../ReviewApplicationRejectionHistory.tsx | 28 ++++++++++++++----- .../types/ApplicationRejectionHistory.ts | 4 +-- .../src/common/constants/permit.constant.ts | 2 ++ 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx index 7c3e67433..bc0abc9e6 100644 --- a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx +++ b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx @@ -63,6 +63,11 @@ interface PermitReviewProps { } export const PermitReview = (props: PermitReviewProps) => { + const shouldShowRejectionHistory = + props.reviewContext === PERMIT_REVIEW_CONTEXTS.QUEUE && + props.applicationRejectionHistory && + props.applicationRejectionHistory.length > 0; + return ( @@ -108,7 +113,7 @@ export const PermitReview = (props: PermitReviewProps) => { oldFields={props.oldFields?.permitData?.vehicleDetails} /> - {props.applicationRejectionHistory && ( + {shouldShowRejectionHistory && props.applicationRejectionHistory && ( diff --git a/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx b/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx index 8b9d790ec..d8943bed2 100644 --- a/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx +++ b/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx @@ -4,11 +4,13 @@ import { ApplicationRejectionHistory } from "../../../../types/ApplicationReject import "./ReviewApplicationRejectionHistory.scss"; import { DATE_FORMATS, - dayjsToLocalStr, + toLocal, } from "../../../../../../common/helpers/formatDate"; import { canViewApplicationQueue } from "../../../../../queue/helpers/canViewApplicationQueue"; import { useContext } from "react"; import OnRouteBCContext from "../../../../../../common/authentication/OnRouteBCContext"; +import { useMemoizedArray } from "../../../../../../common/hooks/useMemoizedArray"; +import dayjs from "dayjs"; export const ReviewApplicationRejectionHistory = ({ applicationRejectionHistory, @@ -17,9 +19,21 @@ export const ReviewApplicationRejectionHistory = ({ }) => { const { idirUserDetails } = useContext(OnRouteBCContext); - const reversedApplicationRejectionHistory = applicationRejectionHistory - .slice() - .reverse(); + const sortRejectionHistoryByDate = ( + history: ApplicationRejectionHistory[], + ): ApplicationRejectionHistory[] => { + return history.slice().sort((current, next) => { + const curentDate = dayjs(current.dateTime); + const nextDate = dayjs(next.dateTime); + return nextDate.valueOf() - curentDate.valueOf(); + }); + }; + + const reversedApplicationRejectionHistory = useMemoizedArray( + sortRejectionHistoryByDate(applicationRejectionHistory), + (rejectionHistoryItem) => rejectionHistoryItem.caseActivityId, + (current, next) => current === next, + ); return ( @@ -34,7 +48,7 @@ export const ReviewApplicationRejectionHistory = ({ - {reversedApplicationRejectionHistory.map((item) => ( + {applicationRejectionHistory.map((item) => ( {canViewApplicationQueue(idirUserDetails?.userRole) - ? `${item.userName}, ${dayjsToLocalStr(item.dateTime, DATE_FORMATS.LONG)}` - : dayjsToLocalStr(item.dateTime, DATE_FORMATS.LONG)} + ? `${item.userName}, ${toLocal(item.dateTime, DATE_FORMATS.LONG)}` + : toLocal(item.dateTime, DATE_FORMATS.LONG)}
diff --git a/frontend/src/features/permits/types/ApplicationRejectionHistory.ts b/frontend/src/features/permits/types/ApplicationRejectionHistory.ts index 5bdfa20be..1551fb95c 100644 --- a/frontend/src/features/permits/types/ApplicationRejectionHistory.ts +++ b/frontend/src/features/permits/types/ApplicationRejectionHistory.ts @@ -1,8 +1,6 @@ -import { Dayjs } from "dayjs"; - export interface ApplicationRejectionHistory { caseActivityId: number; userName: string; - dateTime: Dayjs; + dateTime: string; caseNotes: string; } diff --git a/vehicles/src/common/constants/permit.constant.ts b/vehicles/src/common/constants/permit.constant.ts index c1e5804ae..5226e3253 100644 --- a/vehicles/src/common/constants/permit.constant.ts +++ b/vehicles/src/common/constants/permit.constant.ts @@ -11,4 +11,6 @@ export const TROW_MAX_VALID_DURATION = 366; export const PERMIT_TYPES_FOR_QUEUE: readonly PermitType[] = [ PermitType.SINGLE_TRIP_OVERSIZE, + // TODO remove this + PermitType.TERM_OVERSIZE, ]; From 7def4031eee8c8558c9b866f299201b4878ed00f Mon Sep 17 00:00:00 2001 From: GlenAOT <160973940+GlenAOT@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:14:51 -0700 Subject: [PATCH 4/5] remove reversal of applicationRejectionHistory array --- .../ReviewApplicationRejectionHistory.tsx | 20 ------------------- .../src/common/constants/permit.constant.ts | 2 -- 2 files changed, 22 deletions(-) diff --git a/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx b/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx index d8943bed2..123a978c4 100644 --- a/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx +++ b/frontend/src/features/permits/pages/Application/components/review/ReviewApplicationRejectionHistory.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { Box, Typography } from "@mui/material"; import { ApplicationRejectionHistory } from "../../../../types/ApplicationRejectionHistory"; import "./ReviewApplicationRejectionHistory.scss"; @@ -9,8 +8,6 @@ import { import { canViewApplicationQueue } from "../../../../../queue/helpers/canViewApplicationQueue"; import { useContext } from "react"; import OnRouteBCContext from "../../../../../../common/authentication/OnRouteBCContext"; -import { useMemoizedArray } from "../../../../../../common/hooks/useMemoizedArray"; -import dayjs from "dayjs"; export const ReviewApplicationRejectionHistory = ({ applicationRejectionHistory, @@ -18,23 +15,6 @@ export const ReviewApplicationRejectionHistory = ({ applicationRejectionHistory: ApplicationRejectionHistory[]; }) => { const { idirUserDetails } = useContext(OnRouteBCContext); - - const sortRejectionHistoryByDate = ( - history: ApplicationRejectionHistory[], - ): ApplicationRejectionHistory[] => { - return history.slice().sort((current, next) => { - const curentDate = dayjs(current.dateTime); - const nextDate = dayjs(next.dateTime); - return nextDate.valueOf() - curentDate.valueOf(); - }); - }; - - const reversedApplicationRejectionHistory = useMemoizedArray( - sortRejectionHistoryByDate(applicationRejectionHistory), - (rejectionHistoryItem) => rejectionHistoryItem.caseActivityId, - (current, next) => current === next, - ); - return ( diff --git a/vehicles/src/common/constants/permit.constant.ts b/vehicles/src/common/constants/permit.constant.ts index 5226e3253..c1e5804ae 100644 --- a/vehicles/src/common/constants/permit.constant.ts +++ b/vehicles/src/common/constants/permit.constant.ts @@ -11,6 +11,4 @@ export const TROW_MAX_VALID_DURATION = 366; export const PERMIT_TYPES_FOR_QUEUE: readonly PermitType[] = [ PermitType.SINGLE_TRIP_OVERSIZE, - // TODO remove this - PermitType.TERM_OVERSIZE, ]; From 6a67ac941e182efced86c4fc20dd02080010ea94 Mon Sep 17 00:00:00 2001 From: GlenAOT <160973940+GlenAOT@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:35:48 -0700 Subject: [PATCH 5/5] resolve conflicts --- .../pages/Application/components/review/PermitReview.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx index 8ef218dd9..3c7d72ea0 100644 --- a/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx +++ b/frontend/src/features/permits/pages/Application/components/review/PermitReview.tsx @@ -24,6 +24,7 @@ import { ReviewPermitLOAs } from "./ReviewPermitLOAs"; import { ReviewVehicleInfo } from "./ReviewVehicleInfo"; import { ApplicationRejectionHistory } from "../../../../types/ApplicationRejectionHistory"; import { ReviewApplicationRejectionHistory } from "./ReviewApplicationRejectionHistory"; +import { isPermitStartOrExpiryDateInPast } from "../../../../helpers/dateSelection"; interface PermitReviewProps { reviewContext: PermitReviewContext; @@ -68,6 +69,14 @@ export const PermitReview = (props: PermitReviewProps) => { props.applicationRejectionHistory && props.applicationRejectionHistory.length > 0; + const invalidPermitDates = + props.permitStartDate && props.permitExpiryDate + ? isPermitStartOrExpiryDateInPast( + props.permitStartDate, + props.permitExpiryDate, + ) + : false; + return (