private static function ensureStatusesLoaded() { if (self::$STATUS_INIT) { return; } global $DB; $paidStatus = null; $arStatuses = array(); $arStatuses = \CCrmInvoice::GetStatusList(); foreach ($arStatuses as $statusID => $arStatus) { if (!$paidStatus && strval($statusID) === 'P') { $paidStatus = $arStatus; continue; } } self::$WORK_STATUSES = array(); self::$CANCEL_STATUSES = array(); if ($paidStatus) { $paidStatusSort = intval($paidStatus['SORT']); foreach ($arStatuses as $statusID => $arStatus) { $sort = intval($arStatus['SORT']); if ($sort < $paidStatusSort) { self::$WORK_STATUSES[] = '\'' . $DB->ForSql($statusID) . '\''; } elseif ($sort > $paidStatusSort) { self::$CANCEL_STATUSES[] = '\'' . $DB->ForSql($statusID) . '\''; } } } self::$STATUS_INIT = true; }
protected function GetUserFields($entity_id, $value_id = 0, $LANG = false, $user_id = false) { $result = $this->cUFM->GetUserFields($entity_id, $value_id, $LANG, $user_id); // remove invoice reserved fields if ($entity_id === CCrmInvoice::GetUserFieldEntityID()) { foreach (CCrmInvoice::GetUserFieldsReserved() as $ufId) { if (isset($result[$ufId])) { unset($result[$ufId]); } } } return $result; }
} $filter = array('CHECK_PERMISSIONS' => 'N'); if ($lastItemID > 0) { $filter['>ID'] = $lastItemID; } $dbResult = CCrmInvoice::GetList(array('ID' => 'ASC'), $filter, false, array('nTopCount' => 10), array('ID')); $itemIDs = array(); $itemQty = 0; if (is_object($dbResult)) { while ($fields = $dbResult->Fetch()) { $itemIDs[] = intval($fields['ID']); $itemQty++; } } if ($itemQty > 0) { CCrmInvoice::RebuildEntityAccessAttrs($itemIDs); $progressData['TOTAL_ITEMS'] = $totalItemQty; $processedItemQty += $itemQty; $progressData['PROCESSED_ITEMS'] = $processedItemQty; $progressData['LAST_ITEM_ID'] = $itemIDs[$itemQty - 1]; COption::SetOptionString('crm', '~CRM_REBUILD_INVOICE_ATTR_PROGRESS', serialize($progressData)); __CrmConfigPermsEndResonse(array('STATUS' => 'PROGRESS', 'PROCESSED_ITEMS' => $processedItemQty, 'TOTAL_ITEMS' => $totalItemQty, 'SUMMARY' => GetMessage('CRM_CONFIG_PERMS_REBUILD_ATTR_PROGRESS_SUMMARY', array('#PROCESSED_ITEMS#' => $processedItemQty, '#TOTAL_ITEMS#' => $totalItemQty)))); } else { COption::RemoveOption('crm', '~CRM_REBUILD_INVOICE_ATTR'); COption::RemoveOption('crm', '~CRM_REBUILD_INVOICE_ATTR_PROGRESS'); __CrmConfigPermsEndResonse(array('STATUS' => 'COMPLETED', 'PROCESSED_ITEMS' => $processedItemQty, 'TOTAL_ITEMS' => $totalItemQty, 'SUMMARY' => GetMessage('CRM_CONFIG_PERMS_REBUILD_ATTR_COMPLETED_SUMMARY', array('#PROCESSED_ITEMS#' => $processedItemQty)))); } } else { __CrmConfigPermsEndResonse(array('ERROR' => 'Specified entity type is not supported.')); } }
if ($isAdmin || !$userPermissions->HavePerm('COMPANY', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentCompanyActivies); $stdItems['COMPANY'] = array('ID' => 'COMPANY', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_COMPANY'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_COMPANY_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_COMPANY_LIST']), 'ICON' => 'company', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'COMPANY'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_COMPANY_EDIT'], array('company_id' => 0))))); } if ($isAdmin || !$userPermissions->HavePerm('DEAL', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentDealActivies); $stdItems['DEAL'] = array('ID' => 'DEAL', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_DEAL'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_DEAL_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_INDEX'] !== '' ? $arParams['PATH_TO_DEAL_INDEX'] : $arParams['PATH_TO_DEAL_LIST']), 'ICON' => 'deal', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'DEAL'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_EDIT'], array('deal_id' => 0))))); } if ($isAdmin || !$userPermissions->HavePerm('QUOTE', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentQuoteActivies); $stdItems['QUOTE'] = array('ID' => 'QUOTE', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_QUOTE'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_QUOTE_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_LIST']), 'ICON' => 'quote', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'QUOTE'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_QUOTE_EDIT'], array('quote_id' => 0))))); } //if(IsModuleInstalled('sale')) //{ if ($isAdmin || !$userPermissions->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'READ')) { $counterValue = CCrmInvoice::GetCounterValue(); $stdItems['INVOICE'] = array('ID' => 'INVOICE', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_INVOICE'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_INVOICE_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_INVOICE_LIST']), 'ICON' => 'invoice', 'COUNTER' => $counterValue, 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_INVOICE_EDIT'], array('invoice_id' => 0))))); } //} if ($isAdmin || !$userPermissions->HavePerm('LEAD', BX_CRM_PERM_NONE, 'READ')) { $counter = new CCrmUserCounter(CCrmPerms::GetCurrentUserID(), CCrmUserCounter::CurrentLeadActivies); $stdItems['LEAD'] = array('ID' => 'LEAD', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_LEAD'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_LEAD_TITLE'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_LIST']), 'ICON' => 'lead', 'COUNTER' => $counter->GetValue($arResult['ACTIVE_ITEM_ID'] === 'LEAD'), 'ACTIONS' => array(array('ID' => 'CREATE', 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_LEAD_EDIT'], array('lead_id' => 0))))); } if (IsModuleInstalled('report')) { $stdItems['REPORT'] = array('ID' => 'REPORT', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_REPORT'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_REPORT'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_REPORT_LIST']), 'ICON' => 'report'); } if ($isAdmin || !$userPermissions->HavePerm('DEAL', BX_CRM_PERM_NONE, 'READ')) { $stdItems['DEAL_FUNNEL'] = array('ID' => 'DEAL_FUNNEL', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_FUNNEL'), 'BRIEF_NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_FUNNEL_BRIEF'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_FUNNEL'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_FUNNEL']), 'ICON' => 'funnel'); } $stdItems['EVENT'] = array('ID' => 'EVENT', 'NAME' => GetMessage('CRM_CTRL_PANEL_ITEM_EVENT_2'), 'TITLE' => GetMessage('CRM_CTRL_PANEL_ITEM_EVENT_2'), 'URL' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_EVENT_LIST']), 'ICON' => 'event'); if ($isAdmin || !$userPermissions->HavePerm('CONFIG', BX_CRM_PERM_NONE, 'READ')) {
CModule::IncludeModule("sale"); $personTypes = CCrmPaySystem::getPersonTypeIDs(); $arFields = array("ORDER_TOPIC" => GetMessage("CRM_DEMO_INVOCIE_1_SUBJ"), "STATUS_ID" => "P", "DATE_INSERT" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_BILL" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT'), "PAY_VOUCHER_DATE" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_PAY_BEFORE" => ConvertTimeStamp(time() + 8000009 + CTimeZone::GetOffset(), 'SHORT'), "RESPONSIBLE_ID" => 1, "UF_CONTACT_ID" => $arContacts["45"]['ID'], "PAY_VOUCHER_NUM" => 456, "DATE_MARKED" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "PRODUCT_ROWS" => array(array("ID" => 0, "PRODUCT_ID" => $arProduct["ID"], "PRODUCT_NAME" => $arProduct["NAME"], "QUANTITY" => 1, "PRICE" => $arProduct["PRICE"])), "PERSON_TYPE_ID" => $personTypes["CONTACT"], "INVOICE_PROPERTIES" => array()); $paySystems = CCrmPaySystem::GetPaySystems($personTypes["CONTACT"]); foreach ($paySystems as $id => $paySystem) { $arFields["PAY_SYSTEM_ID"] = $id; } $arAllProps = CCrmInvoice::GetPropertiesInfo($personTypes["CONTACT"]); foreach ($arAllProps as $arProps) { foreach ($arProps as $key => $prop) { if ($key == "FIO") { $arFields["INVOICE_PROPERTIES"][$prop["ID"]] = $arContacts["45"]["LAST_NAME"]; } } } $arInvoices[] = $arFields; $arFields = array("ORDER_TOPIC" => GetMessage("CRM_DEMO_INVOCIE_2_SUBJ"), "STATUS_ID" => "N", "DATE_INSERT" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_BILL" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT'), "PAY_VOUCHER_DATE" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_PAY_BEFORE" => ConvertTimeStamp(time() + 8000009 + CTimeZone::GetOffset(), 'SHORT'), "RESPONSIBLE_ID" => 1, "UF_COMPANY_ID" => $arCompany["38"]['ID'], "PRODUCT_ROWS" => array(array("ID" => 0, "PRODUCT_ID" => $arProduct["ID"], "PRODUCT_NAME" => $arProduct["NAME"], "QUANTITY" => 1, "PRICE" => $arProduct["PRICE"])), "PERSON_TYPE_ID" => $personTypes["COMPANY"], "INVOICE_PROPERTIES" => array()); $paySystems = CCrmPaySystem::GetPaySystems($personTypes["COMPANY"]); foreach ($paySystems as $id => $paySystem) { $arFields["PAY_SYSTEM_ID"] = $id; } $arAllProps = CCrmInvoice::GetPropertiesInfo($personTypes["COMPANY"]); foreach ($arAllProps as $arProps) { foreach ($arProps as $key => $prop) { if ($key == "COMPANY") { $arFields["INVOICE_PROPERTIES"][$prop["ID"]] = $arCompany["38"]["TITLE"]; } } } $arInvoices[] = $arFields; }
if (isset($_REQUEST['copy'])) { $arParams['TYPE'] = 'copy'; } $arResult['TYPE'] = $arParams['TYPE']; $arResult['BUTTONS'] = array(); $arFields = array(); $arParams['ELEMENT_ID'] = intval($arParams['ELEMENT_ID']); if ($arParams['TYPE'] == 'list') { $bRead = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'READ'); $bExport = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'EXPORT'); $bImport = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'IMPORT'); $bAdd = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'ADD'); $bWrite = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'WRITE'); $bDelete = false; } else { $arFields = CCrmInvoice::GetByID($arParams['ELEMENT_ID']); $arEntityAttr[$arParams['ELEMENT_ID']] = array(); if ($arFields !== false) { $arEntityAttr = $CrmPerms->GetEntityAttr('INVOICE', array($arParams['ELEMENT_ID'])); } $bRead = $arFields !== false; $bExport = false; $bImport = false; $bAdd = !$CrmPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'ADD'); $bWrite = $CrmPerms->CheckEnityAccess('INVOICE', 'WRITE', $arEntityAttr[$arParams['ELEMENT_ID']]); $bDelete = $CrmPerms->CheckEnityAccess('INVOICE', 'DELETE', $arEntityAttr[$arParams['ELEMENT_ID']]); } if (!$bRead && !$bAdd && !$bWrite) { return false; } if ($arParams['TYPE'] === 'list') {
$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();
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; }
global $APPLICATION; $APPLICATION->RestartBuffer(); $ORDER_ID = intval($arParams["ORDER_ID"]); $dbOrder = CSaleOrder::GetList(array("DATE_UPDATE" => "DESC"), array("LID" => SITE_ID, "ID" => $ORDER_ID)); $arOrder = $dbOrder->GetNext(); if ($arOrder) { if (strlen($arOrder["SUM_PAID"]) > 0) { $arOrder["PRICE"] -= $arOrder["SUM_PAID"]; } $dbPaySysAction = CSalePaySystemAction::GetList(array(), array("PAY_SYSTEM_ID" => $arOrder["PAY_SYSTEM_ID"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"]), false, false, array("ACTION_FILE", "PARAMS", "ENCODING")); if ($arPaySysAction = $dbPaySysAction->Fetch()) { if (strlen($arPaySysAction["ACTION_FILE"]) > 0) { CSalePaySystemAction::InitParamArrays($arOrder, $ID, $arPaySysAction["PARAMS"]); // USER_ID hack (0050242) $arInvoice = array(); $dbInvoice = CCrmInvoice::GetList(array('ID' => 'DESC'), array('ID' => $ORDER_ID, 'PERMISSION' => 'READ'), false, false, array('ID', 'UF_CONTACT_ID', 'UF_COMPANY_ID')); if (is_object($dbInvoice)) { $arInvoice = $dbInvoice->Fetch(); } unset($dbInvoice); if (is_array($arInvoice) && isset($arInvoice['UF_CONTACT_ID']) && isset($arInvoice['UF_COMPANY_ID'])) { $companyId = intval($arInvoice['UF_COMPANY_ID']); $contactId = intval($arInvoice['UF_CONTACT_ID']); $clientId = ''; if ($companyId > 0) { $clientId = 'C' . $companyId; } else { $clientId = 'P' . $contactId; } $GLOBALS['SALE_INPUT_PARAMS']['ORDER']['USER_ID'] = $clientId; unset($companyId, $contactId, $clientId);
public static function isIncludesUsedProducts($iblockId, $sectionId) { $iblockId = intval($iblockId); $sectionId = intval($sectionId); if ($iblockId <= 0 || $sectionId <= 0) { return false; } $result = false; $stepSize = 500; $element = new CIBlockElement(); $rs = $element->GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $iblockId, 'SECTION_ID' => $sectionId, 'INCLUDE_SUBSECTIONS' => 'Y', 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID')); if ($rs) { $i = 0; $arProductId = array(); while ($row = $rs->Fetch()) { $i++; $arProductId[] = $row['ID']; if ($i === $stepSize) { $rowsCount = CCrmProductRow::GetList(array(), array('PRODUCT_ID' => $arProductId), array(), false, array()); if ($rowsCount > 0 || CCrmInvoice::HasProductRows($arProductId)) { $result = true; } $i = 0; $arProductId = array(); } if ($result) { break; } } if (!$result && count($arProductId) > 0) { $rowsCount = CCrmProductRow::GetList(array(), array('PRODUCT_ID' => $arProductId), array(), false, array()); if ($rowsCount > 0 || CCrmInvoice::HasProductRows($arProductId)) { $result = true; } } } return $result; }
public static function TryGetInfo($typeID, $ID, &$info, $bCheckPermissions = false) { $typeID = intval($typeID); $ID = intval($ID); if ($ID <= 0) { return array(); } $result = null; switch ($typeID) { case self::Lead: $dbRes = CCrmLead::GetListEx(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => $bCheckPermissions ? 'Y' : 'N'), false, false, array('TITLE')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '', 'IMAGE_ID' => 0); return true; } break; case self::Contact: $dbRes = CCrmContact::GetListEx(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => $bCheckPermissions ? 'Y' : 'N'), false, false, array('NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => CUser::FormatName(\Bitrix\Crm\Format\PersonNameFormatter::getFormat(), array('LOGIN' => '', 'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '', 'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '', 'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''), false, false), 'IMAGE_ID' => isset($arRes['PHOTO']) ? intval($arRes['PHOTO']) : 0); return true; } break; case self::Company: $dbRes = CCrmCompany::GetListEx(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => $bCheckPermissions ? 'Y' : 'N'), false, false, array('TITLE', 'LOGO')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '', 'IMAGE_ID' => isset($arRes['LOGO']) ? intval($arRes['LOGO']) : 0); return true; } break; case self::Deal: $dbRes = CCrmDeal::GetListEx(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => $bCheckPermissions ? 'Y' : 'N'), false, false, array('TITLE')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '', 'IMAGE_ID' => 0); return true; } break; case self::Invoice: $dbRes = CCrmInvoice::GetList(array(), array('ID' => $ID), false, false, array('ORDER_TOPIC')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => isset($arRes['ORDER_TOPIC']) ? $arRes['ORDER_TOPIC'] : '', 'IMAGE_ID' => 0); return true; } break; case self::Quote: $dbRes = CCrmQuote::GetList(array(), array('=ID' => $ID, 'CHECK_PERMISSIONS' => $bCheckPermissions ? 'Y' : 'N'), false, false, array('TITLE')); $arRes = $dbRes ? $dbRes->Fetch() : null; if (is_array($arRes)) { $info = array('CAPTION' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '', 'IMAGE_ID' => 0); return true; } break; } return false; }
public function executePhase() { if ($this->currentPhase === QuoteConversionPhase::DEAL_CREATION || $this->currentPhase === QuoteConversionPhase::INVOICE_CREATION) { if ($this->currentPhase === QuoteConversionPhase::DEAL_CREATION) { $entityTypeID = \CCrmOwnerType::Deal; } else { $entityTypeID = \CCrmOwnerType::Invoice; } $entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); $config = $this->config->getItem($entityTypeID); if (!$config->isActive()) { return false; } /** @var \CCrmPerms $permissions */ $permissions = $this->getUserPermissions(); $entityID = isset($this->contextData[$entityTypeName]) ? $this->contextData[$entityTypeName] : 0; if ($entityID > 0) { if ($entityTypeID === \CCrmOwnerType::Deal) { if (!\CCrmDeal::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Deal, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } $this->resultData[$entityTypeName] = $entityID; } else { if (!\CCrmInvoice::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } if (!\CCrmInvoice::CheckUpdatePermission($entityID, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::UPDATE_DENIED); } $entity = new \CCrmInvoice(false); $fields = array('UF_QUOTE_ID' => $this->entityID); try { $entity->Update($entityID, $fields); } catch (Main\DB\SqlQueryException $e) { } $this->resultData[$entityTypeName] = $entityID; } return true; } if (!\CCrmAuthorizationHelper::CheckCreatePermission($entityTypeName, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Quote, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::CREATE_DENIED); } if (UserFieldSynchronizer::needForSynchronization(\CCrmOwnerType::Quote, $entityTypeID)) { throw new EntityConversionException(\CCrmOwnerType::Quote, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::NOT_SYNCHRONIZED); } if (!ConversionSettings::getCurrent()->isAutocreationEnabled()) { throw new EntityConversionException(\CCrmOwnerType::Quote, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::AUTOCREATION_DISABLED); } if ($entityTypeID === \CCrmOwnerType::Deal && \CCrmBizProcHelper::HasAutoWorkflows($entityTypeID, \CCrmBizProcEventType::Create)) { throw new EntityConversionException(\CCrmOwnerType::Lead, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::HAS_WORKFLOWS); } /** @var QuoteConversionMapper $mapper */ $mapper = $this->getMapper(); $map = self::prepareMap($entityTypeID); $fields = $mapper->map($map); if (empty($fields)) { throw new EntityConversionException(\CCrmOwnerType::Quote, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::EMPTY_FIELDS); } if ($entityTypeID === \CCrmOwnerType::Deal) { $entity = new \CCrmDeal(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Deal, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $productRows = isset($fields['PRODUCT_ROWS']) && is_array($fields['PRODUCT_ROWS']) ? $fields['PRODUCT_ROWS'] : array(); if (!empty($productRows)) { $result = \CCrmProductRow::CalculateTotalInfo('D', 0, false, $fields, $productRows); $fields['OPPORTUNITY'] = isset($result['OPPORTUNITY']) ? $result['OPPORTUNITY'] : 1.0; $fields['TAX_VALUE'] = isset($result['TAX_VALUE']) ? $result['TAX_VALUE'] : 0.0; } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Deal, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } if (!empty($productRows)) { \CCrmDeal::SaveProductRows($entityID, $productRows, false, false, false); } $this->resultData[\CCrmOwnerType::DealName] = $entityID; } else { $entity = new \CCrmInvoice(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Quote, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } $this->resultData[\CCrmOwnerType::InvoiceName] = $entityID; } return true; } elseif ($this->currentPhase === DealConversionPhase::FINALIZATION) { $fields = array(); if (isset($this->resultData[\CCrmOwnerType::DealName])) { $fields['DEAL_ID'] = $this->resultData[\CCrmOwnerType::DealName]; } if (!empty($fields)) { $entity = new \CCrmQuote(false); $entity->Update($this->entityID, $fields); } return true; } return false; }
public function createInvoices(array $params) { $count = isset($params['COUNT']) ? (int) $params['COUNT'] : 0; if ($count <= 0) { return; } $sum = isset($params['SUM']) ? (int) $params['SUM'] : 0; if ($sum <= 0) { return; } $dealID = isset($params['DEAL_ID']) ? (int) $params['DEAL_ID'] : 0; $companyID = isset($params['COMPANY_ID']) ? (int) $params['COMPANY_ID'] : 0; $contactID = isset($params['CONTACT_ID']) ? (int) $params['CONTACT_ID'] : 0; $userIDs = isset($params['USER_IDS']) && is_array($params['USER_IDS']) ? $params['USER_IDS'] : array(); if (empty($userIDs)) { $userIDs[] = \CCrmSecurityHelper::GetCurrentUserID(); } $prefix = isset($params['PREFIX']) ? $params['PREFIX'] : ''; if ($prefix === '') { $prefix = $this->id; } $date = isset($params['DATE']) ? $params['DATE'] : null; if (!$date) { $date = $date = new Date(); } $maxDateOffset = isset($params['MAX_DATE_OFFSET']) ? (int) $params['MAX_DATE_OFFSET'] : 0; $dateFormat = Date::convertFormatToPhp(FORMAT_DATE); $dateTimeFormat = Date::convertFormatToPhp(FORMAT_DATETIME); $isWon = isset($params['IS_WON']) ? $params['IS_WON'] : false; if ($isWon) { $totalSum = $sum; } else { $totalSum = $sum - mt_rand((int) ($sum / 3), $sum); } $entity = new \CCrmInvoice(false); $invoiceSum = (int) $totalSum / $count; $totalInvoiceSum = 0; for ($i = 1; $i <= $count; $i++) { if ($i == $count) { $invoiceSum = $totalSum - $totalInvoiceSum; } $totalInvoiceSum += $invoiceSum; $time = DateTime::createFromTimestamp($date->getTimestamp()); if ($maxDateOffset > 0) { $time->add(mt_rand(0, $maxDateOffset) . ' days'); } $time->setTime(mt_rand(8, 20), mt_rand(0, 59), 0); $siteTime = $time->format($dateTimeFormat); $siteDate = $time->format($dateFormat); \CCrmOwnerType::GetCaption(\CCrmOwnerType::Company, $companyID, false); $companyInfo = self::getCompanyInfo($companyID); $contactInfo = self::getContactInfo($contactID); $fields = array('ORDER_TOPIC' => "{$prefix} invoice # {$i}", 'STATUS_ID' => $isWon ? 'P' : 'N', 'DATE_INSERT' => $siteTime, 'DATE_BILL' => $siteDate, 'RESPONSIBLE_ID' => self::getRandomItem($userIDs), 'UF_DEAL_ID' => $dealID, 'UF_COMPANY_ID' => $companyID, 'UF_CONTACT_ID' => $contactID, 'PERSON_TYPE_ID' => 1, 'PAY_SYSTEM_ID' => 1, 'INVOICE_PROPERTIES' => array(10 => $companyInfo['TITLE'], 11 => $companyInfo['FULL_ADDRESS'], 12 => $contactInfo['FULL_NAME'], 13 => $contactInfo['EMAIL'], 14 => $contactInfo['PHONE']), 'PRODUCT_ROWS' => array(array('ID' => 0, 'PRODUCT_NAME' => "{$prefix} product", 'QUANTITY' => 1, 'PRICE' => $invoiceSum, 'PRODUCT_ID' => 0, 'CUSTOMIZED' => 'Y'))); $ID = $entity->Add($fields); } }
continue; } $item = array('OWNER_ID' => $entityID, 'OWNER_TYPE_ID' => $entityTypeID, 'OWNER_TYPE_NAME' => $entityTypeName, 'TITLE' => $result['TITLE'], 'DESCRIPTION' => $result['DESCRIPTION'], 'IMAGE_URL' => '', 'COMMUNICATIONS' => array()); if ($result['TYPE'] !== '' && $result['VALUE'] !== '') { $item['COMMUNICATIONS'][] = array('TYPE' => $result['TYPE'], 'VALUE' => $result['VALUE']); } if (!isset($imageless[$entityTypeName])) { $imageless[$entityTypeName] = array(); } $imageless[$entityTypeName][] = $entityID; $items["{$entityTypeName}_{$entityID}"] =& $item; unset($item); } unset($result); } else { $entity = CCrmInvoice::GetByID($ownerID, false); if (!is_array($entity)) { ShowError(GetMessage('M_CRM_COMM_SELECTOR_OWNER_NOT_FOUND')); return; } $companyID = isset($entity['UF_COMPANY_ID']) ? intval($entity['UF_COMPANY_ID']) : 0; $company = $companyID > 0 ? CCrmCompany::GetByID($companyID, true) : null; if (is_array($company)) { $info = array('ENTITY_TYPE_ID' => CCrmOwnerType::Company, 'ENTITY_ID' => $companyID); if (CCrmActivity::PrepareCommunicationInfo($info, $company)) { $companyKey = "COMPANY_{$companyID}"; $item = array('OWNER_ID' => $companyID, 'OWNER_TYPE_ID' => CCrmOwnerType::Company, 'TITLE' => $info['TITLE'], 'DESCRIPTION' => $info['DESCRIPTION'], 'IMAGE_URL' => CCrmMobileHelper::PrepareCompanyImageUrl($company, array('WIDTH' => 40, 'HEIGHT' => 40)), 'COMMUNICATIONS' => array()); if ($commType === 'PERSON') { $items[$companyKey] =& $item; unset($item); } else {
$needle = isset($_REQUEST['NEEDLE']) ? $_REQUEST['NEEDLE'] : ''; if ($needle !== '' && CModule::IncludeModule('sale')) { $items = array(); $order = array('CITY_NAME_LANG' => 'ASC', 'COUNTRY_NAME_LANG' => 'ASC', 'SORT' => 'ASC'); $select = array('ID', 'CITY_ID', 'CITY_NAME', 'COUNTRY_NAME_LANG', 'REGION_NAME_LANG'); $navParams = array('nTopCount' => 10); $locations = array(); $dbLocations = CSaleLocation::GetList($order, array('~CITY_NAME' => "{$needle}%", 'LID' => LANGUAGE_ID), false, $navParams, $select); while ($data = $dbLocations->Fetch()) { $dataID = $data['ID']; $items[$dataID] = array('ID' => $data['ID'], 'NAME' => $data['CITY_NAME'], 'REGION_NAME' => $data['REGION_NAME_LANG'], 'COUNTRY_NAME' => $data['COUNTRY_NAME_LANG'], 'TITLE' => CCrmInvoice::ResolveLocationName($dataID, $data)); } $dbLocations = CSaleLocation::GetList($order, array('~REGION_NAME' => "{$needle}%", 'LID' => LANGUAGE_ID), false, $navParams, $select); while ($data = $dbLocations->Fetch()) { $dataID = $data['ID']; if (isset($items[$dataID])) { continue; } $items[$data['ID']] = array('ID' => $data['ID'], 'NAME' => $data['CITY_NAME'], 'REGION_NAME' => $data['REGION_NAME_LANG'], 'COUNTRY_NAME' => $data['COUNTRY_NAME_LANG'], 'TITLE' => CCrmInvoice::ResolveLocationName($dataID, $data)); } $arResult['ITEMS'] = array_values($items); } } $arResult['SEARCH_PAGE_URL'] = $APPLICATION->GetCurPageParam('AJAX_CALL=Y&SEARCH=Y&FORMAT=json', array('AJAX_CALL', 'SEARCH', 'FORMAT')); $arResult['SERVICE_URL'] = $arParams["SERVICE_URL"] ? $arParams["SERVICE_URL"] : SITE_DIR . 'bitrix/components/bitrix/mobile.crm.location.list/ajax.php?siteID=' . SITE_ID . '&' . bitrix_sessid_get(); $format = isset($_REQUEST['FORMAT']) ? strtolower($_REQUEST['FORMAT']) : ''; // Only JSON format is supported if ($format !== '' && $format !== 'json') { $format = ''; } $this->IncludeComponentTemplate($format);
for ($i = 0; $i < $rowQty; $i++) { $row = $rows[$i]; $price = isset($row['PRICE']) ? round(doubleval($row['PRICE']), 2) : 0.0; if ($dealCurrencyID !== $currencyID) { $price = CCrmCurrency::ConvertMoney($price, $dealCurrencyID, $currencyID); } $qty = isset($row['QUANTITY']) ? intval($row['QUANTITY']) : 0; $sum = $item['SUM'] = $price * $qty; $item = array('ID' => 0, 'PRODUCT_ID' => isset($row['PRODUCT_ID']) ? intval($row['PRODUCT_ID']) : 0, 'PRODUCT_NAME' => isset($row['PRODUCT_NAME']) ? $row['PRODUCT_NAME'] : '', 'PRICE' => $price, 'QUANTITY' => $qty, 'SUM' => $sum, 'IDX' => $i); $item['FORMATTED_PRICE'] = CCrmCurrency::MoneyToString($price, $currencyID); $item['FORMATTED_SUM'] = CCrmCurrency::MoneyToString($sum, $currencyID); $item['CURRENCY_ID'] = $currencyID; $recalculateData['PRODUCT_ROWS'][] =& $item; unset($item); } $orderData = CCrmInvoice::QuickRecalculate($recalculateData); if (empty($orderData)) { $arResult['TAX_INFOS'] = array(); $arResult['SUM_BRUTTO'] = $arResult['SUM_NETTO'] = 0.0; } else { $orderCurrencyID = isset($orderData['CURRENCY']) ? $orderData['CURRENCY'] : ''; if ($orderCurrencyID !== '' && $orderCurrencyID !== $currencyID) { ShowError('ERROR: CURRENCIES ARE ARE MISMATCHED'); return; } $sumBrutto = $arResult['SUM_BRUTTO'] = isset($orderData['PRICE']) ? $orderData['PRICE'] : 0.0; $taxSum = isset($orderData['TAX_VALUE']) ? $orderData['TAX_VALUE'] : 0.0; $sumNetto = $arResult['SUM_NETTO'] = $sumBrutto - $taxSum; if (isset($orderData['USE_VAT']) && $orderData['USE_VAT'] && $taxMode !== 'VAT') { ShowError('ERROR: TAX MODES ARE ARE MISMATCHED'); return;
public static function beforeViewDataQuery(&$select, &$filter, &$group, &$order, &$limit, &$options, &$runtime) { if (!isset($select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'])) { foreach ($select as $k => $v) { if (strpos($k, 'CRM_INVOICE_INVOICE_UTS_COMPANY_BY_') === 0) { $select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'] = 'INVOICE_UTS.COMPANY_BY.ID'; break; } } } if (!isset($select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'])) { foreach ($select as $k => $v) { if (strpos($k, 'CRM_INVOICE_INVOICE_UTS_CONTACT_BY_') === 0) { $select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'] = 'INVOICE_UTS.CONTACT_BY.ID'; break; } } } // HACK: Switch to order by SATTUS_BY.SORT instead STATUS_BY.STATUS_ID // We are trying to adhere user defined sort rules. if (isset($order['STATUS_ID'])) { $select['CRM_INVOICE_STATUS_BY_SORT'] = 'STATUS_BY.SORT'; $order['CRM_INVOICE_STATUS_BY_SORT'] = $order['STATUS_ID']; unset($order['STATUS_ID']); } if (!isset($select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'])) { foreach ($select as $k => $v) { if (strpos($k, 'CRM_INVOICE_INVOICE_UTS_CONTACT_BY_') === 0) { $select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'] = 'INVOICE_UTS.CONTACT_BY.ID'; break; } } } if (!isset($select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'])) { foreach ($select as $k => $v) { if (strpos($k, 'CRM_INVOICE_INVOICE_UTS_COMPANY_BY_') === 0) { $select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'] = 'INVOICE_UTS.COMPANY_BY.ID'; break; } } } // permission $addClause = CCrmInvoice::BuildPermSql('crm_invoice'); if (!empty($addClause)) { global $DB; // HACK: add escape chars for ORM $addClause = str_replace('crm_invoice.ID', $DB->escL . 'crm_invoice' . $DB->escR . '.ID', $addClause); $filter = array($filter, '=IS_ALLOWED' => '1'); $runtime['IS_ALLOWED'] = array('data_type' => 'integer', 'expression' => array('CASE WHEN ' . $addClause . ' THEN 1 ELSE 0 END')); } }
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; }
public function executePhase() { if ($this->currentPhase === DealConversionPhase::INVOICE_CREATION || $this->currentPhase === DealConversionPhase::QUOTE_CREATION) { if ($this->currentPhase === DealConversionPhase::INVOICE_CREATION) { $entityTypeID = \CCrmOwnerType::Invoice; } else { $entityTypeID = \CCrmOwnerType::Quote; } $entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); $config = $this->config->getItem($entityTypeID); if (!$config->isActive()) { return false; } /** @var \CCrmPerms $permissions */ $permissions = $this->getUserPermissions(); $entityID = isset($this->contextData[$entityTypeName]) ? $this->contextData[$entityTypeName] : 0; if ($entityID > 0) { if ($entityTypeID === \CCrmOwnerType::Invoice) { if (!\CCrmInvoice::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } if (!\CCrmInvoice::CheckUpdatePermission($entityID, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::UPDATE_DENIED); } $entity = new \CCrmInvoice(false); $fields = array('UF_DEAL_ID' => $this->entityID); try { $entity->Update($entityID, $fields); } catch (Main\DB\SqlQueryException $e) { } $this->resultData[$entityTypeName] = $entityID; } else { if (!\CCrmQuote::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } if (!\CCrmQuote::CheckUpdatePermission($entityID, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::UPDATE_DENIED); } $entity = new \CCrmQuote(false); $fields = array('DEAL_ID' => $this->entityID); $entity->Update($entityID, $fields); $this->resultData[$entityTypeName] = $entityID; } return true; } if (!\CCrmAuthorizationHelper::CheckCreatePermission($entityTypeName, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::CREATE_DENIED); } if (UserFieldSynchronizer::needForSynchronization(\CCrmOwnerType::Deal, $entityTypeID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::NOT_SYNCHRONIZED); } if (!ConversionSettings::getCurrent()->isAutocreationEnabled()) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::AUTOCREATION_DISABLED); } /** @var DealConversionMapper $mapper */ $mapper = $this->getMapper(); $map = self::prepareMap($entityTypeID); $fields = $mapper->map($map); if (empty($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::EMPTY_FIELDS); } if ($entityTypeID === \CCrmOwnerType::Invoice) { $entity = new \CCrmInvoice(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } $this->resultData[\CCrmOwnerType::InvoiceName] = $entityID; } else { $entity = new \CCrmQuote(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $productRows = isset($fields['PRODUCT_ROWS']) && is_array($fields['PRODUCT_ROWS']) ? $fields['PRODUCT_ROWS'] : array(); if (!empty($productRows)) { $currencyID = isset($fields['CURRENCY_ID']) ? $fields['CURRENCY_ID'] : ''; $personTypes = \CCrmPaySystem::getPersonTypeIDs(); $personTypeID = 0; if (isset($personTypes['COMPANY']) && isset($personTypes['CONTACT'])) { if (isset($fields['COMPANY_ID']) && $fields['COMPANY_ID'] > 0) { $personTypeID = $personTypes['COMPANY']; } elseif (isset($fields['CONTACT_ID']) && $fields['CONTACT_ID'] > 0) { $personTypeID = $personTypes['CONTACT']; } } if ($currencyID !== '' && $personTypeID > 0) { $calculationOptions = array(); if (\CCrmTax::isTaxMode() && isset($fields['LOCATION_ID'])) { $calculationOptions['LOCATION_ID'] = $fields['LOCATION_ID']; } $result = \CCrmSaleHelper::Calculate($productRows, $currencyID, $personTypeID, false, SITE_ID, $calculationOptions); $arFields['OPPORTUNITY'] = isset($result['PRICE']) ? round(doubleval($result['PRICE']), 2) : 1.0; $arFields['TAX_VALUE'] = isset($result['TAX_VALUE']) ? round(doubleval($result['TAX_VALUE']), 2) : 0.0; } } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } $this->resultData[\CCrmOwnerType::QuoteName] = $entityID; } return true; } elseif ($this->currentPhase === DealConversionPhase::FINALIZATION) { return true; } return false; }
/** * @return boolean */ public static function register($ownerID, array $entityFields = null, array $options = 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($options)) { $options = array(); } 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; } } $sum = isset($entityFields['OPPORTUNITY']) ? (double) $entityFields['OPPORTUNITY'] : 0.0; $currencyID = isset($entityFields['CURRENCY_ID']) ? $entityFields['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $sumData = \CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => $currencyID, 'SUM' => $sum)); if (is_array($sumData)) { $sum = (double) $sumData['ACCOUNT_SUM']; } $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'); } $accountCurrencyID = \CCrmCurrency::GetAccountCurrencyID(); $results = array(); $skipHistory = isset($options['SKIP_HISTORY']) ? (bool) $options['SKIP_HISTORY'] : false; if (!$skipHistory) { $dbResult = \CCrmInvoice::GetList(array('DATE_BILL' => 'ASC'), array('UF_DEAL_ID' => $ownerID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'PRICE', 'CURRENCY', 'DATE_BILL')); if (is_object($dbResult)) { while ($invoiceFields = $dbResult->Fetch()) { $key = isset($invoiceFields['DATE_BILL']) ? $invoiceFields['DATE_BILL'] : ''; if ($key === '') { continue; } $date = new Date($key); if (!isset($results[$key])) { $results[$key] = array('DATE' => $date, 'QTY' => 0, 'SUM' => 0.0); } $results[$key]['QTY']++; $currencyID = isset($invoiceFields['CURRENCY']) ? $invoiceFields['CURRENCY'] : ''; $total = isset($invoiceFields['PRICE']) ? (double) $invoiceFields['PRICE'] : 0.0; $accData = \CCrmAccountingHelper::PrepareAccountingData(array('CURRENCY_ID' => $currencyID, 'SUM' => $total)); if (is_array($accData)) { $results[$key]['SUM'] += (double) $accData['ACCOUNT_SUM']; } } } } DealInvoiceStatisticsTable::deleteByOwner($ownerID); if (empty($results)) { 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; } $totals = array('QTY' => 0, 'SUM' => 0.0); foreach ($results as $result) { $totals['QTY'] += $result['QTY']; $totals['SUM'] += $result['SUM']; self::innerRegister(array('OWNER_ID' => $ownerID, 'CREATED_DATE' => $result['DATE'], 'START_DATE' => $startDate, 'END_DATE' => $endDate, 'RESPONSIBLE_ID' => $responsibleID, 'STAGE_SEMANTIC_ID' => $semanticID, 'STAGE_ID' => $stageID, 'IS_LOST' => $isLost ? 'Y' : 'N', 'CURRENCY_ID' => $accountCurrencyID, 'INVOICE_SUM' => $result['SUM'], 'INVOICE_QTY' => $result['QTY'], 'TOTAL_INVOICE_SUM' => $totals['SUM'], 'TOTAL_INVOICE_QTY' => $totals['QTY'], 'TOTAL_SUM' => $sum)); } return true; }
public static function PrepareConversionPermissionFlags($ID, array &$params, $userPermissions = null) { if (!$userPermissions) { $userPermissions = CCrmPerms::GetCurrentUserPermissions(); } $canCreateDeal = CCrmDeal::CheckCreatePermission($userPermissions); $canCreateInvoice = IsModuleInstalled('sale') && CCrmInvoice::CheckCreatePermission($userPermissions); $params['CAN_CONVERT_TO_DEAL'] = $canCreateDeal; $params['CAN_CONVERT_TO_INVOICE'] = $canCreateInvoice; $params['CAN_CONVERT'] = $params['CONVERT'] = $canCreateInvoice || $canCreateDeal; $restriction = \Bitrix\Crm\Restriction\RestrictionManager::getConversionRestriction(); if ($restriction->hasPermission()) { $params['CONVERSION_PERMITTED'] = true; } else { $params['CONVERSION_PERMITTED'] = false; $params['CONVERSION_LOCK_SCRIPT'] = $restriction->preparePopupScript(); } }
public static function UpdateSearch($arFilter, $ENTITY_TYPE, $bOverWrite = false) { if (!CModule::IncludeModule('search')) { return false; } $limit = 1000; switch ($ENTITY_TYPE) { case 'CONTACT': $obRes = CCrmContact::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'FULL_NAME'; break; case 'DEAL': $obRes = CCrmDeal::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; break; case 'INVOICE': $obRes = CCrmInvoice::GetList(array('ID' => 'DESC'), $arFilter, false, array('nTopCount' => $limit), array('*')); $sTitleID = 'ORDER_TOPIC'; break; case 'QUOTE': $obRes = CCrmQuote::GetList(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => intval($limit)), array()); $sTitleID = 'TITLE'; break; case 'COMPANY': $obRes = CCrmCompany::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; break; default: case 'LEAD': $obRes = CCrmLead::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; $ENTITY_TYPE = 'LEAD'; break; } if (!isset(self::$arMess[$ENTITY_TYPE])) { self::$arMess[$ENTITY_TYPE] = __IncludeLang($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/components/bitrix/crm.' . strtolower($ENTITY_TYPE) . '.show/lang/' . LANGUAGE_ID . '/component.php', true); } $arAllResult = array(); $qty = 0; $lastItemID = ''; if (is_object($obRes)) { while (($arRow = $obRes->Fetch()) !== false) { $elementID = $arRow['ID']; $lastItemID = $ENTITY_TYPE . '.' . $elementID; if ($ENTITY_TYPE === 'INVOICE') { $arResult = CCrmInvoice::BuildSearchCard($arRow, self::$bReIndex); } elseif ($ENTITY_TYPE === 'QUOTE') { $arResult = CCrmQuote::BuildSearchCard($arRow, self::$bReIndex); } else { $multiFields = array(); if ($ENTITY_TYPE === 'CONTACT' || $ENTITY_TYPE === 'COMPANY' || $ENTITY_TYPE === 'LEAD') { $obMultiFieldRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => $ENTITY_TYPE, 'ELEMENT_ID' => $elementID)); while ($multiField = $obMultiFieldRes->Fetch()) { $fieldValue = $multiField['VALUE']; $fieldTypeID = $multiField['TYPE_ID']; if ($fieldValue === '' || $fieldTypeID !== 'PHONE' && $fieldTypeID !== 'EMAIL') { continue; } if (!isset($multiFields[$fieldTypeID])) { $multiFields[$fieldTypeID] = array(); } $multiFields[$fieldTypeID][] = $fieldValue; } } $arResult = self::_buildEntityCard($arRow, $sTitleID, $ENTITY_TYPE, array('FM' => $multiFields)); } if (self::$bReIndex) { if (self::$oCallback) { $res = call_user_func(array(self::$oCallback, self::$callback_method), $arResult); if (!$res) { return $lastItemID; } } } else { CSearch::Index('crm', $ENTITY_TYPE . '.' . $arRow['ID'], $arResult, $bOverWrite); } $arAllResult[] = $arResult; $qty++; } } if (!self::$bReIndex && !empty($arFilter['ID']) && $qty === 0) { CSearch::DeleteIndex('crm', (int) $arFilter['ID']); } if (self::$bReIndex && $qty === $limit && $lastItemID !== '') { return $lastItemID; } return $arAllResult; }
if (isset($entityFields['FM']) && is_array($entityFields['FM']) && empty($entityFields['FM'])) { $entityFields['FM']['PHONE']['n0'] = array('VALUE' => '', 'VALUE_TYPE' => 'WORK'); $entityFields['FM']['EMAIL']['n0'] = array('VALUE' => '', 'VALUE_TYPE' => 'WORK'); } } if (isset($entityFields['FM'])) { $entityContext['MULTI_FIELDS_OPTIONS'] = array('STUB' => GetMessage('CRM_ENTITY_QPV_MULTI_FIELD_NOT_ASSIGNED'), 'ENABLE_SIP' => true, 'SIP_PARAMS' => array('ENTITY_TYPE' => 'CRM_' . $entityTypeName, 'ENTITY_ID' => $entityID)); foreach ($entityFields['FM'] as $typeID => $multiFields) { $entityData[$typeID] = __CrmQuickPanelViewPrepareMultiFields($multiFields, $entityTypeName, $entityID, $typeID); } } if ($ufEntityID !== '') { $arUserFields = $USER_FIELD_MANAGER->GetUserFields($ufEntityID, $entityID, LANGUAGE_ID); // remove invoice reserved fields if ($ufEntityID === CCrmInvoice::GetUserFieldEntityID()) { foreach (CCrmInvoice::GetUserFieldsReserved() as $ufId) { if (isset($arUserFields[$ufId])) { unset($arUserFields[$ufId]); } } } foreach ($arUserFields as $fieldName => &$arUserField) { $editable = $enableInstantEdit && isset($arUserField['EDIT_IN_LIST']) && $arUserField['EDIT_IN_LIST'] === 'Y'; if ($arUserField['MULTIPLE'] === 'Y') { continue; } $userTypeID = $arUserField['USER_TYPE']['USER_TYPE_ID']; $value = isset($arUserField['VALUE']) ? $arUserField['VALUE'] : ''; $caption = isset($formFieldNames[$fieldName]) ? $formFieldNames[$fieldName] : ''; if ($caption === '') { $caption = isset($arUserField['EDIT_FORM_LABEL']) ? $arUserField['EDIT_FORM_LABEL'] : $fieldName;
$personTypeId = 0; $arResult['CLIENT_TYPE_NAME'] = "CONTACT"; if (isset($arParams['PERSON_TYPE_ID']) && isset($arPersonTypes['COMPANY']) && isset($arPersonTypes['CONTACT'])) { $personTypeId = intval($arParams['PERSON_TYPE_ID']); } if ($personTypeId > 0) { if ($personTypeId === intval($arPersonTypes['COMPANY'])) { $arResult['CLIENT_TYPE_NAME'] = "COMPANY"; } elseif ($personTypeId !== intval($arPersonTypes['CONTACT'])) { $personTypeId = 0; } } // Prepare tax list if ($arResult['ALLOW_LD_TAX']) { if ($arResult['INVOICE_MODE']) { $arResult['TAX_LIST'] = CCrmInvoice::getTaxList($ownerID); if (!is_array($arResult['TAX_LIST'])) { $arResult['TAX_LIST'] = array(); } foreach ($arResult['TAX_LIST'] as &$taxInfo) { $taxInfo['NAME'] = ''; if (isset($taxInfo['TAX_NAME'])) { $taxInfo['NAME'] = $taxInfo['TAX_NAME']; unset($taxInfo['TAX_NAME']); } } unset($taxInfo); } else { $totalInfo = CCrmProductRow::LoadTotalInfo($ownerType, $ownerID); $arResult['TAX_LIST'] = is_array($totalInfo['TAX_LIST']) ? $totalInfo['TAX_LIST'] : array(); }
public static function OnSendMentionGetEntityFields($arCommentFields) { if (!in_array($arCommentFields["ENTITY_TYPE"], CCrmLiveFeedEntity::GetAll())) { return false; } if (!CModule::IncludeModule("socialnetwork")) { return true; } $dbLog = CSocNetLog::GetList(array(), array("ID" => $arCommentFields["LOG_ID"]), false, false, array("ID", "ENTITY_ID", "EVENT_ID")); if ($arLog = $dbLog->Fetch()) { $genderSuffix = ""; $dbUser = CUser::GetByID($arCommentFields["USER_ID"]); if ($arUser = $dbUser->Fetch()) { $genderSuffix = $arUser["PERSONAL_GENDER"]; } switch ($arLog["EVENT_ID"]) { case "crm_company_add": $entityName = GetMessage("CRM_LF_COMPANY_ADD_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Company, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_COMPANY_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_contact_add": $entityName = GetMessage("CRM_LF_CONTACT_ADD_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Contact, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_CONTACT_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_lead_add": $entityName = GetMessage("CRM_LF_LEAD_ADD_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Lead, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_LEAD_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_deal_add": $entityName = GetMessage("CRM_LF_DEAL_ADD_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Deal, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_DEAL_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_company_responsible": $entityName = GetMessage("CRM_LF_COMPANY_RESPONSIBLE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Company, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_COMPANY_RESPONSIBLE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_contact_responsible": $entityName = GetMessage("CRM_LF_CONTACT_RESPONSIBLE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Contact, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_CONTACT_RESPONSIBLE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_lead_responsible": $entityName = GetMessage("CRM_LF_LEAD_RESPONSIBLE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Lead, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_LEAD_RESPONSIBLE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_deal_responsible": $entityName = GetMessage("CRM_LF_DEAL_RESPONSIBLE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Deal, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_DEAL_RESPONSIBLE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_company_message": $entityName = GetMessage("CRM_LF_COMPANY_MESSAGE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Company, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_COMPANY_MESSAGE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_contact_message": $entityName = GetMessage("CRM_LF_CONTACT_MESSAGE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Contact, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_CONTACT_MESSAGE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_lead_message": $entityName = GetMessage("CRM_LF_LEAD_MESSAGE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Lead, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_LEAD_MESSAGE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_deal_message": $entityName = GetMessage("CRM_LF_DEAL_MESSAGE_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption(CCrmOwnerType::Deal, $arLog["ENTITY_ID"], false)))); $notifyTag = "CRM_DEAL_MESSAGE|COMMENT_MENTION|" . $arCommentFields["ID"]; break; case "crm_activity_add": if ($arActivity = CCrmActivity::GetByID($arLog["ENTITY_ID"])) { switch ($arActivity["OWNER_TYPE_ID"]) { case CCrmOwnerType::Company: $ownerType = "COMPANY"; break; case CCrmOwnerType::Contact: $ownerType = "CONTACT"; break; case CCrmOwnerType::Lead: $ownerType = "LEAD"; break; case CCrmOwnerType::Deal: $ownerType = "DEAL"; break; } switch ($arActivity["TYPE_ID"]) { case CCrmActivityType::Meeting: $activityType = "MEETING"; break; case CCrmActivityType::Call: $activityType = "CALL"; break; case CCrmActivityType::Email: $activityType = "EMAIL"; break; } if ($ownerType && $activityType) { $entityName = GetMessage("CRM_LF_ACTIVITY_" . $activityType . "_" . $ownerType . "_COMMENT_MENTION_TITLE", array("#title#" => htmlspecialcharsbx(CCrmOwnerType::GetCaption($arActivity["OWNER_TYPE_ID"], $arActivity["OWNER_ID"], false)))); $notifyTag = "CRM_ACTIVITY_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; } } break; case "crm_invoice_add": if ($arInvoice = CCrmInvoice::GetByID($arLog["ENTITY_ID"])) { $entityName = GetMessage("CRM_LF_INVOICE_ADD_COMMENT_MENTION_TITLE", array("#id#" => $arInvoice["ID"])); $notifyTag = "CRM_INVOICE_ADD|COMMENT_MENTION|" . $arCommentFields["ID"]; } break; } if ($entityName) { $notifyMessage = GetMessage("CRM_LF_COMMENT_MENTION" . (strlen($genderSuffix) > 0 ? "_" . $genderSuffix : ""), array("#title#" => "<a href=\"#url#\" class=\"bx-notifier-item-action\">" . $entityName . "</a>")); $notifyMessageOut = GetMessage("CRM_LF_COMMENT_MENTION" . (strlen($genderSuffix) > 0 ? "_" . $genderSuffix : ""), array("#title#" => $entityName)) . " (" . "#server_name##url#)"; $strPathToLogCrmEntry = str_replace("#log_id#", $arLog["ID"], "/crm/stream/?log_id=#log_id#"); $strPathToLogCrmEntryComment = $strPathToLogCrmEntry . (strpos($strPathToLogCrmEntry, "?") !== false ? "&" : "?") . "commentID=" . $arCommentFields["ID"] . "#com" . $arCommentFields["ID"]; if (in_array($arLog["EVENT_ID"], array("crm_company_message", "crm_contact_message", "crm_deal_message", "crm_lead_message"))) { $strPathToLogEntry = str_replace("#log_id#", $arLog["ID"], COption::GetOptionString("socialnetwork", "log_entry_page", "/company/personal/log/#log_id#/", SITE_ID)); $strPathToLogEntryComment = $strPathToLogEntry . (strpos($strPathToLogEntry, "?") !== false ? "&" : "?") . "commentID=" . $arCommentFields["ID"] . "#com" . $arCommentFields["ID"]; } $arReturn = array("IS_CRM" => "Y", "URL" => $strPathToLogEntryComment, "CRM_URL" => $strPathToLogCrmEntryComment, "NOTIFY_MODULE" => "crm", "NOTIFY_TAG" => $notifyTag, "NOTIFY_MESSAGE" => $notifyMessage, "NOTIFY_MESSAGE_OUT" => $notifyMessageOut); return $arReturn; } else { return false; } } else { return false; } }
$arResult['STATUS_LIST'] = CCrmStatus::GetStatusList('INVOICE_STATUS'); //$arResult['TYPE_LIST'] = CCrmStatus::GetStatusList('DEAL_TYPE'); $arResult['CURRENCY_LIST'] = CCrmCurrencyHelper::PrepareListItems(); $serviceURLTemplate = $arParams["SERVICE_URL_TEMPLATE"] ? $arParams["SERVICE_URL_TEMPLATE"] : '#SITE_DIR#bitrix/components/bitrix/mobile.crm.invoice.edit/ajax.php?site_id=#SITE#&sessid=#SID#'; $arResult['SERVICE_URL'] = CComponentEngine::makePathFromTemplate($serviceURLTemplate, array('SID' => bitrix_sessid())); // 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 $dbFields = CCrmInvoice::GetList(array(), array('ID' => $entityID)); $arFields = $dbFields->GetNext(); if (!$arFields) { ShowError(GetMessage('CRM_INVOICE_VIEW_NOT_FOUND', array('#ID#' => $arParams['ENTITY_ID']))); return; } $arResult['PERMISSIONS'] = array('EDIT' => !$userPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'WRITE'), 'DELETE' => !$userPerms->HavePerm('INVOICE', BX_CRM_PERM_NONE, 'DELETE')); CCrmMobileHelper::PrepareInvoiceItem($arFields, $arParams, array(), array('ENABLE_MULTI_FIELDS' => true, 'ENABLE_PAYER_INFO' => true)); $accountNumber = isset($arFields['~ACCOUNT_NUMBER']) ? $arFields['~ACCOUNT_NUMBER'] : ''; if ($accountNumber === '') { $accountNumber = $arFields['~ID']; } $arResult['EMAIL_SUBJECT'] = GetMessage('CRM_INVOICE_VIEW_EMAIL_SUBJECT', array('#NUMBER#' => $accountNumber)); $dealID = $arFields['~DEAL_ID']; $contactID = $arFields['~CONTACT_ID']; $companyID = $arFields['~COMPANY_ID'];
public static function BuildPermSql($aliasPrefix = 'A', $permType = 'READ', $arOptions = array()) { if (!is_array($arOptions)) { $arOptions = array(); } $userPermissions = isset($arOptions['PERMS']) ? $arOptions['PERMS'] : null; $userID = $userPermissions !== null && is_object($userPermissions) ? $userPermissions->GetUserID() : 0; if (CCrmPerms::IsAdmin($userID)) { return ''; } if (!CCrmPerms::IsAccessEnabled($userPermissions)) { // User does not have permissions at all. return false; } $entitiesSql = array(); $permOptions = array_merge(array('IDENTITY_COLUMN' => 'OWNER_ID'), $arOptions); $entitiesSql[strval(CCrmOwnerType::Lead)] = CCrmLead::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Deal)] = CCrmDeal::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Contact)] = CCrmContact::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Company)] = CCrmCompany::BuildPermSql($aliasPrefix, $permType, $permOptions); $entitiesSql[strval(CCrmOwnerType::Invoice)] = CCrmInvoice::BuildPermSql($aliasPrefix, $permType, $permOptions); foreach ($entitiesSql as $entityTypeID => $entitySql) { if (!is_string($entitySql)) { //If $entityPermSql is not string - acces denied. Clear permission SQL and related records will be ignored. unset($entitiesSql[$entityTypeID]); continue; } if ($entitySql !== '') { $entitiesSql[$entityTypeID] = '(' . $aliasPrefix . '.OWNER_TYPE_ID = ' . $entityTypeID . ' AND (' . $entitySql . ') )'; } else { // No permissions check - fetch all related records $entitiesSql[$entityTypeID] = '(' . $aliasPrefix . '.OWNER_TYPE_ID = ' . $entityTypeID . ')'; } } //If $entitiesSql is empty - user does not have permissions at all. if (empty($entitiesSql)) { return false; } $userID = CCrmSecurityHelper::GetCurrentUserID(); if ($userID > 0) { //Allow responsible user to view activity without permissions check. return $aliasPrefix . '.RESPONSIBLE_ID = ' . $userID . ' OR ' . implode(' OR ', $entitiesSql); } else { return implode(' OR ', $entitiesSql); } }
public static function Delete($ID) { global $DB, $APPLICATION; $ID = intval($ID); $arProduct = self::GetByID($ID); if (!is_array($arProduct)) { // Is no exists return true; } $rowsCount = CCrmProductRow::GetList(array(), array('PRODUCT_ID' => $ID), array(), false, array()); if ($rowsCount > 0 || CCrmInvoice::HasProductRows($ID)) { self::RegisterError(GetMessage('CRM_COULD_NOT_DELETE_PRODUCT_ROWS_EXIST', array('#NAME#' => $arProduct['~NAME']))); return false; } foreach (GetModuleEvents('crm', 'OnBeforeCrmProductDelete', true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID)) === false) { return false; } } //$DB->StartTransaction(); //$APPLICATION->ResetException(); // $sql = 'DELETE FROM '.CCrmProduct::TABLE_NAME.' WHERE ID = '.$ID; // if(!$DB->Query($sql, true)) // { // //$DB->Rollback(); // return false; // } CCrmEntityHelper::RemoveCached(self::CACHE_NAME, $ID); if (self::IsIBlockElementExists($ID)) { $element = new CIBlockElement(); if (!$element->Delete($ID)) { //$DB->Rollback(); if ($ex = $APPLICATION->GetException()) { self::RegisterError($ex->GetString()); } return false; } } //$DB->Commit(); foreach (GetModuleEvents('crm', 'OnCrmProductDelete', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID)); } return true; }
} CCrmDeal::SaveProductRows($dealID, array(array('PRODUCT_ID' => intval($arProduct['ID']), 'PRICE' => doubleval($arProduct['PRICE']), 'QUANTITY' => 1))); } } } // Add event require_once "event.demo.php"; $CCrmEvent = new CCrmEvent(); foreach ($arEvents as $ID => $arParams) { $arEvents[$ID]['ID'] = $CCrmEvent->Add($arParams); } // Add relation $arParams = array('COMPANY_ID' => $arCompany['39']['ID'], 'CONTACT_ID' => $arContacts['51']['ID']); $CCrmLead->Update($arLeads['57']['ID'], $arParams); // Add activity require_once "activity.demo.php"; $CCrmActivity = new CCrmActivity(); foreach ($arActivities as $ID => $arParams) { $activityId = $CCrmActivity->Add($arParams["FIELDS"], false, false); CCrmActivity::SaveCommunications($activityId, array($arParams["COMMUNICATIONS"]), $arParams["FIELDS"], false, false); } //Add invoice CCrmInvoice::installDisableSaleEvents(); require_once "invoice.demo.php"; $CCrmInvoice = new CCrmInvoice(); $b_false = false; foreach ($arInvoices as $arInvoice) { $CCrmInvoice->Add($arInvoice, $b_false, WIZARD_SITE_ID); } } COption::SetOptionString("crm", "form_features", "N");
public static function PrepareInvoiceClientInfoFormat($personTypeID) { $personTypeID = intval($personTypeID); if ($personTypeID <= 0) { return ''; } if (!self::$INVOICE_PROPERTY_INFOS) { self::$INVOICE_PROPERTY_INFOS = CCrmInvoice::GetPropertiesInfo(0, true); } $propertyInfos = isset(self::$INVOICE_PROPERTY_INFOS[$personTypeID]) ? self::$INVOICE_PROPERTY_INFOS[$personTypeID] : null; if (!is_array($propertyInfos)) { return ''; } $result = array(); foreach ($propertyInfos as $code => &$fields) { $type = $fields['TYPE']; if ($type !== 'TEXT' && $type !== 'TEXTAREA') { continue; } $result[] = $code; } unset($fields); return implode(',', $result); }