src/Repository/ProductRepository.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Category;
  4. use App\Entity\CategoryMaster;
  5. use App\Entity\Company;
  6. use App\Entity\Product;
  7. use App\Entity\SubCategory;
  8. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  9. use Doctrine\Persistence\ManagerRegistry;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. /**
  12.  * @method Product|null find($id, $lockMode = null, $lockVersion = null)
  13.  * @method Product|null findOneBy(array $criteria, array $orderBy = null)
  14.  * @method Product[]    findAll()
  15.  * @method Product[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  16.  */
  17. class ProductRepository extends ServiceEntityRepository
  18. {
  19.     /**
  20.      * @var SubCategoryRepository
  21.      */
  22.     private $subCategoryRepository;
  23.     public function __construct(ManagerRegistry $registrySubCategoryRepository $subCategoryRepository)
  24.     {
  25.         parent::__construct($registryProduct::class);
  26.         $this->subCategoryRepository $subCategoryRepository;
  27.     }
  28.     public function findAllProducts()
  29.     {
  30.         return $this->createQueryBuilder('p')
  31.             ->leftJoin('p.departments''departments')
  32.             ->leftJoin('p.company''company')
  33.             ->join('p.subCategories''subCategories')
  34.             ->addSelect('departments')
  35.             ->where('company.isConfirmed = 1')
  36.             ->andWhere('company.isValidDocument = 1')
  37.             ->andWhere('p.isActivated = 1')
  38.             ->andWhere('subCategories.isService is NULL or subCategories.isService = 0')
  39.             ->orderBy('p.id''DESC')
  40.             ->getQuery()
  41.             ->getResult();
  42.     }
  43.     public function findAllServices()
  44.     {
  45.         return $this->createQueryBuilder('p')
  46.             ->leftJoin('p.departments''departments')
  47.             ->leftJoin('p.company''company')
  48.             ->join('p.subCategories''subCategories')
  49.             ->addSelect('departments')
  50.             ->where('company.isConfirmed = 1')
  51.             ->andWhere('company.isValidDocument = 1')
  52.             ->andWhere('p.isActivated = 1')
  53.             ->andWhere('p.isDesactivatedByAdmin = 0')
  54.             ->andWhere('subCategories.isService = 1')
  55.             // ->leftJoin('p.avis', 'avis')
  56.             // ->addselect('avis')
  57.             // ->orderBy('avis.globalNote', 'DESC')
  58.             ->orderBy('p.id''DESC')
  59.             ->getQuery()
  60.             ->getResult();
  61.     }
  62.     public function searchProduct(array $parameters)
  63.     {
  64.         $qb $this
  65.             ->createQueryBuilder('p')
  66.             ->leftJoin('p.subCategories''subCategory')
  67.             ->leftJoin('p.productAgendas''productAgendas')
  68.             ->where('p.isActivated = 1')
  69.             ->leftJoin('p.company''company')
  70.             ->andWhere('company.isConfirmed = 1')
  71.             ->andWhere('company.isValidDocument = 1')
  72.             ->andWhere('p.isDesactivatedByAdmin = 0');
  73.         if ($parameters['department']) {
  74.             $qb
  75.                 ->leftJoin('p.departments''departments')
  76.                 ->addSelect('departments')
  77.                 ->andWhere('departments = :department OR departments IS NULL')
  78.                 ->setParameter('department'$parameters['department']);
  79.         }
  80.         if ($parameters['city']) {
  81.             $qb
  82.                 ->andWhere('p.cityLocalisation = :city')
  83.                 ->setParameter('city'$parameters['city']);
  84.         }
  85.         if ($parameters['min_price']) {
  86.             $qb
  87.                 ->andWhere('p.price > :price')
  88.                 ->setParameter('price'$parameters['min_price']);
  89.         }
  90.         if ($parameters['category']) {
  91.             $qb
  92.                 ->andWhere($qb->expr()->in('subCategory.id'$parameters['category']));
  93.         } /*elseif ($parameters['categoryMaster']) {
  94.             $subCategories = $this->subCategoryRepository->getSubCategoriesByCategory($parameters['categoryMaster']);
  95.             $arrayId = [];
  96.             foreach ($subCategories as $subCategory) {
  97.                 $arrayId[] = $subCategory['id'];
  98.             }
  99.             $qb
  100.                 ->andWhere('subCategory.id IN (:idMaster)')
  101.                 ->setParameter('idMaster', $arrayId);
  102.         }*/
  103.         if ($parameters['type']) {
  104.             if ($parameters['type'] === 'service') {
  105.                 $qb
  106.                     ->andWhere('subCategory.isService = 1');
  107.             } else {
  108.                 $qb
  109.                     ->andWhere('subCategory.isService = 0');
  110.             }
  111.         }
  112.         if ($parameters['nbGuest']) {
  113.             $qb
  114.                 ->andWhere('p.nbGuest > :nbGuest')
  115.                 ->orWhere('p.nbGuest IS NULL')
  116.                 ->setParameter('nbGuest'$parameters['nbGuest']);
  117.         }
  118.         if ($parameters['max_price']) {
  119.             $qb
  120.                 ->andWhere('p.price < :maxprice')
  121.                 ->setParameter('maxprice'$parameters['max_price']);
  122.         }
  123.         if ($parameters['keyword']) {
  124.             $qb
  125.                 ->andWhere('p.name LIKE :name')
  126.                 ->setParameter('name''%'.$parameters['keyword'].'%');
  127.         }
  128.         if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  129.             $weddingDateStart \DateTime::createFromFormat('d/m/Y'$parameters['weddingdate_start'])->format('Y-m-d');
  130.             $weddingDateEnd \DateTime::createFromFormat('d/m/Y'$parameters['weddingdate_end'])->format('Y-m-d');
  131.             
  132.             $qb
  133.                 ->andWhere('(productAgendas.startDayNotAvailable IS NULL OR :weddingdate_end < productAgendas.startDayNotAvailable OR :weddingdate_start > productAgendas.endDayNotAvailable)')
  134.                 ->setParameter('weddingdate_start'$weddingDateStart)
  135.                 ->setParameter('weddingdate_end'$weddingDateEnd);
  136.         }
  137.         if ($parameters['weddingdate']) {
  138.             $weddingdate \DateTime::createFromFormat('d/m/Y'$parameters['weddingdate'])->format('Y-m-d');
  139.         
  140.             $qb
  141.                 ->andWhere('(productAgendas.startDayNotAvailable IS NULL OR :weddingdate < productAgendas.startDayNotAvailable OR :weddingdate > productAgendas.endDayNotAvailable)')
  142.                 ->setParameter('weddingdate'$weddingdate);
  143.         }
  144.         
  145. /*
  146.         if ($parameters['category']) {
  147.             if ($parameters['category'] !== 'Service') {
  148.                 $qb
  149.                     ->andWhere('subCategory IN (:category)')
  150.                     ->setParameter('category', $parameters['category']);
  151.             }
  152.         }*/
  153.         return $qb->orderBy('p.id''DESC')->getQuery()->getResult();
  154.     }
  155.     public function searchProductCompany(array $parametersCompany $company)
  156.     {
  157.         $qb $this
  158.             ->createQueryBuilder('p')
  159.             ->leftJoin('p.company''company')
  160.             ->where('company = :company')
  161.             ->setParameter('company'$company);
  162.         if ($parameters['minQuantity']) {
  163.             $qb
  164.                 ->andWhere('p.quantity > :quantitymin')
  165.                 ->setParameter('quantitymin'$parameters['minQuantity']);
  166.         }
  167.         if ($parameters['maxQuantity']) {
  168.             $qb
  169.                 ->andWhere('p.quantity < :quantitymax')
  170.                 ->setParameter('quantitymax'$parameters['maxQuantity']);
  171.         }
  172.         if ($parameters['minPrice']) {
  173.             $qb
  174.                 ->andWhere('p.price > :minPrice')
  175.                 ->setParameter('minPrice'$parameters['minPrice']);
  176.         }
  177.         if ($parameters['maxPrice']) {
  178.             $qb
  179.                 ->andWhere('p.price < :maxPrice')
  180.                 ->setParameter('maxPrice'$parameters['maxPrice']);
  181.         }
  182.         if ($parameters['keyword']) {
  183.             $qb
  184.                 ->andWhere('p.name LIKE :name')
  185.                 ->setParameter('name''%'.$parameters['keyword'].'%');
  186.         }
  187.         return $qb->getQuery()->getResult();
  188.     }
  189.     public function productsByCategory(Category $category)
  190.     {
  191.         return $this->createQueryBuilder('p')
  192.             ->leftJoin('p.subCategories''subCategory')
  193.             ->addSelect('subCategory')
  194.             ->leftJoin('subCategory.categories''category')
  195.             ->addSelect('category')
  196.             ->where('category = :category')
  197.             ->andWhere('p.isActivated = 1')
  198.             ->setParameter('category'$category)
  199.             ->orderBy('p.id''DESC')
  200.             ->getQuery()
  201.             ->getResult();
  202.     }
  203.     public function productsByCategoryMaster(SubCategory $subCategory)
  204.     {
  205.         return $this->createQueryBuilder('p')
  206.             ->leftJoin('p.subCategories''subCategory')
  207.             ->addSelect('subCategory')
  208.             ->leftJoin('subCategory.categories''category')
  209.             ->addSelect('category')
  210.             ->leftJoin('p.company''company')
  211.             ->addSelect('company')
  212.             ->where('subCategory = :subCategory')
  213.             ->andWhere('company.isConfirmed = 1')
  214.             ->andWhere('company.isValidDocument = 1')
  215.             ->andWhere('p.isActivated = 1')
  216.             ->setParameter('subCategory'$subCategory)
  217.             ->orderBy('p.id''DESC')
  218.             ->getQuery()
  219.             ->getResult();
  220.     }
  221.     public function productsByCategoryEvent(Category $category)
  222.     {
  223.         return $this->createQueryBuilder('p')
  224.             ->leftJoin('p.subCategory''subCategory')
  225.             ->addSelect('subCategory')
  226.             ->leftJoin('subCategory.category''category')
  227.             ->addSelect('category')
  228.             ->where('category = :category')
  229.             ->andWhere('p.isActivated = 1')
  230.             ->setParameter('category'$category)
  231.             ->orderBy('p.id''DESC')
  232.             ->getQuery()
  233.             ->getResult();
  234.     }
  235.     public function productsBySubCategory(SubCategory $subCategory)
  236.     {
  237.         return $this->createQueryBuilder('p')
  238.             ->leftJoin('p.subCategories''subCategory')
  239.             ->addSelect('subCategory')
  240.             ->leftJoin('p.company''company')
  241.             ->addSelect('company')
  242.             ->where('subCategory = :subCategory')
  243.             ->setParameter('subCategory'$subCategory)
  244.             ->andWhere('company.isConfirmed = 1')
  245.             ->andWhere('company.isValidDocument = 1')
  246.             ->andWhere('p.isActivated = 1')
  247.             ->orderBy('p.id''DESC')
  248.             ->getQuery()
  249.             ->getResult();
  250.     }
  251.     public function getBySubcategories(SubCategory $subCategory)
  252.     {
  253.         return $this->createQueryBuilder('p')
  254.             ->leftJoin('p.subCategories''subCategory')
  255.             ->where(':subCategory = subCategory')
  256.             ->setParameter('subCategory'$subCategory)
  257.             ->getQuery()
  258.             ->getResult();
  259.     }
  260.     public function getProduct(int $id)
  261.     {
  262.         return $this->createQueryBuilder('p')
  263.             ->leftJoin('p.departments''departments')
  264.             ->addSelect('departments')
  265.             ->leftJoin('p.photos''photos')
  266.             ->addSelect('photos')
  267.             ->where('p.id = :id')
  268.             ->setParameter('id'$id)
  269.             ->getQuery()
  270.             ->getOneOrNullResult();
  271.     }
  272.     public function getOtherProductsCompany(Product $product)
  273.     {
  274.         return $this->createQueryBuilder('p')
  275.             ->leftJoin('p.photos''photos')
  276.             ->leftJoin('p.avis''avis')
  277.             ->leftJoin('p.departments''departments')
  278.             ->addSelect('photos')
  279.             ->addSelect('avis')
  280.             ->addSelect('departments')
  281.             ->where('p.id != :id')
  282.             ->setParameter('id'$product->getId())
  283.             ->andWhere('p.isActivated = 1')
  284.             ->setMaxResults(3)
  285.             ->orderBy('p.id''DESC')
  286.             ->getQuery()
  287.             ->getResult();
  288.     }
  289.     public function getOtherProductsByCompany(Company $company)
  290.     {
  291.         return $this->createQueryBuilder('p')
  292.             ->where('p.company = :company')
  293.             ->setParameter('company'$company)
  294.             ->leftJoin('p.company''company')
  295.             ->addSelect('company')
  296.             ->andWhere('company.isConfirmed = 1')
  297.             ->andWhere('company.isValidDocument = 1')
  298.             ->andWhere('p.isActivated = :true')
  299.             ->setParameter('true'1)
  300.             ->setMaxResults(3)
  301.             ->orderBy('p.id''DESC')
  302.             ->getQuery()
  303.             ->getResult();
  304.     }
  305.     public function getPhotoProductsByCompany(Company $company)
  306.     {
  307.         return $this->createQueryBuilder('p')
  308.             ->where('p.company = :company')
  309.             ->setParameter('company'$company)
  310.             ->leftJoin('p.company''company')
  311.             ->addSelect('company')
  312.             ->andWhere('company.isConfirmed = 1')
  313.             ->andWhere('company.isValidDocument = 1')
  314.             ->andWhere('p.isActivated = :true')
  315.             ->setParameter('true'1)
  316.             ->setMaxResults(1)
  317.             ->orderBy('p.id''DESC')
  318.             ->getQuery()
  319.             ->getResult();
  320.     }
  321.     public function getAllProductsByCompany(Company $company)
  322.     {
  323.         return $this->createQueryBuilder('p')
  324.             ->where('p.company = :company')
  325.             ->setParameter('company'$company)
  326.             ->leftJoin('p.company''company')
  327.             ->addSelect('company')
  328.             ->andWhere('company.isConfirmed = 1')
  329.             ->andWhere('company.isValidDocument = 1')
  330.             ->andWhere('p.isActivated = :true')
  331.             ->setParameter('true'1)
  332.             ->orderBy('p.id''DESC')
  333.             ->getQuery()
  334.             ->getResult();
  335.     }
  336.     public function getOtherProductsCompanyNotSingle(Company $companyProduct $product)
  337.     {
  338.         return $this->createQueryBuilder('p')
  339.             ->where('p.company = :company')
  340.             ->setParameter('company'$company)
  341.             ->andWhere('p.isActivated = :true')
  342.             ->setParameter('true'1)
  343.             ->andWhere('p.id != :idProduct')
  344.             ->setParameter('idProduct'$product->getId())
  345.             ->setMaxResults(3)
  346.             ->orderBy('p.id''DESC')
  347.             ->getQuery()
  348.             ->getResult();
  349.     }
  350.     public function findProductByNote()
  351.     {
  352.         return $this->createQueryBuilder('p')
  353.             ->leftJoin('p.avis''avis')
  354.             ->addSelect('SUM(avis.globalNote) as countNote')
  355.             ->orderBy('countNote''DESC')
  356.             ->groupBy('p')
  357.             ->setMaxResults(4)
  358.             ->getQuery()
  359.             ->getResult();
  360.     }
  361.     public function orderByNotes()
  362.     {
  363.         return $this->createQueryBuilder('p')
  364.             ->leftJoin('p.avis''avis')
  365.             ->where('p.isActivated = 1')
  366.             ->orderBy('avis.globalNote''DESC')
  367.             ->getQuery()
  368.             ->getResult();
  369.     }
  370.     public function orderByCommands()
  371.     {
  372.         return $this->createQueryBuilder('p')
  373.             ->leftJoin('p.commandProducts''commandProducts')
  374.             ->where('p.isActivated = 1')
  375.             ->orderBy('commandProducts.quantity''DESC')
  376.             ->setMaxResults(4)
  377.             ->getQuery()
  378.             ->getResult();
  379.     }
  380.     public function findByCritere($critere=null){
  381.         $qb $this->createQueryBuilder('p');
  382.         $qb->innerjoin('App\Entity\OptionHebergement''o''WITH''o.products = p.id');
  383.         
  384.         if($critere != null && isset($critere["nbrParticipant"]) && $critere["nbrParticipant"] != '' ){
  385.             $qb->andWhere('o.numberOfParticipants = :nbrParticipant');
  386.             $qb->setParameter('nbrParticipant'$critere["nbrParticipant"]);
  387.         }
  388.         
  389.         if($critere != null && isset($critere["nbrAdulte"]) && $critere["nbrAdulte"] != '' ){
  390.             $qb->andWhere('o.numberOfAdults = :nbrAdulte');
  391.             $qb->setParameter('nbrAdulte'$critere["nbrAdulte"]);
  392.         }
  393.         if($critere != null && isset($critere["nbrEnfant"]) && $critere["nbrEnfant"] != '' ){
  394.             $qb->andWhere('o.numberOfChild = :nbrEnfant');
  395.             $qb->setParameter('nbrEnfant'$critere["nbrEnfant"]);
  396.         }
  397.         if($critere != null && isset($critere["nbrLits"]) && $critere["nbrLits"] != '' ){
  398.             $qb->andWhere('o.bedNumber = :nbrLits');
  399.             $qb->setParameter('nbrLits'$critere["nbrLits"]);
  400.         }
  401.         if($critere != null && isset($critere["nbrBebe"]) && $critere["nbrBebe"] != '' ){
  402.             $qb->andWhere('o.numberOfBaby = :nbrBebe');
  403.             $qb->setParameter('nbrEnfant'$critere["nbrBebe"]);
  404.         }
  405.         
  406.         $result $qb->getQuery()->getResult();
  407.         return $result;
  408.         
  409.         // $qb->leftJoin('App\Entity\Caracteristic', 'c');
  410.         // $qb->leftJoin('o.caracteristics', 'c');
  411.         // $qb->addSelect('c');
  412.         // $qb->addIsPublishedQueryBuilder('App\Entity\Caracteristic', 'c', 'WITH', 'o.products = p.id');
  413.         // if($critere != null && isset($critere["caracteristique"]) && $critere["caracteristique"] != null ){
  414.         //     $caracteristic = '';
  415.         //     foreach ($critere["caracteristique"] as $key => $value) {
  416.         //         # code...
  417.         //         $caracteristic .= $key == 0 ? 'o.caracteristics = :caracteristique'.$key : ' OR o.caracteristics = :caracteristique'.$key;
  418.         //     }
  419.         //     $qb->andWhere($caracteristic);
  420.         //     foreach ($critere["caracteristique"] as $key => $value) {
  421.         //         # code...
  422.         //         $qb->setParameter('caracteristique'.$key, $value);
  423.         //     }
  424.         // }
  425.                     
  426.     }
  427.     /*
  428.     public function findOneBySomeField($value): ?Product
  429.     {
  430.         return $this->createQueryBuilder('p')
  431.             ->andWhere('p.exampleField = :val')
  432.             ->setParameter('val', $value)
  433.             ->getQuery()
  434.             ->getOneOrNullResult()
  435.         ;
  436.     }
  437.     */
  438.     public function filtreHebergement($equipements)
  439.     {
  440.         $qb $this
  441.             ->createQueryBuilder('p')
  442.             ->leftJoin('p.subCategories''subCategory')
  443.             ->leftJoin('p.equipementHebergs''equipementHebergs')
  444.             // ->addSelect('hebergementOptions.equipement')
  445.             // ->andWhere('p.id =:idProduct')
  446.             // ->setParameter('idProduct', 2)
  447.             ;
  448.         //  dd($qb);
  449.             // if ($equipements) {
  450.             //     $qb
  451.                     
  452.             //     ->andWhere($qb->expr()->in('equipementHebergs.nomEquipement', $equipements));
  453.             // } 
  454.     
  455.         return $qb->getQuery()->getResult();
  456.     }
  457.     
  458.     public function Hebergement(array $parameters)
  459.     {
  460.         $qb $this
  461.             ->createQueryBuilder('p')
  462.             ->leftJoin('p.subCategories''subCategory')
  463.             ->addSelect('subCategory')
  464.             ->leftJoin('p.chambres''chambres')
  465.             ->where('p.isActivated = 1')
  466.             ->leftJoin('p.company''company')
  467.             ->andWhere('company.isConfirmed = 1')
  468.             ->andWhere('company.isValidDocument = 1')
  469.             ->leftJoin('p.equipment''equipment')
  470.             ->leftJoin('p.caracteristics''caracteristics')
  471.             ->leftJoin('p.typeLocalisations''typeLocalisations')
  472.             ->leftJoin('p.securities''securities')
  473.             ->leftJoin('p.langueHotes''langueHotes')
  474.             ;
  475.             if ($parameters['prix'] == "plusCher") {
  476.                 $qb   
  477.                 ->orderBy('chambres.tarifJour''ASC');
  478.             } else{
  479.                 $qb   
  480.                 ->orderBy('chambres.tarifJour''DESC');
  481.             }
  482.             if (!empty($parameters['equipements'])) {
  483.                 $qb   
  484.                 ->andWhere('equipment.labels IN (:equipements)')
  485.                 ->setParameter('equipements'$parameters['equipements']);
  486.             } 
  487.             if (!empty($parameters['caracteristics'])) {
  488.                 $qb   
  489.                 ->andWhere('caracteristics.labels IN (:caracteristics)')
  490.                 ->setParameter('caracteristics'$parameters['caracteristics']);
  491.             } 
  492.             if (!empty($parameters['typeLocalisations'])) {
  493.                 $qb   
  494.                 ->andWhere('typeLocalisations.slugTypeLocal IN (:typeLocalisation)')
  495.                 ->setParameter('typeLocalisation'$parameters['typeLocalisations']);
  496.             } 
  497.             if (!empty($parameters['securities'])) {
  498.                 $qb   
  499.                 ->andWhere('securities.slugSecurity IN (:securitie)')
  500.                 ->setParameter('securitie'$parameters['securities']);
  501.             } 
  502.             if (!empty($parameters['langueHotes'])) {
  503.                 $qb   
  504.                 ->andWhere('langueHotes.labels IN (:langueHotes)')
  505.                 ->setParameter('langueHotes'$parameters['langueHotes']);
  506.             } 
  507.             return $qb->getQuery()->getResult();
  508.     }
  509.     public function findprestation(float $lat nullfloat $lng null, ?int $radius 1000$idprod)
  510.     {
  511.         $query =  $this->findVisibleQuery();
  512.         $query ->andWhere('p.id != :id')
  513.                ->andWhere('p.typeActivity IS NOT NULL')
  514.                ->leftJoin('p.subCategories''subCategory')
  515.                ->addSelect('subCategory')
  516.                ->leftJoin('subCategory.categories''category')
  517.                ->addSelect('category')
  518.                ->andWhere('category IS NOT NULL')
  519.                ->setParameter('id'$idprod);
  520.     
  521.         $query->andWhere('(6371 * acos(cos(radians(' $lat ')) * cos(radians(p.latitude)) * cos(radians(p.longitude) - radians(' $lng ')) + sin(radians(' $lat ')) * sin(radians(p.latitude)))) < :distance');
  522.         $query->setParameter('distance'$radius);
  523.         return $query->getQuery()
  524.         ->getResult();
  525.     }
  526.     private function findVisibleQuery()
  527.     {
  528.         return $this->createQueryBuilder('p');
  529.     }
  530. }