From 267d34d008e85b13298456e4b85bd66d14c518a9 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Wed, 11 Sep 2024 10:39:18 +0530 Subject: [PATCH 1/3] leave and admin update password --- public/uploads/Add-PD.xlsx | Bin 12381 -> 12483 bytes resources/Leaves/LeaveModel.js | 4 ++-- resources/user/userController.js | 2 +- resources/user/userModel.js | 22 ++++++++++++++++++++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/public/uploads/Add-PD.xlsx b/public/uploads/Add-PD.xlsx index 21ce549b82252e3d85a00717a95fb17a4052e995..b17fe2458c0463334bbc835c66f60ae73fbdd4ca 100644 GIT binary patch delta 4708 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 ILVxf64^6z=T>t<8 delta 4627 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 diff --git a/resources/Leaves/LeaveModel.js b/resources/Leaves/LeaveModel.js index bd50258..383d0fd 100644 --- a/resources/Leaves/LeaveModel.js +++ b/resources/Leaves/LeaveModel.js @@ -12,7 +12,7 @@ const leaveRecordSchema = new mongoose.Schema({ }, location: { type: String, - required: true, + // required: true, }, reason: { type: String, @@ -21,7 +21,7 @@ const leaveRecordSchema = new mongoose.Schema({ leaveType: { type: String, required: true, - enum: ["Sick Leave", "Casual Leave"], + enum: ["Sick Leave", "Privilege Leave","Personal Leave"], }, }); diff --git a/resources/user/userController.js b/resources/user/userController.js index 3ec8cf6..b4fd460 100644 --- a/resources/user/userController.js +++ b/resources/user/userController.js @@ -932,7 +932,7 @@ export const getUserOrderForAdmin = async (req, res) => { }; // 8.update User password export const updatePassword = catchAsyncErrors(async (req, res, next) => { - const user = await User.findById(req.user.id).select("+password"); + const user = await User.findById(req.user._id).select("+password"); const isPasswordMatched = await user.comparePassword(req.body.oldPassword); diff --git a/resources/user/userModel.js b/resources/user/userModel.js index 79f92e2..69024be 100644 --- a/resources/user/userModel.js +++ b/resources/user/userModel.js @@ -11,11 +11,29 @@ const userSchema = new mongoose.Schema( uniqueId: { type: String, unique: true, - required: true, + validate: { + validator: function (value) { + // Only require uniqueId if the role is not "admin" + if (this.role !== "admin" && !value) { + return false; + } + return true; + }, + message: "Unique ID is required for users", + }, }, SBU: { type: String, - required: [true, "Please Enter Your SBU"], + validate: { + validator: function (value) { + // Only require SBU if the role is not "admin" + if (this.role !== "admin" && !value) { + return false; + } + return true; + }, + message: "SBU is required for users", + }, }, name: { type: String, From d602fdc7bebec1d74798730f701f14a0822c24b2 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Thu, 12 Sep 2024 17:57:09 +0530 Subject: [PATCH 2/3] RD map with TM,PD,SC --- .../RetailDistributor/RetailDistributorController.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/RetailDistributor/RetailDistributorController.js b/resources/RetailDistributor/RetailDistributorController.js index 1a22e4a..6ca8102 100644 --- a/resources/RetailDistributor/RetailDistributorController.js +++ b/resources/RetailDistributor/RetailDistributorController.js @@ -430,10 +430,10 @@ export const getAllRetailDistributorApproved = async (req, res) => { export const getRDId = async (req, res) => { try { const { id } = req.params; - console.log(id); + // console.log(id); // Fetch the KYC document from the database by ID const RD = await RetailDistributor.findById(id) - .populate("principal_distributer", "name") + .populate("principal_distributer", "name email phone") .populate("addedBy") .populate("kyc") .populate("mappedTM") @@ -443,7 +443,7 @@ export const getRDId = async (req, res) => { if (!RD) { return res.status(404).json({ message: "No RetailDistributor found" }); } - + // console.log(RD); // Send the fetched KYC document as a response res.status(200).json(RD); } catch (error) { @@ -1150,7 +1150,7 @@ export const updateRDMapped = async (req, res) => { try { const { id } = req.params; const { principal_distributor, mappedTM, mappedSC } = req.body; - console.log(principal_distributor); + // console.log(principal_distributor); // Find the RetailDistributor document by ID const RD = await RetailDistributor.findById(id); From e03de96466380f7808b57b434808f08aa8d03528 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Fri, 13 Sep 2024 13:00:48 +0530 Subject: [PATCH 3/3] fix get all brand , get all categories and add user type for single user leave --- resources/Brands/BrandsController.js | 34 ++++++++++++++++++++++-- resources/Category/categoryController.js | 33 +++++++++++++++++++++-- resources/Leaves/LeaveController.js | 1 + 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/resources/Brands/BrandsController.js b/resources/Brands/BrandsController.js index 554b066..f225f01 100644 --- a/resources/Brands/BrandsController.js +++ b/resources/Brands/BrandsController.js @@ -35,13 +35,43 @@ export const addBrand = async (req, res) => { // Get all Brands export const getBrands = async (req, res) => { try { - const brands = await BrandModel.find().sort({ createdAt: -1 }); + const PAGE_SIZE = parseInt(req.query.show) || 10; + const page = parseInt(req.query.page) || 1; + const skip = (page - 1) * PAGE_SIZE; + let filter = {}; + + // Search by brandName if provided + if (req.query.brandName) { + filter.brandName = { + $regex: new RegExp(req.query.brandName, "i"), // Case-insensitive search + }; + } + + // Get total number of brands matching the filter + const total = await BrandModel.countDocuments(filter); + + // Fetch brands with pagination and filtering + const brands = await BrandModel.find(filter) + .limit(PAGE_SIZE) + .skip(skip) + .sort({ createdAt: -1 }) + .exec(); + + // If no brands are found, return 404 error if (!brands.length) { return res.status(404).json({ message: "No brands found" }); } - res.status(200).json({ success: true, brands }); + // Return the paginated and filtered brands list + res.status(200).json({ + success: true, + total_data: total, + total_pages: Math.ceil(total / PAGE_SIZE), + current_page: page, + brands, + }); } catch (error) { + // Handle server error res.status(500).json({ success: false, message: error.message || "Something went wrong", diff --git a/resources/Category/categoryController.js b/resources/Category/categoryController.js index e3eaebd..a9b2d76 100644 --- a/resources/Category/categoryController.js +++ b/resources/Category/categoryController.js @@ -35,14 +35,43 @@ export const addCategory = async (req, res) => { // Get all Categories export const getCategories = async (req, res) => { try { - const categories = await CategoryModel.find().sort({ createdAt: -1 }); + const PAGE_SIZE = parseInt(req.query.show) || 10; + const page = parseInt(req.query.page) || 1; + const skip = (page - 1) * PAGE_SIZE; + let filter = {}; + // Handle filtering by categoryName + if (req.query.categoryName) { + filter.categoryName = { + $regex: new RegExp(req.query.categoryName, "i"), + }; + } + + // Count the total number of documents matching the filter + const total = await CategoryModel.countDocuments(filter); + + // Fetch the categories with pagination + const categories = await CategoryModel.find(filter) + .limit(PAGE_SIZE) + .skip(skip) + .sort({ createdAt: -1 }) + .exec(); + + // If no categories are found, return a 404 error if (!categories.length) { return res.status(404).json({ message: "No categories found" }); } - res.status(200).json({ success: true, categories }); + // Return success response with total data and total pages + res.status(200).json({ + success: true, + total_data: total, + total_pages: Math.ceil(total / PAGE_SIZE), + current_page: page, + categories, + }); } catch (error) { + // Handle server error res.status(500).json({ success: false, message: error.message || "Something went wrong", diff --git a/resources/Leaves/LeaveController.js b/resources/Leaves/LeaveController.js index 2cea40e..5e239c6 100644 --- a/resources/Leaves/LeaveController.js +++ b/resources/Leaves/LeaveController.js @@ -140,6 +140,7 @@ export const AdmingetLeaveByUser = async (req, res) => { success: true, user: leaveDoc.userId, leave: paginatedRecords, + userType: leaveDoc.userType, total_data: totalData, }); } catch (error) {