diff --git a/src/controllers/storeController.js b/src/controllers/storeController.js index 5df49841..716333d4 100644 --- a/src/controllers/storeController.js +++ b/src/controllers/storeController.js @@ -2847,6 +2847,72 @@ exports.getManagerPendingOrdersByInstallationId = async (req, reply) => { }; +exports.getWaitingManagerPendingOrdersByInstallationId = async (req, reply) => { + try { + const { installationId } = req.params; + + if (!installationId) { + return reply.status(400).send({ error: "installationId is required" }); + } + + // Step 1: Fetch orders matching installationId + const orders = await Order.find({ installationId }); + + if (!orders.length) { + return reply.send({ + status_code: 200, + message: "No orders found for this installation", + data: [], + }); + } + + // Step 2: Filter orders to keep only those having at least one master_connection with work_status === 'pending' + const ordersWithPendingMasters = []; + + for (const order of orders) { + const pendingMasters = (order.master_connections || []).filter(mc => mc.work_status === 'waiting'); + + if (pendingMasters.length) { + // Fetch customer details + const customer = await User.findOne({ customerId: order.customerId }).lean(); + + // Fetch allocated sensors (status blocked) + const allocatedSensors = await Insensors.find({ + storeId: order.storeId, + customerId: order.customerId, + status: "blocked", + }).lean(); + + // Build response object + ordersWithPendingMasters.push({ + ...order.toObject(), + master_connections: pendingMasters, // keep only pending masters + customer: customer || null, + allocated_sensors: allocatedSensors, + }); + } + } + + if (!ordersWithPendingMasters.length) { + return reply.send({ + status_code: 200, + message: "No pending master connections found for this installation", + data: [], + }); + } + + return reply.send({ + status_code: 200, + message: "Pending orders fetched successfully", + data: ordersWithPendingMasters, + }); + + } catch (err) { + console.error("Error fetching pending orders:", err); + return reply.status(500).send({ error: "Internal server error" }); + } +}; + exports.getCompleteOrdersByInstallationId = async (req, reply) => { try { const { installationId } = req.params; diff --git a/src/routes/storeRoute.js b/src/routes/storeRoute.js index 0d549a0c..49d03b5d 100644 --- a/src/routes/storeRoute.js +++ b/src/routes/storeRoute.js @@ -2038,6 +2038,29 @@ fastify.get("/api/ManagerPendingordersofinstall/:installationId", { handler: storeController.getManagerPendingOrdersByInstallationId, }); +fastify.get("/api/waitingManagerPendingordersofinstall/:installationId", { + schema: { + tags: ["Installation"], + description: "Fetches orders based on installationId", + summary: "Get Waiting Manager Pending orders by installationId", + params: { + type: "object", + properties: { + installationId: { type: "string" }, + //teamMemberId: { type: "string"}, + //customerId: { type: "string"}, + }, + // required: ["installationId"], + }, + security: [ + { + basicAuth: [], + }, + ], + }, + handler: storeController.getWaitingManagerPendingOrdersByInstallationId, +}); + fastify.get("/api/Completeordersofinstall/:installationId", { schema: { tags: ["Installation"],