From 751f90e1dbef02d09c4f22bfbf879f8565ad4fb4 Mon Sep 17 00:00:00 2001 From: pawan-dot <71133473+pawan-dot@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:44:41 +0530 Subject: [PATCH] address save in order --- resources/Orders/CheckoutController.js | 15 ++++++- resources/Orders/orderController.js | 56 +++++++++++++++++++++++--- resources/Orders/orderModel.js | 51 ++++++++++++++++++++--- resources/Orders/orderRoute.js | 5 +-- 4 files changed, 112 insertions(+), 15 deletions(-) diff --git a/resources/Orders/CheckoutController.js b/resources/Orders/CheckoutController.js index ab9f8d0..0a2d656 100644 --- a/resources/Orders/CheckoutController.js +++ b/resources/Orders/CheckoutController.js @@ -3,6 +3,7 @@ const { PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET } = process.env; const base = "https://api-m.sandbox.paypal.com"; import axios from "axios"; import mongoose from "mongoose"; +import { shippingAddress } from "../ShippingAddresses/ShippingAddressModel.js"; //paypal client id get export const getClientId = async (req, res) => { try { @@ -107,13 +108,25 @@ export const createOrderCheckout = async (req, res) => { price_With_Tax: 0, taxId: "", })); + let addss = await shippingAddress.findById(address); + let shipping = { + first_Name: addss.first_Name, + last_Name: addss.last_Name, + phone_Number: addss.phone_Number, + street: addss.street, + city: addss.city, + state: addss.state, + postalCode: addss?.postalCode, + country: addss.country, + addressId: address, + }; req.body.user = req.user._id; const Id = await generateOrderId(); const order = await Order.create({ orderID: Id, total_amount: subtotal, orderItems, - shippingInfo: address, + shippingInfo: shipping, user: req.user._id, }); if (order) { diff --git a/resources/Orders/orderController.js b/resources/Orders/orderController.js index 7ba4105..19ba5d8 100644 --- a/resources/Orders/orderController.js +++ b/resources/Orders/orderController.js @@ -4,8 +4,9 @@ export const getAllOrder = async (req, res) => { try { const { status } = req.params; const order = await Order.find({ - payment_status: { $in: ["success", "failed"] }, - // orderStatus: status, + // payment_status: { $in: ["success", "failed"] }, + payment_status: "success", + orderStatus: status, }) .populate({ path: "user", @@ -37,12 +38,10 @@ export const getAllOrder = async (req, res) => { export const getSingleOrder = async (req, res) => { try { - if (!req?.user) return res.status(400).json({ message: "please login !" }); - // console.log(req?.user) if (!req.params.id) return res.status(400).json({ message: "please Provide Order Id" }); - const order = await Order.findOne({ orderID: req.params.id }) + const order = await Order.findById(req.params.id) .populate({ path: "user", select: "name -_id", @@ -115,3 +114,50 @@ export const deleteOneOrder = async (req, res) => { }); } }; +export const updateOrderStatusById = async (req, res) => { + try { + let body = { orderStatus: req.body.status }; + const currentDate = new Date(); + body["status_timeline." + req.body.status] = currentDate; + // if (req.body?.package_weight) body.package_weight = req.body.package_weight; + const order = await Order.findById(req.params.id); + // console.log(order); + // const parentData = { email: order?.parent?.email }; + // if (body.status === "cancelled") + // await OrderCancelledEmail(parentData.email, order.order_id); + // else if (body.status === "dispatched") { + // const noBalanceRemaining = + // order?.sales_items?.filter((e) => Number(e?.balance_quantity) > 0) + // ?.length === 0 + // ? true + // : false; + // if (!noBalanceRemaining) + // return res + // .status(400) + // .json({ message: "Few items still have balance quantity!" }); + // await OrderDispatchedEmail(parentData.email, order.order_id, body); + // await Invoice.updateMany( + // { order: order._id, status: { $in: ["processing"] } }, + // { status: body.status, "status_timeline.dispatched": currentDate } + // ); + // } else if (body.status === "delivered") { + // await OrderDeliveredEmail(parentData.email, order.order_id); + // await Invoice.updateMany( + // { order: order._id, status: { $in: ["processing", "dispatched"] } }, + // { status: body.status, "status_timeline.delivered": currentDate } + // ); + // } + + await Order.findByIdAndUpdate(order._id, body); + // console.log(order); + + res + .status(200) + .json({ status: "ok", message: "Order status updated successfully!" }); + } catch (error) { + console.log(error); + res + .status(500) + .json({ message: error?.message || "Something went wrong!" }); + } +}; diff --git a/resources/Orders/orderModel.js b/resources/Orders/orderModel.js index bc44866..c717244 100644 --- a/resources/Orders/orderModel.js +++ b/resources/Orders/orderModel.js @@ -13,9 +13,48 @@ const orderSchema = new mongoose.Schema( required: true, }, shippingInfo: { - type: mongoose.Schema.ObjectId, - ref: "ShippingAddress", - required: true, + first_Name: { + type: String, + required: true, + }, + last_Name: { + type: String, + required: true, + }, + phone_Number: { + type: Number, + required: true, + }, + street: { + type: String, + required: true, + }, + city: { + type: String, + required: true, + trim: true, + }, + state: { + type: String, + required: true, + }, + postalCode: { + type: String, + required: true, + trim: true, + // Add a regular expression to enforce a specific postal code format + // For example, assuming a 5-digit format for the United States + match: /^\d{5}$/, + }, + country: { + type: String, + required: true, + }, + addressId: { + type: mongoose.Schema.ObjectId, + ref: "ShippingAddress", + required: true, + }, }, orderItems: [ { @@ -91,7 +130,7 @@ const orderSchema = new mongoose.Schema( paypal_payment_id: { type: String }, // paypal_signature: { type: String }, // order_used: { type: Boolean, default: false }, - // isDelivered: { type: Boolean,required:true,default:false }, + isDelivered: { type: Boolean, required: true, default: false }, // deliveredAt: { type: Date }, status_timeline: { new: { type: Date }, @@ -101,8 +140,8 @@ const orderSchema = new mongoose.Schema( cancelled: { type: Date }, returned: { type: Date }, }, - // courier_name: { type: String }, - // tracking_id: { type: String }, + courier_name: { type: String }, + tracking_id: { type: String }, }, { timestamps: true } ); diff --git a/resources/Orders/orderRoute.js b/resources/Orders/orderRoute.js index b9df210..5148c4a 100644 --- a/resources/Orders/orderRoute.js +++ b/resources/Orders/orderRoute.js @@ -3,6 +3,7 @@ import { getAllOrder, getSingleOrder, getUserSelf, + updateOrderStatusById, } from "./orderController.js"; import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js"; import express from "express"; @@ -25,9 +26,7 @@ router .route("/getAll/:status") .get(isAuthenticatedUser, authorizeRoles("admin"), getAllOrder); router.route("/getOne/:id").get(isAuthenticatedUser, getSingleOrder); -// router -// .route("/order/edit/:id") -// .put(isAuthenticatedUser, authorizeRoles("admin"), EditOrderBeforePayment); +router.route("/change/status/:id").patch(updateOrderStatusById); router .route("/delete/:id")