diff --git a/app/Http/Controllers/Repuve/UpdateController.php b/app/Http/Controllers/Repuve/UpdateController.php index ee2a126..62ac66e 100644 --- a/app/Http/Controllers/Repuve/UpdateController.php +++ b/app/Http/Controllers/Repuve/UpdateController.php @@ -12,13 +12,13 @@ use App\Models\Record; use App\Models\File; use App\Models\Owner; -use App\Models\Error; use App\Models\CatalogNameImg; use App\Models\VehicleTagLog; use App\Services\RepuveService; use App\Services\PadronEstatalService; use Exception; use Illuminate\Support\Facades\Auth; +use App\Jobs\ProcessRepuveResponse; class UpdateController extends Controller { @@ -375,71 +375,68 @@ public function vehicleUpdate(VehicleUpdateRequest $request) // Solo enviar a REPUVE Nacional si hay cambios if ($hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0) { - //Envio de datos - $apiResponse = $this->sendToRepuveNacional($niv); - $apiResponse["repuve_response"]["folio_ci"] = $record->folio; - $apiResponse["repuve_response"]["identificador_ci"] = $tag->tag_number; + // Preparar datos completos para REPUVE + $datosCompletos = $this->prepararDatosParaInscripcion($niv); - if (isset($apiResponse['has_error']) && $apiResponse['has_error']) { - $error = Error::where('code', $apiResponse['error_code'])->first(); - - if (!$error) { - // Usar error genérico si no se encuentra el código - logger()->warning('Código de error REPUVE no catalogado', [ - 'error_code' => $apiResponse['error_code'], - 'error_message' => $apiResponse['error_message'], - 'niv' => $niv, - ]); - - // Buscar error - $error = Error::where('code', '-1')->first(); - - if (!$error) { - // Si ni siquiera existe el error genérico - $error = Error::create([ - 'code' => '-1', - 'name' => 'Error Interno', - 'description' => 'Error interno del web service. Problemas con la base de datos o en la red.', - 'type' => 'Error de Conexión', - ]); - } - } - - $record->update([ - 'error_id' => $error->id, - 'api_response' => $apiResponse, - 'error_occurred_at' => now(), - ]); - - DB::commit(); - - return ApiResponse::NOT_ACCEPTABLE->response([ - 'message' => 'Datos guardados con error. Corrija y vuelva a enviar.', - 'has_error' => true, - 'can_retry' => true, - 'error' => [ - 'code' => $error->code, - 'description' => $error->description, - 'occurred_at' => $record->error_occurred_at->toDateTimeString(), - ], - 'record' => [ - 'id' => $record->id, - 'folio' => $record->folio, - ], - ]); - } - - $record->update([ - 'error_id' => null, - 'api_response' => $apiResponse, - 'error_occurred_at' => null, - ]); + // Enviar job + ProcessRepuveResponse::dispatch($record->id, $datosCompletos); } DB::commit(); $sentToRepuve = $hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0; + $message = 'Vehículo actualizado exitosamente'; + if (!$hasVehicleChanges && !$hasOwnerChanges && empty($uploadedFiles)) { + $message = 'No se detectaron cambios. Los datos ya estaban actualizados.'; + } elseif (($hasVehicleChanges || $hasOwnerChanges) && !empty($uploadedFiles)) { + $message = 'Datos del vehículo/propietario y archivos actualizados exitosamente.'; + } elseif (($hasVehicleChanges || $hasOwnerChanges) && empty($uploadedFiles)) { + $message = 'Datos del vehículo/propietario actualizados exitosamente. No se subieron archivos.'; + } elseif (!$hasVehicleChanges && !$hasOwnerChanges && !empty($uploadedFiles)) { + $message = 'Archivos subidos exitosamente. No hubo cambios en los datos del vehículo/propietario.'; + } + + return ApiResponse::OK->response([ + 'message' => $message, + 'has_error' => false, + 'changes_made' => [ + 'vehicle_updated' => $hasVehicleChanges, + 'owner_updated' => $hasOwnerChanges, + 'files_uploaded' => count($uploadedFiles) > 0, + ], + 'record' => [ + 'id' => $record->id, + 'folio' => $record->folio, + 'updated_at' => $record->updated_at->toDateTimeString(), + ], + 'vehicle' => [ + 'id' => $vehicle->id, + 'placa' => $vehicle->placa, + 'niv' => $vehicle->niv, + 'marca' => $vehicle->marca, + 'modelo' => $vehicle->modelo, + 'color' => $vehicle->color, + ], + 'owner' => [ + 'id' => $owner->id, + 'full_name' => $owner->full_name, + 'rfc' => $owner->rfc, + ], + 'tag' => [ + 'id' => $tag->id, + 'tag_number' => $tag->tag_number, + 'status' => $tag->status->name, + ], + 'uploaded_files' => $uploadedFiles, + 'replaced_count' => count($replacedFiles), + 'total_files' => File::where('record_id', $record->id)->count(), + ]); + + DB::commit(); + + $sentToRepuve = $hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0; + $message = 'Vehículo actualizado exitosamente'; if (!$hasVehicleChanges && !$hasOwnerChanges && empty($uploadedFiles)) { $message = 'No se detectaron cambios. Los datos ya estaban actualizados.'; @@ -543,12 +540,6 @@ private function prepararDatosParaInscripcion(string $niv): array ]; } - private function sendToRepuveNacional(string $niv): array - { - $datosCompletos = $this->prepararDatosParaInscripcion($niv); - return $this->repuveService->inscribirVehiculo($datosCompletos); - } - private function detectVehicleChanges($vehicle, array $vehicleDataEstatal): bool { $fieldsToCompare = [ diff --git a/app/Jobs/ProcessRepuveResponse.php b/app/Jobs/ProcessRepuveResponse.php index 38db324..61bc516 100644 --- a/app/Jobs/ProcessRepuveResponse.php +++ b/app/Jobs/ProcessRepuveResponse.php @@ -46,11 +46,6 @@ public function handle(RepuveService $repuveService): void 'timestamp' => $apiResponse['timestamp'] ?? null, ]); - if(isset($apiResponse['repuve_response']) && is_array($apiResponse['repuve_response'])){ - $apiResponse['repuve_response']['folio_ci'] = $record->folio; - $apiResponse['repuve_response']['identificador_ci'] = $record->vehicle->tag->tag_number; - } - if($apiResponse['has_error']){ $error = Error::where('code', $apiResponse['error_code'])->first();