src/DcSiteBundle/Controller/InsuranceController.php line 40

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Brand;
  6. use CoreBundle\Entity\Dealer;
  7. use CoreBundle\Entity\Forms;
  8. use CoreBundle\Entity\Vehicles\Equipment;
  9. use CoreBundle\Entity\Vehicles\Vehicle;
  10. use CoreBundle\Entity\Vehicles\VehicleItem;
  11. use CoreBundle\Factory\Vehicle as VehicleFactory;
  12. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  13. use CoreBundle\Model\DealerModel;
  14. use CoreBundle\Model\Vehicles\Repository;
  15. use CoreBundle\Services\MediaExtensionVidi;
  16. use DateTime;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use InsuranceBundle\Form\OrderInsuranceType;
  19. use InsuranceBundle\Model\Program;
  20. use PortalBundle\Model\SeoMetaTag;
  21. use Symfony\Component\Filesystem\Filesystem;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\RequestStack;
  25. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  26. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  27. use Symfony\Component\Routing\RouterInterface;
  28. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  29. use Twig\Environment;
  30. class InsuranceController extends BaseDcController
  31. {
  32.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  33.     {
  34.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  35.     }
  36.     public function loadOptions(Program $programModel): JsonResponse
  37.     {
  38.         $options $programModel->buildCascoOption();
  39.         $options['coefficient'] = [
  40.             'baseType' => Program::BASE_COEFFICIENT_TYPE,
  41.             'listType' => Program::LIST_COEFFICIENT_TYPE,
  42.             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
  43.             'privacyUrl' => $this->router->generate('portal_privacy_policy'),
  44.         ];
  45.         return new JsonResponse($options);
  46.     }
  47.     public function init(Request $request): JsonResponse
  48.     {
  49.         try {
  50.             $dealer $this->getDealer();
  51.             $dealerId $dealer->getId();
  52.         } catch (NotFoundHttpException $e) {
  53.             $dealerId false;
  54.         }
  55.         $brandsArray = [];
  56.         if (!$dealerId) {
  57.             $mediaTwig $this->mediaExtensionVidi;
  58.             $brands $this->em->getRepository(Brand::class)->getAvailBrandsInstance(truefalsetrue);
  59.             /**
  60.              * @var int $key
  61.              * @var Brand $brand
  62.              */
  63.             foreach ($brands as $key => $brand) {
  64.                 $brandsArray[$key] = [
  65.                     'id' => $brand->getId(),
  66.                     'name' => $brand->getName(),
  67.                     'image' => $mediaTwig->getPath($brand->getLogo(), 'menu'),
  68.                 ];
  69.                 if (count($brand->getDealer()) == 1) {
  70.                     $brandsArray[$key]['dealerId'] = $brand->getDealer()->first()->getId();
  71.                 } else {
  72.                     /** @var Dealer $dealer */
  73.                     foreach ($brand->getDealer() as $dealer) {
  74.                         $brandsArray[$key]['dealers'][] = [
  75.                             'id' => $dealer->getId(),
  76.                             'title' => $dealer->getNameByLocale($request->getLocale()),
  77.                             'adres' => $dealer->getAddressByLocale($request->getLocale()),
  78.                         ];
  79.                     }
  80.                 }
  81.             }
  82.         }
  83.         return new JsonResponse(['success' => true'dealer' => $dealerId'brands' => $brandsArray]);
  84.     }
  85.     public function initByDealer(Request $Request): JsonResponse
  86.     {
  87.         $dealerId $Request->request->get('dealer');
  88.         if ($dealerId) {
  89.             $Dealer $this->em->getRepository(Dealer::class)->find($dealerId);
  90.         } else {
  91.             $Dealer $this->getDealer();
  92.         }
  93.         $carsArray = [];
  94.         if ($Dealer->getId() == DealerModel::SECOND_HAND_DEALER) {
  95.             $vehicles $this->vehicleRepository->getUsedByDealer($Dealer);
  96.         } else {
  97.             $vehicles $this->vehicleRepository->getNewByDealer($Dealer);
  98.         }
  99.         $withoutGroup $Request->request->get('withoutGroup');
  100.         /** @var Vehicle $vehicle */
  101.         foreach ($vehicles as $vehicle) {
  102.             $vehicleModel $this->vehicleFactory->createByEntity($vehicle);
  103.             if (!$vehicleModel || $vehicleModel->isSold()) {
  104.                 continue;
  105.             }
  106.             if (!$withoutGroup && !$vehicleModel->getCategory()) {
  107.                 continue;
  108.             }
  109.             $groupId $withoutGroup 'all' $vehicleModel->getCategory()->getId();
  110.             if (!isset($carsArray[$groupId])) {
  111.                 $title $withoutGroup 'all' $vehicleModel->getCategory()->getTitle($Request->getLocale());
  112.                 $carsArray[$groupId] = [
  113.                     'id' => $groupId,
  114.                     'title' => $title,
  115.                     'cars' => [],
  116.                 ];
  117.             }
  118.             $carItem = [
  119.                 'image' => $vehicleModel->getPreviewPath('reference'),
  120.                 'image_webp' => $vehicleModel->getPreviewPathWebp('reference'),
  121.                 'carName' => $vehicleModel->isUsed() ? $vehicleModel->getFullName() : $vehicleModel->getModelName(),
  122.                 'priceFrom' => $vehicleModel->price(),
  123.                 'position' => $vehicleModel->getPosition(),
  124.                 'price' => $vehicleModel->price(),
  125.                 'isUsed' => $vehicleModel->isUsed(),
  126.                 'id' => $vehicleModel->getVehicleId(),
  127.                 'equipments' => []
  128.             ];
  129.             /** @var Equipment $equipment */
  130.             foreach ($vehicleModel->getAvailEquipments() as $equipment) {
  131.                 $equipmentItem = [
  132.                     'id' => $equipment->getId(),
  133.                     'title' => $equipment->getTitle(),
  134.                     'priceFrom' => $equipment->minPrice(),
  135.                     'variations' => []
  136.                 ];
  137.                 /** @var VehicleItem $item */
  138.                 foreach ($equipment->getVehicleItems() as $item) {
  139.                     if (!$item->getState()) {
  140.                         continue;
  141.                     }
  142.                     if ($item->calcPrice() == 0) {
  143.                         continue;
  144.                     }
  145.                     $vehicleModel $this->vehicleFactory->createByVehicleItem($item);
  146.                     $transmission $vehicleModel->getTransmissionTypeName($Request->getLocale());
  147.                     $driveUnitType $vehicleModel->getDriveUnitTypeName($Request->getLocale());
  148.                     $equipmentItem['variations'][] = [
  149.                         'id' => $item->getId(),
  150.                         'price' => $vehicleModel->price(),
  151.                         'fuel' => $vehicleModel->getFuelTypeName($Request->getLocale()),
  152.                         'drive' => $driveUnitType,
  153.                         'body' => $vehicleModel->getBodyTypeName($Request->getLocale()),
  154.                         'transmission' => $transmission,
  155.                         'transmission_stages' => $vehicleModel->getTransmissionStages($Request->getLocale()),
  156.                     ];
  157.                 }
  158.                 if (count($equipmentItem['variations'])) {
  159.                     $carItem['equipments'][] = $equipmentItem;
  160.                 }
  161.             }
  162.             if (count($carItem['equipments'])) {
  163.                 $carsArray[$groupId]['cars'][] = $carItem;
  164.             }
  165.         }
  166.         foreach ($carsArray as $group => $item) {
  167.             if (count($item['cars']) == 0) {
  168.                 unset($carsArray[$group]);
  169.                 continue;
  170.             }
  171.             usort($carsArray[$group]['cars'], fn($a$b) => $a['position'] <=> $b['position']);
  172.         }
  173.         return new JsonResponse([
  174.             'cars' => $carsArray
  175.         ]);
  176.     }
  177.     public function saveForm(Request $RequestTokenStorageInterface $tokenStorage): JsonResponse
  178.     {
  179.         $id $Request->request->get('car');
  180.         $Vehicle false;
  181.         if ($id) {
  182.             $Vehicle $this->vehicleFactory->createById($id);
  183.         }
  184.         $dealerId $Request->request->get('dealer');
  185.         if ($dealerId) {
  186.             $Dealer $this->em->getRepository(Dealer::class)->find($dealerId);
  187.         } else {
  188.             $Dealer $this->getDealer();
  189.         }
  190.         $Token $tokenStorage->getToken();
  191.         $User $Token && $Token->getUser() != 'anon.' $Token->getUser() : null;
  192.         $orderInsurance = new Forms();
  193.         $orderInsurance->setUser($User);
  194.         $orderInsurance->setDateCreate(new DateTime());
  195.         $orderInsurance->setType(FormManager::TYPE_ORDER_INSURANCE_FORM);
  196.         $orderInsurance->setName($Request->request->get('name'));
  197.         $orderInsurance->setEmail($Request->request->get('email'));
  198.         $orderInsurance->setPhone($Request->request->get('phone'));
  199.         $orderInsurance->setVehicle($Vehicle->getVehicleEntity());
  200.         $orderInsurance->setDealer($Dealer);
  201.         $params json_encode([
  202.             'options' => $Request->request->get('options'),
  203.             'price' => $Request->request->get('price'),
  204.             'amount' => $Request->request->get('amount'),
  205.             'model' => $Vehicle->getFullName(),
  206.             'insuranceType' => OrderInsuranceType::CASCO_ORDER_INSURANCE,
  207.             'message' => $Request->request->get('message')
  208.         ]);
  209.         $orderInsurance->setData($params);
  210.         $this->em->persist($orderInsurance);
  211.         $this->em->flush();
  212.         return new JsonResponse(['success' => true]);
  213.     }
  214. }