Actualización CRUD módulo requisición de combustible y adición de validaciones

This commit is contained in:
2026-07-03 15:39:31 +00:00
parent cdd6227423
commit d638e00701
3 changed files with 61 additions and 30 deletions

View File

@ -1,8 +1,8 @@
import { ObjectId } from "mongoose"; import { Types } from "mongoose";
export interface IFuelRequest { export interface IFuelRequest {
_id?: ObjectId; _id?: Types.ObjectId;
requestNumber: string; requestNumber: string;
@ -14,13 +14,13 @@ export interface IFuelRequest {
routeId: number; routeId: number;
fuelPumpId: ObjectId; fuelPumpId: Types.ObjectId;
fuelTypeId: ObjectId; fuelTypeId: Types.ObjectId;
createdBy: ObjectId; createdBy: Types.ObjectId;
authorizedBy?: ObjectId; authorizedBy?: Types.ObjectId;
gallonQuantity: number; gallonQuantity: number;
@ -34,7 +34,7 @@ export interface IFuelRequest {
distanceTraveled?: number; distanceTraveled?: number;
pumpReading?: ObjectId; pumpReading?: Types.ObjectId;
pumpDifference?: number; pumpDifference?: number;

View File

@ -30,12 +30,14 @@ const fuelRequestSchema = new mongoose.Schema({
fuelPumpId:{ fuelPumpId:{
type:mongoose.Schema.Types.ObjectId, type:mongoose.Schema.Types.ObjectId,
ref:"FuelPump" ref:"FuelPump",
required:true
}, },
fuelTypeId:{ fuelTypeId:{
type:mongoose.Schema.Types.ObjectId, type:mongoose.Schema.Types.ObjectId,
ref:"FuelType" ref:"FuelType",
required:true
}, },
createdBy:{ createdBy:{

View File

@ -40,6 +40,16 @@ export class FuelRequestService {
async create ( async create (
data:IFuelRequest 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 //Generar número automático
data.requestNumber = generateRequestNumber(); data.requestNumber = generateRequestNumber();
@ -56,7 +66,14 @@ export class FuelRequestService {
const request = new fuelRequestModel(data); const request = new fuelRequestModel(data);
//Guardar en DB //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, id:string,
data:Partial<IFuelRequest> data:Partial<IFuelRequest>
){ ){
//Recalcular distancia //Buscar la requisición actual
if(data.currentMileage !== undefined && const request = await fuelRequestModel.findById(id);
data.previousMileage !== undefined
){ if(!request){
data.distanceTraveled = return null;
data.currentMileage -
data.previousMileage;
} }
//Recalcular monto const previousMileage = data.previousMileage ?? request.previousMileage;
if(
data.gallonQuantity !== undefined && const currentMileage = data.currentMileage ?? request.currentMileage;
data.pricePerGallon !== undefined
){ const gallonQuantity = data.gallonQuantity ?? request.gallonQuantity;
data.totalAmount =
data.gallonQuantity * const pricePerGallon = data.pricePerGallon ?? request.pricePerGallon;
data.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 //Recalcular monto total
.findByIdAndUpdate(
data.totalAmount = gallonQuantity * pricePerGallon;
//Actualizar la requisición
const updateRequest = await fuelRequestModel.findByIdAndUpdate(
id, id,
data, data,
{ {
new:true new:true
} }
); );
return updateRequest;
} }
//Eliminar requisición //Eliminar requisición
@ -198,7 +227,7 @@ export class FuelRequestService {
data:any data:any
){ ){
const vehicleConfig = await vehiclesConfigModel.findOne({ const vehicleConfig = await vehiclesConfigModel.findOne({
vehicleid:data.vehicleId vehicleId:data.vehicleId
}); });
//Sino existe configuración no validar //Sino existe configuración no validar
@ -210,12 +239,12 @@ export class FuelRequestService {
if( if(
data.gallonQuantity > data.gallonQuantity >
vehicleConfig.tankcapacity vehicleConfig.tankCapacity
){ ){
await this.createAnomaly( await this.createAnomaly(
data, data,
"CONSUMO ELEVADO", "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.`
) )
} }
} }