feat: Simplify proposals events and add warehouse events
This commit is contained in:
90
v1/src/lib/Handlers/Events/Proposals/index.js
Normal file
90
v1/src/lib/Handlers/Events/Proposals/index.js
Normal 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 };
|
||||
29
v1/src/lib/Handlers/Events/Proposals/onAccepted.js
Normal file
29
v1/src/lib/Handlers/Events/Proposals/onAccepted.js
Normal file
@@ -0,0 +1,29 @@
|
||||
'user strict';
|
||||
const { getModel } = require( '../../../Models' );
|
||||
const warehouseEvents = require('../Warehouse');
|
||||
const notificationsModel = getModel('notifications');
|
||||
|
||||
/**
|
||||
* Send a platform notification to the
|
||||
* @param {*} proposal
|
||||
* @param {*} shipper
|
||||
* @param {*} vehicle
|
||||
* @param {*} load
|
||||
*/
|
||||
async function sendNotification( proposal, load ){
|
||||
const notification = new notificationsModel({
|
||||
"owner": proposal.bidder,
|
||||
"title": `Your proposal has been accepted!`,
|
||||
"description": `${load.shipment_code}`,
|
||||
"tag":"accepted_proposal",
|
||||
"deleted":false
|
||||
});
|
||||
|
||||
await notification.save();
|
||||
}
|
||||
|
||||
async function sendWarehouseEmail( warehouse, load, carrier, product, vehicle, driver ){
|
||||
await warehouseEvents.onProposalAccepted( warehouse, load, carrier, product, vehicle, driver );
|
||||
}
|
||||
|
||||
module.exports = { sendNotification, sendWarehouseEmail };
|
||||
36
v1/src/lib/Handlers/Events/Warehouse/index.js
Normal file
36
v1/src/lib/Handlers/Events/Warehouse/index.js
Normal file
@@ -0,0 +1,36 @@
|
||||
'user strict';
|
||||
const { getModel } = require( '../../../Models' );
|
||||
const { emailEvent , EMAIL_EVENTS } = require( '../../MailClient' );
|
||||
|
||||
const usersModel = getModel('users');
|
||||
|
||||
async function onProposalAccepted( warehouse, load, carrier, product, vehicle, driver ){
|
||||
const driver_name = `${driver.first_name} ${driver.last_name}`;
|
||||
|
||||
const list_of_warehouse_responsibles = await usersModel.find(
|
||||
{
|
||||
branch: warehouse.id,
|
||||
job_role: 'warehouse'
|
||||
}
|
||||
);
|
||||
|
||||
for( const entry of list_of_warehouse_responsibles ){
|
||||
warehouse_email = entry.email;
|
||||
emailEvent(
|
||||
EMAIL_EVENTS.WAREHOUSE_DRIVER_ASSIGNED,
|
||||
warehouse_email,
|
||||
{
|
||||
code : load.shipment_code,
|
||||
date : new Date( load.est_loading_date ).toLocaleString("es-MX",{year: 'numeric', month: '2-digit', day: '2-digit'}),
|
||||
company: carrier.company_name,
|
||||
product: product.name,
|
||||
plate: vehicle.circulation_serial_number,
|
||||
truck_type: vehicle.truck_type,
|
||||
driver: driver_name,
|
||||
note: load.notes,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { onProposalAccepted };
|
||||
Reference in New Issue
Block a user