src/CoreBundle/Component/CoreFormFactory.php line 172

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\Component;
  3. use CoreBundle\Entity\ViDiDepartment;
  4. use ImporterBundle\Form\OrderType;
  5. use ImporterBundle\Form\InsuranceType;
  6. use Doctrine\ORM\NonUniqueResultException;
  7. use CoreBundle\Entity\Dealer;
  8. use CoreBundle\Entity\Forms;
  9. use CoreBundle\Entity\User;
  10. use CoreBundle\Entity\Vehicles\InStock;
  11. use CoreBundle\Entity\Vehicles\Vehicle;
  12. use CoreBundle\Form\CallOrderType;
  13. use CoreBundle\Form\FeedbackQuestionType;
  14. use CoreBundle\Form\FeedbackType;
  15. use DcSiteBundle\Entity\Vacancy;
  16. use DcSiteBundle\Entity\VacancyForm;
  17. use DcSiteBundle\Form\BuyInStockType;
  18. use DcSiteBundle\Form\BuyPartsType;
  19. use DcSiteBundle\Form\BuySparePartsType;
  20. use DcSiteBundle\Form\BuyType;
  21. use DcSiteBundle\Form\CallMeType;
  22. use DcSiteBundle\Form\CallMeWithDealersType;
  23. use DcSiteBundle\Form\CommissionTechnologyType;
  24. use DcSiteBundle\Form\CorpSaleType;
  25. use DcSiteBundle\Form\CreditType;
  26. use DcSiteBundle\Form\ExtendedWarrantyType;
  27. use DcSiteBundle\Form\FindPartType;
  28. use DcSiteBundle\Form\InsuranceExtendType;
  29. use DcSiteBundle\Form\LeasingType;
  30. use DcSiteBundle\Form\MotoTestDriveType;
  31. use DcSiteBundle\Form\OilTOType;
  32. use DcSiteBundle\Form\OnlineServiceRegistrationType;
  33. use DcSiteBundle\Form\OrderGoodsType;
  34. use DcSiteBundle\Form\RentType;
  35. use DcSiteBundle\Form\RepairPhotoType;
  36. use DcSiteBundle\Form\SaveDesignType;
  37. use DcSiteBundle\Form\SendQuestionType;
  38. use DcSiteBundle\Form\ServiceCampaingCarType;
  39. use DcSiteBundle\Form\ServiceConsultType;
  40. use DcSiteBundle\Form\ServicesOrderType;
  41. use DcSiteBundle\Form\ServiceType;
  42. use DcSiteBundle\Form\TestDriveType;
  43. use DcSiteBundle\Form\TiresConfiguratorType;
  44. use DcSiteBundle\Form\TiresHotelType;
  45. use DcSiteBundle\Form\TradeInType;
  46. use DcSiteBundle\Form\UnicommerceFleetUpdateType;
  47. use DcSiteBundle\Form\VacancyType;
  48. use DcSiteBundle\Form\WaterTestDriveType;
  49. use DcSiteBundle\Form\WithoutPayOrderType;
  50. use Doctrine\ORM\EntityManagerInterface;
  51. use ImporterBundle\Form\OrderVehicleType;
  52. use ImporterBundle\Form\SparePartsType;
  53. use InsuranceBundle\Form\OrderInsuranceType;
  54. use PortalBundle\Form\SupportType;
  55. use Symfony\Component\Form\FormFactory;
  56. use Symfony\Component\Form\FormInterface;
  57. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  58. use Symfony\Contracts\Translation\TranslatorInterface;
  59. /**
  60.  * Class CoreFormFactory
  61.  * @package CoreBundle\Component
  62.  */
  63. class CoreFormFactory
  64. {
  65.     private TranslatorInterface $translator;
  66.     private $coreFactory;
  67.     private TokenStorageInterface $tokenStorage;
  68.     private EntityManagerInterface $em;
  69.     public function __construct(TranslatorInterface $translatorFormFactory $coreFactory,
  70.                                 EntityManagerInterface $emTokenStorageInterface $ts)
  71.     {
  72.         $this->translator $translator;
  73.         $this->tokenStorage $ts;
  74.         $this->em $em;
  75.         $this->coreFactory $coreFactory;
  76.     }
  77.     private function setUserData($data null)
  78.     {
  79.         if (!$data) {
  80.             $data = new Forms();
  81.         }
  82.         $Token $this->tokenStorage->getToken();
  83.         if (!$Token) {
  84.             return $data;
  85.         }
  86.         $User $Token->getUser();
  87.         if (!($User instanceof User)) {
  88.             return $data;
  89.         }
  90.         $data->setName($User->getName());
  91.         $data->setPhone($User->getPhone());
  92.         $data->setEmail($User->getEmail());
  93.         return $data;
  94.     }
  95.     /**
  96.      * @param Dealer $dealer
  97.      * @param Forms $data
  98.      * @param array $options
  99.      * @param bool $byOurVehicles
  100.      * @return FormInterface
  101.      */
  102.     public function testDriveForm(Dealer $dealer nullForms $data null$options = [], $byOurVehicles false)
  103.     {
  104.         if (!isset($options['query_builder'])) {
  105.             if ($byOurVehicles) {
  106.                 $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  107.                     ->where('v.state = 1')
  108.                     ->andWhere('v.test_drive = 1');
  109.             } else {
  110.                 $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  111.                     ->join('v.model''m')
  112.                     ->join('m.testdrive''t')
  113.                     ->where('v.state = 1')
  114.                     ->andWhere('t.state = 1')
  115.                     ->groupBy('v.id');
  116.             }
  117.             if ($dealer) {
  118.                 $queryBuilder->andWhere('v.dealer = :dealer')
  119.                     ->setParameter('dealer'$dealer);
  120.             }
  121.             $options['query_builder'] = $queryBuilder;
  122.         }
  123.         $data $this->setUserData($data);
  124.         $options array_merge($options, [
  125.             'dealer' => $dealer,
  126.             'translator' => $this->translator,
  127.             'ga_events' => [
  128.                 'event_category' => 'test-drive',
  129.                 'event_label' => 'test-drive',
  130.             ]
  131.         ]);
  132.         return $this->coreFactory->create(TestDriveType::class, $data$options);
  133.     }
  134.     /**
  135.      * @param Dealer $dealer
  136.      * @param Forms $data
  137.      * @return FormInterface
  138.      */
  139.     public function feedbackForm(Forms $data null)
  140.     {
  141.         $data $this->setUserData($data);
  142.         return $this->coreFactory->create(FeedbackType::class, $data, [
  143.             'translator' => $this->translator,
  144.         ]);
  145.     }
  146.     /**
  147.      * @param Forms|null $data
  148.      * @param bool $communication
  149.      * @param null $defaultType
  150.      * @param null $fullForm
  151.      * @param bool $privacyUrl
  152.      * @return FormInterface
  153.      */
  154.     public function serviceForm(Forms $data null$communication false$defaultType null$fullForm null$privacyUrl false)
  155.     {
  156.         $data $this->setUserData($data);
  157.         return $this->coreFactory->create(ServiceType::class, $data, [
  158.             'translator' => $this->translator,
  159.             'defaultType' => $defaultType,
  160.             'communication' => $communication,
  161.             'fullForm' => $fullForm,
  162.             'privacyUrl' => $privacyUrl,
  163.             'ga_events' => [
  164.                 'event_category' => 'sto-all',
  165.                 'event_label' => 'sto',
  166.             ]
  167.         ]);
  168.     }
  169.     /**
  170.      * @param Forms $data
  171.      * @param Vehicle $car
  172.      * @return FormInterface
  173.      */
  174.     public function buyForm(Forms $data null$vehicle null$variationId null$dealer null$usedCar false$inStockCar false$price 0)
  175.     {
  176.         $data $this->setUserData($data);
  177.         $queryBuilder null;
  178.         /** @var Vehicle $vehicle */
  179.         if ($vehicle instanceof Vehicle) {
  180.             $data->setVehicle($vehicle);
  181.             $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  182.                 ->where('v.id = :vehicle')
  183.                 ->setParameter('vehicle'$vehicle);
  184.         } elseif ($dealer) {
  185.             $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  186.                 ->where('v.dealer = :dealer')
  187.                 ->setParameter('dealer'$dealer);
  188.         }
  189.         $eventCategory 'car-order';
  190.         $eventLabel 'order-car';
  191.         $fbqContentName 'Buy_Automobili';
  192.         if ($vehicle && $vehicle->getVehicleType() == 4) {
  193.             $eventCategory 'moto';
  194.             $eventLabel 'order-moto';
  195.         }
  196.         if ($usedCar) {
  197.             $eventLabel 'order-used-car-stock';
  198.             $fbqContentName 'Buy_used';
  199.         }
  200.         if ($inStockCar) {
  201.             $eventLabel 'order-car-stock';
  202.             $fbqContentName 'Buy_InStock';
  203.         }
  204.         return $this->coreFactory->create(BuyType::class, $data, [
  205.             'translator' => $this->translator,
  206.             'variationId' => $variationId,
  207.             'query_builder' => $queryBuilder,
  208.             'ga_events' => [
  209.                 'event_category' => $eventCategory,
  210.                 'event_label' => $eventLabel,
  211.             ],
  212.             'fbq_track' => [
  213.                 'content_name' => $fbqContentName,
  214.                 'value' => $price,
  215.                 'model' => $vehicle $vehicle->getModel()->getTitle() : null,
  216.             ],
  217.         ]);
  218.     }
  219.     public function preorderForm(Forms $data null$vehicle null$variationId null$dealer null)
  220.     {
  221.         $data $this->setUserData($data);
  222.         $queryBuilder null;
  223.         if ($vehicle instanceof Vehicle) {
  224.             $data->setVehicle($vehicle);
  225.             $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  226.                 ->where('v.id = :vehicle')
  227.                 ->setParameter('vehicle'$vehicle);
  228.         } elseif ($dealer) {
  229.             $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  230.                 ->where('v.dealer = :dealer')
  231.                 ->setParameter('dealer'$dealer);
  232.         }
  233.         return $this->coreFactory->create(BuyType::class, $data, [
  234.             'translator' => $this->translator,
  235.             'variationId' => $variationId,
  236.             'query_builder' => $queryBuilder,
  237.             'ga_events' => [
  238.                 'event_category' => 'car-order',
  239.                 'event_label' => 'order-car',
  240.             ]
  241.         ]);
  242.     }
  243.     /**
  244.      * @param Forms $data
  245.      * @param InStock $car
  246.      * @return FormInterface
  247.      */
  248.     public function buyInStockForm(Forms $data nullInStock $car null)
  249.     {
  250.         $data $this->setUserData($data);
  251.         $isMoto false;
  252.         if ($car) {
  253.             $isMoto $car->getVehicleItem()->getVehicle()->getVehicleType() == true false;
  254.             $data->setVehicleInStock($car);
  255.         }
  256.         return $this->coreFactory->create(BuyInStockType::class, $data, [
  257.             'translator' => $this->translator,
  258.             'car' => $car,
  259.             'ga_events' => [
  260.                 'event_category' => $isMoto 'moto' 'car-order',
  261.                 'event_label' => $isMoto 'order-moto' 'order-car-stock',
  262.             ],
  263.             'fbq_track' => [
  264.                 'content_name' => 'Buy_InStock',
  265.                 'value' => $car $car->getVehicleItem()->getPrice() : 0,
  266.                 'model' => $car $car->getVehicleItem()->getVehicle()->getModel()->getTitle() : null,
  267.             ],
  268.         ]);
  269.     }
  270.     /**
  271.      * @param Forms|null $datak
  272.      * @param Dealer|null $dealer
  273.      * @return FormInterface
  274.      * @throws NonUniqueResultException
  275.      */
  276.     public function orderCallForm(Forms $data nullDealer $dealer null$departmentType null$withoutEmail false$locale 'ua')
  277.     {
  278.         $data $this->setUserData($data);
  279.         if ($departmentType && $dealer) {
  280.             $department $this->em->getRepository(ViDiDepartment::class)->getByType($departmentType$dealer);
  281.             $data->setDepartment($department);
  282.         }
  283.         return $this->coreFactory->create(CallOrderType::class, $data, [
  284.             'translator' => $this->translator,
  285.             'dealer' => $dealer,
  286.             'locale' => $locale,
  287.             'without_email' => $withoutEmail,
  288.             'ga_events' => [
  289.                 'event_category' => 'call-question',
  290.                 'event_label' => 'call-back',
  291.             ]
  292.         ]);
  293.     }
  294.     public function extendedWarrantyForm(Forms $data nullDealer $dealer null)
  295.     {
  296.         $data $this->setUserData($data);
  297.         return $this->coreFactory->create(ExtendedWarrantyType::class, $data, [
  298.             'translator' => $this->translator,
  299.             'dealer' => $dealer,
  300.         ]);
  301.     }
  302.     /**
  303.      * @param $question
  304.      * @param null $departmentType
  305.      * @param Forms $data
  306.      * @param Dealer|null $dealer
  307.      * @param bool $communication
  308.      * @return FormInterface
  309.      * @throws NonUniqueResultException
  310.      */
  311.     public function fbDefQuestionForm($question$departmentType nullForms $data nullDealer $dealer null$communication false$gaEvents null)
  312.     {
  313.         $data $this->setUserData($data);
  314.         if ($departmentType) {
  315.             $department $this->em->getRepository(ViDiDepartment::class)->getByType($departmentType$dealer);
  316.             $data->setDepartment($department);
  317.         }
  318.         $events $gaEvents ?: [
  319.             'event_category' => 'call-question',
  320.             'event_label' => 'ask-question',
  321.         ];
  322.         return $this->coreFactory->create(FeedbackQuestionType::class, $data, [
  323.             'default_question' => $question,
  324.             'departmentType' => $departmentType,
  325.             'translator' => $this->translator,
  326.             'dealer' => $dealer,
  327.             'communication' => $communication,
  328.             'ga_events' => $events
  329.         ]);
  330.     }
  331.     /**
  332.      * @param Forms $data
  333.      * @param Dealer|null $dealer
  334.      * @param bool $communication
  335.      * @return FormInterface
  336.      */
  337.     public function feedbackQuestionForm(Forms $data nullDealer $dealer null$communication false$locale 'ua')
  338.     {
  339.         $data $this->setUserData($data);
  340.         return $this->coreFactory->create(FeedbackQuestionType::class, $data, [
  341.             'translator' => $this->translator,
  342.             'dealer' => $dealer,
  343.             'locale' => $locale,
  344.             'communication' => $communication,
  345.             'ga_events' => [
  346.                 'event_category' => 'call-question',
  347.                 'event_label' => 'ask-question',
  348.             ]
  349.         ]);
  350.     }
  351.     /**
  352.      * @param Dealer $dealer
  353.      * @param Forms $data
  354.      * @return FormInterface
  355.      */
  356.     public function creditForm(Dealer $dealer nullForms $data null)
  357.     {
  358.         $data $this->setUserData($data);
  359.         return $this->coreFactory->create(CreditType::class, $data, [
  360.             'dealer' => $dealer,
  361.             'translator' => $this->translator,
  362.         ]);
  363.     }
  364.     /**
  365.      * @param Dealer $dealer
  366.      * @param Forms $data
  367.      * @return FormInterface
  368.      */
  369.     public function leasingForm(Dealer $dealer nullForms $data null)
  370.     {
  371.         $data $this->setUserData($data);
  372.         return $this->coreFactory->create(LeasingType::class, $data, [
  373.             'dealer' => $dealer,
  374.             'translator' => $this->translator,
  375.         ]);
  376.     }
  377.     public function unicommerceFleetUpdate(Dealer $dealer nullForms $data null)
  378.     {
  379.         $data $this->setUserData($data);
  380.         return $this->coreFactory->create(UnicommerceFleetUpdateType::class, $data, [
  381.             'dealer' => $dealer,
  382.             'translator' => $this->translator,
  383.         ]);
  384.     }
  385.     /**
  386.      * @param Dealer $dealer
  387.      * @param Forms $data
  388.      * @return FormInterface
  389.      */
  390.     public function tradeInFrom(Dealer $dealerForms $data null)
  391.     {
  392.         $data $this->setUserData($data);
  393.         return $this->coreFactory->create(TradeInType::class, $data, [
  394.             'dealer' => $dealer,
  395.             'translator' => $this->translator
  396.         ]);
  397.     }
  398.     /**
  399.      * @param Forms $data
  400.      * @return FormInterface
  401.      */
  402.     public function orderMandatoryForm(Forms $data null)
  403.     {
  404.         $data $this->setUserData($data);
  405.         return $this->coreFactory->create(OrderInsuranceType::class, $data, [
  406.             'translator' => $this->translator,
  407.             'orderType' => OrderInsuranceType::MANDATORY_ORDER_INSURANCE,
  408.         ]);
  409.     }
  410.     /**
  411.      * @param Forms $data
  412.      * @return FormInterface
  413.      */
  414.     public function orderCascoForm(Forms $data null)
  415.     {
  416.         $data $this->setUserData($data);
  417.         return $this->coreFactory->create(OrderInsuranceType::class, $data, [
  418.             'translator' => $this->translator,
  419.             'orderType' => OrderInsuranceType::CASCO_ORDER_INSURANCE,
  420.         ]);
  421.     }
  422.     /**
  423.      * @param Forms $data
  424.      * @return FormInterface
  425.      */
  426.     public function orderHomeInsuranceForm(Forms $data null)
  427.     {
  428.         $data $this->setUserData($data);
  429.         return $this->coreFactory->create(OrderInsuranceType::class, $data, [
  430.             'translator' => $this->translator,
  431.             'orderType' => OrderInsuranceType::HOME_INSURANCE,
  432.         ]);
  433.     }
  434.     /**
  435.      * @param Forms $data
  436.      * @return FormInterface
  437.      */
  438.     public function orderVoluntaryForm(Forms $data null)
  439.     {
  440.         $data $this->setUserData($data);
  441.         return $this->coreFactory->create(OrderInsuranceType::class, $data, [
  442.             'translator' => $this->translator,
  443.             'orderType' => OrderInsuranceType::VOLUNTARY_ORDER_INSURANCE,
  444.         ]);
  445.     }
  446.     /**
  447.      * @param Forms $data
  448.      * @return FormInterface
  449.      */
  450.     public function orderCivilianForm(Forms $data null)
  451.     {
  452.         $data $this->setUserData($data);
  453.         return $this->coreFactory->create(OrderInsuranceType::class, $data, [
  454.             'translator' => $this->translator,
  455.             'orderType' => OrderInsuranceType::REGISTRATION_AUTO_CIVILIAN,
  456.         ]);
  457.     }
  458.     /**
  459.      * @param Dealer $dealer
  460.      * @param Forms $data
  461.      * @return FormInterface
  462.      */
  463.     public function buyPartsForm(Dealer $dealer nullForms $data null)
  464.     {
  465.         $data $this->setUserData($data);
  466.         return $this->coreFactory->create(BuyPartsType::class, $data, [
  467.             'translator' => $this->translator,
  468.             'dealer' => $dealer,
  469.             'ga_events' => [
  470.                 'event_category' => 'order-accessory',
  471.                 'event_label' => 'order-accessory',
  472.             ]
  473.         ]);
  474.     }
  475.     /**
  476.      * @param Dealer $dealer
  477.      * @param Forms $data
  478.      * @param string $locale
  479.      * @return FormInterface
  480.      */
  481.     public function corpSalesForm(Dealer $dealer null$locale nullForms $data null)
  482.     {
  483.         $data $this->setUserData($data);
  484.         return $this->coreFactory->create(CorpSaleType::class, $data, [
  485.             'translator' => $this->translator,
  486.             'locale' => $locale,
  487.             'dealer' => $dealer,
  488.             'ga_events' => [
  489.                 'event_category' => 'corporate',
  490.                 'event_label' => 'corporate',
  491.             ],
  492.         ]);
  493.     }
  494.     /**
  495.      * @param Dealer $dealer
  496.      * @param Vacancy $vacancy
  497.      * @param VacancyForm $data
  498.      * @return FormInterface
  499.      */
  500.     public function vacancyForm(Dealer $dealer nullVacancy $vacancy nullVacancyForm $data null)
  501.     {
  502.         return $this->coreFactory->create(VacancyType::class, $data, [
  503.             'translator' => $this->translator,
  504.             'vacancy' => $vacancy,
  505.             'dealer' => $dealer,
  506.         ]);
  507.     }
  508.     /**
  509.      * @param null $servicesType
  510.      * @param null $locale
  511.      * @param Forms|null $data
  512.      * @return FormInterface
  513.      */
  514.     public function servicesOrderForm($servicesType null$locale null$data null)
  515.     {
  516.         $data $this->setUserData($data);
  517.         return $this->coreFactory->create(ServicesOrderType::class, $data, [
  518.             'servicesType' => $servicesType,
  519.             'locale' => $locale,
  520.             'translator' => $this->translator,
  521.             'ga_events' => [
  522.                 'event_category' => 'call-question',
  523.                 'event_label' => 'services-order',
  524.             ]
  525.         ]);
  526.     }
  527.     /**
  528.      * @param Dealer $dealer
  529.      * @param Forms $data
  530.      * @return FormInterface
  531.      */
  532.     public function repairPhotoForm(Dealer $dealer nullForms $data null)
  533.     {
  534.         $data $this->setUserData($data);
  535.         return $this->coreFactory->create(RepairPhotoType::class, $data, [
  536.             'dealer' => $dealer,
  537.             'translator' => $this->translator,
  538.             'ga_events' => [
  539.                 'event_category' => 'sto-all',
  540.                 'event_label' => 'remont-kyzova',
  541.             ]
  542.         ]);
  543.     }
  544.     public function supportForm(Forms $data null$locale 'ru'bool $filterPalmira false)
  545.     {
  546.         $data $this->setUserData($data);
  547.         return $this->coreFactory->create(SupportType::class, $data, [
  548.             'translator' => $this->translator,
  549.             'locale' => $locale,
  550.             'ga_events' => [
  551.                 'event_category' => 'call-question',
  552.                 'event_label' => 'call-back',
  553.             ],
  554.             'filterPalmira' => $filterPalmira,
  555.         ]);
  556.     }
  557.     public function rentForm(Dealer $dealer nullForms $data null$withOutTime false)
  558.     {
  559.         $data $this->setUserData($data);
  560.         return $this->coreFactory->create(RentType::class, $data, [
  561.             'translator' => $this->translator,
  562.             'ga_events' => [
  563.                 'event_category' => 'call-question',
  564.                 'event_label' => 'rent-car',
  565.                 'withOutTime' => $withOutTime,
  566.             ]
  567.         ]);
  568.     }
  569.     public function rentLuggageForm(Dealer $dealer nullForms $data null)
  570.     {
  571.         $data $this->setUserData($data);
  572.         return $this->coreFactory->create(RentType::class, $data, [
  573.             'translator' => $this->translator,
  574.             'equipment_rent_type' => 'luggage',
  575.             'ga_events' => [
  576.                 'event_category' => 'call-question',
  577.                 'event_label' => 'rent-car',
  578.             ]
  579.         ]);
  580.     }
  581.     public function findPartForm(Dealer $dealer nullForms $data null)
  582.     {
  583.         $data $this->setUserData($data);
  584.         return $this->coreFactory->create(FindPartType::class, $data, [
  585.             'dealer' => $dealer,
  586.             'translator' => $this->translator,
  587.             'ga_events' => [
  588.                 'event_category' => 'service_parts',
  589.                 'event_label' => 'order_parts',
  590.             ]
  591.         ]);
  592.     }
  593.     public function insuranceExtendForm(Dealer $dealer nullForms $data null)
  594.     {
  595.         $data $this->setUserData($data);
  596.         return $this->coreFactory->create(InsuranceExtendType::class, $data, [
  597.             'translator' => $this->translator
  598.         ]);
  599.     }
  600.     public function commissionTechnologyForm(Dealer $dealer nullForms $data null)
  601.     {
  602.         $data $this->setUserData($data);
  603.         return $this->coreFactory->create(CommissionTechnologyType::class, $data, [
  604.             'translator' => $this->translator
  605.         ]);
  606.     }
  607.     public function buySparePartsForm(Dealer $dealer nullForms $data null)
  608.     {
  609.         $data $this->setUserData($data);
  610.         return $this->coreFactory->create(BuySparePartsType::class, $data, [
  611.             'dealer' => $dealer,
  612.             'translator' => $this->translator,
  613.         ]);
  614.     }
  615.     public function tiresConfiguratorForm(Forms $data null)
  616.     {
  617.         $data $this->setUserData($data);
  618.         return $this->coreFactory->create(TiresConfiguratorType::class, $data, [
  619.             'translator' => $this->translator
  620.         ]);
  621.     }
  622.     public function subServiceForm(\ImporterBundle\Entity\Forms $data null$communication false$defaultType null$fullForm null)
  623.     {
  624.         $data $this->setUserData($data);
  625.         return $this->coreFactory->create(\ImporterBundle\Form\ServiceType::class, $data, [
  626.             'translator' => $this->translator,
  627.             'defaultType' => $defaultType,
  628.             'communication' => $communication,
  629.             'fullForm' => $fullForm,
  630.         ]);
  631.     }
  632.     public function subSparePartsForm(\ImporterBundle\Entity\Forms $data null)
  633.     {
  634.         return $this->coreFactory->create(SparePartsType::class, $data, [
  635.             'translator' => $this->translator,
  636.         ]);
  637.     }
  638.     public function subOrderForm($item null\ImporterBundle\Entity\Forms $data null)
  639.     {
  640.         return $this->coreFactory->create(OrderType::class, $data, [
  641.             'translator' => $this->translator,
  642.             'buy_item' => $item,
  643.         ]);
  644.     }
  645.     public function subOrderVehicleForm(\ImporterBundle\Entity\Forms $dataVehicle $vehicle null)
  646.     {
  647.         $queryBuilder null;
  648.         if ($vehicle !== null) {
  649.             $data->setVehicle($vehicle);
  650.             $queryBuilder $this->em->getRepository(Vehicle::class)->createQueryBuilder('v')
  651.                 ->where('v.id = :vehicle')
  652.                 ->setParameter('vehicle'$vehicle);
  653.         }
  654.         return $this->coreFactory->create(OrderVehicleType::class, $data, [
  655.             'translator' => $this->translator,
  656.             'query_builder' => $queryBuilder,
  657.             'ga_events' => [
  658.                 'event_category' => 'car-order',
  659.                 'event_label' => 'order-car',
  660.             ]
  661.         ]);
  662.     }
  663.     public function subCommissionTechnologyForm(\ImporterBundle\Entity\Forms $data null)
  664.     {
  665.         $data $this->setUserData($data);
  666.         return $this->coreFactory->create(\ImporterBundle\Form\CommissionTechnologyType::class, $data, [
  667.             'translator' => $this->translator
  668.         ]);
  669.     }
  670.     public function subBuyForm(\ImporterBundle\Entity\Forms $data null$vehicle null$variationId null$dealer null)
  671.     {
  672.         $data $this->setUserData($data);
  673.         return $this->coreFactory->create(\ImporterBundle\Form\BuyType::class, $data, [
  674.             'translator' => $this->translator,
  675.             'variationId' => $variationId
  676.         ]);
  677.     }
  678.     public function buySubPartsForm(\ImporterBundle\Entity\Dealer $dealer null\ImporterBundle\Entity\Forms $data null)
  679.     {
  680.         $data $this->setUserData($data);
  681.         return $this->coreFactory->create(\ImporterBundle\Form\BuyPartsType::class, $data, [
  682.             'translator' => $this->translator,
  683.         ]);
  684.     }
  685.     public function subFeedbackQuestionForm(\ImporterBundle\Entity\Forms $data null\ImporterBundle\Entity\Dealer $dealer null$communication false$question false)
  686.     {
  687.         $options = [
  688.             'translator' => $this->translator,
  689.             'default_question' => $question,
  690.         ];
  691.         return $this->coreFactory->create(\ImporterBundle\Form\FeedbackQuestionType::class, $data$options);
  692.     }
  693.     /**
  694.      * @param $question
  695.      * @param null $departmentType
  696.      * @param Forms $data
  697.      * @param Dealer|null $dealer
  698.      * @param bool $communication
  699.      * @return FormInterface
  700.      * @throws NonUniqueResultException
  701.      */
  702.     public function subfbDefQuestionForm($question$departmentType nullForms $data nullDealer $dealer null$communication false$gaEvents null)
  703.     {
  704.         $data $this->setUserData($data);
  705.         if ($departmentType) {
  706.             $department $this->em->getRepository(ViDiDepartment::class)->getByType($departmentType$dealer);
  707.             $data->setDepartment($department);
  708.         }
  709.         $events $gaEvents ?: [
  710.             'event_category' => 'call-question',
  711.             'event_label' => 'ask-question',
  712.         ];
  713.         return $this->coreFactory->create(FeedbackQuestionType::class, $data, [
  714.             'default_question' => $question,
  715.             'departmentType' => $departmentType,
  716.             'translator' => $this->translator,
  717.             'dealer' => $dealer,
  718.             'communication' => $communication,
  719.             'ga_events' => $events
  720.         ]);
  721.     }
  722.     public function subCreditForm(\ImporterBundle\Entity\Forms $data null)
  723.     {
  724.         return $this->coreFactory->create(\ImporterBundle\Form\CreditType::class, $data, [
  725.             'translator' => $this->translator,
  726.         ]);
  727.     }
  728.     public function subInsuranceForm(\ImporterBundle\Entity\Forms $data null)
  729.     {
  730.         return $this->coreFactory->create(InsuranceType::class, $data, [
  731.             'translator' => $this->translator,
  732.         ]);
  733.     }
  734.     public function subTestDriveForm(\ImporterBundle\Entity\Forms $data null)
  735.     {
  736.         return $this->coreFactory->create(\ImporterBundle\Form\TestDriveType::class, $data, [
  737.             'translator' => $this->translator,
  738.         ]);
  739.     }
  740.     public function orderGoodsForm(Dealer $dealer nullForms $data null)
  741.     {
  742.         $data $this->setUserData($data);
  743.         return $this->coreFactory->create(OrderGoodsType::class, $data, [
  744.             'translator' => $this->translator
  745.         ]);
  746.     }
  747.     public function motoTestDriveForm(Dealer $dealer nullForms $data null$vehicle null)
  748.     {
  749.         $data $this->setUserData($data);
  750.         return $this->coreFactory->create(MotoTestDriveType::class, $data, [
  751.             'translator' => $this->translator,
  752.             'vehicle' => $vehicle,
  753.         ]);
  754.     }
  755.     /**
  756.      * @param Dealer|null $dealer
  757.      * @param Forms|null $data
  758.      * @param array|null $vehicle
  759.      * @param array|null $testDrive
  760.      * @return FormInterface
  761.      */
  762.     public function WaterTestDriveForm(Dealer $dealer nullForms $data null$vehicle null$test_drive null)
  763.     {
  764.         $data $this->setUserData($data);
  765.         return $this->coreFactory->create(WaterTestDriveType::class, $data, [
  766.             'translator' => $this->translator,
  767.             'vehicle' => $vehicle,
  768.             'test_drive' => $test_drive,
  769.         ]);
  770.     }
  771.     public function oilTOForm(Forms $data null)
  772.     {
  773.         return $this->coreFactory->create(OilTOType::class, $data, [
  774.             'translator' => $this->translator,
  775.         ]);
  776.     }
  777.     public function serviceCampaingCarForm(Forms $data null)
  778.     {
  779.         $data $this->setUserData($data);
  780.         return $this->coreFactory->create(ServiceCampaingCarType::class, $data, [
  781.             'translator' => $this->translator,
  782.         ]);
  783.     }
  784.     public function saveDesignForm(Forms $data nullDealer $dealer nullVehicle $vehicle null)
  785.     {
  786.         $data $this->setUserData($data);
  787.         if ($vehicle instanceof Vehicle) {
  788.             $data->setVehicle($vehicle);
  789.         }
  790.         return $this->coreFactory->create(SaveDesignType::class, $data, [
  791.             'translator' => $this->translator,
  792.         ]);
  793.     }
  794.     public function sendQuestionForm(Forms $data nullDealer $dealer null$select_dealer null$default_question null)
  795.     {
  796.         $data $this->setUserData($data);
  797.         return $this->coreFactory->create(SendQuestionType::class, $data, [
  798.             'translator' => $this->translator,
  799.             'select_dealer' => $select_dealer,
  800.             'default_question' => $default_question,
  801.         ]);
  802.     }
  803.     public function onlineServiceRegistrationForm(Forms $data nullDealer $dealer null$select_dealer null)
  804.     {
  805.         $data $this->setUserData($data);
  806.         return $this->coreFactory->create(OnlineServiceRegistrationType::class, $data, [
  807.             'translator' => $this->translator,
  808.             'select_dealer' => $select_dealer,
  809.         ]);
  810.     }
  811.     public function withoutPayOrderForm(Forms $data nullDealer $dealer nullUser $user null$select_dealer null)
  812.     {
  813.         $data $this->setUserData($data);
  814.         return $this->coreFactory->create(WithoutPayOrderType::class, $data, [
  815.             'translator' => $this->translator,
  816.             'select_dealer' => $select_dealer,
  817.         ]);
  818.     }
  819.     public function callMeForm(Forms $data nullbool $isIncludeDealer falsebool $isIncludeWhatsApp false)
  820.     {
  821.         $data $this->setUserData($data);
  822.         return $this->coreFactory->create(CallMeType::class, $data, [
  823.             'translator' => $this->translator,
  824.             'is_include_whatsapp' => $isIncludeWhatsApp,
  825.             'is_include_dealer' => $isIncludeDealer
  826.         ]);
  827.     }
  828.     public function callMeFormWithDealers(Forms $data null$dealers = [])
  829.     {
  830.         $data $this->setUserData($data);
  831.         return $this->coreFactory->create(CallMeWithDealersType::class, $data, [
  832.             'translator' => $this->translator,
  833.             'dealers' => $dealers,
  834.         ]);
  835.     }
  836.     public function tiresHotelForm(Forms $data null$dealers = [])
  837.     {
  838.         $data $this->setUserData($data);
  839.         return $this->coreFactory->create(TiresHotelType::class, $data, [
  840.             'translator' => $this->translator,
  841.             'dealers' => $dealers,
  842.         ]);
  843.     }
  844.     public function serviceConsultForm(Forms $data null$services = [], $select_service null)
  845.     {
  846.         $data $this->setUserData($data);
  847.         return $this->coreFactory->create(ServiceConsultType::class, $data, [
  848.             'translator' => $this->translator,
  849.             'services' => $services,
  850.             'select_service' => $select_service
  851.         ]);
  852.     }
  853. }