From 04c5cc2dfa3fad8cc6f3e52f40fa5a46cf35c4a2 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Thu, 8 Jan 2026 16:10:16 -0600 Subject: [PATCH] fix: robados --- app/Http/Controllers/Api/ArcoController.php | 3 +- .../Controllers/Api/VehicleController.php | 72 ++++++++++--------- routes/api.php | 2 +- 3 files changed, 40 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/Api/ArcoController.php b/app/Http/Controllers/Api/ArcoController.php index 8fc0bf0..71f72ce 100644 --- a/app/Http/Controllers/Api/ArcoController.php +++ b/app/Http/Controllers/Api/ArcoController.php @@ -191,12 +191,13 @@ public function deteccionesDelDia(Request $request, int $id) try { $detecciones = $this->vehicleService->listarDeteccionesDelDiaPorArco($id, $fecha); - // Filtrar solo VIN, placa y antena + // Filtrar solo VIN, placa, antena y si es robado $deteccionesFiltradas = array_map(function($deteccion) { return [ 'vin' => $deteccion['vin'] ?? null, 'placa' => $deteccion['placa'] ?? null, 'antena' => $deteccion['antena'] ?? null, + 'robado' => $deteccion['tiene_reporte_robo'] ?? false, ]; }, $detecciones); diff --git a/app/Http/Controllers/Api/VehicleController.php b/app/Http/Controllers/Api/VehicleController.php index 04eaded..7a79829 100644 --- a/app/Http/Controllers/Api/VehicleController.php +++ b/app/Http/Controllers/Api/VehicleController.php @@ -5,7 +5,6 @@ use App\Http\Controllers\Controller; use App\Models\Vehicle; use App\Models\Detection; -use App\Models\VehicleFake; use App\Services\VehicleService; use Illuminate\Http\JsonResponse; use Notsoweb\ApiResponse\Enums\ApiResponse; @@ -24,7 +23,7 @@ public function __construct( * Consultar vehículo por placa/VIN y darlo de alta como robado * POST /api/vehicles/consultar */ - public function consultarVehiculo(Request $request): JsonResponse + public function vehiculoRobadoAlta(Request $request): JsonResponse { $validator = Validator::make($request->all(), [ 'placa' => 'required_without:vin|string|nullable', @@ -256,9 +255,20 @@ public function listarRecuperados() ]); } - public function listarDetecciones() + public function listarDetecciones(Request $request) { - $detecciones = Detection::orderBy('fecha_deteccion', 'desc') + $query = Detection::query(); + + // Filtro por placa + if ($request->has('placa') && !empty($request->placa)) { + $query->where('placa', 'like', '%' . $request->placa . '%'); + } + + if ($request->has('vin') && !empty($request->vin)) { + $query->where('vin', 'like', '%' . $request->vin . '%'); + } + + $detecciones = $query->orderBy('fecha_deteccion', 'desc') ->paginate(config('app.pagination')); return ApiResponse::OK->response([ @@ -300,6 +310,11 @@ public function listarDeteccionesDelDia(Request $request) } } + /** + * Buscar vehículo por placa o VIN en el servicio externo + * GET /api/vehicles/detectar + * Consulta datos sin dar de alta como robado + */ public function buscarVehiculo(Request $request) { $validated = $request->validate([ @@ -307,47 +322,34 @@ public function buscarVehiculo(Request $request) 'vin' => 'required_without:placa|string|nullable', ]); - $placa = $validated['placa'] ?? null; - $vin = $validated['vin'] ?? null; + $criterio = $validated['vin'] ?? $validated['placa']; - $vehiculo = VehicleFake::when($vin, function ($query) use ($vin) { - return $query->where('vin', $vin); - }) - ->when($placa, function ($query) use ($placa) { - return $query->orWhere('placa', $placa); - }) - ->first(); + // Consultar en el servicio externo + $datosVehiculo = $this->vehicleService->consultarVehiculoPorTag($criterio); - if (!$vehiculo) { + if (!$datosVehiculo) { return ApiResponse::NOT_FOUND->response([ 'success' => false, - 'message' => 'No se encontró el vehículo en la base de datos' + 'message' => 'No se encontró el vehículo en el sistema' ]); } - // Buscar detecciones del vehículo - $detecciones = Detection::when($vin, function ($query) use ($vin) { - return $query->where('vin', $vin); - }) - ->when($placa, function ($query) use ($placa) { - return $query->orWhere('placa', $placa); - }) - ->orderBy('fecha_deteccion', 'desc') - ->paginate(config('app.pagination')); - return ApiResponse::OK->response([ 'success' => true, 'vehiculo' => [ - 'folio_tag' => $vehiculo->folio_tag, - 'tag_number' => $vehiculo->tag_number, - 'placa' => $vehiculo->placa, - 'vin' => $vehiculo->vin, - 'marca' => $vehiculo->marca, - 'modelo' => $vehiculo->modelo, - 'color' => $vehiculo->color, - ], - 'total_detecciones' => $detecciones->total(), - 'detecciones' => $detecciones + 'fast_id' => $datosVehiculo['tag_number'] ?? null, + 'folio_tag' => $datosVehiculo['folio_tag'] ?? null, + 'vin' => $datosVehiculo['vin'] ?? null, + 'placa' => $datosVehiculo['placa'] ?? null, + 'marca' => $datosVehiculo['marca'] ?? null, + 'modelo' => $datosVehiculo['modelo'] ?? null, + 'linea' => $datosVehiculo['linea'] ?? null, + 'sublinea' => $datosVehiculo['sublinea'] ?? null, + 'color' => $datosVehiculo['color'] ?? null, + 'clase_veh' => $datosVehiculo['clase_veh'] ?? null, + 'tipo_servicio' => $datosVehiculo['tipo_servicio'] ?? null, + 'propietario' => $datosVehiculo['propietario'] ?? null, + ] ]); } diff --git a/routes/api.php b/routes/api.php index 845959c..9387442 100644 --- a/routes/api.php +++ b/routes/api.php @@ -27,7 +27,7 @@ Route::middleware('auth:api')->group(function() { // Rutas de Vehículos - Route::post('/vehicles/consultar', [VehicleController::class, 'consultarVehiculo']); + Route::post('/vehicles/consultar', [VehicleController::class, 'vehiculoRobadoAlta']); Route::post('/vehicles/recuperar', [VehicleController::class, 'recuperarVehiculo']); Route::get('/vehicles/detectar', [VehicleController::class, 'buscarVehiculo']); Route::get('/vehicles/robados', [VehicleController::class, 'listarRobados']);