diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 5689164f..047afeec 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -6407,6 +6407,114 @@ exports.moveIssueToCategory = async (req, reply) => { // } // }; +// exports.particularCategory = async (req, reply) => { +// try { +// const { supportId, category } = req.params; + +// if (!supportId || !category) { +// return reply.code(400).send({ error: "supportId and category are required" }); +// } + +// const support = await Support.findOne({ supportId }).lean(); +// if (!support) { +// return reply.code(404).send({ message: "Support record not found" }); +// } + +// const issues = (support.categorizedIssues || []).filter(issue => issue.category === category); +// if (issues.length === 0) { +// return reply.code(404).send({ message: `No issues found for category: ${category}` }); +// } + +// const hardwareIds = issues.map(issue => issue.hardwareId).filter(Boolean); + +// // Get all sensors related to the issues (including masters and potential slaves) +// const allRelatedSensors = await Insensors.find({ +// hardwareId: { $in: hardwareIds } +// }).lean(); + +// if (!allRelatedSensors.length) { +// return reply.code(404).send({ message: "No matching devices found for this category." }); +// } + +// const orderMap = {}; +// const customerId = allRelatedSensors[0]?.customerId; +// if (customerId) { +// const orders = await Order.find({ customerId }).lean(); +// orders.forEach(order => { +// order.master_connections.forEach(conn => { +// orderMap[conn.hardwareId] = { +// masterName: conn.master_name || null, +// location: conn.location || null +// }; +// }); +// }); +// } + +// const disconnectedIssues = []; + +// for (const master of allRelatedSensors.filter(i => i.type === "master")) { +// const slaves = await Insensors.find({ +// connected_to: master.hardwareId +// }).lean(); + +// const disconnectedSlaves = slaves.filter(slave => slave.connected_status === "disconnected"); + +// // If master is disconnected OR any of its slaves are disconnected, include it +// if (master.connected_status === "disconnected" || disconnectedSlaves.length > 0) { +// const slaveDetails = disconnectedSlaves.map(slave => { +// const slaveIssue = issues.find(i => i.hardwareId === slave.hardwareId); +// return { +// hardwareId: slave.hardwareId, +// tankName: slave.tankName || "", +// location: slave.tankLocation || "", +// connected_status: slave.connected_status, +// lora_last_disconnect_time: slave.lora_last_disconnect_time || null, +// connected_to: slave.connected_to || "", +// masterName: orderMap[master.hardwareId]?.masterName || "", +// type: "slave", +// typeOfWater: slave.typeOfWater || "", +// support_lora_last_check_time: null, +// category, +// assignedTo: slaveIssue?.assignedTo || null +// }; +// }); + +// const masterIssue = issues.find(i => i.hardwareId === master.hardwareId); + +// disconnectedIssues.push({ +// hardwareId: master.hardwareId, +// masterName: orderMap[master.hardwareId]?.masterName || "", +// location: orderMap[master.hardwareId]?.location || "", +// type: "master", +// connected_status: master.connected_status, +// gsm_last_disconnect_time: master.gsm_last_disconnect_time || null, +// support_gsm_last_check_time: null, +// connected_slave_count: slaveDetails.length, +// connected_slaves: slaveDetails, +// category, +// assignedTo: masterIssue?.assignedTo || null +// }); +// } +// } + +// if (disconnectedIssues.length === 0) { +// return reply.code(404).send({ message: "No disconnected devices found for this category." }); +// } + +// return reply.send({ +// status_code: 200, +// supportId, +// totalMasters: disconnectedIssues.length, +// disconnectedIssues +// }); + +// } catch (err) { +// console.error("Error in particularCategory:", err); +// return reply.code(500).send({ error: "Internal server error" }); +// } +// }; + + exports.particularCategory = async (req, reply) => { try { const { supportId, category } = req.params; @@ -6426,11 +6534,7 @@ exports.particularCategory = async (req, reply) => { } const hardwareIds = issues.map(issue => issue.hardwareId).filter(Boolean); - - // Get all sensors related to the issues (including masters and potential slaves) - const allRelatedSensors = await Insensors.find({ - hardwareId: { $in: hardwareIds } - }).lean(); + const allRelatedSensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean(); if (!allRelatedSensors.length) { return reply.code(404).send({ message: "No matching devices found for this category." }); @@ -6453,57 +6557,62 @@ exports.particularCategory = async (req, reply) => { const disconnectedIssues = []; for (const master of allRelatedSensors.filter(i => i.type === "master")) { - const slaves = await Insensors.find({ - connected_to: master.hardwareId - }).lean(); - - const disconnectedSlaves = slaves.filter(slave => slave.connected_status === "disconnected"); - - // If master is disconnected OR any of its slaves are disconnected, include it - if (master.connected_status === "disconnected" || disconnectedSlaves.length > 0) { - const slaveDetails = disconnectedSlaves.map(slave => { - const slaveIssue = issues.find(i => i.hardwareId === slave.hardwareId); - return { - hardwareId: slave.hardwareId, - tankName: slave.tankName || "", - location: slave.tankLocation || "", - connected_status: slave.connected_status, - lora_last_disconnect_time: slave.lora_last_disconnect_time || null, - connected_to: slave.connected_to || "", - masterName: orderMap[master.hardwareId]?.masterName || "", - type: "slave", - typeOfWater: slave.typeOfWater || "", - support_lora_last_check_time: null, - category, - assignedTo: slaveIssue?.assignedTo || null - }; - }); + const slaves = await Insensors.find({ connected_to: master.hardwareId }).lean(); - const masterIssue = issues.find(i => i.hardwareId === master.hardwareId); + const slaveDetails = slaves.map(slave => { + const slaveIssue = issues.find(i => i.hardwareId === slave.hardwareId); + const slaveComments = (support.comments || []) + .filter(comment => comment.hardwareId === slave.hardwareId) + .map(c => c.text); - disconnectedIssues.push({ - hardwareId: master.hardwareId, + return { + hardwareId: slave.tankhardwareId, + tankName: slave.tankName || "", + location: slave.tankLocation || "", + connected_status: slave.connected_status, + connected_lora_time: slave.connected_lora_time || "", + connected_lora_date: slave.connected_lora_date || "", + lora_last_check_time: slave.lora_last_check_time || null, + lora_last_disconnect_time: slave.lora_last_disconnect_time || null, + connected_to: slave.connected_to || "", masterName: orderMap[master.hardwareId]?.masterName || "", - location: orderMap[master.hardwareId]?.location || "", - type: "master", - connected_status: master.connected_status, - gsm_last_disconnect_time: master.gsm_last_disconnect_time || null, - support_gsm_last_check_time: null, - connected_slave_count: slaveDetails.length, - connected_slaves: slaveDetails, - category, - assignedTo: masterIssue?.assignedTo || null - }); - } - } + type: "slave", + typeOfWater: slave.typeOfWater || "", + support_lora_last_check_time: slave.support_lora_last_check_time || null, + team_member_support_lora_last_check_time: slave.team_member_support_lora_last_check_time || null, + comments: slaveComments + }; + }); - if (disconnectedIssues.length === 0) { - return reply.code(404).send({ message: "No disconnected devices found for this category." }); + const masterIssue = issues.find(i => i.hardwareId === master.hardwareId); + const masterComments = (support.comments || []) + .filter(comment => comment.hardwareId === master.hardwareId) + .map(c => c.text); + + disconnectedIssues.push({ + hardwareId: master.hardwareId, + masterName: orderMap[master.hardwareId]?.masterName || "", + location: orderMap[master.hardwareId]?.location || "", + type: "master", + connected_status: master.connected_status, + gsm_last_check_time: master.gsm_last_check_time || null, + gsm_last_disconnect_time: master.gsm_last_disconnect_time || null, + connected_gsm_date: master.connected_gsm_date || "", + connected_gsm_time: master.connected_gsm_time || "", + connected_lora_date: master.connected_lora_date || "", + connected_lora_time: master.connected_lora_time || "", + support_gsm_last_check_time: master.support_gsm_last_check_time || null, + team_member_support_gsm_last_check_time: master.team_member_support_gsm_last_check_time || null, + connected_slave_count: slaveDetails.length, + connected_slaves: slaveDetails, + comments: masterComments + }); } return reply.send({ status_code: 200, supportId, + customerId, totalMasters: disconnectedIssues.length, disconnectedIssues }); @@ -6516,7 +6625,6 @@ exports.particularCategory = async (req, reply) => { - // exports.assignCategorizeIssue = async (request, reply) => { // const { supportId } = request.params; // const { support_teamMemberId, startDate, endDate, category, masterHardwareId } = request.body;