<?php
namespace App\Form;
use App\Entity\CarBuy;
use App\Entity\User;
use App\Entity\Car;
use App\Entity\Client;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class CarBuyType extends AbstractType
{
private $token;
public function __construct(TokenStorageInterface $token)
{
$this->token = $token;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$userId = $this->token->getToken()->getUser()->getId();
$userProfile = $this->token->getToken()->getUser()->getProfile()->getId();
$builder
->add('user', EntityType::class, array(
'label' => 'Buyer',
'class' => User::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.firstName', 'ASC');
},
'choice_label' => function ($user) {
return $user->getFirstName().' '.$user->getLastName();
},
'placeholder' => '',
))
->add('client', EntityType::class, array(
'label' => 'Client',
'class' => Client::class,
'query_builder' => function (EntityRepository $er) use($userProfile, $userId) {
if ($userProfile == 1) {
return $er->createQueryBuilder('c')
->leftJoin('c.user', 'u')
->where('u.profile = 2')
->orderBy('c.firstName', 'ASC');
} else {
return $er->createQueryBuilder('c')
->leftJoin('c.user', 'u')
->where('u.profile = 2')
->andWhere('c.user = :user')
->orderBy('c.firstName', 'ASC')
->setParameter('user', $userId);
}
},
'choice_label' => function ($client) {
return $client->getFirstName().' '.$client->getLastName();
},
'placeholder' => '',
'required' => true,
))
->add('car', null, array(
'placeholder' => '',
'required' => true,
))
/*->add('car', HiddenType::class, array(
))*/
->add('currency', ChoiceType::class, array(
'label' => 'Currency',
'choices' => [
'PESOS' => '$',
'USD' => 'USD',
]
))
//->add('price')
//->add('moneyAdvance')
->add('price', TextType::class, [])
->add('moneyAdvance', TextType::class, [])
->add('carSwap', EntityType::class, array(
'label' => 'Vehicle swap',
'class' => Car::class,
'query_builder' => function (EntityRepository $er) use ($options) {
if ($options['edit'] == true) {
return $er->createQueryBuilder('c')
->where('c.status != \'sold\'')
->andWhere('c.status != \'to swap\'')
->andWhere('c.status != \'swapped\'')
->andWhere('c.priceSale != \'NULL\'')
->orWhere('c.id = :carSwapId')
->setParameter('carSwapId', $options['carSwapId'])
//->where('c.priceSale != \'NULL\'')
->orderBy('c.name', 'ASC');
} else {
return $er->createQueryBuilder('c')
->where('c.status != \'sold\'')
->andWhere('c.status != \'to swap\'')
->andWhere('c.status != \'swapped\'')
->andWhere('c.priceSale != \'NULL\'')
->orderBy('c.name', 'ASC');
}
},
'choice_label' => function ($car) {
return $car->getName().' - '.$car->getPatent().' - '.$car->getPriceCurrencySale().number_format($car->getPriceSale(), 0, '', '.');
},
'placeholder' => '',
'help' => 'Only vehicles that have a sale price',
'required' => false,
))
->add('origin', ChoiceType::class, array(
'choices' => [
'Sales Room' => 'Sales Room',
'Posters' => 'Posters',
'Daily' => 'Daily',
'Internet' => 'Internet',
'Maipu' => 'Maipu',
'Radio' => 'Radio',
'Resale' => 'Resale',
],
'placeholder' => '',
))
->add('description', TextareaType::class, array(
'required' => false,
'attr' => array(
'rows' => '8',
)
))
->add('isDone')
->add('isDoneDate', DateType::class, [
'label' => 'Enter buy date',
'widget' => 'single_text',
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => CarBuy::class,
'edit' => false,
'carSwapId' => 0,
]);
}
}