From 9f02fde5c8af4b244361449cc061d631f145b83f Mon Sep 17 00:00:00 2001 From: varun Date: Thu, 27 Apr 2023 07:29:11 -0400 Subject: [PATCH] written user and supplier accounts basing on distrubance amount --- src/controllers/tankersController.js | 95 +++++++++++++++++++++++++++- src/models/tankers.js | 17 ++++- src/routes/tankersRoute.js | 72 +++++++++++++++++++++ 3 files changed, 181 insertions(+), 3 deletions(-) diff --git a/src/controllers/tankersController.js b/src/controllers/tankersController.js index 621483bc..0430d101 100644 --- a/src/controllers/tankersController.js +++ b/src/controllers/tankersController.js @@ -1,4 +1,4 @@ -const { Tanker, Tankerbooking,Bore,GovtPipeLine } = require('../models/tankers') +const { Tanker, Tankerbooking,Bore,GovtPipeLine,UserSupplierAccounts } = require('../models/tankers') const { User,Counter, generateBookingId,resetCounter,generateCustomerId } = require('../models/User') const { Supplier, generateSupplierId, FriendRequest,DeliveryBoy} = require("../models/supplier") @@ -674,3 +674,96 @@ exports.deleteBookingInfo = async (req, reply) => { throw boom.boomify(err); } }; + +exports.distrubanceStatus = async (req, reply) => { + try { + const bookingid = req.params.bookingid; + const action = req.body.action + const booking = await Tankerbooking.findOne({ bookingid:bookingid }); + const distrubance_price = parseInt(booking.distrubance_price .replace(/,/g, ''), 10) + const actual_price = parseInt(booking.actual_price.replace(/,/g, ''), 10) + const amount_due = parseInt(booking.amount_due .replace(/,/g, ''), 10) + const price_variation = actual_price-distrubance_price + if (action === "accept") { + await Tankerbooking.findOneAndUpdate({ bookingid:bookingid }, { $set: { amount_due: actual_price,amount_difference:"0" } }); + + } + if (action === "reject") { + + + await Tankerbooking.findOneAndUpdate({ bookingid:bookingid }, { $set: { amount_due: distrubance_price,amount_difference:"0" } }); + + } + + reply.send({ status_code: 200, data: booking}); + // return tank; + } catch (err) { + throw boom.boomify(err); + } +}; + + +exports.UserSupplierAccounts = async (req, reply) => { + try { + const customerId = req.params.customerId; + const supplierId = req.body.supplierId + const booking = await Tankerbooking.find({ customerId:customerId,supplierId:supplierId,orderStatus:"delivered"}); + const delivered_tankers = booking.length + console.log(delivered_tankers, booking.length) + let amount_due = 0 + let amount_advance = 0 + let TotalAmountPaid = 0 + for (let i = 0; i < booking.length; i++) { + let order = booking[i]; + + TotalAmountPaid += parseInt(order.amount_paid.replace(/,/g, ''), 10) + amount_due += parseInt(order.amount_due.replace(/,/g, ''), 10) + + } + + console.log("TotalAmountPaid:", TotalAmountPaid); + console.log("amount_due:", amount_due); + + const user_accounts = await UserSupplierAccounts.findOne({ customerId:customerId,supplierId:supplierId }); + if (user_accounts) { + + + await UserSupplierAccounts.findOneAndUpdate({ customerId:customerId,supplierId:supplierId }, { $set: { amount_due: amount_due,amount_paid:TotalAmountPaid,delivered_tankers:delivered_tankers } }); + } + else{ + + UserSupplierData = { + customerId:customerId, + supplierId: supplierId, + amount_due: amount_due, + amount_paid: TotalAmountPaid, + amount_advance: amount_advance, + delivered_tankers:delivered_tankers + }; + + + var user_supplier_accounts = new UserSupplierAccounts(UserSupplierData); + + checkFormEncoding = isUserFormUrlEncoded(req); + if (checkFormEncoding.isUserFormUrlEncoded) { + + user_supplier_accounts.customerId = customerId + user_supplier_accounts.supplierId = supplierId; + user_supplier_accounts.amount_due = amount_due; + user_supplier_accounts.amount_paid = TotalAmountPaid; + user_supplier_accounts.amount_advance = amount_advance; + user_supplier_accounts.delivered_tankers = delivered_tankers; + + } + + const inserteduser_supplier_accounts_data = await user_supplier_accounts.save(); + + + } + reply.send({ status_code: 200, count: booking.length, data: booking,TotalAmountPaid:TotalAmountPaid,amount_due:amount_due }); + + } catch (err) { + throw boom.boomify(err); + } +}; + diff --git a/src/models/tankers.js b/src/models/tankers.js index 30599e9b..830773ed 100644 --- a/src/models/tankers.js +++ b/src/models/tankers.js @@ -43,7 +43,7 @@ const tankersbookingSchema = new mongoose.Schema({ typeofwater: { type: String, default: null }, capacity: { type: String, default: null }, address: { type: String, default: null }, - price: { type: String, default: "750" }, + actual_price: { type: String, default: "750" }, payment_status : { type: String, default: "due" }, orderStatus: { type: String, default: "pending" }, delivery_agent : { type: String, default: "null" }, @@ -56,6 +56,8 @@ const tankersbookingSchema = new mongoose.Schema({ quantityDelivered: { type: String, default: null}, amount_paid: { type: String, default: null }, amount_due: { type: String, default: null }, + distrubance_price: { type: String, default: "none" }, + amount_difference: { type: String, default: "none" }, payment_mode: { type: String, default: null }, remarks : { type: String, default: null }, customerPhone : { type: String, default: null }, @@ -89,6 +91,15 @@ const GovtPipeLineSchema = new mongoose.Schema({ }); +const UserSupplierAccountsSchema = new mongoose.Schema({ + customerId: { type: String, default: null }, + supplierId: { type: String, default: null }, + amount_due: { type: String, default: null }, + amount_paid:{ type: String, default: null }, + amount_advance: { type: String, default: null }, + delivered_tankers: { type: String, default: null }, + +}); @@ -96,9 +107,11 @@ const Tanker = mongoose.model("Tanker", tankersSchema); const Tankerbooking = mongoose.model("Tankerbooking", tankersbookingSchema); const Bore = mongoose.model("Bore", boreSchema); const GovtPipeLine = mongoose.model("GovtPipeLine", GovtPipeLineSchema); +const UserSupplierAccounts = mongoose.model("UserSupplierAccounts", UserSupplierAccountsSchema); + // Exporting our model objects module.exports = { - Tanker, Tankerbooking,Bore,GovtPipeLine + Tanker, Tankerbooking,Bore,GovtPipeLine,UserSupplierAccounts } diff --git a/src/routes/tankersRoute.js b/src/routes/tankersRoute.js index 80b1bcc1..a8ee099b 100644 --- a/src/routes/tankersRoute.js +++ b/src/routes/tankersRoute.js @@ -731,6 +731,78 @@ module.exports = function (fastify, opts, next) { handler: tankersController.deleteBookingInfo, }); + + fastify.route({ + method: "PUT", + url: "/api/distrubanceStatus/:bookingid", + schema: { + tags: ["Tanker-Data"], + summary: "This is for disrtubance status", + params: { + required: ["bookingid"], + type: "object", + properties: { + bookingid: { + type: "string", + description: "bookingid", + }, + }, + }, + body: { + type: "object", + // required: ['phone'], + properties: { + + action: { type: "string" }, + + }, + }, + security: [ + { + basicAuth: [], + }, + ], + }, + preHandler: fastify.auth([fastify.authenticate]), + handler: tankersController.distrubanceStatus, + }); + + + fastify.route({ + method: "PUT", + url: "/api/UserSupplierAccounts/:customerId", + schema: { + tags: ["Tanker-Data"], + summary: "This is for user and supplier accounts", + params: { + required: ["customerId"], + type: "object", + properties: { + customerId: { + type: "string", + description: "customerId", + }, + }, + }, + body: { + type: "object", + // required: ['phone'], + properties: { + + supplierId: { type: "string" }, + + }, + }, + security: [ + { + basicAuth: [], + }, + ], + }, + preHandler: fastify.auth([fastify.authenticate]), + handler: tankersController.UserSupplierAccounts, + }); + next(); }