|
|
|
@ -249,76 +249,49 @@ exports.loginDeliveryBoy = async (req) => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.acceptRequestedBooking = async (req, reply) => {
|
|
|
|
|
const { supplierId } = req.params;
|
|
|
|
|
const { action, _id } = req.body;
|
|
|
|
|
|
|
|
|
|
if (action !== 'accept') {
|
|
|
|
|
return reply.code(400).send({ message: "Invalid action. Only 'accept' is allowed." });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const mongoose = require('mongoose');
|
|
|
|
|
|
|
|
|
|
exports.respondToRequestedBooking = async (req, reply) => {
|
|
|
|
|
const { _id } = req.params;
|
|
|
|
|
const { action, supplierId } = req.body;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const requestedBooking = await RequestedBooking.findOne({
|
|
|
|
|
_id,
|
|
|
|
|
'requested_suppliers.supplierId': supplierId,
|
|
|
|
|
status: 'pending'
|
|
|
|
|
});
|
|
|
|
|
if (!mongoose.Types.ObjectId.isValid(_id)) {
|
|
|
|
|
return reply.code(400).send({ message: "Invalid requested booking ID" });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!requestedBooking) {
|
|
|
|
|
return reply.code(404).send({ message: "No matching pending request for given ID and supplier" });
|
|
|
|
|
if (!["accept", "reject"].includes(action)) {
|
|
|
|
|
return reply.code(400).send({ message: "Action must be 'accept' or 'reject'" });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
requestedBooking.status = 'accepted';
|
|
|
|
|
await requestedBooking.save();
|
|
|
|
|
try {
|
|
|
|
|
const booking = await RequestedBooking.findById(_id);
|
|
|
|
|
|
|
|
|
|
const customer = await User.findOne({ customerId: requestedBooking.customerId }).lean();
|
|
|
|
|
if (!customer) return reply.code(404).send({ message: "Customer not found" });
|
|
|
|
|
if (!booking) {
|
|
|
|
|
return reply.code(404).send({ message: "Requested booking not found" });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const supplier = await Supplier.findOne({ supplierId }).lean();
|
|
|
|
|
if (!supplier) return reply.code(404).send({ message: "Supplier not found" });
|
|
|
|
|
const supplierEntry = booking.requested_suppliers.find(s => s.supplierId === supplierId);
|
|
|
|
|
|
|
|
|
|
const matchedSupplier = requestedBooking.requested_suppliers.find(s => s.supplierId === supplierId);
|
|
|
|
|
if (!matchedSupplier || !matchedSupplier.quoted_amount) {
|
|
|
|
|
return reply.code(400).send({ message: "Quoted amount missing for this supplier" });
|
|
|
|
|
if (!supplierEntry) {
|
|
|
|
|
return reply.code(404).send({ message: "Supplier not found in this booking" });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const newBooking = new Tankerbooking({
|
|
|
|
|
customerId: customer.customerId,
|
|
|
|
|
customerName: customer.profile.firstName,
|
|
|
|
|
customerPhone: customer.phone,
|
|
|
|
|
address: customer.address1,
|
|
|
|
|
latitude: customer.latitude,
|
|
|
|
|
longitude: customer.longitude,
|
|
|
|
|
|
|
|
|
|
supplierId: supplier.supplierId,
|
|
|
|
|
supplierName: supplier.suppliername,
|
|
|
|
|
supplierPhone: supplier.phone,
|
|
|
|
|
supplierAddress: customer.address,
|
|
|
|
|
|
|
|
|
|
type_of_water: requestedBooking.type_of_water,
|
|
|
|
|
capacity: requestedBooking.capacity,
|
|
|
|
|
quantity: requestedBooking.quantity,
|
|
|
|
|
total_required_capacity: requestedBooking.total_required_capacity,
|
|
|
|
|
expectedDateOfDelivery: requestedBooking.date,
|
|
|
|
|
time: requestedBooking.time,
|
|
|
|
|
price: matchedSupplier.quoted_amount,
|
|
|
|
|
|
|
|
|
|
status: 'pending'
|
|
|
|
|
});
|
|
|
|
|
// Update custom_field (status) for that supplier
|
|
|
|
|
supplierEntry.status = action === "accept" ? "accepted_by_supplier" : "rejected_by_supplier";
|
|
|
|
|
|
|
|
|
|
await newBooking.save();
|
|
|
|
|
await booking.save();
|
|
|
|
|
|
|
|
|
|
reply.code(200).send({
|
|
|
|
|
return reply.code(200).send({
|
|
|
|
|
status_code: 200,
|
|
|
|
|
message: "Booking accepted and moved to tanker bookings",
|
|
|
|
|
data: newBooking
|
|
|
|
|
message: `Booking ${action}ed by supplier successfully`,
|
|
|
|
|
data: booking
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err);
|
|
|
|
|
throw boom.internal("Failed to accept booking", err);
|
|
|
|
|
throw boom.internal("Failed to update supplier response", err);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|