added first and last fields for invoices (#3594)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user