/** * Processes any meetings where the startDateTime is in the past and it has not been processed yet for * latestActivityDateTime. * * @see BaseJob::run() */ public function run() { $processed = 0; foreach (static::getModelsToProcess(self::$pageSize) as $meeting) { ContactLatestActivityDateTimeObserver::resolveRelatedModelsAndSetLatestActivityDateTime($meeting->activityItems, $meeting->startDateTime, 'Contact'); AccountLatestActivityDateTimeObserver::resolveRelatedModelsAndSetLatestActivityDateTime($meeting->activityItems, $meeting->startDateTime, 'Account'); $meeting->processedForLatestActivity = true; $saved = $meeting->save(); if (!$saved) { throw new FailedToSaveModelException(); } else { $processed++; } } $this->getMessageLogger()->addInfoMessage($this->resolveProcessedMessage($processed)); return true; }
public function testResolveRelatedAccountsAndSetLatestActivityDateTime() { $account = AccountTestHelper::createAccountByNameForOwner('accountt2', Yii::app()->user->userModel); $this->assertNull($account->latestActivityDateTime); $account2 = AccountTestHelper::createAccountByNameForOwner('account3', Yii::app()->user->userModel); $this->assertNull($account2->latestActivityDateTime); $task = TaskTestHelper::createTaskByNameForOwner('task3', Yii::app()->user->userModel); $task->activityItems->add($account); $task->activityItems->add($account2); $this->assertTrue($task->save()); $this->assertNull($task->activityItems[0]->latestActivityDateTime); $this->assertNull($task->activityItems[1]->latestActivityDateTime); $taskId = $task->id; $accountId = $account->id; $account2Id = $account2->id; $task->forget(); $account->forget(); $account2->forget(); //Retrieve the task, so the related activity item is an Item and needs to be casted down $task = Task::getById($taskId); $dateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); AccountLatestActivityDateTimeObserver::resolveRelatedModelsAndSetLatestActivityDateTime($task->activityItems, $dateTime, 'Account'); $task->forget(); $account = Account::getById($accountId); $this->assertEquals($dateTime, $account->latestActivityDateTime); $account2 = Account::getById($account2Id); $this->assertEquals($dateTime, $account2->latestActivityDateTime); }