<?php declare(strict_types=1); /* * This file is part of contao-weinanlieferung-bundle. * * (c) vonRotenberg * * @license commercial */ namespace vonRotenberg\WeinanlieferungBundle\Cron; use Contao\CoreBundle\Monolog\ContaoContext; use Contao\CoreBundle\ServiceAnnotation\CronJob; use Contao\MemberModel; use Doctrine\DBAL\Connection; use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use vonRotenberg\WeinanlieferungBundle\Event\CheckInCompletedEvent; use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungReservationModel; class AutoCheckInJob { /** @var LoggerInterface */ private $logger; /** @var Connection */ private $db; private $eventDispatcher; public function __construct(Connection $db, LoggerInterface $logger, EventDispatcherInterface $eventDispatcher) { $this->logger = $logger; $this->db = $db; $this->eventDispatcher = $eventDispatcher; } public function __invoke(string $scope) { $intThreshold = strtotime('+5 minutes'); $strDefaultNumber = '9999'; $Reservations = WeinanlieferungReservationModel::findFutureBy([ "approved = '1'", "checked_in = ''", "? >= (SELECT tl_vr_wa_slot.time FROM tl_vr_wa_slot WHERE tl_vr_wa_slot.id=tl_vr_wa_reservation.pid)" ],[$intThreshold]); if ($Reservations === null) { return; } foreach ($Reservations as $reservation) { $reservation = $reservation->current(); $memberModel = MemberModel::findById($reservation->uid); if (null === $memberModel) { $this->logger->log( LogLevel::ERROR, sprintf('Could not find member with ID: %s', $reservation->uid), ['contao' => new ContaoContext(__METHOD__, 'AUTO_CHECK_IN')] ); continue; } $time = time(); $reservation->checked_in = '1'; $reservation->checked_in_on = $time; $arrBehaelterNumbers = []; for ($i = 1; $i <= $reservation->unit_amount; $i++) { $arrBehaelterNumbers[] = [ 'behaelter' => $strDefaultNumber, 'member' => $memberModel->memberno ]; } $reservation->behaelter_numbers = json_encode($arrBehaelterNumbers); $reservation->save(); $event = new CheckInCompletedEvent($reservation->row(), $reservation); $this->eventDispatcher->dispatch($event, CheckInCompletedEvent::NAME); } } }