Configurable activity and project number (#4729)

* added configurable activity number
* added configurable project number
* fix deprecations
* added some tests for entity exporter
* better configuration of dropdown pattern for customer, project and activity
This commit is contained in:
Kevin Papst
2024-04-04 17:43:22 +02:00
committed by GitHub
parent c1f5d3def4
commit a636683dee
55 changed files with 920 additions and 136 deletions

View File

@@ -55,6 +55,13 @@ class ActivityEditForm extends AbstractType
'autofocus' => 'autofocus'
],
])
->add('number', TextType::class, [
'label' => 'activity_number',
'required' => false,
'attr' => [
'maxlength' => 10,
],
])
->add('comment', TextareaType::class, [
'label' => 'description',
'required' => false,

View File

@@ -40,7 +40,7 @@ final class StringToArrayTransformer implements DataTransformerInterface
}
/**
* Transforms a string to an array of tags.
* Transforms a string to an array of strings.
*
* @param string|null $value
* @return array<string>

View File

@@ -14,6 +14,7 @@ use App\Entity\Activity;
final class ActivityHelper
{
public const PATTERN_NUMBER = '{number}';
public const PATTERN_NAME = '{name}';
public const PATTERN_COMMENT = '{comment}';
public const PATTERN_SPACER = '{spacer}';
@@ -21,7 +22,7 @@ final class ActivityHelper
private ?string $pattern = null;
public function __construct(private SystemConfiguration $configuration)
public function __construct(private readonly SystemConfiguration $configuration)
{
}
@@ -44,6 +45,7 @@ final class ActivityHelper
{
$name = $this->getChoicePattern();
$name = str_replace(self::PATTERN_NAME, $activity->getName(), $name);
$name = str_replace(self::PATTERN_NUMBER, $activity->getNumber() ?? '', $name);
$name = str_replace(self::PATTERN_COMMENT, $activity->getComment() ?? '', $name);
while (str_starts_with($name, self::SPACER)) {

View File

@@ -23,7 +23,7 @@ final class CustomerHelper
private ?string $pattern = null;
public function __construct(private SystemConfiguration $configuration)
public function __construct(private readonly SystemConfiguration $configuration)
{
}

View File

@@ -17,6 +17,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
final class ProjectHelper
{
public const PATTERN_NAME = '{name}';
public const PATTERN_NUMBER = '{number}';
public const PATTERN_COMMENT = '{comment}';
public const PATTERN_ORDERNUMBER = '{ordernumber}';
public const PATTERN_DATERANGE = '{daterange}';
@@ -70,6 +71,7 @@ final class ProjectHelper
{
$name = $this->getChoicePattern();
$name = str_replace(self::PATTERN_NAME, $project->getName(), $name);
$name = str_replace(self::PATTERN_NUMBER, $project->getNumber() ?? '', $name);
$name = str_replace(self::PATTERN_COMMENT, $project->getComment() ?? '', $name);
$name = str_replace(self::PATTERN_CUSTOMER, $project->getCustomer()?->getName() ?? '', $name);
$name = str_replace(self::PATTERN_ORDERNUMBER, $project->getOrderNumber() ?? '', $name);

View File

@@ -65,6 +65,13 @@ class ProjectEditForm extends AbstractType
'autofocus' => 'autofocus'
],
])
->add('number', TextType::class, [
'label' => 'project_number',
'required' => false,
'attr' => [
'maxlength' => 10,
],
])
->add('comment', TextareaType::class, [
'label' => 'description',
'required' => false,

View File

@@ -9,9 +9,12 @@
namespace App\Form\Type;
use App\Form\DataTransformer\StringToArrayTransformer;
use App\Form\Helper\ActivityHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\ReversedTransformer;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
@@ -20,22 +23,28 @@ use Symfony\Contracts\Translation\TranslatorInterface;
*/
final class ActivityTypePatternType extends AbstractType
{
public function __construct(private TranslatorInterface $translator)
public function __construct(private readonly TranslatorInterface $translator)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->addModelTransformer(new ReversedTransformer(new StringToArrayTransformer(ActivityHelper::PATTERN_SPACER)), true);
}
public function configureOptions(OptionsResolver $resolver): void
{
$name = $this->translator->trans('name');
$number = $this->translator->trans('activity_number');
$comment = $this->translator->trans('description');
$spacer = ActivityHelper::SPACER;
$resolver->setDefaults([
'label' => 'choice_pattern',
'multiple' => true,
'choices' => [
$number => ActivityHelper::PATTERN_NUMBER,
$name => ActivityHelper::PATTERN_NAME,
$comment => ActivityHelper::PATTERN_COMMENT,
$name . $spacer . $comment => ActivityHelper::PATTERN_NAME . ActivityHelper::PATTERN_SPACER . ActivityHelper::PATTERN_COMMENT,
]
]);
}

View File

@@ -9,9 +9,12 @@
namespace App\Form\Type;
use App\Form\DataTransformer\StringToArrayTransformer;
use App\Form\Helper\CustomerHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\ReversedTransformer;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
@@ -20,32 +23,30 @@ use Symfony\Contracts\Translation\TranslatorInterface;
*/
final class CustomerTypePatternType extends AbstractType
{
public function __construct(private TranslatorInterface $translator)
public function __construct(private readonly TranslatorInterface $translator)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->addModelTransformer(new ReversedTransformer(new StringToArrayTransformer(CustomerHelper::PATTERN_SPACER)), true);
}
public function configureOptions(OptionsResolver $resolver): void
{
$name = $this->translator->trans('name');
$company = $this->translator->trans('company');
$number = $this->translator->trans('number');
$comment = $this->translator->trans('description');
$spacer = CustomerHelper::SPACER;
$resolver->setDefaults([
'label' => 'choice_pattern',
'multiple' => true,
'choices' => [
$number => CustomerHelper::PATTERN_NUMBER,
$name => CustomerHelper::PATTERN_NAME,
$company => CustomerHelper::PATTERN_COMPANY,
$number => CustomerHelper::PATTERN_NUMBER,
$comment => CustomerHelper::PATTERN_COMMENT,
$name . $spacer . $company => CustomerHelper::PATTERN_NAME . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_COMPANY,
$name . $spacer . $number => CustomerHelper::PATTERN_NAME . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_NUMBER,
$name . $spacer . $comment => CustomerHelper::PATTERN_NAME . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_COMMENT,
$number . $spacer . $name => CustomerHelper::PATTERN_NUMBER . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_NAME,
$number . $spacer . $company => CustomerHelper::PATTERN_NUMBER . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_COMPANY,
$number . $spacer . $comment => CustomerHelper::PATTERN_NUMBER . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_COMMENT,
$company . $spacer . $comment => CustomerHelper::PATTERN_COMPANY . CustomerHelper::PATTERN_SPACER . CustomerHelper::PATTERN_COMMENT,
]
]);
}

View File

@@ -9,9 +9,12 @@
namespace App\Form\Type;
use App\Form\DataTransformer\StringToArrayTransformer;
use App\Form\Helper\ProjectHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\ReversedTransformer;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
@@ -20,10 +23,15 @@ use Symfony\Contracts\Translation\TranslatorInterface;
*/
final class ProjectTypePatternType extends AbstractType
{
public function __construct(private TranslatorInterface $translator)
public function __construct(private readonly TranslatorInterface $translator)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->addModelTransformer(new ReversedTransformer(new StringToArrayTransformer(ProjectHelper::PATTERN_SPACER)), true);
}
public function configureOptions(OptionsResolver $resolver): void
{
$name = $this->translator->trans('name');
@@ -32,18 +40,18 @@ final class ProjectTypePatternType extends AbstractType
$projectStart = $this->translator->trans('project_start');
$projectEnd = $this->translator->trans('project_end');
$customer = $this->translator->trans('customer');
$spacer = ProjectHelper::SPACER;
$number = $this->translator->trans('project_number');
$resolver->setDefaults([
'label' => 'choice_pattern',
'multiple' => true,
'choices' => [
$number => ProjectHelper::PATTERN_NUMBER,
$orderNumber => ProjectHelper::PATTERN_ORDERNUMBER,
$name => ProjectHelper::PATTERN_NAME,
$comment => ProjectHelper::PATTERN_COMMENT,
$name . $spacer . $customer => ProjectHelper::PATTERN_NAME . ProjectHelper::PATTERN_SPACER . ProjectHelper::PATTERN_CUSTOMER,
$name . $spacer . $orderNumber => ProjectHelper::PATTERN_NAME . ProjectHelper::PATTERN_SPACER . ProjectHelper::PATTERN_ORDERNUMBER,
$name . $spacer . $comment => ProjectHelper::PATTERN_NAME . ProjectHelper::PATTERN_SPACER . ProjectHelper::PATTERN_COMMENT,
$name . $spacer . $projectStart . '-' . $projectEnd => ProjectHelper::PATTERN_NAME . ProjectHelper::PATTERN_SPACER . ProjectHelper::PATTERN_DATERANGE,
$customer => ProjectHelper::PATTERN_CUSTOMER,
$projectStart . '-' . $projectEnd => ProjectHelper::PATTERN_DATERANGE,
]
]);
}