feat: Simplify proposals events and add warehouse events

This commit is contained in:
Josepablo C
2025-03-20 00:39:15 -06:00
parent 5ba802498f
commit 1d3c9bd443
9 changed files with 207 additions and 76 deletions

View File

@@ -0,0 +1,90 @@
'user strict';
const { getModel } = require( '../../../Models' );
const onAcceptedEvents = require('./onAccepted');
const branchesModel = getModel('branches')
const vehiclesModel = getModel('vehicles');
const proposalsModel = getModel('proposals');
const loadsModel = getModel('loads');
const usersModel = getModel('users');
const companiesModel = getModel('companies');
const notificationsModel = getModel('notifications');
const productsModel = getModel('products');
/**
* When the proposal is created then the load owner should be notified
*/
async function onProposalCreate( proposal_id ){
const proposal = await proposalsModel.findById( proposal_id );
const load = await loadsModel.findById( proposal.load );
const user = await usersModel.findById( load.posted_by );
const notification = new notificationsModel({
"owner": user.id,
"title": "New proposal",
"description": `${load.shipment_code}`,
"tag":"new_proposal",
"deleted":false
});
await notification.save();
}
/**
* When a proposal is removed from the load, it is considered as rejected
*/
async function onProposalRejected( proposal_id ){
const proposal = await proposalsModel.findById( proposal_id );
/// Update Proposal:
/// Remove shipper
await proposalsModel.findByIdAndUpdate( id , {
shipper : null
} );
/// Update Load:
/// Remove carrier, driver and vehicle
await loadsModel.findByIdAndUpdate( proposal.load, {
carrier : null,
driver : null,
vehicle : null,
bidder : null
} );
}
/**
* When a proposal is accepted by the shipper
*/
async function onProposalAccepted( proposal_id ){
const proposal = await proposalsModel.findById( proposal_id );
const shipper_user = await usersModel.findById( proposal.accepted_by );
const shipper = await companiesModel.findById( shipper_user.company );
const vehicle = await vehiclesModel.findById( proposal.vehicle );
const load = await loadsModel.findById( proposal.load );
/// Update Proposal:
/// Adding shipper to proposal
await proposalsModel.findByIdAndUpdate( proposal_id , {
shipper : shipper.id
} );
/// Update Load:
/// Add carrier, driver and vehicle
await loadsModel.findByIdAndUpdate( proposal.load, {
carrier : proposal.carrier,
driver : vehicle.driver,
vehicle : proposal.vehicle,
bidder : proposal.bidder // Who created the proposal (carrier user)
} );
const carrier = await companiesModel.findById( load.carrier );
const product = await productsModel.findById( load.product );
const driver = await usersModel.findById( load.driver );
const warehouse = await branchesModel.findById( load.shipper_warehouse );
await onAcceptedEvents.sendNotification( proposal, load );
await onAcceptedEvents.sendWarehouseEmail( warehouse, load, carrier, product, vehicle, driver );
}
module.exports = { onProposalCreate, onProposalRejected, onProposalAccepted };