ashok 1 week ago
commit 3be3f1e0e3

@ -2131,3 +2131,67 @@ exports.updateadvanceForSupplier = async (req, reply) => {
throw boom.boomify(err);
}
};
exports.splitBookingForSupplier = async (req, reply) => {
try {
const { id } = req.params;
const { capacity, quantity, date, time, quoted_amount } = req.body;
// 1) Find existing booking
const existing = await RequestedBooking.findById(id);
if (!existing) {
return reply.code(404).send({ status_code: 404, message: "Booking not found" });
}
// 2) Update the original booking
existing.capacity = `${capacity} L`;
existing.quantity = "1";
existing.total_required_capacity = capacity;
if (date) existing.date = date;
if (time) existing.time = time;
if (quoted_amount) {
existing.requested_suppliers[0].quoted_amount = quoted_amount;
}
await existing.save();
// 3) Create new bookings for the rest
const newBookings = [];
for (let i = 1; i < quantity; i++) {
const newBooking = new RequestedBooking({
status: "pending",
customerId: existing.customerId,
type_of_water: existing.type_of_water,
capacity: `${capacity} L`,
quantity: "1",
total_required_capacity: capacity,
date: date || existing.date,
time: time || existing.time,
requested_suppliers: [
{
time: new Date().toISOString().slice(0, 16).replace("T", " "),
status: "pending",
supplierId: existing.requested_suppliers[0].supplierId,
quoted_amount: quoted_amount || existing.requested_suppliers[0].quoted_amount,
},
],
});
newBookings.push(newBooking);
}
if (newBookings.length > 0) {
await RequestedBooking.insertMany(newBookings);
}
return reply.code(200).send({
status_code: 200,
message: `${quantity} booking(s) created/updated successfully`,
updated: existing,
newEntries: newBookings,
});
} catch (err) {
console.error("splitBookingForSupplier error:", err);
return reply.code(500).send({ status_code: 500, message: "Internal Server Error" });
}
};

@ -1412,7 +1412,7 @@ fastify.route({
handler: userController.updateQuotedAmountForSupplier,
});
fastify.route({
fastify.route({
method: 'PUT',
url: '/api/request-booking-status/:_id/supplier/quotestatus',
schema: {
@ -1453,7 +1453,48 @@ fastify.route({
});
fastify.route({
fastify.route({
method: 'PUT',
url: '/api/request-advance-amount/:_id/supplier/advance',
schema: {
description:
'Update adavance with reference number for particular supplier by user',
tags: ['User'],
summary: 'Update adavance with reference number for particular supplier by user',
params: {
type: 'object',
properties: {
_id: { type: 'string', description: 'Booking _id' },
},
required: ['_id'],
},
body: {
type: 'object',
properties: {
supplierId: { type: 'string' },
advance_paid: { type: 'number' }, // ✅ fixed
advance_ref_number: { type: 'string' }
},
},
response: {
200: {
type: 'object',
},
400: { type: 'object' },
404: { type: 'object' },
},
security: [
{
basicAuth: [],
},
],
},
// preHandler: fastify.auth([fastify.authenticate]), // enable if needed
handler: userController.updateadvanceForSupplier,
});
fastify.route({
method: 'PUT',
url: '/api/request-advance-amount/:_id/supplier/advance',
schema: {
@ -1473,7 +1514,7 @@ fastify.route({
properties: {
supplierId: { type: 'string' },
advance_paid: { type: 'number' }, // ✅ fixed
advance_ref_number: { type: 'string' }
advance_ref_number: { type: 'string' }
},
},
@ -1494,5 +1535,42 @@ fastify.route({
handler: userController.updateadvanceForSupplier,
});
fastify.route({
method: 'POST',
url: '/api/request-advance-amount/:id/supplier/split',
schema: {
description: 'Split a booking into multiple entries based on supplier-edited capacity & quantity',
tags: ['User'],
summary: 'Split booking by capacity and quantity',
params: {
type: 'object',
properties: {
id: { type: 'string', description: 'Booking _id' },
},
required: ['id'],
},
body: {
type: 'object',
properties: {
capacity: { type: 'number' }, // supplier wants capacity per booking
quantity: { type: 'number' }, // number of bookings
date: { type: 'string' }, // optional new date
time: { type: 'string' }, // optional new time
quoted_amount: { type: 'number' } // optional new quoted amount
},
required: ['capacity', 'quantity'],
},
response: {
200: { type: 'object' },
400: { type: 'object' },
404: { type: 'object' },
},
},
handler: userController.splitBookingForSupplier,
});
next();
};

Loading…
Cancel
Save