import { shippingAddress } from "../ShippingAddresses/ShippingAddressModel.js"; import { Order } from "./orderModel.js"; //generate unique order id const generateUniqueOrderId = async () => { const currentYear = new Date().getFullYear(); // Find the latest order to get the last serial number const latestOrder = await Order.findOne({}, {}, { sort: { orderID: -1 } }); let serialNumber = 1; if (latestOrder) { const lastYear = parseInt(latestOrder.orderID.substring(0, 4), 10); if (lastYear === currentYear) { // If the last order was in the current year, increment the serial number serialNumber = parseInt(latestOrder.orderID.substring(4), 10) + 1; } } // Pad the serial number with zeros and concatenate with the current year const paddedSerialNumber = serialNumber.toString().padStart(7, "0"); const orderId = `${currentYear}${paddedSerialNumber}`; return orderId; }; // export const poscreateOrderCheckout = async (req, res) => { // try { // const { userr,address, cart, subtotal,orderType } = req.body; // // console.log(req.body) // // Perform validation // if (cart.length < 1) // return res.status(400).json({ message: "cart is empty!" }); // if (!address) // return res // .status(404) // .json({ message: "please select shipping address!" }); // if (!subtotal) // return res // .status(404) // .json({ message: "please provide product subtotal!" }); // if (!userr) // return res.status(400).json({ message: "user is not defined" }); // // Retrieve shipping address from database // 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, // company_name: addss?.company_name, // gst_number: addss?.gst_number, // addressId: address, // }; // // Construct order items array // const orderItems = await cart.map((item) => ({ // product: item.product._id, // name: item.product.name, // variant_Name: item.variant.variant_Name, // price: Number(item.variant.price), // total_price: item.quantity * Number(item.variant.price), // image: item.product.image, // quantity: item.quantity, // gst_amount: Number( // (Number(item.variant.price) * item.variant.gst_Id?.tax) / 100 // )?.toFixed(3), // total_gst_amount: Number( // Number(item.quantity) * // Number( // (Number(item.variant.price) * item.variant.gst_Id?.tax) / 100 // ) // )?.toFixed(3), // gst_rate: item.variant.gst_Id?.tax, // tax_Name: item.variant?.gst_Id?.name, // product_Subtotal: Number( // Number(item.quantity * Number(item.variant.price)) + // Number( // Number(item.quantity) * // Number( // (Number(item.variant.price) * item.variant.gst_Id?.tax) / 100 // ) // ) // ).toFixed(3), // })); // // Generate a unique order ID // const Id = await generateUniqueOrderId(); // // Create the order document // const order = await Order.create({ // orderID: Id, // total_amount: subtotal, // orderItems, // shippingInfo: shipping, // user: userr, // orderType, // paymentMode:"cod", // payment_status:"success", // isPaid:true, // paidAt:new Date().toISOString(), // }); // return res.status(201).json({ success: true, order }); // } catch (error) { // console.error("Error creating order:", error); // return res // .status(500) // .json({ success: false, message: "Internal server error" }); // } // }; export const poscreateOrderCheckout = async (req, res) => { try { const { userr, address, cart, subtotal, orderType } = req.body; // Perform validation if (cart.length < 1) return res.status(400).json({ message: "Cart is empty!" }); if (!address) return res.status(404).json({ message: "Please select a shipping address!" }); if (!subtotal) return res.status(404).json({ message: "Please provide the product subtotal!" }); if (!userr) return res.status(400).json({ message: "User is not defined" }); // Retrieve shipping address from database 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, company_name: addss?.company_name, gst_number: addss?.gst_number, addressId: address, }; // Construct order items array const orderItems = cart.map((item) => ({ product: item.product._id, name: item.product.name, variant_Name: item.variant.variant_Name, price: Number(item.variant.price), total_price: item.quantity * Number(item.variant.price), image: item.product.image, quantity: item.quantity, gst_amount: Number((Number(item.variant.price) * item.variant.gst_Id?.tax) / 100)?.toFixed(3), total_gst_amount: Number(Number(item.quantity) * Number((Number(item.variant.price) * item.variant.gst_Id?.tax) / 100))?.toFixed(3), gst_rate: item.variant.gst_Id?.tax, tax_Name: item.variant?.gst_Id?.name, product_Subtotal: Number(Number(item.quantity * Number(item.variant.price)) + Number(Number(item.quantity) * Number((Number(item.variant.price) * item.variant.gst_Id?.tax) / 100))).toFixed(3), })); // Generate a unique order ID const Id = await generateUniqueOrderId(); // Create the order document const order = await Order.create({ orderID: Id, total_amount: subtotal, orderItems, shippingInfo: shipping, user: userr, orderType, paymentMode: "cod", payment_status: "success", isPaid: true, paidAt: new Date().toISOString(), }); return res.status(201).json({ success: true, order }); } catch (error) { console.error("Error creating order:", error); return res.status(500).json({ success: false, message: "Internal server error" }); } };