- <?php
- 
- namespace DcSiteBundle\Form;
- 
- use DcSiteBundle\Model\Form\ServiceForm;
- use DateTime;
- use Exception;
- use CoreBundle\Form\CoreFormsType;
- use DcSiteBundle\Form\Transformer\ServiceDataFormTransformer;
- use Symfony\Component\Form\CallbackTransformer;
- use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
- use Symfony\Component\Form\Extension\Core\Type\DateType;
- use Symfony\Component\Form\Extension\Core\Type\HiddenType;
- use Symfony\Component\Form\Extension\Core\Type\IntegerType;
- use Symfony\Component\Form\Extension\Core\Type\TextareaType;
- use Symfony\Component\Form\Extension\Core\Type\TextType;
- use Symfony\Component\Form\FormBuilderInterface;
- use Symfony\Component\Form\FormEvents;
- use Symfony\Component\Form\FormInterface;
- use Symfony\Component\Form\FormView;
- use Symfony\Component\OptionsResolver\OptionsResolver;
- use Symfony\Contracts\Translation\TranslatorInterface;
- 
- class ServiceType extends CoreFormsType
- {
- 
-     /**
-      * @param FormBuilderInterface $builder
-      * @param array $options
-      * @return int|void
-      * @throws Exception
-      */
-     public function buildForm(FormBuilderInterface $builder, array $options)
-     {
-         /** @var TranslatorInterface $Translator */
-         $Translator = $options['translator'];
-         $defaultType = $options['defaultType'];
-         parent::buildForm($builder, $options);
-         $fullForm = $options['fullForm'];
-         $communicationType = $options['communication'];
-         $builder
-             ->add('dealer', HiddenType::class)
-             ->add('date_visit', TextType::class, [
-                 'label' => false,
-                 'mapped' => false,
-                 'attr' => [
-                     'placeholder' => $Translator->trans('form.visit_time', [],'dc_base'),
-                     'autocomplete' => "off",
-                     'class' => 'js-datepicker',
-                 ],
-             ])
-             ->add('mileage', IntegerType::class, [
-                 'label' => false,
-                 'mapped' => false,
-                 'required' => false,
-                 'attr' => [
-                     'placeholder' => $Translator->trans('form.mileage', [], 'dc_base'),
-                     'class' => 'mileage'
-                 ]
-             ])
-             ->add('reason', TextareaType::class, [
-                 'label' => false,
-                 'mapped' => false,
-                 'required' => false,
-                 'attr' => [
-                     'placeholder' => $Translator->trans('form.reason', [], 'dc_base')
-                 ]
-             ])
-             ->add('service_type', ChoiceType::class, [
-                 'label' => false,
-                 'required' => false,
-                 'mapped' => false,
-                 'data' => $defaultType,
-                 'placeholder' => $Translator->trans('form.service_type', [], 'dc_base'),
-                 'choices' => array_flip(ServiceForm::getTypeName($Translator->getLocale())),
-             ])
-             ->add('issue_year', DateType::class, [
-                 'required' => false,
-                 'mapped' => false,
-                 'placeholder' => $Translator->trans('form.issue_year', [], 'dc_base'),
-                 'widget' => 'single_text',
-                 'format' => 'yyyy',
-                 'label' => false,
-                 'html5' => false,
-                 'attr' => [
-                     'class' => 'js-datepicker-year',
-                 ],
-             ])
- 
-         ;
-         if($communicationType) {
-             $builder
-                 ->add('communication', ChoiceType::class, [
-                         'label' => $Translator->trans('form.communication',[],'dc_base'),
-                         'required' => true,
-                         'mapped' => false,
-                         'data' => 'phone',
-                         'choices' => array_flip(['phone' => 'Телефон', 'email' => 'E-mail']),
-                         'expanded' => true,
-                         'multiple' => false,
-                         'attr' => [
-                             'class' => 'js-td-communication'
-                         ],
-                     ]
-                 );
-         }
- 
-         if ($fullForm) {
-             $builder
-                 ->add('model', TextType::class, [
-                     'required' => false,
-                     'mapped' => false,
-                     'label' => false,
-                     'attr' => [
-                         'placeholder' => $Translator->trans('form.model_choose', [], 'dc_base'),
-                     ],
-                 ])
-                 ->add('commentary', TextareaType::class, [
-                     'required' => false,
-                     'mapped' => false,
-                     'label' => false,
-                     'attr' => [
-                         'placeholder' => $Translator->trans('form.comment', [], 'dc_base'),
-                         'rows' => 10
-                     ],
-                 ])
-                 ->add('vin_gos_nomer', TextType::class, [
-                     'required' => false,
-                     'mapped' => false,
-                     'label' => false,
-                     'attr' => [
-                         'placeholder' => $Translator->trans('form.vin_gos_nomer', [], 'dc_base'),
-                     ],
-                 ])
-             ;
-         }
- 
-         $builder->get('date_visit')->addModelTransformer(new CallbackTransformer(
-            fn($dateAsObject) => (new DateTime($dateAsObject))->format('d.m.Y'),
-             function ($dateAsSting) {
-                 /** @var DateTime $dateAsObject */
-                 $dateAsSting = str_replace('.', '-', $dateAsSting);
-                return new DateTime($dateAsSting);
-             }
-         ));
-         $builder->addEventListener(FormEvents::SUBMIT, function ($event): void {
-             (new ServiceDataFormTransformer($event))->transform();
-         });
-     }
- 
-     /**
-      * @param OptionsResolver $resolver
-      */
-     public function configureOptions(OptionsResolver $resolver)
-     {
-         parent::configureOptions($resolver);
-         $resolver->setDefault('captcha_type','service_form');
-         $resolver->setDefault('communication',false);
-         $resolver->setDefault('defaultType',false);
-         $resolver->setDefault('fullForm', false);
-     }
- }
-