Bhaskar 1 week ago
commit 78d107e39f

@ -2131,3 +2131,74 @@ exports.updateadvanceForSupplier = async (req, reply) => {
throw boom.boomify(err);
}
};
exports.splitBookingForSupplier = async (req, reply) => {
try {
const { id } = req.params;
const { splits } = req.body;
if (!Array.isArray(splits) || splits.length === 0) {
return reply.code(400).send({ status_code: 400, message: "splits array is required" });
}
// 1) Find the 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 with the first split
const first = splits[0];
existing.capacity = `${first.capacity} L`;
existing.quantity = "1";
existing.total_required_capacity = first.capacity;
if (first.date) existing.date = first.date;
if (first.time) existing.time = first.time;
if (first.quoted_amount) {
existing.requested_suppliers[0].quoted_amount = first.quoted_amount;
}
await existing.save();
// 3) Create new bookings for remaining splits
const newBookings = [];
for (let i = 1; i < splits.length; i++) {
const s = splits[i];
const newBooking = new RequestedBooking({
status: "pending",
customerId: existing.customerId,
type_of_water: existing.type_of_water,
capacity: `${s.capacity} L`,
quantity: "1",
total_required_capacity: s.capacity,
date: s.date || existing.date,
time: s.time || existing.time,
requested_suppliers: [
{
time: new Date().toISOString().slice(0, 16).replace("T", " "),
status: "pending",
supplierId: existing.requested_suppliers[0].supplierId,
quoted_amount: s.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: `${splits.length} 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,7 @@ fastify.route({
});
fastify.route({
fastify.route({
method: 'PUT',
url: '/api/request-advance-amount/:_id/supplier/advance',
schema: {
@ -1473,7 +1473,7 @@ fastify.route({
properties: {
supplierId: { type: 'string' },
advance_paid: { type: 'number' }, // ✅ fixed
advance_ref_number: { type: 'string' }
advance_ref_number: { type: 'string' }
},
},
@ -1494,5 +1494,92 @@ fastify.route({
handler: userController.updateadvanceForSupplier,
});
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: 'POST',
url: '/api/request-advance-amount/:id/supplier/split',
schema: {
description: 'Split a booking into multiple entries with individual capacity, date, time, and quoted_amount',
tags: ['User'],
summary: 'Split booking into multiple entries',
params: {
type: 'object',
properties: {
id: { type: 'string', description: 'Booking _id' },
},
required: ['id'],
},
body: {
type: 'object',
properties: {
splits: {
type: 'array',
items: {
type: 'object',
properties: {
capacity: { type: 'number' },
date: { type: 'string' },
time: { type: 'string' },
quoted_amount: { type: 'number' }
},
required: ['capacity']
}
}
},
required: ['splits'],
},
response: {
200: { type: 'object' },
400: { type: 'object' },
404: { type: 'object' },
},
},
handler: userController.splitBookingForSupplier,
});
next();
};

Loading…
Cancel
Save