From 30c0b8f587a8244825505180470beeb38f77d904 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Fri, 26 Dec 2025 17:05:59 -0600 Subject: [PATCH] fix: cancelar constancia no asignada --- .../Repuve/CancellationController.php | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Repuve/CancellationController.php b/app/Http/Controllers/Repuve/CancellationController.php index e0be38e..f39c19b 100644 --- a/app/Http/Controllers/Repuve/CancellationController.php +++ b/app/Http/Controllers/Repuve/CancellationController.php @@ -279,6 +279,16 @@ public function cancelarTagNoAsignado(Request $request) $observations = $request->cancellation_observations; + // Verificar que existe el motivo de cancelación ANTES de crear el log + $cancellationReason = \App\Models\CatalogCancellationReason::find($request->cancellation_reason_id); + if (!$cancellationReason) { + DB::rollBack(); + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El motivo de cancelación no existe.', + 'cancellation_reason_id' => $request->cancellation_reason_id, + ]); + } + $cancellationLog = TagCancellationLog::create([ 'tag_id' => $tag->id, 'cancellation_reason_id' => $request->cancellation_reason_id, @@ -290,15 +300,6 @@ public function cancelarTagNoAsignado(Request $request) // Cargar las relaciones necesarias ANTES de usarlas $cancellationLog->load(['cancellationReason', 'cancelledBy']); - // Validar que la relación se cargó correctamente - if (!$cancellationLog->cancellationReason) { - DB::rollBack(); - return ApiResponse::INTERNAL_ERROR->response([ - 'message' => 'Error al cargar el motivo de cancelación.', - 'error' => 'La relación cancellationReason no se pudo cargar correctamente.', - ]); - } - // Actualizar el módulo del tag si se proporciona if ($request->filled('module_id')) { $tag->module_id = $request->module_id; @@ -319,19 +320,28 @@ public function cancelarTagNoAsignado(Request $request) ->latest() ->first(); - // Preparar datos para el PDF + // Validar que existe el log de cancelación + if (!$lastCancellation) { + DB::rollBack(); + return ApiResponse::INTERNAL_ERROR->response([ + 'message' => 'Error: No se encontró el log de cancelación después de crearlo.', + 'tag_id' => $tag->id, + ]); + } + + // Preparar datos para el PDF con validaciones defensivas $cancellationData = [ - 'fecha' => $lastCancellation ? $lastCancellation->cancellation_at->format('d/m/Y') : now()->format('d/m/Y'), + 'fecha' => $lastCancellation->cancellation_at ? $lastCancellation->cancellation_at->format('d/m/Y') : now()->format('d/m/Y'), 'folio' => $tag->folio ?? '', 'tag_number' => $tag->tag_number ?? 'N/A', - 'motivo' => $lastCancellation && $lastCancellation->cancellationReason + 'motivo' => ($lastCancellation->cancellationReason && isset($lastCancellation->cancellationReason->name)) ? $lastCancellation->cancellationReason->name : 'No especificado', - 'operador' => $lastCancellation && $lastCancellation->cancelledBy + 'operador' => ($lastCancellation->cancelledBy && isset($lastCancellation->cancelledBy->name)) ? $lastCancellation->cancelledBy->name : 'Sistema', - 'modulo' => $tag->module ? $tag->module->name : 'No especificado', - 'ubicacion' => $tag->module ? $tag->module->address : 'No especificado', + 'modulo' => ($tag->module && isset($tag->module->name)) ? $tag->module->name : 'No especificado', + 'ubicacion' => ($tag->module && isset($tag->module->address)) ? $tag->module->address : 'No especificado', ]; try {