changes in splits

master^2
Varun 1 week ago
parent 333cc147f3
commit 17fc8307b0

@ -2136,43 +2136,49 @@ exports.updateadvanceForSupplier = async (req, reply) => {
exports.splitBookingForSupplier = async (req, reply) => { exports.splitBookingForSupplier = async (req, reply) => {
try { try {
const { id } = req.params; 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); const existing = await RequestedBooking.findById(id);
if (!existing) { if (!existing) {
return reply.code(404).send({ status_code: 404, message: "Booking not found" }); return reply.code(404).send({ status_code: 404, message: "Booking not found" });
} }
// 2) Update the original booking // 2) Update the original booking with the first split
existing.capacity = `${capacity} L`; const first = splits[0];
existing.capacity = `${first.capacity} L`;
existing.quantity = "1"; existing.quantity = "1";
existing.total_required_capacity = capacity; existing.total_required_capacity = first.capacity;
if (date) existing.date = date; if (first.date) existing.date = first.date;
if (time) existing.time = time; if (first.time) existing.time = first.time;
if (quoted_amount) { if (first.quoted_amount) {
existing.requested_suppliers[0].quoted_amount = quoted_amount; existing.requested_suppliers[0].quoted_amount = first.quoted_amount;
} }
await existing.save(); await existing.save();
// 3) Create new bookings for the rest // 3) Create new bookings for remaining splits
const newBookings = []; 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({ const newBooking = new RequestedBooking({
status: "pending", status: "pending",
customerId: existing.customerId, customerId: existing.customerId,
type_of_water: existing.type_of_water, type_of_water: existing.type_of_water,
capacity: `${capacity} L`, capacity: `${s.capacity} L`,
quantity: "1", quantity: "1",
total_required_capacity: capacity, total_required_capacity: s.capacity,
date: date || existing.date, date: s.date || existing.date,
time: time || existing.time, time: s.time || existing.time,
requested_suppliers: [ requested_suppliers: [
{ {
time: new Date().toISOString().slice(0, 16).replace("T", " "), time: new Date().toISOString().slice(0, 16).replace("T", " "),
status: "pending", status: "pending",
supplierId: existing.requested_suppliers[0].supplierId, 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({ return reply.code(200).send({
status_code: 200, status_code: 200,
message: `${quantity} booking(s) created/updated successfully`, message: `${splits.length} booking(s) created/updated successfully`,
updated: existing, updated: existing,
newEntries: newBookings, newEntries: newBookings,
}); });
@ -2195,3 +2201,4 @@ exports.splitBookingForSupplier = async (req, reply) => {
} }
}; };

@ -1540,9 +1540,9 @@ fastify.route({
method: 'POST', method: 'POST',
url: '/api/request-advance-amount/:id/supplier/split', url: '/api/request-advance-amount/:id/supplier/split',
schema: { 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'], tags: ['User'],
summary: 'Split booking by capacity and quantity', summary: 'Split booking into multiple entries',
params: { params: {
type: 'object', type: 'object',
properties: { properties: {
@ -1553,13 +1553,21 @@ fastify.route({
body: { body: {
type: 'object', type: 'object',
properties: { properties: {
capacity: { type: 'number' }, // supplier wants capacity per booking splits: {
quantity: { type: 'number' }, // number of bookings type: 'array',
date: { type: 'string' }, // optional new date items: {
time: { type: 'string' }, // optional new time type: 'object',
quoted_amount: { type: 'number' } // optional new quoted amount properties: {
capacity: { type: 'number' },
date: { type: 'string' },
time: { type: 'string' },
quoted_amount: { type: 'number' }
}, },
required: ['capacity', 'quantity'], required: ['capacity']
}
}
},
required: ['splits'],
}, },
response: { response: {
200: { type: 'object' }, 200: { type: 'object' },
@ -1572,5 +1580,6 @@ fastify.route({
next(); next();
}; };

Loading…
Cancel
Save