add('user', UserType::class, [ 'label' => 'label.user', 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addCustomerChoice(FormBuilderInterface $builder) { $builder->add('customer', CustomerType::class, [ 'required' => false, 'query_builder' => function (CustomerRepository $repo) { $query = new CustomerQuery(); $query->setVisibility(CustomerQuery::SHOW_BOTH); // this field is the reason for the query here $query->setResultType(CustomerQuery::RESULT_TYPE_QUERYBUILDER); return $repo->findByQuery($query); }, ]); } /** * @param FormBuilderInterface $builder */ protected function addVisibilityChoice(FormBuilderInterface $builder) { $builder->add('visibility', VisibilityType::class, []); } /** * @param FormBuilderInterface $builder */ protected function addPageSizeChoice(FormBuilderInterface $builder) { $builder->add('pageSize', PageSizeType::class, [ 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addUserRoleChoice(FormBuilderInterface $builder) { $builder->add('role', UserRoleType::class, [ 'required' => false, ]); } /** * @param FormBuilderInterface $builder */ protected function addStartDateChoice(FormBuilderInterface $builder) { $builder->add('begin', DateType::class, [ 'label' => 'label.begin', 'widget' => 'single_text', 'html5' => false, 'required' => false, 'format' => 'yyyy-MM-dd', 'attr' => ['autocomplete' => 'off', 'data-datepicker' => 'on'], ]); } /** * @param FormBuilderInterface $builder */ protected function addEndDateChoice(FormBuilderInterface $builder) { $builder->add('end', DateType::class, [ 'label' => 'label.end', 'widget' => 'single_text', 'html5' => false, 'required' => false, 'format' => 'yyyy-MM-dd', 'attr' => ['autocomplete' => 'off', 'data-datepicker' => 'on'], ]); } /** * @param FormBuilderInterface $builder */ protected function addProjectChoice(FormBuilderInterface $builder) { $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); if (!isset($data['customer']) || empty($data['customer'])) { return; } $event->getForm()->add('project', ProjectType::class, [ 'group_by' => null, 'required' => false, 'query_builder' => function (ProjectRepository $repo) use ($data) { $qb = $repo->builderForEntityType(); $qb->where('p.customer = :customer')->setParameter('customer', $data['customer']); return $qb; }, ]); } ); } /** * @param FormBuilderInterface $builder */ protected function addActivityChoice(FormBuilderInterface $builder) { $builder->addEventListener( FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); if (!isset($data['project']) || empty($data['project'])) { return; } $event->getForm()->add('activity', ActivityType::class, [ 'group_by' => null, 'required' => false, 'query_builder' => function (ActivityRepository $repo) use ($data) { $qb = $repo->builderForEntityType(); $qb->where('a.project = :project')->setParameter('project', $data['project']); return $qb; }, ]); } ); } }