invoice: do not use activity name as fallback for description (#4884)

* added replacement field description_safe
This commit is contained in:
Kevin Papst
2024-06-03 19:01:40 +02:00
committed by GitHub
parent e29ef25581
commit 93ca983e0b
6 changed files with 29 additions and 19 deletions

View File

@@ -88,10 +88,6 @@ abstract class AbstractMergedCalculator extends AbstractCalculator
$invoiceItem->setProject($entry->getProject()); $invoiceItem->setProject($entry->getProject());
} }
if (empty($invoiceItem->getDescription()) && null !== $entry->getActivity()) {
$invoiceItem->setDescription($entry->getActivity()->getName());
}
if ($entry instanceof Timesheet) { if ($entry instanceof Timesheet) {
foreach ($entry->getTagsAsArray() as $tag) { foreach ($entry->getTagsAsArray() as $tag) {
$invoiceItem->addTag($tag); $invoiceItem->addTag($tag);

View File

@@ -47,10 +47,6 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator
$begin = $item->getBegin(); $begin = $item->getBegin();
$end = $item->getEnd(); $end = $item->getEnd();
if (empty($description) && null !== $activity) {
$description = $activity->getName();
}
// this should never happen! // this should never happen!
if (empty($appliedRate)) { if (empty($appliedRate)) {
$appliedRate = 0; $appliedRate = 0;
@@ -59,6 +55,7 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator
$values = [ $values = [
'entry.row' => '', 'entry.row' => '',
'entry.description' => $description ?? '', 'entry.description' => $description ?? '',
'entry.description_safe' => ($description === null || $description === '' ? ($activity?->getName() ?? $project?->getName() ?? '') : $description),
'entry.amount' => $amount, 'entry.amount' => $amount,
'entry.type' => $item->getType(), 'entry.type' => $item->getType(),
'entry.tags' => implode(', ', $item->getTags()), 'entry.tags' => implode(', ', $item->getTags()),

View File

@@ -111,7 +111,7 @@ class ShortInvoiceCalculatorTest extends AbstractCalculatorTest
$result = $entries[0]; $result = $entries[0];
$this->assertEquals('2018-11-28', $result->getBegin()?->format('Y-m-d')); $this->assertEquals('2018-11-28', $result->getBegin()?->format('Y-m-d'));
$this->assertEquals('activity description', $result->getDescription()); $this->assertEquals('', $result->getDescription());
$this->assertEquals(293.27, $result->getHourlyRate()); $this->assertEquals(293.27, $result->getHourlyRate());
$this->assertNull($result->getFixedRate()); $this->assertNull($result->getFixedRate());
$this->assertEquals(472.5, $result->getRate()); $this->assertEquals(472.5, $result->getRate());
@@ -190,7 +190,7 @@ class ShortInvoiceCalculatorTest extends AbstractCalculatorTest
/** @var InvoiceItem $result */ /** @var InvoiceItem $result */
$result = $sut->getEntries()[0]; $result = $sut->getEntries()[0];
$this->assertEquals('activity description', $result->getDescription()); $this->assertNull($result->getDescription());
$this->assertEquals(488.38, $result->getHourlyRate()); $this->assertEquals(488.38, $result->getHourlyRate());
$this->assertEquals(488.38, $result->getFixedRate()); $this->assertEquals(488.38, $result->getFixedRate());
$this->assertEquals(488.38, $result->getRate()); $this->assertEquals(488.38, $result->getRate());
@@ -266,7 +266,7 @@ class ShortInvoiceCalculatorTest extends AbstractCalculatorTest
/** @var InvoiceItem $result */ /** @var InvoiceItem $result */
$result = $sut->getEntries()[0]; $result = $sut->getEntries()[0];
$this->assertEquals('activity description', $result->getDescription()); $this->assertNull($result->getDescription());
$this->assertEquals(488.38, $result->getHourlyRate()); $this->assertEquals(488.38, $result->getHourlyRate());
$this->assertEquals(488.38, $result->getRate()); $this->assertEquals(488.38, $result->getRate());
$this->assertEquals(5800, $result->getDuration()); $this->assertEquals(5800, $result->getDuration());

View File

@@ -27,13 +27,26 @@ class InvoiceItemDefaultHydratorTest extends TestCase
$sut = new InvoiceItemDefaultHydrator(); $sut = new InvoiceItemDefaultHydrator();
$sut->setInvoiceModel($model); $sut->setInvoiceModel($model);
$result = $sut->hydrate($model->getCalculator()->getEntries()[0]); $expected = [
$metaFields = ['entry.meta.foo-timesheet']; ['meta_fields' => ['entry.meta.foo-timesheet'], 'description' => '== jhg ljhg ', 'description_safe' => '== jhg ljhg '],
$this->assertEntryStructure($result, $metaFields); ['meta_fields' => ['entry.meta.foo-timesheet', 'entry.meta.foo-timesheet2'], 'description' => '', 'description_safe' => 'activity description'],
['meta_fields' => ['entry.meta.foo-timesheet'], 'description' => '', 'description_safe' => 'activity description'],
['meta_fields' => ['entry.meta.foo-timesheet3']],
['meta_fields' => []],
];
$result = $sut->hydrate($model->getCalculator()->getEntries()[1]); $i = 0;
$metaFields = ['entry.meta.foo-timesheet', 'entry.meta.foo-timesheet2']; foreach ($model->getCalculator()->getEntries() as $entry) {
$this->assertEntryStructure($result, $metaFields); $result = $sut->hydrate($entry);
$exp = $expected[$i++];
$this->assertEntryStructure($result, $exp['meta_fields']);
if (\array_key_exists('description', $exp)) {
$this->assertEquals($exp['description'], $result['entry.description']);
}
if (\array_key_exists('description_safe', $exp)) {
$this->assertEquals($exp['description_safe'], $result['entry.description_safe']);
}
}
} }
public function assertEntryStructure(array $model, array $metaFields): void public function assertEntryStructure(array $model, array $metaFields): void
@@ -41,6 +54,7 @@ class InvoiceItemDefaultHydratorTest extends TestCase
$keys = [ $keys = [
'entry.row', 'entry.row',
'entry.description', 'entry.description',
'entry.description_safe',
'entry.amount', 'entry.amount',
'entry.rate', 'entry.rate',
'entry.rate_nc', 'entry.rate_nc',
@@ -87,7 +101,9 @@ class InvoiceItemDefaultHydratorTest extends TestCase
'entry.tags', 'entry.tags',
]; ];
$keys = array_merge($keys, $metaFields); if (\count($metaFields) > 0) {
$keys = array_merge($keys, $metaFields);
}
foreach ($keys as $key) { foreach ($keys as $key) {
$this->assertArrayHasKey($key, $model); $this->assertArrayHasKey($key, $model);

View File

@@ -262,6 +262,7 @@ class DebugRendererTest extends TestCase
$keys = [ $keys = [
'entry.row', 'entry.row',
'entry.description', 'entry.description',
'entry.description_safe',
'entry.amount', 'entry.amount',
'entry.rate', 'entry.rate',
'entry.rate_nc', 'entry.rate_nc',

View File

@@ -2250,7 +2250,7 @@ parameters:
- -
message: "#^Cannot call method getEntries\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" message: "#^Cannot call method getEntries\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#"
count: 2 count: 1
path: Invoice/Hydrator/InvoiceItemDefaultHydratorTest.php path: Invoice/Hydrator/InvoiceItemDefaultHydratorTest.php
- -