src/Form/OperacjaType.php line 103

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Operacje;
  4. use App\Entity\Przychody;
  5. use App\Entity\Rozchody;
  6. use App\Entity\Rodzaje;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Symfony\Component\Form\AbstractType;
  9. use Symfony\Component\Form\Extension\Core\Type\DateType;
  10. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  12. use Symfony\Component\Form\FormBuilderInterface;
  13. use Symfony\Component\OptionsResolver\OptionsResolver;
  14. use Doctrine\ORM\EntityRepository;
  15. use Symfony\Component\Form\FormView;
  16. use Symfony\Component\Form\FormInterface;
  17. class OperacjaType extends AbstractType
  18. {
  19.     public function buildForm(FormBuilderInterface $builder, array $options): void
  20.     {
  21.         // Dodajemy odpowiednie pole w zależności od typu operacji
  22.         if ($options['typ_operacji'] === 'przychod') {
  23.             $builder->add('przychod'EntityType::class, [
  24.                 'class' => Przychody::class,
  25.                 'label' => 'Przychód',
  26.                 'placeholder' => 'Wpisz aby wyszukać...',
  27.                 'attr' => [
  28.                     'class' => 'form-select select2-search',
  29.                     'data-placeholder' => 'Wpisz aby wyszukać...'
  30.                 ],
  31.                 'choice_label' => function($przychod) {
  32.                     return $przychod->getKategoria() ? 
  33.                         '[' $przychod->getKategoria()->getNazwa() . '] ---> ' $przychod->getNazwa() :
  34.                         $przychod->getNazwa();
  35.                 },
  36.                 'query_builder' => function (EntityRepository $er) {
  37.                     return $er->createQueryBuilder('p')
  38.                         ->leftJoin('p.kategoria''k')
  39.                         ->addSelect('k')
  40.                         ->orderBy('k.nazwa''ASC')
  41.                         ->addOrderBy('p.nazwa''ASC');
  42.                 },
  43.             ]);
  44.         } else {
  45.             $builder->add('rozchod'EntityType::class, [
  46.                 'class' => Rozchody::class,
  47.                 'label' => 'Wydatek',
  48.                 'placeholder' => 'Wpisz aby wyszukać...',
  49.                 'attr' => [
  50.                     'class' => 'form-select select2-search',
  51.                     'data-placeholder' => 'Wpisz aby wyszukać...'
  52.                 ],
  53.                 'choice_label' => function($rozchod) {
  54.                     return $rozchod->getKategoria() ? 
  55.                         '[' $rozchod->getKategoria()->getNazwa() . '] --> ' $rozchod->getNazwa() :
  56.                         $rozchod->getNazwa();
  57.                 },
  58.                 'query_builder' => function (EntityRepository $er) {
  59.                     return $er->createQueryBuilder('r')
  60.                         ->leftJoin('r.kategoria''k')
  61.                         ->addSelect('k')
  62.                         ->orderBy('k.nazwa''ASC')
  63.                         ->addOrderBy('r.nazwa''ASC');
  64.                 },
  65.             ]);
  66.         };
  67.         $builder
  68.             ->add('dataOperacji'DateType::class, [
  69.                 'label' => 'Data operacji',
  70.                 'widget' => 'single_text',
  71.                 'html5' => true,
  72.                 'attr' => ['class' => 'form-control'],
  73.                 'format' => 'yyyy-MM-dd',
  74.             ])
  75.             ->add('kwota'NumberType::class, [
  76.                 'label' => 'Kwota',
  77.                 'attr' => [
  78.                     'class' => 'form-control',
  79.                     'step' => '0.01',
  80.                     'min' => '0.01',
  81.                 ],
  82.                 'html5' => true,
  83.             ])
  84.             ->add('opis'TextareaType::class, [
  85.                 'label' => 'Opis',
  86.                 'required' => false,
  87.                 'attr' => ['class' => 'form-control''rows' => 3],
  88.             ])
  89. //            ->add('kto', null, [
  90. //                'label' => 'Osoba',
  91. //                'required' => false,
  92. //                'attr' => ['class' => 'form-control'],
  93. //            ])
  94.             ->add('rodzaj'EntityType::class, [
  95.                 'class' => Rodzaje::class,
  96.                 'label' => false,
  97.                 'attr' => ['class' => 'd-none'],
  98.                 'choice_label' => 'nazwa',
  99.                 'query_builder' => function (EntityRepository $er) use ($options) {
  100.                     $qb $er->createQueryBuilder('r');
  101.                     if ($options['typ_operacji'] === 'przychod') {
  102.                         $qb->where('r.nazwa LIKE :przychod')
  103.                            ->setParameter('przychod''Przychód%');
  104.                     } else {
  105.                         $qb->where('r.nazwa NOT LIKE :przychod')
  106.                            ->setParameter('przychod''Przychód%');
  107.                     }
  108.                     return $qb->orderBy('r.nazwa''ASC');
  109.                 },
  110.             ]);
  111.     }
  112.     public function configureOptions(OptionsResolver $resolver): void
  113.     {
  114.         $resolver->setDefaults([
  115.             'data_class' => Operacje::class,
  116.             'typ_operacji' => 'wydatek'// Domyślnie ustawiamy na wydatek
  117.         ]);
  118.     }
  119.     
  120.     public function buildView(FormView $viewFormInterface $form, array $options): void
  121.     {
  122.         parent::buildView($view$form$options);
  123.         
  124.         // Add a flag to the view to indicate we should use select2
  125.         $view->vars['use_select2'] = true;
  126.     }
  127. }