diff --git a/src/Entity/Project.php b/src/Entity/Project.php index 36021557..cd1bbba7 100644 --- a/src/Entity/Project.php +++ b/src/Entity/Project.php @@ -529,6 +529,21 @@ class Project implements EntityWithMetaFields return $this->teams; } + public function isVisibleAtDate(\DateTime $dateTime): bool + { + if (!$this->isVisible()) { + return false; + } + if ($this->getCustomer() !== null && !$this->getCustomer()->isVisible()) { + return false; + } + if ($this->getEnd() !== null && $dateTime > $this->getEnd()) { + return false; + } + + return true; + } + /** * @return string */ diff --git a/src/Widget/Type/UserTeamProjects.php b/src/Widget/Type/UserTeamProjects.php index 330a8355..0fc66be3 100644 --- a/src/Widget/Type/UserTeamProjects.php +++ b/src/Widget/Type/UserTeamProjects.php @@ -46,12 +46,13 @@ class UserTeamProjects extends SimpleWidget implements AuthorizedWidget, UserWid /** @var User $user */ $user = $options['user']; $projects = []; + $now = new \DateTime('now', new \DateTimeZone($user->getTimezone())); /** @var Team $team */ foreach ($user->getTeams() as $team) { /** @var Project $project */ foreach ($team->getProjects() as $project) { - if (!$project->isVisible() || !$project->getCustomer()->isVisible()) { + if (!$project->isVisibleAtDate($now)) { continue; } $projects[$project->getId()] = $project; diff --git a/tests/Entity/ProjectTest.php b/tests/Entity/ProjectTest.php index e0a932a4..977721be 100644 --- a/tests/Entity/ProjectTest.php +++ b/tests/Entity/ProjectTest.php @@ -48,6 +48,7 @@ class ProjectTest extends TestCase self::assertNull($sut->getMetaField('foo')); self::assertInstanceOf(Collection::class, $sut->getTeams()); self::assertEquals(0, $sut->getTeams()->count()); + self::assertTrue($sut->isVisibleAtDate(new \DateTime())); } public function testSetterAndGetter() @@ -230,4 +231,29 @@ class ProjectTest extends TestCase self::assertEquals('DE-0123456789', $clone->getCustomer()->getVatId()); self::assertEquals('prj-customer', $clone->getCustomer()->getName()); } + + public function testIsVisibleAtDateTime() + { + $now = new \DateTime(); + + $customer = new Customer(); + + $sut = new Project(); + $sut->setVisible(false); + self::assertFalse($sut->isVisibleAtDate($now)); + $sut->setVisible(true); + self::assertTrue($sut->isVisibleAtDate($now)); + $sut->setCustomer($customer); + self::assertTrue($sut->isVisibleAtDate($now)); + $customer->setVisible(false); + self::assertFalse($sut->isVisibleAtDate($now)); + $customer->setVisible(true); + self::assertTrue($sut->isVisibleAtDate($now)); + $sut->setEnd(new \DateTime('+1 hour')); + self::assertTrue($sut->isVisibleAtDate($now)); + $sut->setEnd($now); + self::assertTrue($sut->isVisibleAtDate($now)); + $sut->setEnd(new \DateTime('-1 hour')); + self::assertFalse($sut->isVisibleAtDate($now)); + } }