|
|
@ -1997,3 +1997,58 @@ exports.updateQuotedAmountForSupplier = async (req, reply) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.updatestatusForSupplier = async (req, reply) => {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
const { _id } = req.params;
|
|
|
|
|
|
|
|
const { supplierId, status } = 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 status === 'undefined' || status === null || String(status).trim() === '') {
|
|
|
|
|
|
|
|
return reply.code(400).send({ status_code: 400, message: 'status (body) is required' });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Map short keywords to the stored values
|
|
|
|
|
|
|
|
let statusToSave = String(status).trim().toLowerCase();
|
|
|
|
|
|
|
|
if (statusToSave === 'accept') statusToSave = 'accepted_by_user';
|
|
|
|
|
|
|
|
else if (statusToSave === 'reject') statusToSave = 'rejected_by_user';
|
|
|
|
|
|
|
|
// otherwise keep the original (but normalized) value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Atomic update using positional $ operator
|
|
|
|
|
|
|
|
const filter = { _id, 'requested_suppliers.supplierId': supplierId };
|
|
|
|
|
|
|
|
const update = { $set: { 'requested_suppliers.$.status': statusToSave } };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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: `status updated for supplier ${supplierId}`,
|
|
|
|
|
|
|
|
data: updated,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
|
|
console.error('updatestatusForSupplier error:', err);
|
|
|
|
|
|
|
|
throw boom.boomify(err);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|