'user strict'; const { getModel } = require( '../../../Models' ); const loadsModel = getModel('loads'); const vehiclesModel = getModel('vehicles'); const proposalsModel = getModel('proposals'); /** * When a load is delivered, notify all involved parties * @param {*} userId -> Responsible of the change * @param {*} elementId -> Element Affected */ async function onDelivered( userId, elementId ){ const load = await loadsModel.findById( elementId ); const proposal_list = await proposalsModel.find({ load: elementId, is_accepted: true, is_completed: false }); const vehicle_list = await vehiclesModel.find({ active_load: elementId }); const current_date = new Date(); /// Update Load: Remove vehicle and driver reference for data safety. await loadsModel.findByIdAndUpdate( elementId, { driver: null, vehicle: null, status: "Closed", delivered_date: current_date, load_status_updated: current_date, }); /// Update proposals related to this load. Ideally, just one. // remove vehicle for data safety. for( const proposal of proposal_list ){ await proposalsModel.findByIdAndUpdate( proposal.id, { is_completed : true, vehicle : null, } ); } /// Update vehicles related to this load. Ideally, just one. for( const vehicle of vehicle_list ){ await vehiclesModel.findByIdAndUpdate( vehicle.id, { active_load: null, load_shipper: null, status: "Free" } ); } } module.exports = { onDelivered };