src/DcSiteBundle/Repository/ServiceWorkRepository.php line 407

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: serhii.patsai
  5.  * Date: 09.04.2019
  6.  * Time: 13:18
  7.  */
  8. namespace DcSiteBundle\Repository;
  9. use CoreBundle\Entity\Dealer;
  10. use CoreBundle\Entity\Model;
  11. use DcSiteBundle\Entity\ServiceVariation;
  12. use DcSiteBundle\Entity\ServiceWorkGroup;
  13. use DcSiteBundle\Entity\ServiceWorkJob;
  14. use Doctrine\ORM\EntityRepository;
  15. use Doctrine\ORM\Query\Expr\Join;
  16. class ServiceWorkRepository extends EntityRepository
  17. {
  18.     public function getAccessoryByDealer(Dealer $dealer$limit null)
  19.     {
  20.         $query $this->createQueryBuilder('sw')
  21.             ->where('sw.dealer =:dealer')->setParameter('dealer'$dealer)
  22.             ->andWhere('sw.is_accessory = true');
  23.         return $query->getQuery()->getResult();
  24.     }
  25.     public function getPriceList(Dealer $dealer$variationIds$workId$articul$title)
  26.     {
  27.         $query $this->createQueryBuilder('sw')
  28.             ->andWhere('sw.dealer =:dealer')
  29.             ->setParameter('dealer'$dealer);
  30.         if ($workId) {
  31.             $query->andWhere('sw.uid_1c = :workId')
  32.                 ->setParameter('workId'$workId);
  33.         }
  34.         if ($articul) {
  35.             $query->andWhere('sw.articul = :articul')
  36.                 ->setParameter('articul'$articul);
  37.         }
  38.         if ($title) {
  39.             $query->andWhere('sw.title_ua LIKE :name OR sw.title_ru LIKE :name')
  40.                 ->setParameter('name''%'.$title.'%');
  41.         }
  42.         if ($variationIds) {
  43.             $query->leftJoin('sw.variations''wv');
  44.             $query->andWhere('wv.uid_1c IN (:variationIds)')
  45.                 ->setParameter('variationIds'$variationIds);
  46.         }
  47.         return $query->getQuery()->getResult();
  48.     }
  49.     public function findRegulationWorkByVariation(ServiceVariation $variation)
  50.     {
  51.         $query $this->createQueryBuilder('w')
  52.             ->leftJoin('w.variations''wv')
  53.             ->andWhere('w.is_regulations = :isRegulations and wv.id = :variation')
  54.             ->setParameter('isRegulations'true)
  55.             ->setParameter('variation'$variation);
  56.         return $query->getQuery()->getResult();
  57.     }
  58.     public function findByVariation(ServiceVariation $Variation null$dealer)
  59.     {
  60.         $query $this->createQueryBuilder('w')
  61.             ->where('w.dealer = :dealer')
  62.             ->setParameter('dealer'$dealer);
  63.         if ($Variation) {
  64.             $query->leftJoin('w.variations''wv');
  65.             $query->andWhere('(w.is_regulations = 0 and wv.id IS NULL) OR wv.id = :variation')
  66.                 ->setParameter('variation'$Variation);
  67.         } else {
  68.             $query->andWhere('w.variation IS NULL and w.is_regulations = 0');
  69.         }
  70.         return $query->getQuery()->getResult();
  71.     }
  72.     public function getByModel($modelId$dealer)
  73.     {
  74.         return $this->createQueryBuilder('r')
  75.             ->join('r.variation''v')
  76.             ->where('r.dealer = :dealer')
  77.             ->andWhere('v.model = :model')
  78.             ->setParameter('dealer'$dealer)
  79.             ->setParameter('model'$modelId)
  80.             ->getQuery()
  81.             ->getResult();
  82.     }
  83.     public function getAccessoryByCategory(Dealer $dealerServiceWorkGroup $serviceWorkGroup$params null)
  84.     {
  85.         $query $this->createQueryBuilder('sw')
  86.             ->leftJoin('sw.variations''v')
  87.             ->where('sw.is_accessory = true');
  88.         if($serviceWorkGroup->getParent()) {
  89.             $query->innerJoin('sw.accessory_works''awg'Join::WITH'awg.group =:group')->setParameter('group'$serviceWorkGroup);
  90.         }
  91.         if (isset($params['brand'])) {
  92.             $query->innerJoin('sw.dealer''d'Join::WITH'd.brand  in (:brands)')->setParameter('brands'$params['brand']);
  93.         }
  94.         if (isset($params['model'])) {
  95.             $query->andWhere('v.model in (:model) OR v.id IS NULL')->setParameter('model'$params['model']);
  96.         }
  97.         if (isset($params['dealer'])) {
  98.             $query->andWhere('sw.dealer in (:dealers)')->setParameter('dealers'$params['dealer']);
  99.         } else {
  100.             $query->andWhere('sw.dealer =:dealer')->setParameter('dealer'$dealer);
  101.         }
  102.         if (isset($params['fuel'])) {
  103.             $query->andWhere('v.fuelType in (:fuel_type) OR v.id IS NULL')->setParameter('fuel_type'$params['fuel']);
  104.         }
  105.         if (isset($params['year'])) {
  106.             foreach ($params['year'] as $year) {
  107.                 $arrYear[] ='(v.year_from <=:year AND (v.year_to >= :year OR v.year_to = 0))';
  108.             }
  109.             $arrYear[] ='v.id IS NULL';
  110.             $query->andWhere(implode(' OR ',$arrYear))->setParameter('year'$year);
  111.         }
  112.         return $query->getQuery()->getResult();
  113.     }
  114.     public function getAccessoryBySearch(Dealer $dealer$search)
  115.     {
  116.         $query $this->createQueryBuilder('sw')
  117.             ->leftJoin('sw.parts''swp')
  118.             ->leftJoin('swp.part','p')
  119.             ->where('sw.is_accessory = true')
  120.             ->andWhere('(sw.articul =:search OR p.number =:search OR sw.title LIKE :searchLike)')->setParameter('search'$search)->setParameter('searchLike''%'.$search.'%')
  121.             ->andWhere('sw.dealer =:dealer')->setParameter('dealer'$dealer);
  122.         return $query->getQuery()->getResult();
  123.     }
  124.     public function getAccessoryByCreateFilter(Dealer $dealerServiceWorkGroup $serviceWorkGroup$params null)
  125.     {
  126.         $query $this->createQueryBuilder('sw')
  127.             ->innerJoin('sw.variations''v')
  128.             ->where('sw.is_accessory = true');
  129.         if($serviceWorkGroup->getParent()) {
  130.             $query->innerJoin('sw.accessory_works''awg'Join::WITH'awg.group =:group')->setParameter('group'$serviceWorkGroup);
  131.         }
  132.         if (isset($params['brand'])) {
  133.             $query->innerJoin('sw.dealer''d'Join::WITH'd.brand  in (:brands)')->setParameter('brands'$params['brand']);
  134.         }
  135.         if (isset($params['model'])) {
  136.             $query->innerJoin('v.model''m'Join::WITH'm.id in (:model)')->setParameter('model'$params['model']);
  137.         }
  138.         if (isset($params['dealer'])) {
  139.             $query->andWhere('sw.dealer in (:dealers)')->setParameter('dealers'$params['dealer']);
  140.         } else {
  141.             $query->andWhere('sw.dealer =:dealer')->setParameter('dealer'$dealer);
  142.         }
  143.         if (isset($params['fuel'])) {
  144.             $query->andWhere('v.fuelType in (:fuel_type)')->setParameter('fuel_type'$params['fuel']);
  145.         }
  146.         if (isset($params['year'])) {
  147.             foreach ($params['year'] as $year) {
  148.                 $arrYear[] ='(v.year_from <=:year AND (v.year_to >= :year OR v.year_to = 0))';
  149.             }
  150.             $query->andWhere(implode(' OR ',$arrYear))->setParameter('year'$year);
  151.         }
  152.         return $query->getQuery()->getResult();
  153.     }
  154.     public function getVariationsByModel(Dealer $dealerModel $model)
  155.     {
  156.         return $this->createQueryBuilder('sw')
  157.             ->select('v.id')
  158.             ->innerJoin('sw.variations''v')
  159.             ->where('sw.dealer = :dealer')
  160.             ->andWhere('sw.is_accessory = 1')
  161.             ->andWhere('v.model = :model')
  162.             ->setParameter('dealer',$dealer)
  163.             ->setParameter('model',$model)
  164.             ->groupBy('v.id')
  165.             ->getQuery()->getScalarResult();
  166.     }
  167.     public function getAccessoryByModel(Dealer $dealerModel $modelServiceWorkGroup $serviceWorkGroup$params null)
  168.     {
  169.         $query $this->createQueryBuilder('sw')
  170.             ->leftJoin('sw.variations''v')
  171.             ->innerJoin('sw.accessory_works''awg'Join::WITH'awg.group =:group')->setParameter('group'$serviceWorkGroup)
  172.             ->where('sw.dealer = :dealer')
  173.             ->andWhere('sw.is_accessory = true')
  174.             ->andWhere('v.model = :model OR v.id IS NULL')
  175.             ->setParameter('dealer'$dealer)
  176.             ->setParameter('model'$model);
  177.         if (isset($params['brand'])) {
  178.             $query->innerJoin('sw.dealer''d'Join::WITH'd.brand  in (:brands)')->setParameter('brands'$params['brand']);
  179.         }
  180.         if (isset($params['fuel'])) {
  181.             $query->andWhere('v.fuelType in (:fuel_type) OR v.id IS NULL')->setParameter('fuel_type'$params['fuel']);
  182.         }
  183.         if (isset($params['year'])) {
  184.             foreach ($params['year'] as $year) {
  185.                 $arrYear[] ='(v.year_from <=:year AND (v.year_to >= :year OR v.year_to = 0))';
  186.             }
  187.             $arrYear[] ='v.id IS NULL';
  188.             $query->andWhere(implode(' OR ',$arrYear))->setParameter('year'$year);
  189.         }
  190.         return $query->getQuery()->getResult();
  191.     }
  192.     public function getAccessoryByModelAndVariation(Dealer $dealerModel $modelServiceWorkGroup $serviceWorkGroup$params null$variationId)
  193.     {
  194.         $query $this->createQueryBuilder('sw')
  195.             ->leftJoin('sw.variations''v')
  196.             ->innerJoin('sw.accessory_works''awg'Join::WITH'awg.group =:group')->setParameter('group'$serviceWorkGroup)
  197.             ->where('sw.dealer = :dealer')
  198.             ->andWhere('sw.is_accessory = true')
  199.             ->andWhere('v.model = :model OR v.id IS NULL')
  200.             ->setParameter('dealer'$dealer)
  201.             ->setParameter('model'$model)
  202.             ->andWhere('sw.variation = :variationId OR v.id = :variationId OR (sw.variation IS NULL AND v.id IS NULL)')
  203.             ->setParameter('variationId'$variationId);
  204.         if (isset($params['brand'])) {
  205.             $query->innerJoin('sw.dealer''d'Join::WITH'd.brand  in (:brands)')->setParameter('brands'$params['brand']);
  206.         }
  207.         if (isset($params['fuel'])) {
  208.             $query->andWhere('v.fuelType in (:fuel_type) OR v.id IS NULL')->setParameter('fuel_type'$params['fuel']);
  209.         }
  210.         if (isset($params['year'])) {
  211.             foreach ($params['year'] as $year) {
  212.                 $arrYear[] ='(v.year_from <=:year AND (v.year_to >= :year OR v.year_to = 0))';
  213.             }
  214.             $arrYear[] ='v.id IS NULL';
  215.             $query->andWhere(implode(' OR ',$arrYear))->setParameter('year'$year);
  216.         }
  217.         return $query->getQuery()->getResult();
  218.     }
  219.     public function findAccessory(Dealer $dealer$partId$partNumber)
  220.     {
  221.         return $this->createQueryBuilder('sw')
  222.             ->innerJoin('sw.parts''parts'Join::WITH'parts.id =:partId')
  223.             ->innerJoin('parts.part''part'Join::WITH'part.number =:partNumber AND part.state =:state')
  224.             ->where('sw.dealer =:dealer')->setParameter('dealer'$dealer)
  225.             ->setParameter('partId'$partId)
  226.             ->setParameter('partNumber'$partNumber)
  227.             ->setParameter('state'true)
  228.             ->getQuery()
  229.             ->getOneOrNullResult();
  230.     }
  231.     public function findAccessoryVariation(Dealer $dealer$partNumber)
  232.     {
  233.         return $this->createQueryBuilder('sw')
  234.             ->innerJoin('sw.parts''parts')
  235.             ->innerJoin('parts.part''part'Join::WITH'part.number =:partNumber AND part.state =:state')
  236.             ->where('sw.dealer =:dealer')->setParameter('dealer'$dealer)
  237.             ->setParameter('partNumber'$partNumber)
  238.             ->setParameter('state'true)
  239.             ->getQuery()
  240.             ->getResult();
  241.     }
  242.     public function getByParams($dealer$params)
  243.     {
  244.         $modelId $params['model'];
  245.         $query $this->createQueryBuilder('r')
  246.             ->join('r.variation''v')
  247.             ->where('r.dealer = :dealer')
  248.             ->andWhere('v.model = :model')
  249.             ->setParameter('dealer'$dealer)
  250.             ->setParameter('model'$modelId);
  251.         foreach ($params as $key => $val) {
  252.             if (!$val) {
  253.                 continue;
  254.             }
  255.             switch ($key) {
  256.                 case 'fType':
  257.                     $query->andWhere('v.fuelType = :fType')
  258.                         ->setParameter('fType'$val);
  259.                     break;
  260.                 case 'year':
  261.                     $query->andWhere('v.year_from <= :year and (v.year_to is null OR v.year_to = 0 OR v.year_to >= :year)')
  262.                         ->setParameter('year'$val);
  263.                     break;
  264.                 case 'tType':
  265.                     $query->andWhere('v.transmissionType = :transmission')
  266.                         ->setParameter('transmission'$val);
  267.                     break;
  268.                 case 'dUnit':
  269.                     $query->andWhere('v.driveUnit = :dUnit')
  270.                         ->setParameter('dUnit'$val);
  271.                     break;
  272.                 case 'volume':
  273.                     $query->andWhere('v.engine_volume = :volume')
  274.                         ->setParameter('volume'$val)
  275.                         ->orderBy('r.mileage''ASC');
  276.                     break;
  277.             }
  278.         }
  279.         return $query->getQuery()->getResult();
  280.     }
  281.     public function getAccessories($variation$dealer$group)
  282.     {
  283.         $query $this->createQueryBuilder('w')
  284.             ->select('w')
  285.             ->join('w.parts''p')
  286.             ->join('p.part''dc_p')
  287.             ->where('w.dealer = :dealer AND w.group = :group')
  288.             ->setParameter('dealer'$dealer)
  289.             ->setParameter('group'$group);
  290.         if ($variation) {
  291.             $query->andWhere('w.variation IS NULL OR w.variation = :variation')
  292.                 ->setParameter('variation'$variation);
  293.         }
  294.         return $query->groupBy('w.id')->getQuery()->getResult();
  295.     }
  296.     public function getAccessoriesWithoutVariation($dealer$group)
  297.     {
  298.         $query $this->createQueryBuilder('w')
  299.             ->select('w')
  300.             ->join('w.parts''p')
  301.             ->join('p.part''dc_p')
  302.             ->where('w.dealer = :dealer AND w.group = :group')
  303.             ->andWhere('w.variation IS NULL')
  304.             ->setParameter('dealer'$dealer)
  305.             ->setParameter('group'$group);
  306.         return $query->groupBy('w.id')->getQuery()->getResult();
  307.     }
  308.     public function getAccessoriesWithoutCategory($dealer$group)
  309.     {
  310.         $query $this->createQueryBuilder('w')
  311.             ->select('w')
  312.             ->join('w.parts''p')
  313.             ->join('p.part''dc_p')
  314.             ->where('w.dealer = :dealer AND w.group = :group')
  315.             ->andWhere('dc_p.categories is NULL')
  316.             ->setParameter('dealer'$dealer)
  317.             ->setParameter('group'$group);
  318.         return $query->groupBy('w.id')->getQuery()->getResult();
  319.     }
  320.     public function findByCategory($category)
  321.     {
  322.         $query $this->createQueryBuilder('w');
  323.         $query->select('w')
  324.             ->join('w.categories''wc')
  325.             ->where($query->expr()->eq('wc.id'$category->getId()));
  326.         return $query->getQuery()->getResult();
  327.     }
  328.     public function getByJobIds($jobs$dealer$regulations = [01])
  329.     {
  330.         $query $this->createQueryBuilder('w');
  331.         $query->select('w')
  332.             ->innerJoin('w.jobs''wj'Join::WITH'wj.job in (:jobs)')
  333.             ->leftJoin('w.variation''v'Join::WITH'v.dealer = :dealer')
  334.             ->leftJoin('v.model''m')
  335.             ->where('w.dealer = :dealer AND w.is_regulations in (:is_regulations)')
  336.             ->setParameter('jobs'$jobs)
  337.             ->setParameter('dealer'$dealer)
  338.             ->setParameter('is_regulations'$regulations);
  339.         return $query->orderBy('wj.job ')->addOrderBy('w.mileage')->addOrderBy('m.title')->addOrderBy('v.year_from')->addOrderBy('v.year_to')->addOrderBy('v.engine_volume')->getQuery()->getResult();
  340.     }
  341.     public function getByBrand($brand)
  342.     {
  343.         $query $this->createQueryBuilder('w')
  344.             ->select('w')
  345.             ->innerJoin('w.variation''v')
  346.             ->innerJoin('v.model''m')
  347.             ->innerJoin('m.brand''b')
  348.             ->where('b.url = :brand')
  349.             ->setParameter('brand'$brand);
  350.         return $query->getQuery()->getResult();
  351.     }
  352.     public function getWorksByModelAndBrand($model ''$brand)
  353.     {
  354.         $query $this->createQueryBuilder('w')
  355.             ->select('w as work, MIN(j.price) as min_price')
  356.             ->innerJoin('w.variation''v')
  357.             ->innerJoin('w.jobs''j')
  358.             ->innerJoin('v.model''m')
  359.             ->innerJoin('m.brand''b')
  360.             ->where('b.url = :brand')
  361.             ->innerJoin('w.group''gr')
  362.             ->setParameter('brand'$brand);
  363.         if ($model) {
  364.             $query->andWhere('m.url = :model')
  365.                 ->setParameter('model'$model);
  366.         }
  367.         $query->groupBy('w.id, gr.id, j.id');
  368.         return $query->getQuery()->getResult();
  369.     }
  370.     public function getWorksByModelBrandAndGroup($model ''$brand$workGroup)
  371.     {
  372.         $query $this->createQueryBuilder('w')
  373.             ->select('w as work, MIN(j.price) as min_price')
  374.             ->innerJoin('w.variation''v')
  375.             ->innerJoin('w.jobs''j')
  376.             ->innerJoin('v.model''m')
  377.             ->innerJoin('m.brand''b')
  378.             ->innerJoin('w.group''gr')
  379.             ->where('b.url = :brand')
  380.             ->setParameter('brand'$brand);
  381.         if ($model) {
  382.             $query->andWhere('m.url = :model')
  383.                 ->setParameter('model'$model);
  384.         }
  385.         if($workGroup) {
  386.             $query->andWhere('w.group = :workGroupId')
  387.                 ->setParameter('workGroupId'$workGroup);
  388.         }
  389.         $query->groupBy('w.id, gr.id, j.id');
  390.         return $query->getQuery()->getResult();
  391.     }
  392. }