From 61e49393fef74b1e8d983b052f1595740203081d Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:54:23 +0530 Subject: [PATCH] update Io Cash Nav Transaction --- src/Components/Loaders/FullscreenLoaders.jsx | 6 +- .../ApproveRequest/ApproveRequest.jsx | 2 +- .../IO_Management/CreateIO/AddCashDetails.jsx | 4 +- .../IO_Management/CreateIO/Destribution.jsx | 248 ++++---- .../{AddApproved.jsx => AddCaseDetails.jsx} | 9 +- .../CreateIO/IOCashDetails/Approved.jsx | 116 ++-- .../CreateIO/IOCashDetails/Pending.jsx | 146 +++-- .../CreateIO/IOCashDetails/Rejected.jsx | 15 +- .../IOCashDetails/RequestApproveModal.jsx | 176 ++++++ .../IOCashDetails/RequestRejectModal.jsx | 164 ++++++ .../CreateIO/IONAVDetails/AddApproved.jsx | 251 -------- .../{AddPending.jsx => AddNavDetails.jsx} | 116 ++-- .../CreateIO/IONAVDetails/AddRejected.jsx | 251 -------- .../CreateIO/IONAVDetails/Approved.jsx | 65 +- .../CreateIO/IONAVDetails/Pending.jsx | 553 ++++++++++-------- .../CreateIO/IONAVDetails/Rejected.jsx | 53 +- .../IONAVDetails/RequestApproveModal.jsx | 176 ++++++ .../IONAVDetails/RequestRejectModal.jsx | 164 ++++++ .../CreateIO/IOTransaction/Approved.jsx | 8 +- .../CreateIO/IOTransaction/Pending.jsx | 57 +- .../CreateIO/IOTransaction/Rejected.jsx | 18 +- .../IOTransaction/RequestApproveModal.jsx | 175 ++++++ .../IOTransaction/RequestExitApproveModal.jsx | 176 ++++++ .../IOTransaction/RequestRejectModal.jsx | 164 ++++++ .../HeaderModal/DistributionInvestor.jsx | 99 +++- .../IO_Management/ViewIO/HeaderModal/Exit.jsx | 92 +-- .../IO_Management/ViewIO/ViewIOdataHeader.jsx | 71 ++- src/Services/io.service.js | 195 ++++-- 28 files changed, 2350 insertions(+), 1220 deletions(-) rename src/Pages/IO_Management/CreateIO/IOCashDetails/{AddApproved.jsx => AddCaseDetails.jsx} (97%) create mode 100644 src/Pages/IO_Management/CreateIO/IOCashDetails/RequestApproveModal.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IOCashDetails/RequestRejectModal.jsx delete mode 100644 src/Pages/IO_Management/CreateIO/IONAVDetails/AddApproved.jsx rename src/Pages/IO_Management/CreateIO/IONAVDetails/{AddPending.jsx => AddNavDetails.jsx} (67%) delete mode 100644 src/Pages/IO_Management/CreateIO/IONAVDetails/AddRejected.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IONAVDetails/RequestApproveModal.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IONAVDetails/RequestRejectModal.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IOTransaction/RequestApproveModal.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IOTransaction/RequestExitApproveModal.jsx create mode 100644 src/Pages/IO_Management/CreateIO/IOTransaction/RequestRejectModal.jsx diff --git a/src/Components/Loaders/FullscreenLoaders.jsx b/src/Components/Loaders/FullscreenLoaders.jsx index a821ce3..151917d 100644 --- a/src/Components/Loaders/FullscreenLoaders.jsx +++ b/src/Components/Loaders/FullscreenLoaders.jsx @@ -12,7 +12,8 @@ const FullscreenLoaders = ({height}) => { w={"100%"} h={height ? height: "100vh"} gap={4} - >
+ > + {/*
@@ -21,8 +22,9 @@ const FullscreenLoaders = ({height}) => {
-
+
*/} {/* Loading... */} + ); }; diff --git a/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx b/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx index 52f3760..cb45a29 100644 --- a/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx +++ b/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx @@ -138,7 +138,7 @@ import RequestRejectModal from "./RequestRejectModal"; "Deposit Date", "Deposit Amount (BHD)", "Support Image", - "Action", + "Action", ]; diff --git a/src/Pages/IO_Management/CreateIO/AddCashDetails.jsx b/src/Pages/IO_Management/CreateIO/AddCashDetails.jsx index ac5ae23..5b26c14 100644 --- a/src/Pages/IO_Management/CreateIO/AddCashDetails.jsx +++ b/src/Pages/IO_Management/CreateIO/AddCashDetails.jsx @@ -91,11 +91,11 @@ const AddCashDetails = ({ isOpen, onClose, firstField, actionId, setActionId, da render: () => , }); } - + } catch (error) { console.log(error); - + setIsLoading(false); } }; diff --git a/src/Pages/IO_Management/CreateIO/Destribution.jsx b/src/Pages/IO_Management/CreateIO/Destribution.jsx index e6478b3..f30ab8b 100644 --- a/src/Pages/IO_Management/CreateIO/Destribution.jsx +++ b/src/Pages/IO_Management/CreateIO/Destribution.jsx @@ -1,37 +1,49 @@ -import React, { useContext, useEffect, useRef, useState } from 'react' -import GlobalStateContext from '../../../Contexts/GlobalStateContext'; -import { Box, HStack, Input,Text, Table, Tbody, Th, Tr, Avatar, useDisclosure,Button, Badge } from '@chakra-ui/react'; -import { OPACITY_ON_LOAD } from '../../../Layout/animations'; -import Pagination from '../../../Components/Pagination'; -import NormalTable from '../../../Components/DataTable/NormalTable'; -import CustomAlertDialog from '../../../Components/CustomAlertDialog'; -import { formatDatee } from '../../../Components/FormField'; -import { AddIcon } from '@chakra-ui/icons'; -import AddIONav from './AddIONav'; +import React, { useContext, useEffect, useRef, useState } from "react"; +import GlobalStateContext from "../../../Contexts/GlobalStateContext"; +import { + Box, + HStack, + Input, + Text, + Table, + Tbody, + Th, + Tr, + Avatar, + useDisclosure, + Button, + Badge, +} from "@chakra-ui/react"; +import { OPACITY_ON_LOAD } from "../../../Layout/animations"; +import Pagination from "../../../Components/Pagination"; +import NormalTable from "../../../Components/DataTable/NormalTable"; +import CustomAlertDialog from "../../../Components/CustomAlertDialog"; +import { formatDatee } from "../../../Components/FormField"; +import { AddIcon } from "@chakra-ui/icons"; +import AddIONav from "./AddIONav"; const Destribution = () => { const { navDetails, setNavDetails, IODetails } = useContext(GlobalStateContext); - const firstField = useRef(); - const { isOpen, onOpen, onClose } = useDisclosure(); - const [searchTerm, setSearchTerm] = useState(""); - const [isLoading, setIsLoading] = useState(true); - const [deleteAlert, setDeleteAlert] = useState(false); - const [actionId, setActionId] = useState(false); - const [mouseEntered, setMouseEntered] = useState(false); - const [mouseEnteredId, setMouseEnteredId] = useState(""); + const firstField = useRef(); + const { isOpen, onOpen, onClose } = useDisclosure(); + const [searchTerm, setSearchTerm] = useState(""); + const [isLoading, setIsLoading] = useState(true); + const [deleteAlert, setDeleteAlert] = useState(false); + const [actionId, setActionId] = useState(false); + const [mouseEntered, setMouseEntered] = useState(false); + const [mouseEnteredId, setMouseEnteredId] = useState(""); + console.log(IODetails?.ioNAVHistory); + + const formatDate = (date) => { + return new Date(date).toLocaleDateString("en-GB", { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); + }; - console.log(IODetails?.ioNAVHistory); - - const formatDate = (date) => { - return new Date(date).toLocaleDateString('en-GB', { - day: '2-digit', - month: '2-digit', - year: 'numeric', - }); - }; - useEffect(() => { // Simulate loading const timer = setTimeout(() => { @@ -42,32 +54,38 @@ const Destribution = () => { return () => clearTimeout(timer); }, []); - // Table setup - const tableHeadRow = [ - // "Sr.No", - "Date", - "Amount", - "% of Investment" - ]; + // Table setup + const tableHeadRow = [ + // "Sr.No", + "Date", + "Amount", + "% of Investment", + ]; - // Table filter - const filteredData = IODetails?.distributionToInvestor?.filter((item) => { - const name = item?.transactionAmount; - const searchLower = searchTerm.toLowerCase(); - const nameMatches = name.toLowerCase().includes(searchLower); - return nameMatches; - }).sort((b, a) => new Date(a.transactionDate) - new Date(b.transactionDate)); + // Table filter + const filteredData = IODetails?.distributionToInvestor + ?.filter((item) => { + const name = item?.transactionAmount; + const searchLower = searchTerm.toLowerCase(); + const nameMatches = name.toLowerCase().includes(searchLower); + return nameMatches; + }) + .sort((b, a) => new Date(a.transactionDate) - new Date(b.transactionDate)); - const extractedArray=filteredData?.map((item, index) => ({ + const extractedArray = filteredData?.map((item, index) => ({ id: item?.id, - "Sr.No": {item?.id}, - "Date": ( + "Sr.No": ( + + {item?.id} + + ), + Date: ( { {formatDate(item.transactionDate)} ), - "Amount": ( + Amount: ( { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - $ + + $ + {`${parseFloat(item.transactionAmount || 0).toLocaleString(undefined, { - minimumFractionDigits: 2, - maximumFractionDigits: 2, - })}`} + minimumFractionDigits: 2, + maximumFractionDigits: 2, + })}`} ), "% of Investment": ( @@ -106,12 +126,8 @@ const Destribution = () => { ), })); - - const handleDelete = () => { - const updatedNav = navDetails.filter( - (sponsor) => sponsor.id !== actionId - ); + const updatedNav = navDetails.filter((sponsor) => sponsor.id !== actionId); setTimeout(() => { setNavDetails(updatedNav); @@ -121,12 +137,11 @@ const Destribution = () => { setIsLoading(true); }; - const Total = () => { return ( - +
{ wordBreak="normal" overflowWrap="normal" > - - ${IODetails?.total_distributeToInvestor_amt?.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} + + $ + + {IODetails?.total_distributeToInvestor_amt?.toLocaleString( + undefined, + { minimumFractionDigits: 2, maximumFractionDigits: 2 } + )} { ); }; + return ( + + + + setSearchTerm(e.target.value)} + /> + + + } + setMouseEnteredId={setMouseEnteredId} + setMouseEntered={setMouseEntered} + /> + setDeleteAlert(false)} + isOpen={deleteAlert} + message={"Are you sure you want to delete sponers?"} + alertHandler={handleDelete} + isLoading={isLoading} + /> - return ( - - - setSearchTerm(e.target.value)} - /> - - + + ); +}; - } - setMouseEnteredId={setMouseEnteredId} - setMouseEntered={setMouseEntered} - /> - - setDeleteAlert(false)} - isOpen={deleteAlert} - message={"Are you sure you want to delete sponers?"} - alertHandler={handleDelete} - isLoading={isLoading} - /> - - - - - - - - ) -} - -export default Destribution \ No newline at end of file +export default Destribution; diff --git a/src/Pages/IO_Management/CreateIO/IOCashDetails/AddApproved.jsx b/src/Pages/IO_Management/CreateIO/IOCashDetails/AddCaseDetails.jsx similarity index 97% rename from src/Pages/IO_Management/CreateIO/IOCashDetails/AddApproved.jsx rename to src/Pages/IO_Management/CreateIO/IOCashDetails/AddCaseDetails.jsx index 5685ce1..4f65cda 100644 --- a/src/Pages/IO_Management/CreateIO/IOCashDetails/AddApproved.jsx +++ b/src/Pages/IO_Management/CreateIO/IOCashDetails/AddCaseDetails.jsx @@ -36,7 +36,7 @@ const cashDetails = yup.object().shape({ comments: yup.string().notRequired(), }); -const AddApproved = ({ isOpen, onClose, firstField, actionId, setActionId, data }) => { +const AddCaseDetails = ({ isOpen, onClose, firstField, actionId, setActionId, data }) => { const params = useParams() const id = params?.id const [file, setFile] = useState(""); @@ -79,13 +79,13 @@ const AddApproved = ({ isOpen, onClose, firstField, actionId, setActionId, data try { const res = await createIoCash({ data, id }) - if (res?.data?.statusCode === 200) { + if (res?.data) { setIsLoading(false); toast({ render: () => , }); handleClose() - }else if(res?.error?.status === 400){ + }else if(res?.error){ setIsLoading(false); toast({ render: () => , @@ -94,6 +94,7 @@ const AddApproved = ({ isOpen, onClose, firstField, actionId, setActionId, data } catch (error) { console.log(error); + setIsLoading(false); } }; @@ -248,4 +249,4 @@ const AddApproved = ({ isOpen, onClose, firstField, actionId, setActionId, data ); }; -export default AddApproved; +export default AddCaseDetails; diff --git a/src/Pages/IO_Management/CreateIO/IOCashDetails/Approved.jsx b/src/Pages/IO_Management/CreateIO/IOCashDetails/Approved.jsx index 7746881..8e474a7 100644 --- a/src/Pages/IO_Management/CreateIO/IOCashDetails/Approved.jsx +++ b/src/Pages/IO_Management/CreateIO/IOCashDetails/Approved.jsx @@ -26,20 +26,20 @@ import CustomAlertDialog from "../../../../Components/CustomAlertDialog"; import ToastBox from "../../../../Components/ToastBox"; import AddCashDetails from "../AddCashDetails"; import { debounce } from "../../../Admin/Contact"; -import AddApproved from "./addApproved"; +import AddApproved from "./AddCaseDetails"; import { useUpdateIOCaseMutation } from "../../../../Services/io.service"; import { useParams } from "react-router-dom"; +import AddCaseDetails from "./AddCaseDetails"; const formatDate = (date) => new Date(date).toLocaleDateString(); const Approved = () => { const firstField = useRef(); - const params = useParams() + const params = useParams(); const toast = useToast(); - const id = params?.id + const id = params?.id; const { isOpen, onOpen, onClose } = useDisclosure(); - const { IODetails, approved, setApproved } = - useContext(GlobalStateContext); + const { IODetails, approved, setApproved } = useContext(GlobalStateContext); const [searchTerm, setSearchTerm] = useState(""); const [isLoading, setIsLoading] = useState(true); const [deleteAlert, setDeleteAlert] = useState(false); @@ -65,69 +65,59 @@ const Approved = () => { }); }; - console.log("==============",IODetails?.ioCashStatusHistory?.Approved); - + console.log("==============", IODetails?.ioCashStatusHistory?.Approved); // Table filter - const filteredData = IODetails?.ioCashStatusHistory?.Approved?.filter((item) => { - // Filter by name (case insensitive) - const name = item.transactionDate; - const searchLower = searchTerm.toLowerCase(); - const nameMatches = name.toLowerCase().includes(searchLower); - return nameMatches; - }); + const filteredData = IODetails?.ioCashStatusHistory?.Approved?.filter( + (item) => { + // Filter by name (case insensitive) + const name = item.transactionDate; + const searchLower = searchTerm.toLowerCase(); + const nameMatches = name.toLowerCase().includes(searchLower); + return nameMatches; + } + ); - const [updateIOCase] = useUpdateIOCaseMutation() + const [updateIOCase] = useUpdateIOCaseMutation(); const tableHeadRow = [ "Sr No.", "Transaction date", + "Transaction Type", "Amount", "Comments", - "Update by", + // "Update by", "Update On", ]; const extractedArray = filteredData?.map((item, index) => ({ id: item?.id, "Sr No.": ( - + {index + 1}. ), "Transaction date": ( - + {formatDate(item?.transactionDate)} ), - "Amount": ( - + "Transaction Type": ( + + {item?.transactionType} + + ), + Amount: ( + $ {item?.transactionAmount} ), - "Comments": ( - - {item?.comments ? item?.comments : "---" } + Comments: ( + + {item?.comments ? item?.comments : "---"} ), "Update by": ( @@ -140,7 +130,7 @@ const Approved = () => { alignItems={"center"} > { ), "Update On": ( - + {formatDate(item.updatedAt)} ), @@ -173,13 +158,15 @@ const Approved = () => { setIsLoading(true); }; - const ioCashExporteDetails = IODetails?.ioCashStatusHistory?.Approved?.map((item, index) => ({ - "Transaction date": item?.transactionDate, - "Transaction type": item?.transactionType, - Amount: parseFloat(item?.transactionAmount) || 0, - Comments: item?.comments, - })); - + const ioCashExporteDetails = IODetails?.ioCashStatusHistory?.Approved?.map( + (item, index) => ({ + "Transaction date": item?.transactionDate, + "Transaction type": item?.transactionType, + Amount: parseFloat(item?.transactionAmount) || 0, + Comments: item?.comments, + }) + ); + const exportToExcelNew = (data, fileName) => { const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); @@ -273,9 +260,9 @@ const Approved = () => { ); }; - const handleAdd = async () =>{ - try { - const res = await updateIOCase(id) + const handleAdd = async () => { + try { + const res = await updateIOCase(id); if (res?.data) { toast({ render: () => ( @@ -283,8 +270,7 @@ const Approved = () => { ), }); setIsLoading(false); - onOpen() - + onOpen(); } else if (res?.error) { toast({ render: () => ( @@ -293,10 +279,8 @@ const Approved = () => { }); setIsLoading(false); } - } catch (error) { - - } - } + } catch (error) {} + }; return ( @@ -345,7 +329,7 @@ const Approved = () => { Add */} {IODetails?.isInvestedAmount ? ( -