middleware('superadmin'); } public function index(): View { return view('admin.user.transfer.index', $this->viewData()); } public function preview(PreviewConsultantTransferRequest $request): View|RedirectResponse { $source = User::findOrFail($request->integer('source_user_id')); $target = User::findOrFail($request->integer('target_user_id')); try { $this->transferService->assertTransferable($source, $target); } catch (ConsultantTransferException $e) { return redirect(route('admin_user_transfer'))->withInput()->with('alert-error', $e->getMessage()); } return view('admin.user.transfer.index', $this->viewData($source, $target, $this->transferService->preview($source))); } public function execute(ExecuteConsultantTransferRequest $request): RedirectResponse { $source = User::findOrFail($request->integer('source_user_id')); $target = User::findOrFail($request->integer('target_user_id')); try { $summary = $this->transferService->transfer($source, $target, Auth::id()); } catch (ConsultantTransferException $e) { return redirect(route('admin_user_transfer'))->withInput()->with('alert-error', $e->getMessage()); } \Session()->flash('alert-success', __('msg.transfer_success', [ 'firstline' => $summary['firstline'], 'customers' => $summary['customers'], 'abos' => $summary['abos'], 'target' => $target->email, ])); return redirect(route('admin_user_transfer')); } /** * @return array */ protected function viewData(?User $source = null, ?User $target = null, ?array $preview = null): array { return [ 'source' => $source, 'target' => $target, 'preview' => $preview, 'sourceOptions' => $this->userOptions(User::query()), 'targetOptions' => $this->userOptions( User::where('active', true)->where('blocked', false)->where('payment_account', '>=', now()) ), ]; } /** * Optionen für die Berater-Auswahl: "Vorname Nachname | E-Mail #M-Account". * * @param Builder $query * @return array */ protected function userOptions($query): array { $options = ['' => __('please select')]; foreach ($query->with('account')->orderBy('email')->get() as $user) { $options[$user->id] = $this->userLabel($user); } return $options; } public static function userLabel(User $user): string { $name = $user->account ? trim($user->account->first_name.' '.$user->account->last_name) : ''; $mAccount = $user->account && $user->account->m_account ? ' #'.$user->account->m_account : ''; return ($name !== '' ? $name.' | ' : '').$user->email.$mAccount; } }