From abc4feee63fd5d28171d54ac92384b26620013e6 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Fri, 18 Oct 2024 12:54:42 +0530 Subject: [PATCH] fixing bug --- src/_nav.js | 7 + src/routes.js | 8 + src/views/Tasks/SingleUserTask.js | 256 +++++++++++++++++++ src/views/Tasks/TaskSalesCoordinator.js | 318 ++++++++++++++++++++++++ src/views/Tasks/TaskTerritoryManager.js | 318 ++++++++++++++++++++++++ src/views/Tasks/TodayTasks.js | 292 ++++++++++++++++++++++ 6 files changed, 1199 insertions(+) create mode 100644 src/views/Tasks/SingleUserTask.js create mode 100644 src/views/Tasks/TaskSalesCoordinator.js create mode 100644 src/views/Tasks/TaskTerritoryManager.js create mode 100644 src/views/Tasks/TodayTasks.js diff --git a/src/_nav.js b/src/_nav.js index 366d2b0..6c76fd9 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -118,6 +118,13 @@ const _nav = [ to: "/leaves/today", group: "Leaves", }, + { + component: CNavItem, + name: "Tasks", + icon: , + to: "/task/today", + group: "Tasks", + }, { component: CNavItem, name: "Inventory Data", diff --git a/src/routes.js b/src/routes.js index 6b92d3f..03ae19b 100644 --- a/src/routes.js +++ b/src/routes.js @@ -161,6 +161,7 @@ import AddMultipletm from "./views/TerritoryManager/AddMultipleTM"; import AddMultiplesc from "./views/SalesCoOrdinators/AddMultipleSC"; import Announcements from "./views/Announcment/announcement"; import CreateAnnouncement from "./views/Announcment/createAnnouncement"; +import TodayTask from "./views/Tasks/TodayTasks"; const routes = [ //dashboard @@ -363,6 +364,13 @@ const routes = [ element: SingleUserleave, navName: "Leaves", }, + //Tasks + { + path: "/task/today", + name: "Today's Tasks", + element: TodayTask, + navName: "Tasks", + }, // RetailDistributor { path: "/retail-distributor", diff --git a/src/views/Tasks/SingleUserTask.js b/src/views/Tasks/SingleUserTask.js new file mode 100644 index 0000000..a4fce93 --- /dev/null +++ b/src/views/Tasks/SingleUserTask.js @@ -0,0 +1,256 @@ +import React, { useState, useEffect } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import axios from "axios"; +import Button from "@material-ui/core/Button"; +import { isAutheticated } from "src/auth"; +import swal from "sweetalert"; + +const SingleUserleave = () => { + const { id } = useParams(); + const token = isAutheticated(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [user, setuser] = useState({}); + const [leaveData, setleaveData] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(10); + const [totalData, setTotalData] = useState(0); +const [userType, setUserType] = useState(""); + const getSingleuserleave = async () => { + setLoading(true); + try { + const res = await axios.get(`/api/v1/leave/${id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + params: { + page: currentPage, + show: itemPerPage, + }, + }); + setuser(res.data?.user); + setleaveData(res.data?.leave); + setUserType(res.data?.userType); + // console.log(res.data); + 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(() => { + getSingleuserleave(); + }, [itemPerPage, currentPage]); + + return ( +
+
+
+
+
+
+
+ {userType === "SalesCoOrdinator"?"Sales Coordinator":"Territory Manager"} Leave +
+ {user.name} ({user.email}) +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + {loading ? ( + + + + ) : leaveData?.length > 0 ? ( + leaveData?.map((leave, i) => { + return ( + + + + + + + ); + }) + ) : ( + + + + )} + +
DateTimeLocationNote
+ Loading... +
+ {new Date( + leave?.date + ).toLocaleDateString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + })} + + {leave?.time || ( + + No Time Added! + + )} + + {leave?.location || ( + + No Location Added! + + )} + + {leave?.notes || ( + + No Note Added! + + )} +
+
No leave Records 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 SingleUserleave; diff --git a/src/views/Tasks/TaskSalesCoordinator.js b/src/views/Tasks/TaskSalesCoordinator.js new file mode 100644 index 0000000..da47329 --- /dev/null +++ b/src/views/Tasks/TaskSalesCoordinator.js @@ -0,0 +1,318 @@ +import React, { useState, useEffect, useRef,useCallback } 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"; +import debounce from 'lodash.debounce'; + +const LeaveSalesCoordinator = () => { + const token = isAutheticated(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [salescoordinatorsData, setSalesCoOrdinatorsData] = 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 getSalesCoOrdinatorsData = async () => { + setLoading(true); + try { + const res = await axios.get(`/api/salescoordinator/getAll/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + params: { + page: currentPage, + show: itemPerPage, + name: nameRef.current.value, + mobileNumber: mobileRef.current.value, + isVerified: verifyRef.current.value, + }, + }); + setSalesCoOrdinatorsData(res.data?.salesCoOrinators); + 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(() => { + getSalesCoOrdinatorsData(); + }, [currentPage, itemPerPage]); + + const debouncedSearch = useCallback(debounce(() => { + setCurrentPage(1); + getSalesCoOrdinatorsData(); + }, 500), []); + + const handleSearchChange = () => { + debouncedSearch(); + }; + + return ( +
+
+
+
+
+
+
+ Sales Coordinators Leaves +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + {loading ? ( + + + + ) : salescoordinatorsData.length > 0 ? ( + salescoordinatorsData.map((salescoordinator, i) => ( + + + + + + + + + )) + ) : ( + + + + )} + +
NameMobile No.EmailVerifyRegister OnAction
+ Loading... +
+ {salescoordinator?.name} + + {salescoordinator?.mobileNumber} + + {salescoordinator?.email || ( + + No Email Added! + + )} + + + {salescoordinator?.isVerified ? "YES" : "NO"} + + + {new Date( + salescoordinator.createdAt + ).toLocaleString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "numeric", + hour12: true, + })} + + + + +
+
No Sales Coordinators 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 LeaveSalesCoordinator; diff --git a/src/views/Tasks/TaskTerritoryManager.js b/src/views/Tasks/TaskTerritoryManager.js new file mode 100644 index 0000000..b02b53a --- /dev/null +++ b/src/views/Tasks/TaskTerritoryManager.js @@ -0,0 +1,318 @@ +import React, { useState, useEffect, useRef,useCallback } 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"; +import debounce from 'lodash.debounce'; + +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 debouncedSearch = useCallback(debounce(() => { + setCurrentPage(1); + getterritorymanagersData(); + }, 500), []); + + const handleSearchChange = () => { + debouncedSearch(); + }; + + 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/Tasks/TodayTasks.js b/src/views/Tasks/TodayTasks.js new file mode 100644 index 0000000..6fd37ff --- /dev/null +++ b/src/views/Tasks/TodayTasks.js @@ -0,0 +1,292 @@ +import React, { useState, useEffect } 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 TodayTask = () => { + const token = isAutheticated(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [userData, setuserData] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemPerPage, setItemPerPage] = useState(10); + const [totalData, setTotalData] = useState(0); + + const getTodayTaskData = async () => { + setLoading(true); + try { + const res = await axios.get(`/api/task/today`, { + headers: { + Authorization: `Bearer ${token}`, + }, + params: { + page: currentPage, + show: itemPerPage, + }, + }); + // console.log(res.data); + setuserData(res.data?.tasks); + setTotalData(res.data?.totalTasks); + } 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(() => { + getTodayTaskData(); + }, [itemPerPage, currentPage]); + + const today = new Date().toLocaleDateString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + }); + + return ( +
+
+
+
+
+
+
+ Today's Task Report +
+ Date : {today} +
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + {loading ? ( + + + + ) : userData?.length > 0 ? ( + userData?.map((task, i) => { + return ( + + + + + + + + + ); + }) + ) : ( + + + + )} + +
+ Employee ID + + Name + + Email + + Designation + + Task + + Task Status +
+ Loading... +
+ {task?.taskAssignedTo?.uniqueId} + + {task?.taskAssignedTo?.name} + + {task?.taskAssignedTo?.email ? ( + task?.taskAssignedTo?.email + ) : ( + + No Email Added! + + )} + + {task?.taskAssignedTo?.designation} + + {task?.task || ( + + No Task Added! + + )} + + {task?.taskStatus} +
+
No Task Records 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 TodayTask;