fix: editar tag_number

This commit is contained in:
Juan Felipe Zapata Moreno 2025-12-26 12:12:21 -06:00
parent 88ef9d272c
commit 3bde46589b
2 changed files with 90 additions and 11 deletions

View File

@ -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) {

View File

@ -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',
];
}
}