interim fix for drop downs, BROKEN FIX

This commit is contained in:
Mark Gregory
2026-07-07 12:14:24 +01:00
parent 9cc2ce530e
commit d2c1f744c3
67 changed files with 168 additions and 4105 deletions
+15 -193
View File
@@ -1,13 +1,13 @@
@csrf
<div class="grid gap-6 lg:grid-cols-2">
<div class="grid gap-5 md:grid-cols-2">
<div>
<label for="name" class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Company name</label>
<input
id="name"
name="name"
value="{{ old('name', $company->name) }}"
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"
class="mt-2 w-full rounded-xl border-zinc-300 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 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"
class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white"
>
@error('billing_email')
<p class="mt-1 text-sm text-red-600 dark:text-red-400">{{ $message }}</p>
@@ -35,7 +35,7 @@
<select
id="status"
name="status"
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"
class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white"
required
>
<option value="active" @selected(old('status', $company->status) === 'active')>Active</option>
@@ -47,23 +47,19 @@
@enderror
</div>
<div>
<div class="wms-select2-field">
<label for="country_id" class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Country</label>
<select
id="country_id"
name="country_id"
data-company-country-select2
data-placeholder="Search and select country"
class="wms-country-select mt-2 w-full"
data-wms-select2
data-placeholder="Search and select a country"
class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white"
>
<option value=""></option>
@foreach($countries as $country)
<option
value="{{ $country->id }}"
data-code="{{ $country->alpha2 }}"
@selected(old('country_id', $company->address?->country_id) == $country->id)
>
{{ $country->display_name ?? $country->common_name ?? $country->name }}
<option value="">Search and select a country</option>
@foreach ($countries as $country)
<option value="{{ $country->id }}" @selected((int) old('country_id', $company->country_id ?? $company->address?->country_id) === $country->id)>
{{ $country->effective_name ?? $country->name }}
</option>
@endforeach
</select>
@@ -73,189 +69,15 @@
</div>
</div>
<div class="mt-8 flex flex-wrap items-center gap-3 border-t border-zinc-200 pt-6 dark:border-zinc-800">
<button class="rounded-xl bg-green-600 px-5 py-2.5 text-sm font-semibold text-white shadow-sm shadow-green-950/20 transition hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-green-500/40">
<div class="mt-6 flex flex-wrap items-center gap-3">
<button class="rounded-xl bg-zinc-900 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-zinc-700 dark:bg-white dark:text-zinc-900">
Save company
</button>
<a
href="{{ $company->exists ? route('platform.companies.show', $company) : route('platform.companies.index') }}"
class="rounded-xl border border-zinc-300 px-5 py-2.5 text-sm font-semibold text-zinc-700 transition hover:bg-zinc-50 dark:border-zinc-700 dark:text-zinc-200 dark:hover:bg-zinc-800"
class="rounded-xl border border-zinc-300 px-4 py-2 text-sm font-semibold text-zinc-700 hover:bg-zinc-50 dark:border-zinc-700 dark:text-zinc-200 dark:hover:bg-zinc-800"
>
Cancel
</a>
</div>
@once
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">
<style>
.wms-country-select.select2-hidden-accessible {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
.wms-country-select + .select2-container {
display: block !important;
width: 100% !important;
margin-top: 0.5rem !important;
}
.wms-country-select + .select2-container .select2-selection--single {
height: 3rem !important;
min-height: 3rem !important;
display: flex !important;
align-items: center !important;
border-radius: 0.75rem !important;
border: 1px solid rgb(63 63 70) !important;
background: rgb(9 9 11) !important;
box-shadow: none !important;
transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease !important;
}
.wms-country-select + .select2-container .select2-selection--single .select2-selection__rendered {
width: 100% !important;
height: 3rem !important;
line-height: 3rem !important;
padding-left: 1rem !important;
padding-right: 2.75rem !important;
color: rgb(244 244 245) !important;
font-size: 0.875rem !important;
}
.wms-country-select + .select2-container .select2-selection--single .select2-selection__placeholder {
color: rgb(161 161 170) !important;
}
.wms-country-select + .select2-container .select2-selection--single .select2-selection__arrow {
height: 3rem !important;
right: 0.75rem !important;
top: 0 !important;
}
.wms-country-select + .select2-container .select2-selection--single .select2-selection__arrow b {
border-color: rgb(161 161 170) transparent transparent transparent !important;
}
.wms-country-select + .select2-container .select2-selection--single .select2-selection__clear {
margin-right: 0.5rem !important;
color: rgb(161 161 170) !important;
font-size: 1rem !important;
font-weight: 700 !important;
}
.wms-country-select + .select2-container.select2-container--focus .select2-selection--single,
.wms-country-select + .select2-container.select2-container--open .select2-selection--single {
border-color: rgb(59 130 246) !important;
box-shadow: 0 0 0 3px rgb(59 130 246 / 0.28) !important;
}
.select2-container--open .select2-dropdown.wms-country-select2-dropdown,
.wms-country-select2-dropdown {
border: 1px solid rgb(63 63 70) !important;
border-radius: 0.875rem !important;
overflow: hidden !important;
background: rgb(24 24 27) !important;
box-shadow: 0 20px 35px -15px rgb(0 0 0 / 0.7) !important;
}
.wms-country-select2-dropdown .select2-search--dropdown {
padding: 0.75rem !important;
border-bottom: 1px solid rgb(63 63 70) !important;
background: rgb(24 24 27) !important;
}
.wms-country-select2-dropdown .select2-search__field {
min-height: 2.5rem !important;
border-radius: 0.75rem !important;
border: 1px solid rgb(63 63 70) !important;
background: rgb(9 9 11) !important;
padding: 0.5rem 0.75rem !important;
color: rgb(244 244 245) !important;
outline: none !important;
}
.wms-country-select2-dropdown .select2-results__option {
padding: 0.7rem 0.9rem !important;
color: rgb(228 228 231) !important;
font-size: 0.875rem !important;
}
.wms-country-select2-dropdown .select2-results__option--highlighted.select2-results__option--selectable {
background: rgb(37 99 235) !important;
color: white !important;
}
.wms-country-select2-dropdown .select2-results__option--selected {
background: rgb(22 101 52) !important;
color: white !important;
}
</style>
<script>
(function () {
function loadScript(src, callback) {
var existing = document.querySelector('script[src="' + src + '"]');
if (existing) {
existing.addEventListener('load', callback, { once: true });
callback();
return;
}
var script = document.createElement('script');
script.src = src;
script.defer = true;
script.onload = callback;
document.head.appendChild(script);
}
function initCompanyCountrySelect2() {
if (!window.jQuery || !window.jQuery.fn || !window.jQuery.fn.select2) {
return;
}
window.jQuery('[data-company-country-select2]').each(function () {
var select = window.jQuery(this);
if (select.hasClass('select2-hidden-accessible')) {
return;
}
select.select2({
width: '100%',
placeholder: select.data('placeholder') || 'Search and select country',
allowClear: true,
dropdownAutoWidth: false,
dropdownCssClass: 'wms-country-select2-dropdown',
selectionCssClass: 'wms-country-select2-selection'
});
});
}
window.initialiseCompanyCountrySelect2 = initCompanyCountrySelect2;
function bootCompanyCountrySelect2() {
if (window.jQuery && window.jQuery.fn && window.jQuery.fn.select2) {
initCompanyCountrySelect2();
return;
}
loadScript('https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js', function () {
loadScript('https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js', initCompanyCountrySelect2);
});
}
document.addEventListener('DOMContentLoaded', bootCompanyCountrySelect2);
document.addEventListener('livewire:navigated', bootCompanyCountrySelect2);
bootCompanyCountrySelect2();
})();
</script>
@endonce
@@ -1,16 +0,0 @@
<x-layouts::app :title="__('Create Company')">
<div class="space-y-6">
<x-wms.page-hero
eyebrow="Platform Administration"
title="Create company"
description="Add a new tenant company and prepare it for users, warehouses and licences."
icon="fa-solid fa-building-circle-plus"
/>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<form method="POST" action="{{ route('platform.companies.store') }}">
@include('company::_form')
</form>
</div>
</div>
</x-layouts::app>
@@ -1,17 +0,0 @@
<x-layouts::app :title="__('Edit Company')">
<div class="space-y-6">
<x-wms.page-hero
eyebrow="Platform Administration"
title="Edit company"
description="Update tenant company details, status and billing contact."
icon="fa-solid fa-building"
/>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<form method="POST" action="{{ route('platform.companies.update', $company) }}">
@method('PUT')
@include('company::_form')
</form>
</div>
</div>
</x-layouts::app>
+33 -100
View File
@@ -30,86 +30,45 @@
</a>
</div>
<form method="POST" action="{{ route('platform.companies.store') }}" class="mt-6">
<form method="POST" action="{{ route('platform.companies.store') }}" class="mt-5 grid gap-4 md:grid-cols-5">
@csrf
<div class="grid gap-5 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,1.15fr)_minmax(12rem,.75fr)_minmax(18rem,1.15fr)_auto] xl:items-end">
<div>
<label for="quick_company_name" class="block text-xs font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Company</label>
<input
id="quick_company_name"
name="name"
value="{{ old('name') }}"
placeholder="Company name"
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')
<p class="mt-1 text-sm text-red-600 dark:text-red-400">{{ $message }}</p>
@enderror
</div>
<input
name="name"
value="{{ old('name') }}"
placeholder="Company name"
class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white"
required
>
<div>
<label for="quick_billing_email" class="block text-xs font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Billing email</label>
<input
id="quick_billing_email"
name="billing_email"
value="{{ old('billing_email') }}"
placeholder="billing@example.com"
type="email"
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')
<p class="mt-1 text-sm text-red-600 dark:text-red-400">{{ $message }}</p>
@enderror
</div>
<input
name="billing_email"
value="{{ old('billing_email') }}"
placeholder="billing@example.com"
type="email"
class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white"
>
<div>
<label for="quick_status" class="block text-xs font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Status</label>
<select
id="quick_status"
name="status"
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
>
<option value="active" @selected(old('status', 'active') === 'active')>Active</option>
<option value="suspended" @selected(old('status') === 'suspended')>Suspended</option>
<option value="inactive" @selected(old('status') === 'inactive')>Inactive</option>
</select>
@error('status')
<p class="mt-1 text-sm text-red-600 dark:text-red-400">{{ $message }}</p>
@enderror
</div>
<select name="status" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" required>
<option value="active" @selected(old('status', 'active') === 'active')>Active</option>
<option value="suspended" @selected(old('status') === 'suspended')>Suspended</option>
<option value="inactive" @selected(old('status') === 'inactive')>Inactive</option>
</select>
<div>
<label for="quick_country_id" class="block text-xs font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Country</label>
<select
id="quick_country_id"
name="country_id"
data-company-country-select2
data-placeholder="Search and select country"
class="wms-country-select mt-2 w-full"
>
<option value=""></option>
@foreach($countries as $country)
<option
value="{{ $country->id }}"
data-code="{{ $country->alpha2 }}"
@selected(old('country_id') == $country->id)
>
{{ $country->display_name ?? $country->common_name ?? $country->name }}
</option>
@endforeach
</select>
@error('country_id')
<p class="mt-1 text-sm text-red-600 dark:text-red-400">{{ $message }}</p>
@enderror
</div>
<button class="h-12 rounded-xl bg-green-600 px-6 text-sm font-bold text-white shadow-sm shadow-green-950/20 transition hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-green-500/40">
Create
</button>
<div class="wms-select2-field">
<select name="country_id" data-wms-select2 data-placeholder="Search country" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
<option value="">Search country</option>
@foreach ($countries as $country)
<option value="{{ $country->id }}" @selected((int) old('country_id') === $country->id)>
{{ $country->effective_name ?? $country->name }}
</option>
@endforeach
</select>
</div>
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">
Create
</button>
</form>
</div>
<div class="overflow-x-auto rounded-2xl bg-white shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
@@ -212,30 +171,4 @@
{{ $companies->links() }}
</div>
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', () => {
$('[data-company-country-select2]').select2({
width: '100%',
placeholder: 'Search and select country',
allowClear: true,
dropdownAutoWidth: false,
sorter: data => data.sort((a, b) => a.text.localeCompare(b.text)),
});
});
</script>
@endpush
</x-layouts::app>
@@ -1,47 +0,0 @@
@php($address = $address ?? null)
<div class="grid gap-4 md:grid-cols-2">
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Label</label>
<input name="label" value="{{ old('label', $address?->label ?? $defaultLabel ?? 'Registered office') }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Attention</label>
<input name="attention" value="{{ old('attention', $address?->attention) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div class="md:col-span-2">
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Address line 1</label>
<input name="line_1" value="{{ old('line_1', $address?->line_1) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" required>
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Address line 2</label>
<input name="line_2" value="{{ old('line_2', $address?->line_2) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Address line 3</label>
<input name="line_3" value="{{ old('line_3', $address?->line_3) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Town / City</label>
<input name="locality" value="{{ old('locality', $address?->locality) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" required>
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">County / State / Region</label>
<input name="administrative_area" value="{{ old('administrative_area', $address?->administrative_area) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Postcode / ZIP</label>
<input name="postal_code" value="{{ old('postal_code', $address?->postal_code) }}" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white">
</div>
<div>
<label class="block text-sm font-semibold text-zinc-700 dark:text-zinc-200">Country</label>
<select name="country_id" class="mt-2 w-full rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" required>
<option value="">Select country</option>
@foreach ($countries as $country)
<option value="{{ $country->id }}" @selected((int) old('country_id', $address?->country_id) === $country->id)>{{ $country->effective_name ?? $country->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="mt-4">
<button class="rounded-xl bg-zinc-900 px-4 py-2 text-sm font-semibold text-white dark:bg-white dark:text-zinc-900">Save address</button>
</div>
@@ -1,140 +0,0 @@
<x-layouts::app :title="$company->name">
<div class="space-y-6">
<x-wms.page-hero eyebrow="Company Workbench" :title="$company->name" description="Manage the tenant profile, address, divisions, director coverage and warehouse alignment." icon="fa-solid fa-building" />
<div class="grid gap-4 md:grid-cols-2 xl:grid-cols-5">
<div class="rounded-3xl bg-white p-5 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><p class="text-sm text-zinc-500">Users</p><p class="mt-2 text-3xl font-bold">{{ $company->users_count }}</p></div>
<div class="rounded-3xl bg-white p-5 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><p class="text-sm text-zinc-500">Divisions</p><p class="mt-2 text-3xl font-bold">{{ $company->divisions_count }}</p></div>
<div class="rounded-3xl bg-white p-5 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><p class="text-sm text-zinc-500">Warehouses</p><p class="mt-2 text-3xl font-bold">{{ $company->warehouses_count }}</p></div>
<div class="rounded-3xl bg-white p-5 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><p class="text-sm text-zinc-500">Licences</p><p class="mt-2 text-3xl font-bold">{{ $company->license_keys_count }}</p></div>
<div class="rounded-3xl bg-white p-5 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800"><p class="text-sm text-zinc-500">Payments</p><p class="mt-2 text-3xl font-bold">{{ $company->payments_count }}</p></div>
</div>
<div class="grid gap-6 xl:grid-cols-3">
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800 xl:col-span-2">
<div class="flex items-start justify-between gap-4">
<div><h2 class="text-lg font-bold text-zinc-900 dark:text-white">Company profile</h2><p class="mt-1 text-sm text-zinc-500">Core tenant identity and operational status.</p></div>
<a href="{{ route('platform.companies.edit', $company) }}" class="rounded-xl bg-blue-600 px-4 py-2 text-sm font-semibold text-white">Edit company</a>
</div>
<dl class="mt-6 grid gap-5 md:grid-cols-2">
<div><dt class="text-sm text-zinc-500">Billing email</dt><dd class="font-semibold">{{ $company->billing_email ?? '—' }}</dd></div>
<div><dt class="text-sm text-zinc-500">Status</dt><dd class="font-semibold">{{ $company->is_system_company ? 'System' : ucfirst($company->status) }}</dd></div>
<div><dt class="text-sm text-zinc-500">Timezone</dt><dd class="font-semibold">{{ $company->timezone }}</dd></div>
<div><dt class="text-sm text-zinc-500">Slug</dt><dd class="font-semibold">{{ $company->slug }}</dd></div>
</dl>
</div>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Quick actions</h2>
<div class="mt-5 space-y-3">
<a href="{{ route('platform.companies.index') }}" class="block rounded-xl border border-zinc-300 px-4 py-2 text-center text-sm font-semibold">Back to companies</a>
@unless ($company->is_system_company)
<form method="POST" action="{{ route('platform.companies.destroy', $company) }}" onsubmit="return confirm('Delete this company? This cannot be undone.');">@csrf @method('DELETE')<button class="w-full rounded-xl bg-red-600 px-4 py-2 text-sm font-semibold text-white">Delete company</button></form>
@endunless
</div>
</div>
</div>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Company address</h2>
@if ($company->address)
<p class="mt-2 text-sm text-zinc-600 dark:text-zinc-300">{{ $company->address->formatted }}</p>
@else
<p class="mt-2 text-sm text-zinc-500">No company address has been recorded.</p>
@endif
<form method="POST" action="{{ route('platform.companies.address.update', $company) }}" class="mt-5">
@csrf @method('PUT')
@include('company::partials.address-form', ['address' => $company->address, 'defaultLabel' => 'Registered office'])
</form>
</div>
<div class="grid gap-6 xl:grid-cols-2">
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Create division</h2>
<form method="POST" action="{{ route('platform.companies.divisions.store', $company) }}" class="mt-5 grid gap-4 md:grid-cols-2">
@csrf
<input name="name" placeholder="Division name" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required>
<input name="code" placeholder="Optional code" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<select name="status" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option value="active">Active</option><option value="suspended">Suspended</option><option value="inactive">Inactive</option></select>
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Create division</button>
<textarea name="description" placeholder="Description" class="md:col-span-2 rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"></textarea>
</form>
</div>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Director coverage</h2>
<form method="POST" action="{{ route('platform.companies.director-assignments.store', $company) }}" class="mt-5 grid gap-4 md:grid-cols-2">
@csrf
<select name="user_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required><option value="">Select user</option>@foreach($companyUsers as $user)<option value="{{ $user->id }}">{{ $user->name }}</option>@endforeach</select>
<select name="coverage_type" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option value="company">Whole company</option><option value="division">Specific division</option></select>
<select name="company_division_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option value="">No division</option>@foreach($company->divisions as $division)<option value="{{ $division->id }}">{{ $division->name }}</option>@endforeach</select>
<button class="rounded-xl bg-zinc-900 px-4 py-2 font-semibold text-white dark:bg-white dark:text-zinc-900">Assign director</button>
</form>
<div class="mt-5 space-y-3">
@forelse($company->directorAssignments as $assignment)
<div class="flex items-center justify-between rounded-2xl border border-zinc-200 p-3 dark:border-zinc-800"><span>{{ $assignment->user?->name }} — {{ $assignment->coverage_type === 'company' ? 'Whole company' : $assignment->division?->name }}</span><form method="POST" action="{{ route('platform.companies.director-assignments.destroy', [$company, $assignment]) }}">@csrf @method('DELETE')<button class="text-sm font-semibold text-red-600">Remove</button></form></div>
@empty <p class="text-sm text-zinc-500">No director coverage recorded.</p> @endforelse
</div>
</div>
</div>
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<h2 class="text-lg font-bold text-zinc-900 dark:text-white">Warehouse division and address alignment</h2>
<p class="mt-1 text-sm text-zinc-500">Warehouses remain tenant-scoped to the company. Assign a division only when that operating structure exists and record an optional warehouse operating address where needed.</p>
<div class="mt-5 space-y-5">
@forelse($company->warehouses as $warehouse)
<div class="rounded-2xl border border-zinc-200 p-4 dark:border-zinc-800">
<div class="grid gap-3 md:grid-cols-3">
<div>
<p class="font-semibold text-zinc-900 dark:text-white">{{ $warehouse->name }}</p>
<p class="text-sm text-zinc-500">{{ $warehouse->code }} · {{ $warehouse->division?->name ?? 'Company-level warehouse' }}</p>
@if ($warehouse->address)
<p class="mt-2 text-xs text-zinc-500">{{ $warehouse->address->formatted }}</p>
@else
<p class="mt-2 text-xs text-zinc-500">No warehouse address recorded.</p>
@endif
</div>
<form method="POST" action="{{ route('platform.companies.warehouses.division.update', [$company, $warehouse]) }}" class="contents">
@csrf @method('PUT')
<select name="division_id" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">
<option value="">Company-level warehouse</option>
@foreach($company->divisions as $divisionOption)
<option value="{{ $divisionOption->id }}" @selected($warehouse->division_id === $divisionOption->id)>{{ $divisionOption->name }}</option>
@endforeach
</select>
<button class="rounded-xl bg-blue-600 px-4 py-2 text-sm font-semibold text-white">Update assignment</button>
</form>
</div>
<details class="mt-4 rounded-2xl bg-zinc-50 p-4 dark:bg-zinc-950">
<summary class="cursor-pointer text-sm font-semibold text-zinc-900 dark:text-white">Edit warehouse address</summary>
<form method="POST" action="{{ route('platform.companies.warehouses.address.update', [$company, $warehouse]) }}" class="mt-4">
@csrf @method('PUT')
@include('company::partials.address-form', ['address' => $warehouse->address, 'defaultLabel' => 'Warehouse address'])
</form>
</details>
</div>
@empty
<p class="text-sm text-zinc-500">No warehouses exist for this company yet.</p>
@endforelse
</div>
</div>
<div class="space-y-6">
<h2 class="text-xl font-bold text-zinc-900 dark:text-white">Divisions</h2>
@forelse($company->divisions as $division)
<div class="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">
<div class="flex flex-wrap items-start justify-between gap-4">
<div><h3 class="text-lg font-bold">{{ $division->name }}</h3><p class="text-sm text-zinc-500">{{ $division->code ?? 'No code' }} · {{ ucfirst($division->status) }} · {{ $division->warehouses->count() }} warehouses</p></div>
<form method="POST" action="{{ route('platform.companies.divisions.destroy', [$company, $division]) }}" onsubmit="return confirm('Delete this division?');">@csrf @method('DELETE')<button class="rounded-xl bg-red-600 px-4 py-2 text-sm font-semibold text-white">Delete division</button></form>
</div>
<form method="POST" action="{{ route('platform.companies.divisions.update', [$company, $division]) }}" class="mt-5 grid gap-4 md:grid-cols-4">@csrf @method('PUT')<input name="name" value="{{ $division->name }}" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950" required><input name="code" value="{{ $division->code }}" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><select name="status" class="rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950"><option value="active" @selected($division->status === 'active')>Active</option><option value="suspended" @selected($division->status === 'suspended')>Suspended</option><option value="inactive" @selected($division->status === 'inactive')>Inactive</option></select><button class="rounded-xl bg-blue-600 px-4 py-2 font-semibold text-white">Update division</button><textarea name="description" class="md:col-span-4 rounded-xl border-zinc-300 dark:border-zinc-700 dark:bg-zinc-950">{{ $division->description }}</textarea></form>
<div class="mt-6"><h4 class="font-semibold">Division address</h4><form method="POST" action="{{ route('platform.companies.divisions.address.update', [$company, $division]) }}" class="mt-4">@csrf @method('PUT')@include('company::partials.address-form', ['address' => $division->address, 'defaultLabel' => 'Operating address'])</form></div>
</div>
@empty
<div class="rounded-3xl bg-white p-6 text-sm text-zinc-500 shadow-sm ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-800">No divisions exist. Warehouses can remain directly under the company until divisions are introduced.</div>
@endforelse
</div>
</div>
</x-layouts::app>