Add shift templates, unit duty roster grid, and Nursing Services hub.
Deploy Ladill Care / deploy (push) Successful in 1m0s
Deploy Ladill Care / deploy (push) Successful in 1m0s
Phase 3 staff management: real shift entities, week roster linked to temporary assignments, and a nursing ops module surface (registry, today’s allocation, unit shortcuts). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -29,10 +29,14 @@
|
||||
$canHandover = $permissions->can($member, 'nursing.handover.view');
|
||||
$canAssess = $permissions->can($member, 'nursing.assessments.view');
|
||||
$canPerf = $permissions->can($member, 'nursing.performance.view');
|
||||
$canRoster = $permissions->can($member, 'nursing.roster.view');
|
||||
@endphp
|
||||
@if ($canMar)
|
||||
<a href="{{ route('care.care-units.mar', $unit) }}" class="btn-primary">MAR board</a>
|
||||
@endif
|
||||
@if ($canRoster)
|
||||
<a href="{{ route('care.care-units.roster', $unit) }}" class="btn-secondary">Duty roster</a>
|
||||
@endif
|
||||
@if ($canAssess)
|
||||
<a href="{{ route('care.care-units.assessments', $unit) }}" class="btn-secondary">Assessments</a>
|
||||
@endif
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
<x-app-layout title="Roster · {{ $unit->name }}">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-start justify-between gap-4">
|
||||
<div>
|
||||
<p class="text-sm text-slate-500">
|
||||
<a href="{{ route('care.care-units.show', $unit) }}" class="text-indigo-600 hover:text-indigo-800">{{ $unit->name }}</a>
|
||||
<span class="text-slate-300">/</span>
|
||||
Duty roster
|
||||
</p>
|
||||
<h1 class="mt-1 text-2xl font-semibold text-slate-900">Week roster</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">
|
||||
{{ $weekStart->format('d M Y') }} – {{ $weekStart->copy()->addDays(6)->format('d M Y') }}
|
||||
· {{ $unit->department?->name }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<a href="{{ route('care.care-units.roster', ['careUnit' => $unit, 'week' => $prevWeek]) }}" class="btn-secondary">Previous</a>
|
||||
<a href="{{ route('care.care-units.roster', ['careUnit' => $unit, 'week' => now()->startOfWeek(\Carbon\Carbon::MONDAY)->toDateString()]) }}" class="btn-secondary">This week</a>
|
||||
<a href="{{ route('care.care-units.roster', ['careUnit' => $unit, 'week' => $nextWeek]) }}" class="btn-secondary">Next</a>
|
||||
@if ($canManage)
|
||||
<a href="{{ route('care.shifts.index') }}" class="btn-secondary">Shift templates</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="overflow-x-auto rounded-2xl border border-slate-200 bg-white">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead class="bg-slate-50 text-left text-xs uppercase text-slate-500">
|
||||
<tr>
|
||||
<th class="sticky left-0 z-10 bg-slate-50 px-3 py-3">Shift</th>
|
||||
@foreach ($days as $day)
|
||||
<th class="min-w-[9rem] px-3 py-3 {{ $day->isToday() ? 'bg-indigo-50 text-indigo-700' : '' }}">
|
||||
<div>{{ $day->format('D') }}</div>
|
||||
<div class="font-normal normal-case text-slate-400">{{ $day->format('d M') }}</div>
|
||||
</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
@foreach ($shifts as $shift)
|
||||
<tr>
|
||||
<td class="sticky left-0 z-10 bg-white px-3 py-3 align-top">
|
||||
<div class="flex items-center gap-2 font-medium text-slate-900">
|
||||
<span class="inline-block h-2.5 w-2.5 rounded-full" style="background: {{ $shift->color ?? '#64748b' }}"></span>
|
||||
{{ $shift->label }}
|
||||
</div>
|
||||
<div class="mt-0.5 text-xs text-slate-400">{{ $shift->timeLabel() }}</div>
|
||||
</td>
|
||||
@foreach ($days as $day)
|
||||
@php
|
||||
$key = $day->toDateString().'|'.$shift->id;
|
||||
$entries = $cells[$key] ?? [];
|
||||
@endphp
|
||||
<td class="px-2 py-2 align-top {{ $day->isToday() ? 'bg-indigo-50/40' : '' }}">
|
||||
<div class="space-y-1.5">
|
||||
@forelse ($entries as $entry)
|
||||
<div class="rounded-lg border border-slate-100 bg-slate-50 px-2 py-1.5">
|
||||
<div class="text-xs font-medium text-slate-800">
|
||||
{{ $memberLabels[$entry->member_id] ?? ($entry->member?->user_ref ?? 'Staff') }}
|
||||
</div>
|
||||
@if ($canManage)
|
||||
<form method="POST" action="{{ route('care.care-units.roster.destroy', [$unit, $entry]) }}" class="mt-1" onsubmit="return confirm('Remove from roster?')">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="text-[11px] text-red-600 hover:text-red-800">Remove</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
@empty
|
||||
<p class="px-1 text-[11px] text-slate-300">—</p>
|
||||
@endforelse
|
||||
</div>
|
||||
</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@if ($canManage)
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-6">
|
||||
<h2 class="text-base font-semibold text-slate-900">Add to roster</h2>
|
||||
<p class="mt-1 text-sm text-slate-500">Creates a temporary staff assignment for that duty date.</p>
|
||||
<form method="POST" action="{{ route('care.care-units.roster.store', $unit) }}" class="mt-4 grid gap-3 sm:grid-cols-2 lg:grid-cols-5">
|
||||
@csrf
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Date</label>
|
||||
<input type="date" name="duty_date" value="{{ old('duty_date', now()->toDateString()) }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@error('duty_date')<p class="mt-1 text-xs text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Shift</label>
|
||||
<select name="shift_id" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@foreach ($shifts as $shift)
|
||||
<option value="{{ $shift->id }}" @selected(old('shift_id') == $shift->id)>{{ $shift->label }} ({{ $shift->timeLabel() }})</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('shift_id')<p class="mt-1 text-xs text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
<div class="lg:col-span-2">
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Staff</label>
|
||||
<select name="member_id" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
<option value="">Select…</option>
|
||||
@foreach ($members as $member)
|
||||
<option value="{{ $member->id }}" @selected(old('member_id') == $member->id)>
|
||||
{{ $memberLabels[$member->id] ?? $member->user_ref }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('member_id')<p class="mt-1 text-xs text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
<div class="flex items-end">
|
||||
<button type="submit" class="btn-primary w-full">Assign</button>
|
||||
</div>
|
||||
<div class="sm:col-span-2 lg:col-span-5">
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Notes</label>
|
||||
<input type="text" name="notes" value="{{ old('notes') }}" class="mt-1 w-full rounded-lg border-slate-300 text-sm" placeholder="Optional">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,135 @@
|
||||
<x-app-layout title="Nursing Services">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-start justify-between gap-4">
|
||||
<div>
|
||||
<h1 class="text-2xl font-semibold text-slate-900">Nursing Services</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">
|
||||
Nurse registry, today’s duty allocation, and shortcuts into ward boards.
|
||||
@unless ($moduleEnabled)
|
||||
<span class="text-amber-700">Module not enabled for this organization — enable under Settings → Modules.</span>
|
||||
@endunless
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
@if ($canRoster)
|
||||
<a href="{{ route('care.shifts.index') }}" class="btn-secondary">Shift templates</a>
|
||||
@endif
|
||||
<a href="{{ route('care.care-units.index') }}" class="btn-secondary">Care units</a>
|
||||
<a href="{{ route('care.staff-assignments.index') }}" class="btn-secondary">Staff assignments</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-6 lg:grid-cols-3">
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5 lg:col-span-1">
|
||||
<h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Nurse registry</h2>
|
||||
<p class="mt-1 text-2xl font-semibold text-slate-900">{{ $nurses->count() }}</p>
|
||||
<ul class="mt-4 max-h-80 space-y-2 overflow-y-auto text-sm">
|
||||
@forelse ($nurses as $nurse)
|
||||
<li class="flex items-start justify-between gap-2 border-b border-slate-50 pb-2">
|
||||
<span class="font-medium text-slate-800">{{ $nurseLabels[$nurse->id] ?? $nurse->user_ref }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No nursing-role members yet.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5 lg:col-span-2">
|
||||
<h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Today’s roster</h2>
|
||||
<div class="mt-4 overflow-x-auto">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead class="text-left text-xs uppercase text-slate-500">
|
||||
<tr>
|
||||
<th class="pb-2 pr-4">Unit</th>
|
||||
<th class="pb-2 pr-4">Shift</th>
|
||||
<th class="pb-2">Staff</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
@forelse ($todayRoster as $entry)
|
||||
<tr>
|
||||
<td class="py-2.5 pr-4">
|
||||
@if ($canViewRoster)
|
||||
<a href="{{ route('care.care-units.roster', $entry->careUnit) }}" class="text-indigo-600 hover:text-indigo-800">
|
||||
{{ $entry->careUnit?->name ?? '—' }}
|
||||
</a>
|
||||
@else
|
||||
{{ $entry->careUnit?->name ?? '—' }}
|
||||
@endif
|
||||
</td>
|
||||
<td class="py-2.5 pr-4 whitespace-nowrap">
|
||||
<span class="mr-1 inline-block h-2 w-2 rounded-full" style="background: {{ $entry->shift?->color ?? '#94a3b8' }}"></span>
|
||||
{{ $entry->shift?->label ?? '—' }}
|
||||
</td>
|
||||
<td class="py-2.5">{{ $nurseLabels[$entry->member_id] ?? ($entry->member?->user_ref ?? '—') }}</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="3" class="py-6 text-slate-500">No duty roster entries for today.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Active allocations</h2>
|
||||
<p class="mt-1 text-sm text-slate-500">Dated staff assignments effective today (primary, temporary, specialty).</p>
|
||||
<div class="mt-4 overflow-x-auto">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead class="text-left text-xs uppercase text-slate-500">
|
||||
<tr>
|
||||
<th class="pb-2 pr-4">Staff</th>
|
||||
<th class="pb-2 pr-4">Unit / department</th>
|
||||
<th class="pb-2 pr-4">Kind</th>
|
||||
<th class="pb-2">Dates</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
@forelse ($allocations as $assignment)
|
||||
<tr>
|
||||
<td class="py-2.5 pr-4 font-medium">
|
||||
{{ $nurseLabels[$assignment->member_id] ?? ($assignment->member?->user_ref ?? '—') }}
|
||||
</td>
|
||||
<td class="py-2.5 pr-4">
|
||||
{{ $assignment->careUnit?->name ?? $assignment->department?->name ?? '—' }}
|
||||
</td>
|
||||
<td class="py-2.5 pr-4 capitalize">{{ $assignment->kind }}</td>
|
||||
<td class="py-2.5 whitespace-nowrap text-slate-500">
|
||||
{{ $assignment->starts_on?->format('d M Y') }}
|
||||
–
|
||||
{{ $assignment->ends_on?->format('d M Y') ?? 'open' }}
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="4" class="py-6 text-slate-500">No active nursing allocations today.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Care units</h2>
|
||||
<div class="mt-4 grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
|
||||
@forelse ($units as $unit)
|
||||
<div class="rounded-xl border border-slate-100 px-4 py-3">
|
||||
<a href="{{ route('care.care-units.show', $unit) }}" class="font-medium text-slate-900 hover:text-indigo-700">{{ $unit->name }}</a>
|
||||
<p class="mt-0.5 text-xs text-slate-500">{{ $unit->department?->name }} · {{ str_replace('_', ' ', $unit->kind) }}</p>
|
||||
<div class="mt-3 flex flex-wrap gap-2 text-xs">
|
||||
@if ($canViewRoster)
|
||||
<a href="{{ route('care.care-units.roster', $unit) }}" class="text-indigo-600 hover:text-indigo-800">Roster</a>
|
||||
@endif
|
||||
<a href="{{ route('care.care-units.mar', $unit) }}" class="text-slate-600 hover:text-slate-900">MAR</a>
|
||||
<a href="{{ route('care.care-units.notes', $unit) }}" class="text-slate-600 hover:text-slate-900">Notes</a>
|
||||
<a href="{{ route('care.care-units.handovers', $unit) }}" class="text-slate-600 hover:text-slate-900">Handover</a>
|
||||
<a href="{{ route('care.care-units.assessments', $unit) }}" class="text-slate-600 hover:text-slate-900">Assess</a>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<p class="text-sm text-slate-500 sm:col-span-2 lg:col-span-3">No care units yet — create units under Care units.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,110 @@
|
||||
<x-app-layout title="Shift templates">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-start justify-between gap-4">
|
||||
<div>
|
||||
<p class="text-sm text-slate-500">
|
||||
<a href="{{ route('care.nursing.services') }}" class="text-indigo-600 hover:text-indigo-800">Nursing Services</a>
|
||||
<span class="text-slate-300">/</span>
|
||||
Shifts
|
||||
</p>
|
||||
<h1 class="mt-1 text-2xl font-semibold text-slate-900">Shift templates</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Organization-wide duty periods used on unit rosters.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead class="bg-slate-50 text-left text-xs uppercase text-slate-500">
|
||||
<tr>
|
||||
<th class="px-4 py-3">Label</th>
|
||||
<th class="px-4 py-3">Code</th>
|
||||
<th class="px-4 py-3">Hours</th>
|
||||
<th class="px-4 py-3">Status</th>
|
||||
<th class="px-4 py-3"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-50">
|
||||
@foreach ($shifts as $shift)
|
||||
<tr>
|
||||
<td class="px-4 py-3">
|
||||
<span class="mr-2 inline-block h-2.5 w-2.5 rounded-full" style="background: {{ $shift->color ?? '#64748b' }}"></span>
|
||||
<span class="font-medium">{{ $shift->label }}</span>
|
||||
</td>
|
||||
<td class="px-4 py-3 font-mono text-xs text-slate-500">{{ $shift->code }}</td>
|
||||
<td class="px-4 py-3 whitespace-nowrap">{{ $shift->timeLabel() }}</td>
|
||||
<td class="px-4 py-3">
|
||||
@if ($shift->is_active)
|
||||
<span class="text-emerald-700">Active</span>
|
||||
@else
|
||||
<span class="text-slate-400">Inactive</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="px-4 py-3 text-right">
|
||||
<details class="relative inline-block text-left">
|
||||
<summary class="cursor-pointer text-indigo-600 hover:text-indigo-800">Edit</summary>
|
||||
<form method="POST" action="{{ route('care.shifts.update', $shift) }}" class="absolute right-0 z-10 mt-2 w-72 rounded-xl border border-slate-200 bg-white p-4 shadow-lg">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Label</label>
|
||||
<input type="text" name="label" value="{{ old('label', $shift->label) }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Start</label>
|
||||
<input type="time" name="start_time" value="{{ old('start_time', substr((string) $shift->start_time, 0, 5)) }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">End</label>
|
||||
<input type="time" name="end_time" value="{{ old('end_time', substr((string) $shift->end_time, 0, 5)) }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Color</label>
|
||||
<input type="color" name="color" value="{{ old('color', $shift->color ?? '#64748b') }}" class="mt-1 h-9 w-full rounded-lg border border-slate-300">
|
||||
</div>
|
||||
<label class="flex items-center gap-2 text-sm text-slate-700">
|
||||
<input type="checkbox" name="is_active" value="1" @checked(old('is_active', $shift->is_active)) class="rounded border-slate-300">
|
||||
Active
|
||||
</label>
|
||||
<button type="submit" class="btn-primary w-full">Save</button>
|
||||
</div>
|
||||
</form>
|
||||
</details>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-6">
|
||||
<h2 class="text-base font-semibold text-slate-900">Add shift</h2>
|
||||
<form method="POST" action="{{ route('care.shifts.store') }}" class="mt-4 grid gap-3 sm:grid-cols-2 lg:grid-cols-5">
|
||||
@csrf
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Code</label>
|
||||
<input type="text" name="code" value="{{ old('code') }}" required placeholder="e.g. long_day" class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@error('code')<p class="mt-1 text-xs text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Label</label>
|
||||
<input type="text" name="label" value="{{ old('label') }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
@error('label')<p class="mt-1 text-xs text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">Start</label>
|
||||
<input type="time" name="start_time" value="{{ old('start_time', '07:00') }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium uppercase text-slate-500">End</label>
|
||||
<input type="time" name="end_time" value="{{ old('end_time', '19:00') }}" required class="mt-1 w-full rounded-lg border-slate-300 text-sm">
|
||||
</div>
|
||||
<div class="flex items-end">
|
||||
<button type="submit" class="btn-primary w-full">Create</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -119,6 +119,10 @@
|
||||
$adminNav[] = ['name' => 'Care units', 'route' => route('care.care-units.index'), 'active' => request()->routeIs('care.care-units.*'),
|
||||
'icon' => '<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3h.008v.008h-.008v-.008Zm0 3h.008v.008h-.008v-.008Zm0 3h.008v.008h-.008v-.008Z" />'];
|
||||
}
|
||||
if ($permissions->can($member, 'nursing.services.view')) {
|
||||
$adminNav[] = ['name' => 'Nursing Services', 'route' => route('care.nursing.services'), 'active' => request()->routeIs('care.nursing.*') || request()->routeIs('care.shifts.*'),
|
||||
'icon' => '<path stroke-linecap="round" stroke-linejoin="round" d="M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z" />'];
|
||||
}
|
||||
if ($permissions->can($member, 'admin.members.view')) {
|
||||
$adminNav[] = ['name' => 'Staff assignments', 'route' => route('care.staff-assignments.index'), 'active' => request()->routeIs('care.staff-assignments.*'),
|
||||
'icon' => '<path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z" />'];
|
||||
|
||||
Reference in New Issue
Block a user