/**
  * 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);
 }