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 {
$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);

View File

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

View File

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