diff --git a/src/controllers/supplierOrderController.js b/src/controllers/supplierOrderController.js index f194f5ed..d4730232 100644 --- a/src/controllers/supplierOrderController.js +++ b/src/controllers/supplierOrderController.js @@ -1,6 +1,8 @@ //const Supplier = require("../models/supplier"); const { Supplier, generateSupplierId, FriendRequest,DeliveryBoy} = require("../models/supplier") +const { Tank } = require('../models/tanks') + const boom = require("boom"); const fastify = require("fastify")({ @@ -180,4 +182,118 @@ exports.getactivedeliveryboysofsupplier = async (req, reply) => { } catch (err) { throw boom.boomify(err); } -}; \ No newline at end of file +}; + + +const intervals = {}; +exports.deliveryboystartandstop = async (req, reply) => { + + try { + //let start_time,stop_time + const bookingId = req.params.bookingId + const bookingdata = await Tankerbooking.findOne({bookingid: bookingId}) + // console.log(bookingdata,"0") + // console.log(bookingdata.supplierId,"6") + const customerId = bookingdata.customerId; + const action = req.body.action + const receiver_tank = bookingdata.tankName + // console.log(receiver_tank,"5") + const receiver_tank_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:"sump"}); + // console.log(receiver_tank_info,"1") + + const receiver_capacity = parseInt((receiver_tank_info.capacity).replace(/,/g, ''), 10) + // console.log(receiver_capacity,"2") + + + + + if(action === "start"){ + // console.log("started") + start_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) + const initial_receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) + + await Tankerbooking.findOneAndUpdate({bookingid:bookingId}, { $set: { initial_water_level: initial_receiver_waterlevel ,start_time:start_time} }); + + + + let receiver_waterlevel = parseInt(receiver_tank_info.waterlevel.replace(/,/g, ''), 10) + // console.log(receiver_waterlevel,"1") + const intervalId = setInterval(async function () { + // Calculate new water levels + + const newWaterLevel = receiver_waterlevel+450; + //console.log(newWaterLevel,"2",receiver_tank_info.tankName) + // Check if updating should stop + if ((newWaterLevel/receiver_capacity)*100 >= 97 ) { + + + clearInterval(intervals[receiver_tank]); // Clear the interval for this tank + + delete intervals[receiver_tank]; + stop_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) + + const final_tank_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:"sump"}); + const final_receiver_waterlevel = parseInt(final_tank_info.waterlevel.replace(/,/g, ''), 10) + // console.log(final_receiver_waterlevel) + // clearInterval(intervalId); + await Tankerbooking.findOneAndUpdate({bookingid:bookingId}, { $set: { final_water_level: final_receiver_waterlevel ,stop_time:stop_time} }); + // 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:"sump"}, { $set: { waterlevel: newWaterLevel } }) + // console.log(intervals,"check1") + } + }, 2000); + intervals[receiver_tank] = intervalId; + + + + + // console.log(customerId,req.body.from,req.body.from_type,receiver_tank,req.body.to_type,) + + + reply.send({ status_code: 200, "start time": start_time,}); + console.log(start_time) + + + + } + + if (action === "stop") { + const booking_data = await Tankerbooking.findOne({bookingid: bookingId}) + console.log(intervals,"hii3") + try { + clearInterval(intervals[receiver_tank]); // Clear the interval for this tank + delete intervals[receiver_tank]; // Delete the interval ID for this tank from the intervals object + } catch (err) { + console.log(err); + } + stop_time = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'}) + const final_tank_info = await Tank.findOne({ customerId ,tankName:receiver_tank,tankLocation:"sump"}); + // console.log(final_tank_info,"hii") + const final_receiver_waterlevel = parseInt(final_tank_info.waterlevel.replace(/,/g, ''), 10) + + const start_water_level = parseInt(booking_data.initial_water_level.replace(/,/g, ''), 10) + const quantity_delivered = final_receiver_waterlevel-start_water_level + + await Tankerbooking.findOneAndUpdate({bookingid:bookingId}, { $set: { final_water_level: final_receiver_waterlevel ,stop_time:stop_time,quantityDelivered:quantity_delivered} }); + 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}`); + + }; +}; + + + + diff --git a/src/controllers/tankersController.js b/src/controllers/tankersController.js index 21874994..16656628 100644 --- a/src/controllers/tankersController.js +++ b/src/controllers/tankersController.js @@ -201,7 +201,9 @@ exports.tankerBooking = async (req, reply) => { address: req.body.address, dateOfOrder: req.body.dateOfOrder, price:req.body.price, - supplierId:req.body.supplierId + supplierId:req.body.supplierId, + tankName:req.body.tankName, + tankLocation:req.body.tankLocation, //date: req.body.date, // time: req.body.time, @@ -222,6 +224,8 @@ exports.tankerBooking = async (req, reply) => { tankersBookingData.dateOfOrder = usertobeInserted.dateOfOrder; tankersBookingData.price = usertobeInserted.price; tankersBookingData.supplierId = usertobeInserted.supplierId; + tankersBookingData.tankName = usertobeInserted.tankName; + tankersBookingData.tankLocation = usertobeInserted.tankLocation; //tankersBookingData.date = usertobeInserted.date; //tankersBookingData.time = usertobeInserted.time; @@ -609,11 +613,6 @@ exports.connectionStatus = async (req, reply) => { exports.connectstatus = async (req, reply) => { - - - - - try { const customerId = req.params.customerId; diff --git a/src/models/tankers.js b/src/models/tankers.js index bd6d2059..37bf742b 100644 --- a/src/models/tankers.js +++ b/src/models/tankers.js @@ -32,7 +32,7 @@ const tankersSchema = new mongoose.Schema({ const tankersbookingSchema = new mongoose.Schema({ customerId: { type: String, default: null }, - tankname:{ type: String, default: null }, + tankName:{ type: String, default: null }, tankLocation:{ type: String, default: null }, tankerName: { type: String, default: null }, bookingid: { type: String, default: null,unique: true }, @@ -49,7 +49,10 @@ const tankersbookingSchema = new mongoose.Schema({ delivery_agent : { type: String, default: "null" }, delivery_agent_mobile : { type: String, default: "null" }, delivery_agent_alternative_mobile : { type: String, default: "null" }, - + initial_water_level:{ type: String, default: "null" }, + final_water_level:{ type: String, default: "null" }, + start_time:{ type: String, default: "null" }, + stop_time:{ type: String, default: "null" }, quantityDelivered: { type: String, default: null}, amount_paid: { type: String, default: null }, amount_due: { type: String, default: null }, diff --git a/src/routes/supplierOrdersRoutes.js b/src/routes/supplierOrdersRoutes.js index 897358f4..f556d363 100644 --- a/src/routes/supplierOrdersRoutes.js +++ b/src/routes/supplierOrdersRoutes.js @@ -208,6 +208,53 @@ module.exports = function (fastify, opts, next) { handler: supplierOrderController.getactivedeliveryboysofsupplier, }); + + fastify.route({ + method: "PUT", + url: "/api/deliveryboystartandstop/:bookingId", + schema: { + tags: ["Supplier"], + summary: "This is for delivery boy start and stop", + params: { + required: ["bookingId"], + type: "object", + properties: { + bookingId: { + type: "string", + description: "bookingId", + }, + }, + }, + + + body: { + type: "object", + // required: ['phone'], + properties: { + + + action: { type: "string" }, + percentage: { type: "string",default: "100" }, + //startTime:{ type: "string" }, + //stopTime:{ type: "string" }, + }, + }, + security: [ + { + basicAuth: [], + }, + ], + }, + // preHandler: [ + // fastify.auth([fastify.operatorAuthenticate]), + // validationHandler.validatePhoneFormat, + // ], + preHandler: fastify.auth([fastify.authenticate]), + handler: supplierOrderController.deliveryboystartandstop, + }); + + + next(); } diff --git a/src/routes/tankersRoute.js b/src/routes/tankersRoute.js index 56239206..cd7d192e 100644 --- a/src/routes/tankersRoute.js +++ b/src/routes/tankersRoute.js @@ -199,13 +199,15 @@ module.exports = function (fastify, opts, next) { body: { type: "object", properties: { + tankName:{type: 'string'}, + tankLocation:{type: 'string'}, tankerName: {type: 'string'}, - typeofwater: { type: "string" }, - capacity: { type: "string" }, - address: { type: "string" }, - dateOfOrder: { type: "string"}, - price: { type: "string"}, - supplierId: { type: "string"}, + typeofwater: { type: "string" }, + capacity: { type: "string" }, + address: { type: "string" }, + dateOfOrder: { type: "string"}, + price: { type: "string"}, + supplierId: { type: "string"},