ashok 1 week ago
commit 9b66c228f6

@ -2136,43 +2136,49 @@ exports.updateadvanceForSupplier = async (req, reply) => {
exports.splitBookingForSupplier = async (req, reply) => {
try {
const { id } = req.params;
const { capacity, quantity, date, time, quoted_amount } = req.body;
const { splits } = req.body;
// 1) Find existing booking
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
existing.capacity = `${capacity} L`;
// 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 = capacity;
if (date) existing.date = date;
if (time) existing.time = time;
if (quoted_amount) {
existing.requested_suppliers[0].quoted_amount = quoted_amount;
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 the rest
// 3) Create new bookings for remaining splits
const newBookings = [];
for (let i = 1; i < quantity; i++) {
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: `${capacity} L`,
capacity: `${s.capacity} L`,
quantity: "1",
total_required_capacity: capacity,
date: date || existing.date,
time: time || existing.time,
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: quoted_amount || existing.requested_suppliers[0].quoted_amount,
quoted_amount: s.quoted_amount || existing.requested_suppliers[0].quoted_amount,
},
],
});
@ -2185,7 +2191,7 @@ exports.splitBookingForSupplier = async (req, reply) => {
return reply.code(200).send({
status_code: 200,
message: `${quantity} booking(s) created/updated successfully`,
message: `${splits.length} booking(s) created/updated successfully`,
updated: existing,
newEntries: newBookings,
});
@ -2195,3 +2201,4 @@ exports.splitBookingForSupplier = async (req, reply) => {
}
};

@ -1540,9 +1540,9 @@ 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',
description: 'Split a booking into multiple entries with individual capacity, date, time, and quoted_amount',
tags: ['User'],
summary: 'Split booking by capacity and quantity',
summary: 'Split booking into multiple entries',
params: {
type: 'object',
properties: {
@ -1553,13 +1553,21 @@ fastify.route({
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
splits: {
type: 'array',
items: {
type: 'object',
properties: {
capacity: { type: 'number' },
date: { type: 'string' },
time: { type: 'string' },
quoted_amount: { type: 'number' }
},
required: ['capacity', 'quantity'],
required: ['capacity']
}
}
},
required: ['splits'],
},
response: {
200: { type: 'object' },
@ -1572,5 +1580,6 @@ fastify.route({
next();
};

Loading…
Cancel
Save