Actualización CRUD módulo lectura de bombas

This commit is contained in:
2026-07-03 22:20:06 +00:00
parent 61cfeb7a6c
commit 2c8e5ad894
4 changed files with 110 additions and 139 deletions

View File

@ -117,44 +117,28 @@ export class PumpReadingController {
async calculateDispensedGallons(
req: Request,
res: Response
) {
try {
const gallons =
await service.calculateDispensedGallons(
const gallons = await service.calculateDispensedGallons(
req.params.id as string
);
res.json({
gallonsDispensed: gallons
});
} catch (error) {
res.status(500).json({
message: "Error al calcular galones despachados.",
error
});
}
}
// Calcular galones registrados por el sistema
async calculateSystemDispensed(
req: Request,
@ -163,68 +147,43 @@ export class PumpReadingController {
) {
try {
const gallons = await service.calculateSystemDispensed(
req.params.id as string
);
res.json({
systemDispensed: gallons
});
} catch (error) {
res.status(500).json({
message: "Error al calcular galones del sistema.",
error
});
}
}
// Calcular diferencia
async calculateDifference(
req: Request,
res: Response
) {
try {
const difference = await service.calculateDifference(
req.params.id as string
);
res.json({
difference
});
res.json({difference});
} catch (error) {
res.status(500).json({
message: "Error al calcular la diferencia.",
error
});
}
}
// Actualizar estado
@ -235,25 +194,15 @@ export class PumpReadingController {
res: Response
) {
try {
const status = await service.updateStatus(
req.params.id as string
);
res.json({
status
});
res.json({status});
} catch (error) {
res.status(500).json({
message: "Error al actualizar el estado.",
error
@ -264,96 +213,62 @@ export class PumpReadingController {
}
//Actualizar Fuel Request relacionadas
async updateFuelRequests(
req: Request,
res: Response
) {
try {
const requests = await service.updateFuelRequests(
req.params.id as string
);
res.json(requests);
} catch (error) {
res.status(500).json({
message: "Error al actualizar las Fuel Request.",
error
});
}
}
//Crear anomalía por diferencia
async createDifferenceAnomaly(
req: Request,
res: Response
) {
try {
const anomaly = await service.creataDifferenceAnomaly(
req.params.id as string
);
res.json(anomaly);
} catch (error) {
res.status(500).json({
message: "Error al crear la anomalía.",
error
});
}
}
//Cerrar lectura
async closeReading(
req: Request,
res: Response
) {
try {
const reading = await service.closeReading(
req.params.id as string
);
res.json(reading);
} catch (error) {
res.status(500).json({
message: "Error al cerrar la lectura.",
error
});

View File

@ -79,11 +79,5 @@ const pumpReadingSchema = new mongoose.Schema({
);
pumpReadingSchema.pre("save",
function(){
this.gallonsDispensed = this.finalReading-this.initialReading;
}
);
export default mongoose.model("PumpReading",pumpReadingSchema);

View File

@ -6,23 +6,41 @@ const pumpReadingRouter = Router();
const controller = new PumpReadingController();
// Obtener todas las lecturas
pumpReadingRouter.get("/", authMiddleware, controller.getAll);
// Obtener una lectura por ID
// Obtener lectura por ID
pumpReadingRouter.get("/:id", authMiddleware, controller.getById);
// Crear una nueva lectura
pumpReadingRouter.post("/", authMiddleware, controller.create);
// Crear lectura
pumpReadingRouter.post("/",authMiddleware, controller.create
);
// Actualizar una lectura
// Actualizar lectura
pumpReadingRouter.put("/:id", authMiddleware, controller.update);
// Eliminar una lectura
// Eliminar lectura
pumpReadingRouter.delete("/:id", authMiddleware, controller.delete);
// Cerrar lectura y realizar el cuadre
// Calcular galones despachados
pumpReadingRouter.post("/:id/calculate-dispensed", authMiddleware, controller.calculateDispensedGallons);
// Calcular galones registrados en el sistema
pumpReadingRouter.post("/:id/calculate-system", authMiddleware, controller.calculateSystemDispensed);
// Calcular diferencia
pumpReadingRouter.post("/:id/calculate-difference", authMiddleware, controller.calculateDifference);
// Actualizar estado
pumpReadingRouter.post("/:id/update-status",authMiddleware,controller.updateStatus);
// Actualizar Fuel Requests relacionadas
pumpReadingRouter.post("/:id/update-requests", authMiddleware, controller.updateFuelRequests);
// Crear anomalía por diferencia
pumpReadingRouter.post("/:id/create-anomaly", authMiddleware, controller.createDifferenceAnomaly);
// Cerrar lectura (realiza todo el proceso)
pumpReadingRouter.post("/:id/close", authMiddleware, controller.closeReading);
export default pumpReadingRouter;

View File

@ -2,23 +2,11 @@ import pumpReadingModel from "./pumpReading.model";
import { IPumpReading } from "./pumpReading.interface";
import fuelRequestModel from "../fuel-requests/fuelRequest.model";
import anomalyModel from "../anomalies/anomaly.model";
import { generatePumpReadingNumber } from "../../utils/requestNumber";
export class PumpReadingService{
//Crear nueva lectura de bomba
async create(
data:IPumpReading
){
data.gallonsDispensed=
data.finalReading-
data.initialReading;
const pumpReading = new pumpReadingModel(data);
return await pumpReading.save();
}
//Obtener todas las lecturas
@ -45,19 +33,81 @@ export class PumpReadingService{
.populate("createdBy")
}
//Crear nueva lectura de bomba
async create(
data: IPumpReading
){
// Validar lectura inicial
if (data.initialReading < 0) {
throw new Error("La lectura inicial no puede ser menor que 0.");
}
// Validar lectura final
if (data.finalReading < data.initialReading) {
throw new Error("La lectura final no puede ser menor que la lectura inicial.");
}
data.readingNumber = generatePumpReadingNumber();
// Calcular galones despachados
data.gallonsDispensed = data.finalReading - data.initialReading;
// Inicializar valores
data.systemDispensed = 0;
data.difference = 0;
data.status = "ABIERTA";
// Guardar lectura
const pumpReading = new pumpReadingModel(data);
return await pumpReading.save();
}
async update(
id: string,
data: Partial<IPumpReading>
){
if(
data.initialReading !== undefined&&
data.finalReading !== undefined
){
data.gallonsDispensed =
data.finalReading -
data.initialReading;
// Buscar la lectura actual
const reading = await pumpReadingModel.findById(id);
if (!reading) {
return null;
}
// Tomar los nuevos valores o conservar los existentes
const initialReading = data.initialReading ?? reading.initialReading;
const finalReading = data.finalReading ?? reading.finalReading;
// Validar lecturas
if (initialReading < 0) {
throw new Error("La lectura inicial no puede ser menor que 0.");
}
if (finalReading < initialReading) {
throw new Error("La lectura final no puede ser menor que la lectura inicial.");
}
// Recalcular galones despachados
data.gallonsDispensed = finalReading - initialReading;
// Mantener actualizado el total del sistema
const systemDispensed = data.systemDispensed ?? reading.systemDispensed;
// Recalcular diferencia
data.difference = data.gallonsDispensed - systemDispensed;
// Actualizar estado automáticamente
if (data.difference === 0) {
data.status = "CUADRADA";
} else {
data.status = "CON_DIFERENCIA";
}
// Actualizar la lectura
return await pumpReadingModel.findByIdAndUpdate(
id,
data,
@ -70,8 +120,7 @@ export class PumpReadingService{
async delete (
id:string
){
return await pumpReadingModel
.findByIdAndDelete
return await pumpReadingModel.findByIdAndDelete(id);
}
//Calcular galones despachados
@ -83,14 +132,11 @@ export class PumpReadingService{
await pumpReadingModel.findById(id);
if(!reading){
throw new Error(
"Lectura no encontrado"
);
throw new Error("Lectura no encontrado");
}
reading.gallonsDispensed =
reading.finalReading -
reading.initialReading;
reading.gallonsDispensed = reading.finalReading - reading.initialReading;
await reading.save();
return reading.gallonsDispensed;
}
@ -142,9 +188,8 @@ export class PumpReadingService{
);
}
reading.difference =
reading.gallonsDispensed -
reading.systemDispensed;
reading.difference = reading.gallonsDispensed - reading.systemDispensed;
await reading.save();
return reading.difference;
}
@ -210,7 +255,6 @@ export class PumpReadingService{
}
//Crear anomalía por diferencencia
async creataDifferenceAnomaly(
id:string
){