diff --git a/Modules/Company/Http/Controllers/CompanyController.php b/Modules/Company/Http/Controllers/CompanyController.php index dcb586a8..36911dc6 100644 --- a/Modules/Company/Http/Controllers/CompanyController.php +++ b/Modules/Company/Http/Controllers/CompanyController.php @@ -16,48 +16,56 @@ class CompanyController extends Controller public function index() { return view('company::index', [ - 'companies' => Company::withCount(['users', 'warehouses', 'licenseKeys'])->latest('id')->paginate(20), + 'companies' => Company::query() + ->withCount(['users', 'warehouses', 'licenseKeys']) + ->latest('id') + ->paginate(20), ]); } /** - * Create a company tenant. + * Show the create company screen. + */ + public function create() + { + return view('company::create', [ + 'company' => new Company([ + 'status' => 'active', + 'timezone' => 'Europe/London', + ]), + ]); + } + + /** + * Store a company tenant. */ public function store(Request $request) { - $data = $request->validate([ - 'name' => ['required', 'string', 'max:255'], - 'billing_email' => ['nullable', 'email', 'max:255'], - 'status' => ['required', 'in:active,suspended'], - ]); - - Company::create([ - ...$data, - 'slug' => Str::slug($data['name']), - 'timezone' => 'Europe/London', - ]); - - return back()->with('status', 'Company created.'); - } - - public function create() - { - - return view('company::create', [ - - 'company' => new Company, - - ]); + $company = Company::create($this->validated($request)); + return redirect() + ->route('platform.companies.show', $company) + ->with('status', 'Company created.'); } + /** + * Display a company workbench. + */ public function show(Company $company) { + $company->loadCount(['users', 'warehouses', 'licenseKeys', 'payments']); + return view('company::show', [ 'company' => $company, + 'recentUsers' => $company->users()->latest('id')->limit(5)->get(), + 'recentWarehouses' => $company->warehouses()->latest('id')->limit(5)->get(), + 'recentLicenseKeys' => $company->licenseKeys()->latest('id')->limit(5)->get(), ]); } + /** + * Show the edit company screen. + */ public function edit(Company $company) { return view('company::edit', [ @@ -65,6 +73,9 @@ class CompanyController extends Controller ]); } + /** + * Update a company tenant. + */ public function update(Request $request, Company $company) { $company->update($this->validated($request, $company)); @@ -74,8 +85,13 @@ class CompanyController extends Controller ->with('status', 'Company updated.'); } + /** + * Delete a company tenant. + */ public function destroy(Company $company) { + abort_if($company->is_system_company, 403, 'The system company cannot be deleted.'); + $company->delete(); return redirect() @@ -85,10 +101,16 @@ class CompanyController extends Controller private function validated(Request $request, ?Company $company = null): array { - return $request->validate([ + $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], - 'billing_email' => ['required', 'email', 'max:255'], - 'status' => ['required', Rule::in(['active', 'inactive'])], + 'billing_email' => ['nullable', 'email', 'max:255'], + 'status' => ['required', Rule::in(['active', 'suspended', 'inactive'])], + 'timezone' => ['nullable', 'string', 'max:64'], ]); + + $data['slug'] = Str::slug($data['name']); + $data['timezone'] = $data['timezone'] ?: ($company?->timezone ?: 'Europe/London'); + + return $data; } } diff --git a/Modules/Company/Resources/views/_form.blade.php b/Modules/Company/Resources/views/_form.blade.php index cf989ca7..5ddfb4b0 100644 --- a/Modules/Company/Resources/views/_form.blade.php +++ b/Modules/Company/Resources/views/_form.blade.php @@ -1,47 +1,75 @@ -{{-- Modules/Company/resources/views/companies/_form.blade.php --}} - @csrf -
{{ $message }}
@enderror + @error('name') +{{ $message }}
+ @enderror{{ $message }}
@enderror + @error('billing_email') +{{ $message }}
+ @enderror{{ $message }}
+ @enderrorUsers
+{{ $company->users_count }}
+Warehouses
+{{ $company->warehouses_count }}
+Licences
+{{ $company->license_keys_count }}
+Payments
+{{ $company->payments_count }}
+Core tenant identity and operational status.
+{{ $user->name }}
+{{ $user->email }}
+No users found.
+ @endforelse{{ $warehouse->name }}
+{{ $warehouse->code ?? '—' }}
+No warehouses found.
+ @endforelse +{{ ucfirst($license->plan ?? 'Licence') }}
+{{ ucfirst($license->status ?? 'unknown') }}
+No licences found.
+ @endforelse +