addDependency('dateTime'); $this->addDependency('config'); } protected function getConfig() { return $this->getInjection('config'); } protected function getDateTime() { return $this->getInjection('dateTime'); } protected function convertDateTimeToDefaultTimezone($string) { $dateTime = \DateTime::createFromFormat($this->getDateTime()->getInternalDateTimeFormat(), $string); $timeZone = $this->getConfig()->get('timeZone'); if (empty($timeZone)) { $timeZone = 'UTC'; } $tz = $timezone = new \DateTimeZone($timeZone); if ($dateTime) { return $dateTime->setTimezone($tz)->format($this->getDateTime()->getInternalDateTimeFormat()); } return null; } protected function beforeSave(Entity $entity, array $options = array()) { if ($entity->isAttributeChanged('status')) { if ($entity->get('status') == 'Completed') { $entity->set('dateCompleted', date('Y-m-d H:i:s')); } else { $entity->set('dateCompleted', null); } } if ($entity->has('dateStartDate')) { $dateStartDate = $entity->get('dateStartDate'); if (!empty($dateStartDate)) { $dateStart = $dateStartDate . ' 00:00:00'; $dateStart = $this->convertDateTimeToDefaultTimezone($dateStart); $entity->set('dateStart', $dateStart); } else { $entity->set('dateStartDate', null); } } if ($entity->has('dateEndDate')) { $dateEndDate = $entity->get('dateEndDate'); if (!empty($dateEndDate)) { $dateEnd = $dateEndDate . ' 00:00:00'; $dateEnd = $this->convertDateTimeToDefaultTimezone($dateEnd); $entity->set('dateEnd', $dateEnd); } else { $entity->set('dateEndDate', null); } } if (!$entity->isNew() && $entity->isAttributeChanged('parentId')) { $entity->set('accountId', null); $entity->set('contactId', null); } $parentId = $entity->get('parentId'); $parentType = $entity->get('parentType'); if ($parentId && $parentType) { $parent = $this->getEntityManager()->getEntity($parentType, $parentId); if ($parent) { $accountId = null; $contactId = null; if ($parent->getEntityType() == 'Account') { $accountId = $parent->id; } else if ($parent->getEntityType() == 'Lead') { if ($parent->get('status') == 'Converted') { if ($parent->get('createdAccountId')) { $accountId = $parent->get('createdAccountId'); } if ($parent->get('createdContactId')) { $contactId = $parent->get('createdContactId'); } } } else if ($parent->getEntityType() == 'Contact') { $contactId = $parent->id; } if (!$accountId && $parent->get('accountId') && $parent->getRelationParam('account', 'entity') == 'Account') { $accountId = $parent->get('accountId'); } if (!$contactId && $parent->get('contactId') && $parent->getRelationParam('contact', 'entity') == 'Contact') { $contactId = $parent->get('contactId'); } if ($accountId) { $entity->set('accountId', $accountId); } if ($contactId) { $entity->set('contactId', $contactId); } } } parent::beforeSave($entity, $options); } }