/** * Create and save new client account owner * * @param ClientAccount $account * @param $ownerType * @return ClientAccountOwner */ private function createAccountOwnerByType(ClientAccount $account, $ownerType) { $owner = new ClientAccountOwner(); $owner->setOwnerType($ownerType); $owner->setAccount($account); switch ($ownerType) { case ClientAccountOwner::OWNER_TYPE_SELF: $owner->setClient($account->getClient()); break; case ClientAccountOwner::OWNER_TYPE_SPOUSE: $owner->setContact($account->getClient()->getSpouse()); break; case ClientAccountOwner::OWNER_TYPE_OTHER: $contactData = $this->getOtherContact(); $existContact = $this->em->getRepository('WealthbotClientBundle:ClientAdditionalContact')->findOneBy(array('client_id' => $account->getClientId(), 'first_name' => $contactData->getFirstName(), 'middle_name' => $contactData->getMiddleName(), 'last_name' => $contactData->getLastName(), 'relationship' => $contactData->getRelationship(), 'type' => ClientAccountOwner::OWNER_TYPE_OTHER)); if ($contactData->getId() && !$existContact) { $contact = new ClientAdditionalContact(); $contact->setFirstName($contactData->getFirstName()); $contact->setMiddleName($contactData->getMiddleName()); $contact->setLastName($contactData->getLastName()); $contact->setRelationship($contactData->getRelationship()); $contact->setType(ClientAccountOwner::OWNER_TYPE_OTHER); } elseif (!$contactData->getId() && $existContact) { $contact = $existContact; } else { $contact = $contactData; } $contact->setClient($account->getClient()); $owner->setContact($contact); $this->em->persist($contact); $this->em->persist($owner); break; } $account->addAccountOwner($owner); $this->em->persist($owner); $this->em->flush(); return $owner; }