45 lines
1.5 KiB
PHP
45 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Holding;
|
|
|
|
use App\EmploymentAssignment;
|
|
use App\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
class ContextAssignmentService
|
|
{
|
|
public function getActiveAssignment(User $user, ?int $requestedAssignmentId = null): ?EmploymentAssignment
|
|
{
|
|
// Prevent SQL exceptions when new holding tables are not migrated yet.
|
|
if (! Schema::hasTable('employment_assignments')) {
|
|
return null;
|
|
}
|
|
|
|
$query = EmploymentAssignment::with(['entity', 'orgUnit', 'role', 'scopes'])
|
|
->where('user_id', $user->id)
|
|
->where('is_active', true)
|
|
->where(function ($q) {
|
|
$q->whereNull('start_date')->orWhereDate('start_date', '<=', now());
|
|
})
|
|
->where(function ($q) {
|
|
$q->whereNull('end_date')->orWhereDate('end_date', '>=', now());
|
|
});
|
|
|
|
if (! empty($requestedAssignmentId)) {
|
|
return (clone $query)->where('id', $requestedAssignmentId)->first();
|
|
}
|
|
|
|
return (clone $query)->where('is_primary', true)->first() ?: $query->first();
|
|
}
|
|
|
|
public function resolveFromRequest(Request $request, User $user): ?EmploymentAssignment
|
|
{
|
|
$assignmentId = $request->header('X-Assignment-Id')
|
|
?: $request->query('assignment_id')
|
|
?: $request->session()->get('holding.active_assignment_id');
|
|
|
|
return $this->getActiveAssignment($user, ! empty($assignmentId) ? (int) $assignmentId : null);
|
|
}
|
|
}
|