From 3bde46589b50cad53d8e3d6baee0bece5aadc5c5 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Fri, 26 Dec 2025 12:12:21 -0600 Subject: [PATCH] fix: editar tag_number --- .../Controllers/Repuve/UpdateController.php | 97 ++++++++++++++++--- .../Requests/Repuve/VehicleUpdateRequest.php | 4 + 2 files changed, 90 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Repuve/UpdateController.php b/app/Http/Controllers/Repuve/UpdateController.php index e405198..612b3cd 100644 --- a/app/Http/Controllers/Repuve/UpdateController.php +++ b/app/Http/Controllers/Repuve/UpdateController.php @@ -856,6 +856,68 @@ public function updateData(VehicleUpdateRequest $request, $id) } } + // ACTUALIZAR TAG_NUMBER + $hasTagChanges = false; + $oldTagNumber = null; + $newTagNumber = null; + + if ($request->has('tag.tag_number')) { + $requestedTagNumber = $request->input('tag.tag_number'); + + // Validar que el tag exista + if (!$tag) { + DB::rollBack(); + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El vehículo no tiene un TAG asignado', + 'vehicle_id' => $vehicle->id, + ]); + } + + // Validar que el tag esté en estado asignado + if (!$tag->isAssigned()) { + DB::rollBack(); + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'No se puede actualizar el tag_number porque el TAG no está asignado', + 'tag_folio' => $tag->folio, + 'tag_status' => $tag->status->name, + ]); + } + + // Validar que no esté vacío + if (empty(trim($requestedTagNumber))) { + DB::rollBack(); + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El tag_number no puede estar vacío', + ]); + } + + // Solo actualizar si es diferente + if ($requestedTagNumber !== $tag->tag_number) { + // Verificar que el nuevo tag_number no esté duplicado + $existingTag = Tag::where('tag_number', $requestedTagNumber) + ->where('id', '!=', $tag->id) + ->first(); + + if ($existingTag) { + DB::rollBack(); + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El tag_number ya está asignado a otro TAG', + 'tag_number' => $requestedTagNumber, + 'existing_tag_folio' => $existingTag->folio, + 'existing_tag_id' => $existingTag->id, + ]); + } + + // Guardar el valor antiguo + $oldTagNumber = $tag->tag_number; + $newTagNumber = $requestedTagNumber; + + // Actualizar SOLO el tag_number + $tag->update(['tag_number' => $requestedTagNumber]); + $hasTagChanges = true; + } + } + // Procesar archivos $uploadedFiles = []; $replacedFiles = []; @@ -1083,7 +1145,7 @@ public function updateData(VehicleUpdateRequest $request, $id) } // Registrar el log de cambios si hubo actualizaciones - if ($hasVehicleChanges || $hasOwnerChanges || $hasFolioChange || count($uploadedFiles) > 0 || count($deletedFiles) > 0) { + if ($hasVehicleChanges || $hasOwnerChanges || $hasTagChanges || $hasFolioChange || count($uploadedFiles) > 0 || count($deletedFiles) > 0) { VehicleTagLog::create([ 'vehicle_id' => $vehicle->id, 'tag_id' => $tag->id, @@ -1093,7 +1155,7 @@ public function updateData(VehicleUpdateRequest $request, $id) } // datos para REPUVE Nacional usando datos actuales de la BD - if ($hasVehicleChanges || $hasOwnerChanges || $hasFolioChange || count($uploadedFiles) > 0 || count($deletedFiles) > 0) { + if ($hasVehicleChanges || $hasOwnerChanges || $hasTagChanges || $hasFolioChange || count($uploadedFiles) > 0 || count($deletedFiles) > 0) { // Recargar el vehículo y propietario con los datos actualizados $vehicle->refresh(); $owner->refresh(); @@ -1146,11 +1208,27 @@ public function updateData(VehicleUpdateRequest $request, $id) $record->load(['vehicle.owner', 'vehicle.tag', 'files', 'error']); $message = 'Expediente actualizado exitosamente'; - if (!$hasVehicleChanges && !$hasOwnerChanges && !$hasFolioChange && empty($uploadedFiles) && empty($deletedFiles)) { + if (!$hasVehicleChanges && !$hasOwnerChanges && !$hasTagChanges && !$hasFolioChange && empty($uploadedFiles) && empty($deletedFiles)) { $message = 'No se detectaron cambios. Los datos ya estaban actualizados.'; if (!empty($skippedFiles)) { $message .= ' Se omitieron ' . count($skippedFiles) . ' archivo(s) duplicado(s).'; } + } elseif ($hasTagChanges && !$hasVehicleChanges && !$hasOwnerChanges && !$hasFolioChange) { + $message = 'Tag number actualizado exitosamente de "' . ($oldTagNumber ?? 'null') . '" a "' . $newTagNumber . '".'; + if (!empty($uploadedFiles) || !empty($deletedFiles)) { + $message .= ' Archivos modificados.'; + } + if (!empty($skippedFiles)) { + $message .= ' Se omitieron ' . count($skippedFiles) . ' archivo(s) duplicado(s).'; + } + } elseif ($hasTagChanges && ($hasVehicleChanges || $hasOwnerChanges)) { + $message = 'Datos del vehículo/propietario y tag actualizados exitosamente.'; + if (!empty($uploadedFiles) || !empty($deletedFiles)) { + $message .= ' Archivos modificados.'; + } + if (!empty($skippedFiles)) { + $message .= ' Se omitieron ' . count($skippedFiles) . ' archivo(s) duplicado(s).'; + } } elseif ($hasFolioChange) { $message = 'Folio actualizado exitosamente de "' . $oldFolio . '" a "' . $record->folio . '".'; if ($hasVehicleChanges || $hasOwnerChanges) { @@ -1183,14 +1261,11 @@ public function updateData(VehicleUpdateRequest $request, $id) return ApiResponse::OK->response([ 'message' => $message, 'has_error' => false, - 'cambios_hechos' => [ - 'vehicle_updated' => $hasVehicleChanges, - 'owner_updated' => $hasOwnerChanges, - 'files_uploaded' => count($uploadedFiles) > 0, - 'files_deleted' => count($deletedFiles) > 0, - 'files_skipped' => count($skippedFiles) > 0, - 'files_replaced' => count($replacedFiles) > 0, - ], + 'tag' => $hasTagChanges ? [ + 'old_tag_number' => $oldTagNumber, + 'new_tag_number' => $newTagNumber, + 'folio' => $tag->folio, + ] : null, 'record' => $record, ]); } catch (Exception $e) { diff --git a/app/Http/Requests/Repuve/VehicleUpdateRequest.php b/app/Http/Requests/Repuve/VehicleUpdateRequest.php index c0fc3c5..8c1bf99 100644 --- a/app/Http/Requests/Repuve/VehicleUpdateRequest.php +++ b/app/Http/Requests/Repuve/VehicleUpdateRequest.php @@ -37,6 +37,9 @@ public function rules(): array 'vehicle.nrpv' => 'nullable|string|max:50', 'vehicle.tipo_mov' => 'nullable|string|max:50', + // --- DATOS DEL TAG --- + 'tag.tag_number' => 'nullable|string|max:32', + // --- DATOS DEL PROPIETARIO --- 'owner.name' => 'nullable|string|max:100', 'owner.paternal' => 'nullable|string|max:100', @@ -81,6 +84,7 @@ public function messages(): array 'delete_files.*.exists' => 'El archivo a eliminar no existe', 'folio.unique' => 'El folio ya existe en el sistema', 'folio.max' => 'El folio no puede exceder 50 caracteres', + 'tag.tag_number.max' => 'El tag_number no puede exceder 32 caracteres', ]; } }