From 12c1470319ed6a2d237bc18dee0a7287b16b601f Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Tue, 7 Jul 2026 12:38:13 +0100 Subject: [PATCH] interim fix for drop downs, BROKEN FIX, interinm fix --- .../Http/Controllers/CompanyController.php | 63 +++++++++++------- Modules/Company/Models/CompanyAddress.php | 27 ++++++++ .../Models/CompanyDirectorAssignment.php | 27 ++++++++ Modules/Company/Models/CompanyDivision.php | 35 ++++++++++ .../Company/Resources/views/_form.blade.php | 16 ++--- .../Company/Resources/views/create.blade.php | 16 +++++ .../Company/Resources/views/edit.blade.php | 17 +++++ .../Company/Resources/views/index.blade.php | 63 ++++-------------- .../Company/Resources/views/show.blade.php | 66 +++++++++++++++++++ Modules/Platform/routes/web.php | 4 +- 10 files changed, 251 insertions(+), 83 deletions(-) create mode 100644 Modules/Company/Models/CompanyAddress.php create mode 100644 Modules/Company/Models/CompanyDirectorAssignment.php create mode 100644 Modules/Company/Models/CompanyDivision.php create mode 100644 Modules/Company/Resources/views/create.blade.php create mode 100644 Modules/Company/Resources/views/edit.blade.php create mode 100644 Modules/Company/Resources/views/show.blade.php diff --git a/Modules/Company/Http/Controllers/CompanyController.php b/Modules/Company/Http/Controllers/CompanyController.php index 09ede975..729e98ec 100644 --- a/Modules/Company/Http/Controllers/CompanyController.php +++ b/Modules/Company/Http/Controllers/CompanyController.php @@ -4,6 +4,7 @@ namespace Modules\Company\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; use Illuminate\Validation\Rule; use Modules\Company\Models\Company; @@ -16,12 +17,24 @@ class CompanyController extends Controller */ public function index() { + $counts = ['users', 'warehouses', 'licenseKeys']; + + if (Schema::hasTable('company_divisions')) { + $counts[] = 'divisions'; + } + + $companies = Company::query() + ->with(['country']) + ->withCount($counts) + ->orderBy('name') + ->paginate(20); + + $companies->getCollection()->each(function (Company $company): void { + $company->setAttribute('divisions_count', $company->getAttribute('divisions_count') ?? 0); + }); + return view('company::index', [ - 'companies' => Company::query() - ->with(['address.country', 'country']) - ->withCount(['users', 'warehouses', 'licenseKeys', 'divisions']) - ->orderBy('name') - ->paginate(20), + 'companies' => $companies, 'countries' => $this->countries(), ]); } @@ -57,16 +70,20 @@ class CompanyController extends Controller */ public function show(Company $company) { - $company->load([ - 'address.country', - 'divisions.address.country', - 'divisions.warehouses', - 'divisions.users', - 'warehouses.address.country', - 'warehouses.division', - 'directorAssignments.user', - 'directorAssignments.division', - ])->loadCount(['users', 'warehouses', 'licenseKeys', 'payments', 'divisions']); + $loads = ['country']; + $counts = ['users', 'warehouses', 'licenseKeys', 'payments']; + + if (Schema::hasTable('company_divisions')) { + $loads[] = 'divisions'; + $counts[] = 'divisions'; + } + + if (Schema::hasTable('company_director_assignments')) { + $loads[] = 'directorAssignments.user'; + } + + $company->load($loads)->loadCount($counts); + $company->setAttribute('divisions_count', $company->getAttribute('divisions_count') ?? 0); return view('company::show', [ 'company' => $company, @@ -74,8 +91,6 @@ class CompanyController extends Controller 'recentWarehouses' => $company->warehouses()->latest('id')->limit(5)->get(), 'recentLicenseKeys' => $company->licenseKeys()->latest('id')->limit(5)->get(), 'countries' => $this->countries(), - 'companyUsers' => $company->users()->orderBy('name')->get(['id', 'name', 'email', 'company_id']), - 'unassignedWarehouses' => $company->warehouses()->whereNull('division_id')->orderBy('name')->get(), ]); } @@ -85,7 +100,7 @@ class CompanyController extends Controller public function edit(Company $company) { return view('company::edit', [ - 'company' => $company->loadMissing(['address.country', 'country']), + 'company' => $company->loadMissing('country'), 'countries' => $this->countries(), ]); } @@ -125,10 +140,14 @@ class CompanyController extends Controller 'country_id' => ['nullable', Rule::exists('countries', 'id')->where('is_active', true)], ]); - $data['slug'] = Str::slug($data['name']); - $data['timezone'] = $company?->timezone ?: 'Europe/London'; - - return $data; + return [ + 'name' => $data['name'], + 'billing_email' => $data['billing_email'] ?? null, + 'status' => $data['status'], + 'country_id' => $data['country_id'] ?? null, + 'slug' => Str::slug($data['name']), + 'timezone' => $company?->timezone ?: 'Europe/London', + ]; } private function countries() diff --git a/Modules/Company/Models/CompanyAddress.php b/Modules/Company/Models/CompanyAddress.php new file mode 100644 index 00000000..27f84f71 --- /dev/null +++ b/Modules/Company/Models/CompanyAddress.php @@ -0,0 +1,27 @@ + 'boolean', + ]; + + public function addressable(): MorphTo + { + return $this->morphTo(); + } + + public function country(): BelongsTo + { + return $this->belongsTo(Country::class); + } +} diff --git a/Modules/Company/Models/CompanyDirectorAssignment.php b/Modules/Company/Models/CompanyDirectorAssignment.php new file mode 100644 index 00000000..d5ae3435 --- /dev/null +++ b/Modules/Company/Models/CompanyDirectorAssignment.php @@ -0,0 +1,27 @@ +belongsTo(Company::class); + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function division(): BelongsTo + { + return $this->belongsTo(CompanyDivision::class, 'company_division_id'); + } +} diff --git a/Modules/Company/Models/CompanyDivision.php b/Modules/Company/Models/CompanyDivision.php new file mode 100644 index 00000000..af5e12dd --- /dev/null +++ b/Modules/Company/Models/CompanyDivision.php @@ -0,0 +1,35 @@ +belongsTo(Company::class); + } + + public function address(): MorphOne + { + return $this->morphOne(CompanyAddress::class, 'addressable'); + } + + public function warehouses(): HasMany + { + return $this->hasMany(Warehouse::class, 'division_id'); + } + + public function users(): HasMany + { + return $this->hasMany(User::class, 'division_id'); + } +} diff --git a/Modules/Company/Resources/views/_form.blade.php b/Modules/Company/Resources/views/_form.blade.php index e044d2d7..a5bf21dc 100644 --- a/Modules/Company/Resources/views/_form.blade.php +++ b/Modules/Company/Resources/views/_form.blade.php @@ -7,7 +7,7 @@ id="name" name="name" value="{{ old('name', $company->name) }}" - class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" + class="mt-2 h-12 w-full rounded-xl border-zinc-300 bg-white px-4 text-sm text-zinc-900 shadow-sm outline-none transition focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" required > @error('name') @@ -23,7 +23,7 @@ name="billing_email" value="{{ old('billing_email', $company->billing_email) }}" placeholder="billing@example.com" - class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" + class="mt-2 h-12 w-full rounded-xl border-zinc-300 bg-white px-4 text-sm text-zinc-900 shadow-sm outline-none transition focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" > @error('billing_email')

