dashboard api done

This commit is contained in:
ROSHAN GARG 2024-09-06 10:50:12 +05:30
parent afbc17cee7
commit 5c726d23d6
4 changed files with 77 additions and 21 deletions

View File

@ -191,6 +191,7 @@ export const getKycById = async (req, res) => {
export const updateKycStatus = async (req, res) => { export const updateKycStatus = async (req, res) => {
const { status, rejectionReason, user } = req.body; const { status, rejectionReason, user } = req.body;
console.log(status);
const { id } = req.params; const { id } = req.params;
// console.log(user, rejectionReason, status); // console.log(user, rejectionReason, status);
try { try {
@ -206,6 +207,7 @@ export const updateKycStatus = async (req, res) => {
const trade_name = kyc.trade_name; const trade_name = kyc.trade_name;
if (status === "approved") { if (status === "approved") {
kyc.status = status; kyc.status = status;
console.log("inside Approved ");
await rejectKYC( await rejectKYC(
kyc.addedBy, kyc.addedBy,
"KYC Approved", "KYC Approved",
@ -220,6 +222,7 @@ export const updateKycStatus = async (req, res) => {
}); });
} }
if (status === "reject") { if (status === "reject") {
console.log("inside reject ");
await rejectKYC( await rejectKYC(
kyc.addedBy, kyc.addedBy,
"KYC application Rejected", "KYC application Rejected",
@ -241,7 +244,10 @@ export const updateKycStatus = async (req, res) => {
// Add rejection reason to notes if status is reject // Add rejection reason to notes if status is reject
if (kyc.status === "reject" || status === "reject") { if (kyc.status === "reject" || status === "reject") {
// kyc.rejection_reason = rejectionReason; // kyc.rejection_reason = rejectionReason;
kyc.status = status; if (status) {
kyc.status = status;
}
kyc.notes.push({ kyc.notes.push({
message: rejectionReason, message: rejectionReason,
user: user, user: user,

View File

@ -411,7 +411,7 @@ export const updateOrderStatusById = async (req, res) => {
<tr> <tr>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">S No.</th> <th style="border: 1px solid #555; padding: 2px; text-align: center;">S No.</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Product Name</th> <th style="border: 1px solid #555; padding: 2px; text-align: center;">Product Name</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Variant</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Image</th> <th style="border: 1px solid #555; padding: 2px; text-align: center;">Image</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Quantity</th> <th style="border: 1px solid #555; padding: 2px; text-align: center;">Quantity</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Price</th> <th style="border: 1px solid #555; padding: 2px; text-align: center;">Price</th>
@ -430,9 +430,7 @@ export const updateOrderStatusById = async (req, res) => {
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${ <td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.name product.name
}</td> }</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.variant_Name || "N/A"
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;"> <td style="border: 1px solid #555; padding: 2px; text-align: center;">
<img src="${product.image[0]?.url}" alt="${ <img src="${product.image[0]?.url}" alt="${
product.name product.name
@ -472,13 +470,11 @@ export const updateOrderStatusById = async (req, res) => {
</div> </div>
`, `,
}); });
return res return res.status(200).json({
.status(200) status: "ok",
.json({ message: "Order status updated successfully!",
status: "ok", updatedPro,
message: "Order status updated successfully!", });
updatedPro,
});
} else if (req.body.status === "dispatched") { } else if (req.body.status === "dispatched") {
body["courier_name"] = req.body.courierName; body["courier_name"] = req.body.courierName;
body["courier_tracking_id"] = req.body.TrackingID; body["courier_tracking_id"] = req.body.TrackingID;
@ -577,6 +573,8 @@ export const updateOrderStatusById = async (req, res) => {
} else if (req.body.status === "delivered") { } else if (req.body.status === "delivered") {
body["isDelivered"] = true; body["isDelivered"] = true;
body["DeliveredDate"] = req.body.DDate; body["DeliveredDate"] = req.body.DDate;
const formattedDate = formatDate(req.body.DDate);
console.log(formattedDate);
const updatedDeli = await PdOrder.findByIdAndUpdate(order._id, body); const updatedDeli = await PdOrder.findByIdAndUpdate(order._id, body);
await sendEmail({ await sendEmail({
to: `${order?.addedBy?.email}`, // Using 'addedBy' to reference the user's email to: `${order?.addedBy?.email}`, // Using 'addedBy' to reference the user's email
@ -651,9 +649,7 @@ export const updateOrderStatusById = async (req, res) => {
</tbody> </tbody>
</table> </table>
<h3 style="color: #333; font-family: Arial, sans-serif;">Delivery Date: ${ <h3 style="color: #333; font-family: Arial, sans-serif;">Delivery Date: ${formattedDate}</h3>
req.body.DDate
}</h3>
<h4 style="color: #333; font-family: Arial, sans-serif;"> <h4 style="color: #333; font-family: Arial, sans-serif;">
Your satisfaction is our priority, and we'd love to hear about your experience. Please take a moment to share your thoughts by leaving a review. Your feedback is invaluable to us! Your satisfaction is our priority, and we'd love to hear about your experience. Please take a moment to share your thoughts by leaving a review. Your feedback is invaluable to us!
@ -691,3 +687,48 @@ export const updateOrderStatusById = async (req, res) => {
.json({ message: error?.message || "Something went wrong!" }); .json({ message: error?.message || "Something went wrong!" });
} }
}; };
const formatDate = (date) => {
const options = {
weekday: "short",
year: "numeric",
month: "short",
day: "2-digit",
// hour: "2-digit",
// minute: "2-digit",
// hour12: true,
};
return new Intl.DateTimeFormat("en-US", options).format(new Date(date));
};
export const getOrderCounts = async (req, res) => {
try {
const statusCounts = await PdOrder.aggregate([
{
$group: {
_id: "$status", // Group by status
count: { $sum: 1 }, // Count the number of orders per status
},
},
]);
// Restructure the result to make it easier to consume
const result = {
new: 0,
dispatched: 0,
cancelled: 0,
processing: 0,
delivered: 0,
};
statusCounts.forEach((status) => {
result[status._id] = status.count;
});
res.status(200).json({ counts: result });
} catch (error) {
console.log(error.message);
res
.status(500)
.json({ message: error?.message || "Something went wrong!" });
}
};

View File

@ -5,6 +5,7 @@ import {
getCancelledOrdersAdmin, getCancelledOrdersAdmin,
getDeliveredOrdersAdmin, getDeliveredOrdersAdmin,
getDispatchedOrdersAdmin, getDispatchedOrdersAdmin,
getOrderCounts,
getPlacedNewOrderAdmin, getPlacedNewOrderAdmin,
getPlacedOrder, getPlacedOrder,
getPlacedOrderById, getPlacedOrderById,
@ -49,5 +50,6 @@ router
router router
.route("/change/status/:id") .route("/change/status/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateOrderStatusById); .patch(isAuthenticatedUser, authorizeRoles("admin"), updateOrderStatusById);
router.route("/get-counts-pdOrders").get(getOrderCounts);
export default router; export default router;

View File

@ -30,11 +30,14 @@ export const createProductManual = async (req, res) => {
if (pdfFile) { if (pdfFile) {
filename = pdfFile.name; filename = pdfFile.name;
// console.log(pdfFile); // console.log(pdfFile);
const originalFilename = path.basename(pdfFile.name, path.extname(pdfFile.name)); const originalFilename = path.basename(
pdfFile.name,
path.extname(pdfFile.name)
);
const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, { const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, {
folder: "chemiNova/ProductManuals", folder: "chemiNova/ProductManuals",
public_id: originalFilename, public_id: originalFilename,
}); });
// console.log(result); // console.log(result);
productManualDetails = { productManualDetails = {
@ -158,11 +161,14 @@ export const updateProductManual = async (req, res) => {
const pdfFile = req.files.pdfFile; const pdfFile = req.files.pdfFile;
// console.log(pdfFile); // console.log(pdfFile);
filename = pdfFile.name; filename = pdfFile.name;
const originalFilename = path.basename(pdfFile.name, path.extname(pdfFile.name)); const originalFilename = path.basename(
pdfFile.name,
path.extname(pdfFile.name)
);
const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, { const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, {
folder: "chemiNova/ProductManuals", folder: "chemiNova/ProductManuals",
public_id: originalFilename, public_id: originalFilename,
}); });
// console.log(result); // console.log(result);
// Update the product manual details // Update the product manual details
@ -210,9 +216,10 @@ export const deleteProductManual = async (req, res) => {
if (productManual.product_manual.public_id) { if (productManual.product_manual.public_id) {
await cloudinary.v2.uploader.destroy( await cloudinary.v2.uploader.destroy(
productManual.product_manual.public_id, productManual.product_manual.public_id,
{ {
folder: "chemiNova/ProductManuals", folder: "chemiNova/ProductManuals",
}); }
);
} }
// Delete the product manual from the database // Delete the product manual from the database