diff --git a/package.json b/package.json index 9602544..bbf9af3 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ "@coreui/utils": "^1.3.1", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", + "@headlessui/react": "^2.1.2", + "@heroicons/react": "^2.1.5", "@material-ui/core": "^4.12.4", "@material-ui/data-grid": "^4.0.0-alpha.37", "@mui/icons-material": "^5.14.14", diff --git a/src/_nav.js b/src/_nav.js index b9a34ac..a38edbb 100644 --- a/src/_nav.js +++ b/src/_nav.js @@ -83,13 +83,13 @@ const _nav = [ to: "/salescoordinators", group: "SalesCoOrdinator", }, - // { - // component: CNavItem, - // name: "Attendance", - // icon: , - // to: "/attendance/today", - // group: "AttendanceSalesCoOrdinator", - // }, + { + component: CNavItem, + name: "Attendance", + icon: , + to: "/attendance/today", + group: "AttendanceSalesCoOrdinator", + }, // { // component: CNavGroup, // name: "Orders", diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index 14aae50..3a82add 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -31,7 +31,7 @@ const AppSidebar = () => { const [userdata, setUserData] = useState(null); const token = isAutheticated(); - console.log("userDatt", userdata); + // console.log("userDatt", userdata); useEffect(() => { const getUser = async () => { diff --git a/src/index.js b/src/index.js index adbdd11..b47a948 100644 --- a/src/index.js +++ b/src/index.js @@ -15,8 +15,8 @@ import { cibGmail } from "@coreui/icons"; import { createRoot } from "react-dom/client"; const setupAxios = () => { - axios.defaults.baseURL = "http://localhost:5000"; - // axios.defaults.baseURL = "https://cheminova-api-2.onrender.com"; + // axios.defaults.baseURL = "http://localhost:5000"; + axios.defaults.baseURL = "https://cheminova-api-2.onrender.com"; axios.defaults.headers = { "Cache-Control": "no-cache,no-store", diff --git a/src/views/PrincipalDistributors/addPrincipalDistributor.js b/src/views/PrincipalDistributors/addPrincipalDistributor.js index c573f70..dc6f378 100644 --- a/src/views/PrincipalDistributors/addPrincipalDistributor.js +++ b/src/views/PrincipalDistributors/addPrincipalDistributor.js @@ -1,101 +1,87 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { TextField, Button, Card, - FormControl, Grid, + Typography, FormHelperText, - OutlinedInput, - Box, + Autocomplete, + CircularProgress, } from "@mui/material"; import { useNavigate } from "react-router-dom"; import toast from "react-hot-toast"; import axios from "axios"; import { isAutheticated } from "src/auth"; - -const styles = { - formStyle: { - fontWeight: "700", - fontSize: "12px", - fontFamily: "inter", - marginBottom: "3px", - marginLeft: "0", - }, - topRightButton: { - position: "absolute", - top: "10px", - right: "10px", - }, -}; +import { City, State } from "country-state-city"; const AddPrincipalDistributor = () => { const navigate = useNavigate(); + const token = isAutheticated(); + const [user, setUser] = useState({ name: "", email: "", - password: "", phone: "", }); - const [id, setUserId] = useState(""); - const token = isAutheticated(); - const [loading, setLoading] = useState(false); const [data, setData] = useState({ street: "", city: "", state: "", postalCode: "", - country: "", - company_name: "", - gst_number: "", + country: "India", + tradeName: "", + gstNumber: "", + panNumber: "", }); - const handleChange = (e) => { - setData((prev) => ({ ...prev, [e.target.name]: e.target.value })); - }; + const [loading, setLoading] = useState(false); + const [stateOptions, setStateOptions] = useState([]); + const [cityOptions, setCityOptions] = useState([]); + const [selectedState, setSelectedState] = useState(null); + const [selectedCity, setSelectedCity] = useState(null); - const handleInputChanges = (e) => { + useEffect(() => { + const fetchStates = async () => { + const states = State.getStatesOfCountry("IN").map((state) => ({ + label: state.name, + value: state.isoCode, + })); + setStateOptions(states); + }; + fetchStates(); + }, []); + + useEffect(() => { + const fetchCities = async () => { + if (selectedState) { + const cities = City.getCitiesOfState("IN", selectedState.value).map( + (city) => ({ + label: city.name, + value: city.name, + }) + ); + setCityOptions(cities); + } + }; + fetchCities(); + }, [selectedState]); + + const handleInputChange = (e) => { setUser({ ...user, [e.target.name]: e.target.value }); }; - const handleAddressSubmit = (e) => { - e.preventDefault(); - if ( - data.street === "" || - data.city === "" || - data.state === "" || - data.postalCode === "" || - data.country === "" - ) { - toast.error("Please fill all mandatory fields."); - return; - } - setLoading(true); - axios - .post( - `/api/shipping/address/admin/new/${id}`, - { ...data }, - { - headers: { - "Access-Control-Allow-Origin": "*", - Authorization: `Bearer ${token}`, - }, - } - ) - .then((res) => { - setLoading(false); - navigate("/principal-distributor"); - toast.success(res.data.message ? res.data.message : "Address Added!"); - }) - .catch((error) => { - setLoading(false); - toast.error( - error.response.data.message - ? error.response.data.message - : "Something went wrong!" - ); - }); + const handleDataChange = (e) => { + setData({ ...data, [e.target.name]: e.target.value }); + }; + + const handleStateChange = (event, newValue) => { + setSelectedState(newValue); + }; + + const handleCityChange = (event, newValue) => { + setSelectedCity(newValue); }; const generatePassword = (name, email) => { @@ -119,25 +105,51 @@ const AddPrincipalDistributor = () => { const handleFormSubmit = async (e) => { e.preventDefault(); try { - if (!user.name || !user.email || !user.phone) { + if ( + !user.name || + !user.email || + !user.phone || + !selectedState || + !selectedCity || + !data.street || + !data.postalCode + ) { throw new Error("Fill all fields!"); } - + setLoading(true); const generatedPassword = generatePassword(user.name, user.email); - setUser({ ...user, password: generatedPassword }); - const response = await axios.post("/api/v1/user/register", { + const userResponse = await axios.post("/api/v1/user/register", { ...user, password: generatedPassword, }); - if (response.status === 201) { - toast.success("User Added Successfully"); - // console.log(response.data); - setUserId(response.data.userId); + + if (userResponse.status === 201) { + const userId = userResponse.data.userId; + + const addressResponse = await axios.post( + `/api/shipping/address/admin/new/${userId}`, + { + ...data, + state: selectedState.label, // Send selected state label + city: selectedCity.label, // Send selected city label + }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + setLoading(false); + if (addressResponse.status === 201) { + toast.success("Principal Distributor and Address Added Successfully"); + navigate("/principal-distributor"); + } } } catch (error) { - console.log(error.response.data.message); - toast.error(error.response.data.message); + setLoading(false); + console.error("Error adding principal distributor and address:", error); + toast.error(error.response?.data?.message || "Something went wrong!"); } }; @@ -154,204 +166,196 @@ const AddPrincipalDistributor = () => { variant="outlined" color="secondary" onClick={handleCancel} - sx={styles.topRightButton} + sx={{ position: "absolute", top: "10px", right: "10px" }} > Cancel - -
- -
- -
- -
- -
- - -
- - - - - STREET ADDRESS* - - - + + Add Principal Distributor + + + + Basic Information + + + + - - - - COUNTRY* - - - + + - - - - TOWN CITY* - - - - - - - - STATE* - - - - - - - - ZIP CODE* - - - - - - - - Company Name - - - - - - - - GST Number - - - - - - + + + + + Business Details + + + + + + + + + + + + + Address + + + + + + option.label} + value={selectedState} + onChange={handleStateChange} + renderInput={(params) => ( + + )} + /> + + + option.label} + value={selectedCity} + onChange={handleCityChange} + renderInput={(params) => ( + + )} + /> + + + + + + + + + + diff --git a/src/views/PrincipalDistributors/principalDistributor.js b/src/views/PrincipalDistributors/principalDistributor.js index 0c65d7e..11493ea 100644 --- a/src/views/PrincipalDistributors/principalDistributor.js +++ b/src/views/PrincipalDistributors/principalDistributor.js @@ -192,8 +192,9 @@ const principalDistributor = () => { style={{ background: "rgb(140, 213, 213)" }} > - Principal Distributor Name - Unique Id + Unique Id + Name + Email {/* Profile Image */} Date Registered @@ -220,9 +221,9 @@ const principalDistributor = () => { showData.map((user, i) => { return ( + {user.uniqueId} {user.name} - {user._id} - + {user.email} {new Date(user.createdAt).toLocaleString( "en-IN", diff --git a/src/views/PrincipalDistributors/singlePrincipalDistributorAllDetails.js b/src/views/PrincipalDistributors/singlePrincipalDistributorAllDetails.js index bbf79a5..8a5697e 100644 --- a/src/views/PrincipalDistributors/singlePrincipalDistributorAllDetails.js +++ b/src/views/PrincipalDistributors/singlePrincipalDistributorAllDetails.js @@ -137,48 +137,66 @@ const SinglePrincipalDistributorAllDetails = () => {
-
• Customer Profile
+
• Principal Distributor Profile
- - Customer Name: {user?.name} - - - Customer ID: {user?._id} - - - Date Registered : - - {" "} - {new Date(user?.createdAt).toLocaleString("en-IN", { - weekday: "short", - month: "short", - day: "numeric", - year: "numeric", - hour: "numeric", - minute: "numeric", - hour12: true, - })} - - - - Last Purchase: - - {userOrder?.length > 0 - ? new Date(userOrder[0]?.createdAt).toLocaleString("en-IN", { - weekday: "short", - month: "short", - day: "numeric", - year: "numeric", - hour: "numeric", - minute: "numeric", - hour12: true, - }) - : userOrder - ? "No Purchase" - : "Loading"} - - -
+ + Principal Distributor ID: + + {user?.uniqueId} + + + + Name: + + {user?.name} + + + + Mail: + + {user?.email} + + + + Mobile Number: + + {user?.phone} + + + + Date Registered: + + {new Date(user?.createdAt).toLocaleString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "numeric", + hour12: true, + })} + + + + Last Purchase: + + {userOrder?.length > 0 + ? new Date(userOrder[0]?.createdAt).toLocaleString("en-IN", { + weekday: "short", + month: "short", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "numeric", + hour12: true, + }) + : userOrder + ? "No Purchase" + : "Loading"} + + +
+
• Addresses{" "} @@ -216,10 +234,10 @@ const SinglePrincipalDistributorAllDetails = () => { {i + 1} - {address?.first_Name} {address?.last_name}, + {address?.first_Name} {address?.last_name} {address.company_name ? `${address.company_name},` - : ""} + : "No Company_Name "} {address.gst_number ? `${address.gst_number},` : ""} {address?.phone_Number},{address?.street}, {address?.city},{address?.state},{address?.country}, diff --git a/src/views/Profile/EditProfile.js b/src/views/Profile/EditProfile.js index b1dc77d..6426988 100644 --- a/src/views/Profile/EditProfile.js +++ b/src/views/Profile/EditProfile.js @@ -3,7 +3,7 @@ import { CForm, CCol, CFormLabel, CContainer, CRow, CCardGroup, CCard, CCardBody import { useState, useEffect } from 'react' import axios from 'axios' -import { useNavigate } from 'react-router-dom' +import { Navigate, useNavigate } from 'react-router-dom' import { isAutheticated } from 'src/auth' const EditProfile = () => { @@ -115,7 +115,7 @@ const EditProfile = () => { } } const handleCancle = () => { - history.push('/dashboard') + Navigate("/dashboard"); } useEffect(() => { diff --git a/src/views/SalesCoOrdinators/AddSalesCoOrdinator.js b/src/views/SalesCoOrdinators/AddSalesCoOrdinator.js index c3dd063..a1556ab 100644 --- a/src/views/SalesCoOrdinators/AddSalesCoOrdinator.js +++ b/src/views/SalesCoOrdinators/AddSalesCoOrdinator.js @@ -81,6 +81,11 @@ const AddSalesCoOrdinator = () => { } }; + // Function to handle cancel button click + const handleCancel = () => { + navigate("/salescoordinators"); // Navigate to '/salescoordinators' + }; + return (
@@ -89,6 +94,9 @@ const AddSalesCoOrdinator = () => {

Add Sales Coordinator

+
diff --git a/src/views/SalesCoOrdinators/SalesCoOrdinator.js b/src/views/SalesCoOrdinators/SalesCoOrdinator.js index 7165301..7eaa430 100644 --- a/src/views/SalesCoOrdinators/SalesCoOrdinator.js +++ b/src/views/SalesCoOrdinators/SalesCoOrdinator.js @@ -208,6 +208,7 @@ const SalesCoOrdinator = () => { style={{ background: "#ecdddd" }} > + Unique Id Name Mobile No. Email @@ -228,6 +229,9 @@ const SalesCoOrdinator = () => { salescoordinatorsData?.map((salescoordinator, i) => { return ( + + {salescoordinator?.uniqueId} + {salescoordinator?.name} diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index 930b58a..6cf0e7d 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -8,6 +8,7 @@ const WidgetsDropdown = lazy(() => import("../widgets/WidgetsDropdown.js")); const Dashboard = () => { //1 st const [users, setUsers] = useState([]); + const [salescoordinator, setSalescoordinator] = useState([]); const token = isAutheticated(); const getAllUsers = async () => { @@ -19,39 +20,48 @@ const Dashboard = () => { // console.log(res.data) setUsers(res.data.users); }; - //2nd - const [category, setCategory] = useState([]); - const getAllCategory = async () => { - let res = await axios.get(`/api/category/getCategories`, { + const getAllsalescoordinator = async () => { + let res = await axios.get(`/api/salescoordinator/getAll/`, { headers: { Authorization: `Bearer ${token}`, }, }); - // console.log(res.data); - setCategory(res?.data?.categories); - }; - //3rd - const [product, setProduct] = useState([]); - const getAllProduct = async () => { - let res = await axios.get(`/api/product/getAll/user/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setProduct(res?.data?.product); - }; - // 3rd - const [Requests, setRequests] = useState([]); - const getAllRequests = async () => { - let res = await axios.get(`/api/contact/request/getAll/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setRequests(res.data.contactRequest); + // console.log(res.data) + setSalescoordinator(res.data.total_data); }; + // //2nd + // const [category, setCategory] = useState([]); + // const getAllCategory = async () => { + // let res = await axios.get(`/api/category/getCategories`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // }); + // // console.log(res.data); + // setCategory(res?.data?.categories); + // }; + // //3rd + // const [product, setProduct] = useState([]); + // const getAllProduct = async () => { + // let res = await axios.get(`/api/product/getAll/user/`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // }); + // // console.log(res.data); + // setProduct(res?.data?.product); + // }; + // // 3rd + // const [Requests, setRequests] = useState([]); + // const getAllRequests = async () => { + // let res = await axios.get(`/api/contact/request/getAll/`, { + // headers: { + // Authorization: `Bearer ${token}`, + // }, + // }); + // // console.log(res.data); + // setRequests(res.data.contactRequest); + // }; // //3 requiment // const [requirement, setRequirement] = useState([]) @@ -118,17 +128,19 @@ const Dashboard = () => { // }, [token]); useEffect(() => { getAllUsers(); - getAllCategory(); - getAllProduct(); - getAllRequests(); + getAllsalescoordinator(); + // getAllCategory(); + // getAllProduct(); + // getAllRequests(); }, [token]); return ( <> ); diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index 1e4b51a..50c6053 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -18,126 +18,138 @@ import axios from "axios"; { /* */ } +const WidgetsDropdown = ({ users,salescoordinator }) => { +// const WidgetsDropdown = ({ users, category, product, Requests }) => { +// const token = isAutheticated(); +// const [orders, setOrders] = useState([]); +// const [todayorders, setTodayOrders] = useState([]); +// const [monthorders, setMonthOrders] = useState([]); +// const [yearorders, setYearOrders] = useState([]); +// const [lastyearorders, setLastYearOrders] = useState([]); +// const [processingorders, setProcessingOrders] = useState([]); +// const [dispatchedorders, setDispatchedOrders] = useState([]); +// const [deliveredorders, setDeliveredOrders] = useState([]); +// const [cancelledorders, setCancelledOrders] = useState([]); +// const getAllOrder = async () => { +// let res = await axios.get(`/api/order/getAll/`, { +// headers: { +// Authorization: `Bearer ${token}`, +// }, +// }); +// // console.log(res.data); +// setOrders(res?.data?.order); +// setTodayOrders( +// res?.data?.order?.filter((order) => { +// return ( +// new Date(order.createdAt).toDateString() === new Date().toDateString() +// ); +// }) +// ); +// setMonthOrders( +// res?.data?.order?.filter((order) => { +// return new Date(order.createdAt).getMonth() === new Date().getMonth(); +// }) +// ); +// setYearOrders( +// res?.data?.order?.filter((order) => { +// return ( +// new Date(order.createdAt).getFullYear() === new Date().getFullYear() +// ); +// }) +// ); +// setLastYearOrders( +// res?.data?.order?.filter((order) => { +// return ( +// new Date(order.createdAt).getFullYear() === +// new Date().getFullYear() - 1 +// ); +// }) +// ); +// }; +// const getProcessingOrder = async () => { +// let res = await axios.get(`/api/order/getAll/processing`, { +// headers: { +// Authorization: `Bearer ${token}`, +// }, +// }); +// // console.log(res.data); +// setProcessingOrders(res?.data?.order); +// }; +// const getDispatchedOrder = async () => { +// let res = await axios.get(`/api/order/getAll/dispatched`, { +// headers: { +// Authorization: `Bearer ${token}`, +// }, +// }); +// // console.log(res.data); +// setDispatchedOrders(res?.data?.order); +// }; +// const getDeliveredOrder = async () => { +// let res = await axios.get(`/api/order/getAll/delivered`, { +// headers: { +// Authorization: `Bearer ${token}`, +// }, +// }); +// // console.log(res.data); +// setDeliveredOrders(res?.data?.order); +// }; +// const getCancelledOrder = async () => { +// let res = await axios.get(`/api/order/getAll/cancelled`, { +// headers: { +// Authorization: `Bearer ${token}`, +// }, +// }); +// // console.log(res.data); +// setCancelledOrders(res?.data?.order); +// }; -const WidgetsDropdown = ({ users, category, product, Requests }) => { - const token = isAutheticated(); - const [orders, setOrders] = useState([]); - const [todayorders, setTodayOrders] = useState([]); - const [monthorders, setMonthOrders] = useState([]); - const [yearorders, setYearOrders] = useState([]); - const [lastyearorders, setLastYearOrders] = useState([]); - const [processingorders, setProcessingOrders] = useState([]); - const [dispatchedorders, setDispatchedOrders] = useState([]); - const [deliveredorders, setDeliveredOrders] = useState([]); - const [cancelledorders, setCancelledOrders] = useState([]); - const getAllOrder = async () => { - let res = await axios.get(`/api/order/getAll/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setOrders(res?.data?.order); - setTodayOrders( - res?.data?.order?.filter((order) => { - return ( - new Date(order.createdAt).toDateString() === new Date().toDateString() - ); - }) - ); - setMonthOrders( - res?.data?.order?.filter((order) => { - return new Date(order.createdAt).getMonth() === new Date().getMonth(); - }) - ); - setYearOrders( - res?.data?.order?.filter((order) => { - return ( - new Date(order.createdAt).getFullYear() === new Date().getFullYear() - ); - }) - ); - setLastYearOrders( - res?.data?.order?.filter((order) => { - return ( - new Date(order.createdAt).getFullYear() === - new Date().getFullYear() - 1 - ); - }) - ); - }; - const getProcessingOrder = async () => { - let res = await axios.get(`/api/order/getAll/processing`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setProcessingOrders(res?.data?.order); - }; - const getDispatchedOrder = async () => { - let res = await axios.get(`/api/order/getAll/dispatched`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setDispatchedOrders(res?.data?.order); - }; - const getDeliveredOrder = async () => { - let res = await axios.get(`/api/order/getAll/delivered`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setDeliveredOrders(res?.data?.order); - }; - const getCancelledOrder = async () => { - let res = await axios.get(`/api/order/getAll/cancelled`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - // console.log(res.data); - setCancelledOrders(res?.data?.order); - }; - - useEffect(() => { - getAllOrder(); - getProcessingOrder(); - getDispatchedOrder(); - getDeliveredOrder(); - getCancelledOrder(); - }, [token]); - const date = new Date(); - const day = date.getDate(); - const suffix = - day === 1 || day === 21 || day === 31 - ? "st" - : day === 2 || day === 22 - ? "nd" - : day === 3 || day === 23 - ? "rd" - : "th"; - const month = date.toLocaleDateString("en-US", { month: "long" }); - const formattedDate = `${day}${suffix} ${month}`; - // console.log(formattedDate); - const year = date.toLocaleDateString("en-US", { year: "numeric" }); - const formattedmonth = `${month} ${year}`; +// useEffect(() => { +// getAllOrder(); +// getProcessingOrder(); +// getDispatchedOrder(); +// getDeliveredOrder(); +// getCancelledOrder(); +// }, [token]); +// const date = new Date(); +// const day = date.getDate(); +// const suffix = +// day === 1 || day === 21 || day === 31 +// ? "st" +// : day === 2 || day === 22 +// ? "nd" +// : day === 3 || day === 23 +// ? "rd" +// : "th"; +// const month = date.toLocaleDateString("en-US", { month: "long" }); +// const formattedDate = `${day}${suffix} ${month}`; +// // console.log(formattedDate); +// const year = date.toLocaleDateString("en-US", { year: "numeric" }); +// const formattedmonth = `${month} ${year}`; return ( <> - {/*

Users and Requests

+

Principal Distributor

{users.length}} - title="Total Users" + title="Total Principal Distributor" /> + +

Sales CoOrdinator

+ + {salescoordinator}} + title="Total Sales CoOrdinator" + /> + + + {/* { value={<>{cancelledorders.length}} title="Orders - Cancelled" /> - - */} + + */} ); };