66import { expenseTypePipe } from '../../../utils/pipes' ;
77import { Edit } from '@mui/icons-material' ;
88import CheckIcon from '@mui/icons-material/Check' ;
9+ import CloseIcon from '@mui/icons-material/Close' ;
910import ConfirmationNumberIcon from '@mui/icons-material/ConfirmationNumber' ;
1011import DeleteIcon from '@mui/icons-material/Delete' ;
1112import LocalShippingIcon from '@mui/icons-material/LocalShipping' ;
@@ -18,7 +19,11 @@ import ActionsMenu, { ButtonInfo } from '../../../components/ActionsMenu';
1819import NERModal from '../../../components/NERModal' ;
1920import PageLayout from '../../../components/PageLayout' ;
2021import VerticalDetailDisplay from '../../../components/VerticalDetailDisplay' ;
21- import { useDeleteReimbursementRequest , useMarkReimbursementRequestAsDelivered } from '../../../hooks/finance.hooks' ;
22+ import {
23+ useDeleteReimbursementRequest ,
24+ useDenyReimbursementRequest ,
25+ useMarkReimbursementRequestAsDelivered
26+ } from '../../../hooks/finance.hooks' ;
2227import { useToast } from '../../../hooks/toasts.hooks' ;
2328import { useCurrentUser } from '../../../hooks/users.hooks' ;
2429import {
@@ -32,6 +37,7 @@ import {
3237import {
3338 imagePreviewUrl ,
3439 isReimbursementRequestAdvisorApproved ,
40+ isReimbursementRequestReimbursed ,
3541 isReimbursementRequestSaboSubmitted
3642} from '../../../utils/reimbursement-request.utils' ;
3743import { routes } from '../../../utils/routes' ;
@@ -51,11 +57,13 @@ const ReimbursementRequestDetailsView: React.FC<ReimbursementRequestDetailsViewP
5157 const [ addSaboNumberModalShow , setAddSaboNumberModalShow ] = useState < boolean > ( false ) ;
5258 const toast = useToast ( ) ;
5359 const [ showDeleteModal , setShowDeleteModal ] = useState ( false ) ;
60+ const [ showDenyModal , setShowDenyModal ] = useState ( false ) ;
5461 const [ showMarkDelivered , setShowMarkDelivered ] = useState ( false ) ;
5562 const [ showSubmitToSaboModal , setShowSubmitToSaboModal ] = useState ( false ) ;
5663 const { mutateAsync : deleteReimbursementRequest } = useDeleteReimbursementRequest (
5764 reimbursementRequest . reimbursementRequestId
5865 ) ;
66+ const { mutateAsync : denyReimbursementRequest } = useDenyReimbursementRequest ( reimbursementRequest . reimbursementRequestId ) ;
5967 const { mutateAsync : markDelivered } = useMarkReimbursementRequestAsDelivered ( reimbursementRequest . reimbursementRequestId ) ;
6068
6169 const handleDelete = ( ) => {
@@ -69,6 +77,16 @@ const ReimbursementRequestDetailsView: React.FC<ReimbursementRequestDetailsViewP
6977 }
7078 } ;
7179
80+ const handleDeny = ( ) => {
81+ try {
82+ denyReimbursementRequest ( ) ;
83+ } catch ( e : unknown ) {
84+ if ( e instanceof Error ) {
85+ toast . error ( e . message , 3000 ) ;
86+ }
87+ }
88+ } ;
89+
7290 const handleMarkDelivered = ( ) => {
7391 try {
7492 markDelivered ( ) ;
@@ -95,6 +113,21 @@ const ReimbursementRequestDetailsView: React.FC<ReimbursementRequestDetailsViewP
95113 ) ;
96114 } ;
97115
116+ const DenyModal = ( ) => {
117+ return (
118+ < NERModal
119+ open = { showDenyModal }
120+ onHide = { ( ) => setShowDenyModal ( false ) }
121+ title = "Warning!"
122+ cancelText = "No"
123+ submitText = "Yes"
124+ onSubmit = { handleDeny }
125+ >
126+ < Typography > Are you sure you want to deny this reimbursement request?</ Typography >
127+ </ NERModal >
128+ ) ;
129+ } ;
130+
98131 const MarkDeliveredModal = ( ) => (
99132 < NERModal
100133 open = { showMarkDelivered }
@@ -219,6 +252,12 @@ const ReimbursementRequestDetailsView: React.FC<ReimbursementRequestDetailsViewP
219252 onClick : ( ) => setShowSubmitToSaboModal ( true ) ,
220253 icon : < CheckIcon /> ,
221254 disabled : ! user . isFinance || isReimbursementRequestSaboSubmitted ( reimbursementRequest )
255+ } ,
256+ {
257+ title : 'Deny' ,
258+ onClick : ( ) => setShowDenyModal ( true ) ,
259+ icon : < CloseIcon /> ,
260+ disabled : ! user . isFinance || isReimbursementRequestReimbursed ( reimbursementRequest )
222261 }
223262 ] ;
224263
@@ -234,6 +273,7 @@ const ReimbursementRequestDetailsView: React.FC<ReimbursementRequestDetailsViewP
234273 headerRight = { < ActionsMenu buttons = { buttons } /> }
235274 >
236275 < DeleteModal />
276+ < DenyModal />
237277 < MarkDeliveredModal />
238278 < SubmitToSaboModal
239279 open = { showSubmitToSaboModal }
0 commit comments