src/PortalBundle/Controller/FinanceController.php line 62

Open in your IDE?
  1. <?php
  2. namespace PortalBundle\Controller;
  3. use AutomarketBundle\Component\EstimateCaptcha;
  4. use CoreBundle\Component\CoreFormFactory;
  5. use CoreBundle\Entity\Dealer;
  6. use CoreBundle\Entity\Vehicles\CharacteristicValue;
  7. use CoreBundle\Entity\Vehicles\RecommendGroup;
  8. use CoreBundle\Entity\Vehicles\Vehicle;
  9. use CoreBundle\Model\Vehicles\Repository;
  10. use DcSiteBundle\Model\CreditModel;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use PortalBundle\Model\Catalog;
  13. use CoreBundle\Entity\Forms;
  14. use InsuranceBundle\Model\Program;
  15. use PortalBundle\Services\FinanceService;
  16. use PortalBundle\Services\ServiceService;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  23. use Symfony\Component\Routing\RouterInterface;
  24. class FinanceController extends BaseController
  25. {
  26.     public function __construct(CoreFormFactory $coreFormFactoryRequestStack $requestStackRouterInterface $router,
  27.                                 Repository      $vehicleRepositoryServiceService $serviceService)
  28.     {
  29.         parent::__construct($coreFormFactory$requestStack$router$vehicleRepository$serviceService);
  30.     }
  31.     public function tradein(): Response
  32.     {
  33.         return $this->basePortalRender('@Portal/Finance/tradein.html.twig');
  34.     }
  35.     public function credit(): Response
  36.     {
  37.         return $this->basePortalRender('@Portal/Finance/new-credit.html.twig', [
  38.             'callMeForm' => $this->CoreFormFactory()
  39.                 ->callMeForm(new Forms(), true)
  40.                 ->createView(),
  41.         ]);
  42.     }
  43.     public function insurance(EstimateCaptcha $estimateCaptcha): Response
  44.     {
  45.         return $this->basePortalRender('@Portal/Finance/insurance.html.twig', [
  46.             'token' => $estimateCaptcha->generateToken(),
  47.             'baseType' => Program::BASE_COEFFICIENT_TYPE,
  48.             'listType' => Program::LIST_COEFFICIENT_TYPE,
  49.             'optionType' => Program::OPTION_COEFFICIENT_TYPE,
  50.         ]);
  51.     }
  52.     public function leasing(SessionInterface $session): Response
  53.     {
  54.         $token md5(time() . 'bftsaltdre45leasing');
  55.         $session->set('leasing_form_token'$token);
  56.         return $this->basePortalRender('@Portal/Finance/leasing.html.twig', [
  57.             'leasingCalculatorForm' => $this->CoreFormFactory()->leasingForm()->createView(),
  58.             'formToken' => $token,
  59.         ]);
  60.     }
  61.     public function financeHelp(): Response
  62.     {
  63.         return $this->basePortalRender('@Portal/Finance/help.html.twig');
  64.     }
  65.     public function corporate(): Response
  66.     {
  67.         return $this->basePortalRender('@Portal/Finance/corporate.html.twig');
  68.     }
  69.     public function extendedWarranty(): Response
  70.     {
  71.         return $this->basePortalRender('@Portal/Finance/extended-warranty.html.twig', [
  72.             'warrantyForm' => $this->CoreFormFactory()->insuranceExtendForm()->createView(),
  73.         ]);
  74.     }
  75.     public function business(Request $requestEntityManagerInterface $emCatalog $catalogSessionInterface $session\CoreBundle\Factory\Vehicle $vehicleFactory)
  76.     {
  77.         $dealers $em->getRepository(Dealer::class)->findBy([], ['position' => 'ASC']);
  78.         $logos = [];
  79.         $brands = [];
  80.         foreach ($dealers as $dealer) {
  81.             $Brand $dealer->getBrand();
  82.             if (!$Brand or $Brand->getId() == 67) {
  83.                 continue;
  84.             }
  85.             if (isset($brands[$Brand->getId()])) {
  86.                 continue;
  87.             }
  88.             $brands[$Brand->getId()] = $Brand->getId();
  89.             $logos[] = [
  90.                 'image' => $Brand->getLogo(),
  91.                 'name' => $Brand->getName(),
  92.             ];
  93.         }
  94.         $vehicles = [];
  95.         //TODO remove magic numbers
  96.         $toSearch = [
  97.             'pasbus' => ['type' => 'bus''id' => 18],
  98.             'frbus' => ['type' => 'truck''id' => 169],
  99.             'pickup' => ['type' => 'car''id' => 24],
  100.         ];
  101.         $token md5(time() . 'bftsaltdre45');
  102.         $session->set('business_form_token'$token);
  103.         foreach ($toSearch as $key => $sParams) {
  104.             $busCharValue =
  105.                 $em->getRepository(CharacteristicValue::class)->find($sParams['id']);
  106.             if (!$busCharValue) {
  107.                 $vehicles['lcv'][$key] = [];
  108.                 continue;
  109.             }
  110.             $params = [
  111.                 'dynamic' => [
  112.                     $busCharValue->getCharacteristic()->getId() => [$busCharValue->getUrl() => 1],
  113.                 ],
  114.             ];
  115.             //TODO remove magic numbers
  116.             $searchResult $catalog->findByParams(['state' => 'new''type' => $sParams['type']], $params32);
  117.             if (!$searchResult) {
  118.                 $vehicles['lcv'][$key] = [];
  119.                 continue;
  120.             }
  121.             foreach ($searchResult['data'] as $veh) {
  122.                 $model $vehicleFactory->createByVehicleItem($veh[0]);
  123.                 if (!$model) {
  124.                     continue;
  125.                 }
  126.                 $vehicles['lcv'][$key][] = $model;
  127.             }
  128.             if (!isset($vehicles['lcv'][$key])) {
  129.                 $vehicles['lcv'][$key] = [];
  130.             }
  131.         }
  132.         //TODO remove magic numbers
  133.         $trucks $catalog->findByParams(['state' => 'new''type' => 'truck'], [], 32);
  134.         //TODO remove magic numbers
  135.         foreach ($trucks['data'] as $veh) {
  136.             $model $vehicleFactory->createByVehicleItem($veh[0]);
  137.             if (!$model || $model->getBodyType()->getId() == 169) {
  138.                 continue;
  139.             }
  140.             $vehicles['lcv']['truck'][] = $model;
  141.         }
  142.         $sortOrder $request->get('sortOrder');
  143.         if ($sortOrder) {
  144.             switch ($sortOrder) {
  145.                 case 'capacity-ASC':
  146.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getLoadCapacity('ua') < $b->getLoadCapacity('ua') ? -1);
  147.                     break;
  148.                 case 'capacity-DESC':
  149.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getLoadCapacity('ua') > $b->getLoadCapacity('ua') ? -1);
  150.                     break;
  151.                 case 'length-ASC':
  152.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getBodyLength('ua') < $b->getBodyLength('ua') ? -1);
  153.                     break;
  154.                 case 'length-DESC':
  155.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getBodyLength('ua') > $b->getBodyLength('ua') ? -1);
  156.                     break;
  157.                 case 'height-ASC':
  158.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getBodyHeight('ua') < $b->getBodyHeight('ua') ? -1);
  159.                     break;
  160.                 case 'height-DESC':
  161.                     usort($vehicles['lcv']['truck'], fn($a$b) => $a->getBodyHeight('ua') > $b->getBodyHeight('ua') ? -1);
  162.                     break;
  163.             }
  164.         }
  165.         //TODO remove magic numbers
  166.         $vehiclesM $em->getRepository(Vehicle::class)
  167.                 ->findBy(['state' => 1'dealer' => 16'is_used' => 0'is_delete' => [0null]]);
  168.         $result = [
  169.             'yamaha' => [],
  170.             'business' => [],
  171.             'top' => [],
  172.         ];
  173.         foreach ($vehiclesM as $vehicle) {
  174.             $model $vehicleFactory->createByEntity($vehicle);
  175.             if (!$model) {
  176.                 continue;
  177.             }
  178.             $result['yamaha'][] = $model;
  179.         }
  180.         //TODO remove magic numbers
  181.         $topGroup $em->getRepository(RecommendGroup::class)->find(21);
  182.         if ($topGroup) {
  183.             foreach ($topGroup->getVehicles() as $vehicle) {
  184.                 $model $vehicleFactory->createByEntity($vehicle);
  185.                 if (!$model) {
  186.                     continue;
  187.                 }
  188.                 $result['top'][] = $model;
  189.             }
  190.         }
  191.         //TODO remove magic numbers
  192.         $businessGroup $em->getRepository(RecommendGroup::class)->find(20);
  193.         if ($businessGroup) {
  194.             foreach ($businessGroup->getVehicles() as $vehicle) {
  195.                 $model $vehicleFactory->createByEntity($vehicle);
  196.                 if (!$model) {
  197.                     continue;
  198.                 }
  199.                 $result['business'][] = $model;
  200.             }
  201.         }
  202.         return $this->basePortalRender('@Portal/Finance/business.html.twig', [
  203.             'logos' => $logos,
  204.             'formToken' => $token,
  205.             'allVehicles' => $vehicles,
  206.             'vehicles' => $result,
  207.             'baseParams' => [
  208.                 'state' => 'new',
  209.                 'type' => 'truck',
  210.             ],
  211.             'sortOrder' => $sortOrder,
  212.         ]);
  213.     }
  214.     public function creditInit(Request $request\CoreBundle\Factory\Vehicle $vehicleFactoryEntityManagerInterface $em,
  215.                                CreditModel $creditModel): JsonResponse
  216.     {
  217.         $vehicleId $request->request->get('vehicleId');
  218.         if (!$vehicleId) {
  219.             throw new NotFoundHttpException();
  220.         }
  221.         $vehicle $em->getRepository(Vehicle::class)->find($vehicleId);
  222.         $vehicleModel $vehicleFactory->createByEntity($vehicle);
  223.         $programs $creditModel->findCreditInDb($vehicleModel->getDealer(), $vehicleModel);
  224.         return $this->json($programs);
  225.     }
  226.     public function creditProgramByFirstPayment(Request $requestFinanceService $financeService): JsonResponse
  227.     {
  228.         $firstPayment $request->request->get('firstPayment');
  229.         $monthPayment $request->request->get('monthPayment');
  230.         $term $request->request->get('term');
  231.         if (!$firstPayment || !$monthPayment || !$term) {
  232.             throw new NotFoundHttpException();
  233.         }
  234.         $responseData $financeService->creditProgramWihVehicle($firstPayment$monthPayment$term$request->getLocale());
  235.         return $this->json([
  236.             'success' => true,
  237.             'vehicles' => $responseData,
  238.         ]);
  239.     }
  240.     public function creditProgramVehicleWithMinMaxPrice(Request $requestFinanceService $financeService): JsonResponse
  241.     {
  242.         $isUsed = (bool)($request->get('isUsed') === 'true');
  243.         $responseData $financeService->creditProgramWihVehicleByMinPrice($isUsed$request->getLocale());
  244.         if ($isUsed){
  245.             $responseDataNew $financeService->creditProgramWihVehicleByMinPrice(false$request->getLocale());
  246.             if (!empty($responseDataNew)) {
  247.                 if ((int)str_replace(' ''',$responseDataNew['max']['price']) > (int)str_replace(' ''',$responseData['max']['price'])) {
  248.                     $responseData['max'] = $responseDataNew['max'];
  249.                 }
  250.                 if ((int)str_replace(' ''',$responseDataNew['min']['price']) < (int)str_replace(' ''',$responseData['min']['price'])) {
  251.                     $responseData['min'] = $responseDataNew['min'];
  252.                 }
  253.             }
  254.         }
  255.         return $this->json([
  256.             'success' => true,
  257.             'vehicleWithMinPrice' => $responseData['min'],
  258.             'vehicleWithMaxPrice' => $responseData['max'],
  259.         ]);
  260.     }
  261.     public function getCrmDataByUUID(Request $requestFinanceService $financeService): JsonResponse
  262.     {
  263.         $uuid $request->get('uuid');
  264.         if (!isset($uuid) || empty($uuid)){
  265.             throw new NotFoundHttpException();
  266.         }
  267.         $crmLead $financeService->getCrmLeadByUUID($uuid);
  268.         $isSend $crmLead $crmLead->getIsSend() : false;
  269.         return $this->json(['isSend' => $isSend]);
  270.     }
  271.     public function saveCreditCalculationUserData(Request $requestFinanceService $financeService): JsonResponse
  272.     {
  273.         $calculationId $financeService->saveCreditData($request->request->all());
  274.         return $this->json([
  275.             'success' => true,
  276.             'calculationId' => $calculationId,
  277.         ]);
  278.     }
  279.     public function saveCreditPageReview(Request $requestFinanceService $financeService): JsonResponse
  280.     {
  281.         $financeService->saveReview($request->request->all());
  282.         return $this->json([
  283.             'success' => true
  284.         ]);
  285.     }
  286. }