<?php
namespace App\Service\Bonus;
use App\Entity\Bonus;
use App\Repository\BonusRepository;
use App\Service\AbstractService;
use Doctrine\ORM\Tools\Pagination\Paginator;
class BonusService extends AbstractService
{
/**
* @var BonusRepository
*/
protected $repo;
/**
* BonusService constructor.
*/
public function __construct(BonusRepository $repo)
{
parent::__construct($repo);
}
public function getAdminIndex(int $page, int $limit): Paginator
{
$qb = $this->repo->getAdminIndexQueryBuilder();
$qb->setMaxResults($limit);
$qb->setFirstResult($page * $limit - $limit);
return new Paginator($qb->getQuery());
}
public function createBonus(\DateTime $begin, int $percent, int $durationInMinutes): Bonus
{
$end = clone $begin;
$end->modify('+'.$durationInMinutes.' minutes');
$entity = new Bonus();
$entity->setBonusBegin($begin);
$entity->setPercent($percent);
$entity->setBonusEnd($end);
return $entity;
}
public function hasBonusBetweenDates(\DateTimeInterface $begin, \DateTimeInterface $end): bool
{
$qb = $this->repo->getBonusBetweenDatesQueryBuilder($begin, $end);
return count($qb->getQuery()->getResult()) > 0;
}
public function getCurrentBonus(\DateTimeInterface $time): ?Bonus
{
$qb = $this->repo->getBonusBetweenDatesQueryBuilder($time, $time);
$result = $qb->getQuery()->getResult();
if (count($result)) {
return $result[0];
}
return null;
}
}