Update queue counts or delete scheduled task
[MAILPOET-3782]
This commit is contained in:
committed by
Veljko V
parent
bafb41c94e
commit
9aae441d99
@@ -75,11 +75,20 @@ class ReEngagementScheduler {
|
||||
}
|
||||
|
||||
$scheduledTask = $this->scheduleTask($email);
|
||||
$this->enqueueSubscribers($email, $scheduledTask, $intervalUnit, $intervalValue);
|
||||
$enqueuedCount = $this->enqueueSubscribers($email, $scheduledTask, $intervalUnit, $intervalValue);
|
||||
|
||||
if ($enqueuedCount) {
|
||||
$this->createSendingQueue($email, $scheduledTask, $enqueuedCount);
|
||||
return $scheduledTask;
|
||||
} else {
|
||||
// Nothing to send
|
||||
$this->scheduledTasksRepository->remove($scheduledTask);
|
||||
$this->scheduledTasksRepository->flush();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private function scheduleTask(NewsletterEntity $email): ScheduledTaskEntity {
|
||||
private function scheduleTask(NewsletterEntity $email) {
|
||||
// Scheduled task
|
||||
$scheduledTask = new ScheduledTaskEntity();
|
||||
$scheduledTask->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
@@ -87,19 +96,27 @@ class ReEngagementScheduler {
|
||||
$scheduledTask->setType(Sending::TASK_TYPE);
|
||||
$scheduledTask->setPriority(SendingQueueEntity::PRIORITY_MEDIUM);
|
||||
$this->scheduledTasksRepository->persist($scheduledTask);
|
||||
// Sending queue
|
||||
$sendingQueue = new SendingQueueEntity();
|
||||
$sendingQueue->setTask($scheduledTask);
|
||||
$sendingQueue->setNewsletter($email);
|
||||
$this->scheduledTasksRepository->persist($sendingQueue);
|
||||
$this->scheduledTasksRepository->flush();
|
||||
return $scheduledTask;
|
||||
}
|
||||
|
||||
private function createSendingQueue(NewsletterEntity $email, ScheduledTaskEntity $scheduledTask, int $countToProcess): SendingQueueEntity {
|
||||
// Sending queue
|
||||
$sendingQueue = new SendingQueueEntity();
|
||||
$sendingQueue->setTask($scheduledTask);
|
||||
$sendingQueue->setNewsletter($email);
|
||||
$sendingQueue->setCountToProcess($countToProcess);
|
||||
$sendingQueue->setCountTotal($countToProcess);
|
||||
$this->entityManager->persist($sendingQueue);
|
||||
$this->entityManager->flush();
|
||||
return $sendingQueue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds subscribers that should receive re-engagement email and saves scheduled tasks subscribers
|
||||
* @return int Count of enqueued subscribers
|
||||
*/
|
||||
private function enqueueSubscribers(NewsletterEntity $email, ScheduledTaskEntity $scheduledTask, string $intervalUnit, int $intervalValue) {
|
||||
private function enqueueSubscribers(NewsletterEntity $email, ScheduledTaskEntity $scheduledTask, string $intervalUnit, int $intervalValue): int {
|
||||
// Parameters for scheduled task subscribers query
|
||||
$thresholdDate = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'));
|
||||
if ($intervalUnit === 'months') {
|
||||
@@ -134,5 +151,6 @@ class ReEngagementScheduler {
|
||||
$statement->bindParam('newsletterId', $newsletterId, ParameterType::INTEGER);
|
||||
|
||||
$statement->executeQuery();
|
||||
return $statement->rowCount();
|
||||
}
|
||||
}
|
||||
|
@@ -59,6 +59,12 @@ class ReEngagementSchedulerTest extends \MailPoetTest {
|
||||
expect($scheduled)->count(0);
|
||||
}
|
||||
|
||||
public function testItDoesntScheduleAnythingIfThereAreNoSubscribersToSendTo() {
|
||||
$this->createReEngagementEmail(5);
|
||||
$scheduled = $this->scheduler->scheduleAll();
|
||||
expect($scheduled)->count(0);
|
||||
}
|
||||
|
||||
public function testItScheduleEmailWithCorrectSubscribers() {
|
||||
$beforeCheckInterval = Carbon::now();
|
||||
$beforeCheckInterval->subMonths(10);
|
||||
@@ -119,6 +125,12 @@ class ReEngagementSchedulerTest extends \MailPoetTest {
|
||||
$this->assertInstanceOf(\DateTimeInterface::class, $scheduledAt);
|
||||
expect($scheduledAt->getTimestamp())->equals(Carbon::now()->getTimestamp(), 1);
|
||||
expect($task->getSubscribers()->count())->equals(2);
|
||||
|
||||
$sendingQueue = $this->entityManager->getRepository(SendingQueueEntity::class)->findOneBy(['task' => $task]);
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueue);
|
||||
expect($sendingQueue->getCountToProcess())->equals(2);
|
||||
expect($sendingQueue->getCountTotal())->equals(2);
|
||||
expect($sendingQueue->getCountProcessed())->equals(0);
|
||||
}
|
||||
|
||||
private function createReEngagementEmail(int $monthsAfter, string $status = NewsletterEntity::STATUS_ACTIVE) {
|
||||
|
Reference in New Issue
Block a user