<?php
namespace App\Form\Type;
use App\Entity\Customer;
use App\Form\DataTransformer\DateTransformer;
use App\Manager\RoleManager;
use Psr\Container\ContainerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\RequestStack;
class ProspectDateJoinFormType extends AbstractType
{
private $container;
protected $requestStack;
public function __construct(ContainerInterface $container, RequestStack $requestStack) {
$this->container = $container;
$this->requestStack = $requestStack;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$session = $this->container->get('session');
$locale = $this->requestStack->getCurrentRequest()->getLocale();
$customerName = 'Customer';
if($locale == 'fr'){
$customerName = 'Client';
}
$customer_id = $session->get('added_customer');
$customer = $options['data'];
$name = is_object($customer) ? sprintf($customerName.' %s: %s %s',
$customer->getSlotNumber(),
$customer->getFirstName(),
$customer->getLastName()): "";
$builder
->add('dateJoinNetwork', DateType::class, [
'disabled' => ($options['status'] === 'network' && $customer->getId() === $customer_id)
|| $options['checker']->isGranted(RoleManager::ROLE_SUPER_ADMIN) ? false :
($options['checker']->isGranted(RoleManager::ROLE_EQUIPE) && $options['status'] === 'project' ? false : true ),
'label' => $name,
'required' => false,
'widget' => 'choice',
])
->add('slotNumber', ChoiceType::class, [
'disabled' => $options['status'] === 'network' ? true :
(!$options['checker']->isGranted(RoleManager::ROLE_EQUIPE) ? true : false),
'choices' => [
1 => 1,
2 => 2,
3 => 3,
4 => 4,
5 => 5,
6 => 6
],
'label' => 'Position in the network',
'attr' => ['class' => 'slotNumber']
])
->add('hasBattery', CheckboxType::class, [
'label' => 'Battery',
'required' => false,
'attr' => ['class'=>'single-checkbox', 'data-set' => $customer->getId()]
])
;
$builder->get('dateJoinNetwork')->addModelTransformer(new DateTransformer());
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefaults([
'data_class' => Customer::class,
'checker' => null,
'status' => null
])
;
}
/**
* @return string
*/
public function getBlockPrefix()
{
return 'ProspectDateJoinFormType';
}
}