Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ export const PermitRowOptions = ({
navigate(routes.ERROR_ROUTES.DOCUMENT_UNAVAILABLE),
);
} else if (selectedOption === PERMIT_ACTION_TYPES.VOID_REVOKE) {
navigate(`${routes.PERMITS_ROUTES.VOID(companyId, permitId)}`);
navigate(`${routes.PERMITS_ROUTES.VOID(companyId, permitId)}`, {
state: { permitActionOrigin },
});
} else if (selectedOption === PERMIT_ACTION_TYPES.AMEND) {
// Sets the companyId and permitId of the permit to be amended,
// which will in turn look for any existing associated amendment applications,
Expand Down
3 changes: 3 additions & 0 deletions frontend/src/features/permits/hooks/useAttemptAmend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export const useAttemptAmend = (permitActionOrigin: PermitActionOrigin) => {
};

const { mutateAsync: deleteApplications } = useDeleteApplicationsMutation();

const deleteAmendmentApplication = async (
companyOfAmendment: number,
amendmentApplicationId: string,
Expand All @@ -71,6 +72,7 @@ export const useAttemptAmend = (permitActionOrigin: PermitActionOrigin) => {
};

const existingAmendmentApplicationId = existingAmendmentApplication?.permitId;

const handleStartNewAmendment = useCallback(async () => {
if (existingAmendmentApplicationId) {
const deleteExistingResult = await deleteAmendmentApplication(
Expand Down Expand Up @@ -117,5 +119,6 @@ export const useAttemptAmend = (permitActionOrigin: PermitActionOrigin) => {
handleCloseModal,
handleStartNewAmendment,
handleContinueAmendment,
deleteAmendmentApplication,
};
};
46 changes: 35 additions & 11 deletions frontend/src/features/permits/pages/Void/FinishVoid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,34 @@ import { useParams } from "react-router-dom";
import { VoidPermitContext } from "./context/VoidPermitContext";
import { RefundFormData } from "../Refund/types/RefundFormData";
import { Permit } from "../../types/permit";
import { usePermitHistoryQuery } from "../../hooks/hooks";
import {
useAmendmentApplicationQuery,
usePermitHistoryQuery,
} from "../../hooks/hooks";
import { calculateAmountForVoid } from "../../helpers/feeSummary";
import { PERMIT_REFUND_ACTIONS, RefundPage } from "../Refund/RefundPage";
import { mapToVoidRequestData } from "./helpers/mapper";
import { useVoidPermit } from "./hooks/useVoidPermit";
import { isValidTransaction } from "../../helpers/payment";
import { Nullable } from "../../../../common/types/common";
import { hasPermitsActionFailed } from "../../helpers/permitState";
import { applyWhenNotNullable, getDefaultRequiredVal } from "../../../../common/helpers/util";
import {
applyWhenNotNullable,
getDefaultRequiredVal,
} from "../../../../common/helpers/util";
import { useAttemptAmend } from "../../hooks/useAttemptAmend";
import { PermitActionOrigin } from "../../../idir/search/types/types";

export const FinishVoid = ({
permit,
onSuccess,
onFail,
permitActionOrigin,
}: {
permit: Nullable<Permit>;
onSuccess: () => void;
onFail: () => void;
permitActionOrigin: PermitActionOrigin;
}) => {
const { voidPermitData } = useContext(VoidPermitContext);
const { companyId: companyIdParam } = useParams();
Expand All @@ -30,15 +40,12 @@ export const FinishVoid = ({
const companyId: number = getDefaultRequiredVal(
0,
permit?.companyId,
applyWhenNotNullable(id => Number(id), companyIdParam),
applyWhenNotNullable((id) => Number(id), companyIdParam),
);

const originalPermitId = getDefaultRequiredVal("", permit?.originalPermitId);

const permitHistoryQuery = usePermitHistoryQuery(
companyId,
originalPermitId,
);
const permitHistoryQuery = usePermitHistoryQuery(companyId, originalPermitId);

const permitHistory = getDefaultRequiredVal([], permitHistoryQuery.data);

Expand All @@ -48,9 +55,10 @@ export const FinishVoid = ({
isValidTransaction(history.paymentMethodTypeCode, history.pgApproved),
);

const amountToRefund = !permit || transactionHistory.length === 0
? 0
: -1 * calculateAmountForVoid(permit, transactionHistory);
const amountToRefund =
!permit || transactionHistory.length === 0
? 0
: -1 * calculateAmountForVoid(permit, transactionHistory);

const { mutation: voidPermitMutation, voidResults } = useVoidPermit();

Expand All @@ -64,7 +72,23 @@ export const FinishVoid = ({
}
}, [voidResults]);

const handleFinish = (refundData: RefundFormData) => {
const { deleteAmendmentApplication } = useAttemptAmend(permitActionOrigin);

const { data: existingAmendmentApplication } = useAmendmentApplicationQuery(
companyId,
originalPermitId,
);

const existingAmendmentApplicationId = existingAmendmentApplication?.permitId;

const handleFinish = async (refundData: RefundFormData) => {
// if there is an amendment in progress for this application, delete it. This will prevent existing application errors from the backend when attempting to complete the void transaction
if (existingAmendmentApplicationId) {
await deleteAmendmentApplication(
companyId,
existingAmendmentApplicationId,
);
}
const requestData = mapToVoidRequestData(
voidPermitData,
refundData,
Expand Down
40 changes: 36 additions & 4 deletions frontend/src/features/permits/pages/Void/VoidPermit.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { Navigate, useNavigate, useParams } from "react-router-dom";
import {
Navigate,
useLocation,
useNavigate,
useParams,
} from "react-router-dom";
import { useState, useEffect, useMemo } from "react";

import { VoidPermitForm } from "./components/VoidPermitForm";
Expand All @@ -7,7 +12,11 @@ import { Loading } from "../../../../common/pages/Loading";
import "./VoidPermit.scss";
import { Banner } from "../../../../common/components/dashboard/components/banner/Banner";
import { VoidPermitContext } from "./context/VoidPermitContext";
import { ERROR_ROUTES, IDIR_ROUTES } from "../../../../routes/constants";
import {
APPLICATIONS_ROUTES,
ERROR_ROUTES,
IDIR_ROUTES,
} from "../../../../routes/constants";
import { VoidPermitFormData } from "./types/VoidPermit";
import { FinishVoid } from "./FinishVoid";
import { isPermitInactive } from "../../types/PermitStatus";
Expand All @@ -19,10 +28,12 @@ import {
import { Breadcrumb } from "../../../../common/components/breadcrumb/Breadcrumb";
import { hasPermitExpired } from "../../helpers/permitState";
import {
PERMIT_ACTION_ORIGINS,
SEARCH_BY_FILTERS,
SEARCH_ENTITIES,
} from "../../../idir/search/types/types";
import { usePermissionMatrix } from "../../../../common/authentication/PermissionMatrix";
import { PERMIT_TABS } from "../../types/PermitTabs";

const searchRoute =
`${IDIR_ROUTES.SEARCH_RESULTS}?searchEntity=${SEARCH_ENTITIES.PERMIT}` +
Expand All @@ -37,6 +48,9 @@ const isVoidable = (permit: Permit) => {

export const VoidPermit = () => {
const navigate = useNavigate();
const { state: stateFromNavigation } = useLocation();
const { permitActionOrigin } = stateFromNavigation;

const { permitId: permitIdParam, companyId: companyIdParam } = useParams();

const companyId: number = applyWhenNotNullable(
Expand Down Expand Up @@ -77,8 +91,25 @@ export const VoidPermit = () => {
};

const fullSearchRoute = `${searchRoute}&searchString=${getBasePermitNumber()}`;
const goHome = () => navigate(-1);
const goHomeSuccess = () => navigate(fullSearchRoute);
const goHome = () =>
permitActionOrigin === PERMIT_ACTION_ORIGINS.ACTIVE_PERMITS
? navigate(APPLICATIONS_ROUTES.BASE, {
state: {
selectedTab: PERMIT_TABS.ACTIVE_PERMITS,
},
})
: // return to global permit search results
navigate(-1);

const goHomeSuccess = () =>
permitActionOrigin === PERMIT_ACTION_ORIGINS.ACTIVE_PERMITS
? navigate(APPLICATIONS_ROUTES.BASE, {
state: {
selectedTab: PERMIT_TABS.ACTIVE_PERMITS,
},
})
: // return to global permit search results
navigate(fullSearchRoute);
const handleFail = () => navigate(ERROR_ROUTES.UNEXPECTED);

const getLinks = () =>
Expand Down Expand Up @@ -155,6 +186,7 @@ export const VoidPermit = () => {
permit={permit}
onSuccess={goHomeSuccess}
onFail={handleFail}
permitActionOrigin={permitActionOrigin}
/>,
];

Expand Down
Loading