diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index c8b41ee3..0fac0c6a 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -1244,6 +1244,8 @@ exports.masterConnectedSlaveList = async (req, reply) => { // Step 2: Get tank metadata for master const tankDetails = await Tank.findOne({ hardwareId: connectedTo }, { tankLocation: 1, typeOfWater: 1 }).lean(); + const masterTypeOfWater = tankDetails?.typeOfWater || null; + // Step 3: Get slave tanks connected to master const slaveTanks = await Insensors.find({ connected_to: connectedTo, type: 'slave' }).lean(); const slaveCount = slaveTanks.length; @@ -1251,31 +1253,58 @@ exports.masterConnectedSlaveList = async (req, reply) => { // Step 4: Get latest IotData for master const latestIotData = await IotData.findOne({ hardwareId: connectedTo }).sort({ date: -1 }).lean(); - // Step 5: Prepare master object for response + // Step 5: Fetch order to get masterName and location + const order = await Order.findOne({ "master_connections.hardwareId": connectedTo }).lean(); + let masterOrderInfo = {}; + if (order) { + const match = order.master_connections.find(mc => mc.hardwareId === connectedTo); + if (match) { + masterOrderInfo = { + masterName: match.master_name || "", + location: match.location || "" + }; + } + } + + // Step 6: Prepare master object for response const masterResponse = { ...master, isMaster: true, tankLocation: tankDetails?.tankLocation || null, - typeOfWater: tankDetails?.typeOfWater || null, - tankHeight: null // Master doesn't have individual tankHeight + typeOfWater: masterTypeOfWater, + tankHeight: null, + masterName: masterOrderInfo.masterName, + location: masterOrderInfo.location }; - // Step 6: Process each slave + // Step 7: Process each slave const processedSlaves = slaveTanks.map(slave => { - const matchingTankData = latestIotData?.tanks?.find(t => t.tankhardwareId === slave.hardwareId); + const originalHardwareId = slave.hardwareId; + const tankHardwareId = slave.tankhardwareId; + + // Determine final hardwareId: prefer tankhardwareId if exists + const finalHardwareId = tankHardwareId || originalHardwareId; + + const matchingTankData = latestIotData?.tanks?.find(t => + t.tankhardwareId === finalHardwareId || t.hardwareId === finalHardwareId + ); return { ...slave, isMaster: false, - tankHeight: matchingTankData?.tankHeight ?? null + hardwareId: finalHardwareId, // Replace hardwareId with tankhardwareId if present + tankHeight: matchingTankData?.tankHeight ?? null, + typeOfWater: masterTypeOfWater === 'bore' ? 'bore' : (slave.typeOfWater || null) }; }); - // Step 7: Combine master and slaves into one array + // Step 8: Combine master and slaves into one array const combinedData = [masterResponse, ...processedSlaves]; return reply.send({ success: true, + tankLocation: tankDetails?.tankLocation || null, + typeOfWater: masterTypeOfWater, connectedSlaveCount: slaveCount, data: combinedData }); @@ -1290,6 +1319,8 @@ exports.masterConnectedSlaveList = async (req, reply) => { }; + + // exports.masterConnectedSlaveList = async (req, reply) => { // try { // const { connectedTo } = req.params;