public static function Delete($ID, $checkPerms = true, $regEvent = true, $options = array()) { $ID = intval($ID); if (!is_array($options)) { $options = array(); } $events = GetModuleEvents('crm', 'OnBeforeActivityDelete'); while ($event = $events->Fetch()) { if (ExecuteModuleEventEx($event, array($ID)) === false) { return false; } } $ary = isset($options['ACTUAL_ITEM']) && is_array($options['ACTUAL_ITEM']) ? $options['ACTUAL_ITEM'] : self::GetByID($ID, $checkPerms); if (!is_array($ary)) { return false; //is not found } $arBindings = isset($options['ACTUAL_BINDINGS']) && is_array($options['ACTUAL_BINDINGS']) ? $options['ACTUAL_BINDINGS'] : self::GetBindings($ID); if (!self::InnerDelete($ID, $options)) { return false; } self::UnregisterLiveFeedEvent($ID); CCrmSonetSubscription::UnRegisterSubscriptionByEntity(CCrmOwnerType::Activity, $ID); // Synchronize user activity --> $skipUserActivitySync = isset($options['SKIP_USER_ACTIVITY_SYNC']) ? $options['SKIP_USER_ACTIVITY_SYNC'] : false; if (!$skipUserActivitySync) { $responsibleID = isset($ary['RESPONSIBLE_ID']) ? intval($ary['RESPONSIBLE_ID']) : 0; if ($responsibleID > 0 && is_array($arBindings)) { foreach ($arBindings as &$arBinding) { self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $responsibleID); self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], 0); } unset($arBinding); } } // <-- Synchronize user activity if (is_array($arBindings)) { if ($regEvent) { foreach ($arBindings as &$arBinding) { self::RegisterRemoveEvent($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $ary, $checkPerms); } unset($arBinding); } $skipStatistics = isset($options['SKIP_STATISTICS']) ? $options['SKIP_STATISTICS'] : false; if (!$skipStatistics) { $completed = isset($ary['COMPLETED']) && $ary['COMPLETED'] === 'Y'; $deadline = isset($ary['DEADLINE']) ? $ary['DEADLINE'] : ''; if ($completed && $deadline) { $deadline = new \Bitrix\Main\Type\DateTime($deadline); $deadline->setTime(0, 0, 0); foreach ($arBindings as &$arBinding) { $curOwnerTypeID = isset($arBinding['OWNER_TYPE_ID']) ? intval($arBinding['OWNER_TYPE_ID']) : 0; $curOwnerID = isset($arBinding['OWNER_ID']) ? intval($arBinding['OWNER_ID']) : 0; if ($curOwnerTypeID === CCrmOwnerType::Deal && $curOwnerID > 0) { Bitrix\Crm\Statistics\DealActivityStatisticEntry::register($curOwnerID, null, array('DATE' => $deadline)); } } unset($arBinding); } } } $skipAssocEntity = isset($options['SKIP_ASSOCIATED_ENTITY']) ? (bool) $options['SKIP_ASSOCIATED_ENTITY'] : false; if (!$skipAssocEntity && isset($ary['TYPE_ID']) && isset($ary['ASSOCIATED_ENTITY_ID'])) { switch (intval($ary['TYPE_ID'])) { case CCrmActivityType::Call: case CCrmActivityType::Meeting: self::DeleteCalendarEvent($ary); break; case CCrmActivityType::Task: self::DeleteTask($ary); break; case CCrmActivityType::Email: //do nothing break; } } $rsEvents = GetModuleEvents('crm', 'OnActivityDelete'); while ($arEvent = $rsEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID)); } if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->ClearByTag("CRM_ACTIVITY_" . $ID); } return true; }
public static function RebuildStatistics(array $IDs) { $dbResult = self::GetListEx(array(), array('@ID' => $IDs, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'DATE_CREATE', 'DATE_MODIFY', 'STAGE_ID', 'ASSIGNED_BY_ID', 'BEGINDATE', 'CLOSEDATE', 'CURRENCY_ID', 'OPPORTUNITY', 'UF_*')); if (!is_object($dbResult)) { return; } while ($fields = $dbResult->Fetch()) { $ID = (int) $fields['ID']; //--> History if (!Bitrix\Crm\History\DealStageHistoryEntry::isRegistered($ID)) { $created = isset($fields['DATE_CREATE']) ? $fields['DATE_CREATE'] : ''; $createdTime = null; try { $createdTime = new Bitrix\Main\Type\DateTime($created, Bitrix\Main\Type\DateTime::convertFormatToPhp(FORMAT_DATETIME)); } catch (Bitrix\Main\ObjectException $e) { } $modified = isset($fields['DATE_MODIFY']) ? $fields['DATE_MODIFY'] : ''; $modifiedTime = null; if ($modified !== '') { try { $modifiedTime = new Bitrix\Main\Type\DateTime($modified, Bitrix\Main\Type\DateTime::convertFormatToPhp(FORMAT_DATETIME)); } catch (Bitrix\Main\ObjectException $e) { } } if ($createdTime && $modifiedTime && $createdTime->getTimestamp() !== $modifiedTime->getTimestamp()) { Bitrix\Crm\History\DealStageHistoryEntry::register($ID, $fields, array('IS_NEW' => false, 'TIME' => $modifiedTime)); } elseif ($createdTime) { Bitrix\Crm\History\DealStageHistoryEntry::register($ID, $fields, array('IS_NEW' => true, 'TIME' => $createdTime)); } } //<-- History //--> Statistics if (!Bitrix\Crm\Statistics\DealSumStatisticEntry::isRegistered($ID)) { Bitrix\Crm\Statistics\DealSumStatisticEntry::register($ID, $fields); } if (!Bitrix\Crm\Statistics\DealInvoiceStatisticEntry::isRegistered($ID)) { Bitrix\Crm\Statistics\DealInvoiceStatisticEntry::register($ID, $fields); } $timeline = Bitrix\Crm\Statistics\DealActivityStatisticEntry::prepareTimeline($ID); foreach ($timeline as $date) { Bitrix\Crm\Statistics\DealActivityStatisticEntry::register($ID, $fields, array('DATE' => $date)); } //<-- Statistics } }