Spaces:
No application file
No application file
namespace Mautic\ReportBundle\Scheduler\Model; | |
use Doctrine\ORM\EntityManager; | |
use Mautic\ReportBundle\Entity\Report; | |
use Mautic\ReportBundle\Entity\Scheduler; | |
use Mautic\ReportBundle\Entity\SchedulerRepository; | |
use Mautic\ReportBundle\Scheduler\Date\DateBuilder; | |
use Mautic\ReportBundle\Scheduler\Exception\NoScheduleException; | |
class SchedulerPlanner | |
{ | |
/** | |
* @var SchedulerRepository | |
*/ | |
private \Doctrine\ORM\EntityRepository $schedulerRepository; | |
public function __construct( | |
private DateBuilder $dateBuilder, | |
private EntityManager $entityManager | |
) { | |
$this->schedulerRepository = $entityManager->getRepository(Scheduler::class); | |
} | |
public function computeScheduler(Report $report): void | |
{ | |
$this->removeSchedulerOfReport($report); | |
$this->planScheduler($report); | |
} | |
private function planScheduler(Report $report): void | |
{ | |
try { | |
$date = $this->dateBuilder->getNextEvent($report); | |
} catch (NoScheduleException) { | |
return; | |
} | |
$scheduler = new Scheduler($report, $date); | |
$this->entityManager->persist($scheduler); | |
$this->entityManager->flush(); | |
} | |
private function removeSchedulerOfReport(Report $report): void | |
{ | |
$scheduler = $this->schedulerRepository->getSchedulerByReport($report); | |
if (!$scheduler) { | |
return; | |
} | |
$this->entityManager->remove($scheduler); | |
$this->entityManager->flush(); | |
} | |
} | |