src/CoreBundle/Repository/Vehicles/VehicleRepository.php line 77

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\Repository\Vehicles;
  3. use DateTime;
  4. use CoreBundle\Entity\Brand;
  5. use CoreBundle\Entity\Dealer;
  6. use CoreBundle\Entity\Model;
  7. use CoreBundle\Entity\Vehicles\Characteristic;
  8. use CoreBundle\Model\DealerModel;
  9. use CoreBundle\Model\Vehicles\VehicleType;
  10. use Doctrine\ORM\EntityRepository;
  11. use Doctrine\ORM\Query\Expr\Join;
  12. class VehicleRepository extends EntityRepository
  13. {
  14.     public const IS_OFFICIAL = [8153332];
  15.     public function getVehiclesQueryByCharacteristic(Dealer $dealerCharacteristic $characteristic$charValue)
  16.     {
  17.         return $this->createQueryBuilder('v')
  18.             ->select('v')
  19.             ->join('v.vehicle_items''vi'Join::WITH'vi.state = 1')
  20.             ->join('vi.variation''variation')
  21.             ->join('variation.characteristics''vc'Join::WITH'vc.characteristic = :characteristic AND vc.characteristic_value = :value')
  22.             ->setParameter('characteristic'$characteristic)
  23.             ->setParameter('value'$charValue)
  24.             ->where('v.state = 1')
  25.             ->andWhere('v.dealer = :dealer')
  26.             ->andWhere('v.is_used = 0')
  27.             ->setParameter('dealer'$dealer);
  28.     }
  29.     public function getVehiclesByCharacteristic(Dealer $dealerCharacteristic $characteristic$charValue)
  30.     {
  31.         return $this->getVehiclesQueryByCharacteristic($dealer$characteristic$charValue)->getQuery()->getResult();
  32.     }
  33.     public function getVehiclesByModel(Dealer $dealer$model)
  34.     {
  35.         return $this->createQueryBuilder('v')
  36.             ->join('v.model''m')
  37.             ->where('m.title = :title')
  38.             ->andWhere('v.state = 1')
  39.             ->andWhere('v.dealer = :dealer')
  40.             ->setParameter('title'$model)
  41.             ->setParameter('dealer'$dealer)
  42.             ->getQuery()->getResult();
  43.     }
  44.     public function getNewByDealer(Dealer $dealer null$vehicleTypes = [], $sortByPosition null)
  45.     {
  46.         $query $this->createQueryBuilder('v')
  47.             ->select('v,i,vi,m,e')
  48.             ->join('v.preview''i')
  49.             ->join('v.vehicle_items''vi')
  50.             ->join('v.model''m')
  51.             ->join('v.equipments''e')
  52.             ->where('v.state = 1')
  53.             ->andWhere('v.is_used = 0')
  54.             ->andWhere('v.is_delete IN (:isDel)')
  55.             ->setParameter('isDel', [0,null]);
  56.         if (count($vehicleTypes)) {
  57.             $query->andWhere('v.vehicle_type IN (:types)')
  58.                 ->setParameter('types'$vehicleTypes);
  59.         }
  60.         if($dealer) {
  61.             $query->andWhere('v.dealer = :dealer')->setParameter('dealer',$dealer );
  62.         }
  63.         if($sortByPosition) {
  64.             $query->orderBy('v.position''ASC');
  65.         }
  66.         return $query->getQuery()->getResult();
  67.     }
  68.     public function getOneLatestByDealer(Dealer $dealer)
  69.     {
  70.         $query $this->createQueryBuilder('v')
  71.             ->select('v,i,vi,e')
  72.             ->join('v.preview''i')
  73.             ->join('v.vehicle_items''vi')
  74.             ->join('v.equipments''e')
  75.             ->where('v.state = 1')
  76.             ->andWhere('v.is_used = 0')
  77.             ->andWhere('v.is_delete = 0')
  78.             ->andWhere('v.dealer = :dealer')->setParameter('dealer',$dealer )
  79.             ->orderBy('v.date_create''DESC')
  80.             ->setFirstResult(0)->setMaxResults(1);
  81.         return $query->getQuery()->getSingleResult();
  82.     }
  83.     public function searchCar($string)
  84.     {
  85.         return $this->createQueryBuilder('v')
  86.             ->join('v.vehicle_items''vi'Join::WITH'vi.state = 1')
  87.             ->join('v.model''m')
  88.             ->join('m.brand''b')
  89.             ->join('vi.variation''variation')
  90.             ->join('variation.characteristics''vc')
  91.             ->join('vc.characteristic_value''cv')
  92.             ->where('v.state = 1')
  93.             ->andWhere('b.name like :string OR m.title like :string OR cv.value_ru like :string OR cv.value_ua like :string')
  94.             ->setParameter('string''%' $string '%')
  95.             ->getQuery()->getResult();
  96.     }
  97.     public function getUsedVehicle(Dealer $dealerBrand $brand$url$vehicleType false)
  98.     {
  99.         $query $this->createQueryBuilder('v')
  100.             ->join('v.dealer''d')
  101.             ->join('v.vehicle_items''vi'Join::WITH'vi.sold = 0')
  102.             ->where('v.is_used = 1')
  103.             ->andWhere('v.state = 1')
  104.             ->andWhere('v.is_not_filled = 0')
  105.             ->andWhere('v.is_delete != 1')
  106.             ->andWhere('v.url = :url')->setParameter('url'$url);
  107.         $query->leftJoin('v.model''m')
  108.             ->andWhere('v.dealer = :dealer OR m.brand = :brand')
  109.             ->setParameter('brand'$brand)
  110.             ->setParameter('dealer'$dealer);
  111.         if (in_array($dealer->getId(), self::IS_OFFICIAL)) {
  112.             $query->andWhere('vi.official_car > 0');
  113.         }
  114.         if ($vehicleType) {
  115.             $query->andWhere('v.vehicle_type = :type')
  116.                 ->setParameter('type'$vehicleType);
  117.         }
  118.         return $query->getQuery()->getOneOrNullResult();
  119.     }
  120.     public function getUsedVehicles(Dealer $dealer$byBrand = [], $vehicleType falseDateTime $date null)
  121.     {
  122.         $query $this->createQueryBuilder('v')
  123.             ->join('v.dealer''d')
  124.             ->join('v.vehicle_items''vi'Join::WITH'vi.sold = 0')
  125.             ->where('v.is_used = 1')
  126.             ->andWhere('v.state = 1')
  127.             ->andWhere('v.is_not_filled = 0')
  128.             ->andWhere('v.is_delete != 1');
  129.         $query->leftJoin('v.model''m')
  130.             ->andWhere('v.dealer = :dealer OR m.brand IN (:brand)')
  131.             ->setParameter('brand'$byBrand)
  132.             ->setParameter('dealer'$dealer);
  133.         if (in_array($dealer->getId(), self::IS_OFFICIAL)) {
  134.             $query->andWhere('vi.official_car > 0');
  135.         }
  136.         if ($date){
  137.             $query->andWhere('v.date_create BETWEEN :date AND :now')
  138.                 ->setParameter('date'$date'datetime')
  139.                 ->setParameter('now', new DateTime('now'), 'datetime');
  140.         }
  141.         if ($vehicleType) {
  142.             $query->andWhere('v.vehicle_type = :type')
  143.                 ->setParameter('type'$vehicleType);
  144.         }
  145.         return $query->getQuery()->getResult();
  146.     }
  147.     public function getUsedVehicleByModel(Model $model$limit)
  148.     {
  149.         $query $this->createQueryBuilder('v')
  150.             ->join('v.vehicle_items''vi'Join::WITH'vi.sold = 0')
  151.             ->where('v.is_used = 1')
  152.             ->andWhere('v.state = 1')
  153.             ->andWhere('v.is_not_filled = 0')
  154.             ->andWhere('v.is_delete != 1')
  155.             ->andWhere('v.model = :model')->setParameter('model'$model);
  156.         if ($limit) {
  157.             $query->setFirstResult(0)->setMaxResults($limit);
  158.         }
  159.         return $query->getQuery()->getResult();
  160.     }
  161.     public function getUsedVehicleByBrand(Brand $brand$vehicleTypeId$limit)
  162.     {
  163.         $query $this->createQueryBuilder('v')
  164.             ->innerJoin('v.vehicle_items''vi'Join::WITH'vi.sold = 0')
  165.             ->innerJoin('v.model','m',Join::WITH,'m.brand = :brand')->setParameter('brand'$brand)
  166.             ->where('v.is_used = 1')
  167.             ->andWhere('v.state = 1')
  168.             ->andWhere('v.is_not_filled = 0')
  169.             ->andWhere('v.is_delete != 1')
  170.             ->andWhere('v.vehicle_type = :vehicleType')->setParameter('vehicleType'$vehicleTypeId);
  171.         if ($limit) {
  172.             $query->setFirstResult(0)->setMaxResults($limit);
  173.         }
  174.         return $query->getQuery()->getResult();
  175.     }
  176.     public function getUsedVehicleByDealerModel(Dealer $dealerModel $model$limit)
  177.     {
  178.         $query $this->createQueryBuilder('v')
  179.             ->join('v.vehicle_items''vi'Join::WITH'vi.sold = 0')
  180.             ->where('v.is_used = 1')
  181.             ->andWhere('v.state = 1')
  182.             ->andWhere('v.is_not_filled = 0')
  183.             ->andWhere('v.is_delete != 1')
  184.             ->andWhere('v.dealer = :dealer')->setParameter('dealer'$dealer)
  185.             ->andWhere('v.model = :model')->setParameter('model'$model);
  186.         if ($limit) {
  187.             $query->setFirstResult(0)->setMaxResults($limit);
  188.         }
  189.         return $query->getQuery()->getResult();
  190.     }
  191.     public function getUsedByModel(Dealer $dealer$model)
  192.     {
  193.         return $this->findOneBy([
  194.             'dealer' => $dealer,
  195.             'model' => $model,
  196.             'state' => 1,
  197.             'is_used' => 1,
  198.         ]);
  199.     }
  200.     public function findDeletedWithMedia()
  201.     {
  202.         return $this->createQueryBuilder('c')
  203.             ->where('c.preview is not null')
  204.             ->andWhere('c.gallery is not null')
  205.             ->andWhere('c.is_delete = 1')
  206.             ->getQuery()
  207.             ->getResult();
  208.     }
  209.     public function findVariationByParams($vehicleType null$isUsed false$brandId null$modelId null$characteristicId = [], $characteristicUnique = [], $locale 'ua')
  210.     {
  211.         $query $this->createQueryBuilder('v')
  212.             ->select('b.id as brandId, b.name as brand, m.id as modelId, m.title as model, cv.id as characteristicId, cc.model_unique as characteristicUnique');
  213.         if ($locale == 'ua') {
  214.             $query->addSelect('cv.value_ua as characteristic_value');
  215.         }
  216.         if ($locale == 'ru') {
  217.             $query->addSelect('cv.value_ru as characteristic_value');
  218.         }
  219.         $query->innerJoin('v.vehicle_items''vi'Join::WITH'vi.state = 1')
  220.             ->innerJoin('vi.variation''vr'Join::WITH'vr.state = 1')
  221.             ->innerJoin('vr.characteristics''vc')
  222.             ->innerJoin('vc.characteristic_value''cv')
  223.             ->innerJoin('vc.characteristic''cc')
  224.             ->innerJoin('v.model''m')
  225.             ->innerJoin('m.brand''b')
  226.             ->where('v.state = 1');
  227.         if ($brandId) {
  228.             $query->andWhere('b.id = :brandId')->setParameter('brandId'$brandId);
  229.         }
  230.         if ($modelId) {
  231.             $query->andWhere('m.id = :modelId')->setParameter('modelId'$modelId);
  232.         }
  233.         if ($vehicleType) {
  234.             $query->andWhere('v.vehicle_type = :vehicleType')->setParameter('vehicleType'$vehicleType);
  235.         }
  236.         $query->andWhere('v.is_used = :isUsed')->setParameter('isUsed'$isUsed);
  237. //        dump($characteristicId);exit;
  238. //        if (!empty($characteristicId)) {
  239. //            foreach ($characteristicId as $item) {
  240. //                $query->andWhere(' = :characteristicId')->setParameter('characteristicId', $item);
  241. //            }
  242. //        }
  243. //        if(isset($characteristicId['bodyType']) && isset($characteristicId['fuelType'])){
  244. //            $query->andWhere('vc.characteristic_value = :bodyType OR vc.characteristic_value = :fuelType')
  245. //                ->setParameter('bodyType', $characteristicId['bodyType'])
  246. //                ->setParameter('fuelType', $characteristicId['fuelType']);
  247. //        }elseif (!empty($characteristicId)) {
  248. //            foreach ($characteristicId as $item) {
  249. //                $query->andWhere('vc.characteristic_value = :characteristicId')->setParameter('characteristicId', $item);
  250. //            }
  251. //        }
  252.         if (!empty($characteristicUnique)) {
  253.             $query->andWhere('cc.model_unique in (:model_unique)')->setParameter('model_unique'$characteristicUnique);
  254.         }
  255.         $query->orderBy('brand');
  256.         $query->addOrderBy('model');
  257.         $query->addOrderBy('characteristic_value');
  258.         $query->groupBy('modelId, characteristicId, characteristicUnique');
  259.         return $query->getQuery()->getResult();
  260.     }
  261.     public function getVehicleByCharacteristicId($characteristicId$vehicleType null$isUsed false$limit null)
  262.     {
  263.         $query $this->createQueryBuilder('v')
  264.             ->innerJoin('v.vehicle_items''vi'Join::WITH'vi.state = 1')
  265.             ->innerJoin('vi.variation''vr'Join::WITH'vr.state = 1')
  266.             ->innerJoin('vr.characteristics''vc')
  267.             ->where('v.state = 1')
  268.             ->andWhere('vc.characteristic_value = :characteristicId')
  269.             ->andWhere('vi.sold != 1')
  270.             ->setParameter('characteristicId'$characteristicId)
  271.             ->groupBy('v.id');
  272.         if ($vehicleType) {
  273.             $query->andWhere('v.vehicle_type = :vehicleType')->setParameter('vehicleType'$vehicleType);
  274.         }
  275.         $query->andWhere('v.is_used = :isUsed')->setParameter('isUsed'$isUsed);
  276.         if ($limit) {
  277.            $query->setFirstResult(0)->setMaxResults($limit);
  278.         }
  279.         return $query->getQuery()->getResult();
  280.     }
  281.     public function getVehicleByRecommendGroupUrl($url)
  282.     {
  283.         return $this->createQueryBuilder('ve')
  284.             ->select('ve')
  285.             ->join('ve.recommend_group''rg')
  286.             ->where('ve.state = :state')->setParameter('state'true)
  287.             ->andWhere('ve.is_used = :isUsed')->setParameter('isUsed'false)
  288.             ->andWhere('rg.url = :url')->setParameter('url'$url)
  289.             ->getQuery()
  290.             ->getResult();
  291.     }
  292.     public function getVehicleByUrlCategory(Dealer $dealer null$url null$vehicleTypes = [])
  293.     {
  294.         $query $this->createQueryBuilder('v')
  295.             ->select('v,i,vi,m,e')
  296.             ->join('v.preview''i')
  297.             ->join('v.vehicle_items''vi')
  298.             ->join('v.categories','cat')
  299.             ->join('v.model''m')
  300.             ->join('v.equipments''e')
  301.             ->where('v.state = 1')
  302.             ->andWhere('v.is_used = 0')
  303.             ->andWhere('v.is_delete IN (:isDel)')
  304.             ->setParameter('isDel', [0,null]);
  305.         if ($url) {
  306.             $query->andWhere('cat.url = :url')
  307.                 ->setParameter('url'$url);
  308.         }
  309.         if (count($vehicleTypes)) {
  310.             $query->andWhere('v.vehicle_type IN (:types)')
  311.                 ->setParameter('types'$vehicleTypes);
  312.         }
  313.         if($dealer) {
  314.             $query->andWhere('v.dealer = :dealer')->setParameter('dealer',$dealer );
  315.         }
  316.         $query->orderBy('v.position');
  317.         return $query->getQuery()->getResult();
  318.     }
  319.     public function getVehicleWithVehicleItems($isUsed false$dealer null)
  320.     {
  321.         $query $this->createQueryBuilder('ve')
  322.             ->select('ve')
  323.             ->innerJoin('ve.vehicle_items''vi'Join::WITH'vi.state = 1')
  324.             ->innerJoin('vi.variation''vr'Join::WITH'vr.state = 1')
  325.             ->addSelect(['vi''vr'])
  326.             ->where('ve.state = :state')->setParameter('state'true)
  327.             ->andWhere('ve.is_used = :isUsed')->setParameter('isUsed'$isUsed)
  328.             ->andWhere('ve.vehicle_type = :vehicleType')->setParameter('vehicleType'VehicleType::PASSENGER_TYPE);
  329.         if ($dealer && $dealer->getId() == DealerModel::TOYOTA_BORISPIL_DEALER) {
  330.             $query->andWhere('ve.dealer = :dealer')->setParameter('dealer'$dealer);
  331.         } elseif (isset($dealer) && $dealer->getId() !== DealerModel::SECOND_HAND_DEALER) {
  332.             $query->innerJoin('ve.model''m')
  333.                 ->innerJoin('m.brand''b')
  334.                 ->andWhere('b.id = :brand')
  335.                 ->setParameter('brand'$dealer->getBrand()->getId());
  336.         }
  337.         if ($isUsed) {
  338.             $query->andWhere('vi.is_reserved = 0');
  339.             $query->andWhere('vi.deposit = 0');
  340.             $query->andWhere('vi.sold = 0');
  341.         }
  342.         return $query->getQuery()->getResult();
  343.     }
  344.     public function getVehicleByUrl(string $url)
  345.     {
  346.         return $this->createQueryBuilder('v')
  347.             ->select('v')
  348.             ->join('v.vehicle_items''vi')
  349.             ->join('v.model''m')
  350.             ->join('v.equipments''e')
  351.             ->join('vi.variation''vv')
  352.             ->join('vv.characteristics''ch')
  353.             ->join('v.gallery''g')
  354.             ->join('g.galleryHasMedias''ghm')
  355.             ->join('ghm.media''media')
  356.             ->addSelect('vi,m,e,g,ghm,media,vv,ch')
  357.             ->where('v.url = :url')
  358.             ->setParameter('url'$url)
  359.             ->getQuery()
  360.             ->getOneOrNullResult();
  361.     }
  362. }