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 ${appName} - Let the Shopping Begin!

-// // Hey ${name}, - -// //

- -// // 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,
- -// // Team ${appName}`, -// // }); -// sendToken(user, 201, res); -// } catch (e) { -// return res.status(400).json({ success: false, message: e.message }); -// } -// }; export const registerUser = async (req, res) => { try { - const { name, email, phone, accessTo, role,PD_ID } = req.body; + const { name, email, phone, accessTo, role,PD_ID,SBU } = req.body; // console.log(req.body); const password = generatePassword(name, email); // console.log(password); @@ -408,7 +615,7 @@ export const registerUser = async (req, res) => { user.phone = phone; user.role = role; user.accessTo = accessTo; - + user.SBU=SBU; // Save updates await user.save(); // console.log("finduser", user); @@ -423,6 +630,7 @@ export const registerUser = async (req, res) => { // Create a new user if not found user = new User({ uniqueId: PD_ID, + SBU, name, email, password, diff --git a/resources/user/userModel.js b/resources/user/userModel.js index b79422d..fbe6c36 100644 --- a/resources/user/userModel.js +++ b/resources/user/userModel.js @@ -13,11 +13,14 @@ const userSchema = new mongoose.Schema( unique: true, required: true, }, + SBU: { + type: String, + required: [true, "Please Enter Your SBU"], + }, name: { type: String, required: [true, "Please Enter Your Name"], maxLength: [30, "Name cannot exceed 30 characters"], - minLength: [4, "Name should have more than 4 characters"], }, email: { type: String,