diff --git a/src/Invoice/Calculator/DateInvoiceCalculator.php b/src/Invoice/Calculator/DateInvoiceCalculator.php
new file mode 100644
index 00000000..9ba020af
--- /dev/null
+++ b/src/Invoice/Calculator/DateInvoiceCalculator.php
@@ -0,0 +1,32 @@
+getBegin()->format('Y-m-d');
+ }
+
+ /**
+ * @return string
+ */
+ public function getId(): string
+ {
+ return 'date';
+ }
+}
diff --git a/tests/Invoice/Calculator/DateInvoiceCalculatorTest.php b/tests/Invoice/Calculator/DateInvoiceCalculatorTest.php
new file mode 100644
index 00000000..51637bae
--- /dev/null
+++ b/tests/Invoice/Calculator/DateInvoiceCalculatorTest.php
@@ -0,0 +1,148 @@
+assertEmptyModel(new DateInvoiceCalculator());
+ }
+
+ public function testWithMultipleEntries()
+ {
+ $customer = new Customer();
+ $template = new InvoiceTemplate();
+ $template->setVat(19);
+
+ $user = $this->getMockBuilder(User::class)->setMethods(['getId'])->disableOriginalConstructor()->getMock();
+ $user->method('getId')->willReturn(1);
+
+ $project1 = $this->getMockBuilder(Project::class)->setMethods(['getId'])->disableOriginalConstructor()->getMock();
+ $project1->method('getId')->willReturn(1);
+
+ $project2 = $this->getMockBuilder(Project::class)->setMethods(['getId'])->disableOriginalConstructor()->getMock();
+ $project2->method('getId')->willReturn(2);
+
+ $project3 = $this->getMockBuilder(Project::class)->setMethods(['getId'])->disableOriginalConstructor()->getMock();
+ $project3->method('getId')->willReturn(3);
+
+ $timesheet = new Timesheet();
+ $timesheet
+ ->setBegin(new DateTime('2018-11-29'))
+ ->setEnd(new DateTime())
+ ->setDuration(3600)
+ ->setRate(293.27)
+ ->setUser($user)
+ ->setActivity((new Activity())->setName('sdsd'))
+ ->setProject($project1);
+
+ $timesheet2 = new Timesheet();
+ $timesheet2
+ ->setBegin(new DateTime('2018-11-29'))
+ ->setEnd(new DateTime())
+ ->setDuration(400)
+ ->setRate(84.75)
+ ->setUser($user)
+ ->setActivity((new Activity())->setName('bar'))
+ ->setProject($project2);
+
+ $timesheet3 = new Timesheet();
+ $timesheet3
+ ->setBegin(new DateTime('2018-11-28'))
+ ->setEnd(new DateTime())
+ ->setDuration(1800)
+ ->setRate(111.11)
+ ->setUser($user)
+ ->setActivity((new Activity())->setName('foo'))
+ ->setProject($project1);
+
+ $timesheet4 = new Timesheet();
+ $timesheet4
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime('2018-11-28'))
+ ->setDuration(400)
+ ->setRate(1947.99)
+ ->setUser($user)
+ ->setActivity((new Activity())->setName('blub'))
+ ->setProject($project2);
+
+ $timesheet5 = new Timesheet();
+ $timesheet5
+ ->setBegin(new DateTime('2018-11-28'))
+ ->setEnd(new DateTime())
+ ->setDuration(400)
+ ->setRate(84)
+ ->setUser(new User())
+ ->setActivity(new Activity())
+ ->setProject($project3);
+
+ $entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];
+
+ $query = new InvoiceQuery();
+ $query->setProject($project1);
+
+ $model = new InvoiceModel();
+ $model->setCustomer($customer);
+ $model->setTemplate($template);
+ $model->setEntries($entries);
+ $model->setQuery($query);
+
+ $sut = new DateInvoiceCalculator();
+ $sut->setModel($model);
+
+ $this->assertEquals('date', $sut->getId());
+ $this->assertEquals(3000.13, $sut->getTotal());
+ $this->assertEquals(19, $sut->getVat());
+ $this->assertEquals('EUR', $sut->getCurrency());
+ $this->assertEquals(2521.12, $sut->getSubtotal());
+ $this->assertEquals(6600, $sut->getTimeWorked());
+ $this->assertEquals(3, count($sut->getEntries()));
+
+ $entries = $sut->getEntries();
+ self::assertCount(3, $entries);
+ $this->assertEquals(378.02, $entries[0]->getRate());
+ $this->assertEquals(195.11, $entries[1]->getRate());
+ $this->assertEquals(1947.99, $entries[2]->getRate());
+ self::assertEquals(2521.12, $entries[0]->getRate() + $entries[1]->getRate() + $entries[2]->getRate());
+ }
+
+ public function testDescriptionByTimesheet()
+ {
+ $this->assertDescription(new DateInvoiceCalculator(), false, false);
+ }
+
+ public function testDescriptionByActivity()
+ {
+ $this->assertDescription(new DateInvoiceCalculator(), false, true);
+ }
+
+ public function testDescriptionByProject()
+ {
+ $this->assertDescription(new DateInvoiceCalculator(), true, false);
+ }
+}
diff --git a/tests/Invoice/Calculator/ProjectInvoiceCalculatorTest.php b/tests/Invoice/Calculator/ProjectInvoiceCalculatorTest.php
index 47c1d130..d9a0de94 100644
--- a/tests/Invoice/Calculator/ProjectInvoiceCalculatorTest.php
+++ b/tests/Invoice/Calculator/ProjectInvoiceCalculatorTest.php
@@ -18,6 +18,7 @@ use App\Entity\User;
use App\Invoice\Calculator\ProjectInvoiceCalculator;
use App\Model\InvoiceModel;
use App\Repository\Query\InvoiceQuery;
+use DateTime;
/**
* @covers \App\Invoice\Calculator\ProjectInvoiceCalculator
@@ -52,8 +53,8 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$timesheet = new Timesheet();
$timesheet
- ->setBegin(new \DateTime())
- ->setEnd(new \DateTime())
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime())
->setDuration(3600)
->setRate(293.27)
->setUser($user)
@@ -62,8 +63,8 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$timesheet2 = new Timesheet();
$timesheet2
- ->setBegin(new \DateTime())
- ->setEnd(new \DateTime())
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime())
->setDuration(400)
->setRate(84.75)
->setUser($user)
@@ -72,8 +73,8 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$timesheet3 = new Timesheet();
$timesheet3
- ->setBegin(new \DateTime())
- ->setEnd(new \DateTime())
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime())
->setDuration(1800)
->setRate(111.11)
->setUser($user)
@@ -82,8 +83,8 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$timesheet4 = new Timesheet();
$timesheet4
- ->setBegin(new \DateTime())
- ->setEnd(new \DateTime())
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime())
->setDuration(400)
->setRate(1947.99)
->setUser($user)
@@ -92,8 +93,8 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$timesheet5 = new Timesheet();
$timesheet5
- ->setBegin(new \DateTime())
- ->setEnd(new \DateTime())
+ ->setBegin(new DateTime())
+ ->setEnd(new DateTime())
->setDuration(400)
->setRate(84)
->setUser(new User())
@@ -123,9 +124,11 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$this->assertEquals(3, count($sut->getEntries()));
$entries = $sut->getEntries();
+ self::assertCount(3, $entries);
$this->assertEquals(404.38, $entries[0]->getRate());
$this->assertEquals(2032.74, $entries[1]->getRate());
$this->assertEquals(84, $entries[2]->getRate());
+ self::assertEquals(2521.12, $entries[0]->getRate() + $entries[1]->getRate() + $entries[2]->getRate());
}
public function testDescriptionByTimesheet()
diff --git a/translations/invoice-calculator.de.xliff b/translations/invoice-calculator.de.xliff
index ae834fc6..9c8afecc 100644
--- a/translations/invoice-calculator.de.xliff
+++ b/translations/invoice-calculator.de.xliff
@@ -26,6 +26,10 @@
project
Projekt: ein Eintrag pro Projekt
+
+ date
+ Datum: ein Eintrag pro Tag (verwendet Startdatum)
+