<?php
namespace App\Repository\Product;
use App\Entity\Booking\Cabin;
use App\Entity\Booking\Quote;
use App\Entity\Product\AutoProductVariant;
use App\Repository\ApplicationFilterRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Exception;
/**
* @method AutoProductVariant|null find($id, $lockMode = null, $lockVersion = null)
* @method AutoProductVariant|null findOneBy(array $criteria, array $orderBy = null)
* @method AutoProductVariant[] findAll()
* @method AutoProductVariant[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class AutoProductVariantRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, AutoProductVariant::class);
}
const TYPE_PRICE_FIX = "fixe";
const TYPE_PRICE_BY_DAY = "byDay";
const TYPE_PRICE_BY_NIGHT = "byNight";
const ATTRIBUTION_CABIN = "cabin";
const ATTRIBUTION_PASSENGER = "passenger";
const SPECIFICITY_INCLUDED = "included";
const SPECIFICITY_NOT_INCLUDED = "notIncluded";
const SPECIFICITY_OFFERED = "offered";
/**
* @throws Exception
*/
public function findByQuoteAndCabin(Quote $quote, Cabin $cabin)
{
$qb = $this->createQueryBuilder('apv')->innerJoin('apv.applicationFilter', 'af');
$qb = ApplicationFilterRepository::addApplicationFilterQueryBuilderForObject($qb, $quote);
$qb = ApplicationFilterRepository::addApplicationFilterQueryBuilderForCruiseHistory($qb, $quote->getCruiseHistory());
$qb = ApplicationFilterRepository::addApplicationFilterQueryBuilderForCabin($qb, $cabin);
return $qb->getQuery()->getResult();
}
public function findActives(): array
{
$qb = $this->createQueryBuilder('apv');
return $qb
->join('apv.applicationFilter', 'af')
->where($qb->expr()->eq('af.active', true))
->andWhere($qb->expr()->orX(
$qb->expr()->isNull('af.applicationDateEnd'),
$qb->expr()->gte('af.applicationDateEnd', ':now')
))
->setParameter('now', new \DateTime())
->getQuery()
->getResult();
}
}