feat(loads::events): Adding load state events

This commit is contained in:
Josepablo C
2025-07-22 22:51:26 -06:00
parent b5e9ced8ad
commit f2d8eb43bd
9 changed files with 193 additions and 9 deletions

View File

@@ -16,7 +16,7 @@
} }
}, },
"version" : { "version" : {
"version" : "1.5.5", "version" : "1.5.6",
"name": "ETA Beta", "name": "ETA Beta",
"date":"22/07/2025" "date":"22/07/2025"
}, },

View File

@@ -1,9 +1,13 @@
'user strict'; 'user strict';
const { getModel } = require( '../../../Models' ); const { getModel } = require( '../../../Models' );
const ObserversEvents = require('../Observers');
const loadsModel = getModel('loads'); const loadsModel = getModel('loads');
const vehiclesModel = getModel('vehicles'); const vehiclesModel = getModel('vehicles');
const proposalsModel = getModel('proposals'); const proposalsModel = getModel('proposals');
const productsModel = getModel('products');
const companiesModel = getModel('companies');
const usersModel = getModel('users');
/** /**
* When a load is delivered, notify all involved parties * When a load is delivered, notify all involved parties
@@ -61,6 +65,72 @@ async function onDelivered( userId, elementId ){
} }
); );
} }
const carrier = await companiesModel.findById( load.carrier ) || {};
const product = await productsModel.findById( load.product ) || {};
const vehicle = await vehiclesModel.findById( load.vehicle ) || {};
const driver = await usersModel.findById( load.driver ) || {};
await ObserversEvents.onLoadDelivered(
ObserversEvents.NOTIFICATION_TYPE.CLIENT,
{ load, carrier, product, vehicle, driver }
);
} }
module.exports = { onDelivered }; /**
* When a load is delivered, notify all involved parties
* @param {*} userId -> Responsible of the change
* @param {*} elementId -> Element Affected
*/
async function onLoading( userId, elementId ){
const load = await loadsModel.findById( elementId );
const carrier = await companiesModel.findById( load.carrier ) || {};
const product = await productsModel.findById( load.product ) || {};
const vehicle = await vehiclesModel.findById( load.vehicle ) || {};
const driver = await usersModel.findById( load.driver ) || {};
await ObserversEvents.onLoadLoading(
ObserversEvents.NOTIFICATION_TYPE.CLIENT,
{ load, carrier, product, vehicle, driver }
);
}
/**
* When a load is delivered, notify all involved parties
* @param {*} userId -> Responsible of the change
* @param {*} elementId -> Element Affected
*/
async function onTransit( userId, elementId ){
const load = await loadsModel.findById( elementId );
const carrier = await companiesModel.findById( load.carrier ) || {};
const product = await productsModel.findById( load.product ) || {};
const vehicle = await vehiclesModel.findById( load.vehicle ) || {};
const driver = await usersModel.findById( load.driver ) || {};
await ObserversEvents.onLoadInTransit(
ObserversEvents.NOTIFICATION_TYPE.CLIENT,
{ load, carrier, product, vehicle, driver }
);
}
/**
* When a load is delivered, notify all involved parties
* @param {*} userId -> Responsible of the change
* @param {*} elementId -> Element Affected
*/
async function onDownloading( userId, elementId ){
const load = await loadsModel.findById( elementId );
const carrier = await companiesModel.findById( load.carrier ) || {};
const product = await productsModel.findById( load.product ) || {};
const vehicle = await vehiclesModel.findById( load.vehicle ) || {};
const driver = await usersModel.findById( load.driver ) || {};
await ObserversEvents.onLoadDownload(
ObserversEvents.NOTIFICATION_TYPE.CLIENT,
{ load, carrier, product, vehicle, driver }
);
}
module.exports = { onDelivered, onLoading, onTransit, onDownloading };

View File

