diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index b042bf9d..480dd07b 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -635,7 +635,7 @@ exports.assignTeamMemberToQuotation = async (request, reply) => { // 🔁 Raise ticket if applicable const sensor = await Insensors.findOne({ hardwareId }).lean(); if (sensor?.customerId) { - await raiseATicketLikeLogic(sensor.customerId, hardwareId); + //await raiseATicketLikeLogic(sensor.customerId, hardwareId); } return reply.send({ @@ -716,7 +716,7 @@ exports.getByHardwareIdSupport = async (req, reply) => { // 🔁 Raise ticket if applicable const sensor = await Insensors.findOne({ hardwareId }).lean(); if (sensor?.customerId) { - await raiseATicketLikeLogic(sensor.customerId, hardwareId); + //await raiseATicketLikeLogic(sensor.customerId, hardwareId); } return reply.send({ @@ -3873,13 +3873,13 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { s => s.hardwareId?.trim().toLowerCase() === normalizedConnectedTo && s.type === "master" && - s.support_issue_status === "inactive" + s.support_issue_status !== "active" // 🔴 Don't raise if already active ); if (!masterSensor) return; const orderMap = {}; orders.forEach(order => { - order.master_connections.forEach(conn => { + order.master_connections?.forEach(conn => { orderMap[conn.hardwareId] = { masterName: conn.master_name || null, location: conn.location || null @@ -3897,12 +3897,15 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => { const connectedSlaves = sensors.filter( s => s.connected_to?.trim().toLowerCase() === normalizedConnectedTo && - s.type === "slave" && - s.support_issue_status === "inactive" + s.type === "slave" ); const disconnectedSlaves = connectedSlaves - .filter(s => s.connected_status === "disconnected") + .filter( + s => + s.connected_status === "disconnected" && + s.support_issue_status !== "active" // 🔴 Don't re-raise for already active + ) .map(s => ({ slaveHardwareId: s.tankhardwareId?.trim().toLowerCase(), slaveName: s.tankName || "Unknown Slave" @@ -3999,40 +4002,45 @@ cron.schedule("* * * * *", async () => { try { console.log("🔁 Running auto-disconnect ticket check..."); + // Get all master sensors const allMasters = await Insensors.find({ type: "master" }).lean(); for (const master of allMasters) { const customerId = master.customerId; const hardwareId = master.hardwareId; + // Get all slaves connected to this master const connectedSlaves = await Insensors.find({ connected_to: hardwareId, type: "slave" }).lean(); + // Filter disconnected slaves (regardless of support_issue_status) const disconnectedSlaves = connectedSlaves.filter( s => s.connected_status === "disconnected" ); + // Check master disconnected and active status const masterIsDisconnected = master.connected_status === "disconnected"; - - // ✅ Check if master already has unresolved ticket const masterAlreadyActive = master.support_issue_status === "active"; - // ✅ Check if any disconnected slave already has unresolved ticket + // Check if any disconnected slave is already marked active const anySlaveAlreadyActive = disconnectedSlaves.some( slave => slave.support_issue_status === "active" ); - // ✅ Only raise a ticket if not already active + // Decide if ticket should be raised: + // Raise if master is disconnected and not already active + // OR there are disconnected slaves and none of them are active const shouldRaiseTicket = (masterIsDisconnected && !masterAlreadyActive) || (disconnectedSlaves.length > 0 && !anySlaveAlreadyActive); if (shouldRaiseTicket) { + console.log(`⚠️ Raising ticket for master: ${hardwareId}`); await raiseATicketLikeLogic(customerId, hardwareId); } else { - console.log(`Skipping ticket for ${hardwareId} — already active.`); + console.log(`✅ Skipping ticket for ${hardwareId} — already active.`); } } } catch (err) { @@ -4041,6 +4049,8 @@ cron.schedule("* * * * *", async () => { }); + + exports.raiseATicketBuildingDetails = async (req, reply) => { try { const { customerId, connected_to, installationId } = req.params;