From 9a03c93164852ae756c020d15d1688ebd2e9f590 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Tue, 15 Oct 2024 11:44:47 +0530 Subject: [PATCH] fixing bug of add multiple product,pd,rd and address logic fixed --- public/uploads/Add-PD.xlsx | Bin 12483 -> 10824 bytes public/uploads/Add-RD.xlsx | Bin 11083 -> 10953 bytes resources/Products/ProductController.js | 8 +++- .../RetailDistributorController.js | 4 ++ .../ShippingAddressController.js | 35 ++++++++++++++---- resources/Stock/StockController.js | 2 +- resources/Stock/StockRoute.js | 1 - resources/user/userController.js | 24 +++++++----- 8 files changed, 54 insertions(+), 20 deletions(-) diff --git a/public/uploads/Add-PD.xlsx b/public/uploads/Add-PD.xlsx index b17fe2458c0463334bbc835c66f60ae73fbdd4ca..eb4aded0d6518cb20170c7c3d0978915270810ff 100644 GIT binary patch delta 3095 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 delta 4777 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 O2*n}91=JD!WBd=QO7t-R diff --git a/public/uploads/Add-RD.xlsx b/public/uploads/Add-RD.xlsx index 38576dda159fc478f0e7479cd1bbd66b6c49cb12..f8a26bdf4fa80d3f502b94b2a4cf9e85b1660a8e 100644 GIT binary patch delta 3021 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 BfiwUB delta 3166 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 diff --git a/resources/Products/ProductController.js b/resources/Products/ProductController.js index b4d91e7..a9b881c 100644 --- a/resources/Products/ProductController.js +++ b/resources/Products/ProductController.js @@ -73,6 +73,10 @@ export const uploadProducts = async (req, res) => { for (let i = 1; i < data.length; i++) { const row = data[i]; + // Skip the row if it's completely empty + if (row.every((cell) => cell === undefined || cell === "")) { + continue; + } const item = {}; headers.forEach((header, index) => { @@ -83,7 +87,9 @@ export const uploadProducts = async (req, res) => { }); // Check if the row has meaningful data, skip if it's mostly empty - const hasValidData = Object.values(item).some((value) => value && value.trim()); + const hasValidData = Object.values(item).some( + (value) => value && value.trim() + ); if (!hasValidData) { continue; } diff --git a/resources/RetailDistributor/RetailDistributorController.js b/resources/RetailDistributor/RetailDistributorController.js index 40ddb9a..f4722f4 100644 --- a/resources/RetailDistributor/RetailDistributorController.js +++ b/resources/RetailDistributor/RetailDistributorController.js @@ -76,6 +76,10 @@ export const uploadRetaildistributors = async (req, res) => { for (let i = 1; i < data.length; i++) { const row = data[i]; + // Skip the row if it's completely empty + if (row.every((cell) => cell === undefined || cell === "")) { + continue; + } const item = {}; headers.forEach((header, index) => { diff --git a/resources/ShippingAddresses/ShippingAddressController.js b/resources/ShippingAddresses/ShippingAddressController.js index 5e12e47..e176dcd 100644 --- a/resources/ShippingAddresses/ShippingAddressController.js +++ b/resources/ShippingAddresses/ShippingAddressController.js @@ -59,16 +59,17 @@ export const AddshippingAddressByAdmin = async (req, res) => { panNumber, tradeName, gstNumber, + isDefault, } = req.body; - // console.log(req.body); + // Validate required fields - if (!street || !city || !state || !postalCode || !panNumber) { + if (!Name || !phoneNumber || !street || !city || !state || !postalCode || !panNumber) { return res .status(400) - .json({ msg: "Please provide all required fields" }); + .json({ msg: "Please provide all required fields: Name, phone number, street, city, state, postal code, and PAN number" }); } - // Create shipping address object + // Create new shipping address const newAddress = await ShippingAddress.create({ Name, phoneNumber, @@ -81,16 +82,24 @@ export const AddshippingAddressByAdmin = async (req, res) => { tradeName, gstNumber, user: req.params._id, // Assuming req.params._id contains the correct user ID + isDefault, }); + // If this address is marked as default, set all other addresses for this user to isDefault: false + if (isDefault) { + await ShippingAddress.updateMany( + { user: req.params._id, _id: { $ne: newAddress._id } }, // Exclude the new address + { $set: { isDefault: false } } + ); + } + + // Respond with success res.status(201).json({ success: true, address: newAddress, message: "Shipping address added successfully", }); } catch (error) { - // console.error("Error creating shipping address:", error.message); - // Check for validation errors if (error.name === "ValidationError") { const errorMessages = Object.values(error.errors).map( @@ -102,7 +111,7 @@ export const AddshippingAddressByAdmin = async (req, res) => { }); } - // General error + // General error response res.status(500).json({ success: false, message: error.message || "Something went wrong", @@ -203,6 +212,7 @@ export const updateShippingAddress = async (req, res) => { panNumber, tradeName, gstNumber, + isDefault, } = req.body; // console.log(req.body); const _id = req.params.id; @@ -210,7 +220,7 @@ export const updateShippingAddress = async (req, res) => { return res .status(400) .json({ message: "please Provide shipping Address Id" }); - const getselfAddress = await ShippingAddress.findById(req.params.id); + const getselfAddress = await ShippingAddress.findById(_id); if (!getselfAddress) { return res.status(404).json({ success: false, @@ -250,6 +260,14 @@ export const updateShippingAddress = async (req, res) => { return res.status(404).json({ msg: "please provide gstNumber" }); } } + // If the updated address is marked as default, update all other addresses to isDefault: false + if (isDefault) { + await ShippingAddress.updateMany( + { user: getselfAddress.user, _id: { $ne: _id } }, // exclude current address + { $set: { isDefault: false } } + ); + } + const updateAddressData = { Name, phoneNumber, @@ -261,6 +279,7 @@ export const updateShippingAddress = async (req, res) => { panNumber, tradeName, gstNumber, + isDefault, }; const updateShippingAddress = await ShippingAddress.findByIdAndUpdate( { _id: _id }, diff --git a/resources/Stock/StockController.js b/resources/Stock/StockController.js index ca45b65..3ce20fe 100644 --- a/resources/Stock/StockController.js +++ b/resources/Stock/StockController.js @@ -5,7 +5,7 @@ import { RDStock } from "./RdStockModel.js"; export const getProductsAndStockByPD = async (req, res) => { try { - const { userId } = req.params; + const userId = req.params.userId || req.user._id; // Pagination parameters const PAGE_SIZE = parseInt(req.query.show) || 10; diff --git a/resources/Stock/StockRoute.js b/resources/Stock/StockRoute.js index 4e21b56..40bd222 100644 --- a/resources/Stock/StockRoute.js +++ b/resources/Stock/StockRoute.js @@ -10,7 +10,6 @@ const router = express.Router(); router.get( "/pd/stock/:userId", isAuthenticatedUser, - authorizeRoles("admin"), getProductsAndStockByPD ); router.get( diff --git a/resources/user/userController.js b/resources/user/userController.js index d485ef1..819dd6f 100644 --- a/resources/user/userController.js +++ b/resources/user/userController.js @@ -394,6 +394,10 @@ export const uploadPrincipaldistributors = async (req, res) => { for (let i = 1; i < data.length; i++) { const row = data[i]; + // Skip the row if it's completely empty + if (row.every((cell) => cell === undefined || cell === "")) { + continue; + } const item = {}; headers.forEach((header, index) => { @@ -507,14 +511,14 @@ export const uploadPrincipaldistributors = async (req, res) => { user: distributor._id, isDefault: true, }).exec(); - + if (!existingAddress) { existingAddress = await ShippingAddress.findOne({ user: distributor._id, }) - .sort({ createdAt: 1 }) // Get the first created address as fallback - .exec(); - } + .sort({ createdAt: 1 }) // Get the first created address as fallback + .exec(); + } // Check for changes in user details let userUpdated = false; @@ -1025,7 +1029,7 @@ export const getAllUser = catchAsyncErrors(async (req, res, next) => { } if (SBU) { - filter.SBU = { $regex: SBU, $options: "i" }; + filter.SBU = { $regex: SBU, $options: "i" }; } const limit = parseInt(show, 10); @@ -1084,7 +1088,7 @@ export const getAllPD = catchAsyncErrors(async (req, res, next) => { // Aggregate orders data for each user const orderStats = await PdOrder.aggregate([ - { $match: { addedBy: { $in: users.map(user => user._id) } } }, // Match orders for the listed distributors + { $match: { addedBy: { $in: users.map((user) => user._id) } } }, // Match orders for the listed distributors { $group: { _id: "$addedBy", // Group by addedBy (distributor ID) @@ -1095,8 +1099,10 @@ export const getAllPD = catchAsyncErrors(async (req, res, next) => { ]); // Map orders data to corresponding users - const usersWithOrderStats = users.map(user => { - const orderData = orderStats.find(order => order._id.toString() === user._id.toString()); + const usersWithOrderStats = users.map((user) => { + const orderData = orderStats.find( + (order) => order._id.toString() === user._id.toString() + ); return { ...user.toObject(), totalOrders: orderData ? orderData.totalOrders : 0, @@ -1111,7 +1117,7 @@ export const getAllPD = catchAsyncErrors(async (req, res, next) => { total_pages: Math.ceil(totalUsers / limit), }); } catch (error) { - console.error('Error fetching Principal Distributors:', error); + console.error("Error fetching Principal Distributors:", error); res.status(500).json({ message: "Server Error", error }); } });