@@ -37,4 +37,28 @@ async function onProposalVehicleChanged( load, carrier, product, vehicle, driver
await sendEmailEvent( EMAIL_EVENTS.CLIENT_PROPOSAL_VEHICLE_CHANGED, load, carrier, product, vehicle, driver ); await sendEmailEvent( EMAIL_EVENTS.CLIENT_PROPOSAL_VEHICLE_CHANGED, load, carrier, product, vehicle, driver );
} }
module.exports = { onProposalAccepted, onProposalDriverChanged, onProposalVehicleChanged }; async function onLoadLoading(){
await sendEmailEvent( EMAIL_EVENTS.CLIENT_LOAD_ON_LOADING, load, carrier, product, vehicle, driver );
}
async function onLoadInTransit(){
await sendEmailEvent( EMAIL_EVENTS.CLIENT_LOAD_IN_TRANSIT, load, carrier, product, vehicle, driver );
}
async function onLoadDownload(){
await sendEmailEvent( EMAIL_EVENTS.CLIENT_LOAD_ON_DOWNLOAD, load, carrier, product, vehicle, driver );
}
async function onLoadDelivered(){
await sendEmailEvent( EMAIL_EVENTS.CLIENT_LOAD_DELIVERED, load, carrier, product, vehicle, driver );
}
module.exports = {
onProposalAccepted,
onProposalDriverChanged,
onProposalVehicleChanged,
onLoadLoading,
onLoadInTransit,
onLoadDownload,
onLoadDelivered,
};

View File

@@ -37,4 +37,8 @@ async function onProposalVehicleChanged( warehouse, load, carrier, product, vehi
await sendEmailEvent( EMAIL_EVENTS.WAREHOUSE_PROPOSAL_VEHICLE_CHANGED, warehouse, load, carrier, product, vehicle, driver ); await sendEmailEvent( EMAIL_EVENTS.WAREHOUSE_PROPOSAL_VEHICLE_CHANGED, warehouse, load, carrier, product, vehicle, driver );
} }
module.exports = { onProposalAccepted, onProposalDriverChanged, onProposalVehicleChanged }; module.exports = {
onProposalAccepted,
onProposalDriverChanged,
onProposalVehicleChanged
};

View File

@@ -56,4 +56,62 @@ async function onProposalVehicleChanged( notification_type, content ){
} }
} }
module.exports = { NOTIFICATION_TYPE, onProposalAccepted, onProposalDriverChanged, onProposalVehicleChanged };
async function onLoadLoading( notification_type, content ){
const { load, carrier, product, vehicle, driver } = content;
switch ( notification_type ){
case NOTIFICATION_TYPE.CLIENT:
case NOTIFICATION_TYPE.BOTH:
return await ClientEvents.onLoadLoading( load, carrier, product, vehicle, driver );
default:
return;
}
}
async function onLoadInTransit( notification_type, content ){
const { load, carrier, product, vehicle, driver } = content;
switch ( notification_type ){
case NOTIFICATION_TYPE.CLIENT:
case NOTIFICATION_TYPE.BOTH:
return await ClientEvents.onLoadInTransit( load, carrier, product, vehicle, driver );
default:
return;
}
}
async function onLoadDownload( notification_type, content ){
const { load, carrier, product, vehicle, driver } = content;
switch ( notification_type ){
case NOTIFICATION_TYPE.CLIENT:
case NOTIFICATION_TYPE.BOTH:
return await ClientEvents.onLoadDownload( load, carrier, onLoadOnDownload, vehicle, driver );
default:
return;
}
}
async function onLoadDelivered( notification_type, content ){
const { load, carrier, product, vehicle, driver } = content;
switch ( notification_type ){
case NOTIFICATION_TYPE.CLIENT:
case NOTIFICATION_TYPE.BOTH:
return await ClientEvents.onLoadDelivered( load, carrier, product, vehicle, driver );
default:
return;
}
}
module.exports = {
NOTIFICATION_TYPE,
onProposalAccepted,
onProposalDriverChanged,
onProposalVehicleChanged,
onLoadLoading,
onLoadInTransit,
onLoadDownload,
onLoadDelivered,
};