{{ $message }}

@@ -35,7 +35,7 @@ @@ -70,7 +70,7 @@
- diff --git a/Modules/Company/Resources/views/create.blade.php b/Modules/Company/Resources/views/create.blade.php new file mode 100644 index 00000000..9867415d --- /dev/null +++ b/Modules/Company/Resources/views/create.blade.php @@ -0,0 +1,16 @@ + +
+ + +
+
+ @include('company::_form') +
+
+
+
diff --git a/Modules/Company/Resources/views/edit.blade.php b/Modules/Company/Resources/views/edit.blade.php new file mode 100644 index 00000000..d9413df8 --- /dev/null +++ b/Modules/Company/Resources/views/edit.blade.php @@ -0,0 +1,17 @@ + +
+ + +
+
+ @method('PUT') + @include('company::_form') +
+
+
+
diff --git a/Modules/Company/Resources/views/index.blade.php b/Modules/Company/Resources/views/index.blade.php index cbf798f3..1f3661a6 100644 --- a/Modules/Company/Resources/views/index.blade.php +++ b/Modules/Company/Resources/views/index.blade.php @@ -86,11 +86,11 @@ name="country_id" data-wms-select2 data-placeholder="Search and select country" - class="mt-2 w-full" + class="w-full" > - - @foreach ($countries as $country) - + @foreach($countries as $country) + @endforeach @@ -127,23 +127,10 @@ {{ $company->name }} - - - {{ $company->users_count }} - - - - {{ $company->divisions_count }} - - - - {{ $company->warehouses_count }} - - - - {{ $company->license_keys_count }} - - + {{ $company->users_count }} + {{ $company->divisions_count ?? 0 }} + {{ $company->warehouses_count }} + {{ $company->license_keys_count }}
- - View - - - - Edit - + View + Edit @unless ($company->is_system_company) -
+ @csrf @method('DELETE') - - +
@endunless
@@ -196,9 +161,7 @@ @empty - - No companies found. - + No companies found. @endforelse diff --git a/Modules/Company/Resources/views/show.blade.php b/Modules/Company/Resources/views/show.blade.php new file mode 100644 index 00000000..4e80fa21 --- /dev/null +++ b/Modules/Company/Resources/views/show.blade.php @@ -0,0 +1,66 @@ + +
+ + + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+
+

Users

+

{{ $company->users_count ?? 0 }}

+
+
+

Divisions

+

{{ $company->divisions_count ?? 0 }}

+
+
+

Warehouses

+

{{ $company->warehouses_count ?? 0 }}

+
+
+

Licences

+

{{ $company->license_keys_count ?? 0 }}

+
+
+ +
+
+
+

Company details

+
+
+
Billing email
+
{{ $company->billing_email ?: 'Not set' }}
+
+
+
Country
+
{{ $company->country?->display_name ?: $company->country?->common_name ?: $company->country?->name ?: 'Not set' }}
+
+
+
Status
+
{{ ucfirst($company->status) }}
+
+
+
Timezone
+
{{ $company->timezone }}
+
+
+
+ +
+ Edit + Back +
+
+
+
+
diff --git a/Modules/Platform/routes/web.php b/Modules/Platform/routes/web.php index 215514b4..fe86f8ed 100644 --- a/Modules/Platform/routes/web.php +++ b/Modules/Platform/routes/web.php @@ -24,10 +24,8 @@ Route::middleware(['auth', 'verified', 'tenant.assigned', 'platform.admin']) Route::post('/licenses', [LicenseKeyController::class, 'store'])->name('licenses.store'); Route::get('/payments', [PaymentController::class, 'index'])->name('payments.index'); Route::post('/payments', [PaymentController::class, 'store'])->name('payments.store'); - if (! Route::has('platform.companies.index')) { - Route::resource('/companies', CompanyController::class); - } Route::resource('/prices', PlatformPriceController::class)->except(['show']); + Route::resource('/companies', CompanyController::class); }); Route::post('/stripe/webhook', StripeWebhookController::class)->name('stripe.webhook');