fix: cancelar constancia no asignada

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-26 17:05:59 -06:00
parent d3bd94e158
commit 30c0b8f587

View File

@ -279,6 +279,16 @@ public function cancelarTagNoAsignado(Request $request)
$observations = $request->cancellation_observations; $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([ $cancellationLog = TagCancellationLog::create([
'tag_id' => $tag->id, 'tag_id' => $tag->id,
'cancellation_reason_id' => $request->cancellation_reason_id, 'cancellation_reason_id' => $request->cancellation_reason_id,
@ -290,15 +300,6 @@ public function cancelarTagNoAsignado(Request $request)
// Cargar las relaciones necesarias ANTES de usarlas // Cargar las relaciones necesarias ANTES de usarlas
$cancellationLog->load(['cancellationReason', 'cancelledBy']); $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 // Actualizar el módulo del tag si se proporciona
if ($request->filled('module_id')) { if ($request->filled('module_id')) {
$tag->module_id = $request->module_id; $tag->module_id = $request->module_id;
@ -319,19 +320,28 @@ public function cancelarTagNoAsignado(Request $request)
->latest() ->latest()
->first(); ->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 = [ $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 ?? '', 'folio' => $tag->folio ?? '',
'tag_number' => $tag->tag_number ?? 'N/A', 'tag_number' => $tag->tag_number ?? 'N/A',
'motivo' => $lastCancellation && $lastCancellation->cancellationReason 'motivo' => ($lastCancellation->cancellationReason && isset($lastCancellation->cancellationReason->name))
? $lastCancellation->cancellationReason->name ? $lastCancellation->cancellationReason->name
: 'No especificado', : 'No especificado',
'operador' => $lastCancellation && $lastCancellation->cancelledBy 'operador' => ($lastCancellation->cancelledBy && isset($lastCancellation->cancelledBy->name))
? $lastCancellation->cancelledBy->name ? $lastCancellation->cancelledBy->name
: 'Sistema', : 'Sistema',
'modulo' => $tag->module ? $tag->module->name : 'No especificado', 'modulo' => ($tag->module && isset($tag->module->name)) ? $tag->module->name : 'No especificado',
'ubicacion' => $tag->module ? $tag->module->address : 'No especificado', 'ubicacion' => ($tag->module && isset($tag->module->address)) ? $tag->module->address : 'No especificado',
]; ];
try { try {