added order-date field to project (#1186)
This commit is contained in:
@@ -36,7 +36,6 @@ class Project implements EntityWithMetaFields
|
||||
* @ORM\GeneratedValue(strategy="IDENTITY")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var Customer
|
||||
*
|
||||
@@ -45,7 +44,6 @@ class Project implements EntityWithMetaFields
|
||||
* @Assert\NotNull()
|
||||
*/
|
||||
private $customer;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
@@ -56,7 +54,6 @@ class Project implements EntityWithMetaFields
|
||||
* @Assert\Length(min=2, max=150)
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
@@ -64,14 +61,18 @@ class Project implements EntityWithMetaFields
|
||||
* @Assert\Length(max=20)
|
||||
*/
|
||||
private $orderNumber;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="order_date", type="datetime", nullable=true)
|
||||
*/
|
||||
private $orderDate;
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="comment", type="text", nullable=true)
|
||||
*/
|
||||
private $comment;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*
|
||||
@@ -172,32 +173,37 @@ class Project implements EntityWithMetaFields
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since 1.4
|
||||
* @deprecated since 1.4, use isVisible() instead
|
||||
*/
|
||||
public function getVisible(): bool
|
||||
{
|
||||
return $this->visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getOrderNumber(): ?string
|
||||
{
|
||||
return $this->orderNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $orderNumber
|
||||
* @return Project
|
||||
*/
|
||||
public function setOrderNumber($orderNumber): Project
|
||||
public function setOrderNumber(?string $orderNumber): Project
|
||||
{
|
||||
$this->orderNumber = $orderNumber;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getOrderDate(): ?\DateTime
|
||||
{
|
||||
return $this->orderDate;
|
||||
}
|
||||
|
||||
public function setOrderDate(?\DateTime $orderDate): Project
|
||||
{
|
||||
$this->orderDate = $orderDate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal only here for symfony forms
|
||||
* @return Collection|MetaTableTypeInterface[]
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace App\Form;
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\Project;
|
||||
use App\Form\Type\CustomerType;
|
||||
use App\Form\Type\DateTimePickerType;
|
||||
use App\Repository\CustomerRepository;
|
||||
use App\Repository\Query\CustomerFormTypeQuery;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
@@ -58,6 +59,10 @@ class ProjectEditForm extends AbstractType
|
||||
'label' => 'label.orderNumber',
|
||||
'required' => false,
|
||||
])
|
||||
->add('orderDate', DateTimePickerType::class, [
|
||||
'label' => 'label.orderDate',
|
||||
'required' => false,
|
||||
])
|
||||
->add('customer', CustomerType::class, [
|
||||
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
|
||||
$query = new CustomerFormTypeQuery($customer);
|
||||
|
||||
55
src/Migrations/Version20191024100951.php
Normal file
55
src/Migrations/Version20191024100951.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use App\Doctrine\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
|
||||
/**
|
||||
* Adds the order_date column to the projects table.
|
||||
*
|
||||
* @version 1.5
|
||||
*/
|
||||
final class Version20191024100951 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Adds the order_date column to the projects table';
|
||||
}
|
||||
|
||||
protected function isSupportingForeignKeys(): bool
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function isTransactional(): bool
|
||||
{
|
||||
if ($this->isPlatformSqlite()) {
|
||||
// does fail if we use transactions, as tables are re-created and foreign keys would fail
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
$projects = $schema->getTable('kimai2_projects');
|
||||
$projects->addColumn('order_date', 'datetime', ['notnull' => false]);
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$projects = $schema->getTable('kimai2_projects');
|
||||
$projects->dropColumn('order_date');
|
||||
}
|
||||
}
|
||||
@@ -24,22 +24,24 @@ class ProjectTest extends TestCase
|
||||
public function testDefaultValues()
|
||||
{
|
||||
$sut = new Project();
|
||||
$this->assertNull($sut->getId());
|
||||
$this->assertNull($sut->getCustomer());
|
||||
$this->assertNull($sut->getName());
|
||||
$this->assertNull($sut->getOrderNumber());
|
||||
$this->assertNull($sut->getComment());
|
||||
$this->assertTrue($sut->getVisible());
|
||||
$this->assertNull($sut->getFixedRate());
|
||||
$this->assertNull($sut->getHourlyRate());
|
||||
$this->assertNull($sut->getColor());
|
||||
$this->assertEquals(0.0, $sut->getBudget());
|
||||
$this->assertEquals(0, $sut->getTimeBudget());
|
||||
$this->assertInstanceOf(Collection::class, $sut->getMetaFields());
|
||||
$this->assertEquals(0, $sut->getMetaFields()->count());
|
||||
$this->assertNull($sut->getMetaField('foo'));
|
||||
$this->assertInstanceOf(Collection::class, $sut->getTeams());
|
||||
$this->assertEquals(0, $sut->getTeams()->count());
|
||||
self::assertNull($sut->getId());
|
||||
self::assertNull($sut->getCustomer());
|
||||
self::assertNull($sut->getName());
|
||||
self::assertNull($sut->getOrderNumber());
|
||||
self::assertNull($sut->getOrderDate());
|
||||
self::assertNull($sut->getComment());
|
||||
self::assertTrue($sut->getVisible());
|
||||
self::assertTrue($sut->isVisible());
|
||||
self::assertNull($sut->getFixedRate());
|
||||
self::assertNull($sut->getHourlyRate());
|
||||
self::assertNull($sut->getColor());
|
||||
self::assertEquals(0.0, $sut->getBudget());
|
||||
self::assertEquals(0, $sut->getTimeBudget());
|
||||
self::assertInstanceOf(Collection::class, $sut->getMetaFields());
|
||||
self::assertEquals(0, $sut->getMetaFields()->count());
|
||||
self::assertNull($sut->getMetaField('foo'));
|
||||
self::assertInstanceOf(Collection::class, $sut->getTeams());
|
||||
self::assertEquals(0, $sut->getTeams()->count());
|
||||
}
|
||||
|
||||
public function testSetterAndGetter()
|
||||
@@ -47,35 +49,41 @@ class ProjectTest extends TestCase
|
||||
$sut = new Project();
|
||||
|
||||
$customer = (new Customer())->setName('customer');
|
||||
$this->assertInstanceOf(Project::class, $sut->setCustomer($customer));
|
||||
$this->assertSame($customer, $sut->getCustomer());
|
||||
self::assertInstanceOf(Project::class, $sut->setCustomer($customer));
|
||||
self::assertSame($customer, $sut->getCustomer());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setName('123456789'));
|
||||
$this->assertEquals('123456789', (string) $sut);
|
||||
self::assertInstanceOf(Project::class, $sut->setName('123456789'));
|
||||
self::assertEquals('123456789', (string) $sut);
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setOrderNumber('123456789'));
|
||||
$this->assertEquals('123456789', $sut->getOrderNumber());
|
||||
self::assertInstanceOf(Project::class, $sut->setOrderNumber('123456789'));
|
||||
self::assertEquals('123456789', $sut->getOrderNumber());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setComment('a comment'));
|
||||
$this->assertEquals('a comment', $sut->getComment());
|
||||
$dateTime = new \DateTime('-1 year');
|
||||
self::assertInstanceOf(Project::class, $sut->setOrderDate($dateTime));
|
||||
self::assertSame($dateTime, $sut->getOrderDate());
|
||||
self::assertInstanceOf(Project::class, $sut->setOrderDate(null));
|
||||
self::assertNull($sut->getOrderDate());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setColor('#fffccc'));
|
||||
$this->assertEquals('#fffccc', $sut->getColor());
|
||||
self::assertInstanceOf(Project::class, $sut->setComment('a comment'));
|
||||
self::assertEquals('a comment', $sut->getComment());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setVisible(false));
|
||||
$this->assertFalse($sut->getVisible());
|
||||
self::assertInstanceOf(Project::class, $sut->setColor('#fffccc'));
|
||||
self::assertEquals('#fffccc', $sut->getColor());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setFixedRate(13.47));
|
||||
$this->assertEquals(13.47, $sut->getFixedRate());
|
||||
self::assertInstanceOf(Project::class, $sut->setVisible(false));
|
||||
self::assertFalse($sut->getVisible());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setHourlyRate(99));
|
||||
$this->assertEquals(99, $sut->getHourlyRate());
|
||||
self::assertInstanceOf(Project::class, $sut->setFixedRate(13.47));
|
||||
self::assertEquals(13.47, $sut->getFixedRate());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setBudget(12345.67));
|
||||
$this->assertEquals(12345.67, $sut->getBudget());
|
||||
self::assertInstanceOf(Project::class, $sut->setHourlyRate(99));
|
||||
self::assertEquals(99, $sut->getHourlyRate());
|
||||
|
||||
$this->assertInstanceOf(Project::class, $sut->setTimeBudget(937321));
|
||||
$this->assertEquals(937321, $sut->getTimeBudget());
|
||||
self::assertInstanceOf(Project::class, $sut->setBudget(12345.67));
|
||||
self::assertEquals(12345.67, $sut->getBudget());
|
||||
|
||||
self::assertInstanceOf(Project::class, $sut->setTimeBudget(937321));
|
||||
self::assertEquals(937321, $sut->getTimeBudget());
|
||||
}
|
||||
|
||||
public function testMetaFields()
|
||||
@@ -83,7 +91,7 @@ class ProjectTest extends TestCase
|
||||
$sut = new Project();
|
||||
$meta = new ProjectMeta();
|
||||
$meta->setName('foo')->setValue('bar')->setType('test');
|
||||
$this->assertInstanceOf(Project::class, $sut->setMetaField($meta));
|
||||
self::assertInstanceOf(Project::class, $sut->setMetaField($meta));
|
||||
self::assertEquals(1, $sut->getMetaFields()->count());
|
||||
$result = $sut->getMetaField('foo');
|
||||
self::assertSame($result, $meta);
|
||||
@@ -91,7 +99,7 @@ class ProjectTest extends TestCase
|
||||
|
||||
$meta2 = new ProjectMeta();
|
||||
$meta2->setName('foo')->setValue('bar')->setType('test2');
|
||||
$this->assertInstanceOf(Project::class, $sut->setMetaField($meta2));
|
||||
self::assertInstanceOf(Project::class, $sut->setMetaField($meta2));
|
||||
self::assertEquals(1, $sut->getMetaFields()->count());
|
||||
self::assertCount(0, $sut->getVisibleMetaFields());
|
||||
|
||||
|
||||
@@ -868,6 +868,10 @@
|
||||
<source>label.orderNumber</source>
|
||||
<target>Bestellnummer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.orderDate">
|
||||
<source>label.orderDate</source>
|
||||
<target>Bestelldatum</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.invoice_tax_number">
|
||||
<source>label.invoice_tax_number</source>
|
||||
<target>USt-IdNr.:</target>
|
||||
|
||||
@@ -868,6 +868,10 @@
|
||||
<source>label.orderNumber</source>
|
||||
<target>Order number</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.orderDate">
|
||||
<source>label.orderDate</source>
|
||||
<target>Order date</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.invoice_tax_number">
|
||||
<source>label.invoice_tax_number</source>
|
||||
<target>VAT no.:</target>
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user