diff --git a/backend/src/modules/fuel-requests/fuelRequest.interface.ts b/backend/src/modules/fuel-requests/fuelRequest.interface.ts index 09edab7..cc01fc7 100644 --- a/backend/src/modules/fuel-requests/fuelRequest.interface.ts +++ b/backend/src/modules/fuel-requests/fuelRequest.interface.ts @@ -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; diff --git a/backend/src/modules/fuel-requests/fuelRequest.model.ts b/backend/src/modules/fuel-requests/fuelRequest.model.ts index fd26306..6f55a58 100644 --- a/backend/src/modules/fuel-requests/fuelRequest.model.ts +++ b/backend/src/modules/fuel-requests/fuelRequest.model.ts @@ -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:{ diff --git a/backend/src/modules/fuel-requests/fuelRequest.service.ts b/backend/src/modules/fuel-requests/fuelRequest.service.ts index b2b7420..0812462 100644 --- a/backend/src/modules/fuel-requests/fuelRequest.service.ts +++ b/backend/src/modules/fuel-requests/fuelRequest.service.ts @@ -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 ){ - //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.` ) } }