public static function setPrice($productID, $priceValue = 0.0, $currency = false, $priceTypeId = false, $priceTypeId = false) { $productID = intval($productID); if ($currency === false) { $currency = CCrmCurrency::GetBaseCurrencyID(); } if (strlen($currency) < 3) { return false; } if ($priceTypeId === false) { $priceTypeId = self::getSelectedPriceTypeId(); } if (intval($priceTypeId) < 1) { return false; } $ID = false; $arFields = false; if ($arFields = self::getPrice($productID, $priceTypeId)) { $ID = $arFields["ID"]; $arFields = array("PRICE" => doubleval($priceValue), "CURRENCY" => $currency); $ID = CPrice::Update($ID, $arFields); } else { $arFields = array("PRICE" => doubleval($priceValue), "CURRENCY" => $currency, "QUANTITY_FROM" => 0, "QUANTITY_TO" => 0, "EXTRA_ID" => false, "CATALOG_GROUP_ID" => $priceTypeId, "PRODUCT_ID" => $productID); $ID = CPrice::Add($arFields); } return $ID ? $ID : false; }
public static function PreparePopupItems($currencyID = '', $count = 50, $enableRawPrices = false) { $currencyID = strval($currencyID); if (!isset($currencyID[0])) { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $count = intval($count); if ($count <= 0) { $count = 50; } $arSelect = array('ID', 'NAME', 'PRICE', 'CURRENCY_ID'); $arPricesSelect = $arVatsSelect = array(); $arSelect = CCrmProduct::DistributeProductSelect($arSelect, $arPricesSelect, $arVatsSelect); $rs = CCrmProduct::GetList(array('ID' => 'DESC'), array('ACTIVE' => 'Y', 'CATALOG_ID' => CCrmCatalog::EnsureDefaultExists()), $arSelect, $count); $arProducts = array(); $arProductId = array(); while ($product = $rs->Fetch()) { foreach ($arPricesSelect as $fieldName) { $product[$fieldName] = null; } foreach ($arVatsSelect as $fieldName) { $product[$fieldName] = null; } $arProductId[] = $product['ID']; $arProducts[$product['ID']] = $product; } CCrmProduct::ObtainPricesVats($arProducts, $arProductId, $arPricesSelect, $arVatsSelect, $enableRawPrices); $measureInfos = \Bitrix\Crm\Measure::getProductMeasures($arProductId); $productVatInfos = CCrmProduct::PrepareCatalogProductFields($arProductId); unset($arProductId, $arPricesSelect, $arVatsSelect); $defaultMeasureInfo = \Bitrix\Crm\Measure::getDefaultMeasure(); $result = array(); foreach ($arProducts as $productID => &$product) { if ($currencyID != $product['CURRENCY_ID']) { $product['PRICE'] = CCrmCurrency::ConvertMoney($product['PRICE'], $product['CURRENCY_ID'], $currencyID); $product['CURRENCY_ID'] = $currencyID; } $customData = array('price' => $product['PRICE']); if (isset($measureInfos[$productID]) && !empty($measureInfos[$productID])) { $measureIfo = $measureInfos[$productID][0]; $customData['measure'] = array('code' => $measureIfo['CODE'], 'name' => $measureIfo['SYMBOL']); } elseif ($defaultMeasureInfo !== null) { $customData['measure'] = array('code' => $defaultMeasureInfo['CODE'], 'name' => $defaultMeasureInfo['SYMBOL']); } if (isset($productVatInfos[$productID])) { $productVatInfo = $productVatInfos[$productID]; $customData['tax'] = array('id' => $productVatInfo['TAX_ID'], 'included' => $enableRawPrices && $productVatInfo['TAX_INCLUDED']); } $result[] = array('title' => $product['NAME'], 'desc' => CCrmProduct::FormatPrice($product), 'id' => $product['ID'], 'url' => '', 'type' => 'product', 'selected' => false, 'customData' => &$customData); unset($customData); } unset($product, $arProducts); return $result; }
public static function SetReportCurrencyID($currencyID) { $currencyID = strval($currencyID); if (!isset($currencyID[0])) { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } if ($currencyID === self::$REPORT_CURRENCY_ID) { return; } self::$REPORT_CURRENCY_ID = $currencyID; CUserOptions::SetOption('crm', 'report_currency_id', $currencyID); }
public static function ensureQuotePaySystemsCreated() { if (!Loader::includeModule('sale')) { return; } $siteID = ''; $languageID = ''; $dbSites = \CSite::GetList($by = 'sort', $order = 'desc', array('DEFAULT' => 'Y', 'ACTIVE' => 'Y')); $defaultSite = is_object($dbSites) ? $dbSites->Fetch() : null; if (is_array($defaultSite)) { $siteID = $defaultSite['LID']; $languageID = $defaultSite['LANGUAGE_ID']; } if ($siteID === '') { $siteID = 's1'; } if ($languageID === '') { $languageID = 'ru'; } $paySysName = "quote_{$languageID}"; $paySystems = array(); $customPaySystemPath = \COption::GetOptionString('sale', 'path2user_ps_files', ''); if ($customPaySystemPath === '') { $customPaySystemPath = BX_ROOT . '/php_interface/include/sale_payment/'; } $personTypeIDs = \CCrmPaySystem::getPersonTypeIDs(); if (isset($personTypeIDs['COMPANY'])) { $paySystems[] = array('NAME' => Loc::getMessage('CRM_PS_QUOTE_COMPANY', null, $languageID), 'SORT' => 200, 'DESCRIPTION' => '', 'CODE_TEMP' => $paySysName, 'ACTION' => array(array('PERSON_TYPE_ID' => $personTypeIDs['COMPANY'], 'NAME' => Loc::getMessage('CRM_PS_QUOTE_COMPANY', null, $languageID), 'ACTION_FILE' => "{$customPaySystemPath}{$paySysName}", 'RESULT_FILE' => '', 'NEW_WINDOW' => 'Y', 'PARAMS' => serialize(array('DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'), 'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'), 'BUYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'COMPANY'), 'BUYER_INN' => array('TYPE' => 'PROPERTY', 'VALUE' => 'INN'), 'BUYER_ADDRESS' => array('TYPE' => 'PROPERTY', 'VALUE' => 'COMPANY_ADR'), 'BUYER_PHONE' => array('TYPE' => 'PROPERTY', 'VALUE' => 'PHONE'), 'BUYER_FAX' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FAX'), 'BUYER_PAYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'CONTACT_PERSON'), 'COMMENT1' => array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION'))), 'HAVE_PAYMENT' => 'Y', 'HAVE_ACTION' => 'N', 'HAVE_RESULT' => 'N', 'HAVE_PREPAY' => 'N', 'HAVE_RESULT_RECEIVE' => 'N'))); } if (isset($personTypeIDs['CONTACT'])) { $paySystems[] = array('NAME' => Loc::getMessage('CRM_PS_QUOTE_CONTACT', null, $languageID), 'SORT' => 300, 'DESCRIPTION' => '', 'CODE_TEMP' => $paySysName, 'ACTION' => array(array('PERSON_TYPE_ID' => $personTypeIDs['CONTACT'], 'NAME' => Loc::getMessage('CRM_PS_QUOTE_CONTACT', null, $languageID), 'ACTION_FILE' => "{$customPaySystemPath}{$paySysName}", 'RESULT_FILE' => '', 'NEW_WINDOW' => 'Y', 'PARAMS' => serialize(array('DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'), 'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'), 'BUYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FIO'), 'BUYER_INN' => array('TYPE' => 'PROPERTY', 'VALUE' => 'INN'), 'BUYER_ADDRESS' => array('TYPE' => 'PROPERTY', 'VALUE' => 'ADDRESS'), 'BUYER_PHONE' => array('TYPE' => 'PROPERTY', 'VALUE' => 'PHONE'), 'BUYER_FAX' => array('TYPE' => '', 'VALUE' => ''), 'BUYER_PAYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FIO'), 'COMMENT1' => array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION'))), 'HAVE_PAYMENT' => 'Y', 'HAVE_ACTION' => 'N', 'HAVE_RESULT' => 'N', 'HAVE_PREPAY' => 'N', 'HAVE_RESULT_RECEIVE' => 'N'))); } $currencyID = \CCrmCurrency::GetBaseCurrencyID(); foreach ($paySystems as $paySystem) { $dbSalePaySystem = \CSalePaySystem::GetList(array(), array('LID' => $siteID, 'NAME' => $paySystem['NAME']), false, false, array('ID')); if (!$dbSalePaySystem->Fetch()) { $paySystemID = \CSalePaySystem::Add(array('NAME' => $paySystem['NAME'], 'DESCRIPTION' => $paySystem['DESCRIPTION'], 'SORT' => $paySystem['SORT'], 'LID' => $siteID, 'CURRENCY' => $currencyID, 'ACTIVE' => 'Y')); if ($paySystemID > 0) { foreach ($paySystem['ACTION'] as &$action) { $action['PAY_SYSTEM_ID'] = $paySystemID; \CSalePaySystemAction::Add($action); } unset($action); } } } unset($paySystem); }
public static function AddLead($arData, $CCrmLead) { global $DB, $USER_FIELD_MANAGER; $CCrmBizProc = new CCrmBizProc('LEAD'); $arData['CURRENCY_ID'] = trim($arData['CURRENCY_ID']); if (strlen($arData['CURRENCY_ID']) <= 0) { $arData['CURRENCY_ID'] = CCrmCurrency::GetBaseCurrencyID(); } $arFields = array('TITLE' => trim($arData['TITLE']), 'COMPANY_TITLE' => trim($arData['COMPANY_TITLE']), 'NAME' => trim($arData['NAME']), 'LAST_NAME' => trim($arData['LAST_NAME']), 'SECOND_NAME' => trim($arData['SECOND_NAME']), 'POST' => trim($arData['POST']), 'ADDRESS' => trim($arData['ADDRESS']), 'COMMENTS' => trim($arData['COMMENTS']), 'SOURCE_DESCRIPTION' => trim($arData['SOURCE_DESCRIPTION']), 'STATUS_DESCRIPTION' => trim($arData['STATUS_DESCRIPTION']), 'OPPORTUNITY' => trim($arData['OPPORTUNITY']), 'CURRENCY_ID' => trim($arData['CURRENCY_ID']), 'ASSIGNED_BY_ID' => (int) (is_array($arData['ASSIGNED_BY_ID']) ? $arData['ASSIGNED_BY_ID'][0] : $arData['ASSIGNED_BY_ID']), 'OPENED' => 'Y'); $arData['SOURCE_ID'] = trim($arData['SOURCE_ID']); $arData['STATUS_ID'] = trim($arData['STATUS_ID']); if (strlen($arData['STATUS_ID']) > 0) { $arFields['STATUS_ID'] = $arData['STATUS_ID']; } if (strlen($arData['SOURCE_ID']) > 0) { $arFields['SOURCE_ID'] = $arData['SOURCE_ID']; } $USER_FIELD_MANAGER->EditFormAddFields(CCrmLead::$sUFEntityID, $arFields); $CCrmUserType = new CCrmUserType($USER_FIELD_MANAGER, CCrmLead::$sUFEntityID); $CCrmUserType->PrepareImport($arFields, ','); $arFields['FM'] = CCrmFieldMulti::PrepareFields($arData); $DB->StartTransaction(); $ID = $CCrmLead->Add($arFields); if ($ID === false) { $DB->Rollback(); if (!empty($arFields['RESULT_MESSAGE'])) { $sErrorMessage = $arFields['RESULT_MESSAGE']; } else { $sErrorMessage = GetMessage('UNKNOWN_ERROR'); } $res = array('error' => 400, 'error_message' => strip_tags(nl2br($sErrorMessage))); } else { $DB->Commit(); // Ignore all BizProc errors try { $arErrors = array(); CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Lead, $ID, CCrmBizProcEventType::Create, $arErrors); } catch (Exception $e) { } $res = array('error' => 201, 'ID' => $ID, 'error_message' => GetMessage('CRM_REST_OK')); } return self::_out($res); }
public static function Create($catalogID = 0, $currencyID = '') { IncludeModuleLangFile(__FILE__); $catalogID = intval($catalogID); if ($catalogID <= 0) { $catalogID = CCrmCatalog::EnsureDefaultExists(); } $currencyID = strval($currencyID); if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $sectionID = self::EnsureProductSection('CRM_DEMO_SECTION_PRODUCTS', $catalogID, array('NAME' => GetMessage('CRM_DEMO_SECTION_PRODUCTS'))); self::EnsureProduct('CRM_DEMO_PRODUCT_BX_CMS', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_PRODUCT_BX_CMS'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(10000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 100)); self::EnsureProduct('CRM_DEMO_PRODUCT_BX_CP', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_PRODUCT_BX_CP'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(25000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 110)); self::EnsureProduct('CRM_DEMO_PRODUCT_BX_TEAM', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_PRODUCT_BX_TEAM'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(5000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 120)); $sectionID = self::EnsureProductSection('CRM_DEMO_SECTION_SERVICES', $catalogID, array('NAME' => GetMessage('CRM_DEMO_SECTION_SERVICES'))); self::EnsureProduct('CRM_DEMO_SERVICE_SITE_DISIGN', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_SERVICE_SITE_DISIGN'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(15000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 130)); self::EnsureProduct('CRM_DEMO_SERVICE_SITE_TUNING', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_SERVICE_SITE_TUNING'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(20000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 140)); self::EnsureProduct('CRM_DEMO_SERVICE_MANAGER_TRAINING', $catalogID, array('CATALOG_ID' => $catalogID, 'SECTION_ID' => $sectionID, 'NAME' => GetMessage('CRM_DEMO_SERVICE_MANAGER_TRAINING'), 'CURRENCY_ID' => $currencyID, 'PRICE' => self::ConvertMoney(5000, 'RUB', $currencyID), 'ACTIVE' => 'Y', 'SORT' => 150)); }
public function map(EntityConversionMap $map, array $options = null) { $srcFields = $this->getSourceFields(); if (empty($srcFields)) { return array(); } $dstFields = array(); $dstEntityTypeID = $map->getDestinationEntityTypeID(); foreach ($map->getItems() as $item) { $dstFieldID = $item->getDestinationField(); //Skip empty binding if ($dstFieldID === '-') { continue; } $srcFieldID = $item->getSourceField(); if ((!isset($srcFields[$srcFieldID]) || $srcFields[$srcFieldID] === '') && $srcFieldID !== 'PRODUCT_ROWS') { $altSrcFieldID = ''; foreach ($item->getAlternativeSourceFields() as $fieldID) { if (isset($srcFields[$fieldID])) { $altSrcFieldID = $fieldID; break; } } if ($altSrcFieldID !== '') { $srcFieldID = $altSrcFieldID; } } if ($dstFieldID === '') { $dstFieldID = $srcFieldID; } if (strpos($srcFieldID, 'UF_') === 0 && strpos($dstFieldID, 'UF_') === 0) { self::mapUserField(\CCrmOwnerType::Deal, $srcFieldID, $srcFields, $dstEntityTypeID, $dstFieldID, $dstFields, $options); } elseif ($srcFieldID === 'PRODUCT_ROWS') { $productRows = \CCrmDeal::LoadProductRows($this->srcEntityID); if (count($productRows) > 0) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $currencyID = isset($srcFields['CURRENCY_ID']) ? $srcFields['CURRENCY_ID'] : ''; if ($currencyID === '' || !\CCrmCurrency::IsExists($currencyID)) { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $actualRows = \CCrmInvoice::ProductRows2BasketItems($productRows, $currencyID, \CCrmInvoice::GetCurrencyID()); if (count($actualRows) > 0) { foreach ($actualRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $actualRows; } } else { foreach ($productRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $productRows; } } } elseif (isset($srcFields[$srcFieldID])) { $dstFields[$dstFieldID] = $srcFields[$srcFieldID]; } } if (!empty($dstFields)) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $dstFields['UF_DEAL_ID'] = $this->srcEntityID; //region Prepare Invoice Properties $dstFields['INVOICE_PROPERTIES'] = array(); $invoiceEntity = new \CCrmInvoice(false); $companyID = isset($dstFields['UF_COMPANY_ID']) ? (int) $dstFields['UF_COMPANY_ID'] : 0; $contactID = isset($dstFields['UF_CONTACT_ID']) ? (int) $dstFields['UF_CONTACT_ID'] : 0; $personTypeID = 0; $personTypes = \CCrmPaySystem::getPersonTypeIDs(); if ($companyID > 0 && isset($personTypes['COMPANY'])) { $personTypeID = $personTypes['COMPANY']; } elseif (isset($personTypes['CONTACT'])) { $personTypeID = $personTypes['CONTACT']; } $properties = $invoiceEntity->GetProperties(0, $personTypeID); if (is_array($properties)) { \CCrmInvoice::__RewritePayerInfo($companyID, $contactID, $invoiceProperties); foreach ($properties as $property) { $dstFields['INVOICE_PROPERTIES'][$property['FIELDS']['ID']] = $property['VALUE']; } } //endregion } elseif ($dstEntityTypeID === \CCrmOwnerType::Quote) { $dstFields['DEAL_ID'] = $this->srcEntityID; } } return $dstFields; }
$arResult['ROWS_COUNT'] = $dbResult->SelectedRowsCount(); $arResult['DB_LIST'] = $dbResult; $arResult['DB_FILTER'] = $arFilter; while ($arLead = $dbResult->GetNext()) { $arResult['LEAD'][$arLead['ID']] = $arLead; $arResult['LEAD_ID'][$arLead['ID']] = $arLead['ID']; $arResult['LEAD_UF'][$arLead['ID']] = array(); } } } $now = time() + CTimeZone::GetOffset(); foreach ($arResult['LEAD'] as &$arLead) { if (!empty($arLead['WEB']) && strpos($arLead['WEB'], '://') === false) { $arLead['WEB'] = 'http://' . $arLead['WEB']; } $currencyID = isset($arLead['CURRENCY_ID']) ? $arLead['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $arLead['FORMATTED_OPPORTUNITY'] = CCrmCurrency::MoneyToString($arLead['~OPPORTUNITY'], $currencyID); $statusID = isset($arLead['STATUS_ID']) ? $arLead['STATUS_ID'] : ''; $arLead['LEAD_STATUS_NAME'] = isset($arResult['STATUS_LIST'][$statusID]) ? $arResult['STATUS_LIST'][$statusID] : $statusID; $sourceID = isset($arLead['SOURCE_ID']) ? $arLead['SOURCE_ID'] : ''; $arLead['LEAD_SOURCE_NAME'] = isset($arResult['SOURCE_LIST'][$sourceID]) ? $arResult['SOURCE_LIST'][$sourceID] : $sourceID; $arLead['DELETE'] = $isAdmin || $arLead['STATUS_ID'] != 'CONVERTED' && !$arResult['INTERNAL']; $arLead['EDIT'] = !$arResult['INTERNAL'] || $arLead['STATUS_ID'] != 'CONVERTED'; $arLead['PATH_TO_LEAD_SHOW'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_SHOW'], array('lead_id' => $arLead['ID'])); $arLead['PATH_TO_LEAD_EDIT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => $arLead['ID'])); $arLead['PATH_TO_LEAD_COPY'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => $arLead['ID'])), array('copy' => 1)); $arLead['PATH_TO_LEAD_CONVERT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_CONVERT'], array('lead_id' => $arLead['ID'])); $arLead['PATH_TO_LEAD_DELETE'] = CHTTP::urlAddParams($bInternal ? $APPLICATION->GetCurPage() : $arParams['PATH_TO_LEAD_LIST'], array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $arLead['ID'], 'sessid' => $arResult['SESSION_ID'])); $arLead['PATH_TO_USER_PROFILE'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_USER_PROFILE'], array('user_id' => $arLead['ASSIGNED_BY'])); $arLead['PATH_TO_USER_BP'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_USER_BP'], array('user_id' => $userID)); $arLead['PATH_TO_USER_CREATOR'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_USER_PROFILE'], array('user_id' => $arLead['CREATED_BY']));
public static function GetPaidSum($filter, $currencyId = '') { $totalPaidNumber = 0; $totalPaidSum = 0; if ($currencyId == '') { $currencyId = CCrmCurrency::GetBaseCurrencyID(); } $dbRes = CCrmInvoice::GetList(array('ID' => 'ASC'), $filter, false, false, array('PRICE', 'CURRENCY', 'STATUS_ID')); while ($arValues = $dbRes->Fetch()) { if (CCrmStatusInvoice::isStatusSuccess($arValues['STATUS_ID'])) { $totalPaidNumber++; $totalPaidSum += CCrmCurrency::ConvertMoney($arValues['PRICE'], $arValues['CURRENCY'], $currencyId); } } $result = array('num' => $totalPaidNumber, 'sum' => round($totalPaidSum, 2)); return $result; }
public function Add(array &$arFields, $bUpdateSearch = true, $options = array()) { global $DB; if (!is_array($options)) { $options = array(); } $this->LAST_ERROR = ''; $iUserId = CCrmSecurityHelper::GetCurrentUserID(); if (isset($arFields['ID'])) { unset($arFields['ID']); } if (isset($arFields['DATE_CREATE'])) { unset($arFields['DATE_CREATE']); } $arFields['~DATE_CREATE'] = $DB->CurrentTimeFunction(); $arFields['~DATE_MODIFY'] = $DB->CurrentTimeFunction(); if (!isset($arFields['CREATED_BY_ID']) || (int) $arFields['CREATED_BY_ID'] <= 0) { $arFields['CREATED_BY_ID'] = $iUserId; } if (!isset($arFields['MODIFY_BY_ID']) || (int) $arFields['MODIFY_BY_ID'] <= 0) { $arFields['MODIFY_BY_ID'] = $iUserId; } if (isset($arFields['ASSIGNED_BY_ID']) && is_array($arFields['ASSIGNED_BY_ID'])) { $arFields['ASSIGNED_BY_ID'] = count($arFields['ASSIGNED_BY_ID']) > 0 ? intval($arFields['ASSIGNED_BY_ID'][0]) : $iUserId; } if (!isset($arFields['ASSIGNED_BY_ID']) || (int) $arFields['ASSIGNED_BY_ID'] <= 0) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if (!$this->CheckFields($arFields, false, $options)) { $result = false; $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; } else { if (!isset($arFields['STAGE_ID'])) { $arFields['STAGE_ID'] = 'NEW'; } $arAttr = array(); if (!empty($arFields['STAGE_ID'])) { $arAttr['STAGE_ID'] = $arFields['STAGE_ID']; } if (!empty($arFields['OPENED'])) { $arAttr['OPENED'] = $arFields['OPENED']; } $sPermission = 'ADD'; if (isset($arFields['PERMISSION'])) { if ($arFields['PERMISSION'] == 'IMPORT') { $sPermission = 'IMPORT'; } unset($arFields['PERMISSION']); } if ($this->bCheckPermission) { $arEntityAttr = self::BuildEntityAttr($iUserId, $arAttr); $userPerms = $iUserId == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($iUserId); $sEntityPerm = $userPerms->GetPermType('DEAL', $sPermission, $arEntityAttr); if ($sEntityPerm == BX_CRM_PERM_NONE) { $this->LAST_ERROR = GetMessage('CRM_PERMISSION_DENIED'); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; return false; } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); if ($sEntityPerm == BX_CRM_PERM_SELF && $assignedByID != $iUserId) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if ($sEntityPerm == BX_CRM_PERM_OPEN && $iUserId == $assignedByID) { $arFields['OPENED'] = 'Y'; } } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $arEntityAttr = self::BuildEntityAttr($assignedByID, $arAttr); $userPerms = $assignedByID == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($assignedByID); $sEntityPerm = $userPerms->GetPermType('DEAL', $sPermission, $arEntityAttr); $this->PrepareEntityAttrs($arEntityAttr, $sEntityPerm); // Calculation of Account Data $accData = CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : null, 'SUM' => isset($arFields['OPPORTUNITY']) ? $arFields['OPPORTUNITY'] : null, 'EXCH_RATE' => isset($arFields['EXCH_RATE']) ? $arFields['EXCH_RATE'] : null)); if (is_array($accData)) { $arFields['ACCOUNT_CURRENCY_ID'] = $accData['ACCOUNT_CURRENCY_ID']; $arFields['OPPORTUNITY_ACCOUNT'] = $accData['ACCOUNT_SUM']; } $accData = CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : null, 'SUM' => isset($arFields['TAX_VALUE']) ? $arFields['TAX_VALUE'] : null, 'EXCH_RATE' => isset($arFields['EXCH_RATE']) ? $arFields['EXCH_RATE'] : null)); if (is_array($accData)) { $arFields['TAX_VALUE_ACCOUNT'] = $accData['ACCOUNT_SUM']; } $now = ConvertTimeStamp(time(), 'SHORT', SITE_ID); $arFields['~BEGINDATE'] = $DB->CharToDateFunction(isset($arFields['BEGINDATE']) && $arFields['BEGINDATE'] !== '' ? $arFields['BEGINDATE'] : $now, 'SHORT', false); if (isset($arFields['BEGINDATE'])) { $arFields['__BEGINDATE'] = $arFields['BEGINDATE']; unset($arFields['BEGINDATE']); } $isFinalStage = self::GetStageSemantics($arFields['STAGE_ID']) !== 'process'; $enableCloseDateSync = \Bitrix\Crm\Settings\DealSettings::isCloseDateSyncEnabled(); $arFields['CLOSED'] = $isFinalStage ? 'Y' : 'N'; if ($enableCloseDateSync && $isFinalStage) { $arFields['CLOSEDATE'] = $now; $arFields['~CLOSEDATE'] = $DB->CharToDateFunction($now, 'SHORT', false); } elseif ($isFinalStage && (!isset($arFields['CLOSEDATE']) || $arFields['CLOSEDATE'] === '')) { $arFields['CLOSEDATE'] = $now; $arFields['~CLOSEDATE'] = $DB->CharToDateFunction($now, 'SHORT', false); } elseif (isset($arFields['CLOSEDATE']) && $arFields['CLOSEDATE'] !== '') { $arFields['~CLOSEDATE'] = $DB->CharToDateFunction($arFields['CLOSEDATE'], 'SHORT', false); } if (isset($arFields['CLOSEDATE'])) { $arFields['__CLOSEDATE'] = $arFields['CLOSEDATE']; unset($arFields['CLOSEDATE']); } $beforeEvents = GetModuleEvents('crm', 'OnBeforeCrmDealAdd'); while ($arEvent = $beforeEvents->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) { if (isset($arFields['RESULT_MESSAGE'])) { $this->LAST_ERROR = $arFields['RESULT_MESSAGE']; } else { $this->LAST_ERROR = GetMessage('CRM_DEAL_CREATION_CANCELED', array('#NAME#' => $arEvent['TO_NAME'])); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; } return false; } } $ID = intval($DB->Add('b_crm_deal', $arFields, array(), 'FILE: ' . __FILE__ . '<br /> LINE: ' . __LINE__)); //Restore BEGINDATE and CLOSEDATE if (isset($arFields['__BEGINDATE'])) { $arFields['BEGINDATE'] = $arFields['__BEGINDATE']; unset($arFields['__BEGINDATE']); } if (isset($arFields['__CLOSEDATE'])) { $arFields['CLOSEDATE'] = $arFields['__CLOSEDATE']; unset($arFields['__CLOSEDATE']); } CCrmEntityHelper::NormalizeUserFields($arFields, self::$sUFEntityID, $GLOBALS['USER_FIELD_MANAGER'], array('IS_NEW' => true)); $GLOBALS['USER_FIELD_MANAGER']->Update(self::$sUFEntityID, $ID, $arFields); CCrmPerms::UpdateEntityAttr('DEAL', $ID, $arEntityAttr); //Statistics & History --> Bitrix\Crm\Statistics\DealSumStatisticEntry::register($ID, $arFields); Bitrix\Crm\History\DealStageHistoryEntry::register($ID, $arFields, array('IS_NEW' => true)); Bitrix\Crm\Statistics\DealInvoiceStatisticEntry::synchronize($ID, $arFields); //<-- Statistics & History if ($bUpdateSearch) { $arFilterTmp = array('ID' => $ID); if (!$this->bCheckPermission) { $arFilterTmp["CHECK_PERMISSIONS"] = "N"; } CCrmSearch::UpdateSearch($arFilterTmp, 'DEAL', true); } $result = $arFields['ID'] = $ID; if (isset($GLOBALS["USER"]) && isset($arFields['COMPANY_ID']) && intval($arFields['COMPANY_ID']) > 0) { if (!class_exists('CUserOptions')) { include_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/classes/' . $GLOBALS['DBType'] . '/favorites.php'; } CUserOptions::SetOption('crm', 'crm_company_search', array('last_selected' => $arFields['COMPANY_ID'])); } if (isset($GLOBALS["USER"]) && isset($arFields['CONTACT_ID']) && intval($arFields['CONTACT_ID']) > 0) { if (!class_exists('CUserOptions')) { include_once $_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/classes/" . $GLOBALS['DBType'] . "/favorites.php"; } CUserOptions::SetOption("crm", "crm_contact_search", array('last_selected' => $arFields['CONTACT_ID'])); } if (isset($arFields['FM']) && is_array($arFields['FM'])) { $CCrmFieldMulti = new CCrmFieldMulti(); $CCrmFieldMulti->SetFields('DEAL', $ID, $arFields['FM']); } if (isset($options['REGISTER_SONET_EVENT']) && $options['REGISTER_SONET_EVENT'] === true) { $opportunity = round(isset($arFields['OPPORTUNITY']) ? doubleval($arFields['OPPORTUNITY']) : 0.0, 2); $currencyID = isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $createdByID = intval($arFields['CREATED_BY_ID']); $liveFeedFields = array('USER_ID' => $createdByID, 'ENTITY_TYPE_ID' => CCrmOwnerType::Deal, 'ENTITY_ID' => $ID, 'TITLE' => GetMessage('CRM_DEAL_EVENT_ADD'), 'MESSAGE' => '', 'PARAMS' => array('TITLE' => isset($arFields['TITLE']) ? $arFields['TITLE'] : '', 'STAGE_ID' => isset($arFields['STAGE_ID']) ? $arFields['STAGE_ID'] : '', 'OPPORTUNITY' => strval($opportunity), 'CURRENCY_ID' => $currencyID, 'COMPANY_ID' => isset($arFields['COMPANY_ID']) ? intval($arFields['COMPANY_ID']) : 0, 'CONTACT_ID' => isset($arFields['CONTACT_ID']) ? intval($arFields['CONTACT_ID']) : 0, 'AUTHOR_ID' => intval($arFields['CREATED_BY_ID']), 'RESPONSIBLE_ID' => $assignedByID)); //Register contact & company relations $contactID = isset($arFields['CONTACT_ID']) ? intval($arFields['CONTACT_ID']) : 0; $companyID = isset($arFields['COMPANY_ID']) ? intval($arFields['COMPANY_ID']) : 0; if ($contactID > 0 || $companyID > 0) { $liveFeedFields['PARENTS'] = array(); if ($contactID > 0) { $liveFeedFields['PARENTS'][] = array('ENTITY_TYPE_ID' => CCrmOwnerType::Contact, 'ENTITY_ID' => $contactID); } if ($companyID > 0) { $liveFeedFields['PARENTS'][] = array('ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $companyID); } } CCrmSonetSubscription::RegisterSubscription(CCrmOwnerType::Deal, $ID, CCrmSonetSubscriptionType::Responsibility, $assignedByID); $logEventID = CCrmLiveFeed::CreateLogEvent($liveFeedFields, CCrmLiveFeedEvent::Add); if ($logEventID && $assignedByID != $createdByID && CModule::IncludeModule("im")) { $url = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Deal, $ID); $serverName = (CMain::IsHTTPS() ? "https" : "http") . "://" . (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0 ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", "")); $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $assignedByID, "FROM_USER_ID" => $createdByID, "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "crm", "LOG_ID" => $logEventID, "NOTIFY_EVENT" => "deal_add", "NOTIFY_TAG" => "CRM|DEAL_RESPONSIBLE|" . $ID, "NOTIFY_MESSAGE" => GetMessage("CRM_DEAL_RESPONSIBLE_IM_NOTIFY", array("#title#" => "<a href=\"" . $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($arFields['TITLE']) . "</a>")), "NOTIFY_MESSAGE_OUT" => GetMessage("CRM_DEAL_RESPONSIBLE_IM_NOTIFY", array("#title#" => htmlspecialcharsbx($arFields['TITLE']))) . " (" . $serverName . $url . ")"); CIMNotify::Add($arMessageFields); } } $afterEvents = GetModuleEvents('crm', 'OnAfterCrmDealAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if (isset($arFields['ORIGIN_ID']) && $arFields['ORIGIN_ID'] !== '') { $afterEvents = GetModuleEvents('crm', 'OnAfterExternalCrmDealAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } } } return $result; }
/** * @return boolean */ public static function synchronize($ownerID, array $entityFields = null) { if (!is_int($ownerID)) { $ownerID = (int) $ownerID; } if ($ownerID <= 0) { throw new Main\ArgumentException('Owner ID must be greater than zero.', 'ownerID'); } if (!is_array($entityFields)) { $dbResult = \CCrmDeal::GetListEx(array(), array('=ID' => $ownerID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('STAGE_ID', 'ASSIGNED_BY_ID', 'BEGINDATE', 'CLOSEDATE', 'OPPORTUNITY', 'CURRENCY_ID')); $entityFields = is_object($dbResult) ? $dbResult->Fetch() : null; if (!is_array($entityFields)) { return false; } } $stageID = isset($entityFields['STAGE_ID']) ? $entityFields['STAGE_ID'] : ''; $semanticID = \CCrmDeal::GetSemanticID($stageID); $isLost = PhaseSemantics::isLost($semanticID); $responsibleID = isset($entityFields['ASSIGNED_BY_ID']) ? (int) $entityFields['ASSIGNED_BY_ID'] : 0; /** @var Date $startDate */ $startDate = self::parseDateString(isset($entityFields['BEGINDATE']) ? $entityFields['BEGINDATE'] : ''); if ($startDate === null) { $startDate = new Date(); } /** @var Date $endDate */ $endDate = self::parseDateString(isset($entityFields['CLOSEDATE']) ? $entityFields['CLOSEDATE'] : ''); if ($endDate === null) { $endDate = new Date('9999-12-31', 'Y-m-d'); } $sum = isset($entityFields['OPPORTUNITY']) ? (double) $entityFields['OPPORTUNITY'] : 0.0; $currencyID = isset($entityFields['CURRENCY_ID']) ? $entityFields['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $accountCurrencyID = \CCrmCurrency::GetAccountCurrencyID(); $sumData = \CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => $currencyID, 'SUM' => $sum)); if (is_array($sumData)) { $sum = (double) $sumData['ACCOUNT_SUM']; } $latest = self::getLatest($ownerID); if (!is_array($latest)) { if ($semanticID === PhaseSemantics::SUCCESS) { //Creation of stub for successfully completed entity without invoices self::innerRegister(array('OWNER_ID' => $ownerID, 'CREATED_DATE' => new Date(), 'START_DATE' => $startDate, 'END_DATE' => $endDate, 'RESPONSIBLE_ID' => $responsibleID, 'STAGE_SEMANTIC_ID' => PhaseSemantics::SUCCESS, 'STAGE_ID' => $stageID, 'IS_LOST' => 'N', 'CURRENCY_ID' => $accountCurrencyID, 'INVOICE_SUM' => 0.0, 'INVOICE_QTY' => 0, 'TOTAL_INVOICE_SUM' => 0.0, 'TOTAL_INVOICE_QTY' => 0, 'TOTAL_SUM' => $sum)); } return true; } if ($startDate->getTimestamp() === $latest['START_DATE']->getTimestamp() && $endDate->getTimestamp() === $latest['END_DATE']->getTimestamp() && $responsibleID === (int) $latest['RESPONSIBLE_ID'] && $stageID === $latest['STAGE_ID'] && $semanticID === $latest['STAGE_SEMANTIC_ID'] && $sum === (double) $latest['TOTAL_SUM']) { return false; } if ($semanticID !== $latest['STAGE_SEMANTIC_ID'] && $latest['STAGE_SEMANTIC_ID'] === PhaseSemantics::SUCCESS && (int) $latest['INVOICE_QTY'] === 0) { //Clean up stub for successfully completed entity without invoices DealInvoiceStatisticsTable::delete(array('OWNER_ID' => $ownerID, 'CREATED_DATE' => $latest['CREATED_DATE'])); } else { DealInvoiceStatisticsTable::synchronize($ownerID, array('START_DATE' => $startDate, 'END_DATE' => $endDate, 'RESPONSIBLE_ID' => $responsibleID, 'STAGE_SEMANTIC_ID' => $semanticID, 'STAGE_ID' => $stageID, 'IS_LOST' => $isLost ? 'Y' : 'N', 'TOTAL_SUM' => $sum)); } return true; }
public function createDeals(array $params) { $date = isset($params['DATE']) ? $params['DATE'] : null; if (!$date) { $date = $date = new Date(); } $dateFormat = Date::convertFormatToPhp(FORMAT_DATE); $count = isset($params['COUNT']) ? (int) $params['COUNT'] : 0; if ($count <= 0) { return; } $duration = isset($params['DURATION']) ? (int) $params['DURATION'] : 0; if ($duration <= 0) { $duration = 7; } $probability = isset($params['PROBABILITY']) ? (int) $params['PROBABILITY'] : 0; if ($probability <= 0) { $probability = 10; } $typeID = isset($params['TYPE_ID']) ? $params['TYPE_ID'] : ''; if ($typeID === '') { $typeID = 'SALE'; } $prefix = isset($params['PREFIX']) ? $params['PREFIX'] : ''; if ($prefix === '') { $prefix = $this->id; } $stageIDs = isset($params['STAGE_IDS']) && is_array($params['STAGE_IDS']) ? $params['STAGE_IDS'] : array(); if (empty($stageIDs)) { $stageIDs[] = 'NEW'; } $stageCount = count($stageIDs); $userIDs = isset($params['USER_IDS']) && is_array($params['USER_IDS']) ? $params['USER_IDS'] : array(); if (empty($userIDs)) { $userIDs[] = \CCrmSecurityHelper::GetCurrentUserID(); } $currencyID = isset($params['CURRENCY_ID']) ? $params['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $minSum = isset($params['MIN_SUM']) ? (int) $params['MIN_SUM'] : 0; if ($minSum <= 0) { $minSum = 100; } $maxSum = isset($params['MAX_SUM']) ? (int) $params['MAX_SUM'] : 0; if ($maxSum <= 0) { $maxSum = 1000; } $clientInfos = isset($params['CLIENT_INFOS']) && is_array($params['CLIENT_INFOS']) ? $params['CLIENT_INFOS'] : array(); $callCount = isset($params['CALL_COUNT']) ? (int) $params['CALL_COUNT'] : 0; $meetingCount = isset($params['MEETING_COUNT']) ? (int) $params['MEETING_COUNT'] : 0; $invoiceCount = isset($params['INVOICE_COUNT']) ? (int) $params['INVOICE_COUNT'] : 0; $number = isset($params['NUMBER']) ? (int) $params['NUMBER'] : 0; if ($number <= 0) { $number = 0; } $dealEntity = new \CCrmDeal(false); for ($i = 0; $i < $count; $i++) { $number++; $title = "{$prefix} deal # {$number}"; $beginDate = clone $date; $opportunity = mt_rand($minSum, $maxSum); $fields = array('TITLE' => $title, 'TYPE_ID' => $typeID, 'STAGE_ID' => $stageIDs[0], 'PROBABILITY' => $probability, 'CURRENCY_ID' => $currencyID, 'OPPORTUNITY' => $opportunity, 'ASSIGNED_BY_ID' => self::getRandomItem($userIDs), 'BEGINDATE' => $beginDate->format($dateFormat), 'CLOSEDATE' => $beginDate->add("{$duration} days")->format($dateFormat), 'ORIGINATOR_ID' => $this->id); $contactID = 0; $companyID = 0; $clientInfo = self::getRandomItem($clientInfos); if (is_array($clientInfo)) { if (isset($clientInfo['CONTACT_ID'])) { $contactID = $clientInfo['CONTACT_ID']; } if (isset($clientInfo['COMPANY_ID'])) { $companyID = $clientInfo['COMPANY_ID']; } } if ($contactID > 0) { $fields['CONTACT_ID'] = $contactID; } if ($companyID > 0) { $fields['COMPANY_ID'] = $companyID; } $ID = $dealEntity->Add($fields, true, array('ENABLE_CLOSE_DATE_SYNC' => false)); $lastStage = $stageIDs[$stageCount - 1]; if ($stageCount > 1) { $lastStageIndex = mt_rand(1, $stageCount - 1); $lastStage = $stageIDs[$lastStageIndex]; for ($j = 1; $j <= $lastStageIndex; $j++) { $fields = array('STAGE_ID' => $stageIDs[$j]); $dealEntity->Update($ID, $fields, true, true, array('ENABLE_CLOSE_DATE_SYNC' => false)); } } $clientTypeID = \CCrmOwnerType::Undefined; $clientID = 0; if ($contactID > 0) { $clientTypeID = \CCrmOwnerType::Contact; $clientID = $contactID; } elseif ($companyID > 0) { $clientTypeID = \CCrmOwnerType::Company; $clientID = $companyID; } if ($clientID > 0) { if ($callCount > 0) { $this->createActivities(array('COUNT' => $callCount, 'OWNER_TYPE_ID' => \CCrmOwnerType::Deal, 'OWNER_ID' => $ID, 'SUBJECT_PREFIX' => "Call for {$title}", 'DATE' => $date, 'MAX_DATE_OFFSET' => $duration, 'CLIENT_TYPE_ID' => $clientTypeID, 'CLIENT_ID' => $clientID, 'TYPE_ID' => \CCrmActivityType::Call, 'USER_IDS' => $userIDs)); } if ($meetingCount > 0) { $this->createActivities(array('COUNT' => $meetingCount, 'OWNER_TYPE_ID' => \CCrmOwnerType::Deal, 'OWNER_ID' => $ID, 'SUBJECT_PREFIX' => "Meeting for {$title}", 'DATE' => $date, 'MAX_DATE_OFFSET' => $duration, 'CLIENT_TYPE_ID' => $clientTypeID, 'CLIENT_ID' => $clientID, 'TYPE_ID' => \CCrmActivityType::Meeting, 'USER_IDS' => $userIDs)); } } if ($invoiceCount > 0) { $this->createInvoices(array('COUNT' => $invoiceCount, 'SUM' => $opportunity, 'DEAL_ID' => $ID, 'CONTACT_ID' => $contactID, 'COMPANY_ID' => $companyID, 'USER_IDS' => $userIDs, 'PREFIX' => $prefix, 'DATE' => $date, 'MAX_DATE_OFFSET' => $duration, 'IS_WON' => $lastStage === 'WON')); } } }
function __CrmEntitySummaryRenderHorSectionItem(&$item) { $type = isset($item['TYPE']) ? strtoupper($item['TYPE']) : ''; $title = isset($item['TITLE']) ? $item['TITLE'] : ''; if ($title !== '') { $title .= ':'; } $params = isset($item['PARAMS']) && is_array($item['PARAMS']) ? $item['PARAMS'] : array(); if ($type === '') { echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>', '<span class="crm-detail-info-item-text">', htmlspecialcharsbx(isset($item['VALUE']) ? $item['VALUE'] : ''), '</span>'; } elseif ($type === 'PROGRESS') { echo '<div class="crm-detail-stage crm-detail-info-item">', '<div class="crm-detail-stage-name">', htmlspecialcharsbx($title), '</div>', CCrmViewHelper::RenderProgressControl($params), '</div>'; } elseif ($type === 'SELECT') { echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>'; echo '<span class="crm-detail-info-item-text">'; $params['CONTAINER_CLASS'] = 'crm-item-type'; $params['TEXT_CLASS'] = 'crm-item-type-text'; $params['ARROW_CLASS'] = 'crm-item-type-text-corner'; CCrmViewHelper::RenderSelector($params); echo '</span>'; } elseif ($type === 'CLIENT_INFO') { echo '<div class="crm-item-client"><span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>', '<span class="crm-detail-info-item-text">', CCrmViewHelper::PrepareClientInfoV2($params), '</span></div>'; } elseif ($type === 'CLIENT_BALLOON') { if (isset($params['name'])) { $title = $params['name']; if ($title !== '') { $title .= ':'; } } echo '<div class="crm-item-client-ballon"><span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>', '<span class="crm-detail-info-item-text">'; if (isset($params['value'])) { echo $params['value']; } else { echo CCrmViewHelper::PrepareEntityBaloonHtml($params); } echo '</span></div>'; } elseif ($type === 'MULTIFIELD') { $typeName = isset($params['TYPE']) ? $params['TYPE'] : ''; $values = isset($params['VALUES']) ? $params['VALUES'] : array(); $valueTypes = isset($params['VALUE_TYPES']) ? $params['VALUE_TYPES'] : array(); $valueCount = isset($params['VALUE_COUNT']) ? intval($params['VALUE_COUNT']) : 0; $displayIfEmpty = isset($params['DISPLAY_IF_EMPTY']) ? $params['DISPLAY_IF_EMPTY'] : true; if (!$displayIfEmpty && $valueCount <= 0) { return; } $options = isset($item['OPTIONS']) && is_array($item['OPTIONS']) ? $item['OPTIONS'] : array(); $enableSip = is_array($options) && isset($options['ENABLE_SIP']) && (bool) $options['ENABLE_SIP']; $titleClassName = 'crm-detail-info-item-name'; if ($enableSip) { $titleClassName .= ' crm-detail-info-item-name-tel-sip'; } $contentClassName = 'crm-detail-info-item-text crm-item-tel'; if ($enableSip) { $contentClassName .= ' crm-item-tel-tel-sip'; } echo '<span class="' . $titleClassName . '">', htmlspecialcharsbx($title), '</span>', '<span class="' . $contentClassName . '">'; echo CCrmViewHelper::PrepareFirstMultiFieldHtml($typeName, $values, $valueTypes, array(), $options); if ($valueCount > 1) { $prefix = isset($params['PREFIX']) ? $params['PREFIX'] : ''; $anchorID = ($prefix !== '' ? "{$prefix}_" : '') . strtolower($typeName); echo '<span class="crm-item-tel-list" id="', htmlspecialcharsbx($anchorID), '"', ' onclick="', CCrmViewHelper::PrepareMultiFieldValuesPopup($anchorID, $anchorID, $typeName, $values, $valueTypes, $options), '"></span>'; } echo '</span>'; } elseif ($type === 'RESPONSIBLE') { CCrmViewHelper::RenderResponsiblePanel($params); } elseif ($type === 'MODIFICATION_INFO') { $date = isset($params['DATE']) ? $params['DATE'] : ''; $userName = isset($params['USER_NAME']) ? $params['USER_NAME'] : ''; $pathToUser = isset($params['PATH_TO_USER']) ? $params['PATH_TO_USER'] : ''; echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>', '<span class="crm-detail-info-item-text">'; echo $date !== '' ? FormatDate('SHORT', MakeTimeStamp($date)) : '-'; if ($userName !== '' && $pathToUser !== '') { echo ', <a class="crm-detail-info-link" href="', htmlspecialcharsbx($pathToUser), '">', htmlspecialcharsbx($userName), '</a>'; } echo '</span>'; } elseif ($type === 'DURATION') { $from = !empty($params['FROM']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($params['FROM']), 'SHORT', SITE_ID)) : '-'; $to = !empty($params['TO']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($params['TO']), 'SHORT', SITE_ID)) : '-'; echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>', '<span class="crm-detail-info-item-text crm-item-date">'; echo '<i>', htmlspecialcharsbx(GetMessage('CRM_DURATION_FROM')), '</i>', '<span class="crm-item-date-calendar">', htmlspecialcharsbx($from), '</span>', '<i>', htmlspecialcharsbx(GetMessage('CRM_DURATION_TO')), '</i>', '<span class="crm-item-date-calendar">', htmlspecialcharsbx($to), '</span>'; echo '</span>'; } elseif ($type === 'MONEY') { $fieldID = isset($params['FIELD_ID']) ? $params['FIELD_ID'] : ''; $value = isset($params['VALUE']) ? $params['VALUE'] : ''; $currencyID = isset($params['CURRENCY_ID']) ? $params['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $editable = isset($params['EDITABLE']) ? $params['EDITABLE'] : false; echo '<div class="crm-item-sum', $editable ? ' crm-instant-editor-fld-block' : '', '">'; echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>'; if (!$editable) { echo '<span class="crm-detail-info-item-text">', CCrmCurrency::MoneyToString($value, $currencyID), '</span>'; } else { echo '<span class="crm-detail-info-item-text">'; CCrmViewHelper::RenderInstantEditorField(array('TYPE' => 'TEXT', 'FIELD_ID' => $fieldID, 'VALUE' => $value, 'SUFFIX_HTML' => " {$currencyID}", 'INPUT_WIDTH' => 80)); echo '</span>'; } echo '</div>'; } elseif ($type === 'PERCENT') { $fieldID = isset($params['FIELD_ID']) ? $params['FIELD_ID'] : ''; $value = isset($params['VALUE']) ? $params['VALUE'] : ''; $editable = isset($params['EDITABLE']) ? $params['EDITABLE'] : false; echo '<div', $editable ? ' class="crm-instant-editor-fld-block"' : '', '>'; echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>'; if (!$editable) { echo '<span class="crm-detail-info-item-text">', htmlspecialcharsbx($value), ' %</span>'; } else { echo '<span class="crm-detail-info-item-text">'; CCrmViewHelper::RenderInstantEditorField(array('TYPE' => 'TEXT', 'FIELD_ID' => $fieldID, 'VALUE' => $value, 'SUFFIX_HTML' => "%", 'INPUT_WIDTH' => 30)); echo '</span>'; } echo '</div>'; } elseif ($type === 'TEXT') { $fieldID = isset($params['FIELD_ID']) ? $params['FIELD_ID'] : ''; $value = isset($params['VALUE']) ? $params['VALUE'] : ''; $editable = isset($params['EDITABLE']) ? $params['EDITABLE'] : false; $width = isset($params['WIDTH']) ? $params['WIDTH'] : 50; echo '<div', $editable ? ' class="crm-instant-editor-fld-block"' : '', '>'; echo '<span class="crm-detail-info-item-name">', htmlspecialcharsbx($title), '</span>'; if (!$editable) { echo '<span class="crm-detail-info-item-text">', htmlspecialcharsbx($value), '</span>'; } else { echo '<span class="crm-detail-info-item-text"><span class="crm-detail-item-text-alignment">'; CCrmViewHelper::RenderInstantEditorField(array('TYPE' => 'TEXT', 'FIELD_ID' => $fieldID, 'VALUE' => $value, 'INPUT_WIDTH' => $width)); echo '</span></span>'; } echo '</div>'; } elseif ($type === 'CUSTOM') { $fieldID = isset($params['FIELD_ID']) ? $params['FIELD_ID'] : ''; $value = isset($params['VALUE']) ? $params['VALUE'] : ''; echo $value; } }
$locFields['CURRENCY'] = $currencyID; $locFields['LID'] = $k; if (is_array(CCurrencyLang::GetByID($currencyID, $k))) { CCurrencyLang::Update($currencyID, $k, $locFields); } else { $locFields['DECIMALS'] = 2; //Default decimals CCurrencyLang::Add($locFields); } } } if ($result) { if ($currency['IS_ACCOUNTING_CURRENCY'] && $currencyID !== CCrmCurrency::GetAccountCurrencyID()) { CCrmCurrency::SetAccountCurrencyID($currencyID); } elseif (!$currency['IS_ACCOUNTING_CURRENCY'] && $currencyID === CCrmCurrency::GetAccountCurrencyID()) { CCrmCurrency::SetAccountCurrencyID(CCrmCurrency::GetBaseCurrencyID()); } if ($currency['IS_INVOICE_CURRENCY'] && $currencyID !== CCrmCurrency::getInvoiceDefault()) { CCrmCurrency::setInvoiceDefault($currencyID); } LocalRedirect(isset($_POST['apply']) ? CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CURRENCY_EDIT'], array('currency_id' => $currencyID)) : CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CURRENCY_LIST'], array('currency_id' => $currencyID))); } } elseif ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['delete'])) { $currencyID = isset($arParams['CURRENCY_ID']) ? strval($arParams['CURRENCY_ID']) : ''; $currency = isset($currencyID[0]) ? CCrmCurrency::GetByID($currencyID) : null; if ($currency) { if (!CCrmCurrency::Delete($currencyID)) { $err = CCrmCurrency::GetLastError(); ShowError(isset($err[0]) ? $err : GetMessage('CRM_CURRENCY_DELETE_UNKNOWN_ERROR')); return; }
$arFields['DATE_PAY_BEFORE_STAMP'] = 0; $arFields['~DATE_PAY_BEFORE'] = $arFields['DATE_PAY_BEFORE'] = ''; $arFields['DATE_BILL_STAMP'] = $now; $arFields['~DATE_BILL'] = $arFields['~DATE_INSERT'] = $nowDate; $arFields['DATE_BILL'] = $arFields['DATE_INSERT'] = htmlspecialcharsbx($nowDate); if (isset($_REQUEST['deal_id'])) { $dealID = max(intval($_REQUEST['deal_id']), 0); } if ($dealID > 0) { $arFields['~UF_DEAL_ID'] = $arFields['UF_DEAL_ID'] = $dealID; $dbDeal = CCrmDeal::GetListEx(array(), array('=ID' => $dealID), false, false, array('ID', 'COMPANY_ID', 'CONTACT_ID', 'CURRENCY_ID', 'ASSIGNED_BY_ID', 'TITLE', 'COMMENTS')); $deal = $dbDeal ? $dbDeal->Fetch() : null; if (is_array($deal)) { $companyID = $arFields['~UF_COMPANY_ID'] = $arFields['UF_COMPANY_ID'] = isset($deal['COMPANY_ID']) ? intval($deal['COMPANY_ID']) : 0; $contactID = $arFields['~UF_CONTACT_ID'] = $arFields['UF_CONTACT_ID'] = isset($deal['CONTACT_ID']) ? intval($deal['CONTACT_ID']) : 0; $dealCurrencyID = isset($deal['CURRENCY_ID']) ? $deal['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $arFields['~ORDER_TOPIC'] = isset($deal['TITLE']) ? $deal['TITLE'] : ''; $arFields['ORDER_TOPIC'] = htmlspecialcharsbx($arFields['~ORDER_TOPIC']); $arFields['~USER_DESCRIPTION'] = isset($deal['COMMENTS']) ? $deal['COMMENTS'] : ''; $arFields['USER_DESCRIPTION'] = htmlspecialcharsbx($arFields['~USER_DESCRIPTION']); $arFields['~RESPONSIBLE_ID'] = $arFields['RESPONSIBLE_ID'] = isset($deal['ASSIGNED_BY_ID']) ? intval($deal['ASSIGNED_BY_ID']) : 0; } } else { if (isset($_REQUEST['company_id'])) { $companyID = max(intval($_REQUEST['company_id']), 0); } if ($companyID > 0) { $arFields['UF_COMPANY_ID'] = $companyID; } if (isset($_REQUEST['contact_id'])) { $contactID = max(intval($_REQUEST['contact_id']), 0);
} unset($arFields, $fieldID, $obFile, $obFileControl, $html, $fieldValue); $visibleFields = array(); $productFormOptions = CUserOptions::GetOption('main.interface.form', 'CRM_PRODUCT_EDIT', array()); if (is_array($productFormOptions) && is_array($productFormOptions['tabs']) && count($productFormOptions['tabs']) && (!isset($productFormOptions['settings_disabled']) || $productFormOptions['settings_disabled'] !== 'Y')) { $tabFound = false; $tab = null; foreach ($productFormOptions['tabs'] as $tab) { if (isset($tab['id']) && $tab['id'] === 'tab_1') { $tabFound = true; break; } } if ($tabFound) { if (is_array($tab) && is_array($tab['fields'])) { foreach ($tab['fields'] as $field) { if (isset($field['type']) && isset($field['id']) && $field['type'] !== 'section') { $visibleFields[] = $field['id']; } } } } } $arResult['PRODUCT_CREATE_DLG_VISIBLE_FIELDS'] = $visibleFields; unset($productFormOptions); $arResult['PRODUCT_CREATE_DLG_SETTINGS'] = array('formId' => 'crm_product_create_dialog_form', 'url' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_PRODUCT_EDIT'], array('product_id' => 0)), 'sessid' => bitrix_sessid(), 'messages' => array('dialogTitle' => GetMessage('CRM_PRODUCT_CREATE'), 'waitMessage' => GetMessage('CRM_PRODUCT_CREATE_WAIT'), 'ajaxError' => GetMessage('CRM_PRODUCT_CREATE_AJAX_ERR'), 'buttonCreateTitle' => GetMessage('CRM_BUTTON_CREATE_TITLE'), 'buttonCancelTitle' => GetMessage('CRM_BUTTON_CANCEL_TITLE'), 'NAME' => GetMessage('CRM_FIELD_PRODUCT_NAME'), 'DESCRIPTION' => GetMessage('CRM_FIELD_DESCRIPTION'), 'ACTIVE' => GetMessage('CRM_FIELD_ACTIVE'), 'CURRENCY' => GetMessage('CRM_FIELD_CURRENCY'), 'PRICE' => GetMessage('CRM_FIELD_PRICE'), 'MEASURE' => GetMessage('CRM_FIELD_MEASURE'), 'VAT_ID' => GetMessage('CRM_FIELD_VAT_ID'), 'VAT_INCLUDED' => GetMessage('CRM_FIELD_VAT_INCLUDED'), 'SECTION' => GetMessage('CRM_FIELD_SECTION'), 'SORT' => GetMessage('CRM_FIELD_SORT'), 'PREVIEW_PICTURE' => GetMessage('CRM_PRODUCT_FIELD_PREVIEW_PICTURE'), 'DETAIL_PICTURE' => GetMessage('CRM_PRODUCT_FIELD_DETAIL_PICTURE')), 'fields' => array(array('textCode' => 'NAME', 'type' => 'text', 'maxLength' => 255, 'value' => '', 'skip' => 'N', 'required' => 'Y'), array('textCode' => 'DESCRIPTION', 'type' => 'textarea', 'maxLength' => 7500, 'value' => '', 'skip' => !CCrmProductHelper::IsFieldVisible('DESCRIPTION', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'ACTIVE', 'type' => 'checkbox', 'value' => 'Y', 'skip' => 'Y'), array('textCode' => 'CURRENCY', 'type' => 'select', 'value' => CCrmCurrency::GetBaseCurrencyID(), 'items' => CCrmViewHelper::prepareSelectItemsForJS(CCrmCurrencyHelper::PrepareListItems()), 'skip' => !CCrmProductHelper::IsFieldVisible('CURRENCY', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'PRICE', 'type' => 'text', 'maxLength' => 21, 'value' => '0.00', 'skip' => !CCrmProductHelper::IsFieldVisible('PRICE', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'MEASURE', 'type' => 'select', 'value' => '', 'items' => CCrmViewHelper::prepareSelectItemsForJS($measureListItems), 'skip' => !CCrmProductHelper::IsFieldVisible('MEASURE', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'VAT_ID', 'type' => 'select', 'value' => '', 'items' => $arResult['ALLOW_TAX'] ? CCrmViewHelper::prepareSelectItemsForJS(CCrmVat::GetVatRatesListItems()) : null, 'skip' => $arResult['ALLOW_TAX'] ? !CCrmProductHelper::IsFieldVisible('VAT_ID', $visibleFields) ? 'Y' : 'N' : 'Y'), array('textCode' => 'VAT_INCLUDED', 'type' => 'checkbox', 'value' => 'N', 'skip' => $arResult['ALLOW_TAX'] ? !CCrmProductHelper::IsFieldVisible('VAT_INCLUDED', $visibleFields) ? 'Y' : 'N' : 'Y'), array('textCode' => 'SECTION', 'type' => 'select', 'value' => '0', 'items' => CCrmViewHelper::prepareSelectItemsForJS(CCrmProductHelper::PrepareSectionListItems(CCrmCatalog::EnsureDefaultExists())), 'skip' => !CCrmProductHelper::IsFieldVisible('SECTION', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'SORT', 'type' => 'text', 'maxLength' => 11, 'value' => 100, 'skip' => 'Y'), array('textCode' => 'PREVIEW_PICTURE', 'type' => 'custom', 'value' => $htmlPreviewPictureValue, 'skip' => !CCrmProductHelper::IsFieldVisible('PREVIEW_PICTURE', $visibleFields) ? 'Y' : 'N'), array('textCode' => 'DETAIL_PICTURE', 'type' => 'custom', 'value' => $htmlDetailPictureValue, 'skip' => !CCrmProductHelper::IsFieldVisible('DETAIL_PICTURE', $visibleFields) ? 'Y' : 'N')), "ownerCurrencyId" => $currencyID); unset($visibleFields); $arResult['PRODUCT_PROPS_USER_TYPES'] = $arPropUserTypeList; $arResult['PRODUCT_PROPS'] = $arProps; /** @var CBitrixComponent $this */ $this->IncludeComponentTemplate();
public function Add(array &$arFields, $bUpdateSearch = true, $options = array()) { global $DB; if (!is_array($options)) { $options = array(); } $this->LAST_ERROR = ''; $iUserId = CCrmSecurityHelper::GetCurrentUserID(); if (isset($arFields['ID'])) { unset($arFields['ID']); } if (isset($arFields['DATE_CREATE'])) { unset($arFields['DATE_CREATE']); } $arFields['~DATE_CREATE'] = $DB->CurrentTimeFunction(); $arFields['~DATE_MODIFY'] = $DB->CurrentTimeFunction(); if (!isset($arFields['CREATED_BY_ID']) || intval($arFields['CREATED_BY_ID']) <= 0) { $arFields['CREATED_BY_ID'] = $iUserId; } if (!isset($arFields['MODIFY_BY_ID']) || intval($arFields['MODIFY_BY_ID']) <= 0) { $arFields['MODIFY_BY_ID'] = $iUserId; } if (!isset($arFields['ASSIGNED_BY_ID']) || intval($arFields['ASSIGNED_BY_ID']) <= 0) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if (isset($arFields['REVENUE'])) { $arFields['REVENUE'] = floatval($arFields['REVENUE']); } if (!$this->CheckFields($arFields, false, $options)) { $result = false; $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; } else { $arAttr = array(); if (!empty($arFields['OPENED'])) { $arAttr['OPENED'] = $arFields['OPENED']; } $sPermission = 'ADD'; if (isset($arFields['PERMISSION'])) { if ($arFields['PERMISSION'] == 'IMPORT') { $sPermission = 'IMPORT'; } unset($arFields['PERMISSION']); } if ($this->bCheckPermission) { $arEntityAttr = self::BuildEntityAttr($iUserId, $arAttr); $userPerms = $iUserId == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($iUserId); $sEntityPerm = $userPerms->GetPermType('COMPANY', $sPermission, $arEntityAttr); if ($sEntityPerm == BX_CRM_PERM_NONE) { $this->LAST_ERROR = GetMessage('CRM_PERMISSION_DENIED'); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; return false; } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); if ($sEntityPerm == BX_CRM_PERM_SELF && $assignedByID != $iUserId) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if ($sEntityPerm == BX_CRM_PERM_OPEN && $iUserId == $assignedByID) { $arFields['OPENED'] = 'Y'; } } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $arEntityAttr = self::BuildEntityAttr($assignedByID, $arAttr); $userPerms = $assignedByID == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($assignedByID); $sEntityPerm = $userPerms->GetPermType('COMPANY', $sPermission, $arEntityAttr); $this->PrepareEntityAttrs($arEntityAttr, $sEntityPerm); if (isset($arFields['LOGO']) && is_array($arFields['LOGO']) && strlen(CFile::CheckImageFile($arFields['LOGO'])) === 0) { $arFields['LOGO']['MODULE_ID'] = 'crm'; CFile::SaveForDB($arFields, 'LOGO', 'crm'); } $beforeEvents = GetModuleEvents('crm', 'OnBeforeCrmCompanyAdd'); while ($arEvent = $beforeEvents->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) { if (isset($arFields['RESULT_MESSAGE'])) { $this->LAST_ERROR = $arFields['RESULT_MESSAGE']; } else { $this->LAST_ERROR = GetMessage('CRM_COMPANY_CREATION_CANCELED', array('#NAME#' => $arEvent['TO_NAME'])); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; } return false; } } $ID = intval($DB->Add('b_crm_company', $arFields, array(), 'FILE: ' . __FILE__ . '<br /> LINE: ' . __LINE__)); $result = $arFields['ID'] = $ID; CCrmPerms::UpdateEntityAttr('COMPANY', $ID, $arEntityAttr); \Bitrix\Crm\Integrity\DuplicateOrganizationCriterion::register(CCrmOwnerType::Company, $ID, $arFields['TITLE']); CCrmEntityHelper::NormalizeUserFields($arFields, self::$sUFEntityID, $GLOBALS['USER_FIELD_MANAGER'], array('IS_NEW' => true)); $GLOBALS['USER_FIELD_MANAGER']->Update(self::$sUFEntityID, $ID, $arFields); if (isset($arFields['FM']) && is_array($arFields['FM'])) { $CCrmFieldMulti = new CCrmFieldMulti(); $CCrmFieldMulti->SetFields('COMPANY', $ID, $arFields['FM']); $emails = \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::extractMultifieldsValues($arFields['FM'], 'EMAIL'); if (!empty($emails)) { \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::register(CCrmOwnerType::Company, $ID, 'EMAIL', $emails); } $phones = Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::extractMultifieldsValues($arFields['FM'], 'PHONE'); if (!empty($phones)) { \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::register(CCrmOwnerType::Company, $ID, 'PHONE', $phones); } } \Bitrix\Crm\Integrity\DuplicateEntityRanking::registerEntityStatistics(CCrmOwnerType::Company, $ID, $arFields); if ($bUpdateSearch) { CCrmSearch::UpdateSearch(array('ID' => $ID, 'CHECK_PERMISSIONS' => 'N'), 'COMPANY', true); } if (isset($arFields['CONTACT_ID']) && is_array($arFields['CONTACT_ID'])) { $CCrmContact = new CCrmContact(); $CCrmContact->UpdateCompanyId($arFields['CONTACT_ID'], $arFields['ID']); if (isset($GLOBALS["USER"])) { if (!class_exists('CUserOptions')) { include_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/classes/' . $GLOBALS['DBType'] . '/favorites.php'; } CUserOptions::SetOption('crm', 'crm_contact_search', array('last_selected' => implode(',', $arFields['CONTACT_ID']))); } } if (isset($options['REGISTER_SONET_EVENT']) && $options['REGISTER_SONET_EVENT'] === true) { $revenue = round(isset($arFields['REVENUE']) ? doubleval($arFields['REVENUE']) : 0.0, 2); $currencyID = isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $multiFields = isset($arFields['FM']) ? $arFields['FM'] : null; $phones = CCrmFieldMulti::ExtractValues($multiFields, 'PHONE'); $emails = CCrmFieldMulti::ExtractValues($multiFields, 'EMAIL'); $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $createdByID = intval($arFields['CREATED_BY_ID']); $liveFeedFields = array('USER_ID' => $createdByID, 'ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $ID, 'TITLE' => GetMessage('CRM_COMPANY_EVENT_ADD'), 'MESSAGE' => '', 'PARAMS' => array('TITLE' => $arFields['TITLE'], 'LOGO_ID' => isset($arFields['LOGO']) ? $arFields['LOGO'] : '', 'TYPE' => isset($arFields['COMPANY_TYPE']) ? $arFields['COMPANY_TYPE'] : '', 'REVENUE' => strval($revenue), 'CURRENCY_ID' => $currencyID, 'PHONES' => $phones, 'EMAILS' => $emails, 'AUTHOR_ID' => intval($arFields['CREATED_BY_ID']), 'RESPONSIBLE_ID' => $assignedByID)); CCrmSonetSubscription::RegisterSubscription(CCrmOwnerType::Company, $ID, CCrmSonetSubscriptionType::Responsibility, $assignedByID); $logEventID = CCrmLiveFeed::CreateLogEvent($liveFeedFields, CCrmLiveFeedEvent::Add); if ($logEventID && $assignedByID != $createdByID && CModule::IncludeModule("im")) { $url = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Company, $ID); $serverName = (CMain::IsHTTPS() ? "https" : "http") . "://" . (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0 ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", "")); $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $assignedByID, "FROM_USER_ID" => $createdByID, "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "crm", "LOG_ID" => $logEventID, "NOTIFY_EVENT" => "company_add", "NOTIFY_TAG" => "CRM|COMPANY_RESPONSIBLE|" . $ID, "NOTIFY_MESSAGE" => GetMessage("CRM_COMPANY_RESPONSIBLE_IM_NOTIFY", array("#title#" => "<a href=\"" . $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($arFields['TITLE']) . "</a>")), "NOTIFY_MESSAGE_OUT" => GetMessage("CRM_COMPANY_RESPONSIBLE_IM_NOTIFY", array("#title#" => htmlspecialcharsbx($arFields['TITLE']))) . " (" . $serverName . $url . ")"); CIMNotify::Add($arMessageFields); } } $afterEvents = GetModuleEvents('crm', 'OnAfterCrmCompanyAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if (isset($arFields['ORIGIN_ID']) && $arFields['ORIGIN_ID'] !== '') { $afterEvents = GetModuleEvents('crm', 'OnAfterExternalCrmCompanyAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } } } return $result; }
// Prepare tax list if (!$arResult['VAT_MODE']) { $arResult['TAX_LIST'] = CCrmInvoice::getTaxList($ownerID); $arResult['TAX_LIST_PERCENT_PRECISION'] = SALE_VALUE_PRECISION; } // Prepare sum total $sumTotal = 0.0; foreach ($arResult['PRODUCT_ROWS'] as $row) { if (!isset($row['PRICE']) || !isset($row['QUANTITY'])) { continue; } $sumTotal += doubleval($row['PRICE']) * intval($row['QUANTITY']); } $arResult['TAX_VALUE'] = isset($arParams['TAX_VALUE']) ? $arParams['TAX_VALUE'] : 0.0; $arResult['SUM_TOTAL'] = isset($arParams['SUM_TOTAL']) ? $arParams['SUM_TOTAL'] : round($sumTotal, 2); $arResult['TAX_VALUE_WT'] = round(doubleval($arParams['SUM_TOTAL'] - doubleval($arParams['TAX_VALUE'])), 2); //SAVING MODE. ONSUBMIT: SAVE ALL PRODUCT ROWS ON SUBMIT, ONCHANGE: SAVE PRODUCT ROWS AFTER EVERY CHANGE (AJAX) $arResult['SAVING_MODE'] = isset($arParams['SAVING_MODE']) ? strtoupper($arParams['SAVING_MODE']) : 'ONSUBMIT'; if ($arResult['SAVING_MODE'] != 'ONSUBMIT' && $arResult['SAVING_MODE'] != 'ONCHANGE') { $arResult['SAVING_MODE'] = 'ONSUBMIT'; } $arResult['FORM_ID'] = isset($arParams['FORM_ID']) ? $arParams['FORM_ID'] : ''; $arResult['PREFIX'] = htmlspecialcharsbx($ownerID > 0 ? strtolower($ownerName) . '_' . strval($ownerID) : 'new_' . strtolower($ownerName)); $arResult['CONTAINER_CLASS'] = htmlspecialcharsbx(strtolower($ownerName) . '-product-rows'); $arResult['ROW_CLASS'] = ''; $arResult['PRODUCT_DATA_FIELD_NAME'] = isset($arParams['PRODUCT_DATA_FIELD_NAME']) ? $arParams['PRODUCT_DATA_FIELD_NAME'] : 'PRODUCT_ROW_DATA'; // crmProductCreateDialog dialog settings $bVatMode = CCrmTax::isVatMode(); $arResult['INVOICE_PRODUCT_CREATE_DLG_SETTINGS'] = array('url' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_PRODUCT_EDIT'], array('product_id' => 0)), 'sessid' => bitrix_sessid(), 'messages' => array('dialogTitle' => GetMessage('CRM_PRODUCT_CREATE'), 'waitMessage' => GetMessage('CRM_PRODUCT_CREATE_WAIT'), 'ajaxError' => GetMessage('CRM_PRODUCT_CREATE_AJAX_ERR'), 'buttonCreateTitle' => GetMessage('CRM_BUTTON_CREATE_TITLE'), 'buttonCancelTitle' => GetMessage('CRM_BUTTON_CANCEL_TITLE'), 'NAME' => GetMessage('CRM_FIELD_NAME'), 'DESCRIPTION' => GetMessage('CRM_FIELD_DESCRIPTION'), 'ACTIVE' => GetMessage('CRM_FIELD_ACTIVE'), 'CURRENCY' => GetMessage('CRM_FIELD_CURRENCY'), 'PRICE' => GetMessage('CRM_FIELD_PRICE'), 'VAT_ID' => GetMessage('CRM_FIELD_VAT_ID'), 'VAT_INCLUDED' => GetMessage('CRM_FIELD_VAT_INCLUDED'), 'SECTION_ID' => GetMessage('CRM_FIELD_SECTION'), 'SORT' => GetMessage('CRM_FIELD_SORT')), 'fields' => array(array('textCode' => 'NAME', 'type' => 'text', 'maxLength' => 255, 'value' => '', 'skip' => 'N'), array('textCode' => 'DESCRIPTION', 'type' => 'textarea', 'maxLength' => 7500, 'value' => '', 'skip' => 'N'), array('textCode' => 'ACTIVE', 'type' => 'checkbox', 'value' => 'Y', 'skip' => 'N'), array('textCode' => 'CURRENCY', 'type' => 'select', 'value' => CCrmCurrency::GetBaseCurrencyID(), 'items' => CCrmViewHelper::prepareSelectItemsForJS(CCrmCurrencyHelper::PrepareListItems()), 'skip' => 'N'), array('textCode' => 'PRICE', 'type' => 'text', 'maxLength' => 21, 'value' => '0.00', 'skip' => 'N'), array('textCode' => 'VAT_ID', 'type' => 'select', 'value' => '', 'items' => $bVatMode ? CCrmViewHelper::prepareSelectItemsForJS(CCrmVat::GetVatRatesListItems()) : null, 'skip' => $bVatMode ? 'N' : 'Y'), array('textCode' => 'VAT_INCLUDED', 'type' => 'checkbox', 'value' => 'N', 'skip' => $bVatMode ? 'N' : 'Y'), array('textCode' => 'SECTION_ID', 'type' => 'select', 'value' => '0', 'items' => CCrmViewHelper::prepareSelectItemsForJS(CCrmProductHelper::PrepareSectionListItems(CCrmCatalog::EnsureDefaultExists())), 'skip' => 'N'), array('textCode' => 'SORT', 'type' => 'text', 'maxLength' => 11, 'value' => 100, 'skip' => 'N')), "ownerCurrencyId" => $currencyID); unset($bVatMode); $this->IncludeComponentTemplate();
$productRow['ID'] = isset($productRow['ID']) ? intval($productRow['ID']) : 0; $productRow['PRODUCT_ID'] = isset($productRow['PRODUCT_ID']) ? intval($productRow['PRODUCT_ID']) : 0; $productRow['PRODUCT_NAME'] = isset($productRow['PRODUCT_NAME']) ? $productRow['PRODUCT_NAME'] : ''; $productRow['QUANTITY'] = isset($productRow['QUANTITY']) ? doubleval($productRow['QUANTITY']) : 1.0; $productRow['DISCOUNT_TYPE_ID'] = isset($productRow['DISCOUNT_TYPE_ID']) && \Bitrix\Crm\Discount::isDefined(intval($productRow['DISCOUNT_TYPE_ID'])) ? intval($productRow['DISCOUNT_TYPE_ID']) : \Bitrix\Crm\Discount::PERCENTAGE; $productRow['DISCOUNT_RATE'] = isset($productRow['DISCOUNT_RATE']) ? doubleval($productRow['DISCOUNT_RATE']) : 0.0; $productRow['DISCOUNT_SUM'] = isset($productRow['DISCOUNT_SUM']) ? doubleval($productRow['DISCOUNT_SUM']) : 0.0; $productRow['PRICE'] = isset($productRow['PRICE']) ? doubleval($productRow['PRICE']) : 1.0; $productRow['CUSTOMIZED'] = isset($productRow['CUSTOMIZED']) && strtoupper($productRow['CUSTOMIZED']) === 'Y' ? 'Y' : 'N'; if ($productRow['CUSTOMIZED'] === 'Y') { $productRow['TAX_RATE'] = isset($productRow['TAX_RATE']) ? doubleval($productRow['TAX_RATE']) : 0.0; } $totalDiscount += round($productRow['DISCOUNT_SUM'] * $productRow['QUANTITY'], 2); } unset($productRow); $currencyID = isset($_POST['CURRENCY_ID']) && $_POST['CURRENCY_ID'] !== '' ? $_POST['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $clientTypeName = isset($_POST['CLIENT_TYPE_NAME']) && $_POST['CLIENT_TYPE_NAME'] !== '' ? strtoupper($_POST['CLIENT_TYPE_NAME']) : 'CONTACT'; $personTypeIDs = CCrmPaySystem::getPersonTypeIDs(); if (empty($personTypeIDs)) { echo CUtil::PhpToJSObject(array('ERROR' => 'PERSON_TYPES_NOT_DEFINED')); } $personTypeID = isset($personTypeIDs[$clientTypeName]) ? intval($personTypeIDs[$clientTypeName]) : 0; if ($personTypeID <= 0) { echo CUtil::PhpToJSObject(array('ERROR' => 'COULD_NOT_FIND_PERSON_TYPE')); die; } $enableSaleDiscount = isset($_POST['ENABLE_ADDITIONAL_DISCOUNT']) && strtoupper($_POST['ENABLE_ADDITIONAL_DISCOUNT']) === 'Y'; $calculateOptions = array(); $isLDTaxAllowed = isset($_POST['ALLOW_LD_TAX']) ? $_POST['ALLOW_LD_TAX'] === 'Y' : CCrmTax::isTaxMode(); if ($isLDTaxAllowed && isset($_POST['LOCATION_ID'])) { $calculateOptions['LOCATION_ID'] = $_POST['LOCATION_ID'];
$arLead[$currentKey] = $result !== false ? $result : $data; } } elseif ($currentKey == 'SOURCE_ID') { if (isset($arStatus['SOURCE_LIST'][$data])) { // 1. Try to interpret value as ID $arLead[$currentKey] = $data; } else { $result = array_search($data, $arStatus['SOURCE_LIST']); $arLead[$currentKey] = $result !== false ? $result : $data; } } elseif ($currentKey == 'CURRENCY_ID') { $currency = CCrmCurrency::GetByName($data); if (!$currency) { $currency = CCrmCurrency::GetByID($data); } $arLead[$currentKey] = $currency ? $currency['CURRENCY'] : CCrmCurrency::GetBaseCurrencyID(); } elseif ($currentKey == 'PRODUCT_ID') { // For compatibility $arProduct = CCrmProduct::GetByOriginID('CRM_PROD_' . $data); if (is_array($arProduct)) { $arProductRow = array('PRODUCT_ID' => $arProduct['ID'], 'QUANTITY' => 1); // PRICE equals to OPPORTUNITY. We will set PRICE latter } else { $arProduct = CCrmProduct::GetByName($data); if ($arProduct) { $arProductRow['PRODUCT_ID'] = $arProduct['ID']; } else { $arProductRow['PRODUCT_ID'] = 0; } $arProductRow['PRODUCT_NAME'] = $data; }
$progressHtml = $arResult['HEAD_PROGRESS_BAR'] = CCrmViewHelper::RenderProgressControl(array('ENTITY_TYPE_NAME' => CCrmOwnerType::QuoteName, 'REGISTER_SETTINGS' => true, 'CONTROL_ID' => $arResult['GUID'], 'ENTITY_ID' => $entityFields['~ID'], 'CURRENT_ID' => $entityFields['~STATUS_ID'], 'SERVICE_URL' => '/bitrix/components/bitrix/crm.quote.list/list.ajax.php', 'READ_ONLY' => !$canEdit, 'DISPLAY_LEGEND' => false)); $currencyID = isset($entityFields['~CURRENCY_ID']) ? $entityFields['~CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $arResult['HEAD_FORMATTED_SUM'] = CCrmCurrency::MoneyToString(isset($entityFields['~OPPORTUNITY']) ? $entityFields['~OPPORTUNITY'] : 0.0, $currencyID); $arResult['HEAD_SUM_FIELD_ID'] = 'OPPORTUNITY'; __CrmQuickPanelViewPrepareContactInfo($entityFields, $entityContext); __CrmQuickPanelViewPrepareCompanyInfo($entityFields, $entityContext); foreach ($entityFields as $k => $v) { if (!isset($fieldKeys[$k])) { continue; } if ($k === 'STATUS_ID') { $entityData[$k] = array('type' => 'custom', 'data' => array('html' => "<div class=\"crm-detail-stage\"><div class=\"crm-detail-stage-name\">{$stageText}</div>{$progressHtml}</div>")); } elseif ($k === 'CURRENCY_ID') { $entityData[$k] = __CrmQuickPanelViewPrepareCurrencyEnumeration($v, $enableInstantEdit, $entityContext); } elseif ($k === 'OPPORTUNITY') { $entityData[$k] = __CrmQuickPanelViewPrepareMoney(isset($entityFields['~OPPORTUNITY']) ? $entityFields['~OPPORTUNITY'] : 0.0, isset($entityFields['~CURRENCY_ID']) ? $entityFields['~CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(), $enableInstantEdit, $arResult['SERVICE_URL'], $entityContext); } elseif ($k === 'BEGINDATE' || $k === 'CLOSEDATE') { $entityData[$k] = array('type' => 'datetime', 'editable' => $enableInstantEdit, 'data' => array('text' => $v !== null && $v !== '' ? ConvertTimeStamp(MakeTimeStamp($v), 'SHORT', SITE_ID) : '', 'enableTime' => false)); } elseif ($k === 'OPENED' || $k === 'CLOSED') { $v = $v !== null && $v !== '' ? strtoupper($v) : 'N'; $entityData[$k] = array('type' => 'boolean', 'editable' => $enableInstantEdit, 'data' => array('baseType' => 'char', 'value' => $v)); } elseif ($k === 'LEAD_ID') { $v = (int) $v; if ($v > 0) { $entityData[$k] = array('type' => 'link', 'data' => array('text' => CCrmOwnerType::GetCaption(CCrmOwnerType::Lead, $v), 'url' => CCrmOwnerType::GetShowUrl(CCrmOwnerType::Lead, $v, true))); } else { $entityData[$k] = array('type' => 'text', 'data' => array('text' => '')); } } elseif ($k === 'DEAL_ID') { $v = (int) $v; if ($v > 0) {
$rows = CCrmInvoice::GetProductRows($entityID); foreach ($rows as &$row) { $item = array('PRODUCT_NAME' => isset($row['PRODUCT_NAME']) ? $row['PRODUCT_NAME'] : '', 'PRICE' => isset($row['PRICE']) ? round(doubleval($row['PRICE']), 2) : 0.0, 'VAT_RATE' => isset($row['VAT_RATE']) ? round(doubleval($row['VAT_RATE']) * 100, 2) : 0.0, 'QUANTITY' => isset($row['QUANTITY']) ? intval($row['QUANTITY']) : 0); $item['FORMATTED_PRICE'] = CCrmCurrency::MoneyToString($item['PRICE'], $arResult['CURRENCY_ID']); $arResult['ITEMS'][] =& $item; unset($item); } unset($row); // VAT - VAT ONLY // EXT - EXTENDED MODE WITH CUSTOM TAXES $arResult['TAX_MODE'] = CCrmTax::isVatMode() ? 'VAT' : 'EXT'; if ($arResult['TAX_MODE'] === 'VAT') { $arResult['VAT_SUM'] = isset($arResult['TAX_SUM']) ? $arResult['TAX_SUM'] : 0.0; $arResult['FORMATTED_VAT_SUM'] = CCrmCurrency::MoneyToString($arResult['VAT_SUM'], $arResult['CURRENCY_ID']); $arResult['FORMATTED_SUM_BRUTTO'] = CCrmCurrency::MoneyToString($arResult['SUM'], $arResult['CURRENCY_ID']); } else { $arResult['TAX_LIST'] = CCrmInvoice::getTaxList($entityID); foreach ($arResult['TAX_LIST'] as &$taxInfo) { $taxInfo['FORMATTED_SUM'] = CCrmCurrency::MoneyToString($taxInfo['VALUE_MONEY'], $arResult['CURRENCY_ID']); } unset($taxInfo); $arResult['TAX_LIST_PERCENT_PRECISION'] = SALE_VALUE_PRECISION; } $arResult['FORMATTED_SUM_BRUTTO'] = CCrmCurrency::MoneyToString($arResult['SUM'], $arResult['CURRENCY_ID']); $arResult['FORMATTED_SUM_NETTO'] = CCrmCurrency::MoneyToString($arResult['SUM'] - $arResult['TAX_SUM'], $arResult['CURRENCY_ID']); } else { $arResult['TITLE'] = ''; $arResult['CURRENCY_ID'] = CCrmCurrency::GetBaseCurrencyID(); $arResult['SUM'] = 0.0; } $this->IncludeComponentTemplate();
$arFields['~CONTACT_POST'] = isset($arFields['~CONTACT_POST']) ? $arFields['~CONTACT_POST'] : ''; $arFields['~CONTACT_PHOTO'] = isset($arFields['~CONTACT_PHOTO']) ? intval($arFields['~CONTACT_PHOTO']) : 0; $arFields['~COMPANY_ID'] = isset($arFields['~COMPANY_ID']) ? intval($arFields['~COMPANY_ID']) : 0; $arFields['~COMPANY_TITLE'] = isset($arFields['~COMPANY_TITLE']) ? $arFields['~COMPANY_TITLE'] : ''; $arFields['~COMPANY_LOGO'] = isset($arFields['~COMPANY_LOGO']) ? intval($arFields['~COMPANY_LOGO']) : 0; $arFields['~ASSIGNED_BY_ID'] = isset($arFields['~ASSIGNED_BY_ID']) ? intval($arFields['~ASSIGNED_BY_ID']) : 0; $arFields['~ASSIGNED_BY_LOGIN'] = isset($arFields['~ASSIGNED_BY_LOGIN']) ? $arFields['~ASSIGNED_BY_LOGIN'] : ''; $arFields['~ASSIGNED_BY_NAME'] = isset($arFields['~ASSIGNED_BY_NAME']) ? $arFields['~ASSIGNED_BY_NAME'] : ''; $arFields['~ASSIGNED_BY_LAST_NAME'] = isset($arFields['~ASSIGNED_BY_LAST_NAME']) ? $arFields['~ASSIGNED_BY_LAST_NAME'] : ''; $arFields['~ASSIGNED_BY_SECOND_NAME'] = isset($arFields['~ASSIGNED_BY_SECOND_NAME']) ? $arFields['~ASSIGNED_BY_SECOND_NAME'] : ''; $arFields['~COMMENTS'] = isset($arFields['~COMMENTS']) ? $arFields['~COMMENTS'] : ''; if (!isset($arFields['~OPPORTUNITY'])) { $arFields['~OPPORTUNITY'] = $arFields['OPPORTUNITY'] = 0; } if (!isset($arFields['~CURRENCY_ID'])) { $arFields['~CURRENCY_ID'] = CCrmCurrency::GetBaseCurrencyID(); $arFields['CURRENCY_ID'] = htmlspecialcharsbx($arFields['~CURRENCY_ID']); } $contactID = $arFields['~CONTACT_ID']; $companyID = $arFields['~COMPANY_ID']; if ($contactID > 0) { $arFields['CONTACT_FM'] = array(); $dbMultiFields = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'CONTACT', 'ELEMENT_ID' => $contactID)); if ($dbMultiFields) { while ($multiFields = $dbMultiFields->Fetch()) { $arFields['CONTACT_FM'][$multiFields['TYPE_ID']][] = array('VALUE' => $multiFields['VALUE'], 'VALUE_TYPE' => $multiFields['VALUE_TYPE']); } } $arResult['CONTACT_CALLTO'] = CCrmMobileHelper::PrepareCalltoParams(array('COMMUNICATION_LIST_URL_TEMPLATE' => $arParams['COMMUNICATION_LIST_URL_TEMPLATE'], 'ENTITY_TYPE_ID' => CCrmOwnerType::Contact, 'ENTITY_ID' => $contactID, 'FM' => $arFields['CONTACT_FM'])); $arResult['CONTACT_MAILTO'] = CCrmMobileHelper::PrepareMailtoParams(array('COMMUNICATION_LIST_URL_TEMPLATE' => $arParams['COMMUNICATION_LIST_URL_TEMPLATE'], 'ENTITY_TYPE_ID' => CCrmOwnerType::Contact, 'ENTITY_ID' => $contactID, 'FM' => $arFields['CONTACT_FM'])); $arFields['CONTACT_CALL_EDIT_URL'] = $arParams['ACTIVITY_EDIT_URL_TEMPLATE'] !== '' ? CCrmUrlUtil::AddUrlParams(CComponentEngine::makePathFromTemplate($arParams['ACTIVITY_EDIT_URL_TEMPLATE'], array('owner_type' => CCrmOwnerType::DealName, 'owner_id' => $entityID, 'type_id' => CCrmActivityType::Call)), array('comm' => strtolower(CCrmOwnerType::ContactName) . '_' . $contactID)) : '';
if (substr($currentKey, 0, 1) === '~' || empty($data)) { continue; } else { if ($currentKey === 'ACTIVE' || $currentKey === 'VAT_INCLUDED') { $dataUpper = ToUpper($data); $data = $dataUpper === $upperYes || $dataUpper === 'Y' || $dataUpper === 'YES' || is_numeric($dataUpper) && intval($dataUpper) > 0 ? 'Y' : 'N'; if ($currentKey === 'VAT_INCLUDED' && isset($arProduct['VAT_ID']) && $arProduct['VAT_ID'] <= 0) { $data = 'N'; } } else { if ($currentKey === 'CURRENCY_ID') { $currency = CCrmCurrency::GetByName($data); if (!$currency) { $currency = CCrmCurrency::GetByID($data); } $data = $currency ? $currency['CURRENCY'] : CCrmCurrency::GetBaseCurrencyID(); } else { if ($currentKey === 'PRICE') { $data = round(doubleval($data), 2); } else { if ($currentKey === 'VAT_ID') { $data = array_search($data, $arVatRates); $data = $data === false ? 0 : intval($data); if ($data <= 0 && isset($arProduct['VAT_INCLUDED']) && $arProduct['VAT_INCLUDED'] !== 'N') { $arProduct['VAT_INCLUDED'] = 'N'; } } else { if ($currentKey === 'MEASURE') { $data = array_search($data, $arMeasures); $data = $data === false ? null : intval($data); } else {
// CONTEXT_ID --> $contextID = isset($arParams['CONTEXT_ID']) ? $arParams['CONTEXT_ID'] : ''; if ($contextID === '' && isset($_REQUEST['context_id'])) { $contextID = $_REQUEST['context_id']; } if ($contextID === '') { $contextID = "{$uid}_{$entityID}"; } $arResult['CONTEXT_ID'] = $arParams['CONTEXT_ID'] = $contextID; //<-- CONTEXT_ID $arResult['STATUS_LIST'] = CCrmStatus::GetStatusList('STATUS'); $arResult['SOURCE_LIST'] = CCrmStatus::GetStatusList('SOURCE'); $arFields = null; if ($entityID <= 0) { $arResult['MODE'] = 'CREATE'; $arFields = array('~CURRENCY_ID' => CCrmCurrency::GetBaseCurrencyID(), 'CURRENCY_ID' => htmlspecialcharsbx(CCrmCurrency::GetBaseCurrencyID()), 'FM' => array()); if ($arResult['USER_ID'] > 0) { $dbUser = CUser::GetList($by = 'id', $order = 'asc', array('ID' => $arResult['USER_ID']), array('FIELDS' => array('ID', 'LOGIN', 'EMAIL', 'NAME', 'LAST_NAME', 'SECOND_NAME'))); $user = $dbUser->Fetch(); if ($user) { $arFields['~ASSIGNED_BY_ID'] = $arResult['USER_ID']; $arFields['~ASSIGNED_BY_LOGIN'] = $user['LOGIN']; $arFields['~ASSIGNED_BY_NAME'] = $user['NAME']; $arFields['~ASSIGNED_BY_LAST_NAME'] = $user['LAST_NAME']; $arFields['~ASSIGNED_BY_SECOND_NAME'] = $user['SECOND_NAME']; } } $statuses = array_keys($arResult['STATUS_LIST']); if (!empty($statuses)) { $arFields['~STATUS_ID'] = $statuses[0]; $arFields['STATUS_ID'] = htmlspecialcharsbx($arFields['~STATUS_ID']);
} //FIELD_OPTIONS $arSelect = array_unique($arSelect, SORT_STRING); $obRes = CCrmQuote::GetList($arSort, $arFilter, false, !$isInExportMode ? $arNavParams : false, $arSelect, $arOptions); $arResult['QUOTE'] = array(); $arResult['QUOTE_ID'] = array(); $arResult['QUOTE_UF'] = array(); $now = time() + CTimeZone::GetOffset(); while ($arQuote = $obRes->GetNext()) { $arQuote['CLOSEDATE'] = !empty($arQuote['CLOSEDATE']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($arQuote['CLOSEDATE']), 'SHORT', SITE_ID)) : ''; $arQuote['BEGINDATE'] = !empty($arQuote['BEGINDATE']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($arQuote['BEGINDATE']), 'SHORT', SITE_ID)) : ''; /*$arQuote['EVENT_DATE'] = !empty($arQuote['EVENT_DATE']) ? CCrmComponentHelper::TrimDateTimeString(ConvertTimeStamp(MakeTimeStamp($arQuote['EVENT_DATE']), 'SHORT', SITE_ID)) : '';*/ $arQuote['~CLOSEDATE'] = $arQuote['CLOSEDATE']; $arQuote['~BEGINDATE'] = $arQuote['BEGINDATE']; /*$arQuote['~EVENT_DATE'] = $arQuote['EVENT_DATE'];*/ $currencyID = isset($arQuote['~CURRENCY_ID']) ? $arQuote['~CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $arQuote['~CURRENCY_ID'] = $currencyID; $arQuote['CURRENCY_ID'] = htmlspecialcharsbx($currencyID); $arQuote['FORMATTED_OPPORTUNITY'] = CCrmCurrency::MoneyToString($arQuote['~OPPORTUNITY'], $arQuote['~CURRENCY_ID']); $entityID = $arQuote['ID']; $arQuote['PATH_TO_QUOTE_SHOW'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_SHOW'], array('quote_id' => $entityID)); $arQuote['PATH_TO_QUOTE_EDIT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_EDIT'], array('quote_id' => $entityID)); $arQuote['PATH_TO_QUOTE_COPY'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_EDIT'], array('quote_id' => $entityID)), array('copy' => 1)); $arQuote['PATH_TO_QUOTE_DELETE'] = CHTTP::urlAddParams($bInternal ? $APPLICATION->GetCurPage() : $arParams['PATH_TO_QUOTE_LIST'], array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $entityID, 'sessid' => bitrix_sessid())); $contactID = isset($arQuote['~CONTACT_ID']) ? intval($arQuote['~CONTACT_ID']) : 0; $arQuote['PATH_TO_CONTACT_SHOW'] = $contactID <= 0 ? '' : CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CONTACT_SHOW'], array('contact_id' => $contactID)); $arQuote['~CONTACT_FORMATTED_NAME'] = $contactID <= 0 ? '' : CUser::FormatName(\Bitrix\Crm\Format\PersonNameFormatter::getFormat(), array('LOGIN' => '', 'NAME' => isset($arQuote['~CONTACT_NAME']) ? $arQuote['~CONTACT_NAME'] : '', 'LAST_NAME' => isset($arQuote['~CONTACT_LAST_NAME']) ? $arQuote['~CONTACT_LAST_NAME'] : '', 'SECOND_NAME' => isset($arQuote['~CONTACT_SECOND_NAME']) ? $arQuote['~CONTACT_SECOND_NAME'] : ''), false, false); $arQuote['CONTACT_FORMATTED_NAME'] = htmlspecialcharsbx($arQuote['~CONTACT_FORMATTED_NAME']); $arQuote['~CONTACT_FULL_NAME'] = CCrmContact::GetFullName(array('NAME' => isset($arQuote['CONTACT_NAME']) ? $arQuote['CONTACT_NAME'] : '', 'LAST_NAME' => isset($arQuote['CONTACT_LAST_NAME']) ? $arQuote['CONTACT_LAST_NAME'] : '', 'SECOND_NAME' => isset($arQuote['CONTACT_SECOND_NAME']) ? $arQuote['CONTACT_SECOND_NAME'] : ''), false); $arQuote['CONTACT_FULL_NAME'] = htmlspecialcharsbx($arQuote['~CONTACT_FULL_NAME']); $companyID = isset($arQuote['~COMPANY_ID']) ? intval($arQuote['~COMPANY_ID']) : 0;
$stageID = isset($data['STAGE_ID']) ? $data['STAGE_ID'] : ''; if ($stageID === '') { __CrmMobileDealEditEndResonse(array('ERROR' => GetMessage('CRM_DEAL_STAGE_NOT_FOUND'))); } //$DB->StartTransaction(); $fields = array('STAGE_ID' => $stageID); $entity = new CCrmDeal(false); $successed = $entity->Update($ID, $fields, true, true, array()); if ($successed) { //$DB->Commit(); $errors = array(); CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Deal, $ID, CCrmBizProcEventType::Edit, $errors); $dbRes = CCrmDeal::GetListEx(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => 'N')); $currentItem = $dbRes->GetNext(); $formatParams = isset($_REQUEST['FORMAT_PARAMS']) ? $_REQUEST['FORMAT_PARAMS'] : array(); CCrmMobileHelper::PrepareDealItem($currentItem, $formatParams); __CrmMobileDealEditEndResonse(array('SAVED_ENTITY_ID' => $ID, 'SAVED_ENTITY_DATA' => CCrmMobileHelper::PrepareDealData($currentItem))); } else { //$DB->Rollback(); __CrmMobileDealEditEndResonse(array('ERROR' => $fields['RESULT_MESSAGE'])); } } elseif ($action === 'CONVERT_MONEY') { __IncludeLang(dirname(__FILE__) . '/lang/' . LANGUAGE_ID . '/' . basename(__FILE__)); $srcCurrencyID = isset($_REQUEST['SRC_CURRENCY_ID']) ? $_REQUEST['SRC_CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $dstCurrencyID = isset($_REQUEST['DST_CURRENCY_ID']) ? $_REQUEST['DST_CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $srcSum = isset($_REQUEST['SUM']) ? doubleval($_REQUEST['SUM']) : 0.0; $dstSum = CCrmCurrency::ConvertMoney($srcSum, $srcCurrencyID, $dstCurrencyID); __CrmMobileDealEditEndResonse(array('SUM' => $dstSum, 'CURRENCY_ID' => $dstCurrencyID, 'CURRENCY_NAME' => CCrmCurrency::GetCurrencyName($dstCurrencyID), 'FORMATTED_SUM' => CCrmCurrency::MoneyToString($dstSum, $dstCurrencyID))); } else { __CrmMobileDealEditEndResonse(array('ERROR' => 'Action is not supported in current context.')); }
public function Add(array &$arFields, $bUpdateSearch = true, $arOptions = array()) { global $DB; $this->LAST_ERROR = ''; if (!is_array($arOptions)) { $arOptions = array(); } if (isset($arOptions['CURRENT_USER'])) { $iUserId = intval($arOptions['CURRENT_USER']); } else { $iUserId = CCrmPerms::GetCurrentUserID(); } if (isset($arFields['DATE_CREATE'])) { unset($arFields['DATE_CREATE']); } $arFields['~DATE_CREATE'] = $DB->CurrentTimeFunction(); $arFields['~DATE_MODIFY'] = $DB->CurrentTimeFunction(); if (!isset($arFields['CREATED_BY_ID']) || (int) $arFields['CREATED_BY_ID'] <= 0) { $arFields['CREATED_BY_ID'] = $iUserId; } if (!isset($arFields['MODIFY_BY_ID']) || (int) $arFields['MODIFY_BY_ID'] <= 0) { $arFields['MODIFY_BY_ID'] = $iUserId; } if (!isset($arFields['ASSIGNED_BY_ID']) || (int) $arFields['ASSIGNED_BY_ID'] <= 0) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if (!isset($arFields['OPPORTUNITY'])) { $arFields['OPPORTUNITY'] = 0.0; } if (!$this->CheckFields($arFields, false, $arOptions)) { $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; return false; } if (isset($arFields['BIRTHDATE'])) { if ($arFields['BIRTHDATE'] !== '') { $birthDate = $arFields['BIRTHDATE']; $arFields['~BIRTHDATE'] = $DB->CharToDateFunction($birthDate, 'SHORT', false); $arFields['BIRTHDAY_SORT'] = \Bitrix\Crm\BirthdayReminder::prepareSorting($birthDate); } else { $arFields['BIRTHDAY_SORT'] = \Bitrix\Crm\BirthdayReminder::prepareSorting(''); } unset($arFields['BIRTHDATE']); } else { $arFields['BIRTHDAY_SORT'] = \Bitrix\Crm\BirthdayReminder::prepareSorting(''); } if (!isset($arFields['STATUS_ID']) || $arFields['STATUS_ID'] === '') { $arFields['STATUS_ID'] = 'NEW'; } if (isset($arFields['DATE_CLOSED'])) { unset($arFields['DATE_CLOSED']); } self::EnsureStatusesLoaded(); if (in_array($arFields['STATUS_ID'], self::$LEAD_STATUSES_BY_GROUP['FINISHED'])) { $arFields['~DATE_CLOSED'] = $DB->CurrentTimeFunction(); } $arAttr = array(); $arAttr['STATUS_ID'] = $arFields['STATUS_ID']; if (!empty($arFields['OPENED'])) { $arAttr['OPENED'] = $arFields['OPENED']; } $sPermission = 'ADD'; if (isset($arFields['PERMISSION'])) { if ($arFields['PERMISSION'] == 'IMPORT') { $sPermission = 'IMPORT'; } unset($arFields['PERMISSION']); } if ($this->bCheckPermission) { $arEntityAttr = self::BuildEntityAttr($iUserId, $arAttr); $userPerms = $iUserId == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($iUserId); $sEntityPerm = $userPerms->GetPermType('LEAD', $sPermission, $arEntityAttr); if ($sEntityPerm == BX_CRM_PERM_NONE) { $this->LAST_ERROR = GetMessage('CRM_PERMISSION_DENIED'); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; return false; } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); if ($sEntityPerm == BX_CRM_PERM_SELF && $assignedByID != $iUserId) { $arFields['ASSIGNED_BY_ID'] = $iUserId; } if ($sEntityPerm == BX_CRM_PERM_OPEN && $iUserId == $assignedByID) { $arFields['OPENED'] = 'Y'; } } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $arEntityAttr = self::BuildEntityAttr($assignedByID, $arAttr); $userPerms = $assignedByID == CCrmPerms::GetCurrentUserID() ? $this->cPerms : CCrmPerms::GetUserPermissions($assignedByID); $sEntityPerm = $userPerms->GetPermType('LEAD', $sPermission, $arEntityAttr); $this->PrepareEntityAttrs($arEntityAttr, $sEntityPerm); // Calculation of Account Data $accData = CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : null, 'SUM' => isset($arFields['OPPORTUNITY']) ? $arFields['OPPORTUNITY'] : null, 'EXCH_RATE' => isset($arFields['EXCH_RATE']) ? $arFields['EXCH_RATE'] : null)); if (is_array($accData)) { $arFields['ACCOUNT_CURRENCY_ID'] = $accData['ACCOUNT_CURRENCY_ID']; $arFields['OPPORTUNITY_ACCOUNT'] = $accData['ACCOUNT_SUM']; } if (isset($arFields['NAME']) || isset($arFields['LAST_NAME'])) { $arFields['FULL_NAME'] = trim((isset($arFields['NAME']) ? $arFields['NAME'] : '') . ' ' . (isset($arFields['LAST_NAME']) ? $arFields['LAST_NAME'] : '')); } $beforeEvents = GetModuleEvents('crm', 'OnBeforeCrmLeadAdd'); while ($arEvent = $beforeEvents->Fetch()) { if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) { if (isset($arFields['RESULT_MESSAGE'])) { $this->LAST_ERROR = $arFields['RESULT_MESSAGE']; } else { $this->LAST_ERROR = GetMessage('CRM_LEAD_CREATION_CANCELED', array('#NAME#' => $arEvent['TO_NAME'])); $arFields['RESULT_MESSAGE'] =& $this->LAST_ERROR; } return false; } } $ID = intval($DB->Add('b_crm_lead', $arFields, array(), '', false, 'FILE: ' . __FILE__ . '<br /> LINE: ' . __LINE__)); $arFields['ID'] = $ID; CCrmPerms::UpdateEntityAttr('LEAD', $ID, $arEntityAttr); $companyTitle = isset($arFields['COMPANY_TITLE']) ? $arFields['COMPANY_TITLE'] : ''; if ($companyTitle !== '') { \Bitrix\Crm\Integrity\DuplicateOrganizationCriterion::register(CCrmOwnerType::Lead, $ID, $companyTitle); } $lastName = isset($arFields['LAST_NAME']) ? $arFields['LAST_NAME'] : ''; if ($lastName !== '') { \Bitrix\Crm\Integrity\DuplicatePersonCriterion::register(CCrmOwnerType::Lead, $ID, $lastName, isset($arFields['NAME']) ? $arFields['NAME'] : '', isset($arFields['SECOND_NAME']) ? $arFields['SECOND_NAME'] : ''); } \Bitrix\Crm\EntityAddress::register(CCrmOwnerType::Lead, $ID, \Bitrix\Crm\EntityAddress::Primary, array('ADDRESS_1' => isset($arFields['ADDRESS']) ? $arFields['ADDRESS'] : null, 'ADDRESS_2' => isset($arFields['ADDRESS_2']) ? $arFields['ADDRESS_2'] : null, 'CITY' => isset($arFields['ADDRESS_CITY']) ? $arFields['ADDRESS_CITY'] : null, 'POSTAL_CODE' => isset($arFields['ADDRESS_POSTAL_CODE']) ? $arFields['ADDRESS_POSTAL_CODE'] : null, 'REGION' => isset($arFields['ADDRESS_REGION']) ? $arFields['ADDRESS_REGION'] : null, 'PROVINCE' => isset($arFields['ADDRESS_PROVINCE']) ? $arFields['ADDRESS_PROVINCE'] : null, 'COUNTRY' => isset($arFields['ADDRESS_COUNTRY']) ? $arFields['ADDRESS_COUNTRY'] : null, 'COUNTRY_CODE' => isset($arFields['ADDRESS_COUNTRY_CODE']) ? $arFields['ADDRESS_COUNTRY_CODE'] : null)); CCrmEntityHelper::NormalizeUserFields($arFields, self::$sUFEntityID, $GLOBALS['USER_FIELD_MANAGER'], array('IS_NEW' => true)); $GLOBALS['USER_FIELD_MANAGER']->Update(self::$sUFEntityID, $ID, $arFields); if (isset($arFields['FM']) && is_array($arFields['FM'])) { $CCrmFieldMulti = new CCrmFieldMulti(); $CCrmFieldMulti->SetFields('LEAD', $ID, $arFields['FM']); $emails = \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::extractMultifieldsValues($arFields['FM'], 'EMAIL'); if (!empty($emails)) { \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::register(CCrmOwnerType::Lead, $ID, 'EMAIL', $emails); } $phones = \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::extractMultifieldsValues($arFields['FM'], 'PHONE'); if (!empty($phones)) { \Bitrix\Crm\Integrity\DuplicateCommunicationCriterion::register(CCrmOwnerType::Lead, $ID, 'PHONE', $phones); } } \Bitrix\Crm\Integrity\DuplicateEntityRanking::registerEntityStatistics(CCrmOwnerType::Lead, $ID, $arFields); if ($bUpdateSearch) { CCrmSearch::UpdateSearch(array('ID' => $ID, 'CHECK_PERMISSIONS' => 'N'), 'LEAD', true); } if (isset($arOptions['REGISTER_SONET_EVENT']) && $arOptions['REGISTER_SONET_EVENT'] === true) { $opportunity = round(isset($arFields['OPPORTUNITY']) ? doubleval($arFields['OPPORTUNITY']) : 0.0, 2); $currencyID = isset($arFields['CURRENCY_ID']) ? $arFields['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $assignedByID = intval($arFields['ASSIGNED_BY_ID']); $createdByID = intval($arFields['CREATED_BY_ID']); $liveFeedFields = array('USER_ID' => $createdByID, 'ENTITY_TYPE_ID' => CCrmOwnerType::Lead, 'ENTITY_ID' => $ID, 'TITLE' => GetMessage('CRM_LEAD_EVENT_ADD'), 'MESSAGE' => '', 'PARAMS' => array('TITLE' => $arFields['TITLE'], 'NAME' => isset($arFields['NAME']) ? $arFields['NAME'] : '', 'SECOND_NAME' => isset($arFields['SECOND_NAME']) ? $arFields['SECOND_NAME'] : '', 'LAST_NAME' => isset($arFields['LAST_NAME']) ? $arFields['LAST_NAME'] : '', 'COMPANY_TITLE' => isset($arFields['COMPANY_TITLE']) ? $arFields['COMPANY_TITLE'] : '', 'STATUS_ID' => $arFields['STATUS_ID'], 'OPPORTUNITY' => strval($opportunity), 'CURRENCY_ID' => $currencyID, 'AUTHOR_ID' => intval($arFields['CREATED_BY_ID']), 'RESPONSIBLE_ID' => $assignedByID)); CCrmSonetSubscription::RegisterSubscription(CCrmOwnerType::Lead, $ID, CCrmSonetSubscriptionType::Responsibility, $assignedByID); $logEventID = CCrmLiveFeed::CreateLogEvent($liveFeedFields, CCrmLiveFeedEvent::Add); if ($logEventID && $assignedByID != $createdByID && CModule::IncludeModule("im")) { $url = CCrmOwnerType::GetShowUrl(CCrmOwnerType::Lead, $ID); $serverName = (CMain::IsHTTPS() ? "https" : "http") . "://" . (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0 ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", "")); $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $assignedByID, "FROM_USER_ID" => $createdByID, "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "crm", "LOG_ID" => $logEventID, "NOTIFY_EVENT" => "lead_add", "NOTIFY_TAG" => "CRM|LEAD|" . $ID, "NOTIFY_MESSAGE" => GetMessage("CRM_LEAD_RESPONSIBLE_IM_NOTIFY", array("#title#" => "<a href=\"" . $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($arFields['TITLE']) . "</a>")), "NOTIFY_MESSAGE_OUT" => GetMessage("CRM_LEAD_RESPONSIBLE_IM_NOTIFY", array("#title#" => htmlspecialcharsbx($arFields['TITLE']))) . " (" . $serverName . $url . ")"); CIMNotify::Add($arMessageFields); } } $afterEvents = GetModuleEvents('crm', 'OnAfterCrmLeadAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if (isset($arFields['ORIGIN_ID']) && $arFields['ORIGIN_ID'] !== '') { $afterEvents = GetModuleEvents('crm', 'OnAfterExternalCrmLeadAdd'); while ($arEvent = $afterEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } } return $ID; }
if ($iRoleIDChif <= 0) { $iRoleIDChif = $CCrmRole->Add($arRoles['chif']); } if ($iRoleIDMan <= 0) { $iRoleIDMan = $CCrmRole->Add($arRoles['man']); } if (WIZARD_MARKETING_AND_SALES_GROUP > 0) { $arRel['G' . WIZARD_MARKETING_AND_SALES_GROUP] = array($iRoleID); } $CCrmRole->SetRelation($arRel); /* INSTALL DEMO-DATA */ // copy files CopyDirFiles(WIZARD_ABSOLUTE_PATH . "/site/services/crm/images/", WIZARD_SITE_PATH . '/upload/crm', true, true); // Create default product catalog $catalogID = CCrmCatalog::EnsureDefaultExists(); $currencyID = CCrmCurrency::GetBaseCurrencyID(); // Creation of demo products require_once "product.demo.php"; if (COption::GetOptionString('crm', '~CRM_INVOICE_INSTALL_12_5_7', 'N') !== 'Y') { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/crm/install/sale_link.php"; } CCrmProductDemo::Create($catalogID); // Add lead require_once "lead.demo.php"; $CCrmLead = new CCrmLead(); foreach ($arLeads as $ID => $arParams) { $arProductRows = null; if (isset($arParams['PRODUCT_ROWS'])) { $arProductRows = $arParams['PRODUCT_ROWS']; unset($arParams['PRODUCT_ROWS']); }
public static function CalculateTotalInfo($ownerType, $ownerID, $checkPerms = true, $params = null, $rows = null, $totalInfo = array()) { if (!is_array($totalInfo)) { $totalInfo = array(); } $result = false; if (isset($totalInfo['OPPORTUNITY']) && isset($totalInfo['TAX_VALUE'])) { $result = array('OPPORTUNITY' => round(doubleval($totalInfo['OPPORTUNITY']), 2), 'TAX_VALUE' => round(doubleval($totalInfo['TAX_VALUE']), 2)); } else { $arParams = null; if ($ownerID <= 0) { $arParams = $params; } else { if ($ownerType === 'L') { $arParams = CCrmLead::GetByID($ownerID, $checkPerms); } elseif ($ownerType === 'D') { $arParams = CCrmDeal::GetByID($ownerID, $checkPerms); } elseif ($ownerType === CCrmQuote::OWNER_TYPE) { $arParams = CCrmQuote::GetByID($ownerID, $checkPerms); } } if (!is_array($arParams)) { return $result; } $arRows = null; if (is_array($rows)) { $arRows = $rows; } elseif ($ownerID > 0) { $arRows = CCrmProductRow::LoadRows($ownerType, $ownerID); } if (!is_array($arRows)) { return $result; } $currencyID = isset($params['CURRENCY_ID']) ? $params['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $companyID = isset($params['COMPANY_ID']) ? intval($params['COMPANY_ID']) : 0; $contactID = isset($params['CONTACT_ID']) ? intval($params['CONTACT_ID']) : 0; // Determine person type $personTypeId = 0; $arPersonTypes = CCrmPaySystem::getPersonTypeIDs(); if ($companyID > 0 && isset($arPersonTypes['COMPANY'])) { $personTypeId = $arPersonTypes['COMPANY']; } elseif ($contactID > 0 && isset($arPersonTypes['CONTACT'])) { $personTypeId = $arPersonTypes['CONTACT']; } $enableSaleDiscount = false; $siteID = ''; if (defined('SITE_ID')) { $siteID = SITE_ID; } else { $obSite = CSite::GetList($by = 'def', $order = 'desc', array('ACTIVE' => 'Y')); if ($obSite && ($arSite = $obSite->Fetch())) { $siteID = $arSite["LID"]; } unset($obSite, $arSite); } $calculateOptions = array(); if (CCrmTax::isTaxMode()) { $calculateOptions['LOCATION_ID'] = isset($arParams['LOCATION_ID']) ? $arParams['LOCATION_ID'] : ''; } $calculated = CCrmSaleHelper::Calculate($arRows, $currencyID, $personTypeId, $enableSaleDiscount, $siteID, $calculateOptions); $result = array('OPPORTUNITY' => isset($calculated['PRICE']) ? round(doubleval($calculated['PRICE']), 2) : 1.0, 'TAX_VALUE' => isset($calculated['TAX_VALUE']) ? round(doubleval($calculated['TAX_VALUE']), 2) : 0.0); } return $result; }