@ -1,7 +1,8 @@
const { Tanker , Tankerbooking , Bore , GovtPipeLine } = require ( '../models/tankers' )
const { User , Counter , generateBookingId , resetCounter , generateCustomerId } = require ( '../models/User' )
const { Tank } = require ( '../models/tanks' )
const { FriendRequest } = require ( '../models/supplier' )
//const User = require("../models/User");
const boom = require ( "boom" ) ;
@ -193,6 +194,8 @@ exports.tankerBooking = async (req, reply) => {
else {
bookingsData = {
tankname : req . body . tankname ,
tankLocation : req . body . tankLocation ,
tankerName : tankerName ,
customerId : customerId ,
bookingid : bookingId ,
@ -212,6 +215,8 @@ exports.tankerBooking = async (req, reply) => {
usertobeInserted = checkFormEncoding . tankersBookingData ;
console . log ( "thsi true url string" ) ;
tankersBookingData . customerId = customerId ;
tankersBookingData . tankname = usertobeInserted . tankname ;
tankersBookingData . tankLocation = usertobeInserted . tankLocation ;
tankersBookingData . tankerName = tankerName ;
tankersBookingData . bookingid = bookingId ;
tankersBookingData . capacity = usertobeInserted . capacity ;
@ -527,3 +532,269 @@ exports.status = async (req, reply) => {
}
} ;
exports . connectionStatus = async ( req , reply ) => {
try {
// query the database to check if the customer and supplier are connected
const isConnected = await User . findOne ( { customerId : req . query . customerId } )
. populate ( 'supplier' , null , { supplierId : req . query . supplierId } )
. exec ( )
. then ( customer => customer . supplier !== null ) ;
console . log ( "isconne.." , isConnected )
if ( isConnected ) {
// if customer and supplier are connected, return list of tankers
const tankers = await Tanker . find ( { } ) . exec ( ) ;
console . log ( "tankers.." , tankers )
reply . send ( { tankers } ) ;
} else {
// if customer and supplier are not connected, return error
reply . status ( 403 ) . send ( { error : 'Forbidden' } ) ;
}
//res.send({ tankers });
} catch ( err ) {
console . error ( err ) ;
reply . status ( 500 ) . send ( { error : 'Internal server error' } ) ;
}
}
exports . connectstatus = async ( req , reply ) => {
try {
const customerId = req . params . customerId ;
const supplierId = req . query . supplierId ;
console . log ( req . params . customerId )
console . log ( req . query . supplierId )
const data = await FriendRequest . findOne ( { customerId : customerId , supplierId : supplierId } ) ;
let connection _status = "not requested" ;
if ( data ) {
connection _status = data . status ;
}
reply . send ( { status _code : 200 , customerId : customerId , supplierId : supplierId , status : connection _status } ) ;
} catch ( err ) {
throw boom . boomify ( err ) ;
}
} ;
exports . deliveryboystart = async ( req , reply ) => {
try {
//let start_time,stop_time
const customerId = req . params . customerId ;
const tankLocation = req . body . tankLocation ;
const action = req . body . action
const receiver _tank = req . body . tankname
const receiver _tank _info = await Tank . findOne ( { customerId , tankName : receiver _tank , tankLocation : tankLocation . toLowerCase ( ) } ) ;
const receiver _capacity = parseInt ( ( receiver _tank _info . capacity ) . replace ( /,/g , '' ) , 10 )
const desired _water _percentage = parseInt ( ( req . body . percentage ) . replace ( /,/g , '' ) , 10 )
const intervals = { } ;
if ( action === "start" ) {
start _time = new Date ( ) . toLocaleString ( 'en-US' , { timeZone : 'Asia/Kolkata' } )
const supplier _tank = req . body . from
const supplier _tank _type = ( req . body . from _type ) . toLowerCase ( )
const receiver _type = ( req . body . to _type ) . toLowerCase ( )
console . log ( supplier _tank )
if ( supplier _tank _type === "sump" && receiver _type === "overhead" ) {
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { motor _status : "1" } } ) ;
const supplier _tank _info1 = await Tank . findOne ( { customerId , tankName : supplier _tank , tankLocation : supplier _tank _type } ) ;
//console.log(supplier_tank_info1)
//const initial_update = parseInt(supplier_tank_info1.waterlevel.replace(/,/g, ''), 10)-200;
// await Tank.findOneAndUpdate({customerId, tankName: supplier_tank,tankLocation:supplier_tank_type}, { $set: { waterlevel: initial_update } });
const supplier _tank _info = await Tank . findOne ( { customerId , tankName : supplier _tank , tankLocation : supplier _tank _type } ) ;
// await changingfrom_tankwaterlevel(customerId,initial_update,supplier_tank_info);
let supplier _waterlevel = parseInt ( supplier _tank _info . waterlevel . replace ( /,/g , '' ) , 10 )
// console.log(supplier_waterlevel)
let receiver _waterlevel = parseInt ( receiver _tank _info . waterlevel . replace ( /,/g , '' ) , 10 )
intervals [ receiver _tank ] = setInterval ( async function ( ) {
// Calculate new water levels
const supplier _tank _info2 = await Tank . findOne ( { customerId , tankName : supplier _tank , tankLocation : supplier _tank _type } ) ;
const rcvr _info = await Tank . findOne ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } ) ;
const newWaterLevel = receiver _waterlevel + 350 //Math.floor(supplier_waterlevel * 0.1);
const newSupplierWaterLevel = supplier _waterlevel //Math.floor(supplier_waterlevel * 0.1);
const supplier _capacity = parseInt ( supplier _tank _info . capacity . replace ( /,/g , '' ) , 10 )
console . log ( ( newSupplierWaterLevel / supplier _capacity ) * 100 )
// Check if updating should stop
if ( ( newSupplierWaterLevel / supplier _capacity ) * 100 <= 5 || ( newWaterLevel / receiver _capacity ) * 100 >= 95 || ( newWaterLevel / receiver _capacity ) * 100 >= desired _water _percentage || rcvr _info . motor _status === "0" ) {
clearInterval ( intervals [ receiver _tank ] ) ; // Clear the interval for this tank
delete intervals [ receiver _tank ] ;
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { motor _status : "0" } } ) ;
console . log ( "end for" + receiver _tank ) ;
} else {
// Update water levels in database
//supplier_waterlevel = newSupplierWaterLevel;
receiver _waterlevel = newWaterLevel ;
console . log ( ( newSupplierWaterLevel / supplier _capacity ) * 100 )
// console.log((newWaterLevel/receiver_capacity)*100)
console . log ( receiver _tank + "" + newWaterLevel + "" + "bore to sump" )
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { waterlevel : newWaterLevel } } )
if ( supplier _tank _info2 . motor _status === "0" ) {
supplier _waterlevel = parseInt ( supplier _tank _info2 . waterlevel . replace ( /,/g , '' ) , 10 ) - 350
console . log ( supplier _tank + "" + newSupplierWaterLevel + "" + "s to oh" )
await Tank . findOneAndUpdate ( { customerId , tankName : supplier _tank , tankLocation : supplier _tank _type } , { $set : { waterlevel : supplier _waterlevel } } )
}
}
} , 2000 ) ;
}
// if(supplier_tank_type==="sump" && receiver_type === "overhead"){
// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { motor_status: 1 } });
// // console.log(rcvr_info.motor_status)
// const supplier_tank_info1 = await Tank.findOne({ customerId ,tankName:supplier_tank});
// initial_update = parseInt(supplier_tank_info1.capacity.replace(/,/g, ''), 10)/2;
// await Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: initial_update } });
// const supplier_tank_info = await Tank.findOne({ customerId ,tankName:supplier_tank});
// let supplier_waterlevel = parseInt(supplier_tank_info.waterlevel.replace(/,/g, ''), 10)
// let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10)
// intervalId = setInterval(async function () {
// const rcvr_info = await Tank.findOne({ customerId ,tankName:receiver_tank});
// const supplier_capacity = parseInt(supplier_tank_info.capacity.replace(/,/g, ''), 10)
// // Calculate new water levels
// const newWaterLevel = receiver_waterlevel + 200//Math.floor(supplier_waterlevel * 0.1);
// const newSupplierWaterLevel = Math.min(supplier_capacity, supplier_waterlevel + 350);// Math.floor(supplier_waterlevel * 0.15));
// // console.log(newWaterLevel)
// // console.log(newSupplierWaterLevel)
// // console.log(rcvr_info.motor_status)
// // console.log(rcvr_info.tankName)
// // Check if updating should stop
// if ( (newWaterLevel/receiver_capacity)*100 >= 95 || (newWaterLevel/receiver_capacity)*100 >= desired_water_percentage || rcvr_info.motor_status === 0) {
// clearInterval(intervalId)
// await Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { motor_status: 0 } });
// console.log("end");
// } else {
// // Update water levels in database
// supplier_waterlevel = newSupplierWaterLevel;
// receiver_waterlevel = newWaterLevel;
// // console.log((newSupplierWaterLevel/supplier_capacity)*100)
// // console.log((newWaterLevel/receiver_capacity)*100)
// await Promise.all([
// Tank.findOneAndUpdate({customerId, tankName: receiver_tank}, { $set: { waterlevel: newWaterLevel } }),
// Tank.findOneAndUpdate({customerId, tankName: supplier_tank}, { $set: { waterlevel: newSupplierWaterLevel } })
// ]);
// }
// }, 2000);
// }
if ( supplier _tank _type === "bore" && receiver _type === "sump" ) {
const receiver _capacity = parseInt ( receiver _tank _info . capacity . replace ( /,/g , '' ) , 10 )
// console.log(receiver_capacity,"0",receiver_tank_info.tankName)
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { motor _status : "1" } } ) ;
let receiver _waterlevel = parseInt ( receiver _tank _info . waterlevel . replace ( /,/g , '' ) , 10 )
// console.log(receiver_waterlevel,"1")
intervals [ receiver _tank ] = setInterval ( async function ( ) {
// Calculate new water levels
const rcvr _info = await Tank . findOne ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } ) ;
//console.log(rcvr_info)
//console.log(rcvr_info.motor_status)
const newWaterLevel = receiver _waterlevel + 450 ;
//console.log(newWaterLevel,"2",receiver_tank_info.tankName)
// Check if updating should stop
if ( ( newWaterLevel / receiver _capacity ) * 100 >= 97 || ( newWaterLevel / receiver _capacity ) * 100 >= desired _water _percentage || rcvr _info . motor _status === "0" ) {
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { motor _status : "0" } } ) ;
clearInterval ( intervals [ receiver _tank ] ) ; // Clear the interval for this tank
delete intervals [ receiver _tank ] ;
console . log ( "end for" + receiver _tank ) ;
} else {
// Update water levels in database
receiver _waterlevel = newWaterLevel ;
console . log ( receiver _tank + "" + newWaterLevel + "" + "bore to sump" )
//console.log((newWaterLevel/receiver_capacity)*100,"4",receiver_tank_info.tankName)
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : receiver _type } , { $set : { waterlevel : newWaterLevel } } )
}
} , 2000 ) ;
}
// console.log(customerId,req.body.from,req.body.from_type,receiver_tank,req.body.to_type,)
motorData = {
customerId : customerId ,
supplierTank : req . body . from ,
supplier _type : req . body . from _type ,
receiverTank : receiver _tank ,
receiver _type : req . body . to _type ,
startTime : req . body . startTime ,
stopTime : req . body . stopTime ,
} ;
var motorData = new MotorData ( motorData ) ;
checkFormEncoding = isUserFormUrlEncoded ( req ) ;
if ( checkFormEncoding . isUserFormUrlEncoded ) {
usertobeInserted = checkFormEncoding . motorData ;
console . log ( "thsi true url string" ) ;
motorData . customerId = customerId ;
motorData . supplierTank = req . body . from ;
motorData . receiverTank = receiver _tank ;
motorData . supplier _type = req . body . from _type ;
motorData . receiver _type = req . body . to _type ;
motorData . startTime = usertobeInserted . startTime ;
motorData . stopTime = usertobeInserted . stopTime ;
}
const motor _data = await motorData . save ( ) ;
// reply.send({ status_code: 200, data: motor_data });
reply . send ( { status _code : 200 , "start time" : start _time , data : motor _data } ) ;
console . log ( start _time )
return motor _data
}
else if ( action === "stop" ) {
stop _time = new Date ( ) . toLocaleString ( 'en-US' , { timeZone : 'Asia/Kolkata' } )
// console.log(stop_time)
// clearInterval(intervalId);
await Tank . findOneAndUpdate ( { customerId , tankName : receiver _tank , tankLocation : ( req . body . to _type ) . toLowerCase ( ) } , { $set : { motor _status : "0" } } ) ;
reply . send ( { status _code : 200 , "stop time" : stop _time } ) ;
} else {
throw new Error ( "Invalid action" ) ;
}
return { message : 'Water level updates started' } ;
} catch ( err ) {
throw new Error ( ` Failed to start/stop water level updates: ${ err . message } ` ) ;
} ;
} ;