Process queues to save statistics
[MAILPOET-3765]
This commit is contained in:
@@ -74,6 +74,19 @@ class ScheduledTasksRepository extends Repository {
|
||||
return $queryBuilder->getQuery()->getOneOrNullResult();
|
||||
}
|
||||
|
||||
public function findPreviousTask(ScheduledTaskEntity $task): ?ScheduledTaskEntity {
|
||||
return $this->doctrineRepository->createQueryBuilder('st')
|
||||
->select('st')
|
||||
->where('st.type = :type')
|
||||
->setParameter('type', $task->getType())
|
||||
->andWhere('st.createdAt < :created')
|
||||
->setParameter('created', $task->getCreatedAt())
|
||||
->orderBy('st.scheduledAt', 'DESC')
|
||||
->setMaxResults(1)
|
||||
->getQuery()
|
||||
->getOneOrNullResult();
|
||||
}
|
||||
|
||||
protected function getEntityClassName() {
|
||||
return ScheduledTaskEntity::class;
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ namespace MailPoet\Newsletter\Sending;
|
||||
|
||||
use MailPoet\Doctrine\Repository;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
@@ -45,4 +46,36 @@ class SendingQueuesRepository extends Repository {
|
||||
if (is_null($task)) return false;
|
||||
return $this->scheduledTaskSubscribersRepository->isSubscriberProcessed($task, $subscriber);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SendingQueueEntity[]
|
||||
*/
|
||||
public function findAllForSubscriberSentBetween(
|
||||
SubscriberEntity $subscriber,
|
||||
?\DateTimeInterface $dateTo,
|
||||
?\DateTimeInterface $dateFrom
|
||||
): array {
|
||||
$qb = $this->entityManager->createQueryBuilder()
|
||||
->select('s, n')
|
||||
->from(SendingQueueEntity::class, 's')
|
||||
->join('s.task', 't')
|
||||
->join('t.subscribers', 'tsub')
|
||||
->join('tsub.subscriber', 'sub')
|
||||
->join('s.newsletter', 'n')
|
||||
->where('t.status = :status')
|
||||
->setParameter('status', ScheduledTaskEntity::STATUS_COMPLETED)
|
||||
->andWhere('t.type = :sendingType')
|
||||
->setParameter('sendingType', 'sending')
|
||||
->andWhere('sub.id = :subscriber')
|
||||
->setParameter('subscriber', $subscriber);
|
||||
if ($dateTo) {
|
||||
$qb->andWhere('t.updatedAt < :dateTo')
|
||||
->setParameter('dateTo', $dateTo);
|
||||
}
|
||||
if ($dateFrom) {
|
||||
$qb->andWhere('t.updatedAt > :dateFrom')
|
||||
->setParameter('dateFrom', $dateFrom);
|
||||
}
|
||||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user