feat: implement initial project, document, and resource management modules with routing, controllers, and UI components

This commit is contained in:
Ajjj
2026-08-05 03:26:06 +08:00
parent c03de704e2
commit 80fa96097c
16 changed files with 718 additions and 320 deletions

View File

@@ -586,40 +586,7 @@ class PurchaseOrderController extends Controller
private function availableProjectsQuery()
{
$query = Project::withoutGlobalScope(\App\Scopes\TenantScope::class);
$user = auth()->user();
$siteRoles = [
'Site Technical', 'Construction Supervisor', 'Site Operations',
'Site Engineer', 'Site Supervisor',
];
$isSiteOperationsUser = $user && $user->hasAnyRole($siteRoles);
if ($user?->contractor_id) {
$contractorIds = DB::table('contractors')
->where('id', $user->contractor_id)
->orWhere('parent_id', $user->contractor_id)
->pluck('id')
->all();
$query->where(function ($projectQuery) use ($contractorIds, $user, $isSiteOperationsUser) {
$projectQuery
->whereIn('projects.contractor_id', $contractorIds)
->orWhereHas('contractors', function ($contractorQuery) use ($contractorIds) {
$contractorQuery->whereIn('contractors.id', $contractorIds);
});
if ($isSiteOperationsUser) {
$projectQuery->orWhereHas('personnel', function ($personnelQuery) use ($user) {
$personnelQuery->where('users.id', $user->id);
});
}
});
} elseif ($isSiteOperationsUser) {
$query->whereHas('personnel', function ($personnelQuery) use ($user) {
$personnelQuery->where('users.id', $user->id);
});
}
return $query;
// Project's TenantScope is the source of truth for project visibility.
return Project::query();
}
}