ultimatepos/app/Services/Holding/ContextAssignmentService.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);
}
}