/** * @return array */ public function fieldsDataProvider() { $email = new ContactEmail('mail@example'); $email->setPrimary(true); $contact = new Contact(); $contact->addEmail($email); return [[null, json_encode([]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, []], [[], json_encode([]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, []], [['email' => 'email'], json_encode([]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, ['mail@example']], [['email' => 'email'], json_encode(['columns' => [['name' => 'primaryEmail']]]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, []], [['email' => 'email'], json_encode(['columns' => [['name' => 'primaryEmail']]]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, []], [['email' => 'email'], json_encode(['columns' => [['name' => 'email']]]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_PHONE, []], [['email' => 'email'], json_encode(['columns' => [['name' => 'email'], ['name' => 'phone']]]), $contact, ContactInformationFieldsProvider::CONTACT_INFORMATION_SCOPE_EMAIL, ['mail@example']]]; }
/** * @param string $email * @param bool $primary * * @return ContactEmail */ protected function createContactEmail($email, $primary = false) { $entity = new ContactEmail($email); if ($primary) { $entity->setPrimary(true); } return $entity; }
public function testGetOpportunityEmail() { $salesFunnel = new SalesFunnel(); $email = new ContactEmail(); $email->setEmail('*****@*****.**'); $contact = new Contact(); $contact->addEmail($email); $contact->setPrimaryEmail($email); $opportunity = new Opportunity(); $opportunity->setContact($contact); $salesFunnel->setOpportunity($opportunity); $this->assertEquals('*****@*****.**', $salesFunnel->getEmail()); }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $user = $manager->getRepository('OroUserBundle:User')->findOneByUsername('admin'); $organization = $manager->getRepository('OroOrganizationBundle:Organization')->getFirst(); foreach ($this->contactsData as $contactData) { $contact = new Contact(); $contact->setOwner($user); $contact->setOrganization($organization); $contact->setFirstName($contactData['firstName']); $contact->setLastName($contactData['lastName']); $email = new ContactEmail(); $email->setEmail($contactData['email']); $email->setPrimary(true); $contact->addEmail($email); $manager->persist($contact); } $manager->flush(); }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { $contact = $this->getReference('Contact_' . LoadContactEntitiesData::FIRST_ENTITY_NAME); foreach ($this->contactEmailData as $contactEmailData) { $contactEmail = new ContactEmail(); $contactEmail->setPrimary($contactEmailData['primary']); $contactEmail->setOwner($contact); $contactEmail->setEmail($contactEmailData['email']); $this->setReference('ContactEmail_Several_' . $contactEmailData['email'], $contactEmail); $manager->persist($contactEmail); } $contact2 = $this->getReference('Contact_' . LoadContactEntitiesData::SECOND_ENTITY_NAME); $contactEmail = new ContactEmail(); $contactEmail->setPrimary($this->contactEmailData[0]['primary']); $contactEmail->setOwner($contact2); $contactEmail->setEmail($this->contactEmailData[0]['email']); $this->setReference('ContactEmail_Single_' . $this->contactEmailData[0]['email'], $contactEmail); $manager->persist($contactEmail); $manager->flush(); }
/** * {@inheritdoc} */ public function load(ObjectManager $manager) { /** @var Customer $customer */ $customer = $this->getReference('customer'); $email = new ContactEmail(); $email->setPrimary(true); $email->setEmail($customer->getEmail()); $contact = new Contact(); $contact->setFirstName($customer->getFirstName()); $contact->setLastName($customer->getLastName()); $contact->setGender($customer->getGender()); $contact->addEmail($email); /** @var UserManager $userManager */ $userManager = $this->container->get('oro_user.manager'); $admin = $userManager->loadUserByUsername('admin'); $this->setReference('admin_user', $admin); $contact->setOwner($admin); $contact->setOrganization($manager->getRepository('OroOrganizationBundle:Organization')->getFirst()); $customer->setContact($contact); $this->setReference('contact', $contact); $manager->persist($contact); $manager->flush(); }
/** * Create a Contact * * @param array $data * @param int $iteration * @return Contact */ private function createContact(array $data, $iteration = 0) { $contact = new Contact(); $contact->setFirstName($data['GivenName']); $lastName = $data['Surname']; if ($iteration) { $lastName .= '_' . $iteration; } $contact->setLastName($lastName); $contact->setNamePrefix($data['Title']); $phone = new ContactPhone($data['TelephoneNumber']); $phone->setPrimary(true); $contact->addPhone($phone); $email = new ContactEmail($data['EmailAddress']); $email->setPrimary(true); $contact->addEmail($email); $date = \DateTime::createFromFormat('m/d/Y', $data['Birthday']); $contact->setBirthday($date); /** @var ContactAddress $address */ $address = new ContactAddress(); $address->setCity($data['City']); $address->setStreet($data['StreetAddress']); $address->setPostalCode($data['ZipCode']); $address->setFirstName($data['GivenName']); $address->setLastName($data['Surname']); $address->setPrimary(true); $isoCode = $data['Country']; $country = array_filter($this->countries, function (Country $a) use($isoCode) { return $a->getIso2Code() == $isoCode; }); $country = array_values($country); /** @var Country $country */ $country = $country[0]; $idRegion = $data['State']; /** @var Collection $regions */ $regions = $country->getRegions(); $region = $regions->filter(function (Region $a) use($idRegion) { return $a->getCode() == $idRegion; }); $address->setCountry($country); if (!$region->isEmpty()) { $address->setRegion($region->first()); } $contact->addAddress($address); return $contact; }
/** * Do merge of non-scalar fields such as emails or addresses * * @param Customer $remoteData * @param Customer $localData * @param Contact $contact * * @SuppressWarnings(PHPMD) * TODO Should be fixed during CRM-1185 */ public function mergeObjects(Customer $remoteData, Customer $localData, Contact $contact) { // process emails $email = $contact->getPrimaryEmail(); if ($email) { // if primary email exists try to merge $this->mergeScalars(['email'], $remoteData, $localData, $email); } elseif ($this->isRemotePrioritized()) { // if contact hasn't email and remote data has greater priority, then create it $email = new ContactEmail(); $email->setPrimary(true); $email->setEmail($remoteData->getEmail()); $contact->addEmail($email); } // process addresses $addresses = $contact->getAddresses(); $isLocalTypesChanged = $this->isLocalAddressesTypesChanged($addresses, $localData); foreach ($addresses as $address) { // find in update local data if $localAddress = $this->getCustomerAddressByContactAddress($localData, $address); if (!$localAddress && $this->isRemotePrioritized()) { $contact->removeAddress($address); } elseif ($localAddress) { $remoteAddress = $this->getCorrespondentRemoteAddress($remoteData, $localAddress); if ($remoteAddress) { // do update $this->mergeScalars($this->addressScalarFields, $remoteAddress, $localAddress, $address); if ($localAddress->getCountry()->getIso2Code() === $address->getCountry()->getIso2Code() || $this->isRemotePrioritized()) { $address->setCountry($remoteAddress->getCountry()); } if ($this->isRegionChanged($remoteAddress, $address) || $this->isRemotePrioritized()) { $address->setRegion($remoteAddress->getRegion()); if ($address->getRegion()) { $address->setRegionText(null); } } if ($this->isRemotePrioritized() || !$isLocalTypesChanged) { $address->setTypes($remoteAddress->getTypes()); } $contactPhone = null; if ($localAddress->getContactPhone()) { $contactPhone = $this->getContactPhoneFromContact($contact, $localAddress->getContactPhone()); } if ($contactPhone) { $this->mergeScalars(['phone'], $remoteAddress, $localAddress, $contactPhone); } elseif ($this->isRemotePrioritized() && $remoteAddress->getPhone() !== 'no phone') { $contactPhone = new ContactPhone(); $contactPhone->setPhone($remoteAddress->getPhone()); $contactPhone->setPrimary(!$contact->getPrimaryPhone()); $contact->addPhone($contactPhone); $localAddress->setContactPhone($contactPhone); } $this->prepareAddress($address); if (!$address->getCountry()) { $contact->removeAddress($address); } } else { $contact->removeAddress($address); } } } /** @var ArrayCollection|Address[] $newAddresses */ $newAddresses = $this->getOrphanRemoteAddresses($remoteData, $localData); foreach ($newAddresses as $address) { /* * Will create new address if remote data has higher priority and means * that address removed from contact and remove should be cancelled. * Another case if it's newly created address, then process it anyway */ if ($this->isRemotePrioritized() || !$address->getId()) { $contactAddress = new ContactAddress(); $this->mergeScalars($this->addressScalarFields, $address, $contactAddress, $contactAddress); $contactAddress->setCountry($address->getCountry()); $contactAddress->setRegion($address->getRegion()); $contactAddress->setTypes($address->getTypes()); $this->prepareAddress($contactAddress); if ($contactAddress->getCountry()) { $contact->addAddress($contactAddress); $address->setContactAddress($contactAddress); } if ($address->getContactPhone()) { $address->getContactPhone()->setOwner($contact); } } } /** @var ContactAddress $toBePrimary */ $toBePrimary = $contact->getAddresses()->first(); if (!$contact->getPrimaryAddress() && $toBePrimary) { $toBePrimary->setPrimary(true); } // Set contact primary phone if none if (!$contact->getPrimaryPhone()) { if ($contact->getPhones()->count() > 0) { $contact->getPhones()->first()->setPrimary(true); } } }
/** * {@inheritdoc} * * @param ContactEmail $value */ public function validate(ContactEmail $value) { return $value->isPrimary() && $value->getOwner()->getEmails()->count() === 1; }
/** * @param ContactEmail $entity * @param Contact $contact */ protected function onSuccess(ContactEmail $entity, Contact $contact) { $entity->setOwner($contact); $this->manager->persist($entity); $this->manager->flush(); }
public function dataTest() { $testContact = new ExtendContact(); $testContactAddress = new ContactAddress(); $testContactEmail = new ContactEmail(); $testContactPhone = new ContactPhone(); $testContactAddress->setOwner($testContact); $testContactEmail->setOwner($testContact); $testContactPhone->setOwner($testContact); $testMagentoCustomer = new ExtendCustomer(); $channel = new Channel(); $channel->getSynchronizationSettingsReference()->offsetSet('isTwoWaySyncEnabled', true); $channel->setName('test'); $channel->setEnabled(true); $testMagentoCustomer->setChannel($channel); return ['Updated contact' => [$testContact, $testMagentoCustomer, $channel, [], [$testContact], [], true, true, true, true, true], 'Inserted contact' => [$testContact, $testMagentoCustomer, $channel, [$testContact], [], [], true, false, false, true, false], 'Deleted contact' => [$testContact, $testMagentoCustomer, $channel, [], [], [$testContact], true, true, true, false, true], 'Updated contact with testContactAddress' => [$testContact, $testMagentoCustomer, $channel, [], [$testContact, $testContactAddress], [], true, true, true, true, true], 'Test process Contact Address' => [$testContact, $testMagentoCustomer, $channel, [], [$testContactAddress], [], true, true, true, false, true], 'Test deleted Contact Address' => [$testContact, $testMagentoCustomer, $channel, [], [], [$testContactAddress], true, true, true, false, true]]; }