/** * @param WorkTime $workTime * @return WorkTimeDTO */ public static function withEntity(WorkTime $workTime) { $dto = new WorkTimeDTO(); $dto->setId($workTime->getId()); $dto->setDescription($workTime->getDescription()); $dto->setDuration($workTime->getDuration() ? $workTime->getDuration()->format('H:i') : null); $dto->setStartDate($workTime->getStartDate()); $dto->setEndDate($workTime->getEndDate()); $dto->setProject(ProjectDTO::withEntity($workTime->getProject())); return $dto; }
/** * @param Project $project * @param bool|false $withWorkTime * @return ProjectDTO */ public static function withEntity(Project $project, $withWorkTime = false) { $dto = new ProjectDTO(); $dto->setId($project->getId()); $dto->setDescription($project->getDescription()); $dto->setHourlyRate($project->getHourlyRate()); $dto->setTitle($project->getTitle()); if ($withWorkTime) { foreach ($project->getWorkTimes() as $workTime) { $dto->addWorkTime(WorkTimeDTO::withEntity($workTime)); } } return $dto; }
/** * @param $userId * @param $projectId * @return ProjectOverviewDTO * @throws ProjectNotFoundException */ public function getProjectOverview($userId, $projectId) { $project = $this->projectRepository->getProjectWithWorkTime($projectId, $userId); if ($project === null) { throw new ProjectNotFoundException(); } $projectOverviewDTO = new ProjectOverviewDTO(); $projectOverviewDTO->setProject(ProjectDTO::withEntity($project, true)); $totalDurationInMinutes = 0; foreach ($project->getWorkTimes() as $workTime) { if ($workTime->getEndDate() === null) { continue; } $totalDurationInMinutes += $workTime->getDuration()->format('H') * 60 + $workTime->getDuration()->format('i'); } $projectOverviewDTO->setAmountWorkTimes(count($project->getWorkTimes())); $minutes = $totalDurationInMinutes % 60; $projectOverviewDTO->setTotalDuration(floor($totalDurationInMinutes / 60) . ':' . ($minutes >= 10 ? $minutes : $minutes . '0')); #$projectOverviewDTO->setTotalDurationByMonth() #$projectOverviewDTO->setTotalIncome() #$projectOverviewDTO->setTotalIncomeByMonth() return $projectOverviewDTO; }