Retailers update where retailer,kyc and address update with image delete and update

This commit is contained in:
Sibunnayak 2024-11-08 12:27:53 +05:30
parent fdf7b433d9
commit 26a924efbb
13 changed files with 207 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@ -131,6 +131,78 @@ export const createKyc = async (req, res) => {
});
}
};
export const deletekycImageFromCloudinary = async (req, res) => {
const { public_id, folder } = req.params;
const { kycid, imageType } = req.body;
// console.log(req.body);
// console.log(req.params);
// Map frontend field names to backend field names in the KYC schema
const imageFieldMapping = {
selfieEntranceImg: "selfie_entrance_img",
panImg: "pan_img",
aadharImg: "aadhar_img",
gstImg: "gst_img",
pesticideLicenseImg: "pesticide_license_img",
fertilizerLicenseImg: "fertilizer_license_img",
};
try {
if (!public_id || !imageType) {
return res.status(400).json({
success: false,
msg: "Please provide a valid image public ID and image type!",
});
}
// Get the corresponding backend field name
const backendImageField = imageFieldMapping[imageType];
if (!backendImageField) {
return res.status(400).json({
success: false,
msg: "Invalid image type provided!",
});
}
// Define the full Cloudinary public ID path
const folderPath = "KYC";
const fullPublicId = `${folderPath}/${folder}/${public_id}`;
// Delete the image from Cloudinary
const response = await cloudinary.v2.uploader.destroy(fullPublicId);
if (response.result === "ok") {
// Update the KYC document to set the image field to null
const updateField = {};
updateField[backendImageField] = null;
const kycRecord = await KYC.findByIdAndUpdate(
kycid,
{ $set: updateField },
{ new: true }
);
if (!kycRecord) {
return res.status(404).json({
success: false,
msg: "KYC record not found!",
});
}
return res.status(200).json({
success: true,
msg: "Image deleted successfully!",
data: kycRecord,
});
} else {
throw new Error("Failed to delete image from Cloudinary.");
}
} catch (error) {
return res.status(500).json({
success: false,
msg: error.message || "Something went wrong!",
});
}
};
export const createretaildistributor = async (req, res) => {
const {
name,

View File

@ -5,6 +5,7 @@ const router = express.Router();
import {
createKyc,
createretaildistributor,
deletekycImageFromCloudinary,
getAllKyc,
getAllKycApproved,
getAllKycRejected,
@ -76,4 +77,11 @@ router
router
.route("/kyc/save-fcm-tm/")
.post(isAuthenticatedTerritoryManager, saveFCMTokenForTM);
router
.route("/deleteImage/KYC/:folder/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
deletekycImageFromCloudinary
);
export default router;

View File

@ -15,6 +15,7 @@ import {
updateRDMapped,
updateunmapRD,
uploadRetaildistributors,
updateretaildistributorwithKYC,
} from "./RetailDistributorController.js";
import { isAuthenticatedRD } from "../../middlewares/rdAuth.js";
import { authorizeRoles, isAuthenticatedUser } from "../../middlewares/auth.js";
@ -34,6 +35,12 @@ router.put(
ChangePasswordRD
);
router.patch("/rd-profile/update", isAuthenticatedRD, UpdateProfileRD);
router.put(
"/retailer/update-admin/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
updateretaildistributorwithKYC
);
router.post("/rd-save-fcm-token", isAuthenticatedRD, saveFCMTokenForRD);
//admin and maping
router

View File

@ -11,6 +11,7 @@ import XLSX from "xlsx";
import fs from "fs";
import path from "path";
import ShippingAddressRD from "../ShippingAddressesRD/RDShippingAddressModel.js";
import cloudinary from "../../Utils/cloudinary.js";
export const uploadRetaildistributors = async (req, res) => {
try {
@ -334,6 +335,124 @@ export const uploadRetaildistributors = async (req, res) => {
}
};
// Helper function to upload images to Cloudinary
const uploadImage = async (image, folder) => {
if (!image) return null;
const result = await cloudinary.v2.uploader.upload(image.tempFilePath, {
folder,
});
return {
public_id: result.public_id,
url: result.secure_url,
};
};
export const updateretaildistributorwithKYC = async (req, res) => {
try {
const { id } = req.params;
const retailDistributorData = req.body;
const files = req.files;
// Update RetailDistributor model
const updatedRetailDistributor = await RetailDistributor.findByIdAndUpdate(
id,
{
name: retailDistributorData.name,
email: retailDistributorData.email,
mobile_number: retailDistributorData.mobile_number,
},
{ new: true }
);
if (!updatedRetailDistributor) {
return res.status(404).json({ message: "Retail Distributor not found" });
}
// Get the associated KYC document
const kycId = updatedRetailDistributor.kyc;
const kycUpdates = {
name: retailDistributorData.name,
email: retailDistributorData.email,
trade_name: retailDistributorData.trade_name,
address: retailDistributorData.address,
state: retailDistributorData.state,
city: retailDistributorData.city,
district: retailDistributorData.district,
pincode: retailDistributorData.pincode,
mobile_number: retailDistributorData.mobile_number,
pan_number: retailDistributorData.pan_number,
aadhar_number: retailDistributorData.aadhar_number,
gst_number: retailDistributorData.gst_number,
};
// Upload images to Cloudinary if they are provided in req.files
if (files) {
if (files.panImg) {
kycUpdates.pan_img = await uploadImage(files.panImg, "KYC/pan");
}
if (files.aadharImg) {
kycUpdates.aadhar_img = await uploadImage(files.aadharImg, "KYC/aadhar");
}
if (files.gstImg) {
kycUpdates.gst_img = await uploadImage(files.gstImg, "KYC/gst");
}
if (files.pesticideLicenseImg) {
kycUpdates.pesticide_license_img = await uploadImage(files.pesticideLicenseImg, "KYC/pesticide_license");
}
if (files.fertilizerLicenseImg) {
kycUpdates.fertilizer_license_img = await uploadImage(files.fertilizerLicenseImg, "KYC/fertilizer_license");
}
if (files.selfieEntranceImg) {
kycUpdates.selfie_entrance_img = await uploadImage(files.selfieEntranceImg, "KYC/selfie_entrance");
}
}
// Update the KYC model
const updatedKYC = await KYC.findByIdAndUpdate(kycId, kycUpdates, { new: true });
if (!updatedKYC) {
return res.status(404).json({ message: "KYC record not found" });
}
// Update ShippingAddressRD model with new data
const shippingAddressUpdate = {
Name: retailDistributorData.name,
phoneNumber: retailDistributorData.mobile_number,
street: retailDistributorData.address,
district: retailDistributorData.district,
city: retailDistributorData.city,
state: retailDistributorData.state,
postalCode: retailDistributorData.pincode,
tradeName: retailDistributorData.trade_name,
};
// Find and update the default or first ShippingAddressRD record
let shippingAddress = await ShippingAddressRD.findOneAndUpdate(
{ user: id, isDefault: true },
shippingAddressUpdate,
{ new: true }
);
// If no default address found, update the first one found
if (!shippingAddress) {
shippingAddress = await ShippingAddressRD.findOneAndUpdate(
{ user: id },
shippingAddressUpdate,
{ new: true }
);
}
res.status(200).json({
message: "Retail Distributor, KYC, and Shipping Address updated successfully",
success: true,
retailDistributor: updatedRetailDistributor,
kyc: updatedKYC,
shippingAddress: shippingAddress,
});
} catch (error) {
console.error(error);
res.status(500).json({ message: "Internal Server Error" });
}
};
export const loginRD = async (req, res) => {
const { email, password } = req.body;

View File

@ -891,7 +891,7 @@ export const getStockPD = async (req, res) => {
// // Find the product in existing PDStock (if any)
// const existingProductInStock = stock?.products.find(
// (p) => p.productid.toString() === productInSystem._id.toString()
// (p) => p.SKU === productInSystem.SKU
// );
// if (existingProductInStock) {