Surface branches and team as explicit settings sections.
Deploy Ladill POS / deploy (push) Successful in 37s

Embed branch list, switching, and team invites on the main settings page; dedicated routes redirect back with anchors.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-08 06:46:17 +00:00
co-authored by Cursor
parent afca49039b
commit 35970dfd2a
10 changed files with 176 additions and 43 deletions
@@ -23,10 +23,9 @@ class LocationController extends Controller
private SubscriptionService $subscriptions,
) {}
public function index(Request $request): View
public function index(Request $request): RedirectResponse
{
$owner = $this->ownerRef($request);
$account = ladill_account() ?? $request->user();
abort_unless(
app(\App\Services\Pos\PosMemberResolver::class)->canManageBranches(
@@ -37,13 +36,7 @@ class LocationController extends Controller
403,
);
$branches = PosLocation::owned($owner)->orderBy('name')->get();
return view('pos.branches.index', [
'branches' => $branches,
'canAddBranch' => $this->subscriptions->canAddLocation($account, $owner),
'hasMultiLocation' => $this->subscriptions->canUseMultiLocation($account),
]);
return redirect()->route('pos.settings')->withFragment('branches');
}
public function create(Request $request): View|RedirectResponse
@@ -85,7 +78,7 @@ class LocationController extends Controller
'is_default' => $isFirst,
]);
return redirect()->route('pos.branches.index')->with('success', 'Branch created.');
return redirect()->route('pos.settings')->withFragment('branches')->with('success', 'Branch created.');
}
public function edit(Request $request, PosLocation $location): View|RedirectResponse
@@ -130,7 +123,7 @@ class LocationController extends Controller
'service_style' => $data['service_style'],
]);
return redirect()->route('pos.branches.index')->with('success', 'Branch updated.');
return redirect()->route('pos.settings')->withFragment('branches')->with('success', 'Branch updated.');
}
public function destroy(Request $request, PosLocation $location): RedirectResponse
@@ -165,7 +158,7 @@ class LocationController extends Controller
$request->session()->forget('ladill_pos_location');
}
return redirect()->route('pos.branches.index')->with('success', 'Branch removed.');
return redirect()->route('pos.settings')->withFragment('branches')->with('success', 'Branch removed.');
}
public function switch(Request $request): RedirectResponse
+4 -12
View File
@@ -12,7 +12,6 @@ use App\Services\Pos\SubscriptionService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\View\View;
class MemberController extends Controller
{
@@ -20,20 +19,13 @@ class MemberController extends Controller
public function __construct(private SubscriptionService $subscriptions) {}
public function index(Request $request): View|RedirectResponse
public function index(Request $request): RedirectResponse
{
if ($redirect = $this->guardManage($request)) {
return $redirect;
}
$owner = $this->ownerRef($request);
$members = PosMember::owned($owner)->with('location')->orderBy('created_at')->get();
return view('pos.team.index', [
'members' => $members,
'roles' => config('pos.roles', []),
'branches' => PosLocation::owned($owner)->orderBy('name')->get(),
]);
return redirect()->route('pos.settings')->withFragment('team');
}
public function store(Request $request, IdentityTeamClient $identity): RedirectResponse
@@ -89,7 +81,7 @@ class MemberController extends Controller
],
);
return back()->with('success', 'Invitation sent to '.$email.'.');
return back()->withFragment('team')->with('success', 'Invitation sent to '.$email.'.');
}
public function destroy(Request $request, PosMember $member): RedirectResponse
@@ -107,7 +99,7 @@ class MemberController extends Controller
$member->delete();
return back()->with('success', 'Team member removed.');
return back()->withFragment('team')->with('success', 'Team member removed.');
}
private function guardManage(Request $request): ?RedirectResponse
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Pos;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Pos\Concerns\ScopesToAccount;
use App\Models\PosLocation;
use App\Models\PosMember;
use App\Models\PosTable;
use App\Services\Import\CrmProductImportService;
use App\Services\Import\MerchantCatalogImportService;
@@ -28,9 +29,21 @@ class SettingsController extends Controller
{
$owner = $this->ownerRef($request);
$location = $this->location($request);
$account = ladill_account() ?? $request->user();
$scope = $this->locationScope($request);
$branches = $scope === null
? PosLocation::owned($owner)->orderBy('name')->get()
: PosLocation::owned($owner)->whereKey($scope)->orderBy('name')->get();
return view('pos.settings', [
'location' => $location,
'branches' => $branches,
'members' => PosMember::owned($owner)->with('location')->orderBy('created_at')->get(),
'roles' => config('pos.roles', []),
'hasMultiLocation' => $this->subscriptions->canUseMultiLocation($account),
'hasTeamFeatures' => $this->subscriptions->canManageTeam($account),
'canAddBranch' => $this->subscriptions->canAddLocation($account, $owner),
'merchantImportEnabled' => (bool) config('pos.merchant_import_enabled', true),
'tables' => $this->scopeToLocation($request, PosTable::owned($owner))
->orderBy('area')->orderBy('position')->orderBy('label')->get(),