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