diff --git a/src/routes.js b/src/routes.js
index b6704bd..12341ef 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -156,6 +156,9 @@ import PendingOrders from "./views/orders/pendingOrders";
import ViewInvoices from "./views/orders/viewInoices";
import SingleDistributorOrder from "./views/RetailDistributors/DistributorOrders";
import DistributorStocks from "./views/RetailDistributors/DistributorStock";
+import AddMultiplerd from "./views/RetailDistributors/AddMultipleRD";
+import AddMultipletm from "./views/TerritoryManager/AddMultipleTM";
+import AddMultiplesc from "./views/SalesCoOrdinators/AddMultipleSC";
const routes = [
//dashboard
@@ -259,6 +262,12 @@ const routes = [
element: ViewRetailDistributorSC,
navName: "SalesCoOrdinators",
},
+ {
+ path: "/add-sales-coordinator/multiple",
+ name: "Add Sales Coordinators",
+ element: AddMultiplesc,
+ navName: "SalesCoOrdinators",
+ },
//TerritoryManager
{
path: "/territorymanager/edit/:id",
@@ -296,6 +305,12 @@ const routes = [
element: ViewRetailDistributorTM,
navName: "TerritoryManagers",
},
+ {
+ path: "/add-territory-manager/multiple",
+ name: "Add Territory Managers",
+ element: AddMultipletm,
+ navName: "TerritoryManagers",
+ },
// Attendence
{
path: "/attendance/today",
@@ -365,6 +380,12 @@ const routes = [
element: AddRetailDistributor,
navName: "RetailDistributor",
},
+ {
+ path: "/add-retail-distributor/multiple",
+ name: "Add Retail Distributor",
+ element: AddMultiplerd,
+ navName: "RetailDistributor",
+ },
{
path: "/retaildistributor/mapping/:id",
name: "Mapping Retail Distributor with PD SC TM",
diff --git a/src/views/RetailDistributors/AddMultipleRD.js b/src/views/RetailDistributors/AddMultipleRD.js
new file mode 100644
index 0000000..96971d1
--- /dev/null
+++ b/src/views/RetailDistributors/AddMultipleRD.js
@@ -0,0 +1,237 @@
+import React, { useState } from "react";
+import axios from "axios";
+import swal from "sweetalert";
+import { isAutheticated } from "src/auth";
+import { useNavigate } from "react-router-dom";
+import { toast } from "react-hot-toast";
+const AddMultiplerd = () => {
+ const [file, setFile] = useState(null);
+ const [loading, setLoading] = useState(false);
+ const [errors, setErrors] = useState([]);
+ const [newlyCreated, setNewlyCreated] = useState([]);
+ const [updatedDistributors, setUpdatedDistributors] = useState([]);
+ const navigate = useNavigate();
+ const token = isAutheticated();
+ const handleFileChange = (e) => {
+ const selectedFile = e.target.files[0];
+ if (
+ selectedFile &&
+ selectedFile.type ===
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+ ) {
+ setFile(selectedFile);
+ } else {
+ swal("Error", "Please upload a valid Excel file", "error");
+ setFile(null);
+ }
+ };
+
+ const handleSubmit = async (e) => {
+ e.preventDefault();
+ if (!file) {
+ toast.error("Please select a file to upload");
+ return;
+ }
+ // console.log(file);
+ // console.log(token);
+ setLoading(true);
+ setErrors([]);
+ setNewlyCreated([]);
+ setUpdatedDistributors([]);
+ try {
+ const formData = new FormData();
+ formData.append("file", file);
+
+ const { data } = await axios.post(
+ "/api/retaildistributor/upload",
+ formData,
+ {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ Authorization: `Bearer ${token}`,
+ },
+ }
+ );
+ // console.log(data);
+ if (data.errors && data.errors.length > 0) {
+ setErrors(data.errors);
+ }
+ if (data.newlyCreated && data.newlyCreated.length > 0) {
+ setNewlyCreated(data.newlyCreated);
+ // console.log(data.newlyCreated);
+ }
+ if (data.updatedDistributors && data.updatedDistributors.length > 0) {
+ setUpdatedDistributors(data.updatedDistributors);
+ // console.log(data.updatedDistributors);
+ }
+
+ // Redirect or display success message
+ if (data.errors && data.errors.length > 0) {
+ setErrors(data.errors);
+ swal({
+ title: "SpreadSheet Upload Successful",
+ text: "A few Retail Distributor have errors. Please fix them and upload again.",
+ icon: "warning",
+ button: "OK",
+ });
+ } else if (
+ data.newlyCreated > 0 ||
+ data.updatedDistributors > 0
+ ) {
+ swal({
+ title: "SpreadSheet Upload Successful",
+ text: "Retail Distributors added successfully.",
+ icon: "success",
+ buttons: "OK",
+ });
+ } else {
+ toast.success("File processed successfully with no new entries.");
+ navigate("/retail-distributor");
+ }
+ setFile(null); // Clear the file input
+ document.querySelector('input[type="file"]').value = "";
+ } catch (error) {
+ console.error("Upload error:", error);
+ swal(
+ "Error",
+ `Failed to upload Retail Distributor: ${
+ error.response?.data?.message || "An unexpected error occurred"
+ }`,
+ "error"
+ );
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return (
+
+
+
+
+
Add Multiple Retail Distributor
+
+
+
+
+
+
+
+
+
+
Upload only .xlsx files*
+
+
+ {errors.length > 0 && (
+
+
Finding errors while adding the Retail Distributor.
+
+
+
+ Retail Distributor Name |
+ Email |
+ Phone |
+ PAN |
+ GST |
+ AAdhar |
+ Message |
+
+
+
+ {errors.map((error, index) => (
+
+ {error.name || "N/A"} |
+ {error.email || "N/A"} |
+ {error.phone || "N/A"} |
+ {error.panNumber || "N/A"} |
+ {error.gstNumber || "N/A"} |
+ {error.AadharNumber || "N/A"} |
+ {error.message} |
+
+ ))}
+
+
+
+ )}
+ {updatedDistributors.length > 0 && (
+
+
Updated Retail Distributors
+
+
+
+ Retail Distributor Name |
+ Email |
+ Phone |
+ PAN |
+ GST |
+ Aadhar |
+ Message |
+
+
+
+ {updatedDistributors.map((distributor, index) => (
+
+ {distributor.name || "N/A"} |
+ {distributor.email || "N/A"} |
+ {distributor.mobile_number || "N/A"} |
+ {distributor.pan_number || "N/A"} |
+ {distributor.gst_number || "N/A"} |
+ {distributor.aadhar_number || "N/A"} |
+ {distributor.updatedFields} |
+
+ ))}
+
+
+
+ )}
+ {newlyCreated.length > 0 && (
+
+
Newly Created Retail Distributors:
+
+
+
+ Retail Distributor Name |
+ Email |
+ Phone |
+ PAN |
+ GST |
+ Aadhar |
+
+
+
+ {newlyCreated.map((distributor, index) => (
+
+ {distributor?.Kyc?.name || "N/A"} |
+ {distributor?.Kyc?.email || "N/A"} |
+ {distributor?.Kyc?.mobile_number || "N/A"} |
+ {distributor?.Kyc?.pan_number || "N/A"} |
+ {distributor?.Kyc?.gst_number || "N/A"} |
+ {distributor?.Kyc?.aadhar_number || "N/A"} |
+
+ ))}
+
+
+
+ )}
+
+ );
+};
+
+export default AddMultiplerd;
diff --git a/src/views/RetailDistributors/RetailDistributor.js b/src/views/RetailDistributors/RetailDistributor.js
index bee702c..89448df 100644
--- a/src/views/RetailDistributors/RetailDistributor.js
+++ b/src/views/RetailDistributors/RetailDistributor.js
@@ -90,6 +90,18 @@ const RetailDistributor = () => {
>
Add Retail Distributor
+
@@ -251,7 +263,9 @@ const RetailDistributor = () => {
View
-
+