From e2ac6a0b17f6fc89d118771f1594381fd9a3702e Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Fri, 22 Jul 2022 12:27:53 +0200 Subject: [PATCH] Project date-range report: allow budget-type independent project-listing (#3430) --- src/Project/ProjectStatisticService.php | 2 +- .../ProjectDateRange/ProjectDateRangeForm.php | 1 + .../ProjectDateRange/ProjectDateRangeQuery.php | 16 +++++++++++++--- .../Reporting/ProjectDateRangeControllerTest.php | 1 + .../ProjectDateRangeQueryTest.php | 7 ++++--- translations/messages.de.xlf | 4 ++++ translations/messages.en.xlf | 4 ++++ 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Project/ProjectStatisticService.php b/src/Project/ProjectStatisticService.php index de679650..978c30c8 100644 --- a/src/Project/ProjectStatisticService.php +++ b/src/Project/ProjectStatisticService.php @@ -168,7 +168,7 @@ class ProjectStatisticService $qb->expr()->eq('p.budget', 0.0), $qb->expr()->eq('p.timeBudget', 0) ); - } else { + } elseif (!$query->isBudgetIndependent()) { $qb->andWhere( $qb->expr()->orX( $qb->expr()->gt('p.budget', 0.0), diff --git a/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php b/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php index cbd2d5df..83b0d10d 100644 --- a/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php +++ b/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php @@ -56,6 +56,7 @@ class ProjectDateRangeForm extends AbstractType 'multiple' => false, 'expanded' => true, 'choices' => [ + 'label.budgetIndependent' => null, 'label.includeNoBudget' => 'none', 'label.includeBudgetType_full' => 'full', 'label.includeBudgetType_month' => 'month', diff --git a/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php b/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php index 0e5d8e73..106f390d 100644 --- a/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php +++ b/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php @@ -26,9 +26,14 @@ final class ProjectDateRangeQuery * @var Customer|null */ private $customer; - - private $includeNoWork = true; - private $budgetType = 'month'; + /** + * @var bool + */ + private $includeNoWork = false; + /** + * @var string|null + */ + private $budgetType = null; public function __construct(\DateTime $month, User $user) { @@ -36,6 +41,11 @@ final class ProjectDateRangeQuery $this->user = $user; } + public function isBudgetIndependent(): bool + { + return $this->budgetType === null; + } + public function isIncludeNoBudget(): bool { return $this->budgetType === 'none'; diff --git a/tests/Controller/Reporting/ProjectDateRangeControllerTest.php b/tests/Controller/Reporting/ProjectDateRangeControllerTest.php index 59412849..6098e1a6 100644 --- a/tests/Controller/Reporting/ProjectDateRangeControllerTest.php +++ b/tests/Controller/Reporting/ProjectDateRangeControllerTest.php @@ -51,6 +51,7 @@ class ProjectDateRangeControllerTest extends ControllerBaseTest $activities = $this->importFixture($activities); $timesheets = new TimesheetFixtures(); + $timesheets->setStartDate(new \DateTime()); $timesheets->setAmount(50); $timesheets->setActivities($activities); $timesheets->setUser($this->getUserByRole(User::ROLE_TEAMLEAD)); diff --git a/tests/Reporting/ProjectDateRange/ProjectDateRangeQueryTest.php b/tests/Reporting/ProjectDateRange/ProjectDateRangeQueryTest.php index c04b29c4..690b3ac8 100644 --- a/tests/Reporting/ProjectDateRange/ProjectDateRangeQueryTest.php +++ b/tests/Reporting/ProjectDateRange/ProjectDateRangeQueryTest.php @@ -28,11 +28,12 @@ class ProjectDateRangeQueryTest extends TestCase self::assertEquals($date->getTimestamp(), $sut->getMonth()->getTimestamp()); self::assertSame($user, $sut->getUser()); self::assertNull($sut->getCustomer()); - self::assertTrue($sut->isIncludeNoWork()); + self::assertFalse($sut->isIncludeNoWork()); - self::assertEquals('month', $sut->getBudgetType()); + self::assertNull($sut->getBudgetType()); self::assertFalse($sut->isIncludeNoBudget()); - self::assertTrue($sut->isBudgetTypeMonthly()); + self::assertFalse($sut->isBudgetTypeMonthly()); + self::assertTrue($sut->isBudgetIndependent()); } public function testSetterGetter() diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 74d5009f..450d46c3 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -1221,6 +1221,10 @@ label.includeBudgetType_month Einträge mit „Monats-Budget“ anzeigen + + label.budgetIndependent + Unabhängig vom „Budget-Typ“ anzeigen + label.includeBudgetType_full Einträge mit „Lebenszyklus“-Budget anzeigen diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 536af04f..e4d10a41 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -1221,6 +1221,10 @@ label.includeBudgetType_month Show entries with "monthly" budget + + label.budgetIndependent + Show regardless of "budget-type" + label.includeBudgetType_full Show entries with "life cycle" budget