$projectIds Projects to aggregate over. May include * the program row itself and its children, * or a hand-picked subset for a report. * @param string|null $actualsFrom Start of the logged-hours window * (Y-m-d, UTC — DB datetimes are stored * in UTC; do not pass user-local dates). * Null = provider default (current week). * @param string|null $actualsTo End of the logged-hours window (Y-m-d, * UTC, inclusive). Pass the report period * so actuals line up with what's reported on. * @return ResourceSummary Empty summary if none of the projects have * resources authored. */ public function getForProjects(array $projectIds, ?string $actualsFrom = null, ?string $actualsTo = null): ResourceSummary; /** * Aggregate resources for a program and its child projects. * * @param int $programId A `zp_projects.id` where `type='program'`. */ public function getForProgram(int $programId): ResourceSummary; }