attendance and leave fixed
This commit is contained in:
parent
0ce53b904a
commit
61db21cf0a
@ -129,14 +129,16 @@ import EditSalesCoOrdinator from "./views/SalesCoOrdinators/EditSalesCoOrdinator
|
|||||||
import AddSalesCoOrdinator from "./views/SalesCoOrdinators/AddSalesCoOrdinator";
|
import AddSalesCoOrdinator from "./views/SalesCoOrdinators/AddSalesCoOrdinator";
|
||||||
import TodayAttendance from "./views/Attendance/TodayAttendance";
|
import TodayAttendance from "./views/Attendance/TodayAttendance";
|
||||||
import AttendanceSalesCoordinator from "./views/Attendance/AttendanceSalesCoordinator";
|
import AttendanceSalesCoordinator from "./views/Attendance/AttendanceSalesCoordinator";
|
||||||
import SingleAttendanceSalesCoOrdinator from "./views/Attendance/SingleAttendanceSalesCoordinator";
|
|
||||||
import TodayLeave from "./views/Leaves/TodayLeaves";
|
import TodayLeave from "./views/Leaves/TodayLeaves";
|
||||||
import LeaveSalesCoordinator from "./views/Leaves/LeaveSalesCoordinator";
|
import LeaveSalesCoordinator from "./views/Leaves/LeaveSalesCoordinator";
|
||||||
import SingleLeaveSalesCoOrdinator from "./views/Leaves/SingleLeaveSalesCoordinator";
|
|
||||||
//TerritoryManagers
|
//TerritoryManagers
|
||||||
import EditTerritoryManager from "./views/TerritoryManager/EditTerritoryManager";
|
import EditTerritoryManager from "./views/TerritoryManager/EditTerritoryManager";
|
||||||
import TerritoryManager from "./views/TerritoryManager/TerritoryManager";
|
import TerritoryManager from "./views/TerritoryManager/TerritoryManager";
|
||||||
import AddTerritoryManager from "./views/TerritoryManager/AddTerritoryManager";
|
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 = [
|
const routes = [
|
||||||
//dashboard
|
//dashboard
|
||||||
|
|
||||||
@ -236,11 +238,17 @@ const routes = [
|
|||||||
element: AttendanceSalesCoordinator,
|
element: AttendanceSalesCoordinator,
|
||||||
navName: "AttendanceSalesCoOrdinator",
|
navName: "AttendanceSalesCoOrdinator",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/territorymanager/attendance",
|
||||||
|
name: "Attendance TerritoryManager",
|
||||||
|
element: AttendanceTerritoryManager,
|
||||||
|
navName: "AttendanceTerritoryManager",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/attendance/view/:id",
|
path: "/attendance/view/:id",
|
||||||
name: "Single SalesCoOrdinator Attendance",
|
name: "Single user Attendance",
|
||||||
element: SingleAttendanceSalesCoOrdinator,
|
element: SingleUserAttendance,
|
||||||
navName: "AttendanceSalesCoOrdinator",
|
navName: "Attendance",
|
||||||
},
|
},
|
||||||
// Leaves
|
// Leaves
|
||||||
{
|
{
|
||||||
@ -255,11 +263,17 @@ const routes = [
|
|||||||
element: LeaveSalesCoordinator,
|
element: LeaveSalesCoordinator,
|
||||||
navName: "LeaveSalesCoOrdinator",
|
navName: "LeaveSalesCoOrdinator",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/territorymanager/leave",
|
||||||
|
name: "Leave TerritoryManager",
|
||||||
|
element: LeaveTerritoryManager,
|
||||||
|
navName: "LeaveTerritoryManager",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/leave/view/:id",
|
path: "/leave/view/:id",
|
||||||
name: "Single SalesCoOrdinator Leave",
|
name: "Single User Leave",
|
||||||
element: SingleLeaveSalesCoOrdinator,
|
element: SingleUserleave,
|
||||||
navName: "LeaveSalesCoOrdinator",
|
navName: "Leaves",
|
||||||
},
|
},
|
||||||
//Gst tax
|
//Gst tax
|
||||||
{
|
{
|
||||||
|
328
src/views/Attendance/AttendanceTerritoryManager.js
Normal file
328
src/views/Attendance/AttendanceTerritoryManager.js
Normal file
@ -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 (
|
||||||
|
<div className="main-content">
|
||||||
|
<div className="page-content">
|
||||||
|
<div className="container-fluid">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-12">
|
||||||
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
|
territorymanager Attendance
|
||||||
|
</div>
|
||||||
|
<div className="page-title-right">
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="secondary"
|
||||||
|
style={{
|
||||||
|
fontWeight: "bold",
|
||||||
|
marginBottom: "1rem",
|
||||||
|
textTransform: "capitalize",
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
navigate("/attendance/today", { replace: true });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-lg-12">
|
||||||
|
<div className="card">
|
||||||
|
<div className="card-body">
|
||||||
|
<div className="row ml-0 mr-0 mb-10">
|
||||||
|
<div className="col-lg-1">
|
||||||
|
<div className="dataTables_length">
|
||||||
|
<label className="w-100">
|
||||||
|
Show
|
||||||
|
<select
|
||||||
|
onChange={(e) => {
|
||||||
|
setItemPerPage(e.target.value);
|
||||||
|
setCurrentPage(1);
|
||||||
|
}}
|
||||||
|
className="form-control"
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
<option value="10">10</option>
|
||||||
|
<option value="25">25</option>
|
||||||
|
<option value="50">50</option>
|
||||||
|
<option value="100">100</option>
|
||||||
|
</select>
|
||||||
|
entries
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>territorymanager Name:</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="territorymanager name"
|
||||||
|
className="form-control"
|
||||||
|
ref={nameRef}
|
||||||
|
disabled={loading}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>Mobile Number:</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Mobile Number"
|
||||||
|
className="form-control"
|
||||||
|
ref={mobileRef}
|
||||||
|
disabled={loading}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>Verify territorymanager:</label>
|
||||||
|
<select
|
||||||
|
className="form-control"
|
||||||
|
ref={VerifyterritorymanagerRef}
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
<option value="">----Select----</option>
|
||||||
|
<option value="true">YES</option>
|
||||||
|
<option value="false">NO</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-2">
|
||||||
|
<button
|
||||||
|
className="btn btn-primary ms-1 mt-4"
|
||||||
|
onClick={() => {
|
||||||
|
getterritorymanagerData();
|
||||||
|
setCurrentPage(1);
|
||||||
|
}}
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
{loading ? "Searching.." : "Filter"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="table-responsive table-shoot mt-3">
|
||||||
|
<table className="table table-centered table-nowrap">
|
||||||
|
<thead
|
||||||
|
className="thead-light"
|
||||||
|
style={{ background: "#ecdddd" }}
|
||||||
|
>
|
||||||
|
<tr>
|
||||||
|
<th className="text-start">Name</th>
|
||||||
|
<th className="text-start">Mobile No.</th>
|
||||||
|
<th className="text-start">Email</th>
|
||||||
|
<th className="text-start">Verify</th>
|
||||||
|
<th className="text-start">Register On</th>
|
||||||
|
<th className="text-start">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{loading ? (
|
||||||
|
<tr>
|
||||||
|
<td className="text-center" colSpan="6">
|
||||||
|
Loading...
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
) : territorymanagersData?.length > 0 ? (
|
||||||
|
territorymanagersData?.map((territorymanager, i) => {
|
||||||
|
return (
|
||||||
|
<tr key={i}>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.name}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.mobileNumber}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.email ? (
|
||||||
|
territorymanager?.email
|
||||||
|
) : (
|
||||||
|
<small className="m-0 text-secondary">
|
||||||
|
No Email Added!
|
||||||
|
</small>
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
<span
|
||||||
|
className={`badge text-white ${
|
||||||
|
territorymanager?.isVerified === true
|
||||||
|
? "text-bg-success"
|
||||||
|
: "text-bg-danger"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{territorymanager?.isVerified
|
||||||
|
? "YES"
|
||||||
|
: "NO"}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{new Date(
|
||||||
|
territorymanager.createdAt
|
||||||
|
).toLocaleString("en-IN", {
|
||||||
|
weekday: "short",
|
||||||
|
month: "short",
|
||||||
|
day: "numeric",
|
||||||
|
year: "numeric",
|
||||||
|
hour: "numeric",
|
||||||
|
minute: "numeric",
|
||||||
|
hour12: true,
|
||||||
|
})}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
<Link
|
||||||
|
to={`/attendance/view/${territorymanager._id}`}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
style={{
|
||||||
|
color: "white",
|
||||||
|
marginRight: "1rem",
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
className="btn btn-primary btn-sm waves-effect waves-light btn-table mt-1 mx-1"
|
||||||
|
>
|
||||||
|
View Attendance
|
||||||
|
</button>
|
||||||
|
</Link>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
);
|
||||||
|
})
|
||||||
|
) : (
|
||||||
|
<tr className="text-center">
|
||||||
|
<td colSpan="6">
|
||||||
|
<h5>No TerritoryManager Available...</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
)}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row mt-20">
|
||||||
|
<div className="col-sm-12 col-md-6 mb-20">
|
||||||
|
<div
|
||||||
|
className="dataTables_info"
|
||||||
|
id="datatable_info"
|
||||||
|
role="status"
|
||||||
|
aria-live="polite"
|
||||||
|
>
|
||||||
|
Showing {currentPage * itemPerPage - itemPerPage + 1} to{" "}
|
||||||
|
{Math.min(currentPage * itemPerPage, totalData)} of{" "}
|
||||||
|
{totalData} entries
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-sm-12 col-md-6">
|
||||||
|
<div className="d-flex">
|
||||||
|
<ul className="pagination ms-auto">
|
||||||
|
<li
|
||||||
|
className={
|
||||||
|
currentPage === 1
|
||||||
|
? "paginate_button page-item previous disabled"
|
||||||
|
: "paginate_button page-item previous"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
className="page-link"
|
||||||
|
onClick={() =>
|
||||||
|
setCurrentPage((prev) =>
|
||||||
|
prev > 1 ? prev - 1 : prev
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Previous
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
className={
|
||||||
|
currentPage * itemPerPage >= totalData
|
||||||
|
? "paginate_button page-item next disabled"
|
||||||
|
: "paginate_button page-item next"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
className="page-link"
|
||||||
|
onClick={() =>
|
||||||
|
setCurrentPage((prev) =>
|
||||||
|
prev * itemPerPage < totalData
|
||||||
|
? prev + 1
|
||||||
|
: prev
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Next
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AttendanceTerritoryManager;
|
@ -5,18 +5,18 @@ import Button from "@material-ui/core/Button";
|
|||||||
import { isAutheticated } from "src/auth";
|
import { isAutheticated } from "src/auth";
|
||||||
import swal from "sweetalert";
|
import swal from "sweetalert";
|
||||||
|
|
||||||
const SingleAttendanceSalesCoOrdinator = () => {
|
const SingleUserAttendance = () => {
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const token = isAutheticated();
|
const token = isAutheticated();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [salesCoordinator, setSalesCoordinator] = useState({});
|
const [user, setuser] = useState({});
|
||||||
const [attendanceData, setAttendanceData] = useState([]);
|
const [attendanceData, setAttendanceData] = useState([]);
|
||||||
const [currentPage, setCurrentPage] = useState(1);
|
const [currentPage, setCurrentPage] = useState(1);
|
||||||
const [itemPerPage, setItemPerPage] = useState(10);
|
const [itemPerPage, setItemPerPage] = useState(10);
|
||||||
const [totalData, setTotalData] = useState(0);
|
const [totalData, setTotalData] = useState(0);
|
||||||
|
const [userType, setUserType] = useState("");
|
||||||
const getSingleSalesCoOrdinatorAttendance = async () => {
|
const getSingleuserAttendance = async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
const res = await axios.get(`/api/v1/attendance/${id}`, {
|
const res = await axios.get(`/api/v1/attendance/${id}`, {
|
||||||
@ -28,8 +28,10 @@ const SingleAttendanceSalesCoOrdinator = () => {
|
|||||||
show: itemPerPage,
|
show: itemPerPage,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
setSalesCoordinator(res.data?.user);
|
console.log(res.data);
|
||||||
|
setuser(res.data?.user);
|
||||||
setAttendanceData(res.data?.attendance);
|
setAttendanceData(res.data?.attendance);
|
||||||
|
setUserType(res.data?.userType);
|
||||||
// console.log(res.data);
|
// console.log(res.data);
|
||||||
setTotalData(res.data?.total_data);
|
setTotalData(res.data?.total_data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -47,7 +49,7 @@ const SingleAttendanceSalesCoOrdinator = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getSingleSalesCoOrdinatorAttendance();
|
getSingleuserAttendance();
|
||||||
}, [itemPerPage, currentPage]);
|
}, [itemPerPage, currentPage]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -58,9 +60,9 @@ const SingleAttendanceSalesCoOrdinator = () => {
|
|||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="page-title-box d-flex align-items-center justify-content-between">
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
<div style={{ fontSize: "22px" }} className="fw-bold">
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
SalesCoOrdinator Attendance
|
{userType} Attendance
|
||||||
<div style={{ fontSize: "16px", marginTop: "5px" }}>
|
<div style={{ fontSize: "16px", marginTop: "5px" }}>
|
||||||
{salesCoordinator.name} ({salesCoordinator.email})
|
{user.name} ({user.email})
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-title-right">
|
<div className="page-title-right">
|
||||||
@ -73,7 +75,7 @@ const SingleAttendanceSalesCoOrdinator = () => {
|
|||||||
textTransform: "capitalize",
|
textTransform: "capitalize",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate("/salescoordinator/attendance", {
|
navigate("/attendance/today", {
|
||||||
replace: true,
|
replace: true,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
@ -252,4 +254,4 @@ const SingleAttendanceSalesCoOrdinator = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default SingleAttendanceSalesCoOrdinator;
|
export default SingleUserAttendance;
|
@ -27,7 +27,6 @@ const TodayAttendance = () => {
|
|||||||
show: itemPerPage,
|
show: itemPerPage,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
// console.log(res.data);
|
|
||||||
setSalesCoOrdinatorsData(res.data?.attendance);
|
setSalesCoOrdinatorsData(res.data?.attendance);
|
||||||
setTotalData(res.data?.total_data);
|
setTotalData(res.data?.total_data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -63,7 +62,7 @@ const TodayAttendance = () => {
|
|||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="page-title-box d-flex align-items-center justify-content-between">
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
<div style={{ fontSize: "22px" }} className="fw-bold">
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
Today's SalesCoOrdinators Attendance
|
Today's Attendance
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
fontSize: "20px",
|
fontSize: "20px",
|
||||||
@ -74,13 +73,13 @@ const TodayAttendance = () => {
|
|||||||
Date : {today}
|
Date : {today}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-title-right">
|
<div className="page-title-right d-flex">
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
color="primary"
|
color="primary"
|
||||||
style={{
|
style={{
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
marginBottom: "1rem",
|
marginRight: "1rem",
|
||||||
textTransform: "capitalize",
|
textTransform: "capitalize",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -91,6 +90,21 @@ const TodayAttendance = () => {
|
|||||||
>
|
>
|
||||||
Show SalesCoOrdinator Attendance
|
Show SalesCoOrdinator Attendance
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="primary"
|
||||||
|
style={{
|
||||||
|
fontWeight: "bold",
|
||||||
|
textTransform: "capitalize",
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
navigate("/territorymanager/attendance", {
|
||||||
|
replace: true,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Show Territory Manager Attendance
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -144,7 +158,7 @@ const TodayAttendance = () => {
|
|||||||
<tbody>
|
<tbody>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<tr>
|
<tr>
|
||||||
<td className="text-center" colSpan="6">
|
<td className="text-center" colSpan="7">
|
||||||
Loading...
|
Loading...
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -202,7 +216,7 @@ const TodayAttendance = () => {
|
|||||||
})
|
})
|
||||||
) : (
|
) : (
|
||||||
<tr className="text-center">
|
<tr className="text-center">
|
||||||
<td colSpan="6">
|
<td colSpan="7">
|
||||||
<h5>No Attendance Records Available...</h5>
|
<h5>No Attendance Records Available...</h5>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
319
src/views/Leaves/LeaveTerritoryManager.js
Normal file
319
src/views/Leaves/LeaveTerritoryManager.js
Normal file
@ -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 (
|
||||||
|
<div className="main-content">
|
||||||
|
<div className="page-content">
|
||||||
|
<div className="container-fluid">
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-12">
|
||||||
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
|
Territory Managers Leaves
|
||||||
|
</div>
|
||||||
|
<div className="page-title-right">
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="secondary"
|
||||||
|
style={{
|
||||||
|
fontWeight: "bold",
|
||||||
|
marginBottom: "1rem",
|
||||||
|
textTransform: "capitalize",
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
navigate("/leaves/today", { replace: true });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row">
|
||||||
|
<div className="col-lg-12">
|
||||||
|
<div className="card">
|
||||||
|
<div className="card-body">
|
||||||
|
<div className="row ml-0 mr-0 mb-10">
|
||||||
|
<div className="col-lg-1">
|
||||||
|
<div className="dataTables_length">
|
||||||
|
<label className="w-100">
|
||||||
|
Show
|
||||||
|
<select
|
||||||
|
onChange={(e) => {
|
||||||
|
setItemPerPage(Number(e.target.value));
|
||||||
|
setCurrentPage(1);
|
||||||
|
}}
|
||||||
|
className="form-control"
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
<option value="10">10</option>
|
||||||
|
<option value="25">25</option>
|
||||||
|
<option value="50">50</option>
|
||||||
|
<option value="100">100</option>
|
||||||
|
</select>
|
||||||
|
entries
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>Territory Manager Name:</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Territory Manager name"
|
||||||
|
className="form-control"
|
||||||
|
ref={nameRef}
|
||||||
|
disabled={loading}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>Mobile Number:</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Mobile Number"
|
||||||
|
className="form-control"
|
||||||
|
ref={mobileRef}
|
||||||
|
disabled={loading}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-3">
|
||||||
|
<label>Verify Territory Manager:</label>
|
||||||
|
<select
|
||||||
|
className="form-control"
|
||||||
|
ref={verifyRef}
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
<option value="">----Select----</option>
|
||||||
|
<option value="true">YES</option>
|
||||||
|
<option value="false">NO</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div className="col-lg-2">
|
||||||
|
<button
|
||||||
|
className="btn btn-primary ms-1 mt-4"
|
||||||
|
onClick={handleFilter}
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
{loading ? "Searching.." : "Filter"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="table-responsive table-shoot mt-3">
|
||||||
|
<table className="table table-centered table-nowrap">
|
||||||
|
<thead
|
||||||
|
className="thead-light"
|
||||||
|
style={{ background: "#ecdddd" }}
|
||||||
|
>
|
||||||
|
<tr>
|
||||||
|
<th className="text-start">Name</th>
|
||||||
|
<th className="text-start">Mobile No.</th>
|
||||||
|
<th className="text-start">Email</th>
|
||||||
|
<th className="text-start">Verify</th>
|
||||||
|
<th className="text-start">Register On</th>
|
||||||
|
<th className="text-start">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{loading ? (
|
||||||
|
<tr>
|
||||||
|
<td className="text-center" colSpan="6">
|
||||||
|
Loading...
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
) : territorymanagersData.length > 0 ? (
|
||||||
|
territorymanagersData.map((territorymanager, i) => (
|
||||||
|
<tr key={i}>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.name}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.mobileNumber}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{territorymanager?.email || (
|
||||||
|
<small className="m-0 text-secondary">
|
||||||
|
No Email Added!
|
||||||
|
</small>
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
<span
|
||||||
|
className={`badge text-white ${
|
||||||
|
territorymanager?.isVerified
|
||||||
|
? "text-bg-success"
|
||||||
|
: "text-bg-danger"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{territorymanager?.isVerified ? "YES" : "NO"}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
{new Date(
|
||||||
|
territorymanager.createdAt
|
||||||
|
).toLocaleString("en-IN", {
|
||||||
|
weekday: "short",
|
||||||
|
month: "short",
|
||||||
|
day: "numeric",
|
||||||
|
year: "numeric",
|
||||||
|
hour: "numeric",
|
||||||
|
minute: "numeric",
|
||||||
|
hour12: true,
|
||||||
|
})}
|
||||||
|
</td>
|
||||||
|
<td className="text-start">
|
||||||
|
<Link to={`/leave/view/${territorymanager._id}`}>
|
||||||
|
<button
|
||||||
|
style={{
|
||||||
|
color: "white",
|
||||||
|
marginRight: "1rem",
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
className="btn btn-primary btn-sm waves-effect waves-light btn-table mt-1 mx-1"
|
||||||
|
>
|
||||||
|
View Leaves
|
||||||
|
</button>
|
||||||
|
</Link>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<tr className="text-center">
|
||||||
|
<td colSpan="6">
|
||||||
|
<h5>No Territory Managers Available...</h5>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
)}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="row mt-20">
|
||||||
|
<div className="col-sm-12 col-md-6 mb-20">
|
||||||
|
<div
|
||||||
|
className="dataTables_info"
|
||||||
|
id="datatable_info"
|
||||||
|
role="status"
|
||||||
|
aria-live="polite"
|
||||||
|
>
|
||||||
|
Showing {currentPage * itemPerPage - itemPerPage + 1} to{" "}
|
||||||
|
{Math.min(currentPage * itemPerPage, totalData)} of{" "}
|
||||||
|
{totalData} entries
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="col-sm-12 col-md-6">
|
||||||
|
<div className="d-flex">
|
||||||
|
<ul className="pagination ms-auto">
|
||||||
|
<li
|
||||||
|
className={
|
||||||
|
currentPage === 1
|
||||||
|
? "paginate_button page-item previous disabled"
|
||||||
|
: "paginate_button page-item previous"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
className="page-link"
|
||||||
|
onClick={() =>
|
||||||
|
setCurrentPage((prev) =>
|
||||||
|
prev > 1 ? prev - 1 : prev
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Previous
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
className={
|
||||||
|
currentPage * itemPerPage >= totalData
|
||||||
|
? "paginate_button page-item next disabled"
|
||||||
|
: "paginate_button page-item next"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
className="page-link"
|
||||||
|
onClick={() =>
|
||||||
|
setCurrentPage((prev) =>
|
||||||
|
prev * itemPerPage < totalData
|
||||||
|
? prev + 1
|
||||||
|
: prev
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Next
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default LeaveTerritoryManager;
|
@ -5,18 +5,18 @@ import Button from "@material-ui/core/Button";
|
|||||||
import { isAutheticated } from "src/auth";
|
import { isAutheticated } from "src/auth";
|
||||||
import swal from "sweetalert";
|
import swal from "sweetalert";
|
||||||
|
|
||||||
const SingleLeaveSalesCoOrdinator = () => {
|
const SingleUserleave = () => {
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const token = isAutheticated();
|
const token = isAutheticated();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [salesCoordinator, setSalesCoordinator] = useState({});
|
const [user, setuser] = useState({});
|
||||||
const [leaveData, setLeaveData] = useState([]);
|
const [leaveData, setleaveData] = useState([]);
|
||||||
const [currentPage, setCurrentPage] = useState(1);
|
const [currentPage, setCurrentPage] = useState(1);
|
||||||
const [itemPerPage, setItemPerPage] = useState(10);
|
const [itemPerPage, setItemPerPage] = useState(10);
|
||||||
const [totalData, setTotalData] = useState(0);
|
const [totalData, setTotalData] = useState(0);
|
||||||
|
const [userType, setUserType] = useState("");
|
||||||
const getSingleSalesCoOrdinatorLeave = async () => {
|
const getSingleuserleave = async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
const res = await axios.get(`/api/v1/leave/${id}`, {
|
const res = await axios.get(`/api/v1/leave/${id}`, {
|
||||||
@ -28,9 +28,11 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
show: itemPerPage,
|
show: itemPerPage,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
console.log(res.data);
|
||||||
|
setuser(res.data?.user);
|
||||||
|
setleaveData(res.data?.leave);
|
||||||
|
setUserType(res.data?.userType);
|
||||||
// console.log(res.data);
|
// console.log(res.data);
|
||||||
setSalesCoordinator(res.data?.user);
|
|
||||||
setLeaveData(res.data?.leave);
|
|
||||||
setTotalData(res.data?.total_data);
|
setTotalData(res.data?.total_data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const msg = err?.response?.data?.message || "Something went wrong!";
|
const msg = err?.response?.data?.message || "Something went wrong!";
|
||||||
@ -47,7 +49,7 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getSingleSalesCoOrdinatorLeave();
|
getSingleuserleave();
|
||||||
}, [itemPerPage, currentPage]);
|
}, [itemPerPage, currentPage]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -58,9 +60,9 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="page-title-box d-flex align-items-center justify-content-between">
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
<div style={{ fontSize: "22px" }} className="fw-bold">
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
SalesCoOrdinator Leave
|
{userType} Leave
|
||||||
<div style={{ fontSize: "16px", marginTop: "5px" }}>
|
<div style={{ fontSize: "16px", marginTop: "5px" }}>
|
||||||
{salesCoordinator.name} ({salesCoordinator.email})
|
{user.name} ({user.email})
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-title-right">
|
<div className="page-title-right">
|
||||||
@ -73,7 +75,7 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
textTransform: "capitalize",
|
textTransform: "capitalize",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate("/salescoordinator/leave", {
|
navigate("/leaves/today", {
|
||||||
replace: true,
|
replace: true,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
@ -96,7 +98,7 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
Show
|
Show
|
||||||
<select
|
<select
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setItemPerPage(Number(e.target.value));
|
setItemPerPage(e.target.value);
|
||||||
setCurrentPage(1);
|
setCurrentPage(1);
|
||||||
}}
|
}}
|
||||||
className="form-control"
|
className="form-control"
|
||||||
@ -123,66 +125,59 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
<th className="text-start">Date</th>
|
<th className="text-start">Date</th>
|
||||||
<th className="text-start">Time</th>
|
<th className="text-start">Time</th>
|
||||||
<th className="text-start">Location</th>
|
<th className="text-start">Location</th>
|
||||||
<th className="text-start">Reason Type</th>
|
<th className="text-start">Note</th>
|
||||||
<th className="text-start">Reason</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<tr>
|
<tr>
|
||||||
<td className="text-center" colSpan="5">
|
<td className="text-center" colSpan="4">
|
||||||
Loading...
|
Loading...
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
) : leaveData?.length > 0 ? (
|
) : leaveData?.length > 0 ? (
|
||||||
leaveData?.map((leave, i) => (
|
leaveData?.map((leave, i) => {
|
||||||
<tr key={i}>
|
return (
|
||||||
<td className="text-start">
|
<tr key={i}>
|
||||||
{new Date(leave?.date).toLocaleDateString(
|
<td className="text-start">
|
||||||
"en-IN",
|
{new Date(
|
||||||
{
|
leave?.date
|
||||||
|
).toLocaleDateString("en-IN", {
|
||||||
weekday: "short",
|
weekday: "short",
|
||||||
month: "short",
|
month: "short",
|
||||||
day: "numeric",
|
day: "numeric",
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
}
|
})}
|
||||||
)}
|
</td>
|
||||||
</td>
|
<td className="text-start">
|
||||||
<td className="text-start">
|
{leave?.time || (
|
||||||
{leave?.time || (
|
<small className="m-0 text-secondary">
|
||||||
<small className="m-0 text-secondary">
|
No Time Added!
|
||||||
No Time Added!
|
</small>
|
||||||
</small>
|
)}
|
||||||
)}
|
</td>
|
||||||
</td>
|
<td className="text-start">
|
||||||
<td className="text-start">
|
{leave?.location || (
|
||||||
{leave?.location || (
|
<small className="m-0 text-secondary">
|
||||||
<small className="m-0 text-secondary">
|
No Location Added!
|
||||||
No Location Added!
|
</small>
|
||||||
</small>
|
)}
|
||||||
)}
|
</td>
|
||||||
</td>
|
<td className="text-start">
|
||||||
<td className="text-start">
|
{leave?.notes || (
|
||||||
{leave?.leaveType || (
|
<small className="m-0 text-secondary">
|
||||||
<small className="m-0 text-secondary">
|
No Note Added!
|
||||||
No Reason Type Added!
|
</small>
|
||||||
</small>
|
)}
|
||||||
)}
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
<td className="text-start">
|
);
|
||||||
{leave?.reason || (
|
})
|
||||||
<small className="m-0 text-secondary">
|
|
||||||
No Reason Added!
|
|
||||||
</small>
|
|
||||||
)}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
))
|
|
||||||
) : (
|
) : (
|
||||||
<tr className="text-center">
|
<tr className="text-center">
|
||||||
<td colSpan="5">
|
<td colSpan="4">
|
||||||
<h5>No Leave Records Available...</h5>
|
<h5>No leave Records Available...</h5>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
)}
|
)}
|
||||||
@ -259,4 +254,4 @@ const SingleLeaveSalesCoOrdinator = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default SingleLeaveSalesCoOrdinator;
|
export default SingleUserleave;
|
@ -63,7 +63,7 @@ const TodayLeave = () => {
|
|||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="page-title-box d-flex align-items-center justify-content-between">
|
<div className="page-title-box d-flex align-items-center justify-content-between">
|
||||||
<div style={{ fontSize: "22px" }} className="fw-bold">
|
<div style={{ fontSize: "22px" }} className="fw-bold">
|
||||||
Today's SalesCoOrdinators Leave
|
Today's Leave
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
fontSize: "20px",
|
fontSize: "20px",
|
||||||
@ -74,13 +74,13 @@ const TodayLeave = () => {
|
|||||||
Date : {today}
|
Date : {today}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="page-title-right">
|
<div className="d-flex">
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
color="primary"
|
color="primary"
|
||||||
style={{
|
style={{
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
marginBottom: "1rem",
|
marginRight: "1rem",
|
||||||
textTransform: "capitalize",
|
textTransform: "capitalize",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -91,6 +91,21 @@ const TodayLeave = () => {
|
|||||||
>
|
>
|
||||||
Show SalesCoOrdinator Leave
|
Show SalesCoOrdinator Leave
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
color="primary"
|
||||||
|
style={{
|
||||||
|
fontWeight: "bold",
|
||||||
|
textTransform: "capitalize",
|
||||||
|
}}
|
||||||
|
onClick={() => {
|
||||||
|
navigate("/territorymanager/attendance", {
|
||||||
|
replace: true,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Show Territory Manager Leave
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,7 +37,7 @@ const TerritoryManager = () => {
|
|||||||
isVerified: VerifyTerritoryManagerRef.current.value,
|
isVerified: VerifyTerritoryManagerRef.current.value,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
setTerritoryManagersData(res.data?.salesCoOrinators);
|
setTerritoryManagersData(res.data?.territoryManager);
|
||||||
setTotalData(res.data?.total_data);
|
setTotalData(res.data?.total_data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const msg = err?.response?.data?.message || "Something went wrong!";
|
const msg = err?.response?.data?.message || "Something went wrong!";
|
||||||
|
@ -9,6 +9,7 @@ const Dashboard = () => {
|
|||||||
//1 st
|
//1 st
|
||||||
const [users, setUsers] = useState([]);
|
const [users, setUsers] = useState([]);
|
||||||
const [salescoordinator, setSalescoordinator] = useState([]);
|
const [salescoordinator, setSalescoordinator] = useState([]);
|
||||||
|
const [territorymanager, setTerritorymanager] = useState([]);
|
||||||
const token = isAutheticated();
|
const token = isAutheticated();
|
||||||
|
|
||||||
const getAllUsers = async () => {
|
const getAllUsers = async () => {
|
||||||
@ -29,6 +30,16 @@ const Dashboard = () => {
|
|||||||
// console.log(res.data)
|
// console.log(res.data)
|
||||||
setSalescoordinator(res.data.total_data);
|
setSalescoordinator(res.data.total_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getAllterritorymanager = async () => {
|
||||||
|
let res = await axios.get(`/api/territorymanager/getAll/`, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// console.log(res.data)
|
||||||
|
setTerritorymanager(res.data.total_data);
|
||||||
|
};
|
||||||
// //2nd
|
// //2nd
|
||||||
// const [category, setCategory] = useState([]);
|
// const [category, setCategory] = useState([]);
|
||||||
// const getAllCategory = async () => {
|
// const getAllCategory = async () => {
|
||||||
@ -129,6 +140,7 @@ const Dashboard = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getAllUsers();
|
getAllUsers();
|
||||||
getAllsalescoordinator();
|
getAllsalescoordinator();
|
||||||
|
getAllterritorymanager();
|
||||||
// getAllCategory();
|
// getAllCategory();
|
||||||
// getAllProduct();
|
// getAllProduct();
|
||||||
// getAllRequests();
|
// getAllRequests();
|
||||||
@ -138,6 +150,7 @@ const Dashboard = () => {
|
|||||||
<WidgetsDropdown
|
<WidgetsDropdown
|
||||||
users={users}
|
users={users}
|
||||||
salescoordinator={salescoordinator}
|
salescoordinator={salescoordinator}
|
||||||
|
territorymanager={territorymanager}
|
||||||
// category={category}
|
// category={category}
|
||||||
// product={product}
|
// product={product}
|
||||||
// Requests={Requests}
|
// Requests={Requests}
|
||||||
|
@ -18,7 +18,7 @@ import axios from "axios";
|
|||||||
{
|
{
|
||||||
/* <BeatLoader color="#36d7b7" /> */
|
/* <BeatLoader color="#36d7b7" /> */
|
||||||
}
|
}
|
||||||
const WidgetsDropdown = ({ users,salescoordinator }) => {
|
const WidgetsDropdown = ({ users,salescoordinator,territorymanager }) => {
|
||||||
// const WidgetsDropdown = ({ users, category, product, Requests }) => {
|
// const WidgetsDropdown = ({ users, category, product, Requests }) => {
|
||||||
// const token = isAutheticated();
|
// const token = isAutheticated();
|
||||||
// const [orders, setOrders] = useState([]);
|
// const [orders, setOrders] = useState([]);
|
||||||
@ -149,6 +149,17 @@ const WidgetsDropdown = ({ users,salescoordinator }) => {
|
|||||||
/>
|
/>
|
||||||
</CCol>
|
</CCol>
|
||||||
</CRow>
|
</CRow>
|
||||||
|
<h4>Territory Manager</h4>
|
||||||
|
<CRow>
|
||||||
|
<CCol sm={6} lg={3}>
|
||||||
|
<CWidgetStatsA
|
||||||
|
className="mb-4"
|
||||||
|
color="primary"
|
||||||
|
value={<>{territorymanager}</>}
|
||||||
|
title="Total Territory Manager"
|
||||||
|
/>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
{/* <CCol sm={6} lg={3}>
|
{/* <CCol sm={6} lg={3}>
|
||||||
<CWidgetStatsA
|
<CWidgetStatsA
|
||||||
className="mb-4"
|
className="mb-4"
|
||||||
|
Loading…
Reference in New Issue
Block a user