/**
  * @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']]];
 }
Esempio n. 2
0
 /**
  * @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;
 }
Esempio n. 3
0
 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();
 }
Esempio n. 5
0
 /**
  * {@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();
 }
Esempio n. 6
0
 /**
  * {@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();
 }
Esempio n. 7
0
 /**
  * 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;
 }
Esempio n. 8
0
 /**
  * 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;
 }
Esempio n. 10
0
 /**
  * @param ContactEmail $entity
  * @param Contact $contact
  */
 protected function onSuccess(ContactEmail $entity, Contact $contact)
 {
     $entity->setOwner($contact);
     $this->manager->persist($entity);
     $this->manager->flush();
 }
Esempio n. 11
0
 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]];
 }