diff --git a/backend/src/modules/pump-reading/pumpReading.controller.ts b/backend/src/modules/pump-reading/pumpReading.controller.ts index 198e4aa..f4b80e0 100644 --- a/backend/src/modules/pump-reading/pumpReading.controller.ts +++ b/backend/src/modules/pump-reading/pumpReading.controller.ts @@ -117,44 +117,28 @@ export class PumpReadingController { async calculateDispensedGallons( req: Request, - res: Response ) { try { - - const gallons = - - await service.calculateDispensedGallons( - - req.params.id as string - - ); + 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 }); diff --git a/backend/src/modules/pump-reading/pumpReading.model.ts b/backend/src/modules/pump-reading/pumpReading.model.ts index e8e4181..ebafb4d 100644 --- a/backend/src/modules/pump-reading/pumpReading.model.ts +++ b/backend/src/modules/pump-reading/pumpReading.model.ts @@ -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); \ No newline at end of file diff --git a/backend/src/modules/pump-reading/pumpReading.routes.ts b/backend/src/modules/pump-reading/pumpReading.routes.ts index 0b1753b..b5d6406 100644 --- a/backend/src/modules/pump-reading/pumpReading.routes.ts +++ b/backend/src/modules/pump-reading/pumpReading.routes.ts @@ -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; \ No newline at end of file diff --git a/backend/src/modules/pump-reading/pumpReading.service.ts b/backend/src/modules/pump-reading/pumpReading.service.ts index 29e0296..49e4f25 100644 --- a/backend/src/modules/pump-reading/pumpReading.service.ts +++ b/backend/src/modules/pump-reading/pumpReading.service.ts @@ -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,24 +33,86 @@ export class PumpReadingService{ .populate("createdBy") } - async update ( - id:string, - data:Partial + //Crear nueva lectura de bomba + async create( + data: IPumpReading ){ - if( - data.initialReading !== undefined&& - data.finalReading !== undefined - ){ - data.gallonsDispensed = - data.finalReading - - data.initialReading; + // 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 + ){ + + // 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, { - new:true + new: true } ); } @@ -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 ){