src/CoreBundle/Component/CoreFormFactory.php line 179

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