/**
  * @param MemberActivity $memberActivity
  */
 protected function updateStatistics(MemberActivity $memberActivity)
 {
     $mailChimpCampaign = $memberActivity->getCampaign();
     $emailCampaign = $mailChimpCampaign->getEmailCampaign();
     $marketingList = $mailChimpCampaign->getStaticSegment()->getMarketingList();
     $relatedEntities = $this->getMarketingListEntitiesByEmail($marketingList, $memberActivity->getEmail());
     $em = $this->registry->getManager();
     foreach ($relatedEntities as $relatedEntity) {
         $emailCampaignStatistics = $this->campaignStatisticsConnector->getStatisticsRecord($emailCampaign, $relatedEntity);
         $this->incrementStatistics($memberActivity, $emailCampaignStatistics);
         $em->persist($emailCampaignStatistics);
     }
 }
 /**
  * Member Activity is added only for known member.
  * There can not be two send activities in campaign for same member.
  *
  * @param MemberActivity $entity
  * @return MemberActivity
  */
 protected function processEntity($entity)
 {
     if ($this->logger) {
         $this->logger->info(sprintf('Processing MailChimp Member Activity [email=%s, action=%s]', $entity->getEmail(), $entity->getAction()));
     }
     $channel = $this->databaseHelper->getEntityReference($entity->getChannel());
     /** @var Campaign $campaign */
     $campaign = $this->findExistingEntity($entity->getCampaign());
     $member = $this->findExistingMember($entity->getMember(), $channel, $campaign);
     $entity->setChannel($channel)->setCampaign($campaign)->setMember($member);
     if ($member && !$this->isSkipped($entity)) {
         if (!$entity->getActivityTime()) {
             $entity->setActivityTime($campaign->getSendTime());
         }
         $this->context->incrementAddCount();
         if ($this->logger) {
             $this->logger->info(sprintf('    Activity added for MailChimp Member [id=%d]', $member->getId()));
         }
         return $entity;
     } elseif ($this->logger) {
         $this->logger->info('    Activity skipped');
     }
     return null;
 }
 /**
  * @param MemberActivity $memberActivity
  * @param Channel $channel
  * @param Campaign $campaign
  * @return Member|null
  */
 protected function findExistingMember(MemberActivity $memberActivity, Channel $channel, Campaign $campaign)
 {
     $searchCondition = ['channel' => $channel, 'subscribersList' => $campaign->getSubscribersList()];
     $member = $memberActivity->getMember();
     $email = $member ? $member->getEmail() : $memberActivity->getEmail();
     if ($member && ($originId = $member->getOriginId())) {
         $searchCondition['originId'] = $originId;
     } elseif ($email) {
         $searchCondition['email'] = $email;
     } else {
         return null;
     }
     return $this->findEntityByIdentityValues('OroCRM\\Bundle\\MailChimpBundle\\Entity\\Member', $searchCondition);
 }