src/Repository/Partner/PartnerCompanyDiscountRepository.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Repository\Partner;
  3. use App\Entity\Cruise\CabinCategory\CabinCategoryType;
  4. use App\Entity\Cruise\CabinCategory\CabinType;
  5. use App\Entity\Cruise\Company\Company;
  6. use App\Entity\Partner\Partner;
  7. use App\Entity\Partner\PartnerCompanyDiscount;
  8. use DateTime;
  9. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  10. use Doctrine\ORM\NonUniqueResultException;
  11. use Doctrine\ORM\Query\Expr\Join;
  12. use Doctrine\ORM\QueryBuilder;
  13. use Doctrine\Persistence\ManagerRegistry;
  14. /**
  15.  * @method PartnerCompanyDiscount|null find($id, $lockMode = null, $lockVersion = null)
  16.  * @method PartnerCompanyDiscount|null findOneBy(array $criteria, array $orderBy = null)
  17.  * @method PartnerCompanyDiscount[]    findAll()
  18.  * @method PartnerCompanyDiscount[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  19.  */
  20. class PartnerCompanyDiscountRepository extends ServiceEntityRepository
  21. {
  22.     public function __construct(ManagerRegistry $registry)
  23.     {
  24.         parent::__construct($registryPartnerCompanyDiscount::class);
  25.     }
  26.     public function findDistinctCompanyNamesByPartner(Partner $partner): array
  27.     {
  28.         $result $this->createQueryBuilder('pcd')
  29.             ->select('c.name')
  30.             ->innerJoin(Company::class, 'c'Join::WITH'c.id = pcd.company')
  31.             ->where('pcd.partner = :partner')
  32.             ->setParameter('partner'$partner)
  33.             ->groupBy('c.name')
  34.             ->getQuery()
  35.             ->getScalarResult();
  36.         return array_column($result'name');
  37.     }
  38.     public function findDistinctCabinTypeNamesByPartner(Partner $partner): array
  39.     {
  40.         $result $this->createQueryBuilder('pcd')
  41.             ->select('ct.name')
  42.             ->innerJoin(CabinCategoryType::class, 'cct'Join::WITH'cct.id = pcd.cabinCategoryType')
  43.             ->innerJoin(CabinType::class, 'ct'Join::WITH'ct.id = cct.cabinType')
  44.             ->where('pcd.partner = :partner')
  45.             ->setParameter('partner'$partner)
  46.             ->groupBy('ct.name')
  47.             ->getQuery()
  48.             ->getScalarResult();
  49.         return array_column($result'name');
  50.     }
  51.     public function findDiscountAndCabinTypeByPartner(Partner $partner): array
  52.     {
  53.         return $this->createQueryBuilder('pcd')
  54.             ->select('ct.name as cabintypeName, cct.name as cabinCategoryTypeName, c.name as companyName, pcd.rate')
  55.             ->innerJoin(CabinCategoryType::class, 'cct'Join::WITH'cct.id = pcd.cabinCategoryType')
  56.             ->innerJoin(CabinType::class, 'ct'Join::WITH'ct.id = cct.cabinType')
  57.             ->innerJoin(Company::class, 'c'Join::WITH'c.id = pcd.company')
  58.             ->where('pcd.partner = :partner')
  59.             ->setParameter('partner'$partner)
  60.             ->getQuery()
  61.             ->getScalarResult();
  62.     }
  63.     /**
  64.      * @throws NonUniqueResultException
  65.      */
  66.     public function findDiscountByPartnerAndCompanyAndCabinType(Partner $partnerCabinType $cabinTypeCompany $company): ?PartnerCompanyDiscount
  67.     {
  68.         return $this->createQueryBuilder('pcd')
  69.             ->where('pcd.partner = :partner')
  70.             ->andWhere('pcd.company = :company')
  71.             ->andWhere('pcd.cabinType = :cabinType')
  72.             ->setParameters([
  73.                 'partner' => $partner,
  74.                 'company' => $company,
  75.                 'cabinType' => $cabinType,
  76.             ])
  77.             ->getQuery()
  78.             ->getOneOrNullResult();
  79.     }
  80.     /**
  81.      * @throws NonUniqueResultException
  82.      */
  83.     public function findByPartnerAndCompanyAndCabinTypeAtDate(Partner $partnerCompany $companyCabinType $cabinTypeDateTime $date): ?PartnerCompanyDiscount
  84.     {
  85.         $qb $this->createQueryBuilder('pcd');
  86.         return $qb->where($qb->expr()->eq('pcd.partner'':partner'))
  87.             ->andWhere($qb->expr()->eq('pcd.company'':company'))
  88.             ->andWhere($qb->expr()->eq('pcd.cabinType'':cabinType'))
  89.             ->andWhere($qb->expr()->andX(
  90.                 $qb->expr()->orX(
  91.                     $qb->expr()->lte('pcd.startsAt'':date'),
  92.                     $qb->expr()->isNull('pcd.startsAt')
  93.                 ),
  94.                 $qb->expr()->orX(
  95.                     $qb->expr()->gte('pcd.endsAt'':date'),
  96.                     $qb->expr()->isNull('pcd.endsAt')
  97.                 )
  98.             ))
  99.             ->setParameter('partner'$partner)
  100.             ->setParameter('company'$company)
  101.             ->setParameter('cabinType'$cabinType)
  102.             ->setParameter('date'$date->format('Y-m-d'))
  103.             ->orderBy('pcd.id''DESC')
  104.             ->setMaxResults(1)
  105.             ->getQuery()
  106.             ->getOneOrNullResult();
  107.     }
  108.     /**
  109.      * @throws NonUniqueResultException
  110.      */
  111.     public function findDefaultByPartnerAndCompanyAndCabinType(Partner $partnerCompany $companyCabinType $cabinType): ?PartnerCompanyDiscount
  112.     {
  113.         $qb $this->createQueryBuilder('pcd');
  114.         return $qb->where($qb->expr()->eq('pcd.partner'':partner'))
  115.             ->andWhere($qb->expr()->eq('pcd.company'':company'))
  116.             ->andWhere($qb->expr()->eq('pcd.cabinType'':cabinType'))
  117.             ->andWhere($qb->expr()->eq('pcd.isDefault'':isDefault'))
  118.             ->andWhere($qb->expr()->eq('pcd.isArchived'':isArchived'))
  119.             ->setParameter('partner'$partner)
  120.             ->setParameter('company'$company)
  121.             ->setParameter('cabinType'$cabinType)
  122.             ->setParameter('isDefault'true)
  123.             ->setParameter('isArchived'false)
  124.             ->orderBy('pcd.id''DESC')
  125.             ->setMaxResults(1)
  126.             ->getQuery()
  127.             ->getOneOrNullResult();
  128.     }
  129.     /**
  130.      * @throws NonUniqueResultException
  131.      */
  132.     public function findByPartnerAndCompanyAtDate(Partner $partnerCompany $companyDateTime $date): ?PartnerCompanyDiscount
  133.     {
  134.         $qb $this->createQueryBuilder('pcd');
  135.         return $qb->where($qb->expr()->eq('pcd.partner'':partner'))
  136.             ->andWhere($qb->expr()->eq('pcd.company'':company'))
  137.             ->andWhere($qb->expr()->isNull('pcd.cabinType'))
  138.             ->andWhere($qb->expr()->andX(
  139.                 $qb->expr()->orX(
  140.                     $qb->expr()->lte('pcd.startsAt'':date'),
  141.                     $qb->expr()->isNull('pcd.startsAt')
  142.                 ),
  143.                 $qb->expr()->orX(
  144.                     $qb->expr()->gte('pcd.endsAt'':date'),
  145.                     $qb->expr()->isNull('pcd.endsAt')
  146.                 )
  147.             ))
  148.             ->setParameter('partner'$partner)
  149.             ->setParameter('company'$company)
  150.             ->setParameter('date'$date->format('Y-m-d'))
  151.             ->orderBy('pcd.id''DESC')
  152.             ->setMaxResults(1)
  153.             ->getQuery()
  154.             ->getOneOrNullResult();
  155.     }
  156.     /**
  157.      * @throws NonUniqueResultException
  158.      */
  159.     public function findDefaultByPartnerAndCompany(Partner $partnerCompany $company): ?PartnerCompanyDiscount
  160.     {
  161.         $qb $this->createQueryBuilder('pcd');
  162.         return $qb->where($qb->expr()->eq('pcd.partner'':partner'))
  163.             ->andWhere($qb->expr()->eq('pcd.company'':company'))
  164.             ->andWhere($qb->expr()->isNull('pcd.cabinType'))
  165.             ->andWhere($qb->expr()->eq('pcd.isDefault'':isDefault'))
  166.             ->andWhere($qb->expr()->eq('pcd.isArchived'':isArchived'))
  167.             ->setParameter('partner'$partner)
  168.             ->setParameter('company'$company)
  169.             ->setParameter('isDefault'true)
  170.             ->setParameter('isArchived'false)
  171.             ->orderBy('pcd.id''DESC')
  172.             ->setMaxResults(1)
  173.             ->getQuery()
  174.             ->getOneOrNullResult();
  175.     }
  176.     public function findWithActivePartnerAndWebsite(): array
  177.     {
  178.         $qb $this->createQueryBuilder('pcd');
  179.         return $qb
  180.             ->join('pcd.partner''p')
  181.             ->where($qb->expr()->eq('p.isActive'true))
  182.             ->andWhere($qb->expr()->eq('p.withWebsite'true))
  183.             ->getQuery()
  184.             ->getResult()
  185.         ;
  186.     }
  187.     /**
  188.      * @return QueryBuilder
  189.      */
  190.     public function getQueryBuilderForGrid(): QueryBuilder
  191.     {
  192.         $qb $this->createQueryBuilder('pcd');
  193.         return $qb
  194.             ->join('pcd.partner''p')
  195.             ->orderBy('p.name''ASC');
  196.     }
  197. }