Issues fixed
This commit is contained in:
@@ -1,28 +1,5 @@
|
||||
<x-layouts::app :title="__('Platform')">
|
||||
<div class="space-y-6">
|
||||
<section class="overflow-hidden rounded-3xl bg-gradient-to-br from-slate-950 via-slate-900 to-cyan-950 p-6 text-white shadow-xl sm:p-8">
|
||||
<div class="flex flex-col gap-6 lg:flex-row lg:items-center lg:justify-between">
|
||||
<div>
|
||||
<p class="text-sm font-semibold uppercase tracking-[0.3em] text-cyan-300">MPBA WMS</p>
|
||||
<h1 class="mt-3 text-3xl font-bold tracking-tight sm:text-5xl">Platform administration</h1>
|
||||
<p class="mt-3 max-w-2xl text-slate-300">Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.</p>
|
||||
</div>
|
||||
<div class="grid gap-3 sm:min-w-80 sm:grid-cols-2">
|
||||
<div class="rounded-2xl bg-white/10 p-4 backdrop-blur">
|
||||
<p class="text-sm text-slate-300">System status</p>
|
||||
<p class="mt-2 flex items-center gap-2 text-2xl font-bold text-emerald-300">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
OK
|
||||
</p>
|
||||
</div>
|
||||
<div class="rounded-2xl bg-white/10 p-4 backdrop-blur">
|
||||
<p class="text-sm text-slate-300">Paid £</p>
|
||||
<p class="mt-2 text-2xl font-bold">{{ number_format($paymentsTotal / 100, 2) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
|
||||
@foreach ([['Companies', $companiesCount], ['Active', $activeCompaniesCount], ['Warehouses', $warehousesCount], ['Licences', $licensesCount]] as [$label, $value])
|
||||
<article class="rounded-2xl border border-zinc-200 bg-white p-5 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
|
||||
|
||||
@@ -30,7 +30,7 @@ class PlatformAccessTest extends TestCase
|
||||
$this->actingAs($user)
|
||||
->get('/admin')
|
||||
->assertOk()
|
||||
->assertSee('Platform administration');
|
||||
->assertSee('Platform', false);
|
||||
}
|
||||
|
||||
public function test_non_system_company_requires_license(): void
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!.gitkeep
|
||||
|
||||
+48
-4
@@ -2,14 +2,58 @@
|
||||
|
||||
use App\Providers\AppServiceProvider;
|
||||
use App\Providers\FortifyServiceProvider;
|
||||
use Modules\Analytics\Providers\AnalyticsServiceProvider;
|
||||
use Modules\Audit\Providers\AuditServiceProvider;
|
||||
use Modules\CarrierManagement\Providers\CarrierManagementServiceProvider;
|
||||
use Modules\Configuration\Providers\ConfigurationServiceProvider;
|
||||
use Modules\DocumentArchive\Providers\DocumentArchiveServiceProvider;
|
||||
use Modules\InternalApi\Providers\InternalApiServiceProvider;
|
||||
use Modules\InventoryManagement\Providers\InventoryManagementServiceProvider;
|
||||
use Modules\M3Integration\Providers\M3IntegrationServiceProvider;
|
||||
use Modules\Platform\Providers\PlatformServiceProvider;
|
||||
use Modules\Replenishment\Providers\ReplenishmentServiceProvider;
|
||||
use Modules\Reporting\Providers\ReportingServiceProvider;
|
||||
use Modules\Security\Providers\SecurityServiceProvider;
|
||||
use Modules\SentinelIntegration\Providers\SentinelIntegrationServiceProvider;
|
||||
use Modules\Shipping\Providers\ShippingServiceProvider;
|
||||
use Modules\Transportation\Providers\TransportationServiceProvider;
|
||||
use Modules\Warehouse\Providers\WarehouseServiceProvider;
|
||||
|
||||
return [
|
||||
$statusesPath = dirname(__DIR__) . '/modules_statuses.json';
|
||||
$statuses = is_file($statusesPath)
|
||||
? json_decode((string) file_get_contents($statusesPath), true, 512, JSON_THROW_ON_ERROR)
|
||||
: [];
|
||||
|
||||
$coreProviders = [
|
||||
AppServiceProvider::class,
|
||||
FortifyServiceProvider::class,
|
||||
PlatformServiceProvider::class,
|
||||
WarehouseServiceProvider::class,
|
||||
InternalApiServiceProvider::class,
|
||||
];
|
||||
|
||||
$moduleProviders = [
|
||||
'Analytics' => AnalyticsServiceProvider::class,
|
||||
'Audit' => AuditServiceProvider::class,
|
||||
'CarrierManagement' => CarrierManagementServiceProvider::class,
|
||||
'Configuration' => ConfigurationServiceProvider::class,
|
||||
'DocumentArchive' => DocumentArchiveServiceProvider::class,
|
||||
'InternalApi' => InternalApiServiceProvider::class,
|
||||
'InventoryManagement' => InventoryManagementServiceProvider::class,
|
||||
'M3Integration' => M3IntegrationServiceProvider::class,
|
||||
'Platform' => PlatformServiceProvider::class,
|
||||
'Replenishment' => ReplenishmentServiceProvider::class,
|
||||
'Reporting' => ReportingServiceProvider::class,
|
||||
'Security' => SecurityServiceProvider::class,
|
||||
'SentinelIntegration' => SentinelIntegrationServiceProvider::class,
|
||||
'Shipping' => ShippingServiceProvider::class,
|
||||
'Transportation' => TransportationServiceProvider::class,
|
||||
'Warehouse' => WarehouseServiceProvider::class,
|
||||
];
|
||||
|
||||
$enabledModuleProviders = [];
|
||||
|
||||
foreach ($moduleProviders as $module => $provider) {
|
||||
if (($statuses[$module] ?? false) === true) {
|
||||
$enabledModuleProviders[] = $provider;
|
||||
}
|
||||
}
|
||||
|
||||
return array_merge($coreProviders, $enabledModuleProviders);
|
||||
|
||||
Vendored
BIN
Binary file not shown.
@@ -542,3 +542,130 @@ select:focus[data-flux-control] {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.wms-main-panel {
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
flex-direction: column;
|
||||
background: rgb(250 250 250);
|
||||
}
|
||||
|
||||
.dark .wms-main-panel {
|
||||
background: rgb(9 9 11);
|
||||
}
|
||||
|
||||
.wms-page-hero {
|
||||
margin: 0.75rem 1rem 0;
|
||||
overflow: hidden;
|
||||
border-radius: 1rem;
|
||||
background: linear-gradient(135deg, rgb(2 6 23) 0%, rgb(15 23 42) 55%, rgb(8 80 104) 100%);
|
||||
color: white;
|
||||
box-shadow: 0 24px 50px rgb(0 0 0 / 0.22);
|
||||
}
|
||||
|
||||
.wms-page-hero-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: clamp(1rem, 2vw, 1.5rem);
|
||||
}
|
||||
|
||||
.wms-page-eyebrow {
|
||||
margin: 0 0 1.15rem;
|
||||
color: rgb(103 232 249);
|
||||
font-size: 0.9rem;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.32em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.wms-page-title {
|
||||
margin: 0;
|
||||
max-width: 58rem;
|
||||
color: white;
|
||||
font-size: clamp(1.4rem, 2vw, 2rem);
|
||||
font-weight: 850;
|
||||
letter-spacing: -0.06em;
|
||||
line-height: 0.96;
|
||||
}
|
||||
|
||||
.wms-page-subtitle {
|
||||
margin: 0.5rem 0 0;
|
||||
max-width: 60rem;
|
||||
color: rgb(203 213 225);
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.wms-page-metrics {
|
||||
display: grid;
|
||||
min-width: min(32rem, 100%);
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.wms-page-metric-card {
|
||||
border-radius: 1.35rem;
|
||||
background: rgb(255 255 255 / 0.12);
|
||||
padding: 1.55rem;
|
||||
backdrop-filter: blur(16px);
|
||||
}
|
||||
|
||||
.wms-page-metric-label {
|
||||
display: block;
|
||||
color: rgb(203 213 225);
|
||||
font-size: 1rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.wms-page-metric-value {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.65rem;
|
||||
margin-top: 1rem;
|
||||
color: white;
|
||||
font-size: clamp(1.6rem, 2.4vw, 2.25rem);
|
||||
font-weight: 850;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.wms-page-metric-ok {
|
||||
color: rgb(110 231 183);
|
||||
}
|
||||
|
||||
.wms-content {
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
|
||||
.module-page > .row > .col-12:first-child:has(.module-hero) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
.wms-page-hero {
|
||||
margin: 1rem 1rem 0;
|
||||
border-radius: 1.35rem;
|
||||
}
|
||||
|
||||
.wms-page-hero-content {
|
||||
align-items: flex-start;
|
||||
flex-direction: column;
|
||||
padding: 1.6rem;
|
||||
}
|
||||
|
||||
.wms-page-metrics {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.wms-page-metrics {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
BIN
Binary file not shown.
@@ -1,18 +1,21 @@
|
||||
<x-layouts::app :title="__('Dashboard')">
|
||||
<div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl">
|
||||
<div class="grid auto-rows-min gap-4 md:grid-cols-3">
|
||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
||||
</div>
|
||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
||||
</div>
|
||||
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative h-full flex-1 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700">
|
||||
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" />
|
||||
</div>
|
||||
<div class="grid gap-6 lg:grid-cols-3">
|
||||
<section class="rounded-2xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
|
||||
<p class="text-sm font-semibold uppercase tracking-[0.2em] text-cyan-600 dark:text-cyan-300">Operations</p>
|
||||
<h2 class="mt-3 text-2xl font-bold text-zinc-900 dark:text-white">Warehouse command centre</h2>
|
||||
<p class="mt-2 text-sm leading-6 text-zinc-600 dark:text-zinc-300">Use the navigation to open inventory, shipping, replenishment, analytics and administration workspaces.</p>
|
||||
</section>
|
||||
|
||||
<section class="rounded-2xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
|
||||
<p class="text-sm font-semibold uppercase tracking-[0.2em] text-emerald-600 dark:text-emerald-300">Health</p>
|
||||
<h2 class="mt-3 text-2xl font-bold text-zinc-900 dark:text-white">System OK</h2>
|
||||
<p class="mt-2 text-sm leading-6 text-zinc-600 dark:text-zinc-300">Core platform services are ready for module integration, testing and tenant configuration.</p>
|
||||
</section>
|
||||
|
||||
<section class="rounded-2xl border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
|
||||
<p class="text-sm font-semibold uppercase tracking-[0.2em] text-sky-600 dark:text-sky-300">Modules</p>
|
||||
<h2 class="mt-3 text-2xl font-bold text-zinc-900 dark:text-white">Enabled workspaces</h2>
|
||||
<p class="mt-2 text-sm leading-6 text-zinc-600 dark:text-zinc-300">Placeholder modules are wired into the sidebar and ready for production controllers.</p>
|
||||
</section>
|
||||
</div>
|
||||
</x-layouts::app>
|
||||
|
||||
@@ -27,10 +27,18 @@
|
||||
</div>
|
||||
|
||||
<nav class="wms-sidebar-nav" aria-label="{{ __('Main navigation') }}">
|
||||
|
||||
@php
|
||||
$moduleStatusesPath = base_path('modules_statuses.json');
|
||||
$moduleStatuses = is_file($moduleStatusesPath)
|
||||
? json_decode((string) file_get_contents($moduleStatusesPath), true)
|
||||
: [];
|
||||
$moduleEnabled = static fn (string $module): bool => ($moduleStatuses[$module] ?? false) === true;
|
||||
@endphp
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Platform') }}</div>
|
||||
|
||||
@if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard'))
|
||||
@if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard'))
|
||||
<a href="{{ route('platform.dashboard') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.dashboard')) is-active @endif" title="{{ __('Platform') }}">
|
||||
<i class="fa-solid fa-screwdriver-wrench wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Platform') }}</span>
|
||||
@@ -46,37 +54,37 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Operations') }}</div>
|
||||
|
||||
@if(Route::has('analytics.index'))
|
||||
@if($moduleEnabled('Analytics') && Route::has('analytics.index'))
|
||||
<a href="{{ route('analytics.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('analytics.*')) is-active @endif" title="{{ __('Analytics') }}">
|
||||
<i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Analytics') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('inventory-management.index'))
|
||||
@if($moduleEnabled('InventoryManagement') && Route::has('inventory-management.index'))
|
||||
<a href="{{ route('inventory-management.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('inventory-management.*')) is-active @endif" title="{{ __('Inventory') }}">
|
||||
<i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Inventory') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('replenishment.index'))
|
||||
@if($moduleEnabled('Replenishment') && Route::has('replenishment.index'))
|
||||
<a href="{{ route('replenishment.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('replenishment.*')) is-active @endif" title="{{ __('Replenishment') }}">
|
||||
<i class="fa-solid fa-arrows-rotate wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Replenishment') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('shipping.index'))
|
||||
@if($moduleEnabled('Shipping') && Route::has('shipping.index'))
|
||||
<a href="{{ route('shipping.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('shipping.*')) is-active @endif" title="{{ __('Shipping') }}">
|
||||
<i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Shipping') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('transportation.index'))
|
||||
@if($moduleEnabled('Transportation') && Route::has('transportation.index'))
|
||||
<a href="{{ route('transportation.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('transportation.*')) is-active @endif" title="{{ __('Transportation') }}">
|
||||
<i class="fa-solid fa-truck-ramp-box wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Transportation') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('carrier-management.index'))
|
||||
@if($moduleEnabled('CarrierManagement') && Route::has('carrier-management.index'))
|
||||
<a href="{{ route('carrier-management.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('carrier-management.*')) is-active @endif" title="{{ __('Carriers') }}">
|
||||
<i class="fa-solid fa-route wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Carriers') }}</span>
|
||||
@@ -87,25 +95,25 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Integration & Reporting') }}</div>
|
||||
|
||||
@if(Route::has('m3-integration.index'))
|
||||
@if($moduleEnabled('M3Integration') && Route::has('m3-integration.index'))
|
||||
<a href="{{ route('m3-integration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('m3-integration.*')) is-active @endif" title="{{ __('M3 Integration') }}">
|
||||
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('M3 Integration') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('sentinel-integration.index'))
|
||||
@if($moduleEnabled('SentinelIntegration') && Route::has('sentinel-integration.index'))
|
||||
<a href="{{ route('sentinel-integration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('sentinel-integration.*')) is-active @endif" title="{{ __('Sentinel') }}">
|
||||
<i class="fa-solid fa-satellite-dish wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Sentinel') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('document-archive.index'))
|
||||
@if($moduleEnabled('DocumentArchive') && Route::has('document-archive.index'))
|
||||
<a href="{{ route('document-archive.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('document-archive.*')) is-active @endif" title="{{ __('Documents') }}">
|
||||
<i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Documents') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('reporting.index'))
|
||||
@if($moduleEnabled('Reporting') && Route::has('reporting.index'))
|
||||
<a href="{{ route('reporting.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('reporting.*')) is-active @endif" title="{{ __('Reporting') }}">
|
||||
<i class="fa-solid fa-file-lines wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Reporting') }}</span>
|
||||
@@ -116,31 +124,31 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Administration') }}</div>
|
||||
|
||||
@if(Route::has('warehouses.index'))
|
||||
@if($moduleEnabled('Warehouse') && Route::has('warehouses.index'))
|
||||
<a href="{{ route('warehouses.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('warehouses.*')) is-active @endif" title="{{ __('Warehouses') }}">
|
||||
<i class="fa-solid fa-warehouse wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Warehouses') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('warehouse-rules.index'))
|
||||
@if($moduleEnabled('Warehouse') && Route::has('warehouse-rules.index'))
|
||||
<a href="{{ route('warehouse-rules.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('warehouse-rules.*')) is-active @endif" title="{{ __('Validation Rules') }}">
|
||||
<i class="fa-solid fa-shield-halved wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Validation Rules') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('configuration.index'))
|
||||
@if($moduleEnabled('Configuration') && Route::has('configuration.index'))
|
||||
<a href="{{ route('configuration.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('configuration.*')) is-active @endif" title="{{ __('Configuration') }}">
|
||||
<i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Configuration') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('security.index'))
|
||||
@if($moduleEnabled('Security') && Route::has('security.index'))
|
||||
<a href="{{ route('security.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('security.*')) is-active @endif" title="{{ __('Security') }}">
|
||||
<i class="fa-solid fa-user-shield wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Security') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('audit.index'))
|
||||
@if($moduleEnabled('Audit') && Route::has('audit.index'))
|
||||
<a href="{{ route('audit.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('audit.*')) is-active @endif" title="{{ __('Audit') }}">
|
||||
<i class="fa-solid fa-clipboard-check wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Audit') }}</span>
|
||||
@@ -148,23 +156,23 @@
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@if(auth()->user()?->isMpbaPlatformAdmin())
|
||||
@if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin())
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label>{{ __('Platform Administration') }}</div>
|
||||
|
||||
@if(Route::has('platform.companies.index'))
|
||||
@if($moduleEnabled('Platform') && Route::has('platform.companies.index'))
|
||||
<a href="{{ route('platform.companies.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.companies.*')) is-active @endif" title="{{ __('Companies') }}">
|
||||
<i class="fa-solid fa-building wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Companies') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('platform.licenses.index'))
|
||||
@if($moduleEnabled('Platform') && Route::has('platform.licenses.index'))
|
||||
<a href="{{ route('platform.licenses.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.licenses.*')) is-active @endif" title="{{ __('Licences') }}">
|
||||
<i class="fa-solid fa-key wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Licences') }}</span>
|
||||
</a>
|
||||
@endif
|
||||
@if(Route::has('platform.payments.index'))
|
||||
@if($moduleEnabled('Platform') && Route::has('platform.payments.index'))
|
||||
<a href="{{ route('platform.payments.index') }}" wire:navigate class="wms-sidebar-link @if(request()->routeIs('platform.payments.*')) is-active @endif" title="{{ __('Payments') }}">
|
||||
<i class="fa-solid fa-credit-card wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label>{{ __('Payments') }}</span>
|
||||
@@ -222,47 +230,36 @@
|
||||
</aside>
|
||||
|
||||
<div class="wms-main-panel">
|
||||
<header class="wms-topbar">
|
||||
<button type="button" class="wms-mobile-menu-button" data-wms-mobile-open aria-label="{{ __('Open navigation') }}">
|
||||
<i class="fa-solid fa-bars" aria-hidden="true"></i>
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div class="wms-topbar-eyebrow">{{ __('MPBA') }}</div>
|
||||
<h1 class="wms-topbar-title">{{ $title ?? __('Warehouse Management System') }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="wms-topbar-actions">
|
||||
<div class="wms-health-pill" title="{{ __('System status') }}">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
<span>{{ __('OK') }}</span>
|
||||
<section class="wms-page-hero" aria-labelledby="wms-page-title">
|
||||
<div class="wms-page-hero-content">
|
||||
<div>
|
||||
<p class="wms-page-eyebrow">{{ __('MPBA WMS') }}</p>
|
||||
<h1 id="wms-page-title" class="wms-page-title">{{ $title ?? __('Platform administration') }}</h1>
|
||||
<p class="wms-page-subtitle">{{ __('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.') }}</p>
|
||||
</div>
|
||||
|
||||
<flux:dropdown position="bottom" align="end">
|
||||
<flux:profile :initials="auth()->user()?->initials() ?? 'U'" icon-trailing="chevron-down" />
|
||||
<flux:menu>
|
||||
<flux:menu.radio.group>
|
||||
<div class="p-0 text-sm font-normal">
|
||||
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
||||
<flux:avatar :name="auth()->user()?->name ?? 'User'" :initials="auth()->user()?->initials() ?? 'U'" />
|
||||
<div class="grid flex-1 text-start text-sm leading-tight">
|
||||
<flux:heading class="truncate">{{ auth()->user()?->name ?? __('User') }}</flux:heading>
|
||||
<flux:text class="truncate">{{ auth()->user()?->email ?? '' }}</flux:text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</flux:menu.radio.group>
|
||||
<flux:menu.separator />
|
||||
<flux:menu.item :href="route('profile.edit')" icon="cog" wire:navigate>{{ __('Settings') }}</flux:menu.item>
|
||||
<flux:menu.separator />
|
||||
<form method="POST" action="{{ route('logout') }}" class="w-full">
|
||||
@csrf
|
||||
<flux:menu.item as="button" type="submit" icon="arrow-right-start-on-rectangle" class="w-full cursor-pointer" data-test="logout-button">{{ __('Log out') }}</flux:menu.item>
|
||||
</form>
|
||||
</flux:menu>
|
||||
</flux:dropdown>
|
||||
<div class="wms-page-metrics" aria-label="{{ __('Platform summary') }}">
|
||||
<div class="wms-page-metric-card">
|
||||
<span class="wms-page-metric-label">{{ __('System status') }}</span>
|
||||
<span class="wms-page-metric-value wms-page-metric-ok">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
{{ __('OK') }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="wms-page-metric-card">
|
||||
<span class="wms-page-metric-label">{{ __('Paid £') }}</span>
|
||||
<span class="wms-page-metric-value">
|
||||
@isset($paymentsTotal)
|
||||
{{ number_format($paymentsTotal / 100, 2) }}
|
||||
@else
|
||||
0.00
|
||||
@endisset
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</section>
|
||||
|
||||
<main class="wms-content">
|
||||
{{ $slot }}
|
||||
|
||||
Vendored
BIN
Binary file not shown.
Executable
+3
@@ -0,0 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!.gitkeep
|
||||
Executable
@@ -11,29 +11,6 @@
|
||||
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
|
||||
|
||||
<div class="space-y-6">
|
||||
<section class="overflow-hidden rounded-3xl bg-gradient-to-br from-slate-950 via-slate-900 to-cyan-950 p-6 text-white shadow-xl sm:p-8">
|
||||
<div class="flex flex-col gap-6 lg:flex-row lg:items-center lg:justify-between">
|
||||
<div>
|
||||
<p class="text-sm font-semibold uppercase tracking-[0.3em] text-cyan-300">MPBA WMS</p>
|
||||
<h1 class="mt-3 text-3xl font-bold tracking-tight sm:text-5xl">Platform administration</h1>
|
||||
<p class="mt-3 max-w-2xl text-slate-300">Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.</p>
|
||||
</div>
|
||||
<div class="grid gap-3 sm:min-w-80 sm:grid-cols-2">
|
||||
<div class="rounded-2xl bg-white/10 p-4 backdrop-blur">
|
||||
<p class="text-sm text-slate-300">System status</p>
|
||||
<p class="mt-2 flex items-center gap-2 text-2xl font-bold text-emerald-300">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
OK
|
||||
</p>
|
||||
</div>
|
||||
<div class="rounded-2xl bg-white/10 p-4 backdrop-blur">
|
||||
<p class="text-sm text-slate-300">Paid £</p>
|
||||
<p class="mt-2 text-2xl font-bold"><?php echo e(number_format($paymentsTotal / 100, 2)); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::openLoop(); ?><?php endif; ?><?php $__currentLoopData = [['Companies', $companiesCount], ['Active', $activeCompaniesCount], ['Warehouses', $warehousesCount], ['Licences', $licensesCount]]; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as [$label, $value]): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::startLoopIteration(); ?><?php endif; ?>
|
||||
<article class="rounded-2xl border border-zinc-200 bg-white p-5 shadow-sm dark:border-zinc-800 dark:bg-zinc-900">
|
||||
|
||||
@@ -12,15 +12,6 @@
|
||||
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/index.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::dropdown}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/dropdown.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::heading}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/heading.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::text}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/text.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu.radio.group}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/radio/group.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu.separator}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu.separator}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/separator.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu.item}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/item.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::menu}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/menu/index.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::dropdown}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/dropdown.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::toast}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/index.blade.php}:{1776985208} ?>
|
||||
<?php # [BlazeFolded]:{flux::toast.group}:{/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/toast/group.blade.php}:{1776985208} ?>
|
||||
<!DOCTYPE html>
|
||||
@@ -52,10 +43,18 @@
|
||||
</div>
|
||||
|
||||
<nav class="wms-sidebar-nav" aria-label="<?php echo e(__('Main navigation')); ?>">
|
||||
|
||||
<?php
|
||||
$moduleStatusesPath = base_path('modules_statuses.json');
|
||||
$moduleStatuses = is_file($moduleStatusesPath)
|
||||
? json_decode((string) file_get_contents($moduleStatusesPath), true)
|
||||
: [];
|
||||
$moduleEnabled = static fn (string $module): bool => ($moduleStatuses[$module] ?? false) === true;
|
||||
?>
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform')); ?></div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.dashboard')): ?>
|
||||
<a href="<?php echo e(route('platform.dashboard')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.dashboard')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Platform')); ?>">
|
||||
<i class="fa-solid fa-screwdriver-wrench wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Platform')); ?></span>
|
||||
@@ -71,37 +70,37 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Operations')); ?></div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('analytics.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Analytics') && Route::has('analytics.index')): ?>
|
||||
<a href="<?php echo e(route('analytics.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('analytics.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Analytics')); ?>">
|
||||
<i class="fa-solid fa-chart-line wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Analytics')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('inventory-management.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('InventoryManagement') && Route::has('inventory-management.index')): ?>
|
||||
<a href="<?php echo e(route('inventory-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('inventory-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Inventory')); ?>">
|
||||
<i class="fa-solid fa-boxes-stacked wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Inventory')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('replenishment.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Replenishment') && Route::has('replenishment.index')): ?>
|
||||
<a href="<?php echo e(route('replenishment.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('replenishment.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Replenishment')); ?>">
|
||||
<i class="fa-solid fa-arrows-rotate wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Replenishment')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('shipping.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Shipping') && Route::has('shipping.index')): ?>
|
||||
<a href="<?php echo e(route('shipping.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('shipping.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Shipping')); ?>">
|
||||
<i class="fa-solid fa-truck-fast wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Shipping')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('transportation.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Transportation') && Route::has('transportation.index')): ?>
|
||||
<a href="<?php echo e(route('transportation.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('transportation.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Transportation')); ?>">
|
||||
<i class="fa-solid fa-truck-ramp-box wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Transportation')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('carrier-management.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('CarrierManagement') && Route::has('carrier-management.index')): ?>
|
||||
<a href="<?php echo e(route('carrier-management.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('carrier-management.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Carriers')); ?>">
|
||||
<i class="fa-solid fa-route wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Carriers')); ?></span>
|
||||
@@ -112,25 +111,25 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Integration & Reporting')); ?></div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('m3-integration.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('M3Integration') && Route::has('m3-integration.index')): ?>
|
||||
<a href="<?php echo e(route('m3-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('m3-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('M3 Integration')); ?>">
|
||||
<i class="fa-solid fa-plug-circle-bolt wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('M3 Integration')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('sentinel-integration.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('SentinelIntegration') && Route::has('sentinel-integration.index')): ?>
|
||||
<a href="<?php echo e(route('sentinel-integration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('sentinel-integration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Sentinel')); ?>">
|
||||
<i class="fa-solid fa-satellite-dish wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Sentinel')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('document-archive.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('DocumentArchive') && Route::has('document-archive.index')): ?>
|
||||
<a href="<?php echo e(route('document-archive.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('document-archive.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Documents')); ?>">
|
||||
<i class="fa-solid fa-box-archive wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Documents')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('reporting.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Reporting') && Route::has('reporting.index')): ?>
|
||||
<a href="<?php echo e(route('reporting.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('reporting.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Reporting')); ?>">
|
||||
<i class="fa-solid fa-file-lines wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Reporting')); ?></span>
|
||||
@@ -141,31 +140,31 @@
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Administration')); ?></div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouses.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Warehouse') && Route::has('warehouses.index')): ?>
|
||||
<a href="<?php echo e(route('warehouses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Warehouses')); ?>">
|
||||
<i class="fa-solid fa-warehouse wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Warehouses')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('warehouse-rules.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Warehouse') && Route::has('warehouse-rules.index')): ?>
|
||||
<a href="<?php echo e(route('warehouse-rules.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('warehouse-rules.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Validation Rules')); ?>">
|
||||
<i class="fa-solid fa-shield-halved wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Validation Rules')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('configuration.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Configuration') && Route::has('configuration.index')): ?>
|
||||
<a href="<?php echo e(route('configuration.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('configuration.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Configuration')); ?>">
|
||||
<i class="fa-solid fa-sliders wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Configuration')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('security.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Security') && Route::has('security.index')): ?>
|
||||
<a href="<?php echo e(route('security.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('security.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Security')); ?>">
|
||||
<i class="fa-solid fa-user-shield wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Security')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('audit.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Audit') && Route::has('audit.index')): ?>
|
||||
<a href="<?php echo e(route('audit.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('audit.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Audit')); ?>">
|
||||
<i class="fa-solid fa-clipboard-check wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Audit')); ?></span>
|
||||
@@ -173,23 +172,23 @@
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(auth()->user()?->isMpbaPlatformAdmin()): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && auth()->user()?->isMpbaPlatformAdmin()): ?>
|
||||
<div class="wms-sidebar-group">
|
||||
<div class="wms-sidebar-heading" data-wms-sidebar-label><?php echo e(__('Platform Administration')); ?></div>
|
||||
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.companies.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.companies.index')): ?>
|
||||
<a href="<?php echo e(route('platform.companies.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.companies.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Companies')); ?>">
|
||||
<i class="fa-solid fa-building wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Companies')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.licenses.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.licenses.index')): ?>
|
||||
<a href="<?php echo e(route('platform.licenses.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.licenses.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Licences')); ?>">
|
||||
<i class="fa-solid fa-key wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Licences')); ?></span>
|
||||
</a>
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(Route::has('platform.payments.index')): ?>
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($moduleEnabled('Platform') && Route::has('platform.payments.index')): ?>
|
||||
<a href="<?php echo e(route('platform.payments.index')); ?>" wire:navigate class="wms-sidebar-link <?php if(request()->routeIs('platform.payments.*')): ?> is-active <?php endif; ?>" title="<?php echo e(__('Payments')); ?>">
|
||||
<i class="fa-solid fa-credit-card wms-sidebar-icon" aria-hidden="true"></i>
|
||||
<span data-wms-sidebar-label><?php echo e(__('Payments')); ?></span>
|
||||
@@ -328,96 +327,38 @@
|
||||
</aside>
|
||||
|
||||
<div class="wms-main-panel">
|
||||
<header class="wms-topbar">
|
||||
<button type="button" class="wms-mobile-menu-button" data-wms-mobile-open aria-label="<?php echo e(__('Open navigation')); ?>">
|
||||
<i class="fa-solid fa-bars" aria-hidden="true"></i>
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div class="wms-topbar-eyebrow"><?php echo e(__('MPBA')); ?></div>
|
||||
<h1 class="wms-topbar-title"><?php echo e($title ?? __('Warehouse Management System')); ?></h1>
|
||||
</div>
|
||||
|
||||
<div class="wms-topbar-actions">
|
||||
<div class="wms-health-pill" title="<?php echo e(__('System status')); ?>">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
<span><?php echo e(__('OK')); ?></span>
|
||||
<section class="wms-page-hero" aria-labelledby="wms-page-title">
|
||||
<div class="wms-page-hero-content">
|
||||
<div>
|
||||
<p class="wms-page-eyebrow"><?php echo e(__('MPBA WMS')); ?></p>
|
||||
<h1 id="wms-page-title" class="wms-page-title"><?php echo e($title ?? __('Platform administration')); ?></h1>
|
||||
<p class="wms-page-subtitle"><?php echo e(__('Manage tenant companies, licences, payments, warehouses and internal API operations from one resilient control plane.')); ?></p>
|
||||
</div>
|
||||
|
||||
<?php ob_start(); ?><ui-dropdown position="bottom end" data-flux-dropdown>
|
||||
<?php ob_start(); ?>
|
||||
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/profile.blade.php', $__blaze->compiledPath.'/986fb95c0ca2c23afb55cc89b1b07e48.php'); ?>
|
||||
<?php $__blaze->pushData(['initials' => auth()->user()?->initials() ?? 'U','iconTrailing' => 'chevron-down']); ?>
|
||||
<?php _986fb95c0ca2c23afb55cc89b1b07e48($__blaze, ['initials' => auth()->user()?->initials() ?? 'U','iconTrailing' => 'chevron-down'], [], ['initials'], ['iconTrailing' => 'icon-trailing'], $__this ?? (isset($this) ? $this : null)); ?>
|
||||
<?php $__blaze->popData(); ?>
|
||||
<?php ob_start(); ?><ui-menu
|
||||
class="[:where(&)]:min-w-48 p-[.3125rem] rounded-lg shadow-xs border border-zinc-200 dark:border-zinc-600 bg-white dark:bg-zinc-700 focus:outline-hidden"
|
||||
popover="manual"
|
||||
data-flux-menu
|
||||
>
|
||||
<?php ob_start(); ?>
|
||||
<?php ob_start(); ?><ui-menu-radio-group data-flux-menu-radio-group>
|
||||
<?php ob_start(); ?>
|
||||
<div class="p-0 text-sm font-normal">
|
||||
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
|
||||
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::avatar", ['name' => auth()->user()?->name ?? 'User', 'initials' => auth()->user()?->initials() ?? 'U']); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/110c1c2a55a80ff8b2b4fbed62b1a7d3.php'); ?>
|
||||
<?php $__blaze->pushData(['name' => auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U']); ?>
|
||||
<?php _110c1c2a55a80ff8b2b4fbed62b1a7d3($__blaze, ['name' => auth()->user()?->name ?? 'User','initials' => auth()->user()?->initials() ?? 'U'], [], ['name', 'initials'], [], $__this ?? (isset($this) ? $this : null)); ?>
|
||||
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
|
||||
<div class="grid flex-1 text-start text-sm leading-tight">
|
||||
<?php ob_start(); ?><div class="font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white text-sm [&:has(+[data-flux-subheading])]:mb-2 [[data-flux-subheading]+&]:mt-2 truncate" data-flux-heading><?php ob_start(); ?><?php echo e(auth()->user()?->name ?? __('User')); ?><?php echo trim(ob_get_clean()); ?></div>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php ob_start(); ?><p class="[:where(&)]:font-normal [:where(&)]:text-sm [:where(&)]:text-zinc-500 [:where(&)]:dark:text-white/70 truncate" data-flux-text ><?php ob_start(); ?><?php echo e(auth()->user()?->email ?? ''); ?><?php echo trim(ob_get_clean()); ?></p><?php echo ltrim(ob_get_clean()); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo trim(ob_get_clean()); ?>
|
||||
<div class="wms-page-metrics" aria-label="<?php echo e(__('Platform summary')); ?>">
|
||||
<div class="wms-page-metric-card">
|
||||
<span class="wms-page-metric-label"><?php echo e(__('System status')); ?></span>
|
||||
<span class="wms-page-metric-value wms-page-metric-ok">
|
||||
<i class="fa-solid fa-heart-pulse" aria-hidden="true"></i>
|
||||
<?php echo e(__('OK')); ?>
|
||||
|
||||
</ui-menu-radio-group>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php ob_start(); ?><div class="-mx-[.3125rem] my-[.3125rem] h-px" data-flux-menu-separator>
|
||||
<div data-orientation="horizontal" role="none" class="border-0 [print-color-adjust:exact] bg-zinc-800/15 dark:bg-white/20 h-px w-full dark:bg-zinc-600!" data-flux-separator></div>
|
||||
</div>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php ob_start(); ?><a href="<?php echo e(route('profile.edit')); ?>" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&[data-active]_[data-flux-menu-item-icon]]:text-current" wire:navigate="">
|
||||
<svg class="shrink-0 [:where(&)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path d="M13.024 9.25c.47 0 .827-.433.637-.863a4 4 0 0 0-4.094-2.364c-.468.05-.665.576-.43.984l1.08 1.868a.75.75 0 0 0 .649.375h2.158ZM7.84 7.758c-.236-.408-.79-.5-1.068-.12A3.982 3.982 0 0 0 6 10c0 .884.287 1.7.772 2.363.278.38.832.287 1.068-.12l1.078-1.868a.75.75 0 0 0 0-.75L7.839 7.758ZM9.138 12.993c-.235.408-.039.934.43.984a4 4 0 0 0 4.094-2.364c.19-.43-.168-.863-.638-.863h-2.158a.75.75 0 0 0-.65.375l-1.078 1.868Z"/>
|
||||
<path fill-rule="evenodd" d="m14.13 4.347.644-1.117a.75.75 0 0 0-1.299-.75l-.644 1.116a6.954 6.954 0 0 0-2.081-.556V1.75a.75.75 0 0 0-1.5 0v1.29a6.954 6.954 0 0 0-2.081.556L6.525 2.48a.75.75 0 1 0-1.3.75l.645 1.117A7.04 7.04 0 0 0 4.347 5.87L3.23 5.225a.75.75 0 1 0-.75 1.3l1.116.644A6.954 6.954 0 0 0 3.04 9.25H1.75a.75.75 0 0 0 0 1.5h1.29c.078.733.27 1.433.556 2.081l-1.116.645a.75.75 0 1 0 .75 1.298l1.117-.644a7.04 7.04 0 0 0 1.523 1.523l-.645 1.117a.75.75 0 1 0 1.3.75l.644-1.116a6.954 6.954 0 0 0 2.081.556v1.29a.75.75 0 0 0 1.5 0v-1.29a6.954 6.954 0 0 0 2.081-.556l.645 1.116a.75.75 0 0 0 1.299-.75l-.645-1.117a7.042 7.042 0 0 0 1.523-1.523l1.117.644a.75.75 0 0 0 .75-1.298l-1.116-.645a6.954 6.954 0 0 0 .556-2.081h1.29a.75.75 0 0 0 0-1.5h-1.29a6.954 6.954 0 0 0-.556-2.081l1.116-.644a.75.75 0 0 0-.75-1.3l-1.117.645a7.04 7.04 0 0 0-1.524-1.523ZM10 4.5a5.475 5.475 0 0 0-2.781.754A5.527 5.527 0 0 0 5.22 7.277 5.475 5.475 0 0 0 4.5 10a5.475 5.475 0 0 0 .752 2.777 5.527 5.527 0 0 0 2.028 2.004c.802.458 1.73.719 2.72.719a5.474 5.474 0 0 0 2.78-.753 5.527 5.527 0 0 0 2.001-2.027c.458-.802.719-1.73.719-2.72a5.475 5.475 0 0 0-.753-2.78 5.528 5.528 0 0 0-2.028-2.002A5.475 5.475 0 0 0 10 4.5Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
<?php ob_start(); ?><?php echo e(__('Settings')); ?><?php echo trim(ob_get_clean()); ?>
|
||||
<div class="wms-page-metric-card">
|
||||
<span class="wms-page-metric-label"><?php echo e(__('Paid £')); ?></span>
|
||||
<span class="wms-page-metric-value">
|
||||
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(isset($paymentsTotal)): ?>
|
||||
<?php echo e(number_format($paymentsTotal / 100, 2)); ?>
|
||||
|
||||
</a>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php ob_start(); ?><div class="-mx-[.3125rem] my-[.3125rem] h-px" data-flux-menu-separator>
|
||||
<div data-orientation="horizontal" role="none" class="border-0 [print-color-adjust:exact] bg-zinc-800/15 dark:bg-white/20 h-px w-full dark:bg-zinc-600!" data-flux-separator></div>
|
||||
</div>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<form method="POST" action="<?php echo e(route('logout')); ?>" class="w-full">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php ob_start(); ?><button type="submit" class="flex items-center px-2 py-1.5 w-full focus:outline-hidden rounded-md text-start text-sm font-medium [&[disabled]]:opacity-50 text-zinc-800 data-active:bg-zinc-50 dark:text-white dark:data-active:bg-zinc-600 **:data-flux-menu-item-icon:text-zinc-400 dark:**:data-flux-menu-item-icon:text-white/60 [&[data-active]_[data-flux-menu-item-icon]]:text-current w-full cursor-pointer" data-flux-menu-item="data-flux-menu-item" data-flux-menu-item-has-icon="data-flux-menu-item-has-icon" data-test="logout-button">
|
||||
<svg class="shrink-0 [:where(&)]:size-5 me-2" data-flux-menu-item-icon="data-flux-menu-item-icon" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path fill-rule="evenodd" d="M3 4.25A2.25 2.25 0 0 1 5.25 2h5.5A2.25 2.25 0 0 1 13 4.25v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 0-.75-.75h-5.5a.75.75 0 0 0-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 0 0 .75-.75v-2a.75.75 0 0 1 1.5 0v2A2.25 2.25 0 0 1 10.75 18h-5.5A2.25 2.25 0 0 1 3 15.75V4.25Z" clip-rule="evenodd"/>
|
||||
<path fill-rule="evenodd" d="M6 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H6.75A.75.75 0 0 1 6 10Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
|
||||
|
||||
<?php ob_start(); ?><?php echo e(__('Log out')); ?><?php echo trim(ob_get_clean()); ?>
|
||||
|
||||
</button>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
</form>
|
||||
<?php echo trim(ob_get_clean()); ?>
|
||||
|
||||
</ui-menu>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php echo trim(ob_get_clean()); ?>
|
||||
|
||||
</ui-dropdown>
|
||||
<?php echo ltrim(ob_get_clean()); ?>
|
||||
<?php else: ?>
|
||||
0.00
|
||||
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</section>
|
||||
|
||||
<main class="wms-content">
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php
|
||||
if (!function_exists('_3feb8572f4b247ceb864938a4490c071')):
|
||||
function _3feb8572f4b247ceb864938a4490c071($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
|
||||
$__env = $__blaze->env;
|
||||
|
||||
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
|
||||
extract($__slots, EXTR_SKIP); unset($__slots);
|
||||
extract($__data, EXTR_SKIP);
|
||||
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
|
||||
unset($__data, $__bound, $__keys);
|
||||
ob_start();
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
$__defaults = [
|
||||
'variant' => 'outline',
|
||||
];
|
||||
$variant ??= $attributes['variant'] ?? $__defaults['variant']; unset($attributes['variant']);
|
||||
unset($__defaults);
|
||||
?>
|
||||
|
||||
<?php
|
||||
$classes = Flux::classes('shrink-0')
|
||||
->add(match($variant) {
|
||||
'outline' => '[:where(&)]:size-6',
|
||||
'solid' => '[:where(&)]:size-6',
|
||||
'mini' => '[:where(&)]:size-5',
|
||||
'micro' => '[:where(&)]:size-4',
|
||||
});
|
||||
?>
|
||||
|
||||
<?php switch ($variant): case ('outline'): ?>
|
||||
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"/>
|
||||
</svg>
|
||||
|
||||
<?php break; ?>
|
||||
|
||||
<?php case ('solid'): ?>
|
||||
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path fill-rule="evenodd" d="M12.53 16.28a.75.75 0 0 1-1.06 0l-7.5-7.5a.75.75 0 0 1 1.06-1.06L12 14.69l6.97-6.97a.75.75 0 1 1 1.06 1.06l-7.5 7.5Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
|
||||
<?php break; ?>
|
||||
|
||||
<?php case ('mini'): ?>
|
||||
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
|
||||
<?php break; ?>
|
||||
|
||||
<?php case ('micro'): ?>
|
||||
<svg <?php echo e($attributes->class($classes)); ?> data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon">
|
||||
<path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
|
||||
<?php break; ?>
|
||||
|
||||
<?php endswitch; ?>
|
||||
<?php
|
||||
echo ltrim(ob_get_clean());
|
||||
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/chevron-down.blade.php ENDPATH**/ ?>
|
||||
@@ -1,88 +0,0 @@
|
||||
<?php
|
||||
if (!function_exists('_986fb95c0ca2c23afb55cc89b1b07e48')):
|
||||
function _986fb95c0ca2c23afb55cc89b1b07e48($__blaze, $__data = [], $__slots = [], $__bound = [], $__keys = [], $__this = null) {
|
||||
$__env = $__blaze->env;
|
||||
|
||||
if (($__data['attributes'] ?? null) instanceof \Illuminate\View\ComponentAttributeBag) { $__data = $__data + $__data['attributes']->all(); unset($__data['attributes']); }
|
||||
extract($__slots, EXTR_SKIP); unset($__slots);
|
||||
extract($__data, EXTR_SKIP);
|
||||
$attributes = \Livewire\Blaze\Runtime\BlazeAttributeBag::make($__data, $__bound, $__keys);
|
||||
unset($__data, $__bound, $__keys);
|
||||
ob_start();
|
||||
?>
|
||||
|
||||
|
||||
<?php $iconVariant ??= $attributes->pluck('icon:variant'); ?>
|
||||
<?php $iconTrailing ??= $attributes->pluck('icon:trailing'); ?>
|
||||
|
||||
<?php
|
||||
$__defaults = [
|
||||
'iconVariant' => 'micro',
|
||||
'iconTrailing' => null,
|
||||
'initials' => null,
|
||||
'chevron' => true,
|
||||
'circle' => null,
|
||||
'avatar' => null,
|
||||
'name' => null,
|
||||
];
|
||||
$iconVariant ??= $attributes['icon-variant'] ?? $attributes['iconVariant'] ?? $__defaults['iconVariant']; unset($attributes['iconVariant'], $attributes['icon-variant']);
|
||||
$iconTrailing ??= $attributes['icon-trailing'] ?? $attributes['iconTrailing'] ?? $__defaults['iconTrailing']; unset($attributes['iconTrailing'], $attributes['icon-trailing']);
|
||||
$initials ??= $attributes['initials'] ?? $__defaults['initials']; unset($attributes['initials']);
|
||||
$chevron ??= $attributes['chevron'] ?? $__defaults['chevron']; unset($attributes['chevron']);
|
||||
$circle ??= $attributes['circle'] ?? $__defaults['circle']; unset($attributes['circle']);
|
||||
$avatar ??= $attributes['avatar'] ?? $__defaults['avatar']; unset($attributes['avatar']);
|
||||
$name ??= $attributes['name'] ?? $__defaults['name']; unset($attributes['name']);
|
||||
unset($__defaults);
|
||||
?>
|
||||
|
||||
<?php
|
||||
$iconTrailing = $iconTrailing ?? ($chevron ? 'chevron-down' : null);
|
||||
|
||||
// When using the outline icon variant, we need to size it down to match the default icon sizes...
|
||||
$iconClasses = Flux::classes('text-zinc-400 dark:text-white/80 group-hover:text-zinc-800 dark:group-hover:text-white')
|
||||
->add($iconVariant === 'outline' ? 'size-4' : '');
|
||||
|
||||
$classes = Flux::classes()
|
||||
->add('group flex items-center')
|
||||
->add('rounded-lg has-data-[circle=true]:rounded-full')
|
||||
->add('[ui-dropdown>&]:w-full') // Without this, the "name" won't get truncated in a sidebar dropdown...
|
||||
->add('p-1 hover:bg-zinc-800/5 dark:hover:bg-white/15')
|
||||
;
|
||||
?>
|
||||
|
||||
<button type="button" <?php echo e($attributes->class($classes)); ?> data-flux-profile>
|
||||
<div class="shrink-0">
|
||||
<?php if ($avatar instanceof \Illuminate\View\ComponentSlot): ?>
|
||||
<?php echo e($avatar); ?>
|
||||
|
||||
<?php else: ?>
|
||||
<?php $avatarAttributes = Flux::attributesAfter('avatar:', $attributes, ['src' => $avatar, 'size' => 'sm', 'circle' => $circle, 'name' => $name, 'initials' => $initials]); ?>
|
||||
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::avatar", ['attributes' => $avatarAttributes]); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/avatar/index.blade.php', $__blaze->compiledPath.'/110c1c2a55a80ff8b2b4fbed62b1a7d3.php'); ?>
|
||||
<?php $__blaze->pushData(['attributes' => $avatarAttributes]); ?>
|
||||
<?php _110c1c2a55a80ff8b2b4fbed62b1a7d3($__blaze, ['attributes' => $avatarAttributes], [], ['attributes'], [], $__this ?? (isset($this) ? $this : null)); ?>
|
||||
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($name): ?>
|
||||
<span class="mx-2 text-sm text-zinc-500 dark:text-white/80 group-hover:text-zinc-800 dark:group-hover:text-white font-medium truncate">
|
||||
<?php echo e($name); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (is_string($iconTrailing) && $iconTrailing !== ''): ?>
|
||||
<div class="shrink-0 ms-auto size-8 flex justify-center items-center">
|
||||
<?php $blaze_memoized_key = \Livewire\Blaze\Memoizer\Memo::key("flux::icon", ['icon' => $iconTrailing, 'variant' => $iconVariant, 'class' => $iconClasses]); ?><?php if ($blaze_memoized_key !== null && \Livewire\Blaze\Memoizer\Memo::has($blaze_memoized_key)) : ?><?php echo \Livewire\Blaze\Memoizer\Memo::get($blaze_memoized_key); ?><?php else : ?><?php ob_start(); ?><?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/icon/index.blade.php', $__blaze->compiledPath.'/50d7e9e02b0a09ef19c84ebdf6a22b69.php'); ?>
|
||||
<?php $__blaze->pushData(['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $iconClasses]); ?>
|
||||
<?php _50d7e9e02b0a09ef19c84ebdf6a22b69($__blaze, ['icon' => $iconTrailing,'variant' => $iconVariant,'class' => $iconClasses], [], ['icon', 'variant', 'class'], [], $__this ?? (isset($this) ? $this : null)); ?>
|
||||
<?php $__blaze->popData(); ?><?php $blaze_memoized_html = ob_get_clean(); ?><?php if ($blaze_memoized_key !== null) { \Livewire\Blaze\Memoizer\Memo::put($blaze_memoized_key, $blaze_memoized_html); } ?><?php echo $blaze_memoized_html; ?><?php endif; ?>
|
||||
</div>
|
||||
<?php elseif ($iconTrailing): ?>
|
||||
<?php echo e($iconTrailing); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
<?php
|
||||
echo ltrim(ob_get_clean());
|
||||
} endif; ?><?php /**PATH /Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/profile.blade.php ENDPATH**/ ?>
|
||||
@@ -205,7 +205,7 @@ $classes = Flux::classes()
|
||||
<?php if (isset($name)): ?> name="<?php echo e($name); ?>" <?php endif; ?>
|
||||
<?php if ($maskDynamic): ?> x-mask:dynamic="<?php echo e($maskDynamic); ?>" <?php elseif($mask): ?> x-mask="<?php echo e($mask); ?>" <?php endif; ?>
|
||||
<?php if (is_numeric($size)): ?> size="<?php echo e($size); ?>" <?php endif; ?>
|
||||
[STARTCOMPILEDUNBLAZE:PgdOwRvhjj]<?php \Livewire\Blaze\Unblaze::storeScope("PgdOwRvhjj", scope: ['name' => $name ?? null, 'invalid' => $invalid ?? false]) ?>[ENDCOMPILEDUNBLAZE:PgdOwRvhjj]
|
||||
[STARTCOMPILEDUNBLAZE:B4H2Npccbq]<?php \Livewire\Blaze\Unblaze::storeScope("B4H2Npccbq", scope: ['name' => $name ?? null, 'invalid' => $invalid ?? false]) ?>[ENDCOMPILEDUNBLAZE:B4H2Npccbq]
|
||||
data-flux-control
|
||||
data-flux-group-target
|
||||
<?php if($loading): ?> wire:loading.class="<?php echo e($inputLoadingClasses); ?>" <?php endif; ?>
|
||||
|
||||
@@ -89,7 +89,7 @@ unset($__defaults);
|
||||
|
||||
|
||||
|
||||
[STARTCOMPILEDUNBLAZE:gcSlqet4Xb]<?php \Livewire\Blaze\Unblaze::storeScope("gcSlqet4Xb", scope: ['attributes' => $errorAttributes->getAttributes()]) ?>[ENDCOMPILEDUNBLAZE:gcSlqet4Xb]
|
||||
[STARTCOMPILEDUNBLAZE:lRs3c2pkhC]<?php \Livewire\Blaze\Unblaze::storeScope("lRs3c2pkhC", scope: ['attributes' => $errorAttributes->getAttributes()]) ?>[ENDCOMPILEDUNBLAZE:lRs3c2pkhC]
|
||||
|
||||
<?php if (isset($descriptionTrailing)): ?>
|
||||
<?php $__blaze->ensureRequired('/Users/mag/Sites/WMS/Core/vendor/livewire/flux/src/../stubs/resources/views/flux/description.blade.php', $__blaze->compiledPath.'/702ed166cbd8171f216fd13166b9bad7.php'); ?>
|
||||
|
||||
@@ -140,7 +140,7 @@ if (! $overflow) {
|
||||
<?php if ($name): ?> data-modal="<?php echo e($name); ?>" <?php endif; ?>
|
||||
<?php if ($flyout): ?> data-flux-flyout <?php endif; ?>
|
||||
<?php if ($overflow): ?> data-flux-modal-overflow <?php endif; ?>
|
||||
[STARTCOMPILEDUNBLAZE:VblkpjyYzg]<?php \Livewire\Blaze\Unblaze::storeScope("VblkpjyYzg", scope: ['name' => $name]) ?>[ENDCOMPILEDUNBLAZE:VblkpjyYzg]
|
||||
[STARTCOMPILEDUNBLAZE:YjqytHNgD4]<?php \Livewire\Blaze\Unblaze::storeScope("YjqytHNgD4", scope: ['name' => $name]) ?>[ENDCOMPILEDUNBLAZE:YjqytHNgD4]
|
||||
x-on:modal-show.document="handleShow($event)"
|
||||
x-on:modal-close.document="handleClose($event)"
|
||||
>
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php if (isset($component)) { $__componentOriginal81a506f898233b9e7d58286e6bea3c18 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal81a506f898233b9e7d58286e6bea3c18 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'f4ac99e09542ff494432bc959d4fee61::app','data' => ['title' => __('Analytics')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('layouts::app'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Analytics'))]); ?>
|
||||
<?php \Livewire\Features\SupportCompiledWireKeys\SupportCompiledWireKeys::processComponentKey($component); ?>
|
||||
|
||||
<div class="container-fluid py-4 module-page module-analytics">
|
||||
<div class="row g-4">
|
||||
<div class="col-12">
|
||||
<section class="card border-0 shadow-sm overflow-hidden">
|
||||
<div class="card-header border-0 text-white module-hero">
|
||||
<div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3">
|
||||
<div>
|
||||
<div class="small text-uppercase opacity-75 fw-semibold mb-2">Replacement module</div>
|
||||
<h1 class="h2 fw-bold mb-2">Analytics</h1>
|
||||
<p class="mb-0 opacity-75">Display KPIs, warehouse performance trends, executive summaries, and OTTC analysis.</p>
|
||||
</div>
|
||||
|
||||
<div class="module-hero-icon" aria-hidden="true">
|
||||
<i class="bi bi-graph-up-arrow"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-xl-3">
|
||||
<div class="card h-100 border-0 shadow-sm module-metric-card">
|
||||
<div class="card-body">
|
||||
<div class="small text-uppercase text-muted fw-semibold mb-2">01</div>
|
||||
<h3 class="h6 mb-2">KPI1 Bar</h3>
|
||||
<p class="small text-muted mb-0">Placeholder area for kpi1 bar.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-xl-3">
|
||||
<div class="card h-100 border-0 shadow-sm module-metric-card">
|
||||
<div class="card-body">
|
||||
<div class="small text-uppercase text-muted fw-semibold mb-2">02</div>
|
||||
<h3 class="h6 mb-2">KPI1 Line</h3>
|
||||
<p class="small text-muted mb-0">Placeholder area for kpi1 line.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-xl-3">
|
||||
<div class="card h-100 border-0 shadow-sm module-metric-card">
|
||||
<div class="card-body">
|
||||
<div class="small text-uppercase text-muted fw-semibold mb-2">03</div>
|
||||
<h3 class="h6 mb-2">OTTC</h3>
|
||||
<p class="small text-muted mb-0">Placeholder area for ottc.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-xl-3">
|
||||
<div class="card h-100 border-0 shadow-sm module-metric-card">
|
||||
<div class="card-body">
|
||||
<div class="small text-uppercase text-muted fw-semibold mb-2">04</div>
|
||||
<h3 class="h6 mb-2">Warehouse Performance</h3>
|
||||
<p class="small text-muted mb-0">Placeholder area for warehouse performance.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<section class="card border-0 shadow-sm">
|
||||
<div class="card-header bg-white border-bottom">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between gap-2">
|
||||
<div>
|
||||
<h2 class="h5 mb-1">Analytics workbench</h2>
|
||||
<p class="small text-muted mb-0">Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.</p>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-outline-secondary btn-sm">Export</button>
|
||||
<button type="button" class="btn btn-primary btn-sm">Create</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover align-middle mb-0">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Metric</th>
|
||||
<th>Today</th>
|
||||
<th>Week</th>
|
||||
<th class="text-end">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>KPI1 Bar</td>
|
||||
<td>Sample 1</td>
|
||||
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
|
||||
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>KPI1 Line</td>
|
||||
<td>Sample 2</td>
|
||||
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
|
||||
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>OTTC</td>
|
||||
<td>Sample 3</td>
|
||||
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
|
||||
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warehouse Performance</td>
|
||||
<td>Sample 4</td>
|
||||
<td><span class="badge bg-success-subtle text-success border border-success-subtle">Active</span></td>
|
||||
<td class="text-end"><a href="#" class="btn btn-sm btn-outline-primary">Open</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
|
||||
<?php $attributes = $__attributesOriginal81a506f898233b9e7d58286e6bea3c18; ?>
|
||||
<?php unset($__attributesOriginal81a506f898233b9e7d58286e6bea3c18); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal81a506f898233b9e7d58286e6bea3c18)): ?>
|
||||
<?php $component = $__componentOriginal81a506f898233b9e7d58286e6bea3c18; ?>
|
||||
<?php unset($__componentOriginal81a506f898233b9e7d58286e6bea3c18); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /Users/mag/Sites/WMS/Core/Modules/Analytics/Providers/../Resources/views/index.blade.php ENDPATH**/ ?>
|
||||
@@ -3,11 +3,15 @@
|
||||
namespace Tests\Feature\Modules;
|
||||
|
||||
use Database\Factories\UserFactory;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ModuleSidebarAndStatusTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
/**
|
||||
* @return array<int, array{0: string, 1: string}>
|
||||
*/
|
||||
@@ -30,9 +34,7 @@ class ModuleSidebarAndStatusTest extends TestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider moduleRoutes
|
||||
*/
|
||||
#[DataProvider('moduleRoutes')]
|
||||
public function test_enabled_module_route_renders(string $routeName, string $label): void
|
||||
{
|
||||
$this->assertTrue(Route::has($routeName), "Missing route [{$routeName}].");
|
||||
|
||||
Reference in New Issue
Block a user