colors for visual grouping of customer, projects and activities (#751)

This commit is contained in:
Kevin Papst
2019-05-04 01:45:52 +02:00
committed by GitHub
parent e92c2d168e
commit 65df1ff909
40 changed files with 523 additions and 124 deletions

View File

@@ -67,11 +67,18 @@ class TimesheetEntity
$this->project = $entry->getProject()->getName();
$this->activity = $entry->getActivity()->getName();
if (null === $entry->getEnd()) {
// TODO move these colors to the controller
$this->borderColor = '367fa9'; //'#f39c12';
$this->backgroundColor = '#3c8dbc'; //'#f39c12';
} else {
$color = $entry->getActivity()->getColor();
if (empty($color)) {
$color = $entry->getProject()->getColor();
if (empty($color)) {
$color = $entry->getProject()->getCustomer()->getColor();
}
}
$this->borderColor = $color;
$this->backgroundColor = $color;
if (null !== $entry->getEnd()) {
$this->end = $entry->getEnd();
}
}

View File

@@ -68,6 +68,7 @@ class Activity
// keep the trait include exactly here, for placing the column at the correct position
use RatesTrait;
use ColorTrait;
/**
* @return int

41
src/Entity/ColorTrait.php Normal file
View File

@@ -0,0 +1,41 @@
<?php
/*
* 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 App\Entity;
use Doctrine\ORM\Mapping as ORM;
trait ColorTrait
{
/**
* @var string
*
* @ORM\Column(name="color", type="string", length=7, nullable=true)
*/
private $color = null;
/**
* @return string
*/
public function getColor(): ?string
{
return $this->color;
}
/**
* @param string $color
* @return self
*/
public function setColor(?string $color = null)
{
$this->color = $color;
return $this;
}
}

View File

@@ -149,6 +149,7 @@ class Customer
// keep the trait include exactly here, for placing the column at the correct position
use RatesTrait;
use ColorTrait;
/**
* @return int

View File

@@ -85,6 +85,7 @@ class Project
// keep the trait include exactly here, for placing the column at the correct position
use RatesTrait;
use ColorTrait;
/**
* @var Timesheet[]

View File

@@ -10,6 +10,7 @@
namespace App\Form;
use App\Entity\Activity;
use App\Form\Type\ColorPickerType;
use App\Form\Type\CustomerType;
use App\Form\Type\FixedRateType;
use App\Form\Type\HourlyRateType;
@@ -109,6 +110,7 @@ class ActivityEditForm extends AbstractType
);
$builder
->add('color', ColorPickerType::class)
->add('fixedRate', FixedRateType::class, [
'currency' => $currency,
])

View File

@@ -10,6 +10,7 @@
namespace App\Form;
use App\Entity\Customer;
use App\Form\Type\ColorPickerType;
use App\Form\Type\FixedRateType;
use App\Form\Type\HourlyRateType;
use App\Form\Type\YesNoType;
@@ -101,6 +102,7 @@ class CustomerEditForm extends AbstractType
->add('timezone', TimezoneType::class, [
'label' => 'label.timezone',
])
->add('color', ColorPickerType::class)
->add('fixedRate', FixedRateType::class, [
'currency' => $currency ?? false,
])

View File

@@ -11,6 +11,7 @@ namespace App\Form;
use App\Entity\Customer;
use App\Entity\Project;
use App\Form\Type\ColorPickerType;
use App\Form\Type\CustomerType;
use App\Form\Type\FixedRateType;
use App\Form\Type\HourlyRateType;
@@ -69,6 +70,7 @@ class ProjectEditForm extends AbstractType
return $repo->builderForEntityType($customer);
},
])
->add('color', ColorPickerType::class)
->add('fixedRate', FixedRateType::class, [
'currency' => $currency,
])

View File

@@ -0,0 +1,67 @@
<?php
/*
* 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 App\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Extension\Core\Type\ColorType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ColorPickerType extends AbstractType implements DataTransformerInterface
{
public const DEFAULT_COLOR = '#d2d6de';
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addViewTransformer($this);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'label' => 'label.color',
]);
}
/**
* {@inheritdoc}
*/
public function transform($data)
{
if (empty($data)) {
return self::DEFAULT_COLOR;
}
return $data;
}
/**
* {@inheritdoc}
*/
public function reverseTransform($data)
{
return null === $data ? self::DEFAULT_COLOR : $data;
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return ColorType::class;
}
}

View File

@@ -0,0 +1,52 @@
<?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;
/**
* Creates the color columns on: customer, project, activity.
*
* @version 0.9
*/
final class Version20190502161758 extends AbstractMigration
{
public function getDescription(): string
{
return 'Creates the color columns on: customer, project, activity';
}
public function up(Schema $schema): void
{
$customers = $schema->getTable('kimai2_customers');
$customers->addColumn('color', 'string', ['length' => 7, 'notnull' => false, 'default' => null]);
$projects = $schema->getTable('kimai2_projects');
$projects->addColumn('color', 'string', ['length' => 7, 'notnull' => false, 'default' => null]);
$activities = $schema->getTable('kimai2_activities');
$activities->addColumn('color', 'string', ['length' => 7, 'notnull' => false, 'default' => null]);
}
public function down(Schema $schema): void
{
$customers = $schema->getTable('kimai2_customers');
$customers->dropColumn('color');
$projects = $schema->getTable('kimai2_projects');
$projects->dropColumn('color');
$activities = $schema->getTable('kimai2_activities');
$activities->dropColumn('color');
}
}

View File

@@ -17,7 +17,7 @@ class BaseQuery
public const ORDER_ASC = 'ASC';
public const ORDER_DESC = 'DESC';
public const DEFAULT_PAGESIZE = 100;
public const DEFAULT_PAGESIZE = 50;
public const DEFAULT_PAGE = 1;
public const RESULT_TYPE_OBJECTS = 'Objects';