getProject()) { $project = $entry->getProject(); $customer = $project->getCustomer(); $currency = $customer->getCurrency(); } $id = $entry->getId(); } $builder // string - length 255 ->add('name', TextType::class, [ 'label' => 'label.name', 'attr' => [ 'autofocus' => 'autofocus' ], ]) // text ->add('comment', TextareaType::class, [ 'label' => 'label.comment', 'required' => false, ]) ; if ($options['customer']) { $builder ->add('customer', CustomerType::class, [ 'query_builder' => function (CustomerRepository $repo) use ($customer) { return $repo->builderForEntityType($customer); }, 'data' => $customer ? $customer : null, 'required' => false, 'mapped' => false, 'project_enabled' => true, ]); } $builder ->add('project', ProjectType::class, [ 'required' => false, 'query_builder' => function (ProjectRepository $repo) use ($project, $customer) { return $repo->builderForEntityType($project, $customer); }, ]); // replaces the project select after submission, to make sure only projects for the selected customer are displayed $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($project) { $data = $event->getData(); if (!isset($data['customer']) || empty($data['customer'])) { return; } $event->getForm()->add('project', ProjectType::class, [ 'group_by' => null, 'query_builder' => function (ProjectRepository $repo) use ($data, $project) { return $repo->builderForEntityType($project, $data['customer']); }, ]); } ); $builder ->add('color', ColorPickerType::class) ->add('fixedRate', FixedRateType::class, [ 'currency' => $currency, ]) ->add('hourlyRate', HourlyRateType::class, [ 'currency' => $currency, ]) // boolean ->add('visible', YesNoType::class, [ 'label' => 'label.visible', ]) ; if (null === $id && $options['create_more']) { $builder->add('create_more', CheckboxType::class, [ 'label' => 'label.create_more', 'required' => false, 'mapped' => false, ]); } } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Activity::class, 'csrf_protection' => true, 'csrf_field_name' => '_token', 'csrf_token_id' => 'admin_activity_edit', 'create_more' => false, 'customer' => false, 'attr' => [ 'data-form-event' => 'kimai.activityUpdate' ], ]); } }