Actualización CRUD módulo requisición de combustible y adición de validaciones
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
import { ObjectId } from "mongoose";
|
||||
import { Types } from "mongoose";
|
||||
|
||||
export interface IFuelRequest {
|
||||
|
||||
_id?: ObjectId;
|
||||
_id?: Types.ObjectId;
|
||||
|
||||
requestNumber: string;
|
||||
|
||||
@ -14,13 +14,13 @@ export interface IFuelRequest {
|
||||
|
||||
routeId: number;
|
||||
|
||||
fuelPumpId: ObjectId;
|
||||
fuelPumpId: Types.ObjectId;
|
||||
|
||||
fuelTypeId: ObjectId;
|
||||
fuelTypeId: Types.ObjectId;
|
||||
|
||||
createdBy: ObjectId;
|
||||
createdBy: Types.ObjectId;
|
||||
|
||||
authorizedBy?: ObjectId;
|
||||
authorizedBy?: Types.ObjectId;
|
||||
|
||||
gallonQuantity: number;
|
||||
|
||||
@ -34,7 +34,7 @@ export interface IFuelRequest {
|
||||
|
||||
distanceTraveled?: number;
|
||||
|
||||
pumpReading?: ObjectId;
|
||||
pumpReading?: Types.ObjectId;
|
||||
|
||||
pumpDifference?: number;
|
||||
|
||||
|
||||
@ -30,12 +30,14 @@ const fuelRequestSchema = new mongoose.Schema({
|
||||
|
||||
fuelPumpId:{
|
||||
type:mongoose.Schema.Types.ObjectId,
|
||||
ref:"FuelPump"
|
||||
ref:"FuelPump",
|
||||
required:true
|
||||
},
|
||||
|
||||
fuelTypeId:{
|
||||
type:mongoose.Schema.Types.ObjectId,
|
||||
ref:"FuelType"
|
||||
ref:"FuelType",
|
||||
required:true
|
||||
},
|
||||
|
||||
createdBy:{
|
||||
|
||||
@ -40,6 +40,16 @@ export class FuelRequestService {
|
||||
async create (
|
||||
data:IFuelRequest
|
||||
){
|
||||
///Validar kilometraje
|
||||
if(data.currentMileage < data.previousMileage) {
|
||||
throw new Error ("El kilometraje no puede ser menor que el anterior");
|
||||
}
|
||||
|
||||
//Validar que los galones sean mayor a 0
|
||||
if(data.gallonQuantity <= 0){
|
||||
throw new Error ("La cantidad de galones debe ser mayor que 0");
|
||||
}
|
||||
|
||||
//Generar número automático
|
||||
data.requestNumber = generateRequestNumber();
|
||||
|
||||
@ -56,7 +66,14 @@ export class FuelRequestService {
|
||||
const request = new fuelRequestModel(data);
|
||||
|
||||
//Guardar en DB
|
||||
return await request.save();
|
||||
const fuelRequest = await request.save();
|
||||
|
||||
//Validaciones automáticas
|
||||
await this.detectAnomalies(
|
||||
fuelRequest
|
||||
);
|
||||
|
||||
return fuelRequest;
|
||||
|
||||
}
|
||||
|
||||
@ -64,33 +81,45 @@ export class FuelRequestService {
|
||||
id:string,
|
||||
data:Partial<IFuelRequest>
|
||||
){
|
||||
//Recalcular distancia
|
||||
if(data.currentMileage !== undefined &&
|
||||
data.previousMileage !== undefined
|
||||
){
|
||||
data.distanceTraveled =
|
||||
data.currentMileage -
|
||||
data.previousMileage;
|
||||
//Buscar la requisición actual
|
||||
const request = await fuelRequestModel.findById(id);
|
||||
|
||||
if(!request){
|
||||
return null;
|
||||
}
|
||||
|
||||
//Recalcular monto
|
||||
if(
|
||||
data.gallonQuantity !== undefined &&
|
||||
data.pricePerGallon !== undefined
|
||||
){
|
||||
data.totalAmount =
|
||||
data.gallonQuantity *
|
||||
data.pricePerGallon;
|
||||
const previousMileage = data.previousMileage ?? request.previousMileage;
|
||||
|
||||
const currentMileage = data.currentMileage ?? request.currentMileage;
|
||||
|
||||
const gallonQuantity = data.gallonQuantity ?? request.gallonQuantity;
|
||||
|
||||
const pricePerGallon = data.pricePerGallon ?? request.pricePerGallon;
|
||||
|
||||
//Recalcular distancia recorrida
|
||||
data.distanceTraveled = currentMileage - previousMileage;
|
||||
|
||||
//Validar kilometraje
|
||||
|
||||
if(data.distanceTraveled < 0){
|
||||
throw new Error("El kilometraje actual no puede ser menor que el anterior");
|
||||
}
|
||||
|
||||
return await fuelRequestModel
|
||||
.findByIdAndUpdate(
|
||||
//Recalcular monto total
|
||||
|
||||
data.totalAmount = gallonQuantity * pricePerGallon;
|
||||
|
||||
//Actualizar la requisición
|
||||
const updateRequest = await fuelRequestModel.findByIdAndUpdate(
|
||||
id,
|
||||
data,
|
||||
{
|
||||
new:true
|
||||
}
|
||||
);
|
||||
|
||||
return updateRequest;
|
||||
|
||||
}
|
||||
|
||||
//Eliminar requisición
|
||||
@ -198,7 +227,7 @@ export class FuelRequestService {
|
||||
data:any
|
||||
){
|
||||
const vehicleConfig = await vehiclesConfigModel.findOne({
|
||||
vehicleid:data.vehicleId
|
||||
vehicleId:data.vehicleId
|
||||
});
|
||||
|
||||
//Sino existe configuración no validar
|
||||
@ -210,12 +239,12 @@ export class FuelRequestService {
|
||||
|
||||
if(
|
||||
data.gallonQuantity >
|
||||
vehicleConfig.tankcapacity
|
||||
vehicleConfig.tankCapacity
|
||||
){
|
||||
await this.createAnomaly(
|
||||
data,
|
||||
"CONSUMO ELEVADO",
|
||||
`Se solicitaron ${data.gallonQuantity} galones, pero la capacidad del tanque es de ${vehicleConfig.tankcapacity} galones.`
|
||||
`Se solicitaron ${data.gallonQuantity} galones, pero la capacidad del tanque es de ${vehicleConfig.tankCapacity} galones.`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user