isNew() && $entity->isAttributeChanged('parentId')) { $entity->set('accountId', null); } if ($entity->isAttributeChanged('parentId') || $entity->isAttributeChanged('parentType')) { $this->processParentChanged($entity); } parent::beforeSave($entity, $options); if (!$this->config->get('eventAssignedUserIsAttendeeDisabled')) { if ($entity->hasLinkMultipleField('assignedUsers')) { /** @var string[] */ $assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers'); foreach ($assignedUserIdList as $assignedUserId) { $entity->addLinkMultipleId('users', $assignedUserId); $entity->setLinkMultipleName('users', $assignedUserId, $entity->getLinkMultipleName('assignedUsers', $assignedUserId) ); } } else { $assignedUserId = $entity->get('assignedUserId'); if ($assignedUserId) { $entity->addLinkMultipleId('users', $assignedUserId); $entity->setLinkMultipleName('users', $assignedUserId, $entity->get('assignedUserName')); } } } if ($entity->isNew()) { $currentUserId = $this->user->getId(); if ( $entity->hasLinkMultipleId('users', $currentUserId) && ( !$entity->getLinkMultipleColumn('users', 'status', $currentUserId) || $entity->getLinkMultipleColumn('users', 'status', $currentUserId) === 'None' ) ) { $entity->setLinkMultipleColumn('users', 'status', $currentUserId, 'Accepted'); } } } protected function processParentChanged(Entity $entity): void { $parent = null; $parentId = $entity->get('parentId'); $parentType = $entity->get('parentType'); if ($parentId && $parentType && $this->entityManager->hasRepository($parentType)) { $columnList = ['id', 'name']; $defs = $this->entityManager->getMetadata()->getDefs(); if ($defs->getEntity($parentType)->hasAttribute('accountId')) { $columnList[] = 'accountId'; } if ($parentType === 'Lead') { $columnList[] = 'status'; $columnList[] = 'createdAccountId'; $columnList[] = 'createdAccountName'; } $parent = $this->entityManager ->getRDBRepository($parentType) ->select($columnList) ->where(['id' => $parentId]) ->findOne(); } $accountId = null; $accountName = null; if ($parent) { if ($parent->getEntityType() == 'Account') { $accountId = $parent->getId(); $accountName = $parent->get('name'); } else if ( $parent->getEntityType() == 'Lead' && $parent->get('status') == 'Converted' && $parent->get('createdAccountId') ) { $accountId = $parent->get('createdAccountId'); $accountName = $parent->get('createdAccountName'); } if ( !$accountId && $parent->get('accountId') && $parent instanceof CoreEntity && $parent->getRelationParam('account', 'entity') == 'Account' ) { $accountId = $parent->get('accountId'); } if ($accountId) { $entity->set('accountId', $accountId); $entity->set('accountName', $accountName); } } if ( $entity->get('accountId') && !$entity->get('accountName') ) { $account = $this->entityManager ->getRDBRepository('Account') ->select(['id', 'name']) ->where(['id' => $entity->get('accountId')]) ->findOne(); if ($account) { $entity->set('accountName', $account->get('name')); } } } }