added order-date field to project (#1186)
This commit is contained in:
@@ -36,7 +36,6 @@ class Project implements EntityWithMetaFields
|
|||||||
* @ORM\GeneratedValue(strategy="IDENTITY")
|
* @ORM\GeneratedValue(strategy="IDENTITY")
|
||||||
*/
|
*/
|
||||||
private $id;
|
private $id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Customer
|
* @var Customer
|
||||||
*
|
*
|
||||||
@@ -45,7 +44,6 @@ class Project implements EntityWithMetaFields
|
|||||||
* @Assert\NotNull()
|
* @Assert\NotNull()
|
||||||
*/
|
*/
|
||||||
private $customer;
|
private $customer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
@@ -56,7 +54,6 @@ class Project implements EntityWithMetaFields
|
|||||||
* @Assert\Length(min=2, max=150)
|
* @Assert\Length(min=2, max=150)
|
||||||
*/
|
*/
|
||||||
private $name;
|
private $name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
@@ -64,14 +61,18 @@ class Project implements EntityWithMetaFields
|
|||||||
* @Assert\Length(max=20)
|
* @Assert\Length(max=20)
|
||||||
*/
|
*/
|
||||||
private $orderNumber;
|
private $orderNumber;
|
||||||
|
/**
|
||||||
|
* @var \DateTime
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="order_date", type="datetime", nullable=true)
|
||||||
|
*/
|
||||||
|
private $orderDate;
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="comment", type="text", nullable=true)
|
* @ORM\Column(name="comment", type="text", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $comment;
|
private $comment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var bool
|
* @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
|
public function getVisible(): bool
|
||||||
{
|
{
|
||||||
return $this->visible;
|
return $this->visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
public function getOrderNumber(): ?string
|
public function getOrderNumber(): ?string
|
||||||
{
|
{
|
||||||
return $this->orderNumber;
|
return $this->orderNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function setOrderNumber(?string $orderNumber): Project
|
||||||
* @param string $orderNumber
|
|
||||||
* @return Project
|
|
||||||
*/
|
|
||||||
public function setOrderNumber($orderNumber): Project
|
|
||||||
{
|
{
|
||||||
$this->orderNumber = $orderNumber;
|
$this->orderNumber = $orderNumber;
|
||||||
|
|
||||||
return $this;
|
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
|
* @internal only here for symfony forms
|
||||||
* @return Collection|MetaTableTypeInterface[]
|
* @return Collection|MetaTableTypeInterface[]
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ namespace App\Form;
|
|||||||
use App\Entity\Customer;
|
use App\Entity\Customer;
|
||||||
use App\Entity\Project;
|
use App\Entity\Project;
|
||||||
use App\Form\Type\CustomerType;
|
use App\Form\Type\CustomerType;
|
||||||
|
use App\Form\Type\DateTimePickerType;
|
||||||
use App\Repository\CustomerRepository;
|
use App\Repository\CustomerRepository;
|
||||||
use App\Repository\Query\CustomerFormTypeQuery;
|
use App\Repository\Query\CustomerFormTypeQuery;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
@@ -58,6 +59,10 @@ class ProjectEditForm extends AbstractType
|
|||||||
'label' => 'label.orderNumber',
|
'label' => 'label.orderNumber',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
])
|
])
|
||||||
|
->add('orderDate', DateTimePickerType::class, [
|
||||||
|
'label' => 'label.orderDate',
|
||||||
|
'required' => false,
|
||||||
|
])
|
||||||
->add('customer', CustomerType::class, [
|
->add('customer', CustomerType::class, [
|
||||||
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
|
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
|
||||||
$query = new CustomerFormTypeQuery($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()
|
public function testDefaultValues()
|
||||||
{
|
{
|
||||||
$sut = new Project();
|
$sut = new Project();
|
||||||
$this->assertNull($sut->getId());
|
self::assertNull($sut->getId());
|
||||||
$this->assertNull($sut->getCustomer());
|
self::assertNull($sut->getCustomer());
|
||||||
$this->assertNull($sut->getName());
|
self::assertNull($sut->getName());
|
||||||
$this->assertNull($sut->getOrderNumber());
|
self::assertNull($sut->getOrderNumber());
|
||||||
$this->assertNull($sut->getComment());
|
self::assertNull($sut->getOrderDate());
|
||||||
$this->assertTrue($sut->getVisible());
|
self::assertNull($sut->getComment());
|
||||||
$this->assertNull($sut->getFixedRate());
|
self::assertTrue($sut->getVisible());
|
||||||
$this->assertNull($sut->getHourlyRate());
|
self::assertTrue($sut->isVisible());
|
||||||
$this->assertNull($sut->getColor());
|
self::assertNull($sut->getFixedRate());
|
||||||
$this->assertEquals(0.0, $sut->getBudget());
|
self::assertNull($sut->getHourlyRate());
|
||||||
$this->assertEquals(0, $sut->getTimeBudget());
|
self::assertNull($sut->getColor());
|
||||||
$this->assertInstanceOf(Collection::class, $sut->getMetaFields());
|
self::assertEquals(0.0, $sut->getBudget());
|
||||||
$this->assertEquals(0, $sut->getMetaFields()->count());
|
self::assertEquals(0, $sut->getTimeBudget());
|
||||||
$this->assertNull($sut->getMetaField('foo'));
|
self::assertInstanceOf(Collection::class, $sut->getMetaFields());
|
||||||
$this->assertInstanceOf(Collection::class, $sut->getTeams());
|
self::assertEquals(0, $sut->getMetaFields()->count());
|
||||||
$this->assertEquals(0, $sut->getTeams()->count());
|
self::assertNull($sut->getMetaField('foo'));
|
||||||
|
self::assertInstanceOf(Collection::class, $sut->getTeams());
|
||||||
|
self::assertEquals(0, $sut->getTeams()->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSetterAndGetter()
|
public function testSetterAndGetter()
|
||||||
@@ -47,35 +49,41 @@ class ProjectTest extends TestCase
|
|||||||
$sut = new Project();
|
$sut = new Project();
|
||||||
|
|
||||||
$customer = (new Customer())->setName('customer');
|
$customer = (new Customer())->setName('customer');
|
||||||
$this->assertInstanceOf(Project::class, $sut->setCustomer($customer));
|
self::assertInstanceOf(Project::class, $sut->setCustomer($customer));
|
||||||
$this->assertSame($customer, $sut->getCustomer());
|
self::assertSame($customer, $sut->getCustomer());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setName('123456789'));
|
self::assertInstanceOf(Project::class, $sut->setName('123456789'));
|
||||||
$this->assertEquals('123456789', (string) $sut);
|
self::assertEquals('123456789', (string) $sut);
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setOrderNumber('123456789'));
|
self::assertInstanceOf(Project::class, $sut->setOrderNumber('123456789'));
|
||||||
$this->assertEquals('123456789', $sut->getOrderNumber());
|
self::assertEquals('123456789', $sut->getOrderNumber());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setComment('a comment'));
|
$dateTime = new \DateTime('-1 year');
|
||||||
$this->assertEquals('a comment', $sut->getComment());
|
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'));
|
self::assertInstanceOf(Project::class, $sut->setComment('a comment'));
|
||||||
$this->assertEquals('#fffccc', $sut->getColor());
|
self::assertEquals('a comment', $sut->getComment());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setVisible(false));
|
self::assertInstanceOf(Project::class, $sut->setColor('#fffccc'));
|
||||||
$this->assertFalse($sut->getVisible());
|
self::assertEquals('#fffccc', $sut->getColor());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setFixedRate(13.47));
|
self::assertInstanceOf(Project::class, $sut->setVisible(false));
|
||||||
$this->assertEquals(13.47, $sut->getFixedRate());
|
self::assertFalse($sut->getVisible());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setHourlyRate(99));
|
self::assertInstanceOf(Project::class, $sut->setFixedRate(13.47));
|
||||||
$this->assertEquals(99, $sut->getHourlyRate());
|
self::assertEquals(13.47, $sut->getFixedRate());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setBudget(12345.67));
|
self::assertInstanceOf(Project::class, $sut->setHourlyRate(99));
|
||||||
$this->assertEquals(12345.67, $sut->getBudget());
|
self::assertEquals(99, $sut->getHourlyRate());
|
||||||
|
|
||||||
$this->assertInstanceOf(Project::class, $sut->setTimeBudget(937321));
|
self::assertInstanceOf(Project::class, $sut->setBudget(12345.67));
|
||||||
$this->assertEquals(937321, $sut->getTimeBudget());
|
self::assertEquals(12345.67, $sut->getBudget());
|
||||||
|
|
||||||
|
self::assertInstanceOf(Project::class, $sut->setTimeBudget(937321));
|
||||||
|
self::assertEquals(937321, $sut->getTimeBudget());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testMetaFields()
|
public function testMetaFields()
|
||||||
@@ -83,7 +91,7 @@ class ProjectTest extends TestCase
|
|||||||
$sut = new Project();
|
$sut = new Project();
|
||||||
$meta = new ProjectMeta();
|
$meta = new ProjectMeta();
|
||||||
$meta->setName('foo')->setValue('bar')->setType('test');
|
$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());
|
self::assertEquals(1, $sut->getMetaFields()->count());
|
||||||
$result = $sut->getMetaField('foo');
|
$result = $sut->getMetaField('foo');
|
||||||
self::assertSame($result, $meta);
|
self::assertSame($result, $meta);
|
||||||
@@ -91,7 +99,7 @@ class ProjectTest extends TestCase
|
|||||||
|
|
||||||
$meta2 = new ProjectMeta();
|
$meta2 = new ProjectMeta();
|
||||||
$meta2->setName('foo')->setValue('bar')->setType('test2');
|
$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::assertEquals(1, $sut->getMetaFields()->count());
|
||||||
self::assertCount(0, $sut->getVisibleMetaFields());
|
self::assertCount(0, $sut->getVisibleMetaFields());
|
||||||
|
|
||||||
|
|||||||
@@ -868,6 +868,10 @@
|
|||||||
<source>label.orderNumber</source>
|
<source>label.orderNumber</source>
|
||||||
<target>Bestellnummer</target>
|
<target>Bestellnummer</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="label.orderDate">
|
||||||
|
<source>label.orderDate</source>
|
||||||
|
<target>Bestelldatum</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="label.invoice_tax_number">
|
<trans-unit id="label.invoice_tax_number">
|
||||||
<source>label.invoice_tax_number</source>
|
<source>label.invoice_tax_number</source>
|
||||||
<target>USt-IdNr.:</target>
|
<target>USt-IdNr.:</target>
|
||||||
|
|||||||
@@ -868,6 +868,10 @@
|
|||||||
<source>label.orderNumber</source>
|
<source>label.orderNumber</source>
|
||||||
<target>Order number</target>
|
<target>Order number</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="label.orderDate">
|
||||||
|
<source>label.orderDate</source>
|
||||||
|
<target>Order date</target>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="label.invoice_tax_number">
|
<trans-unit id="label.invoice_tax_number">
|
||||||
<source>label.invoice_tax_number</source>
|
<source>label.invoice_tax_number</source>
|
||||||
<target>VAT no.:</target>
|
<target>VAT no.:</target>
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user