diff --git a/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php b/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php index 8d808e9e..82aaddde 100644 --- a/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php +++ b/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php @@ -90,6 +90,27 @@ class InvoiceModelDefaultHydrator implements InvoiceModelHydrator ]); } + $entries = $model->getEntries(); + $min = null; + $max = null; + + foreach ($entries as $entry) { + if ($min === null || $min->getBegin()->getTimestamp() > $entry->getBegin()->getTimestamp()) { + $min = $entry; + } + + if ($max === null || $max->getBegin()->getTimestamp() < $entry->getBegin()->getTimestamp()) { + $max = $entry; + } + } + + if ($min !== null && $max !== null) { + $values = array_merge($values, [ + 'invoice.first' => $formatter->getFormattedDateTime($min->getBegin()), + 'invoice.last' => $formatter->getFormattedDateTime($max->getEnd()), + ]); + } + return $values; } } diff --git a/tests/Invoice/Hydrator/InvoiceModelDefaultHydratorTest.php b/tests/Invoice/Hydrator/InvoiceModelDefaultHydratorTest.php index 36fd8169..a3f4b468 100644 --- a/tests/Invoice/Hydrator/InvoiceModelDefaultHydratorTest.php +++ b/tests/Invoice/Hydrator/InvoiceModelDefaultHydratorTest.php @@ -45,6 +45,8 @@ class InvoiceModelDefaultHydratorTest extends TestCase 'invoice.tax_plain', 'invoice.total_time', 'invoice.duration_decimal', + 'invoice.first', + 'invoice.last', 'invoice.total', 'invoice.total_nc', 'invoice.total_plain', diff --git a/tests/Invoice/Renderer/DebugRendererTest.php b/tests/Invoice/Renderer/DebugRendererTest.php index 4365dfd3..55e1565a 100644 --- a/tests/Invoice/Renderer/DebugRendererTest.php +++ b/tests/Invoice/Renderer/DebugRendererTest.php @@ -72,6 +72,8 @@ class DebugRendererTest extends TestCase self::assertEquals($begin->format('m'), $data['model']['query.month_number']); self::assertEquals($begin->format('d'), $data['model']['query.day']); // TODO check values or formats? + self::assertEquals('2020.08.12', $data['model']['invoice.first']); + self::assertEquals('2022.10.23', $data['model']['invoice.last']); } protected function assertModelStructure(array $model, int $projectCounter = 0, int $activityCounter = 0) @@ -89,6 +91,8 @@ class DebugRendererTest extends TestCase 'invoice.tax_plain', 'invoice.total_time', 'invoice.duration_decimal', + 'invoice.first', + 'invoice.last', 'invoice.total', 'invoice.total_nc', 'invoice.total_plain', diff --git a/tests/Invoice/Renderer/RendererTestTrait.php b/tests/Invoice/Renderer/RendererTestTrait.php index 5718bca2..dd1877a8 100644 --- a/tests/Invoice/Renderer/RendererTestTrait.php +++ b/tests/Invoice/Renderer/RendererTestTrait.php @@ -152,8 +152,8 @@ trait RendererTestTrait ->setUser($user2) ->setActivity($activity) ->setProject($project) - ->setBegin(new \DateTime()) - ->setEnd(new \DateTime()) + ->setBegin(new \DateTime('2020-08-13 14:00:00')) + ->setEnd(new \DateTime('2020-08-13 14:06:40')) ->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet')) ->setMetaField((new TimesheetMeta())->setName('foo-timesheet2')->setValue('bar-timesheet2')->setIsVisible(true)) ; @@ -166,8 +166,8 @@ trait RendererTestTrait ->setActivity($activity2) ->setDescription('== jhg ljhg ') // make sure that spreadsheets don't render it as formula ->setProject($project2) - ->setBegin(new \DateTime()) - ->setEnd(new \DateTime()) + ->setBegin(new \DateTime('2020-08-12 18:00:00')) + ->setEnd(new \DateTime('2020-08-12 18:30:00')) ->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet1')->setIsVisible(true)) ; @@ -198,8 +198,8 @@ trait RendererTestTrait ->setUser((new User())->setUsername('kevin')) ->setActivity($activity) ->setProject($project) - ->setBegin(new \DateTime()) - ->setEnd(new \DateTime()) + ->setBegin(new \DateTime('2021-03-12 07:13:00')) + ->setEnd(new \DateTime('2021-03-12 07:17:40')) ->setDescription( "foo\n" . "foo\r\n" . @@ -291,8 +291,8 @@ trait RendererTestTrait ->setUser($user1) ->setActivity($activity) ->setProject($project) - ->setBegin(new \DateTime()) - ->setEnd(new \DateTime()) + ->setBegin(new \DateTime('2020-08-12 18:00:00')) + ->setEnd(new \DateTime('2022-10-23 18:30:00')) ; $entries = [$timesheet];