|
|
@ -1937,3 +1937,63 @@ exports.updatePaymentForBooking = async (req, reply) => {
|
|
|
|
throw boom.boomify(err);
|
|
|
|
throw boom.boomify(err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// controllers/recurringRequestedBookingController.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.updateQuotedAmountForSupplier = async (req, reply) => {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
const { _id } = req.params;
|
|
|
|
|
|
|
|
const { supplierId, amount } = req.body;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!_id) {
|
|
|
|
|
|
|
|
return reply.code(400).send({ status_code: 400, message: '_id (param) is required' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!supplierId) {
|
|
|
|
|
|
|
|
return reply.code(400).send({ status_code: 400, message: 'supplierId (body) is required' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof amount === 'undefined' || amount === null || amount === '') {
|
|
|
|
|
|
|
|
return reply.code(400).send({ status_code: 400, message: 'amount (body) is required' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// convert amount to number if possible
|
|
|
|
|
|
|
|
const numericAmount = Number(amount);
|
|
|
|
|
|
|
|
if (Number.isNaN(numericAmount)) {
|
|
|
|
|
|
|
|
return reply.code(400).send({ status_code: 400, message: 'amount must be a valid number' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Atomic update using positional $ operator
|
|
|
|
|
|
|
|
const filter = { _id, 'requested_suppliers.supplierId': supplierId };
|
|
|
|
|
|
|
|
const update = { $set: { 'requested_suppliers.$.quoted_amount': numericAmount } };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const updated = await RequestedBooking.findOneAndUpdate(filter, update, {
|
|
|
|
|
|
|
|
new: true,
|
|
|
|
|
|
|
|
runValidators: true,
|
|
|
|
|
|
|
|
}).lean();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!updated) {
|
|
|
|
|
|
|
|
// either booking _id not found OR supplierId not found inside requested_suppliers
|
|
|
|
|
|
|
|
// let's check which one
|
|
|
|
|
|
|
|
const bookingExists = await RequestedBooking.findById(_id).lean();
|
|
|
|
|
|
|
|
if (!bookingExists) {
|
|
|
|
|
|
|
|
return reply.code(404).send({ status_code: 404, message: `Booking with _id ${_id} not found` });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// booking exists but supplier entry missing
|
|
|
|
|
|
|
|
return reply.code(404).send({
|
|
|
|
|
|
|
|
status_code: 404,
|
|
|
|
|
|
|
|
message: `Supplier ${supplierId} not found in requested_suppliers for booking ${_id}`,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return reply.code(200).send({
|
|
|
|
|
|
|
|
status_code: 200,
|
|
|
|
|
|
|
|
message: `quoted_amount updated for supplier ${supplierId}`,
|
|
|
|
|
|
|
|
data: updated,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
|
|
console.error('updateQuotedAmountForSupplier error:', err);
|
|
|
|
|
|
|
|
throw boom.boomify(err);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|