コード例 #1
0
ファイル: crm_activity.php プロジェクト: mrdeadmouse/u136006
 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;
 }
コード例 #2
0
ファイル: crm_deal.php プロジェクト: mrdeadmouse/u136006
 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
     }
 }