/**
  * @param CEvent $event
  */
 public function processFromContactSide(CEvent $event)
 {
     $model = $event->sender;
     if (isset($model->originalAttributeValues['account'])) {
         if ($model->originalAttributeValues['account'][1] > 0) {
             //lookup to see if there is a 'primary' affiliation for old acc/con pairing and unmark as primary
             $accountContactAffiliations = AccountContactAffiliation::getPrimaryByAccountIdAndContactId((int) $model->originalAttributeValues['account'][1], (int) $model->id);
             //shouldn't be more than one, but if there is unset all of them
             foreach ($accountContactAffiliations as $accountContactAffiliation) {
                 $accountContactAffiliation->primary = false;
                 $accountContactAffiliation->save();
             }
         }
         //lookup and see if there is an affiliation for the new acc/con pairing
         if ($model->account->id > 0) {
             $accountContactAffiliations = AccountContactAffiliation::getByAccountAndContact($model->account, $model);
             //Shouldn't be more than one, but if there is, just mark the first primary.
             if (count($accountContactAffiliations) > 0) {
                 //If so - mark primary.
                 $accountContactAffiliations[0]->primary = true;
                 $accountContactAffiliations[0]->save();
             } else {
                 //If not, create and mark primary.
                 $accountContactAffiliation = new AccountContactAffiliation();
                 $accountContactAffiliation->primary = true;
                 $accountContactAffiliation->contact = $model;
                 $accountContactAffiliation->account = $model->account;
                 if ($accountContactAffiliation->isAttributeRequired('role') && $accountContactAffiliation->role->value == null) {
                     $accountContactAffiliation->role->value = $this->resolveRoleValue($accountContactAffiliation);
                 }
                 $accountContactAffiliation->save();
             }
         }
     }
 }
 public function testGetByAccountAndContact()
 {
     $account = AccountTestHelper::createAccountByNameForOwner('secondAccount', Yii::app()->user->userModel);
     $contact = ContactTestHelper::createContactByNameForOwner('secondContact', Yii::app()->user->userModel);
     $this->assertEquals(0, count(AccountContactAffiliation::getAll()));
     $accountContactAffiliation = new AccountContactAffiliation();
     $accountContactAffiliation->account = $account;
     $accountContactAffiliation->contact = $contact;
     $this->assertTrue($accountContactAffiliation->save());
     $accountContactAffiliations = AccountContactAffiliation::getByAccountAndContact($account, $contact);
     $this->assertEquals(1, count($accountContactAffiliation));
     $this->assertTrue($accountContactAffiliation->isSame($accountContactAffiliations[0]));
 }