endpoint para actualizar web
This commit is contained in:
parent
48eaf28151
commit
fbf55ae67c
@ -384,8 +384,6 @@ public function vehicleUpdate(VehicleUpdateRequest $request)
|
||||
|
||||
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.';
|
||||
@ -405,81 +403,10 @@ public function vehicleUpdate(VehicleUpdateRequest $request)
|
||||
'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.';
|
||||
} elseif (!$hasVehicleChanges && !$hasOwnerChanges && empty($uploadedFiles)) {
|
||||
$message = 'Solo se actualizaron archivos. Los datos del vehículo/propietario no cambiaron.';
|
||||
} 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,
|
||||
'sent_to_repuve' => $sentToRepuve,
|
||||
'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,
|
||||
],
|
||||
'record' => $record,
|
||||
'vehicle' => $vehicle,
|
||||
'owner' => $owner,
|
||||
'files' => $record->files,
|
||||
'uploaded_files' => $uploadedFiles,
|
||||
'replaced_count' => count($replacedFiles),
|
||||
'total_files' => File::where('record_id', $record->id)->count(),
|
||||
@ -618,4 +545,290 @@ private function getOwner(string $niv): array
|
||||
$datos = $this->padronEstatalService->getVehiculoByNiv($niv);
|
||||
return $this->padronEstatalService->extraerDatosPropietario($datos);
|
||||
}
|
||||
|
||||
|
||||
/* --------------------------------------------------------- */
|
||||
|
||||
public function updateData(VehicleUpdateRequest $request)
|
||||
{
|
||||
try {
|
||||
$request->validate([
|
||||
'folio' => 'required|string|exists:records,folio',
|
||||
]);
|
||||
|
||||
$folio = $request->input('folio');
|
||||
|
||||
$record = Record::with(['vehicle.owner', 'vehicle.tag', 'files', 'error'])
|
||||
->where('folio', $folio)
|
||||
->first();
|
||||
|
||||
if (!$record) {
|
||||
return ApiResponse::NOT_FOUND->response([
|
||||
'message' => 'No se encontró el expediente',
|
||||
'folio' => $folio,
|
||||
]);
|
||||
}
|
||||
|
||||
$vehicle = $record->vehicle;
|
||||
$owner = $vehicle->owner;
|
||||
$tag = $vehicle->tag;
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
$hasVehicleChanges = false;
|
||||
$hasOwnerChanges = false;
|
||||
|
||||
if ($request->has('vehicle')) {
|
||||
$vehicleData = $request->input('vehicle', []);
|
||||
|
||||
$allowedVehicleFields = [
|
||||
'placa',
|
||||
'niv',
|
||||
'marca',
|
||||
'linea',
|
||||
'sublinea',
|
||||
'modelo',
|
||||
'color',
|
||||
'numero_motor',
|
||||
'clase_veh',
|
||||
'tipo_servicio',
|
||||
'rfv',
|
||||
'ofcexpedicion',
|
||||
'fechaexpedicion',
|
||||
'tipo_veh',
|
||||
'numptas',
|
||||
'observac',
|
||||
'cve_vehi',
|
||||
'nrpv',
|
||||
'tipo_mov'
|
||||
];
|
||||
|
||||
$vehicleData = array_filter(
|
||||
array_intersect_key($vehicleData, array_flip($allowedVehicleFields)),
|
||||
fn($value) => $value !== null && $value !== ''
|
||||
);
|
||||
|
||||
if (!empty($vehicleData)) {
|
||||
$vehicle->update($vehicleData);
|
||||
$hasVehicleChanges = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Actualizar propietario si se envían datos
|
||||
if ($request->has('owner')) {
|
||||
$ownerInput = $request->input('owner', []);
|
||||
|
||||
$allowedOwnerFields = [
|
||||
'name',
|
||||
'paternal',
|
||||
'maternal',
|
||||
'rfc',
|
||||
'curp',
|
||||
'address',
|
||||
'tipopers',
|
||||
'pasaporte',
|
||||
'licencia',
|
||||
'ent_fed',
|
||||
'munic',
|
||||
'callep',
|
||||
'num_ext',
|
||||
'num_int',
|
||||
'colonia',
|
||||
'cp',
|
||||
'telefono'
|
||||
];
|
||||
|
||||
$ownerData = array_filter(
|
||||
array_intersect_key($ownerInput, array_flip($allowedOwnerFields)),
|
||||
fn($value) => $value !== null && $value !== ''
|
||||
);
|
||||
|
||||
if (!empty($ownerData)) {
|
||||
// Si se intenta cambiar el RFC
|
||||
if (isset($ownerData['rfc']) && $ownerData['rfc'] !== $owner->rfc) {
|
||||
// Verificar que el nuevo RFC no exista ya
|
||||
$existingOwner = Owner::where('rfc', $ownerData['rfc'])->first();
|
||||
|
||||
if ($existingOwner) {
|
||||
DB::rollBack();
|
||||
return ApiResponse::BAD_REQUEST->response([
|
||||
'message' => 'El RFC ya existe en el sistema',
|
||||
'rfc' => $ownerData['rfc'],
|
||||
'owner_id' => $existingOwner->id,
|
||||
]);
|
||||
}
|
||||
|
||||
// Si no existe, actualizar el RFC del propietario actual
|
||||
$owner->update($ownerData);
|
||||
}
|
||||
$hasOwnerChanges = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Procesar archivos
|
||||
$uploadedFiles = [];
|
||||
$replacedFiles = [];
|
||||
|
||||
if ($request->hasFile('files')) {
|
||||
$files = $request->file('files');
|
||||
$nameIds = $request->input('name_id', []);
|
||||
|
||||
if (!empty($nameIds)) {
|
||||
$validIds = CatalogNameImg::whereIn('id', $nameIds)->pluck('id')->toArray();
|
||||
if (count($validIds) !== count($nameIds)) {
|
||||
DB::rollBack();
|
||||
return ApiResponse::BAD_REQUEST->response([
|
||||
'message' => 'Algunos ids del catálogo de nombres no son válidos',
|
||||
'provided_id' => $nameIds,
|
||||
'valid_id' => $validIds,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($files as $indx => $file) {
|
||||
$nameId = $nameIds[$indx] ?? null;
|
||||
|
||||
if ($nameId === null) {
|
||||
DB::rollBack();
|
||||
return ApiResponse::BAD_REQUEST->response([
|
||||
'message' => "Falta el nombre para el archivo, busca en el catálogo de nombres",
|
||||
]);
|
||||
}
|
||||
|
||||
$existingFile = File::where('record_id', $record->id)
|
||||
->where('name_id', $nameId)
|
||||
->first();
|
||||
|
||||
if ($existingFile) {
|
||||
Storage::disk('public')->delete($existingFile->path);
|
||||
|
||||
$replacedFiles[] = [
|
||||
'id' => $existingFile->id,
|
||||
'name_id' => $nameId,
|
||||
'old_path' => $existingFile->path,
|
||||
];
|
||||
|
||||
$existingFile->delete();
|
||||
}
|
||||
|
||||
// Obtener el nombre del catálogo para el nombre del archivo
|
||||
$catalogName = CatalogNameImg::find($nameId);
|
||||
$extension = $file->getClientOriginalExtension();
|
||||
$fileName = $catalogName->name . '_' . date('dmY_His') . '.' . $extension;
|
||||
$path = $file->storeAs("records/{$record->folio}", $fileName, 'public');
|
||||
$md5 = md5_file($file->getRealPath());
|
||||
|
||||
$fileRecord = File::create([
|
||||
'name_id' => $nameId,
|
||||
'path' => $path,
|
||||
'md5' => $md5,
|
||||
'record_id' => $record->id,
|
||||
]);
|
||||
|
||||
$uploadedFiles[] = [
|
||||
'id' => $fileRecord->id,
|
||||
'name' => $catalogName->name,
|
||||
'path' => $fileRecord->path,
|
||||
'url' => $fileRecord->url,
|
||||
'replaced' => $existingFile !== null,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Registrar el log de cambios si hubo actualizaciones
|
||||
if ($hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0) {
|
||||
VehicleTagLog::create([
|
||||
'vehicle_id' => $vehicle->id,
|
||||
'tag_id' => $tag->id,
|
||||
'action_type' => 'actualizacion',
|
||||
'performed_by' => Auth::id()
|
||||
]);
|
||||
}
|
||||
|
||||
// datos para REPUVE Nacional usando datos actuales de la BD
|
||||
if ($hasVehicleChanges || $hasOwnerChanges || count($uploadedFiles) > 0) {
|
||||
// Recargar el vehículo y propietario con los datos actualizados
|
||||
$vehicle->refresh();
|
||||
$owner->refresh();
|
||||
|
||||
$datosCompletos = [
|
||||
'ent_fed' => $owner->ent_fed ?? '',
|
||||
'ofcexp' => $vehicle->ofcexpedicion ?? '',
|
||||
'fechaexp' => $vehicle->fechaexpedicion ?? '',
|
||||
'placa' => $vehicle->placa ?? '',
|
||||
'tarjetacir' => $vehicle->rfv ?? '',
|
||||
'marca' => $vehicle->marca ?? '',
|
||||
'submarca' => $vehicle->linea ?? '',
|
||||
'version' => $vehicle->sublinea ?? '',
|
||||
'clase_veh' => $vehicle->clase_veh ?? '',
|
||||
'tipo_veh' => $vehicle->tipo_veh ?? '',
|
||||
'tipo_uso' => $vehicle->tipo_servicio ?? '',
|
||||
'modelo' => $vehicle->modelo ?? '',
|
||||
'color' => $vehicle->color ?? '',
|
||||
'motor' => $vehicle->numero_motor ?? '',
|
||||
'niv' => $vehicle->niv ?? '',
|
||||
'rfv' => $vehicle->rfv ?? '',
|
||||
'numptas' => $vehicle->numptas ?? '',
|
||||
'observac' => $vehicle->observac ?? '',
|
||||
'tipopers' => $owner->tipopers ?? '',
|
||||
'curp' => $owner->curp ?? '',
|
||||
'rfc' => $owner->rfc ?? '',
|
||||
'pasaporte' => $owner->pasaporte ?? '',
|
||||
'licencia' => $owner->licencia ?? '',
|
||||
'nombre' => $owner->name ?? '',
|
||||
'ap_paterno' => $owner->paternal ?? '',
|
||||
'ap_materno' => $owner->maternal ?? '',
|
||||
'munic' => $owner->munic ?? '',
|
||||
'callep' => $owner->callep ?? '',
|
||||
'num_ext' => $owner->num_ext ?? '',
|
||||
'num_int' => $owner->num_int ?? '',
|
||||
'colonia' => $owner->colonia ?? '',
|
||||
'cp' => $owner->cp ?? '',
|
||||
'cve_vehi' => $vehicle->cve_vehi ?? '',
|
||||
'nrpv' => $vehicle->nrpv ?? '',
|
||||
'tipo_mov' => $vehicle->tipo_mov ?? '',
|
||||
];
|
||||
|
||||
// Enviar job a REPUVE Nacional
|
||||
ProcessRepuveResponse::dispatch($record->id, $datosCompletos);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
// Recargar relaciones para la respuesta
|
||||
$record->load(['vehicle.owner', 'vehicle.tag', 'files', 'error']);
|
||||
|
||||
$message = 'Expediente 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' => $record,
|
||||
'uploaded_files' => $uploadedFiles,
|
||||
'replaced_count' => count($replacedFiles),
|
||||
'total_files' => File::where('record_id', $record->id)->count(),
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
|
||||
return ApiResponse::INTERNAL_ERROR->response([
|
||||
'message' => 'Error al actualizar el expediente',
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,8 +134,6 @@ private function parseVehicleResponse(string $soapResponse, string $niv)
|
||||
'pedimento',
|
||||
'fecha_pedimento',
|
||||
'clave_importador',
|
||||
'folio_ci',
|
||||
'identificador_ci',
|
||||
'observaciones'
|
||||
];
|
||||
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
//Rutas de Actualización
|
||||
Route::get('consulta', [UpdateController::class, 'vehicleData']);
|
||||
Route::post('actualizar', [UpdateController::class, 'vehicleUpdate']);
|
||||
Route::post('actualizar-expediente', [UpdateController::class, 'updateData']);
|
||||
|
||||
// Rutas de cancelación de constancias
|
||||
Route::resource('/razones-cancelacion', CatalogController::class);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user