src/Form/CarBuyType.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\CarBuy;
  4. use App\Entity\User;
  5. use App\Entity\Car;
  6. use App\Entity\Client;
  7. use Doctrine\ORM\EntityRepository;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  13. use Symfony\Component\Form\Extension\Core\Type\DateType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Form\FormEvents;
  18. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  19. class CarBuyType extends AbstractType
  20. {
  21.     private $token;
  22.     public function __construct(TokenStorageInterface $token)
  23.     {
  24.         $this->token $token;
  25.     }
  26.     public function buildForm(FormBuilderInterface $builder, array $options)
  27.     {
  28.         $userId      $this->token->getToken()->getUser()->getId();
  29.         $userProfile $this->token->getToken()->getUser()->getProfile()->getId();
  30.         $builder
  31.             ->add('user'EntityType::class, array(
  32.                 'label' => 'Buyer',
  33.                 'class' => User::class,
  34.                 'query_builder' => function (EntityRepository $er) {
  35.                     return $er->createQueryBuilder('u')
  36.                         ->orderBy('u.firstName''ASC');
  37.                 },
  38.                 'choice_label' => function ($user) {
  39.                     return $user->getFirstName().' '.$user->getLastName();
  40.                 },
  41.                 'placeholder' => '',
  42.             ))
  43.             ->add('client'EntityType::class, array(
  44.                 'label' => 'Client',
  45.                 'class' => Client::class,
  46.                 'query_builder' => function (EntityRepository $er) use($userProfile$userId) {
  47.                     if ($userProfile == 1) {
  48.                         return $er->createQueryBuilder('c')
  49.                             ->leftJoin('c.user''u')
  50.                             ->where('u.profile = 2')
  51.                             ->orderBy('c.firstName''ASC');
  52.                     } else {
  53.                         return $er->createQueryBuilder('c')
  54.                             ->leftJoin('c.user''u')
  55.                             ->where('u.profile = 2')
  56.                             ->andWhere('c.user = :user')
  57.                             ->orderBy('c.firstName''ASC')
  58.                             ->setParameter('user'$userId);
  59.                     }
  60.                 },
  61.                 'choice_label' => function ($client) {
  62.                     return $client->getFirstName().' '.$client->getLastName();
  63.                 },
  64.                 'placeholder' => '',
  65.                 'required' => true,
  66.             ))
  67.             ->add('car'null, array(
  68.                 'placeholder' => '',
  69.                 'required' => true,
  70.             ))
  71.             /*->add('car', HiddenType::class, array(
  72.             ))*/
  73.             ->add('currency'ChoiceType::class, array(
  74.                 'label' => 'Currency',
  75.                 'choices' => [
  76.                     'PESOS' => '$',
  77.                     'USD' => 'USD',
  78.                 ]
  79.             ))
  80.             //->add('price')
  81.             //->add('moneyAdvance')
  82.             ->add('price'TextType::class, [])
  83.             ->add('moneyAdvance'TextType::class, [])
  84.             ->add('carSwap'EntityType::class, array(
  85.                 'label' => 'Vehicle swap',
  86.                 'class' => Car::class,
  87.                 'query_builder' => function (EntityRepository $er) use ($options) {
  88.                     if ($options['edit'] == true) {
  89.                         return $er->createQueryBuilder('c')
  90.                             ->where('c.status != \'sold\'')
  91.                             ->andWhere('c.status != \'to swap\'')
  92.                             ->andWhere('c.status != \'swapped\'')
  93.                             ->andWhere('c.priceSale != \'NULL\'')
  94.                             ->orWhere('c.id = :carSwapId')
  95.                             ->setParameter('carSwapId'$options['carSwapId'])
  96.                             //->where('c.priceSale != \'NULL\'')
  97.                             ->orderBy('c.name''ASC');
  98.                     } else {
  99.                         return $er->createQueryBuilder('c')
  100.                             ->where('c.status != \'sold\'')
  101.                             ->andWhere('c.status != \'to swap\'')
  102.                             ->andWhere('c.status != \'swapped\'')
  103.                             ->andWhere('c.priceSale != \'NULL\'')
  104.                             ->orderBy('c.name''ASC');
  105.                     }
  106.                 },
  107.                 'choice_label' => function ($car) {
  108.                     return $car->getName().' - '.$car->getPatent().' - '.$car->getPriceCurrencySale().number_format($car->getPriceSale(), 0'''.');
  109.                 },
  110.                 'placeholder' => '',
  111.                 'help' => 'Only vehicles that have a sale price',
  112.                 'required' => false,
  113.             ))
  114.             ->add('origin'ChoiceType::class, array(
  115.                 'choices' => [
  116.                     'Sales Room' => 'Sales Room',
  117.                     'Posters' => 'Posters',
  118.                     'Daily' => 'Daily',
  119.                     'Internet' => 'Internet',
  120.                     'Maipu' => 'Maipu',
  121.                     'Radio' => 'Radio',
  122.                     'Resale' => 'Resale',
  123.                 ],
  124.                 'placeholder' => '',
  125.             ))
  126.             ->add('description'TextareaType::class, array(
  127.                 'required' => false,
  128.                 'attr' => array(
  129.                     'rows' => '8',
  130.                 )
  131.             ))
  132.             ->add('isDone')
  133.             ->add('isDoneDate'DateType::class, [
  134.                 'label' => 'Enter buy date',
  135.                 'widget' => 'single_text',
  136.             ])
  137.         ;
  138.     }
  139.     public function configureOptions(OptionsResolver $resolver)
  140.     {
  141.         $resolver->setDefaults([
  142.             'data_class' => CarBuy::class,
  143.             'edit' => false,
  144.             'carSwapId' => 0,
  145.         ]);
  146.     }
  147. }