From 06abe34512b15179026e6cbd4f26fee7c5789a19 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Tue, 3 Jun 2025 13:02:00 +0530 Subject: [PATCH] raise a ticket --- src/controllers/installationController.js | 65 +++++++++++++---------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index 718a1781..a13481b9 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -3867,8 +3867,10 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { const orders = await Order.find({ customerId }).lean(); if (!sensors.length) return; + const normalizedConnectedTo = connected_to.trim().toLowerCase(); + const masterSensor = sensors.find( - s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master" + s => s.hardwareId?.trim().toLowerCase() === normalizedConnectedTo && s.type === "master" ); if (!masterSensor) return; @@ -3885,23 +3887,23 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { const now = moment.tz("Asia/Kolkata"); const masterConnectedStatus = masterSensor.connected_status || "disconnected"; - const lastDataTime = masterSensor.connected_gsm_date && masterSensor.connected_gsm_time - ? `${masterSensor.connected_gsm_date} ${masterSensor.connected_gsm_time}` - : "No data"; + const lastDataTime = + masterSensor.connected_gsm_date && masterSensor.connected_gsm_time + ? `${masterSensor.connected_gsm_date} ${masterSensor.connected_gsm_time}` + : "No data"; // Get all slaves connected to this master const connectedSlaves = sensors.filter( - s => s.connected_to?.trim() === connected_to.trim() && s.type === "slave" + s => s.connected_to?.trim().toLowerCase() === normalizedConnectedTo && s.type === "slave" ); - const disconnectedSlaves = connectedSlaves.filter( - s => s.connected_status === "disconnected" - ).map(s => ({ - slaveHardwareId: s.tankhardwareId, - slaveName: s.tankName || "Unknown Slave" - })); + const disconnectedSlaves = connectedSlaves + .filter(s => s.connected_status === "disconnected") + .map(s => ({ + slaveHardwareId: s.tankhardwareId?.trim().toLowerCase(), + slaveName: s.tankName || "Unknown Slave" + })); - // No ticket needed if everything is connected if (disconnectedSlaves.length === 0 && masterConnectedStatus === "connected") return; const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); @@ -3911,42 +3913,47 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { const unresolvedMasterIssue = existingIssues.find( issue => - issue.hardwareId === connected_to && + issue.hardwareId?.trim().toLowerCase() === normalizedConnectedTo && issue.type === "GSM or LoRa Disconnected" && issue.resolved === false ); - // Skip raising a ticket if unresolved issue already exists if (unresolvedMasterIssue) return; - const resolvedMasterIssue = existingIssues.find( - issue => - issue.hardwareId === connected_to && - issue.type === "GSM or LoRa Disconnected" && - issue.resolved === true - ); + // Check both unresolved and resolved issues for previously reported slaves + const allSlaveHardwareIdsAlreadyReported = new Set(); + existingIssues + .filter(issue => issue.hardwareId?.trim().toLowerCase() === normalizedConnectedTo) + .forEach(issue => { + (issue.hardwareIds || []).forEach(id => { + if (typeof id === "string") { + allSlaveHardwareIdsAlreadyReported.add(id.trim().toLowerCase()); + } + }); + }); - const alreadyReportedSlaves = new Set(resolvedMasterIssue?.hardwareIds || []); const newSlaveHardwareIds = []; const newSlaveNames = []; for (const slave of disconnectedSlaves) { - if (!alreadyReportedSlaves.has(slave.slaveHardwareId)) { + if (!allSlaveHardwareIdsAlreadyReported.has(slave.slaveHardwareId)) { newSlaveHardwareIds.push(slave.slaveHardwareId); newSlaveNames.push(slave.slaveName); } } + // Still raise the issue if master is disconnected, even if no new slaves + if (newSlaveHardwareIds.length === 0 && masterConnectedStatus === "connected") return; + const formattedNow = now.format("YYYY-MM-DD HH:mm:ss"); - // Raise a new issue const newIssue = { type: "GSM or LoRa Disconnected", - masterHardwareId: connected_to, - hardwareId: connected_to, + masterHardwareId: normalizedConnectedTo, + hardwareId: normalizedConnectedTo, hardwareIds: newSlaveHardwareIds, slaveNames: newSlaveNames, - message: `Master ${connected_to} is ${masterConnectedStatus} with ${disconnectedSlaves.length} disconnected slave(s)`, + message: `Master ${connected_to} is ${masterConnectedStatus} with ${newSlaveHardwareIds.length} disconnected slave(s)`, disconnectedAt: lastDataTime, lastTicketRaisedAt: formattedNow, resolved: false @@ -3954,13 +3961,17 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { await Support.findOneAndUpdate( { supportId: "AWHYSU64" }, - { $push: { issues: newIssue }, $set: { updatedAt: new Date() } } + { + $push: { issues: newIssue }, + $set: { updatedAt: new Date() } + } ); } catch (error) { console.error("Error in raiseATicketLikeLogic:", error); } }; +;