import React, { useMemo, useState } from "react"; import DatePicker from "../common/DatePicker"; import EmployeeSearchInput from "../common/EmployeeSearchInput"; import Label from "../common/Label"; import { zodResolver } from "@hookform/resolvers/zod"; import { defaultPRActionValues, PaymentRequestActionScheam, } from "./PaymentRequestSchema"; import { useActionOnPaymentRequest, usePaymentRequestDetail, } from "../../hooks/useExpense"; import { CREATE_EXEPENSE, EXPENSE_CREATE, EXPENSE_PROCESSED, EXPENSE_REJECTEDBY, PROCESS_EXPENSE, REVIEW_EXPENSE, } from "../../utils/constants"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { useNavigate } from "react-router-dom"; import { useForm } from "react-hook-form"; import { useSelector } from "react-redux"; import { usePaymentRequestContext } from "../../pages/PaymentRequest/PaymentRequestPage"; import { calculateTDSPercentage, localToUtc } from "../../utils/appUtils"; import { usePaymentMode } from "../../hooks/masterHook/useMaster"; import Filelist from "../Expenses/Filelist"; const ActionPaymentRequest = ({ requestId }) => { const { setIsExpenseGenerate, setVieRequest } = usePaymentRequestContext(); const { data, isLoading, isError, error, isFetching } = usePaymentRequestDetail(requestId); const [IsPaymentProcess, setIsPaymentProcess] = useState(false); const [clickedStatusId, setClickedStatusId] = useState(null); const { PaymentModes, loading: PaymentModeLoading, error: PaymentModeError, } = usePaymentMode(); const IsReview = useHasUserPermission(REVIEW_EXPENSE); const [imageLoaded, setImageLoaded] = useState({}); const isRejectedRequest = useMemo(() => { return EXPENSE_REJECTEDBY.includes(data?.status?.id); }, [data]); const isProccesed = useMemo(() => { return data?.expenseStatus?.id === EXPENSE_PROCESSED; }, [data]); const ActionSchema = PaymentRequestActionScheam(IsPaymentProcess, isProccesed) ?? z.object({}); const navigate = useNavigate(); const { register, handleSubmit, setValue, reset, control, watch, formState: { errors }, } = useForm({ resolver: zodResolver(ActionSchema), defaultValues: defaultPRActionValues, }); const baseAmount = watch("baseAmount") || 0; const taxAmount = watch("taxAmount") || 0; const tdsPercentage = watch("tdsPercentage") || 0; const { grossAmount, tdsAmount, netPayable } = useMemo(() => { return calculateTDSPercentage(baseAmount, taxAmount, tdsPercentage); }, [baseAmount, taxAmount, tdsPercentage]); const userPermissions = useSelector( (state) => state?.globalVariables?.loginUser?.featurePermissions || [] ); const CurrentUser = useSelector( (state) => state?.globalVariables?.loginUser?.employeeInfo ); const nextStatusWithPermission = useMemo(() => { if (!Array.isArray(data?.nextStatus)) return []; return data.nextStatus.filter((status) => { const permissionIds = Array.isArray(status?.permissionIds) ? status.permissionIds : []; if (permissionIds?.length === 0) return true; if (permissionIds.includes(PROCESS_EXPENSE)) { setIsPaymentProcess(true); } return permissionIds.some((id) => userPermissions.includes(id)); }); }, [data, userPermissions]); const isCreatedBy = useMemo(() => { return data?.createdBy?.id === CurrentUser?.id; }, [data, CurrentUser]); const { mutate: MakeAction, isPending } = useActionOnPaymentRequest(() => { setClickedStatusId(null); reset(); }); const onSubmit = (formData) => { const Payload = { ...formData, paidAt: localToUtc(formData.paidAt), paymentRequestId: data.id, comment: formData.comment, }; MakeAction(Payload); }; if (isLoading) return