hide expired projects in team-projects widget (#2432)

This commit is contained in:
Kevin Papst
2021-03-14 13:24:24 +01:00
committed by GitHub
parent ec0eca39ff
commit 0a6ea6be42
3 changed files with 43 additions and 1 deletions

View File

@@ -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
*/

View File

@@ -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;

View File

@@ -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));
}
}