diff --git a/src/controllers/tanksController.js b/src/controllers/tanksController.js index 6b633ec7..baac6874 100644 --- a/src/controllers/tanksController.js +++ b/src/controllers/tanksController.js @@ -316,11 +316,57 @@ exports.getTanklevels = async (req, reply) => { console.log("updated_data", updated_data); updated_data.forEach((tank) => { - const waterlevel = parseInt(tank.waterlevel.replace(/,/g, ''), 10); - const capacity = parseInt(tank.capacity.replace(/,/g, ''), 10); + const waterlevel = parseInt(tank.waterlevel ? tank.waterlevel.replace(/,/g, '') : '0', 10); + const capacity = parseInt(tank.capacity ? tank.capacity.replace(/,/g, '') : '0', 10); + const waterlevelPercentage = ((waterlevel / capacity) * 100).toFixed(2); + tank.waterlevelPercentage = waterlevelPercentage; // Add water level percentage to each tank object console.log(`Processing tank: ${tank.tankName}`); - console.log(`Type of Water: ${tank.typeOfWater}, Location: ${tank.tankLocation}, Waterlevel: ${waterlevel}, Capacity: ${capacity}`); + console.log(`Type of Water: ${tank.typeOfWater}, Location: ${tank.tankLocation}, Waterlevel: ${waterlevel}, Capacity: ${capacity}, Waterlevel Percentage: ${waterlevelPercentage}%`); + + let totalInputPercentage = 0; + let inputCount = 0; + let totalOutputPercentage = 0; + let outputCount = 0; + + // Calculate and add water level percentages for inputConnections + if (tank.connections.inputConnections) { + tank.connections.inputConnections.forEach(inputConnection => { + const inputWaterLevel = inputConnection.water_level ? parseInt(inputConnection.water_level.replace(/,/g, ''), 10) : 0; + const inputCapacity = inputConnection.capacity ? parseInt(inputConnection.capacity.replace(/,/g, ''), 10) : 0; + + if (inputCapacity > 0) { + inputConnection.waterlevelPercentage = ((inputWaterLevel / inputCapacity) * 100).toFixed(2); + totalInputPercentage += parseFloat(inputConnection.waterlevelPercentage); + inputCount++; + } else { + inputConnection.waterlevelPercentage = null; + } + }); + // Add the average input water level percentage to the tank's connections object + tank.connections.inputWaterlevelPercentage = inputCount > 0 ? (totalInputPercentage / inputCount).toFixed(2) : null; + } + + // Calculate and add water level percentages for outputConnections + if (tank.connections.outputConnections) { + tank.connections.outputConnections.forEach(outputConnection => { + const outputWaterLevel = outputConnection.water_level ? parseInt(outputConnection.water_level.replace(/,/g, ''), 10) : 0; + const outputCapacity = outputConnection.capacity ? parseInt(outputConnection.capacity.replace(/,/g, ''), 10) : 0; + + if (outputCapacity > 0) { + outputConnection.waterlevelPercentage = ((outputWaterLevel / outputCapacity) * 100).toFixed(2); + totalOutputPercentage += parseFloat(outputConnection.waterlevelPercentage); + outputCount++; + } else { + outputConnection.waterlevelPercentage = null; + } + }); + + // Add the average output water level percentage to the tank's connections object + tank.connections.outputWaterlevelPercentage = outputCount > 0 ? (totalOutputPercentage / outputCount).toFixed(2) : null; + } + + // Summing up the total water levels and capacities if (tank.tankLocation === 'sump' && tank.typeOfWater === 'Drinking Water') { sumSumpDrinkingWater += waterlevel; sumSumpDrinkingWaterCapacity += capacity; @@ -369,7 +415,6 @@ exports.getTanklevels = async (req, reply) => { - const intervals = {}; let sump_water_levels=[]; let supplier_tanks = []; diff --git a/src/models/tanks.js b/src/models/tanks.js index d5dc5b16..8c753ece 100644 --- a/src/models/tanks.js +++ b/src/models/tanks.js @@ -32,68 +32,69 @@ const RoleSchema = new Schema({ name: String }); const tanksSchema = new mongoose.Schema({ - hardwareId: { type: String }, - InstallerId: { type: String, default: null }, - tankhardwareId: { type: String }, - hardwareId_type: { type: String }, - hardwareId_company: { type: String }, - customerId: { type: String, default: null }, - tankName: { type: String, default: null }, - blockName: { type: String, default: null }, - capacity: { type: String, default: "0" }, - height: { type: String, default: "0" }, - tankLocation: { type: String, default: null }, - waterCapacityPerCm:{ type: String, default: "0" }, - typeOfWater: { type: String, default: null }, - waterlevel: { type: String, default: "0" }, - waterlevel_at_midnight:{ type: String,default:"0" }, - total_water_added_from_midnight:{ type: String,default:"0" }, - auto_min_percentage :{ type: String, default: "20" }, - reserved_percentage:{type: String,default:"20"}, - auto_max_percentage :{ type: String, default: "80" }, - - connections: { - source: { type: String }, - inputConnections: [ - { - inputConnections: { type: String }, - input_type: { type: String }, - inputismotor: { type: Boolean, }, - motor_id:{ type: String ,default: null}, - motor_status: { type: String, default: "0" }, - auto_mode:{type:String,default:"inactive"}, - motor_stop_status: { type: String, default: "1" }, - motor_on_type :{ type: String, default: "manual" }, - capacity:{ type: String ,default: null}, - water_level:{ type: String ,default: null}, - manual_threshold_percentage:{type: String, default: "90"}, - manual_threshold_time:{type: String, default: null}, - threshold_type:{type: String, default: "percentage"}, - startTime:{type: String,default:null}, - start_instance_id:{type:String,default:null}, - stopTime:{type: String,default:null} - } - ], - outputConnections: [ - { - outputConnections: { type: String }, - output_type: { type: String }, - outputismotor: { type: Boolean, }, - motor_id:{ type: String ,default: null}, - motor_status: { type: String, default: "0" }, - motor_stop_status: { type: String, default: "1" }, - capacity:{ type: String ,default: null}, - water_level:{ type: String ,default: null}, - manual_threshold_percentage:{type: String, default: "90"}, - manual_threshold_time:{type: String, default: null}, - threshold_type:{type: String, default: "percentage"}, - - } - ] - } - }); - - + hardwareId: { type: String }, + InstallerId: { type: String, default: null }, + tankhardwareId: { type: String }, + hardwareId_type: { type: String }, + hardwareId_company: { type: String }, + customerId: { type: String, default: null }, + tankName: { type: String, default: null }, + blockName: { type: String, default: null }, + capacity: { type: String, default: "0" }, + height: { type: String, default: "0" }, + tankLocation: { type: String, default: null }, + waterCapacityPerCm: { type: String, default: "0" }, + typeOfWater: { type: String, default: null }, + waterlevel: { type: String, default: "0" }, + waterlevel_at_midnight: { type: String, default: "0" }, + total_water_added_from_midnight: { type: String, default: "0" }, + auto_min_percentage: { type: String, default: "20" }, + reserved_percentage: { type: String, default: "20" }, + auto_max_percentage: { type: String, default: "80" }, + connections: { + source: { type: String }, + inputConnections: [ + { + inputConnections: { type: String }, + input_type: { type: String }, + inputismotor: { type: Boolean }, + motor_id: { type: String, default: null }, + motor_status: { type: String, default: "0" }, + auto_mode: { type: String, default: "inactive" }, + motor_stop_status: { type: String, default: "1" }, + motor_on_type: { type: String, default: "manual" }, + capacity: { type: String, default: null }, + water_level: { type: String, default: null }, + manual_threshold_percentage: { type: String, default: "90" }, + manual_threshold_time: { type: String, default: null }, + threshold_type: { type: String, default: "percentage" }, + startTime: { type: String, default: null }, + start_instance_id: { type: String, default: null }, + stopTime: { type: String, default: null }, + waterlevelPercentage: { type: String, default: null } + } + ], + outputConnections: [ + { + outputConnections: { type: String }, + output_type: { type: String }, + outputismotor: { type: Boolean }, + motor_id: { type: String, default: null }, + motor_status: { type: String, default: "0" }, + motor_stop_status: { type: String, default: "1" }, + capacity: { type: String, default: null }, + water_level: { type: String, default: null }, + manual_threshold_percentage: { type: String, default: "90" }, + manual_threshold_time: { type: String, default: null }, + threshold_type: { type: String, default: "percentage" }, + waterlevelPercentage: { type: String, default: null } + } + ], + inputWaterlevelPercentage: { type: String, default: null }, + outputWaterlevelPercentage: { type: String, default: null } + } +}); + const motordataSchema = new mongoose.Schema({