authorizeAbility($request, 'settings.view'); $organization = $this->organization($request); $member = $this->member($request); $canManage = app(\App\Services\Care\CarePermissions::class)->can($member, 'settings.manage'); return view('care.settings.modules', [ 'organization' => $organization, 'canManage' => $canManage, 'canUseSpecialtyModules' => $modules->canManage($organization), 'catalog' => $modules->catalog(), 'enabled' => collect($modules->enabledKeys($organization))->flip()->all(), 'planKey' => $plans->planKey($organization), ]); } public function update(Request $request, SpecialtyModuleService $modules): RedirectResponse { $this->authorizeAbility($request, 'settings.manage'); $organization = $this->organization($request); if (! $modules->canManage($organization)) { return redirect() ->route('care.pro.index') ->with('upsell', 'Specialty modules are part of Care Pro. Upgrade to activate dentistry, eye care, and other specialty practice surfaces.'); } $keys = array_keys($modules->catalog()); $desired = []; foreach ($keys as $key) { $desired[$key] = $request->boolean("modules.{$key}"); } $result = $modules->sync($organization, $this->ownerRef($request), $desired); if ($result['errors'] !== []) { return back()->with('error', 'Some modules could not be updated: '.implode(' ', $result['errors'])); } $parts = []; if ($result['activated'] !== []) { $parts[] = 'Activated '.count($result['activated']).' module(s)'; } if ($result['deactivated'] !== []) { $parts[] = 'Deactivated '.count($result['deactivated']).' module(s)'; } return back()->with('success', $parts !== [] ? implode('. ', $parts).'.' : 'Modules saved.'); } }