diff --git a/src/routes.js b/src/routes.js index c9b7907..150b499 100644 --- a/src/routes.js +++ b/src/routes.js @@ -129,14 +129,16 @@ import EditSalesCoOrdinator from "./views/SalesCoOrdinators/EditSalesCoOrdinator import AddSalesCoOrdinator from "./views/SalesCoOrdinators/AddSalesCoOrdinator"; import TodayAttendance from "./views/Attendance/TodayAttendance"; import AttendanceSalesCoordinator from "./views/Attendance/AttendanceSalesCoordinator"; -import SingleAttendanceSalesCoOrdinator from "./views/Attendance/SingleAttendanceSalesCoordinator"; import TodayLeave from "./views/Leaves/TodayLeaves"; import LeaveSalesCoordinator from "./views/Leaves/LeaveSalesCoordinator"; -import SingleLeaveSalesCoOrdinator from "./views/Leaves/SingleLeaveSalesCoordinator"; //TerritoryManagers import EditTerritoryManager from "./views/TerritoryManager/EditTerritoryManager"; import TerritoryManager from "./views/TerritoryManager/TerritoryManager"; import AddTerritoryManager from "./views/TerritoryManager/AddTerritoryManager"; +import AttendanceTerritoryManager from "./views/Attendance/AttendanceTerritoryManager"; +import SingleUserAttendance from "./views/Attendance/SingleUserAttendance"; +import SingleUserleave from "./views/Leaves/SingleUserLeave"; +import LeaveTerritoryManager from "./views/Leaves/LeaveTerritoryManager"; const routes = [ //dashboard @@ -236,11 +238,17 @@ const routes = [ element: AttendanceSalesCoordinator, navName: "AttendanceSalesCoOrdinator", }, + { + path: "/territorymanager/attendance", + name: "Attendance TerritoryManager", + element: AttendanceTerritoryManager, + navName: "AttendanceTerritoryManager", + }, { path: "/attendance/view/:id", - name: "Single SalesCoOrdinator Attendance", - element: SingleAttendanceSalesCoOrdinator, - navName: "AttendanceSalesCoOrdinator", + name: "Single user Attendance", + element: SingleUserAttendance, + navName: "Attendance", }, // Leaves { @@ -255,11 +263,17 @@ const routes = [ element: LeaveSalesCoordinator, navName: "LeaveSalesCoOrdinator", }, + { + path: "/territorymanager/leave", + name: "Leave TerritoryManager", + element: LeaveTerritoryManager, + navName: "LeaveTerritoryManager", + }, { path: "/leave/view/:id", - name: "Single SalesCoOrdinator Leave", - element: SingleLeaveSalesCoOrdinator, - navName: "LeaveSalesCoOrdinator", + name: "Single User Leave", + element: SingleUserleave, + navName: "Leaves", }, //Gst tax { diff --git a/src/views/Attendance/AttendanceTerritoryManager.js b/src/views/Attendance/AttendanceTerritoryManager.js new file mode 100644 index 0000000..a54a817 --- /dev/null +++ b/src/views/Attendance/AttendanceTerritoryManager.js @@ -0,0 +1,328 @@ +import React, { useState, useEffect, useRef } from "react"; +import { Link } from "react-router-dom"; +import axios from "axios"; +import Button from "@material-ui/core/Button"; +import { useNavigate } from "react-router-dom"; +import { isAutheticated } from "src/auth"; +import swal from "sweetalert"; + +const AttendanceTerritoryManager = () => { + const token = isAutheticated(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [territorymanagersData, setterritorymanagerData] = useState([]); + + const nameRef = useRef(); + const mobileRef = useRef(); + const VerifyterritorymanagerRef = useRef(); + + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(10); + const [totalData, setTotalData] = useState(0); + + const getterritorymanagerData = async () => { + setLoading(true); + try { + const res = await axios.get(`/api/territorymanager/getAll/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + params: { + page: currentPage, + show: itemPerPage, + name: nameRef.current.value, + mobileNumber: mobileRef.current.value, + isVerified: VerifyterritorymanagerRef.current.value, + }, + }); + // console.log(res.data); + setterritorymanagerData(res.data?.territoryManager); + setTotalData(res.data?.total_data); + } catch (err) { + const msg = err?.response?.data?.message || "Something went wrong!"; + swal({ + title: "Error", + text: msg, + icon: "error", + button: "Retry", + dangerMode: true, + }); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + getterritorymanagerData(); + }, [ itemPerPage, currentPage]); + + return ( +
+
+
+
+
+
+
+ territorymanager Attendance +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + {loading ? ( + + + + ) : territorymanagersData?.length > 0 ? ( + territorymanagersData?.map((territorymanager, i) => { + return ( + + + + + + + + + ); + }) + ) : ( + + + + )} + +
NameMobile No.EmailVerifyRegister OnAction
+ Loading... +
+ {territorymanager?.name} + + {territorymanager?.mobileNumber} + + {territorymanager?.email ? ( + territorymanager?.email + ) : ( + + No Email Added! + + )} + + + {territorymanager?.isVerified + ? "YES" + : "NO"} + + + {new Date( + territorymanager.createdAt + ).toLocaleString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "numeric", + hour12: true, + })} + + + + +
+
No TerritoryManager Available...
+
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{" "} + {Math.min(currentPage * itemPerPage, totalData)} of{" "} + {totalData} entries +
+
+ +
+
+
    +
  • + + setCurrentPage((prev) => + prev > 1 ? prev - 1 : prev + ) + } + > + Previous + +
  • +
  • = totalData + ? "paginate_button page-item next disabled" + : "paginate_button page-item next" + } + > + + setCurrentPage((prev) => + prev * itemPerPage < totalData + ? prev + 1 + : prev + ) + } + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ); +}; + +export default AttendanceTerritoryManager; diff --git a/src/views/Attendance/SingleAttendanceSalesCoordinator.js b/src/views/Attendance/SingleUserAttendance.js similarity index 95% rename from src/views/Attendance/SingleAttendanceSalesCoordinator.js rename to src/views/Attendance/SingleUserAttendance.js index 3856eb1..d91d78b 100644 --- a/src/views/Attendance/SingleAttendanceSalesCoordinator.js +++ b/src/views/Attendance/SingleUserAttendance.js @@ -5,18 +5,18 @@ import Button from "@material-ui/core/Button"; import { isAutheticated } from "src/auth"; import swal from "sweetalert"; -const SingleAttendanceSalesCoOrdinator = () => { +const SingleUserAttendance = () => { const { id } = useParams(); const token = isAutheticated(); const navigate = useNavigate(); const [loading, setLoading] = useState(false); - const [salesCoordinator, setSalesCoordinator] = useState({}); + const [user, setuser] = useState({}); const [attendanceData, setAttendanceData] = useState([]); const [currentPage, setCurrentPage] = useState(1); const [itemPerPage, setItemPerPage] = useState(10); const [totalData, setTotalData] = useState(0); - - const getSingleSalesCoOrdinatorAttendance = async () => { +const [userType, setUserType] = useState(""); + const getSingleuserAttendance = async () => { setLoading(true); try { const res = await axios.get(`/api/v1/attendance/${id}`, { @@ -28,8 +28,10 @@ const SingleAttendanceSalesCoOrdinator = () => { show: itemPerPage, }, }); - setSalesCoordinator(res.data?.user); + console.log(res.data); + setuser(res.data?.user); setAttendanceData(res.data?.attendance); + setUserType(res.data?.userType); // console.log(res.data); setTotalData(res.data?.total_data); } catch (err) { @@ -47,7 +49,7 @@ const SingleAttendanceSalesCoOrdinator = () => { }; useEffect(() => { - getSingleSalesCoOrdinatorAttendance(); + getSingleuserAttendance(); }, [itemPerPage, currentPage]); return ( @@ -58,9 +60,9 @@ const SingleAttendanceSalesCoOrdinator = () => {
- SalesCoOrdinator Attendance + {userType} Attendance
- {salesCoordinator.name} ({salesCoordinator.email}) + {user.name} ({user.email})
@@ -73,7 +75,7 @@ const SingleAttendanceSalesCoOrdinator = () => { textTransform: "capitalize", }} onClick={() => { - navigate("/salescoordinator/attendance", { + navigate("/attendance/today", { replace: true, }); }} @@ -252,4 +254,4 @@ const SingleAttendanceSalesCoOrdinator = () => { ); }; -export default SingleAttendanceSalesCoOrdinator; +export default SingleUserAttendance; diff --git a/src/views/Attendance/TodayAttendance.js b/src/views/Attendance/TodayAttendance.js index 3ad3cee..d9d9e56 100644 --- a/src/views/Attendance/TodayAttendance.js +++ b/src/views/Attendance/TodayAttendance.js @@ -27,7 +27,6 @@ const TodayAttendance = () => { show: itemPerPage, }, }); - // console.log(res.data); setSalesCoOrdinatorsData(res.data?.attendance); setTotalData(res.data?.total_data); } catch (err) { @@ -63,7 +62,7 @@ const TodayAttendance = () => {
- Today's SalesCoOrdinators Attendance + Today's Attendance
{ Date : {today}
-
+
+
@@ -144,7 +158,7 @@ const TodayAttendance = () => { {loading ? ( - + Loading... @@ -202,7 +216,7 @@ const TodayAttendance = () => { }) ) : ( - +
No Attendance Records Available...
diff --git a/src/views/Leaves/LeaveTerritoryManager.js b/src/views/Leaves/LeaveTerritoryManager.js new file mode 100644 index 0000000..29e7e1c --- /dev/null +++ b/src/views/Leaves/LeaveTerritoryManager.js @@ -0,0 +1,319 @@ +import React, { useState, useEffect, useRef } from "react"; +import { Link } from "react-router-dom"; +import axios from "axios"; +import Button from "@material-ui/core/Button"; +import { useNavigate } from "react-router-dom"; +import { isAutheticated } from "src/auth"; +import swal from "sweetalert"; + +const LeaveTerritoryManager = () => { + const token = isAutheticated(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [territorymanagersData, setterritorymanagersData] = useState([]); + const nameRef = useRef(); + const mobileRef = useRef(); + const verifyRef = useRef(); + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(10); + const [totalData, setTotalData] = useState(0); + + const getterritorymanagersData = async () => { + setLoading(true); + try { + const res = await axios.get(`/api/territorymanager/getAll/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + params: { + page: currentPage, + show: itemPerPage, + name: nameRef.current.value, + mobileNumber: mobileRef.current.value, + isVerified: verifyRef.current.value, + }, + }); + setterritorymanagersData(res.data?.territorymanager); + setTotalData(res.data?.total_data); + } catch (err) { + const msg = err?.response?.data?.message || "Something went wrong!"; + swal({ + title: "Error", + text: msg, + icon: "error", + button: "Retry", + dangerMode: true, + }); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + getterritorymanagersData(); + }, [currentPage, itemPerPage]); + + const handleFilter = () => { + setCurrentPage(1); + getterritorymanagersData(); + }; + + return ( +
+
+
+
+
+
+
+ Territory Managers Leaves +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + {loading ? ( + + + + ) : territorymanagersData.length > 0 ? ( + territorymanagersData.map((territorymanager, i) => ( + + + + + + + + + )) + ) : ( + + + + )} + +
NameMobile No.EmailVerifyRegister OnAction
+ Loading... +
+ {territorymanager?.name} + + {territorymanager?.mobileNumber} + + {territorymanager?.email || ( + + No Email Added! + + )} + + + {territorymanager?.isVerified ? "YES" : "NO"} + + + {new Date( + territorymanager.createdAt + ).toLocaleString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "numeric", + hour12: true, + })} + + + + +
+
No Territory Managers Available...
+
+
+ +
+
+
+ Showing {currentPage * itemPerPage - itemPerPage + 1} to{" "} + {Math.min(currentPage * itemPerPage, totalData)} of{" "} + {totalData} entries +
+
+ +
+
+
    +
  • + + setCurrentPage((prev) => + prev > 1 ? prev - 1 : prev + ) + } + > + Previous + +
  • +
  • = totalData + ? "paginate_button page-item next disabled" + : "paginate_button page-item next" + } + > + + setCurrentPage((prev) => + prev * itemPerPage < totalData + ? prev + 1 + : prev + ) + } + > + Next + +
  • +
+
+
+
+
+
+
+
+
+
+
+ ); +}; + +export default LeaveTerritoryManager; diff --git a/src/views/Leaves/SingleLeaveSalesCoordinator.js b/src/views/Leaves/SingleUserLeave.js similarity index 73% rename from src/views/Leaves/SingleLeaveSalesCoordinator.js rename to src/views/Leaves/SingleUserLeave.js index 0d2fa7b..c79ca9b 100644 --- a/src/views/Leaves/SingleLeaveSalesCoordinator.js +++ b/src/views/Leaves/SingleUserLeave.js @@ -5,18 +5,18 @@ import Button from "@material-ui/core/Button"; import { isAutheticated } from "src/auth"; import swal from "sweetalert"; -const SingleLeaveSalesCoOrdinator = () => { +const SingleUserleave = () => { const { id } = useParams(); const token = isAutheticated(); const navigate = useNavigate(); const [loading, setLoading] = useState(false); - const [salesCoordinator, setSalesCoordinator] = useState({}); - const [leaveData, setLeaveData] = useState([]); + const [user, setuser] = useState({}); + const [leaveData, setleaveData] = useState([]); const [currentPage, setCurrentPage] = useState(1); const [itemPerPage, setItemPerPage] = useState(10); const [totalData, setTotalData] = useState(0); - - const getSingleSalesCoOrdinatorLeave = async () => { +const [userType, setUserType] = useState(""); + const getSingleuserleave = async () => { setLoading(true); try { const res = await axios.get(`/api/v1/leave/${id}`, { @@ -28,9 +28,11 @@ const SingleLeaveSalesCoOrdinator = () => { show: itemPerPage, }, }); + console.log(res.data); + setuser(res.data?.user); + setleaveData(res.data?.leave); + setUserType(res.data?.userType); // console.log(res.data); - setSalesCoordinator(res.data?.user); - setLeaveData(res.data?.leave); setTotalData(res.data?.total_data); } catch (err) { const msg = err?.response?.data?.message || "Something went wrong!"; @@ -47,7 +49,7 @@ const SingleLeaveSalesCoOrdinator = () => { }; useEffect(() => { - getSingleSalesCoOrdinatorLeave(); + getSingleuserleave(); }, [itemPerPage, currentPage]); return ( @@ -58,9 +60,9 @@ const SingleLeaveSalesCoOrdinator = () => {
- SalesCoOrdinator Leave + {userType} Leave
- {salesCoordinator.name} ({salesCoordinator.email}) + {user.name} ({user.email})
@@ -73,7 +75,7 @@ const SingleLeaveSalesCoOrdinator = () => { textTransform: "capitalize", }} onClick={() => { - navigate("/salescoordinator/leave", { + navigate("/leaves/today", { replace: true, }); }} @@ -96,7 +98,7 @@ const SingleLeaveSalesCoOrdinator = () => { Show