Separate unit placements from shift duty assignments.
Deploy Ladill Care / deploy (push) Successful in 30s

Roster no longer writes temporary staff assignments; unit assignment UI drops shift fields and labels clarify the two workflows.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-20 11:49:18 +00:00
co-authored by Cursor
parent 5125a6fe27
commit b7aca6ee2b
15 changed files with 68 additions and 101 deletions
@@ -52,7 +52,6 @@ class NursingServicesController extends Controller
'canRoster' => $permissions->can($member, 'nursing.roster.manage'),
'canViewRoster' => $permissions->can($member, 'nursing.roster.view'),
'assignmentRoles' => config('care.staff_assignment_roles'),
'shiftCodes' => config('care.staff_shift_codes'),
]);
}
}
@@ -27,6 +27,7 @@ class StaffAssignmentController extends Controller
$assignments = StaffAssignment::owned($owner)
->where('organization_id', $organization->id)
->unitPlacements()
->with(['member.branch', 'department.branch', 'careUnit'])
->orderByDesc('starts_on')
->orderByDesc('id')
@@ -45,7 +46,6 @@ class StaffAssignmentController extends Controller
'kinds' => config('care.staff_assignment_kinds'),
'statuses' => config('care.staff_assignment_statuses'),
'assignmentRoles' => config('care.staff_assignment_roles'),
'shiftCodes' => config('care.staff_shift_codes'),
'memberLabels' => $this->memberLabels($assignments->pluck('member')->filter()),
'heroStats' => $heroStats,
]);
@@ -74,7 +74,7 @@ class StaffAssignmentController extends Controller
AuditLogger::record($owner, 'staff_assignment.created', $organization->id, $owner, StaffAssignment::class, $assignment->id);
return redirect()->route('care.staff-assignments.index')->with('success', 'Staff assignment created.');
return redirect()->route('care.staff-assignments.index')->with('success', 'Unit assignment created.');
}
public function edit(Request $request, StaffAssignment $staffAssignment): View
@@ -100,7 +100,7 @@ class StaffAssignmentController extends Controller
AuditLogger::record($owner, 'staff_assignment.updated', $organization->id, $owner, StaffAssignment::class, $staffAssignment->id);
return redirect()->route('care.staff-assignments.index')->with('success', 'Staff assignment updated.');
return redirect()->route('care.staff-assignments.index')->with('success', 'Unit assignment updated.');
}
public function destroy(Request $request, StaffAssignment $staffAssignment): RedirectResponse
@@ -119,7 +119,7 @@ class StaffAssignmentController extends Controller
$staffAssignment->id,
);
return redirect()->route('care.staff-assignments.index')->with('success', 'Staff assignment removed.');
return redirect()->route('care.staff-assignments.index')->with('success', 'Unit assignment removed.');
}
/**
@@ -159,7 +159,6 @@ class StaffAssignmentController extends Controller
'kinds' => config('care.staff_assignment_kinds'),
'statuses' => config('care.staff_assignment_statuses'),
'assignmentRoles' => config('care.staff_assignment_roles'),
'shiftCodes' => config('care.staff_shift_codes'),
'rbacRoles' => config('care.roles'),
'selectedMemberId' => $request->integer('member_id') ?: null,
];
@@ -181,13 +180,12 @@ class StaffAssignmentController extends Controller
],
'kind' => ['required', 'string', Rule::in(array_keys(config('care.staff_assignment_kinds')))],
'assignment_role' => ['nullable', 'string', Rule::in(array_keys(config('care.staff_assignment_roles')))],
'shift_code' => ['nullable', 'string', Rule::in(array_keys(config('care.staff_shift_codes')))],
'starts_on' => ['required', 'date'],
'ends_on' => ['nullable', 'date', 'after_or_equal:starts_on'],
'status' => ['required', 'string', Rule::in(array_keys(config('care.staff_assignment_statuses')))],
'notes' => ['nullable', 'string', 'max:2000'],
], [
'care_unit_id.required' => 'Temporary assignments require a care unit.',
'care_unit_id.required' => 'Temporary unit assignments require a care unit.',
]);
$member = Member::owned($owner)->findOrFail($validated['member_id']);
@@ -221,7 +219,7 @@ class StaffAssignmentController extends Controller
'care_unit_id' => $validated['care_unit_id'] ? (int) $validated['care_unit_id'] : null,
'kind' => $validated['kind'],
'assignment_role' => $validated['assignment_role'] ?? null,
'shift_code' => $validated['shift_code'] ?? null,
'shift_code' => null,
'starts_on' => $validated['starts_on'],
'ends_on' => $validated['ends_on'] ?? null,
'status' => $validated['status'],