From c9e5cb86c88e310e597f3f2e8b49e0484c8b68a4 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Sat, 29 Nov 2025 12:02:56 -0600 Subject: [PATCH] =?UTF-8?q?Cambios=20a=20inscripcion,=20placa=20en=20vez?= =?UTF-8?q?=20de=20niv=20y=20correci=C3=B3n=20de=20fecha=20en=20PadronEsta?= =?UTF-8?q?talService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repuve/InscriptionController.php | 20 ++++++----- .../Requests/Repuve/VehicleStoreRequest.php | 10 +++--- app/Services/PadronEstatalService.php | 36 ++++++++++++++++++- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/Repuve/InscriptionController.php b/app/Http/Controllers/Repuve/InscriptionController.php index 9c27cf7..d858349 100644 --- a/app/Http/Controllers/Repuve/InscriptionController.php +++ b/app/Http/Controllers/Repuve/InscriptionController.php @@ -40,7 +40,7 @@ public function vehicleInscription(VehicleStoreRequest $request) try { $folio = $request->input('folio'); $tagNumber = $request->input('tag_number'); - $niv = $request->input('niv'); + $placa = $request->input('placa'); $telefono = $request->input('telefono'); // Buscar Tag y validar que NO tenga vehículo asignado @@ -61,10 +61,21 @@ public function vehicleInscription(VehicleStoreRequest $request) ]); } + // Iniciar transacción + DB::beginTransaction(); + + // Obtener datos de API Estatal por placa + $vehicleData = $this->getVehicleByPlaca($placa); + $ownerData = $this->getOwnerByPlaca($placa); + + // Obtener NIV de los datos del vehículo para verificar robo + $niv = $vehicleData['niv']; + // Verificar robo (API Repuve Nacional) $isStolen = $this->checkIfStolen($niv); if ($isStolen) { + DB::rollBack(); return ApiResponse::FORBIDDEN->response([ 'folio' => $folio, 'tag_number' => $tagNumber, @@ -73,13 +84,6 @@ public function vehicleInscription(VehicleStoreRequest $request) ]); } - // Iniciar transacción - DB::beginTransaction(); - - // Obtener 37 datos de API Estatal - $vehicleData = $this->getVehicle($niv); - $ownerData = $this->getOwner($niv); - // Crear propietario $owner = Owner::updateOrCreate( ['rfc' => $ownerData['rfc']], diff --git a/app/Http/Requests/Repuve/VehicleStoreRequest.php b/app/Http/Requests/Repuve/VehicleStoreRequest.php index a6777ce..c8ae615 100644 --- a/app/Http/Requests/Repuve/VehicleStoreRequest.php +++ b/app/Http/Requests/Repuve/VehicleStoreRequest.php @@ -15,12 +15,12 @@ public function rules(): array return [ 'folio' => ['required', 'string', 'max:50'], 'tag_number' => ['required', 'string', 'exists:tags,tag_number'], - 'niv' => ['sometimes', 'string', 'max:30'], + 'placa' => ['required', 'string', 'max:30'], 'telefono' => ['required', 'string', 'max:11'], 'files' => ['nullable', 'array', 'min:1'], 'files.*' => ['file', 'mimes:jpeg,png,jpg', 'max:10240'], - 'names' => ['nullable', 'array'], - 'names.*' => ['string', 'max:255'], + 'name_id' => ['required', 'array', 'min:1'], + 'name_id.*' => ['required', 'integer', 'exists:catalog_name_img,id'] ]; } @@ -31,8 +31,8 @@ public function messages(): array 'folio.string' => 'El folio debe ser una cadena de texto', 'tag_number.required' => 'El tag_number es requerido', 'tag_number.exists' => 'El tag_number no existe en el sistema', - 'niv.required' => 'El niv es requerido', - 'niv.string' => 'El niv debe ser una cadena de texto', + 'placa.required' => 'La placa es requerida', + 'placa.string' => 'La placa debe ser una cadena de texto', 'telefono.required' => 'El teléfono es requerido', 'telefono.max' => 'El teléfono no debe superar los 10 caracteres', 'files.array' => 'Los archivos deben ser un array', diff --git a/app/Services/PadronEstatalService.php b/app/Services/PadronEstatalService.php index 6cc9eb0..3a4b5c8 100644 --- a/app/Services/PadronEstatalService.php +++ b/app/Services/PadronEstatalService.php @@ -18,6 +18,11 @@ public function getVehiculoByNiv(string $niv): array return $this->consultarPadron('niv', $niv); } + public function getVehiculoByPlaca(string $placa): array + { + return $this->consultarPadron('placa', $placa); + } + public function getVehiculoByFolio(string $folio): array { return $this->consultarPadron('folio', $folio); @@ -123,6 +128,12 @@ private function parsearRespuesta(string $soapResponse): array */ public function extraerDatosVehiculo(array $datos): array { + // Convertir fecha de DD/MM/YYYY a YYYY-MM-DD + $fechaexpedicion = null; + if (isset($datos['fechaexp']) && $datos['fechaexp']) { + $fechaexpedicion = $this->convertirFecha($datos['fechaexp']); + } + return [ 'placa' => $datos['placa'] ?? null, 'niv' => $datos['niv'] ?? null, @@ -136,7 +147,7 @@ public function extraerDatosVehiculo(array $datos): array 'tipo_servicio' => $datos['tipo_uso'] ?? null, 'rfv' => $datos['rfv'] ?? null, 'ofcexpedicion' => $datos['ofcexp'] ?? null, - 'fechaexpedicion' => $datos['fechaexp'] ?? null, + 'fechaexpedicion' => $fechaexpedicion, 'tipo_veh' => $datos['tipo_veh'] ?? null, 'numptas' => $datos['numptas'] ?? null, 'observac' => $datos['observac'] ?? null, @@ -145,6 +156,29 @@ public function extraerDatosVehiculo(array $datos): array ]; } + /** + * Convierte fecha de DD/MM/YYYY a YYYY-MM-DD + */ + private function convertirFecha(?string $fecha): ?string + { + if (!$fecha) { + return null; + } + + // Si ya está en formato YYYY-MM-DD, retornar tal cual + if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha)) { + return $fecha; + } + + // Convertir de DD/MM/YYYY a YYYY-MM-DD + if (preg_match('/^(\d{2})\/(\d{2})\/(\d{4})$/', $fecha, $matches)) { + return "{$matches[3]}-{$matches[2]}-{$matches[1]}"; + } + + // Si no coincide con ningún formato esperado, retornar null + return null; + } + /** * Extrae los datos del propietario del resultado */