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 {
_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;

View File

@ -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:{

View File

@ -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.`
)
}
}