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;
|
return $values;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ class InvoiceModelDefaultHydratorTest extends TestCase
|
|||||||
'invoice.tax_plain',
|
'invoice.tax_plain',
|
||||||
'invoice.total_time',
|
'invoice.total_time',
|
||||||
'invoice.duration_decimal',
|
'invoice.duration_decimal',
|
||||||
|
'invoice.first',
|
||||||
|
'invoice.last',
|
||||||
'invoice.total',
|
'invoice.total',
|
||||||
'invoice.total_nc',
|
'invoice.total_nc',
|
||||||
'invoice.total_plain',
|
'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('m'), $data['model']['query.month_number']);
|
||||||
self::assertEquals($begin->format('d'), $data['model']['query.day']);
|
self::assertEquals($begin->format('d'), $data['model']['query.day']);
|
||||||
// TODO check values or formats?
|
// 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)
|
protected function assertModelStructure(array $model, int $projectCounter = 0, int $activityCounter = 0)
|
||||||
@@ -89,6 +91,8 @@ class DebugRendererTest extends TestCase
|
|||||||
'invoice.tax_plain',
|
'invoice.tax_plain',
|
||||||
'invoice.total_time',
|
'invoice.total_time',
|
||||||
'invoice.duration_decimal',
|
'invoice.duration_decimal',
|
||||||
|
'invoice.first',
|
||||||
|
'invoice.last',
|
||||||
'invoice.total',
|
'invoice.total',
|
||||||
'invoice.total_nc',
|
'invoice.total_nc',
|
||||||
'invoice.total_plain',
|
'invoice.total_plain',
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ trait RendererTestTrait
|
|||||||
->setUser($user2)
|
->setUser($user2)
|
||||||
->setActivity($activity)
|
->setActivity($activity)
|
||||||
->setProject($project)
|
->setProject($project)
|
||||||
->setBegin(new \DateTime())
|
->setBegin(new \DateTime('2020-08-13 14:00:00'))
|
||||||
->setEnd(new \DateTime())
|
->setEnd(new \DateTime('2020-08-13 14:06:40'))
|
||||||
->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet'))
|
->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet'))
|
||||||
->setMetaField((new TimesheetMeta())->setName('foo-timesheet2')->setValue('bar-timesheet2')->setIsVisible(true))
|
->setMetaField((new TimesheetMeta())->setName('foo-timesheet2')->setValue('bar-timesheet2')->setIsVisible(true))
|
||||||
;
|
;
|
||||||
@@ -166,8 +166,8 @@ trait RendererTestTrait
|
|||||||
->setActivity($activity2)
|
->setActivity($activity2)
|
||||||
->setDescription('== jhg ljhg ') // make sure that spreadsheets don't render it as formula
|
->setDescription('== jhg ljhg ') // make sure that spreadsheets don't render it as formula
|
||||||
->setProject($project2)
|
->setProject($project2)
|
||||||
->setBegin(new \DateTime())
|
->setBegin(new \DateTime('2020-08-12 18:00:00'))
|
||||||
->setEnd(new \DateTime())
|
->setEnd(new \DateTime('2020-08-12 18:30:00'))
|
||||||
->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet1')->setIsVisible(true))
|
->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet1')->setIsVisible(true))
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -198,8 +198,8 @@ trait RendererTestTrait
|
|||||||
->setUser((new User())->setUsername('kevin'))
|
->setUser((new User())->setUsername('kevin'))
|
||||||
->setActivity($activity)
|
->setActivity($activity)
|
||||||
->setProject($project)
|
->setProject($project)
|
||||||
->setBegin(new \DateTime())
|
->setBegin(new \DateTime('2021-03-12 07:13:00'))
|
||||||
->setEnd(new \DateTime())
|
->setEnd(new \DateTime('2021-03-12 07:17:40'))
|
||||||
->setDescription(
|
->setDescription(
|
||||||
"foo\n" .
|
"foo\n" .
|
||||||
"foo\r\n" .
|
"foo\r\n" .
|
||||||
@@ -291,8 +291,8 @@ trait RendererTestTrait
|
|||||||
->setUser($user1)
|
->setUser($user1)
|
||||||
->setActivity($activity)
|
->setActivity($activity)
|
||||||
->setProject($project)
|
->setProject($project)
|
||||||
->setBegin(new \DateTime())
|
->setBegin(new \DateTime('2020-08-12 18:00:00'))
|
||||||
->setEnd(new \DateTime())
|
->setEnd(new \DateTime('2022-10-23 18:30:00'))
|
||||||
;
|
;
|
||||||
|
|
||||||
$entries = [$timesheet];
|
$entries = [$timesheet];
|
||||||
|
|||||||
Reference in New Issue
Block a user