Project date-range report: allow budget-type independent project-listing (#3430)
This commit is contained in:
@@ -168,7 +168,7 @@ class ProjectStatisticService
|
|||||||
$qb->expr()->eq('p.budget', 0.0),
|
$qb->expr()->eq('p.budget', 0.0),
|
||||||
$qb->expr()->eq('p.timeBudget', 0)
|
$qb->expr()->eq('p.timeBudget', 0)
|
||||||
);
|
);
|
||||||
} else {
|
} elseif (!$query->isBudgetIndependent()) {
|
||||||
$qb->andWhere(
|
$qb->andWhere(
|
||||||
$qb->expr()->orX(
|
$qb->expr()->orX(
|
||||||
$qb->expr()->gt('p.budget', 0.0),
|
$qb->expr()->gt('p.budget', 0.0),
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class ProjectDateRangeForm extends AbstractType
|
|||||||
'multiple' => false,
|
'multiple' => false,
|
||||||
'expanded' => true,
|
'expanded' => true,
|
||||||
'choices' => [
|
'choices' => [
|
||||||
|
'label.budgetIndependent' => null,
|
||||||
'label.includeNoBudget' => 'none',
|
'label.includeNoBudget' => 'none',
|
||||||
'label.includeBudgetType_full' => 'full',
|
'label.includeBudgetType_full' => 'full',
|
||||||
'label.includeBudgetType_month' => 'month',
|
'label.includeBudgetType_month' => 'month',
|
||||||
|
|||||||
@@ -26,9 +26,14 @@ final class ProjectDateRangeQuery
|
|||||||
* @var Customer|null
|
* @var Customer|null
|
||||||
*/
|
*/
|
||||||
private $customer;
|
private $customer;
|
||||||
|
/**
|
||||||
private $includeNoWork = true;
|
* @var bool
|
||||||
private $budgetType = 'month';
|
*/
|
||||||
|
private $includeNoWork = false;
|
||||||
|
/**
|
||||||
|
* @var string|null
|
||||||
|
*/
|
||||||
|
private $budgetType = null;
|
||||||
|
|
||||||
public function __construct(\DateTime $month, User $user)
|
public function __construct(\DateTime $month, User $user)
|
||||||
{
|
{
|
||||||
@@ -36,6 +41,11 @@ final class ProjectDateRangeQuery
|
|||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isBudgetIndependent(): bool
|
||||||
|
{
|
||||||
|
return $this->budgetType === null;
|
||||||
|
}
|
||||||
|
|
||||||
public function isIncludeNoBudget(): bool
|
public function isIncludeNoBudget(): bool
|
||||||
{
|
{
|
||||||
return $this->budgetType === 'none';
|
return $this->budgetType === 'none';
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ class ProjectDateRangeControllerTest extends ControllerBaseTest
|
|||||||
$activities = $this->importFixture($activities);
|
$activities = $this->importFixture($activities);
|
||||||
|
|
||||||
$timesheets = new TimesheetFixtures();
|
$timesheets = new TimesheetFixtures();
|
||||||
|
$timesheets->setStartDate(new \DateTime());
|
||||||
$timesheets->setAmount(50);
|
$timesheets->setAmount(50);
|
||||||
$timesheets->setActivities($activities);
|
$timesheets->setActivities($activities);
|
||||||
$timesheets->setUser($this->getUserByRole(User::ROLE_TEAMLEAD));
|
$timesheets->setUser($this->getUserByRole(User::ROLE_TEAMLEAD));
|
||||||
|
|||||||
@@ -28,11 +28,12 @@ class ProjectDateRangeQueryTest extends TestCase
|
|||||||
self::assertEquals($date->getTimestamp(), $sut->getMonth()->getTimestamp());
|
self::assertEquals($date->getTimestamp(), $sut->getMonth()->getTimestamp());
|
||||||
self::assertSame($user, $sut->getUser());
|
self::assertSame($user, $sut->getUser());
|
||||||
self::assertNull($sut->getCustomer());
|
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::assertFalse($sut->isIncludeNoBudget());
|
||||||
self::assertTrue($sut->isBudgetTypeMonthly());
|
self::assertFalse($sut->isBudgetTypeMonthly());
|
||||||
|
self::assertTrue($sut->isBudgetIndependent());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSetterGetter()
|
public function testSetterGetter()
|
||||||
|
|||||||
@@ -1221,6 +1221,10 @@
|
|||||||
<source>label.includeBudgetType_month</source>
|
<source>label.includeBudgetType_month</source>
|
||||||
<target>Einträge mit „Monats-Budget“ anzeigen</target>
|
<target>Einträge mit „Monats-Budget“ anzeigen</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="Wq.h4adsfsdfnD" resname="label.budgetIndependent">
|
||||||
|
<source>label.budgetIndependent</source>
|
||||||
|
<target>Unabhängig vom „Budget-Typ“ anzeigen</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="nVulc7." resname="label.includeBudgetType_full">
|
<trans-unit id="nVulc7." resname="label.includeBudgetType_full">
|
||||||
<source>label.includeBudgetType_full</source>
|
<source>label.includeBudgetType_full</source>
|
||||||
<target>Einträge mit „Lebenszyklus“-Budget anzeigen</target>
|
<target>Einträge mit „Lebenszyklus“-Budget anzeigen</target>
|
||||||
|
|||||||
@@ -1221,6 +1221,10 @@
|
|||||||
<source>label.includeBudgetType_month</source>
|
<source>label.includeBudgetType_month</source>
|
||||||
<target>Show entries with "monthly" budget</target>
|
<target>Show entries with "monthly" budget</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="Wq.h4adsfsdfnD" resname="label.budgetIndependent">
|
||||||
|
<source>label.budgetIndependent</source>
|
||||||
|
<target>Show regardless of "budget-type"</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="nVulc7." resname="label.includeBudgetType_full">
|
<trans-unit id="nVulc7." resname="label.includeBudgetType_full">
|
||||||
<source>label.includeBudgetType_full</source>
|
<source>label.includeBudgetType_full</source>
|
||||||
<target>Show entries with "life cycle" budget</target>
|
<target>Show entries with "life cycle" budget</target>
|
||||||
|
|||||||
Reference in New Issue
Block a user