View File

@@ -4,7 +4,7 @@ const { getModel } = require( '../../../Models' );
const onAcceptedEvents = require('./onAccepted'); const onAcceptedEvents = require('./onAccepted');
const onVehicleChanged = require('./onVehicleChanged'); const onVehicleChanged = require('./onVehicleChanged');
const branchesModel = getModel('branches') const branchesModel = getModel('branches');
const vehiclesModel = getModel('vehicles'); const vehiclesModel = getModel('vehicles');
const proposalsModel = getModel('proposals'); const proposalsModel = getModel('proposals');
const loadsModel = getModel('loads'); const loadsModel = getModel('loads');

View File

@@ -6,6 +6,9 @@ const usersModel = getModel('users');
const vehiclesModel = getModel('vehicles'); const vehiclesModel = getModel('vehicles');
const proposalsModel = getModel('proposals'); const proposalsModel = getModel('proposals');
const loadsModel = getModel('loads'); const loadsModel = getModel('loads');
const productsModel = getModel('products');
const companiesModel = getModel('companies');
const branchesModel = getModel('branches');
/** /**
* When a vehicle's driver changes, notify all involved parties * When a vehicle's driver changes, notify all involved parties

View File

@@ -8,8 +8,20 @@ const LoadsEvents = require( './Events/Loads' );
* @param {*} newData -> New Data Applied * @param {*} newData -> New Data Applied
*/ */
async function onPatchEvent( userId, elementId, newData ){ async function onPatchEvent( userId, elementId, newData ){
if( newData.load_status === "Delivered" ){ const { load_status } = newData;
LoadsEvents.onDelivered( userId, elementId ); if( load_status ){
switch (load_status){
case "Delivered":
return await LoadsEvents.onDelivered( userId, elementId );
case "Loading":
return await LoadsEvents.onLoading( userId, elementId );
case "Transit":
return await LoadsEvents.onTransit( userId, elementId );
case "Downloading":
return await LoadsEvents.onDownloading( userId, elementId );
default:
return;
}
} }
} }

View File

@@ -108,31 +108,44 @@ async function WarehouseProposalVehicleChanged( receiver, content ){
async function ClientProposalAccepted( receiver, content ){ async function ClientProposalAccepted( receiver, content ){
console.log("ClientProposalAccepted email event not yet implemented"); console.log("ClientProposalAccepted email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientProposalDriverChanged( receiver, content ){ async function ClientProposalDriverChanged( receiver, content ){
console.log("ClientProposalDriverChanged email event not yet implemented"); console.log("ClientProposalDriverChanged email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientProposalVehicleChanged( receiver, content ){ async function ClientProposalVehicleChanged( receiver, content ){
console.log("ClientProposalVehicleChanged email event not yet implemented"); console.log("ClientProposalVehicleChanged email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientLoadOnLoading( receiver, content ){ async function ClientLoadOnLoading( receiver, content ){
console.log("ClientLoadOnLoading email event not yet implemented"); console.log("ClientLoadOnLoading email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientLoadInTransit( receiver, content ){ async function ClientLoadInTransit( receiver, content ){
console.log("ClientLoadInTransit email event not yet implemented"); console.log("ClientLoadInTransit email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientLoadOnDownload( receiver, content ){ async function ClientLoadOnDownload( receiver, content ){
console.log("ClientLoadOnDownload email event not yet implemented"); console.log("ClientLoadOnDownload email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
async function ClientLoadDelivered( receiver, content ){ async function ClientLoadDelivered( receiver, content ){
console.log("ClientLoadDelivered email event not yet implemented"); console.log("ClientLoadDelivered email event not yet implemented");
console.log(`receiver: ${receiver}`);
console.log( content );
} }
module.exports = { module.exports = {