fix: robados

This commit is contained in:
Juan Felipe Zapata Moreno 2026-01-08 16:10:16 -06:00
parent 56a599603d
commit 04c5cc2dfa
3 changed files with 40 additions and 37 deletions

View File

@ -191,12 +191,13 @@ public function deteccionesDelDia(Request $request, int $id)
try { try {
$detecciones = $this->vehicleService->listarDeteccionesDelDiaPorArco($id, $fecha); $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) { $deteccionesFiltradas = array_map(function($deteccion) {
return [ return [
'vin' => $deteccion['vin'] ?? null, 'vin' => $deteccion['vin'] ?? null,
'placa' => $deteccion['placa'] ?? null, 'placa' => $deteccion['placa'] ?? null,
'antena' => $deteccion['antena'] ?? null, 'antena' => $deteccion['antena'] ?? null,
'robado' => $deteccion['tiene_reporte_robo'] ?? false,
]; ];
}, $detecciones); }, $detecciones);

View File

@ -5,7 +5,6 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Vehicle; use App\Models\Vehicle;
use App\Models\Detection; use App\Models\Detection;
use App\Models\VehicleFake;
use App\Services\VehicleService; use App\Services\VehicleService;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Notsoweb\ApiResponse\Enums\ApiResponse; use Notsoweb\ApiResponse\Enums\ApiResponse;
@ -24,7 +23,7 @@ public function __construct(
* Consultar vehículo por placa/VIN y darlo de alta como robado * Consultar vehículo por placa/VIN y darlo de alta como robado
* POST /api/vehicles/consultar * POST /api/vehicles/consultar
*/ */
public function consultarVehiculo(Request $request): JsonResponse public function vehiculoRobadoAlta(Request $request): JsonResponse
{ {
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'placa' => 'required_without:vin|string|nullable', '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')); ->paginate(config('app.pagination'));
return ApiResponse::OK->response([ 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) public function buscarVehiculo(Request $request)
{ {
$validated = $request->validate([ $validated = $request->validate([
@ -307,47 +322,34 @@ public function buscarVehiculo(Request $request)
'vin' => 'required_without:placa|string|nullable', 'vin' => 'required_without:placa|string|nullable',
]); ]);
$placa = $validated['placa'] ?? null; $criterio = $validated['vin'] ?? $validated['placa'];
$vin = $validated['vin'] ?? null;
$vehiculo = VehicleFake::when($vin, function ($query) use ($vin) { // Consultar en el servicio externo
return $query->where('vin', $vin); $datosVehiculo = $this->vehicleService->consultarVehiculoPorTag($criterio);
})
->when($placa, function ($query) use ($placa) {
return $query->orWhere('placa', $placa);
})
->first();
if (!$vehiculo) { if (!$datosVehiculo) {
return ApiResponse::NOT_FOUND->response([ return ApiResponse::NOT_FOUND->response([
'success' => false, '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([ return ApiResponse::OK->response([
'success' => true, 'success' => true,
'vehiculo' => [ 'vehiculo' => [
'folio_tag' => $vehiculo->folio_tag, 'fast_id' => $datosVehiculo['tag_number'] ?? null,
'tag_number' => $vehiculo->tag_number, 'folio_tag' => $datosVehiculo['folio_tag'] ?? null,
'placa' => $vehiculo->placa, 'vin' => $datosVehiculo['vin'] ?? null,
'vin' => $vehiculo->vin, 'placa' => $datosVehiculo['placa'] ?? null,
'marca' => $vehiculo->marca, 'marca' => $datosVehiculo['marca'] ?? null,
'modelo' => $vehiculo->modelo, 'modelo' => $datosVehiculo['modelo'] ?? null,
'color' => $vehiculo->color, 'linea' => $datosVehiculo['linea'] ?? null,
], 'sublinea' => $datosVehiculo['sublinea'] ?? null,
'total_detecciones' => $detecciones->total(), 'color' => $datosVehiculo['color'] ?? null,
'detecciones' => $detecciones 'clase_veh' => $datosVehiculo['clase_veh'] ?? null,
'tipo_servicio' => $datosVehiculo['tipo_servicio'] ?? null,
'propietario' => $datosVehiculo['propietario'] ?? null,
]
]); ]);
} }

View File

@ -27,7 +27,7 @@
Route::middleware('auth:api')->group(function() { Route::middleware('auth:api')->group(function() {
// Rutas de Vehículos // 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::post('/vehicles/recuperar', [VehicleController::class, 'recuperarVehiculo']);
Route::get('/vehicles/detectar', [VehicleController::class, 'buscarVehiculo']); Route::get('/vehicles/detectar', [VehicleController::class, 'buscarVehiculo']);
Route::get('/vehicles/robados', [VehicleController::class, 'listarRobados']); Route::get('/vehicles/robados', [VehicleController::class, 'listarRobados']);