diff --git a/app.js b/app.js
index 2a5385c..b7b75de 100644
--- a/app.js
+++ b/app.js
@@ -163,7 +163,6 @@ import CurrencyRoute from "./resources/Currency/CurrencyRoute.js";
import ConfigRouter from "./resources/setting/Configration/Config_routes.js";
-import TaxRouter from "./resources/Tax/tax_routes.js";
//specialties
import SpecialtiesRouter from "./resources/Specialties/SpecialtiesRoute.js";
import ShippingAddressRoute from "./resources/ShippingAddresses/ShippingAddressRoute.js";
@@ -233,8 +232,6 @@ app.use("/api/language", LanguageRoute);
//Purpose
app.use("/api/purpose", PurposeRoute);
app.use("/api/business", orderRoute);
-//Tax
-app.use("/api/tax", TaxRouter);
//Currency Route
app.use("/api/currency", CurrencyRoute);
//config
diff --git a/public/uploads/Add-PD.xlsx b/public/uploads/Add-PD.xlsx
new file mode 100644
index 0000000..572c931
Binary files /dev/null and b/public/uploads/Add-PD.xlsx differ
diff --git a/resources/Products/ProductController.js b/resources/Products/ProductController.js
index dde518e..b4d91e7 100644
--- a/resources/Products/ProductController.js
+++ b/resources/Products/ProductController.js
@@ -3,275 +3,12 @@ import cloudinary from "../../Utils/cloudinary.js";
import { v4 as uuidv4 } from "uuid";
import { CategoryModel } from "../Category/CategoryModel.js";
import { BrandModel } from "../Brands/BrandsModel.js";
-import User from "../user/userModel.js";
-import { Tax } from "../Tax/tax_model.js";
import XLSX from "xlsx";
import fs from "fs";
import path from "path";
import mongoose from "mongoose";
// Function to handle product upload
-// export const uploadProducts = async (req, res) => {
-// try {
-// if (!req.files || !req.files.file) {
-// return res.status(400).json({ message: "No file uploaded" });
-// }
-
-// const file = req.files.file;
-// const filePath = path.join("public", "uploads", file.name);
-
-// // Ensure 'uploads' directory exists
-// if (!fs.existsSync(path.dirname(filePath))) {
-// fs.mkdirSync(path.dirname(filePath), { recursive: true });
-// }
-
-// // Move the file from temp to the uploads directory
-// await file.mv(filePath);
-
-// // Process the file
-// const fileBuffer = fs.readFileSync(filePath);
-// const workbook = XLSX.read(fileBuffer, { type: "buffer" });
-// const sheetName = workbook.SheetNames[0];
-// const worksheet = workbook.Sheets[sheetName];
-// const data = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
-
-// if (data.length <= 1) {
-// return res.status(400).json({ message: "Empty spreadsheet or no data found" });
-// }
-
-// const headers = data[0];
-
-// // Map headers from the Excel file to your schema
-// const headerMapping = {
-// SKU: "SKU",
-// "Product Name": "name",
-// "Category Name": "category",
-// "Brand Name": "brand",
-// Price: "price",
-// "GST (in %)": "GST",
-// "HSN Code": "HSN_Code",
-// "Description (Optional)": "description",
-// };
-
-// const requiredHeaders = Object.keys(headerMapping);
-
-// if (!requiredHeaders.every((header) => headers.includes(header))) {
-// return res.status(400).json({ message: "Missing required columns in spreadsheet" });
-// }
-
-// const errors = [];
-// const newlyCreated = [];
-// const updatedProducts = [];
-
-// for (let i = 1; i < data.length; i++) {
-// const row = data[i];
-// const item = {};
-
-// headers.forEach((header, index) => {
-// if (headerMapping[header]) {
-// item[headerMapping[header]] = row[index] !== undefined ? row[index] : "";
-// }
-// });
-
-// // Initialize error tracking for each item
-// const missingFields = new Set();
-// const notFoundErrors = new Set();
-
-// let { SKU, name, category, brand, price, GST, HSN_Code, description } = item;
-
-// // Trim leading and trailing spaces from product name and GST
-// name = name ? name.trim() : "";
-
-// // Validate required fields
-// if (!SKU) missingFields.add("SKU");
-// if (!name) missingFields.add("name");
-// if (!category) missingFields.add("category");
-// if (!brand) missingFields.add("brand");
-// if (price === undefined || price === "") missingFields.add("price");
-// if (!GST) missingFields.add("GST");
-// if (!HSN_Code) missingFields.add("HSN_Code");
-
-// // Validate or create category
-// let categoryName = "";
-// if (category) {
-// let categoryDoc = await CategoryModel.findOne({
-// categoryName: { $regex: new RegExp(`^${category.trim()}$`, "i") },
-// }).exec();
-// if (!categoryDoc) {
-// // If category not found, create a new one
-// categoryDoc = await CategoryModel.create({
-// categoryName: category.trim(),
-// addedBy: req.user._id,
-// });
-// }
-// item.category = categoryDoc._id;
-// categoryName = categoryDoc.categoryName;
-// }
-
-// // Validate or create brand
-// let brandName = "";
-// if (brand) {
-// let brandDoc = await BrandModel.findOne({
-// brandName: { $regex: new RegExp(`^${brand.trim()}$`, "i") },
-// }).exec();
-// if (!brandDoc) {
-// // If brand not found, create a new one
-// brandDoc = await BrandModel.create({
-// brandName: brand.trim(),
-// addedBy: req.user._id,
-// });
-// }
-// item.brand = brandDoc._id;
-// brandName = brandDoc.brandName;
-// }
-
-// // Combine all errors into a single message
-// let errorMessage = "";
-// if (missingFields.size > 0) {
-// errorMessage += `Missing fields: ${Array.from(missingFields).join(", ")}. `;
-// }
-// if (notFoundErrors.size > 0) {
-// errorMessage += `Not found: ${Array.from(notFoundErrors).join(", ")}.`;
-// }
-
-// // If there are errors, push them to the errors array
-// if (errorMessage.trim()) {
-// errors.push({
-// SKU: SKU || "N/A",
-// productName: name || "N/A",
-// category: category || "N/A",
-// brand: brand || "N/A",
-// GST: GST || "N/A",
-// HSN_Code: HSN_Code || "N/A",
-// price: price || "N/A",
-// message: errorMessage.trim(),
-// });
-// continue;
-// }
-
-// // Ensure fields are set to empty strings if not provided
-// description = description !== undefined ? description : "";
-
-// // Check for existing product by SKU
-// let existingProduct = await Product.findOne({ SKU }).exec();
-
-// if (existingProduct) {
-// // Track changes
-// const updatedFields = [];
-// let updatedProduct = { ...existingProduct._doc };
-
-// // Fetch existing category name and brand name
-// const existingCategory = await CategoryModel.findById(existingProduct.category).exec();
-// const existingBrand = await BrandModel.findById(existingProduct.brand).exec();
-
-// // Update product fields if they have changed
-// if (name !== existingProduct.name) {
-// updatedFields.push("name");
-// updatedProduct.name = name;
-// }
-// if (category && existingProduct.category.toString() !== item.category.toString()) {
-// updatedFields.push("category");
-// updatedProduct.category = categoryName;
-// } else {
-// updatedProduct.category = existingCategory ? existingCategory.categoryName : "";
-// }
-// if (price !== undefined && price !== "" && existingProduct.price !== price) {
-// updatedFields.push("price");
-// updatedProduct.price = price;
-// }
-// if (brand && existingProduct.brand.toString() !== item.brand.toString()) {
-// updatedFields.push("brand");
-// updatedProduct.brand = brandName;
-// } else {
-// updatedProduct.brand = existingBrand ? existingBrand.brandName : "";
-// }
-// if (HSN_Code !== existingProduct.HSN_Code) {
-// updatedFields.push("HSN_Code");
-// updatedProduct.HSN_Code = HSN_Code;
-// }
-// if (GST !== existingProduct.GST) {
-// updatedFields.push("GST");
-// updatedProduct.GST = GST;
-// }
-// if (description !== existingProduct.description) {
-// updatedFields.push("description");
-// updatedProduct.description = description;
-// }
-
-// // Only update if there are changes
-// if (updatedFields.length > 0) {
-// try {
-// await Product.updateOne(
-// { SKU: existingProduct.SKU },
-// {
-// $set: {
-// category: item.category || existingProduct.category,
-// price: price !== undefined && price !== "" ? price : existingProduct.price,
-// GST: GST || existingProduct.GST,
-// HSN_Code: HSN_Code || existingProduct.HSN_Code,
-// name: name,
-// description: description,
-// product_Status: item.product_Status || existingProduct.product_Status || "Active",
-// },
-// }
-// );
-// updatedProducts.push({
-// ...updatedProduct,
-// updatedFields: updatedFields.join(", "), // Track updated fields
-// });
-// } catch (error) {
-// errors.push({
-// SKU,
-// message: "Failed to update product",
-// });
-// }
-// }
-// continue;
-// }
-
-// // Create new product
-// if (item.category && item.brand) {
-// const productData = {
-// SKU,
-// name,
-// category: item.category,
-// brand: item.brand,
-// price,
-// GST,
-// HSN_Code,
-// description: description,
-// product_Status: item.product_Status || "Active",
-// addedBy: req.user._id,
-// };
-// try {
-// const newProduct = await Product.create(productData);
-// newlyCreated.push({
-// ...newProduct._doc,
-// category: categoryName,
-// brand: brandName,
-// });
-// } catch (error) {
-// errors.push({
-// SKU,
-// message: "Failed to create product",
-// });
-// }
-// }
-// }
-
-// fs.unlinkSync(filePath); // Clean up uploaded file
-
-// res.status(201).json({
-// message: errors.length > 0 ? "Products processed with errors!" : "Products processed successfully!",
-// newlyCreated: newlyCreated,
-// updatedProducts: updatedProducts,
-// errors,
-// });
-// } catch (error) {
-// console.error("Error:", error);
-// res.status(500).json({ message: "Internal server error" });
-// }
-// };
export const uploadProducts = async (req, res) => {
try {
if (!req.files || !req.files.file) {
diff --git a/resources/Tax/tax_controller.js b/resources/Tax/tax_controller.js
deleted file mode 100644
index 15fcf38..0000000
--- a/resources/Tax/tax_controller.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import { Tax } from "./tax_model.js";
-
-export const addTax = async (req, res) => {
- if (!req.user) {
- return res.status(400).json({ message: "User Not Found" });
- }
- const tax = new Tax({
- name: req.body.name,
- tax: req.body.tax,
- hsn_code: req.body.hsn_code,
- });
- try {
- const data = await tax.save();
- res.status(201).json({ message: "Success", data: data });
- } catch (error) {
- res.status(500).json({ message: error.message ? error.message : "Something went Wrong" });
- }
-};
-
-export const updateTax = async (req, res) => {
- if (!req.user) {
- return res.status(400).json({ message: "User Not Found" });
- }
- const id = req.params.id;
- const queryObj = req.body;
-
- try {
- const data = await Tax.findByIdAndUpdate(id, queryObj, {
- new: true,
- });
- res.status(200).json({ message: "Success", data: data });
- } catch (error) {
- res.status(500).json({ message: error.message, message: "failed" });
- }
-};
-
-export const deleteTax = async (req, res) => {
- if (!req.user) {
- return res.status(400).json({ message: "User Not Found" });
- }
- const id = req.params.id;
- try {
- const data = await Tax.findByIdAndDelete(id);
- res.status(200).json({ message: "Success" });
- } catch (error) {
- res.status(500).json({ message: error.message, message: "failed" });
- }
-};
-
-export const getTaxes = async (req, res) => {
- if (!req.user) {
- return res.status(400).json({ message: "User Not Found" });
- }
-
- try {
- const data = await Tax.find().sort({ createdAt: -1 });
- res.status(200).json(data);
- } catch (error) {
- res.status(500).json({ message: error.message, message: "failed" });
- }
-};
-
-export const getTax = async (req, res) => {
- if (!req.user) {
- return res.status(400).json({ message: "User Not Found" });
- }
- try {
- let { id } = req.params;
- const tax = await Tax.findById({ _id: id });
- return res.status(200).json(tax);
- } catch (error) {
- return res.status(504).json({
- status: "failed",
- error,
- });
- }
-};
diff --git a/resources/Tax/tax_model.js b/resources/Tax/tax_model.js
deleted file mode 100644
index fe6af8e..0000000
--- a/resources/Tax/tax_model.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import mongoose from "mongoose";
-
-const { Schema, model } = mongoose;
-
-const TaxSchema = new Schema(
- {
- name: String,
- hsn_code: Number,
- tax: Number,
- },
- { timestamps: true }
-);
-
-export const Tax = model("Tax", TaxSchema);
diff --git a/resources/Tax/tax_routes.js b/resources/Tax/tax_routes.js
deleted file mode 100644
index 7bcae6a..0000000
--- a/resources/Tax/tax_routes.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Router } from "express";
-import { authorizeRoles, isAuthenticatedUser } from "../../middlewares/auth.js";
-import {
- addTax,
- updateTax,
- deleteTax,
- getTaxes,
- getTax,
-} from "./tax_controller.js";
-const router = Router();
-
-router
- .route("/add_tax")
- .post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addTax);
-router
- .route("/update_tax/:id")
- .patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateTax);
-router
- .route("/delete_tax/:id")
- .delete(isAuthenticatedUser, authorizeRoles("admin", "Employee"), deleteTax);
-router.route("/view_tax/:id").get(isAuthenticatedUser, getTax);
-router.route("/view_tax").get(isAuthenticatedUser, getTaxes);
-export default router;
diff --git a/resources/user/userController.js b/resources/user/userController.js
index d4eab78..5e64cef 100644
--- a/resources/user/userController.js
+++ b/resources/user/userController.js
@@ -59,6 +59,278 @@ const generatePassword = (name, email) => {
return password;
};
+// export const uploadPrincipaldistributors = async (req, res) => {
+// try {
+// if (!req.files || !req.files.file) {
+// return res.status(400).json({ message: "No file uploaded" });
+// }
+
+// const file = req.files.file;
+// const filePath = path.join("public", "uploads", file.name);
+
+// // Ensure 'uploads' directory exists
+// if (!fs.existsSync(path.dirname(filePath))) {
+// fs.mkdirSync(path.dirname(filePath), { recursive: true });
+// }
+
+// // Move the file from temp to the uploads directory
+// await file.mv(filePath);
+
+// // Process the file
+// const fileBuffer = fs.readFileSync(filePath);
+// const workbook = XLSX.read(fileBuffer, { type: "buffer" });
+// const sheetName = workbook.SheetNames[0];
+// const worksheet = workbook.Sheets[sheetName];
+// const data = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
+
+// if (data.length <= 1) {
+// return res.status(400).json({ message: "Empty spreadsheet or no data found" });
+// }
+
+// const headers = data[0];
+
+// // Map headers from the Excel file to your schema
+// const headerMapping = {
+// "PD ID (From SAP)": "uniqueId",
+// "SBU":"SBU",
+// "Principal Distributor Name": "name",
+// "Email": "email",
+// "Phone Number": "phone",
+// "PAN Number": "panNumber",
+// "Trade Name": "tradeName",
+// "GST Number": "gstNumber",
+// "State": "state",
+// "City": "city",
+// "Street": "street",
+// "Pincode": "postalCode",
+// };
+
+// const requiredHeaders = Object.keys(headerMapping);
+
+// if (!requiredHeaders.every((header) => headers.includes(header))) {
+// return res.status(400).json({ message: "Missing required columns in spreadsheet" });
+// }
+
+// const errors = [];
+// const newlyCreated = [];
+// const updatedDistributors = [];
+
+// for (let i = 1; i < data.length; i++) {
+// const row = data[i];
+// const item = {};
+
+// headers.forEach((header, index) => {
+// if (headerMapping[header]) {
+// item[headerMapping[header]] = row[index] !== undefined ? row[index] : "";
+// }
+// });
+
+// // Initialize error tracking for each item
+// const missingFields = new Set();
+// const validationErrors = new Set();
+
+// // Validate required fields
+// if (!item.uniqueId) missingFields.add("uniqueId");
+// if(!item.SBU) missingFields.add("SBU");
+// if (!item.name) missingFields.add("name");
+// if (!item.email) missingFields.add("email");
+// if (!item.phone) missingFields.add("phone");
+// if (!item.panNumber) missingFields.add("panNumber");
+// if (!item.tradeName) missingFields.add("tradeName");
+// if (!item.gstNumber) missingFields.add("gstNumber");
+// if (!item.state) missingFields.add("state");
+// if (!item.city) missingFields.add("city");
+// if (!item.street) missingFields.add("street");
+// if (!item.postalCode) missingFields.add("postalCode");
+
+// // Check email validity
+// if (item.email && !validator.isEmail(item.email)) {
+// validationErrors.add("incorrect mail");
+// }
+
+// // Validate mobile number
+// if (item.phone && !/^\d{10}$/.test(item.phone)) {
+// validationErrors.add("Invalid Mobile Number (should be 10 digits)");
+// }
+
+// // Check GST, PAN, and postal code validation
+// item.panNumber = item.panNumber ? item.panNumber.toUpperCase() : "";
+// item.gstNumber = item.gstNumber ? item.gstNumber.toUpperCase() : "";
+
+// // Validate PAN Number
+// if (item.panNumber && !/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(item.panNumber)) {
+// validationErrors.add("Invalid PAN Number");
+// }
+
+// // Validate GST Number
+// if (item.gstNumber && !/^(\d{2}[A-Z]{5}\d{4}[A-Z]{1}\d[Z]{1}[A-Z\d]{1})$/.test(item.gstNumber)) {
+// validationErrors.add("Invalid GST Number");
+// }
+
+// // Validate Postal Code
+// if (item.postalCode && !/^\d{6}$/.test(item.postalCode)) {
+// validationErrors.add("Invalid Postal Code");
+// }
+
+// // Combine all errors into a single message
+// let errorMessage = "";
+// if (missingFields.size > 0) {
+// errorMessage += `Missing fields: ${Array.from(missingFields).join(", ")}. `;
+// }
+// if (validationErrors.size > 0) {
+// errorMessage += `Validation errors: ${Array.from(validationErrors).join(", ")}.`;
+// }
+
+// // If there are errors, push them to the errors array
+// if (errorMessage.trim()) {
+// errors.push({
+// uniqueId: item.uniqueId || "N/A",
+// SBU:item.SBU || "N/A",
+// name: item.name || "N/A",
+// email: item.email || "N/A",
+// phone: item.phone || "N/A",
+// panNumber: item.panNumber || "N/A",
+// gstNumber: item.gstNumber || "N/A",
+// message: errorMessage.trim(),
+// });
+// continue;
+// }
+
+// // Generate a password
+// const password = generatePassword(item.name, item.email);
+// item.role = "principal-Distributor";
+
+// // Check for existing user by uniqueId
+// let distributor = await User.findOne({ uniqueId: item.uniqueId });
+
+// if (distributor) {
+// // Track updated fields
+// const updatedFields = [];
+// const addressFields = ['panNumber', 'gstNumber', 'state', 'city', 'street', 'tradeName', 'postalCode'];
+// const existingAddress = await ShippingAddress.findOne({ user: distributor._id });
+
+// // Check for changes in user details
+// let userUpdated = false;
+// if (distributor.name !== item.name) {
+// updatedFields.push("name");
+// distributor.name = item.name;
+// userUpdated = true;
+// }
+// if (distributor.email !== item.email) {
+// updatedFields.push("email");
+// distributor.email = item.email;
+// userUpdated = true;
+// }
+// if(distributor.SBU !== item.SBU){
+// updatedFields.push("SBU");
+// distributor.SBU = item.SBU;
+// userUpdated = true;
+// }
+// if (distributor.phone !== item.phone.toString()) {
+// updatedFields.push("phone");
+// distributor.phone = item.phone;
+// userUpdated = true;
+// }
+
+// // Update user
+// if (userUpdated) {
+// await distributor.save();
+// }
+
+// // Check for changes in address details
+// const addressData = {
+// street: item.street,
+// city: item.city,
+// state: item.state,
+// postalCode: item.postalCode.toString(),
+// country: "India", // Default country
+// panNumber: item.panNumber,
+// tradeName: item.tradeName,
+// gstNumber: item.gstNumber,
+// user: distributor._id,
+// };
+
+// let addressUpdated = false;
+// if (existingAddress) {
+// const addressUpdates = [];
+// addressFields.forEach(field => {
+// if (existingAddress[field] !== addressData[field]) {
+// addressUpdates.push(field);
+// addressUpdated = true;
+// }
+// });
+
+// if (addressUpdated) {
+// await ShippingAddress.updateOne({ user: distributor._id }, addressData);
+// if (addressUpdates.length > 0) {
+// updatedFields.push(`Address fields: ${addressUpdates.join(", ")}`);
+// }
+// }
+// } else {
+// // Create new address
+// await ShippingAddress.create(addressData);
+// updatedFields.push("New address created");
+// }
+
+// // Add to updatedDistributors only if there are updated fields
+// if (updatedFields.length > 0) {
+// updatedDistributors.push({
+// ...distributor._doc,
+// updatedFields: updatedFields.join(", ")
+// });
+// }
+// } else {
+// // Create a new user
+// distributor = new User({
+// name: item.name,
+// SBU:item.SBU,
+// email: item.email,
+// phone: item.phone,
+// password,
+// role: item.role,
+// uniqueId: item.uniqueId,
+// });
+// await distributor.save();
+
+// // Send email with the new user details
+// await sendEmail({
+// to: item.email,
+// from: process.env.SEND_EMAIL_FROM,
+// subject: `Cheminova Account Created`,
+// html: `
+// Your Principal Distributor Account is created successfully.
+//
Name: ${item.name}
+//
Mobile Number: ${item.phone}
+//
Password: ${password}
+// Click here to login
+// If you have not requested this email, please ignore it.
+// `,
+// });
+
+// newlyCreated.push(distributor._doc);
+// }
+// }
+
+// fs.unlinkSync(filePath); // Clean up uploaded file
+
+// res.status(201).json({
+// message:
+// errors.length > 0
+// ? "File processed with errors!"
+// : "File processed successfully!",
+// processedUsers: {
+// newlyCreated: newlyCreated.length,
+// updatedDistributors: updatedDistributors.length
+// },
+// errors,
+// newlyCreated,
+// updatedDistributors
+// });
+// } catch (error) {
+// console.error("Error processing file:", error);
+// res.status(500).json({ message: "Error processing file", error: error.message });
+// }
+// };
export const uploadPrincipaldistributors = async (req, res) => {
try {
if (!req.files || !req.files.file) {
@@ -92,6 +364,7 @@ export const uploadPrincipaldistributors = async (req, res) => {
// Map headers from the Excel file to your schema
const headerMapping = {
"PD ID (From SAP)": "uniqueId",
+ "SBU":"SBU",
"Principal Distributor Name": "name",
"Email": "email",
"Phone Number": "phone",
@@ -130,6 +403,7 @@ export const uploadPrincipaldistributors = async (req, res) => {
// Validate required fields
if (!item.uniqueId) missingFields.add("uniqueId");
+ if(!item.SBU) missingFields.add("SBU");
if (!item.name) missingFields.add("name");
if (!item.email) missingFields.add("email");
if (!item.phone) missingFields.add("phone");
@@ -183,6 +457,7 @@ export const uploadPrincipaldistributors = async (req, res) => {
if (errorMessage.trim()) {
errors.push({
uniqueId: item.uniqueId || "N/A",
+ SBU:item.SBU || "N/A",
name: item.name || "N/A",
email: item.email || "N/A",
phone: item.phone || "N/A",
@@ -213,6 +488,16 @@ export const uploadPrincipaldistributors = async (req, res) => {
distributor.name = item.name;
userUpdated = true;
}
+ if (distributor.email !== item.email) {
+ updatedFields.push("email");
+ distributor.email = item.email;
+ userUpdated = true;
+ }
+ if(distributor.SBU !== item.SBU){
+ updatedFields.push("SBU");
+ distributor.SBU = item.SBU;
+ userUpdated = true;
+ }
if (distributor.phone !== item.phone.toString()) {
updatedFields.push("phone");
distributor.phone = item.phone;
@@ -270,6 +555,7 @@ export const uploadPrincipaldistributors = async (req, res) => {
// Create a new user
distributor = new User({
name: item.name,
+ SBU: item.SBU,
email: item.email,
phone: item.phone,
password,
@@ -278,123 +564,44 @@ export const uploadPrincipaldistributors = async (req, res) => {
});
await distributor.save();
- // Send email with the new user details
- await sendEmail({
- to: item.email,
- from: process.env.SEND_EMAIL_FROM,
- subject: `Cheminova Account Created`,
- html: `
- Your Principal Distributor Account is created successfully.
-
Name: ${item.name}
-
Mobile Number: ${item.phone}
-
Password: ${password}
- Click here to login
- If you have not requested this email, please ignore it.
- `,
- });
+ // Now create the address for the new user
+ const addressData = {
+ street: item.street,
+ city: item.city,
+ state: item.state,
+ postalCode: item.postalCode.toString(),
+ country: "India", // Default country
+ panNumber: item.panNumber,
+ tradeName: item.tradeName,
+ gstNumber: item.gstNumber,
+ user: distributor._id, // Use the saved user's ID
+ };
+ const newAddress = await ShippingAddress.create(addressData);
- newlyCreated.push(distributor._doc);
+ // Push both the distributor and the addressData to the newlyCreated array
+ newlyCreated.push({
+ distributor,
+ address: newAddress,
+ });
}
}
- fs.unlinkSync(filePath); // Clean up uploaded file
-
- res.status(201).json({
- message:
- errors.length > 0
- ? "File processed with errors!"
- : "File processed successfully!",
- processedUsers: {
- newlyCreated: newlyCreated.length,
- updatedDistributors: updatedDistributors.length
- },
- errors,
+ res.status(200).json({
+ message: "File processed successfully",
newlyCreated,
- updatedDistributors
+ updatedDistributors,
+ errors,
});
} catch (error) {
- console.error("Error processing file:", error);
- res.status(500).json({ message: "Error processing file", error: error.message });
+ console.error(error);
+ res.status(500).json({ message: "Internal Server Error" });
}
};
// 1.Register a User
-// export const registerUser = async (req, res) => {
-// try {
-// const { name, email, password, phone, accessTo, role } = req.body;
-// // console.log("this is the password ", password, name, req.body);
-
-// let findUser = await User.findOne({ email });
-// if (findUser) {
-// return res
-// .status(400)
-// .json({ success: false, message: "User already exists" });
-// }
-// if (req.files) {
-// const files = req.files.avatar;
-// const myCloud = await cloudinary.uploader.upload(
-// files.tempFilePath,
-// {
-// folder: "Cheminova/user-image",
-// },
-// function (error, result) {
-// result, error;
-// }
-// );
-// }
-
-// const user = await User.create({
-// name,
-// email,
-// password,
-// phone,
-// role,
-// accessTo,
-// // avatar: {
-// // public_id: myCloud.public_id,
-// // url: myCloud.secure_url,
-// // },
-// });
-// // const emailData = await RegisterEmail.find();
-// // let emailSubject = emailData[0]?.subject;
-// // let emailDescription = emailData[0]?.description;
-// const config = await Config.find();
-// let appName = config[0]?.appName;
-
-// // await sendEmail({
-// // to: `${email}`, // Change to your recipient
-
-// // from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
-
-// // subject: `Welcome to Cheminova - Let the Shopping Begin!`,
-// // html: `
- -// // Welcome to Cheminova - Let the Shopping Begin! -// //
-// //You can login into :${role === "Employee" || role === "admin" -// // ? `https://admin.smellika.com/` -// // : `https://smellika.com` -// // }
-// //Below are your login credentials:
-// //Email: ${email}
-// //Password: ${password}
-// // Happy shopping,